diff --git a/README.md b/README.md index 4b60667..809df7c 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,96 @@ # unisolder -universal soldering controller - a copy of http://dangerousprototypes.com/forum/viewtopic.php?t=7218 + +The intention was to build the most universal soldering controller I can think of. It can drive any low voltage (upto 24V) iron with thermocouple or resistive sensor, in series with the heater, or separate. + +Here is a short list of features: +- power: 9-28V, AC or DC +- 2 separate heater control channels +- 2 independent sensor inputs +- current source on any sensor input 3uA - 12mA, wuth 2 bands (x1, x16) and 256 steps per band +- flexible differential amplifier input selection +- amplifier gain from 0 to 750 in 256 steps +- negative offset selection in 1024 steps +- resistive instrument identification (upto 625 different instruments can be identified by 2 resistors on the connector) +- polynomial floating point voltage/resistance to temperature calculation +- wave shaping to filter out the inductive peaks from series sensor signal +- PID control with power limit +- isolated USB port for firmware updates and live data +- 128x64 OLED display with rich user interface. + +Tested so far with: +- HAKKO T12/T15 (series TC) +- HAKKO FX8801 (PTC) +- PACE TD100 (series TC) +- JBC C245 (series or separate TC) +- JBC C210 (series TC) +- JBC Microtweezers (2 separate heaters, each with series TC) +- WELLER WSP80 (PTC) (This iron was sent to me by a reader of the thread for a previous version of the controller. Thanks, Jaroslaw) +- ERSA RT80 (series PTC/heater resistance) +- various chinese cheap irons with separate TC + +##Update (4 April 2017): +The PC Software is now entirely in C#, the front end is rewritten. Now you can program only the bootloader, and then use the software for firmware updates using the USB connection. The PC software also does not crash anymore when device is unplugged and plugged in the USB or turned on/off, and automatically switches to bootloader and back when uploading new firmware. Also, a legend with checkboxes is added for every data that is displayed on the graph, so you can switch it on or off. There is still pretty much work to be done on it, but at least it is much more functional now. +Added to the firmware are Pace TD100 Black and Weller WMRT profiles, some work is done on several other places. Now the firmware handles better some irons, where there was initial overshoot when heating for the first time or changing the target temperature. + +Some movies: +JBC C245: https://www.youtube.com/watch?v=oTdQB4ywDOA +JBC C210: https://www.youtube.com/watch?v=iyz-EDf-JaY +T12, JBC C210, JBC Microtweezers: https://www.youtube.com/watch?v=-f0KSU0PJzc&t=70s +Chinese T12: https://www.youtube.com/watch?v=u588sh-4thg +Weller WSP80: https://www.youtube.com/watch?v=gd_8w7l8_Bo +Weller WMRT: https://www.youtube.com/watch?v=eHNJuQEw6XU + +The content of this is originaly copied thanks to sparkybg + + http://dangerousprototypes.com/forum/viewtopic.php?t=7218 + +##Connections to different tips/irons: + +1. HAKKO T12: +- Outer shell, and heater negative (middle) terminal connected together to Vout1- and EARTH +- heater positive (bottom terminal) connected to Vout1+ and SENSEA +- 1k resistor between ID and Vout1- +- 5.6k resistor between ID and Vout2- + +2. HAKKO FX8801, HAKKO 907 (original, with PTC sensor): +- Outer shell, PTC negative and heater negative connected to EARTH, Vout1- and SENSEB +- Heater positive connected to Vout1+ +- PTC positive connected to SENSEA +- 1k between ID and Vout1- +- 820ohm between ID and Vout2- + +3. JBC C245: +- Outer shell (green wire) connected to EARTH and SENSEB +- Heater positive(red wire) connected to Vout1- and SENSEA +- Heater negative(blue wire) connected to Vout1+ +- 150ohm between ID and Vout1- +- 5.6k between ID and Vout2- + +4. JBC C210: +- Outer shell (green wire) connected to EARTH and SENSEB +- Heater negative (middle terminal, blue wire) connected to Vout1- +- Heater positive (smaller terminal, red wire) connected to Vout1+ and SENSEA +- 3.0k between ID and Vout1- +- 5.6k between ID and Vout2- + +5. JBC Microtweezers: +- Outer shell of both tips (green wire) connected to EARTH +- Heater 1 negative (blue wire) connected to Vout1- +- Heater 1 positive (red wire) connected to Vout1+ and SENSEA +- Heater 2 negative (brown wire) connected to Vout2- +- Heater 2 positive (yellow wire) connected to Vout2+ and SENSEB +- 1.0k between ID and Vout1- + +6. WELLER WSP80: +- Outer shell, PTC negative and heater negative (white, black and brown wires) connected to EARTH, Vout1- and SENSEB +- Heater positive (blue wire) connected to Vout1+ +- PTC positive (red wire) connected to SENSEA +- 120ohm between ID and Vout1- +- 5.6k between ID and Vout2- + +7. ERSA RT80: +- Outer shell and Heater/PTC negative (pink and white wires) connected to EARTH, Vout1- and SENSEB +- Heater/PTC positive (black wire) connected to Vout1+ and SENSEA +- 300ohm between ID and Vout1- +- 110ohm between ID and Vout2- + diff --git a/README.md~ b/README.md~ new file mode 100644 index 0000000..644ba77 --- /dev/null +++ b/README.md~ @@ -0,0 +1,96 @@ +# unisolder + +The intention was to build the most universal soldering controller I can think of. It can drive any low voltage (upto 24V) iron with thermocouple or resistive sensor, in series with the heater, or separate. + +Here is a short list of features: +- power: 9-28V, AC or DC +- 2 separate heater control channels +- 2 independent sensor inputs +- current source on any sensor input 3uA - 12mA, wuth 2 bands (x1, x16) and 256 steps per band +- flexible differential amplifier input selection +- amplifier gain from 0 to 750 in 256 steps +- negative offset selection in 1024 steps +- resistive instrument identification (upto 625 different instruments can be identified by 2 resistors on the connector) +- polynomial floating point voltage/resistance to temperature calculation +- wave shaping to filter out the inductive peaks from series sensor signal +- PID control with power limit +- isolated USB port for firmware updates and live data +- 128x64 OLED display with rich user interface. + +Tested so far with: +- HAKKO T12/T15 (series TC) +- HAKKO FX8801 (PTC) +- PACE TD100 (series TC) +- JBC C245 (series or separate TC) +- JBC C210 (series TC) +- JBC Microtweezers (2 separate heaters, each with series TC) +- WELLER WSP80 (PTC) (This iron was sent to me by a reader of the thread for a previous version of the controller. Thanks, Jaroslaw) +- ERSA RT80 (series PTC/heater resistance) +- various chinese cheap irons with separate TC + +##Update (4 April 2017): +The PC Software is now entirely in C#, the front end is rewritten. Now you can program only the bootloader, and then use the software for firmware updates using the USB connection. The PC software also does not crash anymore when device is unplugged and plugged in the USB or turned on/off, and automatically switches to bootloader and back when uploading new firmware. Also, a legend with checkboxes is added for every data that is displayed on the graph, so you can switch it on or off. There is still pretty much work to be done on it, but at least it is much more functional now. +Added to the firmware are Pace TD100 Black and Weller WMRT profiles, some work is done on several other places. Now the firmware handles better some irons, where there was initial overshoot when heating for the first time or changing the target temperature. + +Some movies: +JBC C245: https://www.youtube.com/watch?v=oTdQB4ywDOA +JBC C210: https://www.youtube.com/watch?v=iyz-EDf-JaY +T12, JBC C210, JBC Microtweezers: https://www.youtube.com/watch?v=-f0KSU0PJzc&t=70s +Chinese T12: https://www.youtube.com/watch?v=u588sh-4thg +Weller WSP80: https://www.youtube.com/watch?v=gd_8w7l8_Bo +Weller WMRT: https://www.youtube.com/watch?v=eHNJuQEw6XU + +The content of this is originaly copied + + http://dangerousprototypes.com/forum/viewtopic.php?t=7218 + +##Connections to different tips/irons: + +1. HAKKO T12: +- Outer shell, and heater negative (middle) terminal connected together to Vout1- and EARTH +- heater positive (bottom terminal) connected to Vout1+ and SENSEA +- 1k resistor between ID and Vout1- +- 5.6k resistor between ID and Vout2- + +2. HAKKO FX8801, HAKKO 907 (original, with PTC sensor): +- Outer shell, PTC negative and heater negative connected to EARTH, Vout1- and SENSEB +- Heater positive connected to Vout1+ +- PTC positive connected to SENSEA +- 1k between ID and Vout1- +- 820ohm between ID and Vout2- + +3. JBC C245: +- Outer shell (green wire) connected to EARTH and SENSEB +- Heater positive(red wire) connected to Vout1- and SENSEA +- Heater negative(blue wire) connected to Vout1+ +- 150ohm between ID and Vout1- +- 5.6k between ID and Vout2- + +4. JBC C210: +- Outer shell (green wire) connected to EARTH and SENSEB +- Heater negative (middle terminal, blue wire) connected to Vout1- +- Heater positive (smaller terminal, red wire) connected to Vout1+ and SENSEA +- 3.0k between ID and Vout1- +- 5.6k between ID and Vout2- + +5. JBC Microtweezers: +- Outer shell of both tips (green wire) connected to EARTH +- Heater 1 negative (blue wire) connected to Vout1- +- Heater 1 positive (red wire) connected to Vout1+ and SENSEA +- Heater 2 negative (brown wire) connected to Vout2- +- Heater 2 positive (yellow wire) connected to Vout2+ and SENSEB +- 1.0k between ID and Vout1- + +6. WELLER WSP80: +- Outer shell, PTC negative and heater negative (white, black and brown wires) connected to EARTH, Vout1- and SENSEB +- Heater positive (blue wire) connected to Vout1+ +- PTC positive (red wire) connected to SENSEA +- 120ohm between ID and Vout1- +- 5.6k between ID and Vout2- + +7. ERSA RT80: +- Outer shell and Heater/PTC negative (pink and white wires) connected to EARTH, Vout1- and SENSEB +- Heater/PTC positive (black wire) connected to Vout1+ and SENSEA +- 300ohm between ID and Vout1- +- 110ohm between ID and Vout2- + diff --git a/hardware/bom_list.xls b/hardware/bom_list.xls new file mode 100644 index 0000000..69a4d49 Binary files /dev/null and b/hardware/bom_list.xls differ diff --git a/hardware/gerber/unisolder52_back.gbl b/hardware/gerber/unisolder52_back.gbl new file mode 100644 index 0000000..14fc3a0 --- /dev/null +++ b/hardware/gerber/unisolder52_back.gbl @@ -0,0 +1,4599 @@ +%FSTAX23Y23*% +%MOIN*% +%SFA1B1*% + +%IPPOS*% +%AMD59* +4,1,8,0.068900,-0.055100,0.068900,0.055100,0.055100,0.068900,-0.055100,0.068900,-0.068900,0.055100,-0.068900,-0.055100,-0.055100,-0.068900,0.055100,-0.068900,0.068900,-0.055100,0.0* +1,1,0.027560,0.055100,-0.055100* +1,1,0.027560,0.055100,0.055100* +1,1,0.027560,-0.055100,0.055100* +1,1,0.027560,-0.055100,-0.055100* +% +%AMD60* +4,1,8,-0.029500,0.020700,-0.029500,-0.020700,-0.020700,-0.029500,0.020700,-0.029500,0.029500,-0.020700,0.029500,0.020700,0.020700,0.029500,-0.020700,0.029500,-0.029500,0.020700,0.0* +1,1,0.017720,-0.020700,0.020700* +1,1,0.017720,-0.020700,-0.020700* +1,1,0.017720,0.020700,-0.020700* +1,1,0.017720,0.020700,0.020700* +% +%AMD62* +4,1,8,0.025500,0.036400,-0.025500,0.036400,-0.036400,0.025500,-0.036400,-0.025500,-0.025500,-0.036400,0.025500,-0.036400,0.036400,-0.025500,0.036400,0.025500,0.025500,0.036400,0.0* +1,1,0.021860,0.025500,0.025500* +1,1,0.021860,-0.025500,0.025500* +1,1,0.021860,-0.025500,-0.025500* +1,1,0.021860,0.025500,-0.025500* +% +%AMD65* +4,1,8,0.055100,-0.038600,0.055100,0.038600,0.038600,0.055100,-0.038600,0.055100,-0.055100,0.038600,-0.055100,-0.038600,-0.038600,-0.055100,0.038600,-0.055100,0.055100,-0.038600,0.0* +1,1,0.033080,0.038600,-0.038600* +1,1,0.033080,0.038600,0.038600* +1,1,0.033080,-0.038600,0.038600* +1,1,0.033080,-0.038600,-0.038600* +% +%AMD66* +4,1,8,-0.017500,-0.035000,0.017500,-0.035000,0.035000,-0.017500,0.035000,0.017500,0.017500,0.035000,-0.017500,0.035000,-0.035000,0.017500,-0.035000,-0.017500,-0.017500,-0.035000,0.0* +1,1,0.035000,-0.017500,-0.017500* +1,1,0.035000,0.017500,-0.017500* +1,1,0.035000,0.017500,0.017500* +1,1,0.035000,-0.017500,0.017500* +% +%AMD70* +4,1,8,0.043800,0.007700,0.007700,0.043800,-0.007700,0.043800,-0.043800,0.007700,-0.043800,-0.007700,-0.007700,-0.043800,0.007700,-0.043800,0.043800,-0.007700,0.043800,0.007700,0.0* +1,1,0.021860,0.036100,0.000000* +1,1,0.021860,0.000000,0.036100* +1,1,0.021860,-0.036100,0.000000* +1,1,0.021860,0.000000,-0.036100* +% +%ADD36C,0.020000*% +%ADD39C,0.050000*% +%ADD40C,0.100000*% +%ADD41C,0.110240*% +%ADD45C,0.200000*% +%ADD49C,0.160000*% +%ADD50R,0.246060X0.167320*% +%ADD55O,0.118110X0.078740*% +%ADD56C,0.070000*% +%ADD57C,0.125200*% +%ADD58O,0.078740X0.118110*% +G04~CAMADD=59~8~0.0~0.0~1378.0~1378.0~137.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~1378.0~1378.0* +%ADD59D59*% +G04~CAMADD=60~8~0.0~0.0~590.6~590.6~88.6~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~590.0~590.0* +%ADD60D60*% +%ADD61C,0.059060*% +G04~CAMADD=62~8~0.0~0.0~728.4~728.4~109.3~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~728.4~728.4* +%ADD62D62*% +%ADD63C,0.072840*% +%ADD64C,0.110240*% +G04~CAMADD=65~8~0.0~0.0~1102.4~1102.4~165.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~1102.0~1102.0* +%ADD65D65*% +G04~CAMADD=66~8~0.0~0.0~700.0~700.0~175.0~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~700.0~700.0* +%ADD66D66*% +%ADD67R,0.059060X0.059060*% +%ADD68C,0.059060*% +%ADD69C,0.314000*% +G04~CAMADD=70~8~0.0~0.0~728.4~728.4~109.3~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~315.0~940.0~939.0* +%ADD70D70*% +%ADD71C,0.050000*% +%ADD72C,0.196850*% +%LNunisolder52_back-1*% +%LPD*% +G36* +X06889Y04124D02* +X06879Y04114D01* +X06692* +X06584Y04222* +Y04537* +X06604Y04557* +X06889* +Y04124* +G37* +G36* +X06781Y03316D02* +X06633Y03169D01* +Y03018* +X06619Y03006* +X06603Y02987* +X0659Y02967* +X06579Y02945* +X06571Y02922* +X06566Y02898* +X06565Y02874* +X06566Y02849* +X06571Y02825* +X06579Y02802* +X06586Y02787* +X06515Y02716* +X062* +X06161Y02755* +Y02874* +X0622Y02933* +X06222* +X06237Y02926* +X06254Y02922* +X06271Y02921* +X06289Y02922* +X06305Y02926* +X06321Y02933* +X06336Y02942* +X06349Y02953* +X06361Y02966* +X0637Y02981* +X06372Y02988* +X06377* +X06378Y02986* +X06386Y02976* +X06396Y02968* +X06408Y02963* +X06421Y02962* +X06434Y02963* +X06446Y02968* +X06456Y02976* +X06464Y02986* +X06469Y02998* +X0647Y03011* +Y03051* +X06469Y03064* +X06464Y03076* +X06456Y03085* +Y03142* +X06658Y03343* +X06669Y03357* +X06678Y03371* +X06702Y03395* +X06781Y03316* +G37* +G36* +X06619Y06057D02* +D01* +X06603Y06038* +X0659Y06018* +X06579Y05996* +X06574Y05983* +X06569Y05983* +X06563Y05993* +X06555Y06004* +X06544Y06012* +X06536Y06017* +X0653Y06021* +X06516Y06028* +X06501Y06033* +X06486Y06035* +X0647Y06033* +X06455Y06028* +X06441Y06021* +X06436Y06017* +X06427Y06012* +X06417Y06004* +X06408Y05993* +X06405Y05987* +X06388Y0597* +X06378Y05958* +X0637Y05944* +X06366Y05929* +X06364Y05913* +Y05913* +Y05785* +X06347Y05767* +X06343Y0577* +X06348Y05781* +X06353Y05797* +X06355Y05813* +Y05932* +X06357Y05941* +X06359Y05954* +X06357Y05968* +X06353Y05981* +X06347Y05993* +X06342Y05999* +X0634Y06002* +X0633Y06015* +X06317Y06025* +X06302Y06033* +X06286Y06038* +X06269Y0604* +X05984* +X05967Y06038* +X05951Y06033* +X05936Y06025* +X05923Y06015* +X05911Y06003* +X05901Y0599* +X05893Y05975* +X05888Y05959* +X05886Y05942* +Y0575* +X05886Y0575* +Y0572* +X05882Y05718* +X05821Y05778* +Y05789* +X0582Y05801* +X05815Y05812* +X05807Y05822* +X05798Y0583* +X05786Y05834* +X05774Y05836* +X05697* +X05685Y05834* +X05674Y0583* +X05664Y05822* +X05656Y05812* +X05652Y05801* +X0565Y05789* +Y05712* +X05652Y057* +X05656Y05688* +X05664Y05679* +X05674Y05671* +X05685Y05666* +X05697Y05665* +X05708* +X05814Y05558* +X05826Y05548* +X0584Y05541* +X05855Y05536* +X05871Y05535* +X06308* +X06324Y05536* +X06339Y05541* +X06353Y05548* +X06365Y05558* +X06481Y05674* +X06492Y0568* +X06505Y05691* +X06516Y05704* +X06523Y05719* +X06528Y05735* +X0653Y05751* +X06528Y05768* +X06525Y05779* +Y0588* +X06538Y05893* +X06544Y05896* +X06555Y05905* +X0656Y05912* +X06565Y0591* +X06566Y059* +X06571Y05876* +X06579Y05853* +X0659Y05831* +X06603Y05811* +X06619Y05793* +X06638Y05776* +X06658Y05763* +X0668Y05752* +X06703Y05744* +X06719Y05741* +X06719Y05741* +X06718Y05736* +X06716* +X06707Y05734* +X06699Y05729* +X06694Y05721* +X06693Y05716* +X06682Y05703* +X06673Y05689* +X06666Y05673* +X06662Y05656* +X06661Y05639* +Y05482* +X06298Y05119* +X06208* +X06191Y05118* +X06175Y05114* +X06159Y05107* +X06144Y05098* +X06131Y05087* +X0612Y05074* +X06111Y0506* +X06105Y05044* +X06101Y05027* +X061Y0501* +X06101Y04994* +X06105Y04977* +X06111Y04961* +X0612Y04947* +X06131Y04934* +X06144Y04923* +X06159Y04914* +X06175Y04907* +X06191Y04903* +X06208Y04902* +X06443* +X0646Y04903* +X06477Y04907* +X06493Y04914* +X06507Y04923* +X0652Y04934* +X06531Y04947* +X0654Y04961* +X06547Y04977* +X06551Y04994* +X06552Y0501* +X06551Y05027* +X06547Y05044* +X06542Y05056* +X06798Y05311* +X06826* +X06835Y05313* +X06843Y05318* +X06849Y05326* +X0685Y05336* +Y05365* +X06859Y05375* +X06868Y05389* +X06874Y05405* +X06878Y05422* +X06879Y05423* +X0688Y05429* +X06881Y05447* +Y05639* +X0688Y05656* +X06876Y05673* +X06869Y05689* +X0686Y05703* +X0685Y05716* +X06849Y05721* +X06843Y05729* +X06835Y05734* +X06826Y05736* +X06822* +X06821Y05737* +X06809Y05742* +X06809Y05747* +X06823Y05752* +X06845Y05763* +X06865Y05776* +X06884Y05793* +X06889Y05787* +Y04567* +X06604* +X066Y04566* +X06597Y04564* +X06577Y04544* +X06575Y04541* +X06574Y04537* +Y04222* +X06575Y04218* +X06577Y04215* +X06681Y04111* +Y03976* +X06407* +X06403Y03975* +X064Y03973* +X0638Y03953* +X06378Y0395* +X06377Y03946* +Y03631* +X06378Y03628* +X0638Y03624* +X0647Y03534* +Y03467* +X06193Y0319* +X06182Y03177* +X06173Y03163* +X06167Y03147* +X06163Y0313* +X06161Y03113* +Y03031* +X06163Y03014* +X06167Y02997* +X06173Y02981* +X06182Y02966* +X06193Y02953* +X06207Y02942* +X06208Y02941* +X06209Y02936* +X06154Y02881* +X06152Y02877* +X06151Y02874* +Y02755* +X06152Y02752* +X06154Y02748* +X06181Y02721* +X0618Y02716* +X04271* +X04246Y02741* +X04262Y0276* +X04276Y0278* +X04286Y02802* +X04294Y02825* +X04299Y02849* +X04301Y02874* +X04299Y02898* +X04294Y02922* +X04286Y02945* +X04276Y02967* +X04262Y02987* +X04246Y03006* +X04227Y03022* +X04207Y03035* +X04185Y03046* +X04162Y03054* +X04138Y03059* +X04114Y0306* +X04089Y03059* +X04065Y03054* +X04042Y03046* +X0402Y03035* +X04Y03022* +X03982Y03006* +X03956Y03031* +Y04547* +X03982Y04572* +X04Y04556* +X0402Y04542* +X04042Y04532* +X04065Y04524* +X04089Y04519* +X04114Y04517* +X04138Y04519* +X04162Y04524* +X04185Y04532* +X04207Y04542* +X04227Y04556* +X04246Y04572* +X04262Y0459* +X04276Y04611* +X04286Y04633* +X04294Y04656* +X04299Y0468* +X04301Y04704* +X04299Y04729* +X04294Y04753* +X04286Y04776* +X04276Y04798* +X04262Y04818* +X04246Y04836* +X04271Y04862* +X05265* +X05334Y04931* +Y05994* +X05423Y06082* +X06594* +X06619Y06057* +G37* +G36* +X06681Y03551D02* +X06653Y03523D01* +X06496* +X06387Y03631* +Y03946* +X06407Y03966* +X06681* +Y03551* +G37* +%LNunisolder52_back-2*% +%LPC*% +G36* +X04525Y03292D02* +X0452Y03292D01* +X04507Y03288* +X04494Y03281* +X04483Y03272* +X04474Y03261* +X04467Y03248* +X04463Y03235* +X04463Y0323* +X04525* +Y03292* +G37* +G36* +X05311Y03278D02* +X05301Y03277D01* +X05293Y03273* +X05286Y03267* +X0528Y0326* +X05277Y03252* +X05275Y03243* +X05277Y03234* +X0528Y03225* +X05286Y03218* +X05293Y03212* +X05301Y03209* +X05311Y03207* +X0532Y03209* +X05328Y03212* +X05335Y03217* +X05354* +X05363Y03209* +X05362Y03202* +X05363Y03193* +X05367Y03185* +X05372Y03177* +X0538Y03172* +X05388Y03168* +X05397Y03167* +X05406Y03168* +X05415Y03172* +X05422Y03177* +X05428Y03185* +X05431Y03193* +X05432Y03202* +X05431Y03211* +X05428Y0322* +X05422Y03227* +X05415Y03233* +X05406Y03236* +X05397Y03237* +X05392Y03237* +X05377Y03252* +X0537Y03256* +X05363Y03258* +X05342* +X05341Y0326* +X05335Y03267* +X05328Y03273* +X0532Y03277* +X05311Y03278* +G37* +G36* +X04925Y03292D02* +X0492Y03292D01* +X04907Y03288* +X04894Y03281* +X04883Y03272* +X04874Y03261* +X04867Y03248* +X04863Y03235* +X04863Y0323* +X04925* +Y03292* +G37* +G36* +X04545D02* +Y0323D01* +X04606* +X04606Y03235* +X04602Y03248* +X04595Y03261* +X04586Y03272* +X04575Y03281* +X04562Y03288* +X04549Y03292* +X04545Y03292* +G37* +G36* +X05006Y0321D02* +X04945D01* +Y03148* +X04949Y03149* +X04962Y03153* +X04975Y0316* +X04986Y03169* +X04995Y0318* +X05002Y03193* +X05006Y03206* +X05006Y0321* +G37* +G36* +X04525D02* +X04463D01* +X04463Y03206* +X04467Y03193* +X04474Y0318* +X04483Y03169* +X04494Y0316* +X04507Y03153* +X0452Y03149* +X04525Y03148* +Y0321* +G37* +G36* +X05412Y03079D02* +X05403Y03078D01* +X05394Y03074* +X05387Y03069* +X05381Y03061* +X05378Y03053* +X05377Y03044* +X05378Y03038* +X05317Y02978* +X05312Y02981* +X05302Y02985* +X05292Y02987* +X05282Y02985* +X05272Y02981* +X05264Y02975* +X05258Y02967* +X05254Y02957* +X05253Y02947* +X05254Y02937* +X05258Y02927* +X05264Y02919* +X05272Y02913* +X05282Y02909* +X05292Y02907* +X05302Y02909* +X05312Y02913* +X0532Y02919* +X05327Y02927* +X05329Y02932* +X05329Y02933* +X05348Y02952* +X05353Y02949* +X05353Y02947* +X05354Y02937* +X05358Y02927* +X05364Y02919* +X05372Y02913* +X05382Y02909* +X05392Y02907* +X05402Y02909* +X05412Y02913* +X0542Y02919* +X05427Y02927* +X05431Y02937* +X05432Y02947* +X05431Y02957* +X05427Y02967* +X0542Y02975* +X05412Y02981* +X05402Y02985* +X05392Y02987* +X0539Y02986* +X05388Y02991* +X05406Y03009* +X05412Y03009* +X05421Y0301* +X05429Y03013* +X05437Y03019* +X05442Y03026* +X05446Y03035* +X05447Y03044* +X05446Y03053* +X05442Y03061* +X05437Y03069* +X05429Y03074* +X05421Y03078* +X05412Y03079* +G37* +G36* +X04925Y0321D02* +X04863D01* +X04863Y03206* +X04867Y03193* +X04874Y0318* +X04883Y03169* +X04894Y0316* +X04907Y03153* +X0492Y03149* +X04925Y03148* +Y0321* +G37* +G36* +X04606D02* +X04545D01* +Y03148* +X04549Y03149* +X04562Y03153* +X04575Y0316* +X04586Y03169* +X04595Y0318* +X04602Y03193* +X04606Y03206* +X04606Y0321* +G37* +G36* +X04046Y03497D02* +X04037D01* +X04024Y03495* +X04012Y0349* +X04001Y03482* +X03993Y03472* +X03988Y0346* +X03988Y03457* +X04046* +Y03497* +G37* +G36* +X04838Y03488D02* +X04803D01* +Y03452* +X04805Y03452* +X04816Y03457* +X04826Y03464* +X04833Y03474* +X04838Y03485* +X04838Y03488* +G37* +G36* +X04076Y03497D02* +X04066D01* +Y03457* +X04124* +X04124Y0346* +X04119Y03472* +X04111Y03482* +X04101Y0349* +X04089Y03495* +X04076Y03497* +G37* +G36* +X04803Y03543D02* +Y03508D01* +X04838* +X04838Y0351* +X04833Y03521* +X04826Y03531* +X04816Y03538* +X04805Y03543* +X04803Y03543* +G37* +G36* +X04783D02* +X04781Y03543D01* +X04769Y03538* +X0476Y03531* +X04752Y03521* +X04748Y0351* +X04747Y03508* +X04783* +Y03543* +G37* +G36* +Y03488D02* +X04747D01* +X04748Y03485* +X04752Y03474* +X0476Y03464* +X04769Y03457* +X04781Y03452* +X04783Y03452* +Y03488* +G37* +G36* +X04046Y03437D02* +X03988D01* +X03988Y03434* +X03993Y03422* +X04001Y03412* +X04012Y03404* +X04024Y03399* +X04037Y03397* +X04046* +Y03437* +G37* +G36* +X04945Y03292D02* +Y0323D01* +X05006* +X05006Y03235* +X05002Y03248* +X04995Y03261* +X04986Y03272* +X04975Y03281* +X04962Y03288* +X04949Y03292* +X04945Y03292* +G37* +G36* +X04124Y03437D02* +X04066D01* +Y03397* +X04076* +X04089Y03399* +X04101Y03404* +X04111Y03412* +X04119Y03422* +X04124Y03434* +X04124Y03437* +G37* +G36* +X05015Y03544D02* +X04964D01* +X04956Y03543* +X04949Y03538* +X04945Y03531* +X04943Y03523* +Y03472* +X04945Y03464* +X04949Y03457* +X04956Y03452* +X04964Y03451* +X05015* +X05023Y03452* +X0503Y03457* +X05035Y03464* +X05036Y03472* +Y03523* +X05035Y03531* +X0503Y03538* +X05023Y03543* +X05015Y03544* +G37* +G36* +X04292Y03496D02* +X04253D01* +X0424Y03495* +X04228Y0349* +X04218Y03482* +X0421Y03472* +X04205Y0346* +X04203Y03447* +X04205Y03434* +X0421Y03422* +X04218Y03412* +X04228Y03404* +X0424Y03399* +X04253Y03397* +X04292* +X04305Y03399* +X04317Y03404* +X04328Y03412* +X04335Y03422* +X0434Y03434* +X04342Y03447* +X0434Y0346* +X04335Y03472* +X04328Y03482* +X04317Y0349* +X04305Y03495* +X04292Y03496* +G37* +G36* +X05592Y02887D02* +X05582Y02885D01* +X05572Y02881* +X05564Y02875* +X05558Y02867* +X05554Y02857* +X05553Y02847* +X05554Y02837* +X05558Y02827* +X05564Y02819* +X05572Y02813* +X05582Y02809* +X05592Y02807* +X05602Y02809* +X05612Y02813* +X0562Y02819* +X05627Y02827* +X05631Y02837* +X05632Y02847* +X05631Y02857* +X05627Y02867* +X0562Y02875* +X05612Y02881* +X05602Y02885* +X05592Y02887* +G37* +G36* +X05492D02* +X05482Y02885D01* +X05472Y02881* +X05464Y02875* +X05458Y02867* +X05454Y02857* +X05453Y02847* +X05454Y02837* +X05458Y02827* +X05464Y02819* +X05472Y02813* +X05482Y02809* +X05492Y02807* +X05502Y02809* +X05512Y02813* +X0552Y02819* +X05527Y02827* +X05531Y02837* +X05532Y02847* +X05531Y02857* +X05527Y02867* +X0552Y02875* +X05512Y02881* +X05502Y02885* +X05492Y02887* +G37* +G36* +X0461Y02916D02* +X04598Y02914D01* +X04587Y0291* +X04578Y02902* +X0457Y02893* +X04566Y02882* +X04564Y0287* +X04566Y02859* +X0457Y02848* +X04578Y02838* +X04587Y02831* +X04598Y02827* +X0461Y02825* +X04621Y02827* +X04632Y02831* +X04641Y02838* +X04649Y02848* +X04653Y02859* +X04655Y0287* +X04653Y02882* +X04649Y02893* +X04641Y02902* +X04632Y0291* +X04621Y02914* +X0461Y02916* +G37* +G36* +X047Y0286D02* +X04665D01* +X04666Y02859* +X0467Y02848* +X04677Y02838* +X04687Y02831* +X04698Y02827* +X047Y02826* +Y0286* +G37* +G36* +X0481Y02916D02* +X04798Y02914D01* +X04787Y0291* +X04778Y02902* +X0477Y02893* +X04766Y02882* +X04764Y0287* +X04766Y02859* +X0477Y02848* +X04778Y02838* +X04787Y02831* +X04798Y02827* +X0481Y02825* +X04821Y02827* +X04832Y02831* +X04841Y02838* +X04849Y02848* +X04853Y02859* +X04855Y0287* +X04853Y02882* +X04849Y02893* +X04841Y02902* +X04832Y0291* +X04821Y02914* +X0481Y02916* +G37* +G36* +X05392Y02887D02* +X05382Y02885D01* +X05372Y02881* +X05364Y02875* +X05358Y02867* +X05354Y02857* +X05353Y02847* +X05354Y02837* +X05358Y02827* +X05364Y02819* +X05372Y02813* +X05382Y02809* +X05392Y02807* +X05402Y02809* +X05412Y02813* +X0542Y02819* +X05427Y02827* +X05431Y02837* +X05432Y02847* +X05431Y02857* +X05427Y02867* +X0542Y02875* +X05412Y02881* +X05402Y02885* +X05392Y02887* +G37* +G36* +X0586Y02896D02* +X05848Y02895D01* +X05838Y0289* +X05828Y02883* +X05821Y02873* +X05816Y02863* +X05815Y02851* +X05816Y02839* +X05821Y02828* +X05828Y02819* +X05838Y02812* +X05848Y02807* +X0586Y02806* +X05872Y02807* +X05883Y02812* +X05892Y02819* +X05899Y02828* +X05904Y02839* +X05905Y02851* +X05904Y02863* +X05899Y02873* +X05892Y02883* +X05883Y0289* +X05872Y02895* +X0586Y02896* +G37* +G36* +X06421Y02884D02* +X06408Y02882D01* +X06396Y02877* +X06386Y02869* +X06378Y02859* +X06373Y02847* +X06371Y02834* +Y02795* +X06373Y02782* +X06378Y0277* +X06386Y0276* +X06396Y02752* +X06408Y02747* +X06421Y02745* +X06434Y02747* +X06446Y02752* +X06456Y0276* +X06464Y0277* +X06469Y02782* +X0647Y02795* +Y02834* +X06469Y02847* +X06464Y02859* +X06456Y02869* +X06446Y02877* +X06434Y02882* +X06421Y02884* +G37* +G36* +X0596Y02896D02* +X05948Y02895D01* +X05938Y0289* +X05928Y02883* +X05921Y02873* +X05916Y02863* +X05915Y02851* +X05916Y02839* +X05921Y02828* +X05928Y02819* +X05938Y02812* +X05948Y02807* +X0596Y02806* +X05972Y02807* +X05983Y02812* +X05992Y02819* +X05999Y02828* +X06004Y02839* +X06005Y02851* +X06004Y02863* +X05999Y02873* +X05992Y02883* +X05983Y0289* +X05972Y02895* +X0596Y02896* +G37* +G36* +X05292Y02887D02* +X05282Y02885D01* +X05272Y02881* +X05264Y02875* +X05258Y02867* +X05254Y02857* +X05253Y02847* +X05254Y02837* +X05258Y02827* +X05264Y02819* +X05272Y02813* +X05282Y02809* +X05292Y02807* +X05302Y02809* +X05312Y02813* +X0532Y02819* +X05327Y02827* +X05331Y02837* +X05332Y02847* +X05331Y02857* +X05327Y02867* +X0532Y02875* +X05312Y02881* +X05302Y02885* +X05292Y02887* +G37* +G36* +X06078Y02896D02* +X06043D01* +X06035Y02895* +X06029Y02892* +X06023Y02888* +X06019Y02882* +X06016Y02876* +X06015Y02868* +Y02833* +X06016Y02826* +X06019Y0282* +X06023Y02814* +X06029Y02809* +X06035Y02807* +X06043Y02806* +X06078* +X06085Y02807* +X06091Y02809* +X06097Y02814* +X06102Y0282* +X06104Y02826* +X06105Y02833* +Y02868* +X06104Y02876* +X06102Y02882* +X06097Y02888* +X06091Y02892* +X06085Y02895* +X06078Y02896* +G37* +G36* +X0475Y0296D02* +X04715D01* +X04716Y02959* +X0472Y02948* +X04727Y02938* +X04737Y02931* +X04748Y02927* +X0475Y02926* +Y0296* +G37* +G36* +X0486Y03016D02* +X04848Y03014D01* +X04837Y0301* +X04828Y03002* +X0482Y02993* +X04816Y02982* +X04814Y0297* +X04816Y02959* +X0482Y02948* +X04828Y02938* +X04837Y02931* +X04848Y02927* +X0486Y02925* +X04871Y02927* +X04882Y02931* +X04891Y02938* +X04899Y02948* +X04903Y02959* +X04905Y0297* +X04903Y02982* +X04899Y02993* +X04891Y03002* +X04882Y0301* +X04871Y03014* +X0486Y03016* +G37* +G36* +X04804Y0296D02* +X0477D01* +Y02926* +X04771Y02927* +X04782Y02931* +X04792Y02938* +X04799Y02948* +X04803Y02959* +X04804Y0296* +G37* +G36* +X0477Y03015D02* +Y0298D01* +X04804* +X04803Y02982* +X04799Y02993* +X04792Y03003* +X04782Y0301* +X04771Y03014* +X0477Y03015* +G37* +G36* +X0475D02* +X04748Y03014D01* +X04737Y0301* +X04727Y03003* +X0472Y02993* +X04716Y02982* +X04715Y0298* +X0475* +Y03015* +G37* +G36* +X0466Y03016D02* +X04648Y03014D01* +X04637Y0301* +X04628Y03002* +X0462Y02993* +X04616Y02982* +X04614Y0297* +X04616Y02959* +X0462Y02948* +X04628Y02938* +X04637Y02931* +X04648Y02927* +X0466Y02925* +X04671Y02927* +X04682Y02931* +X04691Y02938* +X04699Y02948* +X04703Y02959* +X04705Y0297* +X04703Y02982* +X04699Y02993* +X04691Y03002* +X04682Y0301* +X04671Y03014* +X0466Y03016* +G37* +G36* +X047Y02915D02* +X04698Y02914D01* +X04687Y0291* +X04677Y02903* +X0467Y02893* +X04666Y02882* +X04665Y0288* +X047* +Y02915* +G37* +G36* +X04754Y0286D02* +X0472D01* +Y02826* +X04721Y02827* +X04732Y02831* +X04742Y02838* +X04749Y02848* +X04753Y02859* +X04754Y0286* +G37* +G36* +X0472Y02915D02* +Y0288D01* +X04754* +X04753Y02882* +X04749Y02893* +X04742Y02903* +X04732Y0291* +X04721Y02914* +X0472Y02915* +G37* +G36* +X05592Y02987D02* +X05582Y02985D01* +X05572Y02981* +X05564Y02975* +X05558Y02967* +X05554Y02957* +X05553Y02947* +X05554Y02937* +X05558Y02927* +X05564Y02919* +X05572Y02913* +X05582Y02909* +X05592Y02907* +X05602Y02909* +X05612Y02913* +X0562Y02919* +X05627Y02927* +X05631Y02937* +X05632Y02947* +X05631Y02957* +X05627Y02967* +X0562Y02975* +X05612Y02981* +X05602Y02985* +X05592Y02987* +G37* +G36* +X05492D02* +X05482Y02985D01* +X05472Y02981* +X05464Y02975* +X05458Y02967* +X05454Y02957* +X05453Y02947* +X05454Y02937* +X05458Y02927* +X05464Y02919* +X05472Y02913* +X05482Y02909* +X05492Y02907* +X05502Y02909* +X05512Y02913* +X0552Y02919* +X05527Y02927* +X05531Y02937* +X05532Y02947* +X05531Y02957* +X05527Y02967* +X0552Y02975* +X05512Y02981* +X05502Y02985* +X05492Y02987* +G37* +G36* +X06269Y03834D02* +X0626Y03833D01* +X06252Y03829* +X06244Y03824* +X06239Y03816* +X06235Y03808* +X06234Y03799* +X06235Y0379* +X06239Y03781* +X06244Y03774* +X06249Y0377* +Y03562* +X0625Y03555* +X06255Y03549* +X06254Y03543* +X06255Y03534* +X06258Y03525* +X06264Y03518* +X06271Y03512* +X0628Y03509* +X06289Y03508* +X06298Y03509* +X06306Y03512* +X06314Y03518* +X06319Y03525* +X06323Y03534* +X06324Y03543* +X06323Y03552* +X06319Y0356* +X06314Y03568* +X06306Y03573* +X06298Y03577* +X06289Y03578* +Y0377* +X06294Y03774* +X063Y03781* +X06303Y0379* +X06304Y03799* +X06303Y03808* +X063Y03816* +X06294Y03824* +X06287Y03829* +X06278Y03833* +X06269Y03834* +G37* +G36* +X05962Y04999D02* +X05907D01* +X05908Y04996* +X05911Y04984* +X05918Y04972* +X05926Y04962* +X05936Y04954* +X05947Y04948* +X05959Y04944* +X05962Y04944* +Y04999* +G37* +G36* +X058D02* +X05746D01* +Y04944* +X05748Y04944* +X05761Y04948* +X05772Y04954* +X05782Y04962* +X0579Y04972* +X05796Y04984* +X058Y04996* +X058Y04999* +G37* +G36* +X06036D02* +X05982D01* +Y04944* +X05985Y04944* +X05997Y04948* +X06008Y04954* +X06018Y04962* +X06026Y04972* +X06032Y04984* +X06036Y04996* +X06036Y04999* +G37* +G36* +X05726Y05073D02* +X05723Y05073D01* +X05711Y05069* +X05699Y05063* +X05689Y05055* +X05681Y05045* +X05675Y05034* +X05672Y05021* +X05671Y05019* +X05726* +Y05073* +G37* +G36* +X05537Y05149D02* +X0546D01* +X05453Y05148* +X05447Y05145* +X05441Y05141* +X05437Y05135* +X05434Y05129* +X05433Y05122* +Y05045* +X05434Y05038* +X05437Y05031* +X05441Y05026* +X05447Y05022* +X05453Y05019* +X0546Y05018* +X05537* +X05544Y05019* +X0555Y05022* +X05556Y05026* +X0556Y05031* +X05563Y05038* +X05564Y05045* +Y05122* +X05563Y05129* +X0556Y05135* +X05556Y05141* +X0555Y05145* +X05544Y05148* +X05537Y05149* +G37* +G36* +X05168Y04731D02* +X05168Y04731D01* +X05158Y04727* +X0515Y04721* +X05143Y04712* +X0514Y04703* +X05139Y04702* +X05168* +Y04731* +G37* +G36* +X05217Y04682D02* +X05139D01* +X0514Y04682* +X05143Y04672* +X0515Y04664* +X05157Y04658* +X05157Y04656* +X05156Y04653* +X0515Y04652* +X05144Y04648* +X0514Y04642* +X05138Y04634* +Y04593* +X0514Y04586* +X05144Y0458* +X0515Y04575* +X05157Y04574* +X05199* +X05206Y04575* +X05212Y0458* +X05216Y04586* +X05218Y04593* +Y04634* +X05216Y04642* +X05212Y04648* +X05206Y04652* +X052Y04653* +X05199Y04656* +X05199Y04658* +X05206Y04664* +X05213Y04672* +X05217Y04682* +X05217Y04682* +G37* +G36* +X05188Y04731D02* +Y04702D01* +X05217* +X05217Y04703* +X05213Y04712* +X05206Y04721* +X05198Y04727* +X05188Y04731* +X05188Y04731* +G37* +G36* +X05726Y04999D02* +X05671D01* +X05672Y04996* +X05675Y04984* +X05681Y04972* +X05689Y04962* +X05699Y04954* +X05711Y04948* +X05723Y04944* +X05726Y04944* +Y04999* +G37* +G36* +X06771Y05171D02* +X06754Y05169D01* +X06737Y05165* +X06721Y05159* +X06706Y0515* +X06693Y05138* +X06682Y05125* +X06673Y0511* +X06666Y05094* +X06662Y05078* +X06661Y0506* +Y05056* +Y04839* +X06662Y04822* +X06666Y04805* +X06673Y04789* +X06682Y04774* +X06692Y04762* +Y0475* +X06694Y0474* +X06699Y04733* +X06707Y04727* +X06716Y04726* +X06826* +X06835Y04727* +X06843Y04733* +X06849Y0474* +X0685Y0475* +Y04762* +X0686Y04774* +X06869Y04789* +X06876Y04805* +X0688Y04822* +X06881Y04839* +Y05056* +Y0506* +X0688Y05078* +X06876Y05094* +X06869Y0511* +X0686Y05125* +X06849Y05138* +X06836Y0515* +X06821Y05159* +X06805Y05165* +X06788Y05169* +X06771Y05171* +G37* +G36* +X05746Y05073D02* +Y05019D01* +X058* +X058Y05021* +X05796Y05034* +X0579Y05045* +X05782Y05055* +X05772Y05063* +X05761Y05069* +X05748Y05073* +X05746Y05073* +G37* +G36* +X05757Y05944D02* +X05699D01* +X05699Y05941* +X05704Y05929* +X05712Y05919* +X05723Y05911* +X05735Y05906* +X05748Y05904* +X05757* +Y05944* +G37* +G36* +X05509Y0589D02* +Y05835D01* +X05563* +X05563Y05838* +X05559Y0585* +X05553Y05861* +X05545Y05871* +X05535Y05879* +X05524Y05886* +X05511Y05889* +X05509Y0589* +G37* +G36* +X05835Y05944D02* +X05777D01* +Y05904* +X05787* +X058Y05906* +X05812Y05911* +X05822Y05919* +X0583Y05929* +X05835Y05941* +X05835Y05944* +G37* +G36* +X05787Y06004D02* +X05777D01* +Y05964* +X05835* +X05835Y05967* +X0583Y05979* +X05822Y05989* +X05812Y05997* +X058Y06002* +X05787Y06004* +G37* +G36* +X05757D02* +X05748D01* +X05735Y06002* +X05723Y05997* +X05712Y05989* +X05704Y05979* +X05699Y05967* +X05699Y05964* +X05757* +Y06004* +G37* +G36* +X05982Y05073D02* +Y05019D01* +X06036* +X06036Y05021* +X06032Y05034* +X06026Y05045* +X06018Y05055* +X06008Y05063* +X05997Y05069* +X05985Y05073* +X05982Y05073* +G37* +G36* +X05962D02* +X05959Y05073D01* +X05947Y05069* +X05936Y05063* +X05926Y05055* +X05918Y05045* +X05911Y05034* +X05908Y05021* +X05907Y05019* +X05962* +Y05073* +G37* +G36* +X05489Y05815D02* +X05434D01* +X05434Y05812* +X05438Y058* +X05444Y05789* +X05452Y05779* +X05462Y05771* +X05473Y05765* +X05486Y05761* +X05489Y05761* +Y05815* +G37* +G36* +Y0589D02* +X05486Y05889D01* +X05473Y05886* +X05462Y05879* +X05452Y05871* +X05444Y05861* +X05438Y0585* +X05434Y05838* +X05434Y05835* +X05489* +Y0589* +G37* +G36* +X05563Y05815D02* +X05509D01* +Y05761* +X05511Y05761* +X05524Y05765* +X05535Y05771* +X05545Y05779* +X05553Y05789* +X05559Y058* +X05563Y05812* +X05563Y05815* +G37* +G36* +X06263Y04611D02* +X06254Y0461D01* +X06246Y04607* +X06238Y04601* +X06233Y04594* +X06229Y04585* +X06228Y04576* +X06229Y04567* +X06233Y04559* +X06238Y04551* +X06246Y04546* +X06254Y04542* +X06263Y04541* +X06272Y04542* +X0628Y04546* +X06411Y04414* +X06418Y0441* +X06426Y04408* +X06457* +X06461Y04404* +X06468Y04398* +X06477Y04395* +X06486Y04393* +X06495Y04395* +X06503Y04398* +X06511Y04404* +X06516Y04411* +X0652Y0442* +X06521Y04429* +X0652Y04438* +X06516Y04446* +X06511Y04453* +X06503Y04459* +X06495Y04463* +X06486Y04464* +X06477Y04463* +X06468Y04459* +X06461Y04453* +X06457Y04449* +X06434* +X06297Y04586* +X06294Y04594* +X06288Y04601* +X06281Y04607* +X06272Y0461* +X06263Y04611* +G37* +G36* +X05392Y03628D02* +Y03592D01* +X05428* +X05428Y03594* +X05423Y03606* +X05415Y03615* +X05406Y03623* +X05394Y03627* +X05392Y03628* +G37* +G36* +X05372D02* +X0537Y03627D01* +X05359Y03623* +X05349Y03615* +X05342Y03606* +X05337Y03594* +X05337Y03592* +X05372* +Y03628* +G37* +G36* +X04263Y03662D02* +X04253D01* +X0424Y0366* +X04228Y03655* +X04218Y03647* +X0421Y03637* +X04205Y03625* +X04205Y03622* +X04263* +Y03662* +G37* +G36* +X05648Y0391D02* +X05557D01* +X05558Y03908* +X05562Y03896* +X05568Y03889* +X05565Y03884* +X05518* +X05509Y03883* +X05501Y03879* +X05493Y03874* +X05414Y03794* +X0528* +X05271Y03793* +X05262Y0379* +X05255Y03784* +X05161Y0369* +X05155Y03682* +X05152Y03674* +X0515Y03665* +Y03626* +X05145Y03623* +X0514Y03616* +X05139Y03608* +Y03557* +X0514Y03549* +X05145Y03542* +X05152Y03537* +X0516Y03536* +X05211* +X05219Y03537* +X05226Y03542* +X05231Y03549* +X05232Y03557* +Y03608* +X05231Y03616* +X05226Y03623* +X05221Y03626* +Y0365* +X05295Y03724* +X05429* +X05438Y03725* +X05446Y03729* +X05453Y03734* +X05533Y03814* +X0557* +X05573Y03813* +X05734* +X05743Y03815* +X05752Y03818* +X05759Y03824* +X05775Y0384* +X05781Y03847* +X05784Y03856* +X05786Y03865* +X05784Y03874* +X05781Y03882* +X05775Y0389* +X05768Y03895* +X0576Y03899* +X0575Y039* +X05741Y03899* +X05733Y03895* +X05726Y0389* +X0572Y03884* +X0564* +X05637Y03889* +X05643Y03896* +X05648Y03908* +X05648Y0391* +G37* +G36* +X04292Y03662D02* +X04283D01* +Y03622* +X04341* +X04341Y03625* +X04336Y03637* +X04328Y03647* +X04317Y03655* +X04305Y0366* +X04292Y03662* +G37* +G36* +X05485Y03627D02* +X05476Y03626D01* +X05467Y03623* +X0546Y03617* +X05455Y0361* +X05451Y03601* +X0545Y03592* +X05451Y03583* +X05451Y03582* +X05429Y03559* +X05424Y03562* +X05428Y0357* +X05428Y03572* +X05392* +Y03537* +X05394Y03537* +X05402Y0354* +X05405Y03536* +X05113Y03244* +X05109Y03237* +X05107Y0323* +Y02912* +X05109Y02904* +X05113Y02897* +X05153Y02858* +Y02808* +X05232* +Y02886* +X05181* +X05148Y0292* +Y02945* +X05153Y02946* +X05153Y02944* +X05154Y02937* +X05158Y02927* +X05164Y02919* +X05172Y02913* +X05182Y02909* +X05192Y02907* +X05202Y02909* +X05212Y02913* +X0522Y02919* +X05227Y02927* +X05231Y02937* +X05232Y02947* +X05231Y02957* +X05227Y02967* +X0522Y02975* +X05212Y02981* +X05202Y02985* +X05192Y02987* +X05182Y02985* +X05172Y02981* +X05164Y02975* +X05158Y02967* +X05154Y02957* +X05153Y0295* +X05153Y02948* +X05148Y02949* +Y03221* +X05484Y03557* +X05485Y03557* +X05494Y03558* +X05503Y03562* +X0551Y03567* +X05515Y03575* +X05519Y03583* +X0552Y03592* +X05519Y03601* +X05515Y0361* +X0551Y03617* +X05503Y03623* +X05494Y03626* +X05485Y03627* +G37* +G36* +X05372Y03572D02* +X05337D01* +X05337Y0357* +X05342Y03559* +X05349Y03549* +X05359Y03542* +X0537Y03537* +X05372Y03537* +Y03572* +G37* +G36* +X04263Y03602D02* +X04205D01* +X04205Y03599* +X0421Y03587* +X04218Y03577* +X04228Y03569* +X0424Y03564* +X04253Y03562* +X04263* +Y03602* +G37* +G36* +X04076Y03662D02* +X04037D01* +X04024Y0366* +X04012Y03655* +X04001Y03647* +X03994Y03637* +X03989Y03625* +X03987Y03612* +X03989Y03599* +X03994Y03587* +X04001Y03577* +X04012Y03569* +X04024Y03564* +X04037Y03562* +X04076* +X04089Y03564* +X04101Y03569* +X04111Y03577* +X04119Y03587* +X04124Y03599* +X04126Y03612* +X04124Y03625* +X04119Y03637* +X04111Y03647* +X04101Y03655* +X04089Y0366* +X04076Y03662* +G37* +G36* +X04341Y03602D02* +X04283D01* +Y03562* +X04292* +X04305Y03564* +X04317Y03569* +X04328Y03577* +X04336Y03587* +X04341Y03599* +X04341Y03602* +G37* +G36* +X04227Y0386D02* +X04202Y03835D01* +X04204Y03833* +X04215Y03829* +X04227Y03827* +X04239Y03829* +X04251Y03833* +X04252Y03835* +X04227Y0386* +G37* +G36* +X04088Y0407D02* +X0408Y04069D01* +X04073Y04064* +X04037Y04028* +X04032Y04021* +X04031Y04013* +X04032Y04005* +X04037Y03998* +X04073Y03962* +X0408Y03957* +X04088Y03956* +X04096Y03957* +X04103Y03962* +X04139Y03998* +X04144Y04005* +X04145Y04013* +X04144Y04021* +X04139Y04028* +X04103Y04064* +X04096Y04069* +X04088Y0407* +G37* +G36* +X05613Y03965D02* +Y0393D01* +X05648* +X05648Y03932* +X05643Y03943* +X05636Y03953* +X05626Y0396* +X05615Y03965* +X05613Y03965* +G37* +G36* +X05621Y04164D02* +X04942D01* +Y0405* +X05621* +Y04164* +G37* +G36* +X0575Y04513D02* +X0574Y04512D01* +X05732Y04508* +X05725Y04503* +X05719Y04495* +X05716Y04487* +X05714Y04478* +X05716Y04469* +X05719Y0446* +X05725Y04453* +X05729Y04449* +Y0438* +X05729Y0438* +X05723Y04373* +X0572Y04364* +X05719Y04355* +X0572Y04346* +X05723Y04337* +X05729Y0433* +X05736Y04325* +X05745Y04321* +X05754Y0432* +X05763Y04321* +X05771Y04325* +X05779Y0433* +X05784Y04337* +X05788Y04346* +X05789Y04355* +X05788Y04364* +X05784Y04373* +X05779Y0438* +X05771Y04385* +X0577Y04386* +Y04449* +X05774Y04453* +X0578Y0446* +X05783Y04469* +X05785Y04478* +X05783Y04487* +X0578Y04495* +X05774Y04503* +X05767Y04508* +X05759Y04512* +X0575Y04513* +G37* +G36* +X06263Y04285D02* +X06254Y04283D01* +X06246Y0428* +X06238Y04274* +X06233Y04267* +X06229Y04259* +X06228Y0425* +X06229Y0424* +X06233Y04232* +X06238Y04225* +X06246Y04219* +X06254Y04216* +X06263Y04214* +X06272Y04216* +X06281Y04219* +X06288Y04225* +X06292Y04229* +X06351* +X06451Y04129* +X06451Y04124* +X06452Y04114* +X06455Y04106* +X06461Y04099* +X06468Y04093* +X06477Y0409* +X06486Y04088* +X06495Y0409* +X06503Y04093* +X06511Y04099* +X06516Y04106* +X0652Y04114* +X06521Y04124* +X0652Y04133* +X06516Y04141* +X06511Y04148* +X06503Y04154* +X06495Y04157* +X06486Y04159* +X0648Y04158* +X06374Y04264* +X06367Y04268* +X0636Y0427* +X06292* +X06288Y04274* +X06281Y0428* +X06272Y04283* +X06263Y04285* +G37* +G36* +X04266Y03899D02* +X04241Y03874D01* +X04266Y03849* +X04268Y0385* +X04272Y03862* +X04274Y03874* +X04272Y03886* +X04268Y03897* +X04266Y03899* +G37* +G36* +X04188D02* +X04187Y03897D01* +X04182Y03886* +X0418Y03874* +X04182Y03862* +X04187Y0385* +X04188Y03849* +X04213Y03874* +X04188Y03899* +G37* +G36* +X05431Y03966D02* +X05381D01* +X05372Y03965* +X05366Y0396* +X05361Y03953* +X05359Y03945* +Y03894* +X05361Y03886* +X05366Y03879* +X05372Y03875* +X05381Y03873* +X05431* +X0544Y03875* +X05446Y03879* +X05451Y03886* +X05453Y03894* +Y03945* +X05451Y03953* +X05446Y0396* +X0544Y03965* +X05431Y03966* +G37* +G36* +X05593Y03965D02* +X05591Y03965D01* +X05579Y0396* +X0557Y03953* +X05562Y03943* +X05558Y03932* +X05557Y0393* +X05593* +Y03965* +G37* +G36* +X04227Y03921D02* +X04215Y03919D01* +X04204Y03914* +X04202Y03913* +X04227Y03888* +X04252Y03913* +X04251Y03914* +X04239Y03919* +X04227Y03921* +G37* +%LNunisolder52_back-3*% +%LPD*% +G36* +X05413Y04131D02* +X05414Y04131D01* +X05415Y0413* +X05417Y0413* +X05418Y04129* +X05419Y04128* +X0542Y04127* +X05421Y04126* +X05422Y04125* +X05423Y04124* +X05424Y04124* +X05424Y04123* +X05425Y04122* +X05425Y04122* +X05425Y04121* +X05426Y04121* +X05424Y0413* +X05435* +X05445Y04084* +X05433* +X0543Y04098* +X05429Y041* +X05429Y04101* +X05429Y04103* +X05428Y04104* +X05428Y04105* +X05428Y04106* +X05427Y04107* +X05427Y04108* +X05427Y04109* +X05426Y0411* +X05426Y0411* +X05426Y04111* +X05426Y04111* +X05426Y04111* +X05426Y04111* +Y04111* +X05425Y04113* +X05424Y04114* +X05423Y04115* +X05422Y04116* +X05422Y04117* +X05421Y04117* +X05421Y04118* +X05421Y04118* +X05419Y04119* +X05418Y04119* +X05417Y0412* +X05416Y0412* +X05415Y0412* +X05415Y0412* +X05414* +X05413Y0412* +X05412Y0412* +X05411Y0412* +X05411Y0412* +X05411Y0412* +X0541Y0412* +X0541* +X05405Y0413* +X05407Y0413* +X05408Y04131* +X05409Y04131* +X0541Y04131* +X0541Y04131* +X05411Y04131* +X05411* +X05413Y04131* +G37* +G36* +X05279Y04149D02* +X05281Y04149D01* +X05283Y04149* +X05285Y04148* +X05286Y04148* +X05288Y04147* +X05289Y04147* +X0529Y04146* +X05291Y04146* +X05292Y04145* +X05293Y04145* +X05293Y04144* +X05294Y04144* +X05294Y04144* +X05294Y04144* +X05294Y04144* +X05295Y04143* +X05296Y04142* +X05297Y0414* +X05298Y04139* +X05298Y04138* +X05299Y04137* +X05299Y04136* +X05299Y04135* +X053Y04134* +X053Y04133* +X053Y04132* +X053Y04132* +X053Y04131* +Y04131* +Y0413* +Y0413* +X053Y04129* +X053Y04127* +X053Y04126* +X05299Y04124* +X05299Y04123* +X05299Y04123* +X05298Y04122* +X05298Y04122* +X05297Y04121* +X05297Y0412* +X05296Y04119* +X05295Y04118* +X05294Y04117* +X05293Y04117* +X05293Y04117* +X05293Y04116* +X05292Y04116* +X05291Y04116* +X0529Y04115* +X05288Y04114* +X05286Y04113* +X05284Y04112* +X05284Y04112* +X05283Y04112* +X05283Y04111* +X05282Y04111* +X05282Y04111* +X05282* +X05281Y0411* +X05279Y0411* +X05278Y04109* +X05277Y04109* +X05277Y04109* +X05276Y04108* +X05275Y04108* +X05275Y04107* +X05274Y04107* +X05274Y04107* +X05273Y04107* +X05273Y04106* +X05273Y04106* +X05272Y04106* +X05271Y04105* +X05271Y04104* +X05271Y04103* +X0527Y04103* +X0527Y04102* +Y04102* +Y04102* +X0527Y041* +X05271Y04099* +X05271Y04098* +X05272Y04097* +X05272Y04097* +X05273Y04096* +X05273Y04096* +X05273Y04096* +X05274Y04095* +X05275Y04095* +X05276Y04095* +X05278Y04094* +X05279Y04094* +X0528Y04094* +X05281* +X05282Y04094* +X05284* +X05285Y04094* +X05287Y04094* +X05288Y04094* +X05289Y04094* +X05289Y04095* +X0529Y04095* +X05291Y04095* +X05292Y04096* +X05292Y04096* +X05292Y04096* +X05293Y04096* +X05293Y04097* +X05293Y04097* +X05294Y04097* +X05294Y04098* +X05294Y04099* +X05295Y041* +X05295Y04102* +X05295Y04103* +X05295Y04104* +X05295Y04105* +Y04105* +Y04105* +Y04105* +X05308Y04104* +Y04102* +X05308Y041* +X05307Y04098* +X05307Y04096* +X05307Y04096* +X05306Y04095* +X05306Y04094* +X05306Y04094* +X05306Y04094* +X05306Y04093* +X05306Y04093* +Y04093* +X05305Y04092* +X05305Y04091* +X05303Y0409* +X05302Y04088* +X053Y04087* +X05299Y04087* +X05299Y04086* +X05298Y04086* +X05298Y04086* +X05297Y04086* +X05297Y04085* +X05297* +X05295Y04085* +X05292Y04084* +X0529Y04083* +X05288Y04083* +X05287Y04083* +X05286Y04083* +X05285Y04083* +X05284* +X05284Y04083* +X05283* +X05281Y04083* +X05279Y04083* +X05277Y04083* +X05275Y04084* +X05273Y04084* +X05272Y04085* +X0527Y04085* +X05269Y04086* +X05268Y04086* +X05267Y04087* +X05266Y04087* +X05265Y04088* +X05265Y04088* +X05264Y04088* +X05264Y04089* +X05264Y04089* +X05263Y0409* +X05262Y04091* +X05261Y04092* +X0526Y04093* +X0526Y04095* +X05259Y04096* +X05259Y04097* +X05258Y04098* +X05258Y04099* +X05258Y041* +X05258Y04101* +X05257Y04102* +Y04102* +X05257Y04103* +Y04103* +Y04103* +X05257Y04104* +X05258Y04106* +X05258Y04108* +X05259Y0411* +X0526Y04111* +X0526Y04112* +X05261Y04113* +X05261Y04113* +X05261Y04114* +X05262Y04114* +X05262Y04114* +X05262Y04114* +X05262Y04114* +X05263Y04115* +X05263Y04116* +X05264Y04116* +X05265Y04117* +X05268Y04118* +X0527Y04119* +X05271Y0412* +X05272Y04121* +X05273Y04121* +X05274Y04121* +X05275Y04122* +X05276Y04122* +X05276Y04122* +X05276Y04122* +X05277Y04123* +X05279Y04123* +X0528Y04124* +X05281Y04124* +X05281Y04125* +X05282Y04125* +X05283Y04126* +X05284Y04126* +X05284Y04126* +X05284Y04126* +X05285Y04127* +X05285Y04127* +X05286Y04127* +X05286Y04128* +X05287Y04129* +X05287Y04129* +X05287Y0413* +X05288Y04131* +X05288Y04131* +Y04132* +Y04132* +X05288Y04133* +X05287Y04134* +X05287Y04135* +X05286Y04135* +X05286Y04136* +X05286Y04136* +X05285Y04137* +X05285Y04137* +X05284Y04137* +X05283Y04138* +X05282Y04138* +X05281Y04138* +X05279Y04139* +X05278Y04139* +X05278* +X05276Y04139* +X05274Y04138* +X05272Y04138* +X05271Y04137* +X0527Y04137* +X0527Y04137* +X05269Y04136* +X05269Y04136* +X05268Y04135* +X05267Y04134* +X05267Y04133* +X05266Y04132* +X05266Y04131* +X05266Y0413* +Y0413* +X05266Y04129* +Y04129* +Y04129* +X05253Y0413* +X05253Y04131* +X05254Y04133* +X05254Y04134* +X05254Y04136* +X05255Y04137* +X05256Y04138* +X05256Y04139* +X05257Y0414* +X05257Y04141* +X05258Y04142* +X05259Y04142* +X05259Y04143* +X05259Y04143* +X0526Y04143* +X0526Y04144* +X0526Y04144* +X05261Y04145* +X05262Y04145* +X05264Y04146* +X05265Y04147* +X05267Y04147* +X05268Y04148* +X05271Y04148* +X05272Y04149* +X05274Y04149* +X05275Y04149* +X05276Y04149* +X05276Y04149* +X05277* +X05279Y04149* +G37* +G36* +X05224Y04131D02* +X05227Y04131D01* +X05228Y04131* +X0523Y0413* +X05232Y0413* +X05233Y04129* +X05235Y04128* +X05236Y04128* +X05237Y04127* +X05238Y04126* +X05239Y04125* +X0524Y04125* +X05241Y04124* +X05241Y04124* +X05241Y04124* +X05241Y04124* +X05243Y04122* +X05244Y04121* +X05245Y04119* +X05245Y04117* +X05246Y04115* +X05247Y04114* +X05247Y04112* +X05248Y0411* +X05248Y04109* +X05248Y04108* +X05248Y04106* +X05248Y04105* +Y04104* +X05249Y04104* +Y04103* +Y04103* +X05248Y04101* +X05248Y04099* +X05248Y04097* +X05247Y04096* +X05247Y04094* +X05247Y04094* +X05246Y04093* +X05246Y04093* +X05246Y04093* +X05246Y04093* +Y04093* +X05245Y04091* +X05244Y04089* +X05243Y04088* +X05241Y04087* +X0524Y04086* +X05239Y04086* +X05239Y04086* +X05239Y04085* +X05239Y04085* +X05239* +X05237Y04084* +X05235Y04084* +X05233Y04083* +X05231Y04083* +X05229Y04083* +X05229Y04083* +X05228* +X05228Y04083* +X05227* +X05225Y04083* +X05223Y04083* +X05221Y04083* +X05219Y04084* +X05217Y04085* +X05216Y04085* +X05214Y04086* +X05213Y04087* +X05212Y04088* +X05211Y04088* +X0521Y04089* +X05209Y0409* +X05208Y0409* +X05208Y0409* +X05208Y04091* +X05208Y04091* +X05206Y04092* +X05205Y04094* +X05204Y04096* +X05204Y04097* +X05203Y04099* +X05202Y04101* +X05202Y04102* +X05201Y04104* +X05201Y04105* +X05201Y04106* +X05201Y04107* +X05201Y04108* +Y04109* +X052Y0411* +Y0411* +Y0411* +X05201Y04112* +X05201Y04114* +X05201Y04115* +X05201Y04117* +X05202Y04118* +X05202Y04119* +X05203Y04121* +X05203Y04122* +X05204Y04123* +X05204Y04123* +X05205Y04124* +X05205Y04125* +X05206Y04125* +X05206Y04125* +X05206Y04126* +X05206Y04126* +X05207Y04127* +X05209Y04128* +X0521Y04128* +X05211Y04129* +X05213Y0413* +X05214Y0413* +X05215Y0413* +X05216Y04131* +X05218Y04131* +X05219Y04131* +X0522Y04131* +X05221Y04131* +X05221Y04131* +X05222* +X05224Y04131* +G37* +G36* +X05171Y04149D02* +X05173Y04149D01* +X05174Y04149* +X05175Y04148* +X05176Y04148* +X05177Y04148* +X05177Y04147* +X05177Y04147* +X05178Y04147* +X05179Y04146* +X0518Y04145* +X0518Y04145* +X05181Y04144* +X05181Y04143* +X05181Y04143* +X05182Y04143* +X05182Y04142* +X05182Y04142* +X05182Y04141* +X05183Y04139* +X05183Y04138* +X05183Y04137* +X05184Y04136* +X05184Y04136* +X05184Y04135* +X05184Y04135* +Y04135* +X05185Y0413* +X05192* +X05194Y04121* +X05187* +X05195Y04084* +X05182* +X05174Y04121* +X05165* +X05163Y0413* +X05172* +X05172Y04133* +X05171Y04135* +X05171Y04136* +X05171Y04137* +X05171Y04137* +X0517Y04138* +X0517Y04138* +X0517Y04138* +Y04138* +X0517Y04139* +X05169Y04139* +X05169Y04139* +X05168Y04139* +X05168Y0414* +X05167Y0414* +X05167* +X05166Y0414* +X05165Y04139* +X05163Y04139* +X05162Y04139* +X05161Y04139* +X0516Y04138* +X0516Y04138* +X0516Y04138* +X0516Y04138* +X0516* +X05157Y04147* +X0516Y04148* +X05162Y04148* +X05164Y04149* +X05166Y04149* +X05167Y04149* +X05167Y04149* +X05168* +X05168Y04149* +X05169* +X05171Y04149* +G37* +G36* +X05578D02* +X0558Y04149D01* +X05581Y04149* +X05583Y04148* +X05585Y04148* +X05586Y04147* +X05587Y04147* +X05588Y04146* +X05589Y04146* +X0559Y04145* +X05591Y04145* +X05592Y04144* +X05592Y04144* +X05592Y04144* +X05593Y04144* +X05593Y04144* +X05594Y04143* +X05595Y04142* +X05595Y0414* +X05596Y04139* +X05597Y04138* +X05597Y04137* +X05598Y04136* +X05598Y04135* +X05598Y04134* +X05598Y04133* +X05598Y04132* +X05598Y04132* +X05599Y04131* +Y04131* +Y0413* +Y0413* +X05598Y04129* +X05598Y04127* +X05598Y04126* +X05598Y04124* +X05597Y04123* +X05597Y04123* +X05597Y04122* +X05597Y04122* +X05596Y04121* +X05595Y0412* +X05594Y04119* +X05593Y04118* +X05592Y04117* +X05592Y04117* +X05591Y04117* +X05591Y04116* +X05591Y04116* +X0559Y04116* +X05588Y04115* +X05586Y04114* +X05584Y04113* +X05583Y04112* +X05582Y04112* +X05582Y04112* +X05581Y04111* +X05581Y04111* +X0558Y04111* +X0558* +X05579Y0411* +X05578Y0411* +X05577Y04109* +X05576Y04109* +X05575Y04109* +X05574Y04108* +X05573Y04108* +X05573Y04107* +X05572Y04107* +X05572Y04107* +X05571Y04107* +X05571Y04106* +X05571Y04106* +X0557Y04106* +X0557Y04105* +X05569Y04104* +X05569Y04103* +X05569Y04103* +X05569Y04102* +Y04102* +Y04102* +X05569Y041* +X05569Y04099* +X0557Y04098* +X0557Y04097* +X05571Y04097* +X05571Y04096* +X05571Y04096* +X05572Y04096* +X05572Y04095* +X05573Y04095* +X05574Y04095* +X05576Y04094* +X05577Y04094* +X05579Y04094* +X05579* +X0558Y04094* +X05582* +X05584Y04094* +X05585Y04094* +X05586Y04094* +X05587Y04094* +X05588Y04095* +X05589Y04095* +X05589Y04095* +X0559Y04096* +X0559Y04096* +X05591Y04096* +X05591Y04096* +X05592Y04097* +X05592Y04097* +X05592Y04097* +X05592Y04098* +X05593Y04099* +X05593Y041* +X05593Y04102* +X05594Y04103* +X05594Y04104* +X05594Y04105* +Y04105* +Y04105* +Y04105* +X05606Y04104* +Y04102* +X05606Y041* +X05606Y04098* +X05605Y04096* +X05605Y04096* +X05605Y04095* +X05605Y04094* +X05604Y04094* +X05604Y04094* +X05604Y04093* +X05604Y04093* +Y04093* +X05604Y04092* +X05603Y04091* +X05602Y0409* +X056Y04088* +X05599Y04087* +X05598Y04087* +X05597Y04086* +X05596Y04086* +X05596Y04086* +X05596Y04086* +X05596Y04085* +X05595* +X05593Y04085* +X05591Y04084* +X05588Y04083* +X05586Y04083* +X05585Y04083* +X05584Y04083* +X05583Y04083* +X05583* +X05582Y04083* +X05581* +X05579Y04083* +X05577Y04083* +X05575Y04083* +X05573Y04084* +X05572Y04084* +X0557Y04085* +X05569Y04085* +X05567Y04086* +X05566Y04086* +X05565Y04087* +X05564Y04087* +X05564Y04088* +X05563Y04088* +X05563Y04088* +X05563Y04089* +X05562Y04089* +X05561Y0409* +X0556Y04091* +X05559Y04092* +X05559Y04093* +X05558Y04095* +X05557Y04096* +X05557Y04097* +X05557Y04098* +X05556Y04099* +X05556Y041* +X05556Y04101* +X05556Y04102* +Y04102* +X05556Y04103* +Y04103* +Y04103* +X05556Y04104* +X05556Y04106* +X05556Y04108* +X05557Y0411* +X05558Y04111* +X05558Y04112* +X05559Y04113* +X05559Y04113* +X0556Y04114* +X0556Y04114* +X0556Y04114* +X0556Y04114* +X0556Y04114* +X05561Y04115* +X05562Y04116* +X05563Y04116* +X05564Y04117* +X05566Y04118* +X05568Y04119* +X0557Y0412* +X05571Y04121* +X05572Y04121* +X05573Y04121* +X05573Y04122* +X05574Y04122* +X05574Y04122* +X05574Y04122* +X05576Y04123* +X05577Y04123* +X05578Y04124* +X05579Y04124* +X0558Y04125* +X05581Y04125* +X05581Y04126* +X05582Y04126* +X05582Y04126* +X05583Y04126* +X05583Y04127* +X05584Y04127* +X05584Y04127* +X05585Y04128* +X05585Y04129* +X05585Y04129* +X05586Y0413* +X05586Y04131* +X05586Y04131* +Y04132* +Y04132* +X05586Y04133* +X05586Y04134* +X05585Y04135* +X05585Y04135* +X05584Y04136* +X05584Y04136* +X05584Y04137* +X05584Y04137* +X05583Y04137* +X05581Y04138* +X0558Y04138* +X05579Y04138* +X05578Y04139* +X05577Y04139* +X05576* +X05574Y04139* +X05572Y04138* +X05571Y04138* +X0557Y04137* +X05569Y04137* +X05568Y04137* +X05568Y04136* +X05567Y04136* +X05566Y04135* +X05566Y04134* +X05565Y04133* +X05565Y04132* +X05564Y04131* +X05564Y0413* +Y0413* +X05564Y04129* +Y04129* +Y04129* +X05551Y0413* +X05552Y04131* +X05552Y04133* +X05552Y04134* +X05553Y04136* +X05553Y04137* +X05554Y04138* +X05555Y04139* +X05555Y0414* +X05556Y04141* +X05556Y04142* +X05557Y04142* +X05557Y04143* +X05558Y04143* +X05558Y04143* +X05558Y04144* +X05558Y04144* +X0556Y04145* +X05561Y04145* +X05562Y04146* +X05564Y04147* +X05565Y04147* +X05567Y04148* +X05569Y04148* +X05571Y04149* +X05572Y04149* +X05573Y04149* +X05574Y04149* +X05575Y04149* +X05576* +X05578Y04149* +G37* +G36* +X04972Y04084D02* +X04959D01* +X04957Y04096* +X04969* +X04972Y04084* +G37* +G36* +X05111D02* +X05065D01* +X05063Y04094* +X05095* +X05084Y04148* +X05098* +X05111Y04084* +G37* +G36* +X05348D02* +X05349Y04082D01* +X05349Y04081* +X0535Y0408* +X05351Y04079* +X05352Y04078* +X05352Y04077* +X05353Y04077* +X05354Y04076* +X05355Y04076* +X05355Y04076* +X05356Y04075* +X05356Y04075* +X05357Y04075* +X05357Y04075* +X05357* +X05359Y04075* +X0536Y04075* +X0536Y04075* +X05361Y04076* +X05361Y04076* +X05362Y04076* +X05362* +X05363Y04066* +X05361Y04066* +X05359Y04066* +X05358Y04065* +X05356Y04065* +X05355Y04065* +X05355Y04065* +X05354* +X05352Y04065* +X05351Y04065* +X0535Y04066* +X05349Y04066* +X05348Y04066* +X05348Y04066* +X05347Y04066* +X05347Y04067* +X05346Y04067* +X05345Y04068* +X05344Y04068* +X05343Y04069* +X05343Y0407* +X05342Y0407* +X05342Y0407* +X05342Y04071* +X05342Y04071* +X05341Y04072* +X0534Y04073* +X05339Y04074* +X05339Y04076* +X05338Y04077* +X05337Y04078* +X05337Y04078* +X05337Y04079* +X05337Y04079* +X05336Y04079* +Y04079* +X05308Y0413* +X05321* +X05332Y0411* +X05334Y04107* +X05335Y04104* +X05336Y04101* +X05337Y041* +X05337Y04099* +X05338Y04098* +X05338Y04097* +X05338Y04096* +X05339Y04096* +X05339Y04095* +X05339Y04095* +X05339Y04095* +Y04095* +X05339Y04096* +X05339Y04097* +X05339Y04098* +X05339Y041* +X0534Y04102* +X0534Y04104* +X0534Y04105* +X0534Y04106* +X0534Y04106* +Y04107* +X0534Y04107* +Y04107* +X05343Y0413* +X05356* +X05348Y04084* +G37* +G36* +X0541D02* +X05397D01* +X05394Y04098* +X05386Y04105* +X05379Y04084* +X05367* +X05377Y04113* +X05358Y0413* +X05375* +X05391Y04114* +X05384Y04148* +X05396* +X0541Y04084* +G37* +G36* +X05471Y04131D02* +X05472Y04131D01* +X05473Y04131* +X05475Y04131* +X05476Y0413* +X05477Y0413* +X05478Y0413* +X05479Y04129* +X05479Y04129* +X0548Y04129* +X0548Y04128* +X05481Y04128* +X05481Y04128* +X05481Y04128* +X05481Y04128* +X05483Y04126* +X05485Y04125* +X05486Y04123* +X05487Y04122* +X05488Y0412* +X05488Y0412* +X05488Y04119* +X05488Y04119* +X05489Y04118* +X05489Y04118* +Y04118* +X05476Y04117* +X05476Y04118* +X05476Y04119* +X05475Y04119* +X05475Y0412* +X05474Y0412* +X05474Y04121* +X05474Y04121* +X05474Y04121* +X05473Y04121* +X05472Y04122* +X05471Y04122* +X0547Y04122* +X0547Y04122* +X05469Y04122* +X05468* +X05467Y04122* +X05466Y04122* +X05465Y04122* +X05465Y04122* +X05464Y04121* +X05464Y04121* +X05464Y04121* +X05464Y04121* +X05463Y0412* +X05463Y0412* +X05462Y04119* +X05462Y04119* +X05462Y04118* +X05462Y04118* +Y04118* +Y04118* +Y04117* +X05462Y04116* +X05462Y04115* +X05463Y04114* +X05463Y04114* +X05463Y04114* +Y04113* +X05463Y04113* +X05464Y04113* +X05465Y04113* +X05466Y04113* +X05468Y04112* +X0547Y04112* +X05472Y04112* +X05473Y04112* +X05473Y04112* +X05474Y04112* +X05474Y04112* +X05475* +X05477Y04111* +X05478Y04111* +X0548Y04111* +X05482Y04111* +X05483Y0411* +X05484Y0411* +X05485Y04109* +X05486Y04109* +X05487Y04108* +X05488Y04108* +X05488Y04108* +X05489Y04107* +X05489Y04107* +X05489Y04107* +X05489Y04107* +X0549Y04107* +X0549Y04106* +X05491Y04105* +X05491Y04104* +X05492Y04103* +X05493Y04102* +X05493Y041* +X05493Y04098* +X05493Y04098* +X05494Y04097* +X05494Y04097* +Y04096* +Y04096* +Y04096* +X05494Y04095* +X05493Y04094* +X05493Y04092* +X05492Y0409* +X05492Y04089* +X05491Y04088* +X0549Y04087* +X0549Y04087* +X0549Y04087* +X0549Y04087* +Y04086* +X05489Y04086* +X05488Y04085* +X05487Y04084* +X05485Y04084* +X05484Y04083* +X05482Y04083* +X05482Y04083* +X05481* +X05481Y04083* +X0548* +X05479Y04083* +X05478Y04083* +X05477Y04083* +X05475Y04084* +X05475Y04084* +X05474Y04084* +X05473Y04084* +X05473Y04084* +X05472Y04085* +X05471Y04086* +X0547Y04087* +X05469Y04087* +X05468Y04088* +X05467Y04088* +X05467Y04089* +X05467Y04089* +X05467Y04087* +X05466Y04086* +X05466Y04085* +X05466Y04085* +X05466Y04084* +X05466Y04084* +Y04084* +X05454* +X05454Y04085* +X05454Y04086* +X05454Y04088* +X05455Y04088* +X05455Y04089* +X05455Y0409* +Y0409* +Y0409* +Y04091* +X05455Y04092* +X05454Y04094* +X05454Y04096* +X05454Y04097* +X05453Y04099* +X05453Y041* +X05453Y04101* +X05453Y04101* +X05453Y04102* +X05453Y04102* +Y04102* +X05452Y04104* +X05452Y04105* +X05452Y04107* +X05452Y04108* +X05451Y04109* +X05451Y0411* +X05451Y04111* +X05451Y04112* +X05451Y04113* +X05451Y04113* +X0545Y04114* +X0545Y04114* +Y04114* +X0545Y04114* +Y04114* +X0545Y04116* +X0545Y04117* +Y04118* +X0545Y04118* +Y04119* +Y04119* +Y04119* +X0545Y0412* +X0545Y04121* +X05451Y04122* +X05451Y04124* +X05452Y04125* +X05453Y04126* +X05454Y04127* +X05454Y04128* +X05454Y04128* +X05454* +X05455Y04128* +X05456Y04129* +X05458Y0413* +X0546Y0413* +X05462Y04131* +X05463Y04131* +X05464Y04131* +X05465Y04131* +X05466* +X05467Y04131* +X05469* +X05471Y04131* +G37* +G36* +X05516Y04131D02* +X05517Y04131D01* +X05518Y04131* +X05519Y04131* +X0552Y0413* +X05521Y0413* +X05521Y0413* +X05521Y0413* +X05523Y04129* +X05524Y04129* +X05525Y04128* +X05526Y04127* +X05527Y04126* +X05528Y04126* +X05528Y04126* +X05528Y04125* +X05529* +X05528Y0413* +X05539* +X05553Y04066* +X0554* +X05535Y0409* +X05534Y04089* +X05533Y04088* +X05532Y04087* +X05531Y04086* +X0553Y04085* +X05529Y04085* +X05528Y04084* +X05527Y04084* +X05526Y04083* +X05525Y04083* +X05524Y04083* +X05523Y04083* +X05522* +X05522Y04083* +X05521* +X0552Y04083* +X05518Y04083* +X05517Y04083* +X05515Y04084* +X05514Y04084* +X05512Y04085* +X05511Y04086* +X0551Y04086* +X05509Y04087* +X05508Y04088* +X05508Y04088* +X05507Y04089* +X05506Y04089* +X05506Y0409* +X05506Y0409* +X05506Y0409* +X05504Y04092* +X05503Y04093* +X05502Y04095* +X05501Y04097* +X05501Y04099* +X055Y04101* +X05499Y04102* +X05499Y04104* +X05499Y04105* +X05499Y04107* +X05498Y04108* +X05498Y04109* +Y0411* +X05498Y04111* +Y04111* +Y04111* +X05498Y04113* +X05498Y04115* +X05499Y04116* +X05499Y04118* +X05499Y04119* +X055Y0412* +X055Y04122* +X055Y04123* +X05501Y04123* +X05501Y04124* +X05502Y04125* +X05502Y04125* +X05502Y04126* +X05502Y04126* +X05503Y04126* +X05503Y04126* +X05503Y04127* +X05504Y04128* +X05505Y04129* +X05506Y04129* +X05507Y0413* +X05508Y0413* +X0551Y04131* +X05512Y04131* +X05512Y04131* +X05513Y04131* +X05514Y04131* +X05514* +X05516Y04131* +G37* +G36* +X04988Y04124D02* +X04989Y04125D01* +X0499Y04126* +X04991Y04127* +X04992Y04128* +X04993Y04129* +X04994Y0413* +X04996Y0413* +X04997Y0413* +X04998Y04131* +X04999Y04131* +X05Y04131* +X05Y04131* +X05001* +X05002Y04131* +X05002* +X05004Y04131* +X05006Y04131* +X05007Y04131* +X05009Y0413* +X05011Y04129* +X05012Y04129* +X05013Y04128* +X05014Y04127* +X05015Y04126* +X05016Y04125* +X05017Y04124* +X05018Y04124* +X05018Y04123* +X05019Y04123* +X05019Y04122* +X05019Y04122* +X0502Y04121* +X05021Y04119* +X05022Y04117* +X05023Y04115* +X05023Y04114* +X05024Y04112* +X05024Y0411* +X05024Y04109* +X05025Y04107* +X05025Y04106* +X05025Y04105* +X05025Y04104* +Y04103* +X05025Y04103* +Y04102* +Y04102* +X05025Y041* +X05025Y04099* +X05025Y04097* +X05024Y04096* +X05024Y04094* +X05024Y04093* +X05023Y04092* +X05023Y04091* +X05023Y0409* +X05022Y0409* +X05022Y04089* +X05021Y04088* +X05021Y04088* +X05021Y04088* +X05021Y04088* +X05021Y04088* +X0502Y04087* +X05019Y04086* +X05018Y04085* +X05017Y04085* +X05016Y04084* +X05015Y04084* +X05013Y04083* +X05012Y04083* +X05011Y04083* +X0501Y04083* +X0501Y04083* +X05009* +X05008Y04083* +X05006Y04083* +X05005Y04083* +X05004Y04083* +X05003Y04084* +X05002Y04084* +X05002Y04084* +X05002Y04084* +X05Y04085* +X04999Y04085* +X04998Y04086* +X04997Y04087* +X04996Y04088* +X04995Y04088* +X04995Y04089* +X04995Y04089* +X04996Y04084* +X04984* +X0497Y04148* +X04983* +X04988Y04124* +G37* +G36* +X05044Y04138D02* +X05045Y0413D01* +X05052* +X05053Y04121* +X05047* +X05051Y04102* +X05052Y04101* +X05052Y041* +X05052Y04098* +X05052Y04097* +X05052Y04096* +X05052Y04096* +X05053Y04095* +X05053Y04094* +Y04094* +X05053Y04093* +X05053Y04093* +Y04092* +Y04092* +X05053Y04091* +X05052Y04089* +X05052Y04088* +X05051Y04087* +X05051Y04086* +X0505Y04086* +X0505Y04085* +X0505Y04085* +X05049Y04085* +X05049Y04084* +X05047Y04084* +X05046Y04083* +X05044Y04083* +X05043Y04083* +X05042Y04083* +X05041* +X05041Y04083* +X05039* +X05038Y04083* +X05037Y04083* +X05036Y04083* +X05035Y04083* +X05034Y04083* +X05034Y04083* +X05034* +X05032Y04093* +X05033Y04093* +X05034Y04092* +X05034Y04092* +X05035* +X05035Y04092* +X05037* +X05037Y04092* +X05038Y04093* +X05038Y04093* +X05039Y04093* +X05039Y04093* +X05039Y04093* +X05039* +X05039Y04093* +X0504Y04094* +X0504Y04095* +Y04095* +X0504Y04095* +Y04095* +Y04095* +Y04096* +X0504Y04096* +X0504Y04097* +X0504Y04098* +X05039Y04099* +X05039Y041* +X05039Y04101* +X05039Y04101* +Y04101* +X05039Y04101* +Y04101* +X05035Y04121* +X05027* +X05025Y0413* +X05033* +X0503Y04146* +X05044Y04138* +G37* +G36* +X05153D02* +X05155Y0413D01* +X05161* +X05163Y04121* +X05157* +X05161Y04102* +X05161Y04101* +X05161Y041* +X05161Y04098* +X05162Y04097* +X05162Y04096* +X05162Y04096* +X05162Y04095* +X05162Y04094* +Y04094* +X05162Y04093* +X05162Y04093* +Y04092* +Y04092* +X05162Y04091* +X05162Y04089* +X05161Y04088* +X05161Y04087* +X0516Y04086* +X0516Y04086* +X05159Y04085* +X05159Y04085* +X05159Y04085* +X05158Y04084* +X05156Y04084* +X05155Y04083* +X05153Y04083* +X05152Y04083* +X05151Y04083* +X05151* +X0515Y04083* +X05148* +X05147Y04083* +X05146Y04083* +X05145Y04083* +X05144Y04083* +X05144Y04083* +X05143Y04083* +X05143* +X05141Y04093* +X05142Y04093* +X05143Y04092* +X05144Y04092* +X05144* +X05145Y04092* +X05146* +X05147Y04092* +X05147Y04093* +X05148Y04093* +X05148Y04093* +X05148Y04093* +X05148Y04093* +X05148* +X05149Y04093* +X05149Y04094* +X05149Y04095* +Y04095* +X05149Y04095* +Y04095* +Y04095* +Y04096* +X05149Y04096* +X05149Y04097* +X05149Y04098* +X05149Y04099* +X05149Y041* +X05148Y04101* +X05148Y04101* +Y04101* +X05148Y04101* +Y04101* +X05144Y04121* +X05136* +X05135Y0413* +X05142* +X05139Y04146* +X05153Y04138* +G37* +%LNunisolder52_back-4*% +%LPC*% +G36* +X0552Y04122D02* +X05519D01* +X05518Y04122* +X05517Y04122* +X05515Y04121* +X05515Y04121* +X05514Y0412* +X05513Y0412* +X05513Y0412* +X05513Y0412* +X05512Y04118* +X05511Y04117* +X05511Y04116* +X05511Y04115* +X0551Y04113* +X0551Y04112* +Y04112* +Y04112* +Y04112* +Y04112* +X0551Y0411* +X05511Y04108* +X05511Y04106* +X05511Y04105* +X05512Y04104* +X05512Y04103* +X05512Y04103* +X05512Y04102* +X05512Y04102* +X05512Y04102* +Y04102* +X05513Y041* +X05514Y04098* +X05515Y04097* +X05515Y04096* +X05516Y04095* +X05517Y04095* +X05517Y04094* +X05517Y04094* +X05518Y04094* +X05519Y04093* +X0552Y04093* +X05521Y04092* +X05522Y04092* +X05523Y04092* +X05523* +X05524Y04092* +X05526Y04093* +X05527Y04093* +X05528Y04094* +X05528Y04094* +X05529Y04095* +X05529Y04095* +X05529Y04095* +X0553Y04096* +X05531Y04098* +X05531Y04099* +X05532Y041* +X05532Y04102* +X05532Y04103* +X05532Y04103* +Y04103* +Y04103* +Y04104* +X05532Y04105* +X05532Y04106* +X05531Y04108* +X05531Y04109* +X05531Y0411* +X05531Y04111* +X05531Y04112* +X0553Y04112* +X0553Y04112* +Y04112* +X0553Y04114* +X05529Y04116* +X05528Y04117* +X05527Y04118* +X05527Y04119* +X05526Y04119* +X05526Y0412* +X05526Y0412* +X05525Y04121* +X05523Y04121* +X05522Y04122* +X05521Y04122* +X0552Y04122* +X0552Y04122* +G37* +G36* +X05223Y04122D02* +X05222D01* +X05221Y04122* +X05219Y04122* +X05218Y04121* +X05217Y04121* +X05217Y0412* +X05216Y0412* +X05216Y04119* +X05216Y04119* +X05215Y04118* +X05214Y04117* +X05214Y04116* +X05213Y04115* +X05213Y04114* +X05213Y04113* +Y04112* +Y04112* +Y04112* +Y04112* +X05213Y0411* +X05213Y04109* +X05213Y04107* +X05214Y04106* +X05214Y04104* +X05214Y04103* +X05215Y04102* +X05215Y04101* +X05216Y041* +X05216Y04099* +X05217Y04098* +X05217Y04098* +X05217Y04097* +X05218Y04097* +X05218Y04097* +X05218Y04097* +X05219Y04096* +X05219Y04095* +X0522Y04095* +X05221Y04094* +X05222Y04093* +X05224Y04093* +X05225Y04093* +X05226Y04092* +X05226Y04092* +X05227* +X05228Y04092* +X05229Y04093* +X0523Y04093* +X05231Y04094* +X05232Y04094* +X05233Y04095* +X05233Y04095* +X05233Y04095* +X05234Y04096* +X05235Y04098* +X05235Y04099* +X05236Y041* +X05236Y04101* +X05236Y04102* +X05236Y04103* +Y04103* +Y04103* +Y04103* +X05236Y04105* +X05236Y04106* +X05235Y04108* +X05235Y04109* +X05235Y0411* +X05235Y04111* +X05234Y04112* +X05234Y04112* +X05234Y04112* +Y04112* +X05234Y04114* +X05233Y04115* +X05232Y04116* +X05231Y04118* +X05231Y04118* +X0523Y04119* +X0523Y04119* +X05229Y04119* +X05228Y0412* +X05227Y04121* +X05226Y04121* +X05225Y04122* +X05224Y04122* +X05223Y04122* +G37* +G36* +X05001Y04122D02* +X05D01* +X04999Y04122* +X04998Y04122* +X04997Y04121* +X04996Y04121* +X04995Y0412* +X04994Y04119* +X04994Y04119* +X04994Y04119* +X04993Y04118* +X04992Y04116* +X04992Y04115* +X04992Y04114* +X04991Y04113* +X04991Y04112* +Y04111* +Y04111* +Y04111* +Y04111* +X04991Y04109* +X04991Y04107* +X04992Y04106* +X04992Y04105* +X04992Y04103* +X04993Y04102* +X04993Y04102* +X04993Y04102* +X04993Y04102* +Y04102* +X04994Y041* +X04995Y04098* +X04995Y04097* +X04996Y04096* +X04997Y04095* +X04997Y04095* +X04998Y04094* +X04998Y04094* +X04999Y04094* +X05Y04093* +X05001Y04093* +X05002Y04092* +X05003Y04092* +X05004Y04092* +X05004* +X05006Y04092* +X05007Y04092* +X05008Y04093* +X05009Y04093* +X0501Y04094* +X0501Y04094* +X0501Y04095* +X05011Y04095* +X05011Y04096* +X05012Y04097* +X05012Y04099* +X05013Y041* +X05013Y04101* +X05013Y04102* +X05013Y04102* +Y04102* +Y04103* +Y04103* +X05013Y04104* +X05013Y04105* +X05012Y04108* +X05012Y0411* +X05012Y04111* +X05011Y04112* +X05011Y04113* +X05011Y04114* +X0501Y04114* +X0501Y04115* +X0501Y04115* +X0501Y04116* +X05009Y04116* +Y04116* +X05009Y04117* +X05008Y04118* +X05007Y04119* +X05007Y0412* +X05006Y0412* +X05005Y04121* +X05004Y04121* +X05004Y04121* +X05002Y04122* +X05002Y04122* +X05001Y04122* +X05001Y04122* +G37* +G36* +X05465Y04106D02* +X05464D01* +X05465Y04104* +X05465Y04102* +X05466Y04101* +X05466Y041* +X05466Y04099* +X05467Y04098* +X05467Y04097* +X05467Y04097* +X05467Y04097* +X05468Y04096* +X05468Y04095* +X05469Y04095* +X05469Y04094* +X0547Y04094* +X0547Y04094* +X05471Y04093* +X05471Y04093* +X05472Y04093* +X05473Y04093* +X05474Y04092* +X05474Y04092* +X05475Y04092* +X05476Y04092* +X05476* +X05477Y04092* +X05478Y04092* +X05479Y04093* +X05479Y04093* +X0548Y04093* +X0548Y04093* +X0548Y04093* +X0548Y04094* +X05481Y04094* +X05481Y04095* +X05481Y04095* +X05482Y04096* +X05482Y04097* +X05482Y04097* +Y04097* +Y04097* +X05482Y04098* +X05481Y04099* +X05481Y041* +X05481Y041* +X0548Y04101* +X0548Y04101* +X0548Y04101* +X0548Y04102* +X05479Y04102* +X05478Y04102* +X05478Y04103* +X05477Y04103* +X05475Y04104* +X05473Y04104* +X05471Y04104* +X0547Y04105* +X05469Y04105* +X05468Y04105* +X05468* +X05468Y04105* +X05467* +X05466Y04105* +X05466Y04105* +X05465Y04105* +X05465Y04105* +X05465* +X05465Y04106* +G37* +%LNunisolder52_back-5*% +%LPD*% +G54D36* +X05363Y03238D02* +X05398Y03203D01* +X05485Y03592D02* +X05488Y0359D01* +X05485Y03592D02* +X05485D01* +X05127Y0323D02* +X05488Y0359D01* +X05127Y02912D02* +X05192Y02847D01* +X05315Y02947D02* +X05412Y03044D01* +X05292Y02947D02* +X05315D01* +X0481Y0287D02* +X04814Y02866D01* +X06269Y03562D02* +Y03799D01* +Y03562D02* +X06289Y03543D01* +X0575Y04367D02* +X05758Y04358D01* +X0575Y04367D02* +Y04478D01* +X06278Y04576D02* +X06426Y04429D01* +X06486* +X05127Y02912D02* +Y0323D01* +X05309Y03238D02* +X05363D01* +X06263Y0425D02* +X0636D01* +X06486Y04124* +X06263Y04576D02* +X06278D01* +G54D39* +X05767Y05875D02* +Y06044D01* +X05677Y05954D02* +X05861D01* +X05972Y04914D02* +Y05098D01* +X05882Y05009D02* +X06066D01* +X05736Y04914D02* +Y05098D01* +X05646Y05009D02* +X0583D01* +X05409Y05825D02* +X05593D01* +X05499Y05731D02* +Y05915D01* +X05429Y03759D02* +X05518Y03849D01* +X0528Y03759D02* +X05429D01* +X05186Y03665D02* +X0528Y03759D01* +X05518Y03849D02* +X05573D01* +X05186Y03582D02* +Y03665D01* +X05734Y03849D02* +X0575Y03865D01* +X05573Y03849D02* +X05734D01* +X05573Y03849D02* +X05573Y03849D01* +G54D40* +X06444Y05913D02* +X06486Y05954D01* +X06444Y05751D02* +Y05913D01* +X06308Y05615D02* +X06444Y05751D01* +X05871Y05615D02* +X06308D01* +X05736Y0575D02* +X05871Y05615D01* +G54D41* +X05984Y05954D02* +X06269D01* +X05972Y0575D02* +Y05942D01* +X05984Y05954* +X06269Y05813D02* +Y05954D01* +X06208Y05752D02* +X06269Y05813D01* +X05972Y0575D02* +X06206D01* +G54D45* +X06271Y03113D02* +X0658Y03421D01* +X06271Y03031D02* +Y03113D01* +X0658Y03421D02* +Y03858D01* +X06791Y03319D02* +Y0435D01* +X06568Y03096D02* +X06791Y03319D01* +X06771Y05447D02* +Y05639D01* +Y04839D02* +Y05056D01* +Y0506* +G54D49* +X04535Y0322D02* +X04935D01* +G54D50* +X06117Y05851D03* +G54D55* +X04056Y03612D03* +X04273D03* +Y03447D03* +X04056D03* +X06486Y05954D03* +X06269D03* +X05767D03* +X05984D03* +G54D56* +X0461Y0287D03* +X0466Y0297D03* +X0471Y0287D03* +X0476Y0297D03* +X0481Y0287D03* +X0486Y0297D03* +X0586Y02851D03* +X0596D03* +G54D57* +X04535Y0322D03* +X04935D03* +G54D58* +X06421Y02814D03* +Y03031D03* +X06255D03* +Y02814D03* +G54D59* +X06771Y05391D03* +Y05657D03* +Y04805D03* +Y05071D03* +G54D60* +X05178Y04614D03* +G54D61* +X05178Y04692D03* +G54D62* +X05406Y0392D03* +X0499Y03498D03* +X05186Y03582D03* +G54D63* +X05603Y0392D03* +X04793Y03498D03* +X05382Y03582D03* +X04227Y03874D03* +G54D64* +X05499Y05825D03* +X06208Y05752D03* +X06444Y05751D03* +X05736Y05009D03* +X05972D03* +G54D65* +X05499Y05083D03* +X06208Y0501D03* +X06444Y0501D03* +X05736Y0575D03* +X05972D03* +G54D66* +X0606Y02851D03* +G54D67* +X05192Y02847D03* +G54D68* +X05192Y02947D03* +X05292Y02847D03* +Y02947D03* +X05392Y02847D03* +Y02947D03* +X05492Y02847D03* +Y02947D03* +X05592Y02847D03* +Y02947D03* +G54D69* +X04114Y02874D03* +X06751D03* +Y05925D03* +X04114Y04704D03* +G54D70* +X04088Y04013D03* +G54D71* +X0533Y04342D03* +X04529Y04421D03* +X0454Y04629D03* +X05366Y05044D03* +X06564Y06043D03* +X06377D03* +X0683Y05246D03* +X05679Y04744D03* +X0625Y04872D03* +X05856Y04881D03* +X05641Y05657D03* +X05665Y0598D03* +X05848Y0587D03* +X05905Y06055D03* +X05748D03* +X0559Y05905D03* +X05433D03* +X05511Y05984D03* +X0559Y06055D03* +X05433D03* +X05362Y05984D03* +Y05826D03* +Y05669D03* +Y05196D03* +Y05354D03* +Y05511D03* +X05433Y05275D03* +X05511Y05354D03* +X05433Y05433D03* +X05511Y05511D03* +X05433Y0559D03* +Y05748D03* +X0559D03* +X05511Y05669D03* +X0559Y0559D03* +X05748D03* +X05669Y05511D03* +Y05354D03* +X05826Y05511D03* +Y05354D03* +X05984Y05511D03* +Y05354D03* +X0559Y05433D03* +X05748D03* +X05905D03* +X06062D03* +X06614Y05669D03* +Y05511D03* +X06535Y05433D03* +Y0559D03* +X06456Y05511D03* +Y05354D03* +X06377Y05433D03* +X06299Y05511D03* +Y05354D03* +X0622Y05433D03* +X06141Y05354D03* +Y05511D03* +X04572Y03785D03* +X04796Y03822D03* +X05472Y03053D03* +X05397Y03202D03* +X05311Y03243D03* +X05578Y03788D03* +X05487Y0425D03* +X05098Y03382D03* +X05285Y0349D03* +X05485Y03592D03* +X0551Y03534D03* +X05623Y03788D03* +X05598Y04023D03* +X05774Y03578D03* +X0575Y03865D03* +X05401Y03433D03* +X05442Y02804D03* +X05551Y02896D03* +X05243Y02905D03* +X05343Y02896D03* +X05258Y03008D03* +X05351Y03053D03* +X05412Y03044D03* +X05765Y02806D03* +X06157Y032D03* +X06189Y0325D03* +X05846Y03307D03* +X05816Y03257D03* +X05846Y03208D03* +X05875Y03257D03* +X06072Y04089D03* +X05218Y04837D03* +X05806Y04152D03* +X05905Y03208D03* +X05964D03* +X05994Y03257D03* +X05068Y02992D03* +X05994Y03553D03* +X06053D03* +X06112D03* +X05232Y02757D03* +X06084Y0395D03* +X05659Y04881D03* +X04317Y03767D03* +X03996Y04507D03* +X04133Y04429D03* +X0433Y04822D03* +X04899Y04821D03* +X04527Y04822D03* +X04724D03* +X04303Y02749D03* +X06073Y02757D03* +X06003Y02919D03* +X05767Y02898D03* +X05885Y0308D03* +X05935Y03257D03* +X05592Y03641D03* +X05257Y03589D03* +X05167Y03502D03* +X05207Y03404D03* +X06855Y04684D03* +X06063Y04872D03* +X0524Y03237D03* +X04953Y02985D03* +X04907Y02878D03* +X05045Y02884D03* +X0508Y03127D03* +X05179Y03025D03* +X0574Y03423D03* +X05589Y03115D03* +X05658Y04435D03* +X05661Y04177D03* +X05754Y04355D03* +X05679Y04586D03* +X05905Y03307D03* +X05875Y03553D03* +X06486Y04124D03* +Y04429D03* +X06263Y04576D03* +X0685Y04527D03* +X06614D03* +X06673D03* +X06732D03* +X06791D03* +X06417Y03937D03* +X06653D03* +X06594D03* +X06535D03* +X06476D03* +X06417Y03661D03* +X06476D03* +X06535D03* +X06594D03* +X06653D03* +X0685Y04251D03* +X06791D03* +X06732D03* +X06673D03* +X06614D03* +X0442Y0379D03* +X04802Y03967D03* +X04763Y04007D03* +X04324Y04449D03* +X04232Y04527D03* +X04392Y04229D03* +X05063Y0353D03* +X05487Y04565D03* +X05114Y04581D03* +X05269Y04603D03* +X04902Y0275D03* +X04305Y03364D03* +X04524Y02749D03* +X04384Y0299D03* +X04015Y03129D03* +X04186Y03181D03* +X0404Y03314D03* +X03985Y03776D03* +X03986Y03982D03* +Y04188D03* +X04822Y04724D03* +X04625D03* +X04429D03* +X0433Y04625D03* +X04724D03* +X04625Y04527D03* +X04724Y04429D03* +X04645Y04311D03* +X04932Y0453D03* +X04844Y04206D03* +X049Y04361D03* +X0499Y03347D03* +X04787Y03342D03* +X04515Y03337D03* +X0433Y03937D03* +X0449Y04161D03* +X04806Y03231D03* +X0453Y02906D03* +X04678Y0317D03* +X04173Y03699D03* +X04487Y04316D03* +X04015Y0435D03* +X04327Y04148D03* +X04223Y04134D03* +X05267Y04503D03* +X04477Y03964D03* +X04543D03* +X04608D03* +X0449Y04094D03* +X04178Y04023D03* +X0488Y03444D03* +X04742Y03593D03* +X06259Y03307D03* +X062D03* +X06141D03* +X06082D03* +X06023D03* +X05964D03* +X05935Y03553D03* +X06269Y03799D03* +X06289Y03543D03* +X0575Y04478D03* +X05922Y03937D03* +X05828Y0386D03* +X06102Y03799D03* +X05773Y03723D03* +X05619Y03412D03* +X05788Y04593D03* +X05838Y04541D03* +X06195Y04476D03* +X05837Y0422D03* +X06344Y03808D03* +X0613Y03251D03* +X0611Y04402D03* +X06114Y0473D03* +X05856Y05039D03* +X04491Y04026D03* +X06692Y04685D03* +Y04606D03* +X06771Y04685D03* +Y04606D03* +X0685D03* +X04841Y04004D03* +X04921Y04005D03* +X04882Y03966D03* +X04566Y04316D03* +X04321Y04078D03* +X04819Y0369D03* +X04921Y03692D03* +X05377Y04736D03* +X05349Y04896D03* +X0548Y04898D03* +X04992Y04701D03* +X04926Y04261D03* +X06262Y04168D03* +X06263Y0425D03* +X05989Y04087D03* +X04716Y03756D03* +X06306Y03951D03* +G54D72* +X06371Y05039D02* +X06771Y05439D01* +X06208Y0501D02* +X06443D01* +M02* \ No newline at end of file diff --git a/hardware/gerber/unisolder52_back.gbo b/hardware/gerber/unisolder52_back.gbo new file mode 100644 index 0000000..f94029c --- /dev/null +++ b/hardware/gerber/unisolder52_back.gbo @@ -0,0 +1,22 @@ +%FSTAX23Y23*% +%MOIN*% +%SFA1B1*% + +%IPPOS*% +%ADD75C,0.010000*% +%LNunisolder52_back-1*% +%LPD*% +G54D75* +X0447Y02815D02* +X05D01* +X0447Y0342D02* +X05D01* +X0447Y0327D02* +Y0342D01* +Y02815D02* +Y0317D01* +X05Y02815D02* +Y0317D01* +Y0327D02* +Y0342D01* +M02* \ No newline at end of file diff --git a/hardware/gerber/unisolder52_back.gbs b/hardware/gerber/unisolder52_back.gbs new file mode 100644 index 0000000..228f057 --- /dev/null +++ b/hardware/gerber/unisolder52_back.gbs @@ -0,0 +1,1901 @@ +%FSTAX23Y23*% +%MOIN*% +%SFA1B1*% + +%IPPOS*% +%AMD110* +4,1,8,0.072900,-0.055100,0.072900,0.055100,0.055100,0.072900,-0.055100,0.072900,-0.072900,0.055100,-0.072900,-0.055100,-0.055100,-0.072900,0.055100,-0.072900,0.072900,-0.055100,0.0* +1,1,0.035560,0.055100,-0.055100* +1,1,0.035560,0.055100,0.055100* +1,1,0.035560,-0.055100,0.055100* +1,1,0.035560,-0.055100,-0.055100* +% +%AMD111* +4,1,8,-0.033500,0.020700,-0.033500,-0.020700,-0.020700,-0.033500,0.020700,-0.033500,0.033500,-0.020700,0.033500,0.020700,0.020700,0.033500,-0.020700,0.033500,-0.033500,0.020700,0.0* +1,1,0.025720,-0.020700,0.020700* +1,1,0.025720,-0.020700,-0.020700* +1,1,0.025720,0.020700,-0.020700* +1,1,0.025720,0.020700,0.020700* +% +%AMD113* +4,1,8,0.025500,0.040400,-0.025500,0.040400,-0.040400,0.025500,-0.040400,-0.025500,-0.025500,-0.040400,0.025500,-0.040400,0.040400,-0.025500,0.040400,0.025500,0.025500,0.040400,0.0* +1,1,0.029860,0.025500,0.025500* +1,1,0.029860,-0.025500,0.025500* +1,1,0.029860,-0.025500,-0.025500* +1,1,0.029860,0.025500,-0.025500* +% +%AMD116* +4,1,8,0.059100,-0.038600,0.059100,0.038600,0.038600,0.059100,-0.038600,0.059100,-0.059100,0.038600,-0.059100,-0.038600,-0.038600,-0.059100,0.038600,-0.059100,0.059100,-0.038600,0.0* +1,1,0.041080,0.038600,-0.038600* +1,1,0.041080,0.038600,0.038600* +1,1,0.041080,-0.038600,0.038600* +1,1,0.041080,-0.038600,-0.038600* +% +%AMD117* +4,1,8,-0.017500,-0.039000,0.017500,-0.039000,0.039000,-0.017500,0.039000,0.017500,0.017500,0.039000,-0.017500,0.039000,-0.039000,0.017500,-0.039000,-0.017500,-0.017500,-0.039000,0.0* +1,1,0.043000,-0.017500,-0.017500* +1,1,0.043000,0.017500,-0.017500* +1,1,0.043000,0.017500,0.017500* +1,1,0.043000,-0.017500,0.017500* +% +%AMD121* +4,1,8,0.046600,0.010500,0.010500,0.046600,-0.010500,0.046600,-0.046600,0.010500,-0.046600,-0.010500,-0.010500,-0.046600,0.010500,-0.046600,0.046600,-0.010500,0.046600,0.010500,0.0* +1,1,0.029860,0.036100,0.000000* +1,1,0.029860,0.000000,0.036100* +1,1,0.029860,-0.036100,0.000000* +1,1,0.029860,0.000000,-0.036100* +% +%ADD107O,0.126110X0.086740*% +%ADD108C,0.078000*% +%ADD109O,0.086740X0.126110*% +G04~CAMADD=110~8~0.0~0.0~1457.9~1457.9~177.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~1458.0~1458.0* +%ADD110D110*% +G04~CAMADD=111~8~0.0~0.0~670.6~670.6~128.6~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~670.0~670.0* +%ADD111D111*% +%ADD112C,0.067060*% +G04~CAMADD=113~8~0.0~0.0~808.3~808.3~149.3~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~808.3~808.3* +%ADD113D113*% +%ADD114C,0.080830*% +%ADD115C,0.118240*% +G04~CAMADD=116~8~0.0~0.0~1182.4~1182.4~205.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~1182.0~1182.0* +%ADD116D116*% +G04~CAMADD=117~8~0.0~0.0~780.0~780.0~215.0~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~780.0~780.0* +%ADD117D117*% +%ADD118R,0.067060X0.067060*% +%ADD119C,0.067060*% +%ADD120C,0.322000*% +G04~CAMADD=121~8~0.0~0.0~808.3~808.3~149.3~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~315.0~1018.0~1017.0* +%ADD121D121*% +%LNunisolder52_back-1*% +%LPD*% +G36* +X05116Y04089D02* +X05115D01* +X05116Y04084* +X05115* +X05116Y04079* +X0506* +X05058Y04089* +X05059* +X05058Y04094* +X05059* +X05058Y04099* +X05088* +X05079Y04143* +X0508* +X05079Y04148* +X0508* +X05079Y04153* +X05103* +X05116Y04089* +G37* +G36* +X04991Y04135D02* +X04992Y04135D01* +X04993Y04136* +X04994Y04136* +X04995Y04136* +X04995Y04136* +X04996* +X04997Y04136* +X04997* +X04999Y04136* +X05Y04136* +X05Y04136* +X05001* +X05002Y04136* +X05002* +X05004Y04136* +X05005Y04136* +X05005Y04136* +X05006* +X05007Y04136* +X05007* +X05009Y04136* +X05011Y04136* +X05012Y04136* +X05014Y04135* +X05016Y04134* +X05017Y04134* +X05018Y04133* +X05019Y04132* +X0502Y04131* +X05021Y0413* +X05021* +X0502Y04135* +X05026* +X05025Y04141* +X05026Y04141* +X05025Y04146* +X05026Y04146* +X05025Y04151* +X0503Y04148* +X0503Y04151* +X05035Y04148* +X05035Y04151* +X05049Y04143* +X0505Y04135* +X05057* +X05058Y04126* +X05057* +X05058Y04121* +X05057* +X05058Y04116* +X05054* +X05056Y04107* +X05057Y04106* +X05057Y04105* +X05057Y04103* +X05057Y04102* +X05057Y04101* +X05057Y04101* +X05058Y041* +X05058Y04099* +Y04099* +X05058Y04098* +X05058Y04098* +Y04097* +Y04097* +X05058Y04096* +X05058Y04095* +X05058Y04095* +X05058Y04094* +Y04094* +X05058Y04093* +X05058Y04093* +Y04092* +Y04092* +X05058Y04091* +X05058Y0409* +X05058Y0409* +X05058Y04089* +Y04089* +X05058Y04088* +X05058Y04088* +Y04087* +Y04087* +X05058Y04086* +X05057Y04084* +X05057Y04083* +X05056Y04082* +X05056Y04081* +X05055Y04081* +X05055Y0408* +X05055Y0408* +X05054Y0408* +X05054Y04079* +X05052Y04079* +X05051Y04078* +X05049Y04078* +X05048Y04078* +X05047Y04078* +X05046* +X05046Y04078* +X05044* +X05043Y04078* +X05042Y04078* +X05042Y04078* +X05041* +X05041Y04078* +X05039* +X05038Y04078* +X05037Y04078* +X05037Y04078* +X05036* +X05036Y04078* +X05034* +X05033Y04078* +X05032Y04078* +X05031Y04078* +X0503Y04078* +X05029Y04078* +X05029Y04078* +X05029* +X05027Y04085* +X05027Y04085* +X05027Y04084* +X05026Y04083* +X05026Y04083* +X05026Y04083* +X05026Y04083* +X05026Y04083* +X05025Y04082* +X05024Y04081* +X05023Y0408* +X05022Y0408* +X05021Y04079* +X0502Y04079* +X05018Y04078* +X05017Y04078* +X05016Y04078* +X05015Y04078* +X05015Y04078* +X05014* +X05013Y04078* +X05011Y04078* +X05011Y04078* +X0501Y04078* +X0501Y04078* +X05009* +X05008Y04078* +X05006Y04078* +X05006Y04078* +X05005Y04078* +X05005Y04078* +X05004* +X05003Y04078* +X05001Y04078* +X05Y04078* +X04999Y04078* +X04998Y04079* +X04997Y04079* +X04979* +X04976Y04092* +X04977Y04089* +X04976* +X04977Y04084* +X04976* +X04977Y04079* +X04954* +X04952Y04091* +X04953* +X04952Y04096* +X04953* +X04952Y04101* +X04974* +X04965Y04143* +X04966* +X04965Y04148* +X04966* +X04965Y04153* +X04988* +X04991Y04135* +G37* +G36* +X05583Y04154D02* +X05585Y04154D01* +X05586Y04154* +X05588Y04153* +X0559Y04153* +X05591Y04152* +X05592Y04152* +X05593Y04151* +X05594Y04151* +X05595Y0415* +X05596Y0415* +X05597Y04149* +X05597Y04149* +X05597Y04149* +X05598Y04149* +X05598Y04149* +X05599Y04148* +X056Y04147* +X056Y04145* +X05601Y04144* +X05602Y04143* +X05602Y04142* +X05603Y04141* +X05603Y0414* +X05603Y04139* +X05603Y04138* +X05603Y04137* +X05603Y04137* +X05604Y04136* +Y04136* +Y04135* +Y04135* +X05603Y04134* +X05603Y04133* +X05603Y04132* +X05603Y04132* +X05604Y04131* +Y04131* +Y0413* +Y0413* +X05603Y04129* +X05603Y04128* +X05603Y04127* +X05603Y04127* +X05604Y04126* +Y04126* +Y04125* +Y04125* +X05603Y04124* +X05603Y04122* +X05603Y04121* +X05603Y04119* +X05602Y04118* +X05602Y04118* +X05602Y04117* +X05602Y04117* +X05601Y04116* +X056Y04115* +X05599Y04114* +X05598Y04113* +X05597Y04112* +X05597Y04112* +X05596Y04112* +X05596Y04111* +X05596Y04111* +X05595Y04111* +X05594Y0411* +X05599Y0411* +Y0411* +Y0411* +Y0411* +X05611Y04109* +Y04107* +X05611Y04105* +X05611Y04105* +X05611Y04104* +Y04102* +X05611Y041* +X05611Y041* +X05611Y04099* +Y04097* +X05611Y04095* +X05611Y04093* +X0561Y04091* +X0561Y04091* +X0561Y0409* +X0561Y04089* +X05609Y04089* +X05609Y04089* +X05609Y04088* +X05609Y04088* +Y04088* +X05609Y04087* +X05608Y04086* +X05607Y04085* +X05605Y04083* +X05604Y04082* +X05603Y04082* +X05602Y04081* +X05601Y04081* +X05601Y04081* +X05601Y04081* +X05601Y0408* +X056* +X05598Y0408* +X05596Y04079* +X05593Y04078* +X05591Y04078* +X0559Y04078* +X05589Y04078* +X05588Y04078* +X05588* +X05587Y04078* +X05586* +X05584Y04078* +X05584Y04078* +X05583Y04078* +X05583* +X05582Y04078* +X05581* +X05579Y04078* +X05579Y04078* +X05578Y04078* +X05578* +X05577Y04078* +X05576* +X05574Y04078* +X05572Y04078* +X0557Y04078* +X05568Y04079* +X05567Y04079* +X05565Y0408* +X05564Y0408* +X05562Y04081* +X05561Y04081* +X0556Y04082* +X05559Y04082* +X05559Y04083* +X05558Y04083* +X05558Y04083* +X05558Y04084* +X05557Y04084* +X05556Y04085* +X05555Y04086* +X05555Y04087* +X05558Y04071* +X05557* +X05558Y04066* +X05557* +X05558Y04061* +X05535* +X05532Y04079* +X05532Y04079* +X05531Y04078* +X0553Y04078* +X05529Y04078* +X05528Y04078* +X05527* +X05527Y04078* +X05526* +X05525Y04078* +X05524Y04078* +X05524Y04078* +X05523Y04078* +X05522* +X05522Y04078* +X05521* +X0552Y04078* +X05519Y04078* +X05519Y04078* +X05518Y04078* +X05517* +X05517Y04078* +X05516* +X05515Y04078* +X05513Y04078* +X05512Y04078* +X0551Y04079* +X05509Y04079* +X05507Y0408* +X05506Y04081* +X05505Y04081* +X05504Y04082* +X05503Y04083* +X05503Y04083* +X05502Y04084* +X05501Y04084* +X05501Y04085* +X05501Y04085* +X05501Y04085* +X05499Y04087* +X05498Y04088* +X05498Y04087* +X05497Y04086* +X05497Y04084* +X05496Y04083* +X05495Y04082* +X05495Y04082* +X05495Y04082* +X05495Y04082* +Y04081* +X05494Y04081* +X05493Y0408* +X05492Y04079* +X0549Y04079* +X05489Y04078* +X05487Y04078* +X05487Y04078* +X05486* +X05486Y04078* +X05485* +X05484Y04078* +X05483Y04078* +X05482Y04078* +X05482Y04078* +X05481* +X05481Y04078* +X0548* +X05479Y04078* +X05478Y04078* +X05477Y04078* +X05477Y04078* +X05476* +X05476Y04078* +X05475* +X05474Y04078* +X05473Y04078* +X05472Y04078* +X0547Y04079* +X0547Y04079* +X05428* +X05425Y04093* +X05424Y04095* +X05424Y04096* +X05424Y04098* +X05423Y04099* +X05423Y041* +X05423Y04101* +X05422Y04102* +X05422Y04103* +X05422Y04104* +X05421Y04105* +X05421Y04105* +X05421Y04106* +X05421Y04106* +X05421Y04106* +X05421Y04106* +Y04106* +X0542Y04108* +X05419Y04109* +X05418Y0411* +X05417Y04111* +X05417Y04112* +X05416Y04112* +X05416Y04113* +X05416Y04113* +X05414Y04114* +X05413Y04114* +X05412Y04115* +X05411Y04115* +X05411Y04115* +X05411Y04115* +X0541Y04115* +X0541* +X0541Y04115* +X0541Y04115* +X05409* +X05415Y04089* +X05414* +X05415Y04084* +X05414* +X05415Y04079* +X05392* +X05389Y04093* +X05389Y04093* +X05384Y04079* +X05367* +X05368Y04071* +X05367Y04071* +X05368Y04066* +X05367Y04066* +X05368Y04061* +X05366Y04061* +X05364Y04061* +X05363Y0406* +X05361Y0406* +X0536Y0406* +X0536Y0406* +X05359* +X05357Y0406* +X05357Y0406* +X05356Y0406* +X05355Y0406* +X05355Y0406* +X05354* +X05352Y0406* +X05352Y0406* +X05351Y0406* +X0535Y0406* +X0535Y0406* +X05349* +X05347Y0406* +X05346Y0406* +X05345Y04061* +X05344Y04061* +X05343Y04061* +X05343Y04061* +X05342Y04061* +X05342Y04062* +X05341Y04062* +X0534Y04063* +X05339Y04063* +X05338Y04064* +X05338Y04065* +X05337Y04065* +X05337Y04065* +X05337Y04066* +X05337Y04066* +X05336Y04067* +X05335Y04068* +X05334Y04069* +X05334Y04071* +X05333Y04072* +X05332Y04073* +X05332Y04073* +X05332Y04074* +X05332Y04074* +X05331Y04074* +Y04074* +X05313Y04107* +Y04107* +X05313Y04105* +X05313Y04105* +X05313Y04104* +Y04102* +X05313Y041* +X05313Y041* +X05313Y04099* +Y04097* +X05313Y04095* +X05312Y04093* +X05312Y04091* +X05312Y04091* +X05311Y0409* +X05311Y04089* +X05311Y04089* +X05311Y04089* +X05311Y04088* +X05311Y04088* +Y04088* +X0531Y04087* +X0531Y04086* +X05308Y04085* +X05307Y04083* +X05305Y04082* +X05304Y04082* +X05304Y04081* +X05303Y04081* +X05303Y04081* +X05302Y04081* +X05302Y0408* +X05302* +X053Y0408* +X05297Y04079* +X05295Y04078* +X05293Y04078* +X05292Y04078* +X05291Y04078* +X0529Y04078* +X05289* +X05289Y04078* +X05288* +X05286Y04078* +X05285Y04078* +X05285Y04078* +X05284* +X05284Y04078* +X05283* +X05281Y04078* +X0528Y04078* +X0528Y04078* +X05279* +X05279Y04078* +X05278* +X05276Y04078* +X05274Y04078* +X05272Y04078* +X0527Y04079* +X05268Y04079* +X05267Y0408* +X05265Y0408* +X05264Y04081* +X05263Y04081* +X05262Y04082* +X05261Y04082* +X0526Y04083* +X0526Y04083* +X05259Y04083* +X05259Y04084* +X05259Y04084* +X05258Y04085* +X05257Y04086* +X05256Y04087* +X05255Y04088* +X05255Y0409* +X05254Y04091* +X05254Y04092* +X05253Y04093* +X05253Y04094* +X05253Y04092* +X05252Y04091* +X05252Y04089* +X05252Y04089* +X05251Y04088* +X05251Y04088* +X05251Y04088* +X05251Y04088* +Y04088* +X0525Y04086* +X05249Y04084* +X05248Y04083* +X05246Y04082* +X05245Y04081* +X05244Y04081* +X05244Y04081* +X05244Y0408* +X05244Y0408* +X05244* +X05242Y04079* +X0524Y04079* +X05238Y04078* +X05236Y04078* +X05234Y04078* +X05234Y04078* +X05233* +X05233Y04078* +X05232* +X0523Y04078* +X05229Y04078* +X05229Y04078* +X05228* +X05228Y04078* +X05227* +X05225Y04078* +X05224Y04078* +X05224Y04078* +X05223* +X05223Y04078* +X05222* +X0522Y04078* +X05218Y04078* +X05216Y04078* +X05214Y04079* +X05212Y0408* +X05211Y0408* +X05209Y04081* +X05208Y04082* +X05207Y04083* +X05206Y04083* +X05205Y04084* +X05204Y04085* +X05203Y04085* +X05203Y04086* +X05203Y04086* +X05203Y04086* +X05201Y04087* +X052Y04089* +X05199Y04091* +X05199Y04091* +X052Y04089* +X05198* +X052Y04084* +X05198* +X052Y04079* +X05177* +X05169Y04116* +X05168* +X05168Y04116* +X05164* +X05166Y04107* +X05166Y04106* +X05166Y04105* +X05166Y04103* +X05167Y04102* +X05167Y04101* +X05167Y04101* +X05167Y041* +X05167Y04099* +Y04099* +X05167Y04098* +X05167Y04098* +Y04097* +Y04097* +X05167Y04096* +X05167Y04095* +X05167Y04095* +X05167Y04094* +Y04094* +X05167Y04093* +X05167Y04093* +Y04092* +Y04092* +X05167Y04091* +X05167Y0409* +X05167Y0409* +X05167Y04089* +Y04089* +X05167Y04088* +X05167Y04088* +Y04087* +Y04087* +X05167Y04086* +X05167Y04084* +X05166Y04083* +X05166Y04082* +X05165Y04081* +X05165Y04081* +X05164Y0408* +X05164Y0408* +X05164Y0408* +X05163Y04079* +X05161Y04079* +X0516Y04078* +X05158Y04078* +X05157Y04078* +X05156Y04078* +X05156* +X05155Y04078* +X05153* +X05152Y04078* +X05152Y04078* +X05151Y04078* +X05151* +X0515Y04078* +X05148* +X05147Y04078* +X05147Y04078* +X05146Y04078* +X05146* +X05145Y04078* +X05143* +X05142Y04078* +X05141Y04078* +X0514Y04078* +X05139Y04078* +X05139Y04078* +X05138Y04078* +X05138* +X05136Y04088* +X05137Y04088* +X05136Y04093* +X05137Y04093* +X05136Y04098* +X05137Y04098* +X05138Y04097* +X05139Y04097* +X05139* +X0514Y04097* +X05141* +X05141Y04097* +X05141Y04098* +X05142Y04098* +X05142Y04098* +X05142Y04098* +X05143Y04098* +X05143Y04098* +X05139Y04116* +X05131* +X0513Y04125* +X05131* +X0513Y0413* +X05131* +X0513Y04135* +X05135* +X05134Y04141* +X05135Y04141* +X05134Y04146* +X05135Y04146* +X05134Y04151* +X0514Y04148* +X05139Y04151* +X05145Y04148* +X05144Y04151* +X05153Y04146* +X05152Y04147* +X05154Y04147* +X05152Y04152* +X05155Y04153* +X05157Y04153* +X05159Y04154* +X05161Y04154* +X05162Y04154* +X05162Y04154* +X05163* +X05163Y04154* +X05164* +X05166Y04154* +X05167Y04154* +X05167Y04154* +X05168* +X05168Y04154* +X05169* +X05171Y04154* +X05172Y04154* +X05172Y04154* +X05173* +X05173Y04154* +X05174* +X05176Y04154* +X05178Y04154* +X05179Y04154* +X0518Y04153* +X05181Y04153* +X05182Y04153* +X05182Y04152* +X05182Y04152* +X05183Y04152* +X05184Y04151* +X05185Y0415* +X05185Y0415* +X05186Y04149* +X05186Y04148* +X05186Y04148* +X05187Y04148* +X05187Y04147* +X05187Y04147* +X05187Y04146* +X05188Y04144* +X05188Y04143* +X05188Y04142* +X05189Y04141* +X05189Y04141* +X05189Y0414* +X05189Y0414* +Y0414* +X0519Y04135* +X05197* +X05199Y04127* +X05199Y04128* +X05199Y04128* +X052Y04129* +X052Y0413* +X05201Y0413* +X05201Y0413* +X05201Y04131* +X05201Y04131* +X05202Y04132* +X05204Y04133* +X05205Y04133* +X05206Y04134* +X05208Y04135* +X05209Y04135* +X0521Y04135* +X05211Y04136* +X05213Y04136* +X05214Y04136* +X05215Y04136* +X05216Y04136* +X05216Y04136* +X05217* +X05219Y04136* +X0522Y04136* +X05221Y04136* +X05221Y04136* +X05222* +X05224Y04136* +X05225Y04136* +X05226Y04136* +X05226Y04136* +X05227* +X05229Y04136* +X05232Y04136* +X05233Y04136* +X05235Y04135* +X05237Y04135* +X05239Y04134* +X0524Y04133* +X05241Y04133* +X05242Y04132* +X05243Y04131* +X05244Y0413* +X05245Y0413* +X05246Y04129* +X05246Y04129* +X05246Y04129* +X05246Y04129* +X05248Y04127* +X05248Y04126* +X05248Y04126* +X05249Y04128* +X05249Y04129* +X05249Y0413* +X05248Y0413* +X05248Y04131* +X05249Y04133* +X05249Y04134* +X05249Y04135* +X05248Y04135* +X05248Y04136* +X05249Y04138* +X05249Y04139* +X05249Y04141* +X0525Y04142* +X05251Y04143* +X05251Y04144* +X05252Y04145* +X05252Y04146* +X05253Y04147* +X05254Y04147* +X05254Y04148* +X05254Y04148* +X05255Y04148* +X05255Y04149* +X05255Y04149* +X05256Y0415* +X05257Y0415* +X05259Y04151* +X0526Y04152* +X05262Y04152* +X05263Y04153* +X05266Y04153* +X05267Y04154* +X05269Y04154* +X0527Y04154* +X05271Y04154* +X05271Y04154* +X05272* +X05274Y04154* +X05275Y04154* +X05276Y04154* +X05276Y04154* +X05277* +X05279Y04154* +X0528Y04154* +X05281Y04154* +X05281Y04154* +X05282* +X05284Y04154* +X05286Y04154* +X05288Y04154* +X0529Y04153* +X05291Y04153* +X05293Y04152* +X05294Y04152* +X05295Y04151* +X05296Y04151* +X05297Y0415* +X05298Y0415* +X05298Y04149* +X05299Y04149* +X05299Y04149* +X05299Y04149* +X05299Y04149* +X053Y04148* +X05301Y04147* +X05302Y04145* +X05303Y04144* +X05303Y04143* +X05304Y04142* +X05304Y04141* +X05304Y0414* +X05305Y04139* +X05305Y04138* +X05305Y04137* +X05305Y04137* +X05305Y04136* +Y04136* +Y04135* +Y04135* +X05326* +X05336Y04117* +X05338Y04135* +X0538* +X05381Y04134* +X05379Y04143* +X0538* +X05379Y04148* +X0538* +X05379Y04153* +X05401* +X05405Y04136* +X05405Y04136* +X05406Y04136* +X05406* +X05408Y04136* +X05409Y04136* +X0541Y04136* +X0541Y04136* +X05411Y04136* +X05411* +X05413Y04136* +X05414Y04136* +X05415Y04136* +X05415Y04136* +X05416Y04136* +X05416* +X05418Y04136* +X05419Y04136* +X0542Y04135* +X05421Y04135* +X0544* +X05445Y04113* +Y04114* +Y04114* +Y04114* +X05445Y04115* +X05445Y04116* +X05445Y04116* +X05445Y04116* +X05445Y04117* +Y04118* +X05445Y04118* +Y04119* +Y04119* +Y04119* +X05445Y0412* +X05445Y04121* +X05445Y04121* +X05445Y04121* +X05445Y04122* +Y04123* +X05445Y04123* +Y04124* +Y04124* +Y04124* +X05445Y04125* +X05445Y04126* +X05446Y04127* +X05446Y04129* +X05447Y0413* +X05448Y04131* +X05449Y04132* +X05449Y04133* +X05449Y04133* +X05449* +X0545Y04133* +X05451Y04134* +X05453Y04135* +X05455Y04135* +X05457Y04136* +X05458Y04136* +X05459Y04136* +X0546Y04136* +X05461* +X05462Y04136* +X05464* +X05465Y04136* +X05465Y04136* +X05466* +X05467Y04136* +X05469* +X0547Y04136* +X0547Y04136* +X05471* +X05472Y04136* +X05474* +X05476Y04136* +X05477Y04136* +X05478Y04136* +X0548Y04136* +X05481Y04135* +X05482Y04135* +X05483Y04135* +X05484Y04134* +X05484Y04134* +X05485Y04134* +X05485Y04133* +X05486Y04133* +X05486Y04133* +X05486Y04133* +X05486Y04133* +X05488Y04131* +X0549Y0413* +X05491Y04128* +X05492Y04127* +X05493Y04125* +X05493Y04125* +X05493Y04124* +X05493Y04124* +X05494Y04123* +X05494Y04123* +Y04123* +X05491Y04123* +X05492Y04122* +X05493Y0412* +X05493Y0412* +X05493Y04119* +X05493Y04119* +X05493Y0412* +X05494Y04121* +X05494Y04123* +X05494Y04124* +X05495Y04125* +X05495Y04127* +X05495Y04128* +X05496Y04128* +X05496Y04129* +X05497Y0413* +X05497Y0413* +X05497Y04131* +X05497Y04131* +X05498Y04131* +X05498Y04131* +X05498Y04132* +X05499Y04133* +X055Y04134* +X05501Y04134* +X05502Y04135* +X05503Y04135* +X05505Y04136* +X05507Y04136* +X05507Y04136* +X05508Y04136* +X05509Y04136* +X05509* +X05511Y04136* +X05512Y04136* +X05512Y04136* +X05513Y04136* +X05514Y04136* +X05514* +X05516Y04136* +X05517Y04136* +X05517Y04136* +X05518Y04136* +X05519Y04136* +X05519* +X05521Y04136* +X05522Y04136* +X05523Y04136* +X05524Y04136* +X05525Y04135* +X05526Y04135* +X05544* +X05547Y04125* +X05547Y04126* +X05547Y04128* +X05547Y04129* +X05547Y0413* +X05546Y0413* +X05547Y04131* +X05547Y04133* +X05547Y04134* +X05547Y04135* +X05546Y04135* +X05547Y04136* +X05547Y04138* +X05547Y04139* +X05548Y04141* +X05548Y04142* +X05549Y04143* +X0555Y04144* +X0555Y04145* +X05551Y04146* +X05551Y04147* +X05552Y04147* +X05552Y04148* +X05553Y04148* +X05553Y04148* +X05553Y04149* +X05553Y04149* +X05555Y0415* +X05556Y0415* +X05557Y04151* +X05559Y04152* +X0556Y04152* +X05562Y04153* +X05564Y04153* +X05566Y04154* +X05567Y04154* +X05568Y04154* +X05569Y04154* +X0557Y04154* +X05571* +X05573Y04154* +X05573Y04154* +X05574Y04154* +X05575Y04154* +X05576* +X05578Y04154* +X05578Y04154* +X05579Y04154* +X0558Y04154* +X05581* +X05583Y04154* +G37* +%LNunisolder52_back-2*% +%LPC*% +G36* +X05222Y04116D02* +X05222Y04116D01* +X05222Y04115* +X05221Y04115* +X05221Y04114* +X05221Y04114* +X0522Y04113* +X05219Y04112* +X05219Y04111* +X05219Y04111* +X05219Y04109* +X05219Y04108* +X0522Y04107* +X0522Y04106* +X05221Y04105* +X05221Y04104* +X05222Y04103* +X05222Y04103* +X05222Y04102* +X05223Y04102* +X05223Y04102* +X05223Y04102* +X05224Y04101* +X05224Y041* +X05225Y041* +X05226Y04099* +X05226Y04099* +X05226Y04099* +X05227Y04099* +X05228Y041* +X05228Y041* +X05228Y041* +X05229Y04101* +X0523Y04103* +X0523Y04104* +X0523Y04104* +X0523Y04105* +X0523Y04106* +X05229Y04107* +X05229Y04107* +X05229Y04107* +Y04107* +X05229Y04109* +X05228Y0411* +X05227Y04111* +X05226Y04113* +X05226Y04113* +X05225Y04114* +X05225Y04114* +X05224Y04114* +X05223Y04115* +X05222Y04116* +G37* +G36* +X05519Y04116D02* +X05519Y04115D01* +X05518Y04115* +X05518Y04115* +X05518Y04115* +X05517Y04113* +X05516Y04112* +X05516Y04111* +X05516Y0411* +X05517Y04109* +X05517Y04108* +X05517Y04108* +X05517Y04107* +X05517Y04107* +X05517Y04107* +Y04107* +X05518Y04105* +X05519Y04103* +X0552Y04102* +X0552Y04101* +X05521Y041* +X05522Y041* +X05522Y04099* +X05522Y04099* +X05523Y04099* +X05523Y04099* +X05524Y041* +X05524Y041* +X05524Y041* +X05525Y04101* +X05526Y04103* +X05526Y04104* +X05526Y04104* +X05526Y04105* +X05526Y04106* +X05526Y04107* +X05525Y04107* +X05525Y04107* +Y04107* +X05525Y04109* +X05524Y04111* +X05523Y04112* +X05522Y04113* +X05522Y04114* +X05521Y04114* +X05521Y04115* +X05521Y04115* +X0552Y04116* +X05519Y04116* +G37* +G36* +X0529Y04108D02* +X05289Y04107D01* +X05289Y04107* +X05288Y04107* +X05288Y04106* +X05287Y04106* +X05287Y04106* +X05287* +X05286Y04105* +X05284Y04105* +X05283Y04104* +X05282Y04104* +X05282Y04104* +X05281Y04103* +X0528Y04103* +X0528Y04102* +X05279Y04102* +X05279Y04102* +X05278Y04102* +X05278Y04101* +X05278Y04101* +X05278Y04101* +X05278Y04101* +X05278Y04101* +X05278Y04101* +X05279Y041* +X0528Y041* +X05281Y041* +X05283Y04099* +X05283Y04099* +X05284Y04099* +X05284Y041* +X05285Y041* +X05286Y041* +X05287Y04101* +X05287Y04101* +X05287Y04101* +X05288Y04101* +X05288Y04102* +X05288Y04102* +X05289Y04102* +X05289Y04103* +X05289Y04104* +X0529Y04105* +X0529Y04107* +X0529Y04108* +G37* +G36* +X05547Y04125D02* +X05551Y04105D01* +X05551Y04106* +X05551Y04106* +X05551Y04106* +X05551Y04107* +Y04107* +X05551Y04108* +Y04108* +Y04108* +X05551Y04109* +X05551Y04111* +X05551Y04113* +X05552Y04115* +X05553Y04116* +X05553Y04117* +X05554Y04118* +X05554Y04118* +X05555Y04119* +X05555Y04119* +X05555Y04119* +X05555Y04119* +X05555Y04119* +X05556Y0412* +X05557Y04121* +X05558Y04121* +X05559Y04122* +X05561Y04123* +X05563Y04124* +X05559Y04124* +X05559Y04124* +Y04124* +Y04124* +X05547Y04125* +G37* +G36* +X05588Y04108D02* +X05588Y04107D01* +X05587Y04107* +X05587Y04107* +X05586Y04106* +X05586Y04106* +X05585Y04106* +X05585* +X05584Y04105* +X05583Y04105* +X05582Y04104* +X05581Y04104* +X0558Y04104* +X05579Y04103* +X05578Y04103* +X05578Y04102* +X05577Y04102* +X05577Y04102* +X05576Y04102* +X05576Y04101* +X05576Y04101* +X05576Y04101* +X05576Y04101* +X05576Y04101* +X05577Y04101* +X05577Y041* +X05578Y041* +X05579Y041* +X05581Y04099* +X05581Y04099* +X05582Y04099* +X05583Y041* +X05584Y041* +X05584Y041* +X05585Y04101* +X05585Y04101* +X05586Y04101* +X05586Y04101* +X05587Y04102* +X05587Y04102* +X05587Y04102* +X05587Y04103* +X05588Y04104* +X05588Y04105* +X05588Y04107* +X05588Y04108* +G37* +G36* +X0545Y04084D02* +X05449D01* +X05449Y04082* +X05449Y04083* +X0545Y04083* +X0545Y04084* +G37* +G36* +X0536Y04119D02* +X05354Y04086D01* +X05354Y04086* +X05355Y04085* +X05356Y04084* +X05357Y04083* +X05357Y04082* +X05358Y04082* +X05359Y04081* +X0536Y04081* +X0536Y04081* +X05361Y0408* +X05361Y04081* +X05361Y04081* +X05362Y04081* +X05362* +X05362Y0408* +X05362Y0408* +X05362* +X05364Y04084* +X05362* +X05364Y04089* +X05362* +X05369Y04111* +X0536Y04119* +G37* +G36* +X05449Y04089D02* +X05449D01* +X05449Y04087* +X05449Y04088* +X0545Y04088* +X05449Y04089* +X05449Y04089* +G37* +G36* +X05Y04115D02* +X05Y04115D01* +X04999Y04114* +X04999Y04114* +X04999Y04114* +X04998Y04113* +X04997Y04111* +X04997Y0411* +X04997Y0411* +X04997Y04108* +X04998Y04107* +X04998Y04107* +X04998Y04107* +X04998Y04107* +Y04107* +X04999Y04105* +X05Y04103* +X05Y04102* +X05001Y04101* +X05002Y041* +X05002Y041* +X05003Y04099* +X05003Y04099* +X05004Y04099* +X05004Y04099* +X05005Y04099* +X05005Y04099* +X05005Y041* +X05006Y041* +X05006Y04101* +X05007Y04102* +X05007Y04103* +X05007Y04105* +X05007Y04106* +X05006Y04107* +X05006Y04108* +X05006Y04109* +X05005Y04109* +X05005Y0411* +X05005Y0411* +X05005Y04111* +X05004Y04111* +Y04111* +X05004Y04112* +X05003Y04113* +X05002Y04114* +X05002Y04115* +X05001Y04115* +X05Y04115* +G37* +G36* +X0503Y04116D02* +X05029D01* +X05029Y04115* +X05029Y04114* +X0503Y04112* +X0503Y04111* +X0503Y0411* +X0503Y04109* +Y04108* +X0503Y04108* +Y04107* +Y04107* +X0503Y04105* +X0503Y04105* +X0503Y04104* +Y04103* +X0503Y04103* +Y04102* +Y04102* +X0503Y041* +X0503Y041* +X0503Y04099* +Y04098* +X0503Y04098* +Y04097* +X0503Y04097* +X05032* +X05032Y04097* +X05032Y04098* +X05033Y04098* +X05033Y04098* +X05033Y04098* +X05033Y04098* +X05034Y04098* +X0503Y04116* +G37* +G36* +X05198Y04126D02* +X05198D01* +X05198Y04126* +X05198Y04126* +G37* +G36* +X05305Y04126D02* +X05305Y04126D01* +Y04126* +Y04125* +Y04125* +X05306* +X05305Y04126* +G37* +G36* +X05493Y04118D02* +X05491Y04118D01* +X05492Y04117* +X05493Y04115* +X05493Y04115* +X05493Y04114* +Y04115* +X05493Y04116* +Y04116* +Y04116* +X05493Y04118* +Y04118* +G37* +G36* +X05305Y04131D02* +X05305Y04131D01* +Y04131* +Y0413* +Y0413* +X05306* +X05305Y04131* +G37* +G36* +X05576Y04133D02* +X05576Y04133D01* +X05575Y04132* +X05574Y04132* +X05573Y04132* +X05573Y04131* +X05572Y04131* +X05571Y0413* +X05571Y04129* +X0557Y04128* +X0557Y04128* +X05571Y04128* +X05572Y04128* +X05573Y04129* +X05574Y04129* +X05575Y0413* +X05576Y0413* +X05576Y04131* +X05577Y04131* +X05577Y04131* +X05578Y04131* +X05578Y04132* +X05578Y04132* +X05576Y04133* +X05576Y04133* +G37* +G36* +X05278D02* +X05277Y04133D01* +X05276Y04132* +X05275Y04132* +X05275Y04132* +X05274Y04131* +X05274Y04131* +X05273Y0413* +X05272Y04129* +X05272Y04128* +X05272Y04128* +X05272Y04128* +X05274Y04128* +X05275Y04129* +X05276Y04129* +X05276Y0413* +X05277Y0413* +X05278Y04131* +X05279Y04131* +X05279Y04131* +X05279Y04131* +X0528Y04132* +X05279Y04132* +X05278Y04133* +X05278Y04133* +G37* +G36* +X05295Y0411D02* +X05295Y0411D01* +X05295Y0411* +Y0411* +Y0411* +Y0411* +G37* +G36* +X05305Y04122D02* +X05305Y04121D01* +X05304Y04119* +X05304Y04118* +X05304Y04118* +X05303Y04117* +X05303Y04117* +X05302Y04116* +X05302Y04115* +X05301Y04114* +X053Y04113* +X05299Y04112* +X05298Y04112* +X05298Y04112* +X05298Y04111* +X05297Y04111* +X05296Y04111* +X05295Y0411* +X053Y0411* +Y0411* +Y0411* +Y0411* +X05312Y0411* +X05305Y04122* +G37* +G36* +X05195Y04116D02* +X05194D01* +X05196Y04108* +X05196Y04108* +X05196Y04108* +Y04109* +X05195Y0411* +Y0411* +Y0411* +X05196Y04112* +X05196Y04113* +X05196Y04113* +Y04114* +X05195Y04115* +Y04115* +Y04115* +X05195Y04116* +G37* +G36* +X05249Y04125D02* +X0525Y04124D01* +X0525Y04122* +X05251Y0412* +X05252Y04119* +X05252Y04117* +X05253Y04115* +X05253Y04114* +X05253Y04113* +X05253Y04113* +X05254Y04115* +X05255Y04116* +X05255Y04117* +X05256Y04118* +X05256Y04118* +X05256Y04119* +X05257Y04119* +X05257Y04119* +X05257Y04119* +X05257Y04119* +X05258Y0412* +X05258Y04121* +X05259Y04121* +X0526Y04122* +X05263Y04123* +X05265Y04124* +X05261Y04124* +X05261Y04124* +Y04124* +Y04124* +X05249Y04125* +G37* +G36* +X05493Y04113D02* +X05493Y04113D01* +X05493Y04113* +X05493Y04113* +Y04113* +G37* +G36* +X05594Y0411D02* +X05593Y0411D01* +X05594Y0411* +Y0411* +Y0411* +Y0411* +G37* +%LNunisolder52_back-3*% +%LPD*% +G54D107* +X04056Y03612D03* +X04273D03* +Y03447D03* +X04056D03* +X06486Y05954D03* +X06269D03* +X05767D03* +X05984D03* +G54D108* +X0461Y0287D03* +X0466Y0297D03* +X0471Y0287D03* +X0476Y0297D03* +X0481Y0287D03* +X0486Y0297D03* +X0586Y02851D03* +X0596D03* +G54D109* +X06421Y02814D03* +Y03031D03* +X06255D03* +Y02814D03* +G54D110* +X06771Y05391D03* +Y05657D03* +Y04805D03* +Y05071D03* +G54D111* +X05178Y04614D03* +G54D112* +X05178Y04692D03* +G54D113* +X05406Y0392D03* +X0499Y03498D03* +X05186Y03582D03* +G54D114* +X05603Y0392D03* +X04793Y03498D03* +X05382Y03582D03* +X04227Y03874D03* +G54D115* +X05499Y05825D03* +X06208Y05752D03* +X06444Y05751D03* +X05736Y05009D03* +X05972D03* +G54D116* +X05499Y05083D03* +X06208Y0501D03* +X06444Y0501D03* +X05736Y0575D03* +X05972D03* +G54D117* +X0606Y02851D03* +G54D118* +X05192Y02847D03* +G54D119* +X05192Y02947D03* +X05292Y02847D03* +Y02947D03* +X05392Y02847D03* +Y02947D03* +X05492Y02847D03* +Y02947D03* +X05592Y02847D03* +Y02947D03* +G54D120* +X04114Y02874D03* +X06751D03* +Y05925D03* +X04114Y04704D03* +G54D121* +X04088Y04013D03* +M02* \ No newline at end of file diff --git a/hardware/gerber/unisolder52_back.gko b/hardware/gerber/unisolder52_back.gko new file mode 100644 index 0000000..32331a2 --- /dev/null +++ b/hardware/gerber/unisolder52_back.gko @@ -0,0 +1,34 @@ +%FSTAX23Y23*% +%MOIN*% +%SFA1B1*% + +%IPPOS*% +%ADD74C,0.007870*% +%LNunisolder52_back-1*% +%LPD*% +G54D74* +X03937Y02795D02* +X04035Y02696D01* +X03937Y04783D02* +X04035Y04881D01* +X03937Y02795D02* +Y04783D01* +X0683Y02696D02* +X06929Y02795D01* +X04035Y02696D02* +X0683D01* +X06929Y02795D02* +Y06003D01* +X0683Y06102D02* +X06929Y06003D01* +X05413Y06102D02* +X0683D01* +X05314Y06003D02* +X05413Y06102D01* +X05314Y0494D02* +Y06003D01* +X05255Y04881D02* +X05314Y0494D01* +X04035Y04881D02* +X05255D01* +M02* \ No newline at end of file diff --git a/hardware/gerber/unisolder52_back.gtl b/hardware/gerber/unisolder52_back.gtl new file mode 100644 index 0000000..03f9c48 --- /dev/null +++ b/hardware/gerber/unisolder52_back.gtl @@ -0,0 +1,6346 @@ +%FSTAX23Y23*% +%MOIN*% +%SFA1B1*% + +%IPPOS*% +%AMD10* +4,1,8,0.025600,-0.027800,0.025600,0.027800,0.017900,0.035400,-0.017900,0.035400,-0.025600,0.027800,-0.025600,-0.027800,-0.017900,-0.035400,0.017900,-0.035400,0.025600,-0.027800,0.0* +1,1,0.015360,0.017900,-0.027800* +1,1,0.015360,0.017900,0.027800* +1,1,0.015360,-0.017900,0.027800* +1,1,0.015360,-0.017900,-0.027800* +% +%AMD11* +4,1,8,-0.037400,0.015000,-0.037400,-0.015000,-0.033700,-0.018700,0.033700,-0.018700,0.037400,-0.015000,0.037400,0.015000,0.033700,0.018700,-0.033700,0.018700,-0.037400,0.015000,0.0* +1,1,0.007480,-0.033700,0.015000* +1,1,0.007480,-0.033700,-0.015000* +1,1,0.007480,0.033700,-0.015000* +1,1,0.007480,0.033700,0.015000* +% +%AMD12* +4,1,8,-0.145700,0.102900,-0.145700,-0.102900,-0.140300,-0.108300,0.140300,-0.108300,0.145700,-0.102900,0.145700,0.102900,0.140300,0.108300,-0.140300,0.108300,-0.145700,0.102900,0.0* +1,1,0.010820,-0.140300,0.102900* +1,1,0.010820,-0.140300,-0.102900* +1,1,0.010820,0.140300,-0.102900* +1,1,0.010820,0.140300,0.102900* +% +%AMD13* +4,1,8,-0.018700,-0.065000,0.018700,-0.065000,0.037400,-0.046300,0.037400,0.046300,0.018700,0.065000,-0.018700,0.065000,-0.037400,0.046300,-0.037400,-0.046300,-0.018700,-0.065000,0.0* +1,1,0.037400,-0.018700,-0.046300* +1,1,0.037400,0.018700,-0.046300* +1,1,0.037400,0.018700,0.046300* +1,1,0.037400,-0.018700,0.046300* +% +%AMD14* +4,1,8,-0.006900,-0.040400,0.006900,-0.040400,0.013800,-0.033500,0.013800,0.033500,0.006900,0.040400,-0.006900,0.040400,-0.013800,0.033500,-0.013800,-0.033500,-0.006900,-0.040400,0.0* +1,1,0.013780,-0.006900,-0.033500* +1,1,0.013780,0.006900,-0.033500* +1,1,0.013780,0.006900,0.033500* +1,1,0.013780,-0.006900,0.033500* +% +%AMD15* +4,1,8,-0.006900,-0.026600,0.006900,-0.026600,0.013800,-0.019700,0.013800,0.019700,0.006900,0.026600,-0.006900,0.026600,-0.013800,0.019700,-0.013800,-0.019700,-0.006900,-0.026600,0.0* +1,1,0.013780,-0.006900,-0.019700* +1,1,0.013780,0.006900,-0.019700* +1,1,0.013780,0.006900,0.019700* +1,1,0.013780,-0.006900,0.019700* +% +%AMD16* +4,1,8,-0.025600,0.008300,-0.025600,-0.008300,-0.022000,-0.011800,0.022000,-0.011800,0.025600,-0.008300,0.025600,0.008300,0.022000,0.011800,-0.022000,0.011800,-0.025600,0.008300,0.0* +1,1,0.007080,-0.022000,0.008300* +1,1,0.007080,-0.022000,-0.008300* +1,1,0.007080,0.022000,-0.008300* +1,1,0.007080,0.022000,0.008300* +% +%AMD17* +4,1,8,0.013800,0.045000,-0.013800,0.045000,-0.019700,0.039100,-0.019700,-0.039100,-0.013800,-0.045000,0.013800,-0.045000,0.019700,-0.039100,0.019700,0.039100,0.013800,0.045000,0.0* +1,1,0.011820,0.013800,0.039100* +1,1,0.011820,-0.013800,0.039100* +1,1,0.011820,-0.013800,-0.039100* +1,1,0.011820,0.013800,-0.039100* +% +%AMD18* +4,1,8,0.104700,0.147600,-0.104700,0.147600,-0.110200,0.142100,-0.110200,-0.142100,-0.104700,-0.147600,0.104700,-0.147600,0.110200,-0.142100,0.110200,0.142100,0.104700,0.147600,0.0* +1,1,0.011020,0.104700,0.142100* +1,1,0.011020,-0.104700,0.142100* +1,1,0.011020,-0.104700,-0.142100* +1,1,0.011020,0.104700,-0.142100* +% +%AMD19* +4,1,8,-0.037400,0.008300,-0.037400,-0.008300,-0.033900,-0.011800,0.033900,-0.011800,0.037400,-0.008300,0.037400,0.008300,0.033900,0.011800,-0.033900,0.011800,-0.037400,0.008300,0.0* +1,1,0.007080,-0.033900,0.008300* +1,1,0.007080,-0.033900,-0.008300* +1,1,0.007080,0.033900,-0.008300* +1,1,0.007080,0.033900,0.008300* +% +%AMD22* +4,1,8,0.026100,0.024600,-0.026100,0.024600,-0.033500,0.017200,-0.033500,-0.017200,-0.026100,-0.024600,0.026100,-0.024600,0.033500,-0.017200,0.033500,0.017200,0.026100,0.024600,0.0* +1,1,0.014760,0.026100,0.017200* +1,1,0.014760,-0.026100,0.017200* +1,1,0.014760,-0.026100,-0.017200* +1,1,0.014760,0.026100,-0.017200* +% +%AMD23* +4,1,8,-0.142000,-0.084100,0.142000,-0.084100,0.150400,-0.075600,0.150400,0.075600,0.142000,0.084100,-0.142000,0.084100,-0.150400,0.075600,-0.150400,-0.075600,-0.142000,-0.084100,0.0* +1,1,0.016820,-0.142000,-0.075600* +1,1,0.016820,0.142000,-0.075600* +1,1,0.016820,0.142000,0.075600* +1,1,0.016820,-0.142000,0.075600* +% +%AMD24* +4,1,8,-0.029400,-0.084100,0.029400,-0.084100,0.032700,-0.080800,0.032700,0.080800,0.029400,0.084100,-0.029400,0.084100,-0.032700,0.080800,-0.032700,-0.080800,-0.029400,-0.084100,0.0* +1,1,0.006540,-0.029400,-0.080800* +1,1,0.006540,0.029400,-0.080800* +1,1,0.006540,0.029400,0.080800* +1,1,0.006540,-0.029400,0.080800* +% +%AMD25* +4,1,8,0.052000,0.060000,-0.052000,0.060000,-0.064000,0.048000,-0.064000,-0.048000,-0.052000,-0.060000,0.052000,-0.060000,0.064000,-0.048000,0.064000,0.048000,0.052000,0.060000,0.0* +1,1,0.024000,0.052000,0.048000* +1,1,0.024000,-0.052000,0.048000* +1,1,0.024000,-0.052000,-0.048000* +1,1,0.024000,0.052000,-0.048000* +% +%AMD26* +4,1,8,0.067500,-0.103500,0.067500,0.103500,0.060700,0.110200,-0.060700,0.110200,-0.067500,0.103500,-0.067500,-0.103500,-0.060700,-0.110200,0.060700,-0.110200,0.067500,-0.103500,0.0* +1,1,0.013500,0.060700,-0.103500* +1,1,0.013500,0.060700,0.103500* +1,1,0.013500,-0.060700,0.103500* +1,1,0.013500,-0.060700,-0.103500* +% +%AMD27* +4,1,8,0.040200,0.035400,-0.040200,0.035400,-0.047200,0.028300,-0.047200,-0.028300,-0.040200,-0.035400,0.040200,-0.035400,0.047200,-0.028300,0.047200,0.028300,0.040200,0.035400,0.0* +1,1,0.014180,0.040200,0.028300* +1,1,0.014180,-0.040200,0.028300* +1,1,0.014180,-0.040200,-0.028300* +1,1,0.014180,0.040200,-0.028300* +% +%AMD28* +4,1,8,0.020800,0.029100,-0.020800,0.029100,-0.029500,0.020400,-0.029500,-0.020400,-0.020800,-0.029100,0.020800,-0.029100,0.029500,-0.020400,0.029500,0.020400,0.020800,0.029100,0.0* +1,1,0.017480,0.020800,0.020400* +1,1,0.017480,-0.020800,0.020400* +1,1,0.017480,-0.020800,-0.020400* +1,1,0.017480,0.020800,-0.020400* +% +%AMD29* +4,1,8,-0.021800,-0.025600,0.021800,-0.025600,0.029500,-0.017900,0.029500,0.017900,0.021800,0.025600,-0.021800,0.025600,-0.029500,0.017900,-0.029500,-0.017900,-0.021800,-0.025600,0.0* +1,1,0.015360,-0.021800,-0.017900* +1,1,0.015360,0.021800,-0.017900* +1,1,0.015360,0.021800,0.017900* +1,1,0.015360,-0.021800,0.017900* +% +%AMD30* +4,1,8,0.025600,-0.021800,0.025600,0.021800,0.017900,0.029500,-0.017900,0.029500,-0.025600,0.021800,-0.025600,-0.021800,-0.017900,-0.029500,0.017900,-0.029500,0.025600,-0.021800,0.0* +1,1,0.015360,0.017900,-0.021800* +1,1,0.015360,0.017900,0.021800* +1,1,0.015360,-0.017900,0.021800* +1,1,0.015360,-0.017900,-0.021800* +% +%AMD31* +4,1,8,0.008300,0.025600,-0.008300,0.025600,-0.011800,0.022000,-0.011800,-0.022000,-0.008300,-0.025600,0.008300,-0.025600,0.011800,-0.022000,0.011800,0.022000,0.008300,0.025600,0.0* +1,1,0.007080,0.008300,0.022000* +1,1,0.007080,-0.008300,0.022000* +1,1,0.007080,-0.008300,-0.022000* +1,1,0.007080,0.008300,-0.022000* +% +%AMD32* +4,1,8,0.024600,-0.026100,0.024600,0.026100,0.017200,0.033500,-0.017200,0.033500,-0.024600,0.026100,-0.024600,-0.026100,-0.017200,-0.033500,0.017200,-0.033500,0.024600,-0.026100,0.0* +1,1,0.014760,0.017200,-0.026100* +1,1,0.014760,0.017200,0.026100* +1,1,0.014760,-0.017200,0.026100* +1,1,0.014760,-0.017200,-0.026100* +% +%AMD33* +4,1,8,-0.035400,0.040200,-0.035400,-0.040200,-0.028300,-0.047200,0.028300,-0.047200,0.035400,-0.040200,0.035400,0.040200,0.028300,0.047200,-0.028300,0.047200,-0.035400,0.040200,0.0* +1,1,0.014180,-0.028300,0.040200* +1,1,0.014180,-0.028300,-0.040200* +1,1,0.014180,0.028300,-0.040200* +1,1,0.014180,0.028300,0.040200* +% +%AMD34* +4,1,8,0.027800,0.025600,-0.027800,0.025600,-0.035400,0.017900,-0.035400,-0.017900,-0.027800,-0.025600,0.027800,-0.025600,0.035400,-0.017900,0.035400,0.017900,0.027800,0.025600,0.0* +1,1,0.015360,0.027800,0.017900* +1,1,0.015360,-0.027800,0.017900* +1,1,0.015360,-0.027800,-0.017900* +1,1,0.015360,0.027800,-0.017900* +% +%AMD35* +4,1,8,0.045300,-0.036200,0.045300,0.036200,0.036200,0.045300,-0.036200,0.045300,-0.045300,0.036200,-0.045300,-0.036200,-0.036200,-0.045300,0.036200,-0.045300,0.045300,-0.036200,0.0* +1,1,0.018120,0.036200,-0.036200* +1,1,0.018120,0.036200,0.036200* +1,1,0.018120,-0.036200,0.036200* +1,1,0.018120,-0.036200,-0.036200* +% +%AMD59* +4,1,8,0.068900,-0.055100,0.068900,0.055100,0.055100,0.068900,-0.055100,0.068900,-0.068900,0.055100,-0.068900,-0.055100,-0.055100,-0.068900,0.055100,-0.068900,0.068900,-0.055100,0.0* +1,1,0.027560,0.055100,-0.055100* +1,1,0.027560,0.055100,0.055100* +1,1,0.027560,-0.055100,0.055100* +1,1,0.027560,-0.055100,-0.055100* +% +%AMD60* +4,1,8,-0.029500,0.020700,-0.029500,-0.020700,-0.020700,-0.029500,0.020700,-0.029500,0.029500,-0.020700,0.029500,0.020700,0.020700,0.029500,-0.020700,0.029500,-0.029500,0.020700,0.0* +1,1,0.017720,-0.020700,0.020700* +1,1,0.017720,-0.020700,-0.020700* +1,1,0.017720,0.020700,-0.020700* +1,1,0.017720,0.020700,0.020700* +% +%AMD62* +4,1,8,0.025500,0.036400,-0.025500,0.036400,-0.036400,0.025500,-0.036400,-0.025500,-0.025500,-0.036400,0.025500,-0.036400,0.036400,-0.025500,0.036400,0.025500,0.025500,0.036400,0.0* +1,1,0.021860,0.025500,0.025500* +1,1,0.021860,-0.025500,0.025500* +1,1,0.021860,-0.025500,-0.025500* +1,1,0.021860,0.025500,-0.025500* +% +%AMD65* +4,1,8,0.055100,-0.038600,0.055100,0.038600,0.038600,0.055100,-0.038600,0.055100,-0.055100,0.038600,-0.055100,-0.038600,-0.038600,-0.055100,0.038600,-0.055100,0.055100,-0.038600,0.0* +1,1,0.033080,0.038600,-0.038600* +1,1,0.033080,0.038600,0.038600* +1,1,0.033080,-0.038600,0.038600* +1,1,0.033080,-0.038600,-0.038600* +% +%AMD66* +4,1,8,-0.017500,-0.035000,0.017500,-0.035000,0.035000,-0.017500,0.035000,0.017500,0.017500,0.035000,-0.017500,0.035000,-0.035000,0.017500,-0.035000,-0.017500,-0.017500,-0.035000,0.0* +1,1,0.035000,-0.017500,-0.017500* +1,1,0.035000,0.017500,-0.017500* +1,1,0.035000,0.017500,0.017500* +1,1,0.035000,-0.017500,0.017500* +% +%AMD70* +4,1,8,0.043800,0.007700,0.007700,0.043800,-0.007700,0.043800,-0.043800,0.007700,-0.043800,-0.007700,-0.007700,-0.043800,0.007700,-0.043800,0.043800,-0.007700,0.043800,0.007700,0.0* +1,1,0.021860,0.036100,0.000000* +1,1,0.021860,0.000000,0.036100* +1,1,0.021860,-0.036100,0.000000* +1,1,0.021860,0.000000,-0.036100* +% +G04~CAMADD=10~8~0.0~0.0~708.7~511.8~76.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~512.0~708.0* +%ADD10D10*% +G04~CAMADD=11~8~0.0~0.0~374.0~748.0~37.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~748.0~374.0* +%ADD11D11*% +G04~CAMADD=12~8~0.0~0.0~2165.4~2913.4~54.1~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~2914.0~2166.0* +%ADD12D12*% +G04~CAMADD=13~8~0.0~0.0~748.0~1299.2~187.0~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~749.0~1300.0* +%ADD13D13*% +G04~CAMADD=14~8~0.0~0.0~275.6~808.7~68.9~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~276.0~809.0* +%ADD14D14*% +G04~CAMADD=15~8~0.0~0.0~275.6~531.5~68.9~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~276.0~532.0* +%ADD15D15*% +G04~CAMADD=16~8~0.0~0.0~236.2~511.8~35.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~512.0~236.0* +%ADD16D16*% +G04~CAMADD=17~8~0.0~0.0~393.7~900.0~59.1~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~393.7~900.0* +%ADD17D17*% +G04~CAMADD=18~8~0.0~0.0~2204.7~2952.8~55.1~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~2204.7~2952.8* +%ADD18D18*% +G04~CAMADD=19~8~0.0~0.0~236.2~748.0~35.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~748.0~236.0* +%ADD19D19*% +%ADD20O,0.074800X0.023620*% +%ADD21O,0.023620X0.086610*% +G04~CAMADD=22~8~0.0~0.0~669.3~492.1~73.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~669.3~492.1* +%ADD22D22*% +G04~CAMADD=23~8~0.0~0.0~3007.9~1681.1~84.1~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~3008.0~1681.0* +%ADD23D23*% +G04~CAMADD=24~8~0.0~0.0~653.5~1681.1~32.7~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~654.0~1682.0* +%ADD24D24*% +G04~CAMADD=25~8~0.0~0.0~1279.5~1200.0~120.0~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~1279.5~1200.0* +%ADD25D25*% +G04~CAMADD=26~8~0.0~0.0~2204.7~1350.0~67.5~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~1350.0~2204.0* +%ADD26D26*% +G04~CAMADD=27~8~0.0~0.0~944.9~708.7~70.9~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~944.9~708.7* +%ADD27D27*% +G04~CAMADD=28~8~0.0~0.0~590.6~582.7~87.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~590.6~582.7* +%ADD28D28*% +G04~CAMADD=29~8~0.0~0.0~590.6~511.8~76.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~591.0~512.0* +%ADD29D29*% +G04~CAMADD=30~8~0.0~0.0~590.6~511.8~76.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~512.0~590.0* +%ADD30D30*% +G04~CAMADD=31~8~0.0~0.0~236.2~511.8~35.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~236.2~511.8* +%ADD31D31*% +G04~CAMADD=32~8~0.0~0.0~669.3~492.1~73.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~492.0~670.0* +%ADD32D32*% +G04~CAMADD=33~8~0.0~0.0~944.9~708.7~70.9~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~708.0~944.0* +%ADD33D33*% +G04~CAMADD=34~8~0.0~0.0~708.7~511.8~76.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~708.7~511.8* +%ADD34D34*% +G04~CAMADD=35~8~0.0~0.0~905.5~905.5~90.6~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~906.0~906.0* +%ADD35D35*% +%ADD36C,0.020000*% +%ADD37C,0.014000*% +%ADD38C,0.025000*% +%ADD39C,0.050000*% +%ADD40C,0.100000*% +%ADD41C,0.110240*% +%ADD42C,0.023000*% +%ADD43C,0.046000*% +%ADD44C,0.015000*% +%ADD45C,0.200000*% +%ADD46C,0.040000*% +%ADD47C,0.220000*% +%ADD48C,0.012000*% +%ADD49C,0.160000*% +%ADD50R,0.246060X0.167320*% +%ADD51R,0.275590X0.029530*% +%ADD52R,0.494090X0.587010*% +%ADD53R,0.107000X0.103000*% +%ADD54R,0.121940X0.045280*% +%ADD55O,0.118110X0.078740*% +%ADD56C,0.070000*% +%ADD57C,0.125200*% +%ADD58O,0.078740X0.118110*% +G04~CAMADD=59~8~0.0~0.0~1378.0~1378.0~137.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~1378.0~1378.0* +%ADD59D59*% +G04~CAMADD=60~8~0.0~0.0~590.6~590.6~88.6~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~590.0~590.0* +%ADD60D60*% +%ADD61C,0.059060*% +G04~CAMADD=62~8~0.0~0.0~728.4~728.4~109.3~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~728.4~728.4* +%ADD62D62*% +%ADD63C,0.072840*% +%ADD64C,0.110240*% +G04~CAMADD=65~8~0.0~0.0~1102.4~1102.4~165.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~1102.0~1102.0* +%ADD65D65*% +G04~CAMADD=66~8~0.0~0.0~700.0~700.0~175.0~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~700.0~700.0* +%ADD66D66*% +%ADD67R,0.059060X0.059060*% +%ADD68C,0.059060*% +%ADD69C,0.314000*% +G04~CAMADD=70~8~0.0~0.0~728.4~728.4~109.3~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~315.0~940.0~939.0* +%ADD70D70*% +%ADD71C,0.050000*% +%LNunisolder52_back-1*% +%LPD*% +G36* +X06094Y04449D02* +X06095Y04442D01* +X06099Y04436* +X06104Y04433* +X06111Y04431* +X06134* +X06152Y04413* +Y04397* +X0611Y04355* +X06109* +X06104Y04354* +X061Y04351* +X06097Y04347* +X06096Y04341* +Y04297* +X06096Y04297* +X06067* +X06065Y043* +Y04341* +X06064Y04347* +X06063Y04348* +Y04354* +X06064* +X06071Y04355* +X06076Y04359* +X0608Y04364* +X06082Y04371* +Y04423* +X0608Y0443* +X06076Y04436* +X06071Y04439* +X06065Y04441* +X06064Y04441* +X06064Y04442* +X06063Y04446* +X06065Y0445* +X06066Y04455* +X06094* +Y04449* +G37* +G36* +X06681Y03574D02* +Y03364D01* +X06638Y03322* +X06605* +X06598Y0332* +X06592Y03316* +X06588Y03311* +X06587Y03304* +Y03271* +X0655Y03234* +X06544* +X06537Y03233* +X06532Y03229* +X06528Y03223* +X06527Y03217* +Y0321* +X06489Y03173* +X06485Y03168* +X06456Y03139* +Y02992* +X06407Y02942* +X06348* +X063Y0299* +X06303Y02998* +X06305Y03011* +Y03051* +X06303Y03064* +X06299Y03075* +Y03287* +X06377Y03366* +X06387Y03375* +Y03592* +X06663* +X06681Y03574* +G37* +G36* +X06732Y04803D02* +Y04763D01* +X06728Y04759* +X06659* +X0663Y04731* +X06628Y04733* +X06621Y04734* +X06585* +X06578Y04733* +X06572Y04729* +X06568Y04723* +X06567Y04716* +Y04673* +X06568Y04666* +X06572Y0466* +X06574Y04659* +Y04652* +X06572Y04651* +X06568Y04645* +X06567Y04638* +Y04583* +X06568Y04576* +X06572Y0457* +X06574Y04569* +Y04212* +X06581Y04206* +X06581Y04204* +X06577Y04199* +X06576Y04193* +Y03992* +X06575Y03987* +X06572Y03987* +X06572Y03986* +X06572Y03986* +X0657Y03985* +X06569Y03985* +X06569Y03984* +X06568Y03984* +X0656Y03976* +X06387* +X06386Y03976* +X06338* +X06299Y04015* +Y04066* +X06299Y04068* +Y04124* +X06299Y04125* +Y04294* +X06299Y04296* +Y04331* +X06299Y04333* +Y04622* +X06299Y04623* +Y04659* +X06299Y04661* +Y04845* +X06399Y04945* +X06406Y04944* +X06483* +X0649Y04945* +X06496Y04948* +X06502Y04952* +X06506Y04958* +X06509Y04964* +X0651Y04971* +Y05048* +X06509Y05055* +X06506Y05061* +X06502Y05067* +X06496Y05071* +X0649Y05074* +X06483Y05075* +X06455* +Y05121* +X06732* +Y04803* +G37* +G36* +X05828Y04291D02* +X0584D01* +X05847Y04293* +X05849Y04294* +X05854Y04291* +Y04286* +X0589* +Y04276* +X059* +Y04236* +X05908* +X05915Y04238* +X05921Y04241* +X05925Y04247* +X05925Y04249* +X0593* +X05931Y04247* +X05935Y04242* +X0594Y04238* +X05947Y04236* +X05983* +X0599Y04238* +X05996Y04242* +X05999Y04247* +X06001Y04254* +Y04263* +X06005Y04265* +X06048Y04222* +X06054Y04218* +X06058Y04217* +Y04215* +X06059Y04209* +X06062Y04205* +X06067Y04202* +X06072Y04201* +X06088* +X06094Y04202* +X06098Y04205* +X06101Y04209* +X06102Y04215* +Y04259* +X06102Y04259* +X06135* +X06137Y04259* +X06142Y04255* +Y04227* +X06143Y0422* +X06147Y04214* +X06153Y0421* +X0616Y04209* +X06203* +X0621Y0421* +X06216Y04214* +X0622Y0422* +X06221Y04224* +X06239* +X06246Y04219* +X06254Y04216* +X06263Y04214* +X06272Y04216* +X06281Y04219* +X06284Y04221* +X06289Y04219* +Y04145* +X06284Y04141* +X06281Y04142* +X06273* +Y04096* +X06263* +Y04086* +X06227* +Y04068* +X06229Y04061* +X06233Y04055* +X06234Y04055* +Y04048* +X06232Y04047* +X06228Y04041* +X06227Y04039* +X06222* +X06222Y04041* +X06218Y04047* +X06212Y04051* +X06205Y04052* +X06204* +X06204Y04052* +X06185Y04071* +Y04124* +X06184Y04131* +X0618Y04136* +X06174Y0414* +X06167Y04142* +X06131* +X06124Y0414* +X06123Y04139* +X06118Y04142* +Y04171* +X06117Y04178* +X06113Y04184* +X06107Y04187* +X061Y04189* +X06048* +X06042Y04187* +X06036Y04184* +X06035Y04182* +X06028* +X06027Y04184* +X06021Y04187* +X06015Y04189* +X05963* +X05956Y04187* +X0595Y04184* +X05946Y04178* +X05945Y04171* +Y04165* +X05892* +X05883Y04163* +X05876Y04158* +X05871Y04151* +X05869Y04142* +X05871Y04134* +X05876Y04126* +X05883Y04121* +X05892Y04119* +X05962* +X05963Y04119* +X06015* +X06016Y04119* +X06047* +X06048Y04119* +X061* +X06107Y04121* +X06108Y04121* +X06113Y04119* +Y04092* +X0607Y04049* +X06048* +X06042Y04048* +X06036Y04044* +X06035Y04042* +X06028* +X06027Y04044* +X06021Y04048* +X06015Y04049* +X05963* +X05956Y04048* +X0595Y04044* +X05948Y0404* +X05942Y04039* +X05942Y0404* +X05942Y0404* +X05939Y04042* +X05939Y04043* +X05939Y04047* +X05943Y04049* +X05946Y04054* +X05947Y04059* +Y04076* +X05946Y04081* +X05943Y04085* +X05938Y04088* +X05933Y04089* +X05889* +X05884Y04088* +X05879Y04085* +X05876Y04081* +X05875Y04076* +Y04059* +X05876Y04054* +X05879Y0405* +X05878Y04047* +X05878Y04046* +X05877Y04045* +X0587Y04044* +X05865Y0404* +X05863Y04037* +X05857Y04037* +X05856Y04038* +X0585Y04042* +X05843Y04043* +X05818* +Y04083* +X0585* +X05856Y04084* +X0586Y04087* +X05863Y04091* +X05864Y04097* +Y04113* +X05863Y04118* +X0586Y04123* +X05856Y04126* +X0585Y04127* +X05806* +X05801Y04126* +X05799Y04125* +X05798Y04125* +X0579Y04124* +X05783Y04119* +X05779Y04113* +X05777Y04105* +Y04046* +X05772Y04042* +X05768Y04043* +X05733* +X05726Y04042* +X05723Y0404* +X05718Y04043* +Y04098* +X05753Y04133* +X05757Y0414* +X05759Y04147* +Y04321* +X05763Y04321* +X05771Y04325* +X05774Y04327* +X05779Y04324* +Y04309* +X0578Y04302* +X05784Y04297* +X0579Y04293* +X05797Y04291* +X05808* +Y04327* +X05828* +Y04291* +G37* +G36* +X05794Y04781D02* +X05796Y0478D01* +X05797Y04774* +X058Y0477* +X05798Y04765* +X05797* +X0579Y04763* +X05784Y04759* +X0578Y04754* +X05779Y04747* +Y04711* +X0578Y04704* +X05784Y04698* +X0579Y04694* +X05792Y04694* +Y04689* +X0579Y04689* +X05784Y04685* +X0578Y04679* +X05779Y04672* +Y04664* +X05818* +Y04654* +X05828* +Y04618* +X0584* +X05847Y04619* +X05849Y04621* +X05854Y04618* +Y04614* +X0589* +Y04604* +X059* +Y04564* +X05908* +X05915Y04565* +X05921Y04569* +X05925Y04575* +X05925Y04577* +X0593* +X05931Y04575* +X05935Y04569* +X0594Y04565* +X05947Y04564* +X05983* +X0599Y04565* +X05996Y04569* +X05999Y04575* +X06001Y04582* +Y04591* +X06005Y04593* +X06048Y0455* +X06054Y04546* +X06058Y04545* +Y04542* +X06059Y04537* +X06062Y04533* +X06067Y0453* +X06072Y04529* +X06088* +X06094Y0453* +X06098Y04533* +X06101Y04537* +X06102Y04542* +Y04587* +X06102Y04587* +X06135* +X06137Y04587* +X06142Y04583* +Y04554* +X06143Y04548* +X06147Y04542* +X06153Y04538* +X0616Y04537* +X06203* +X0621Y04538* +X06216Y04542* +X0622Y04548* +X06221Y04552* +X06238* +X06238Y04551* +X06246Y04546* +X06254Y04542* +X06263Y04541* +X06272Y04542* +X06281Y04546* +X06284Y04548* +X06289Y04546* +Y04521* +X06285Y04519* +X06251* +X06244Y04517* +X06239Y04513* +X06235Y04508* +X06233Y04501* +Y04478* +X06233Y04475* +X06233Y04472* +Y04449* +X06235Y04442* +X06239Y04436* +X06243Y04433* +X06243Y04429* +X06243Y04428* +X06242Y04428* +X06237Y04424* +X06231Y04423* +X06226Y0442* +X06221Y04422* +Y04423* +X0622Y0443* +X06216Y04436* +X0621Y04439* +X06204Y04441* +X06181* +X06163Y04459* +Y04501* +X06162Y04508* +X06158Y04513* +X06152Y04517* +X06146Y04519* +X06111* +X06104Y04517* +X06099Y04513* +X06095Y04508* +X06094Y04501* +Y04495* +X06067* +Y04501* +X06065Y04508* +X06062Y04513* +X06056Y04517* +X06049Y04519* +X06013* +X06006Y04517* +X06Y04513* +X05997Y04508* +X05996Y04505* +X05991* +X05991Y04508* +X05987Y04513* +X05981Y04517* +X05974Y04519* +X05938* +X05931Y04517* +X05926Y04513* +X05923Y0451* +X05917Y04509* +X05917Y0451* +X05911Y04514* +X05904Y04516* +X05868* +X05862Y04514* +X05856Y0451* +X05852Y04505* +X05851Y04502* +X05846* +X05846Y04505* +X05842Y0451* +X05836Y04514* +X05829Y04516* +X05794* +X05787Y04514* +X05781Y0451* +X05778Y04506* +X05778Y04506* +X05773Y04505* +X05772Y04505* +X05767Y04508* +X05763Y0451* +Y04754* +X0579Y04781* +X05794Y04781* +G37* +G36* +X06889Y04798D02* +Y04576D01* +X06641* +X06638Y0458* +X06639Y04583* +Y04601* +X06603* +Y04621* +X06639* +Y04638* +X06637Y04645* +X06634Y04651* +X06632Y04653* +Y04659* +X06634Y0466* +X06637Y04666* +X06639Y04673* +Y04684* +X06603* +Y04704* +X06639* +Y04716* +X06637Y04723* +X06637Y04723* +X06638Y04724* +X06663Y04749* +X06692* +X06692Y04749* +X06694Y0474* +X06699Y04733* +X06707Y04727* +X06716Y04726* +X06731* +X06734Y04725* +X06752Y0472* +X06771Y04719* +X0679Y0472* +X06808Y04725* +X06811Y04726* +X06826* +X06835Y04727* +X06843Y04733* +X06849Y0474* +X0685Y04749* +X06856Y04754* +X06868Y04768* +X06878Y04784* +X06884Y04799* +X06889Y04798* +G37* +G36* +X06153Y04039D02* +X06152Y04034D01* +Y04017* +X06118Y03983* +X06113Y03976* +X06112Y03967* +Y03889* +X06113Y0388* +X06118Y03872* +X06152Y03839* +X06153Y03837* +X0616Y03832* +X06161Y03832* +X06162Y03831* +X0617Y0383* +X06194* +X06198Y0383* +X0622* +X06228Y03832* +X06236Y03837* +X0624Y03844* +X06242Y03852* +X0624Y03861* +X0624Y03862* +X06243Y03866* +X06244Y03866* +X06245Y03864* +X0625Y03861* +X06255Y0386* +X06323* +X06328Y03861* +X06332Y03864* +X06335Y03868* +X06336Y03874* +Y03903* +X06335Y03909* +X06332Y03913* +X06328Y03916* +X06323Y03917* +X06255* +X0625Y03916* +X06249Y03916* +X06249Y03917* +X06242Y03921* +X06234Y03923* +X06229* +X06228Y03923* +X0622Y03925* +X06169* +X06165Y03924* +X0616Y03927* +Y03928* +X06165Y03931* +X06169Y0393* +X0622* +X06228Y03932* +X06236Y03937* +X0624Y03944* +X06242Y03952* +X0624Y03961* +X06236Y03968* +X06228Y03973* +X06221Y03974* +X06221Y03975* +X06219Y03978* +X06219Y0398* +X06222Y03984* +X06222Y03985* +X06227* +X06228Y03984* +X06232Y03978* +X06237Y03974* +X06244Y03972* +X06252* +Y04012* +X06272* +Y03972* +X0628* +X06287Y03974* +X06293Y03978* +X06297Y03984* +X06298Y0399* +Y03995* +X06303Y03997* +X06331Y03969* +X06334Y03967* +X06338Y03966* +X06377* +Y03751* +X06373Y03749* +X06355Y03766* +X06352Y03769* +X06348Y03769* +X06296* +X06295Y0377* +X06294Y03774* +X063Y03781* +X06303Y0379* +X06304Y03799* +X06303Y03808* +X063Y03816* +X06294Y03824* +X06287Y03829* +X06278Y03833* +X06269Y03834* +X0626Y03833* +X06252Y03829* +X06244Y03824* +X06244Y03823* +X06229* +X06228Y03823* +X0622Y03825* +X06169* +X0616Y03823* +X06153Y03818* +X06148Y03811* +X06147Y03802* +X06148Y03794* +X06153Y03787* +X0616Y03782* +X06169Y0378* +X0622* +X06228Y03782* +X06229Y03782* +X06238* +X06239Y03781* +X06244Y03774* +X06243Y0377* +X06243Y03769* +X06122* +X06118Y03769* +X06117Y03768* +X05906* +X05899Y03767* +X05893Y03763* +X05889Y03757* +X05889Y03756* +X05884Y03757* +X05883Y0376* +X0588Y03764* +X05876Y03767* +X05871Y03768* +X05812* +X05807Y03767* +X05803Y03764* +X058Y0376* +X05799Y03755* +Y03593* +X05799Y03592* +Y03561* +X05774Y03536* +X0577Y03529* +X05768Y03522* +Y03411* +X05694Y03336* +X05689Y0333* +X05688Y03322* +Y03167* +X05597Y03076* +X0555* +X05549Y03081* +X0555Y03082* +X05555Y03089* +X05557Y03098* +Y03119* +X05534* +Y03129* +X05524* +Y0318* +X05519Y03177* +X05514Y03169* +X05512Y03161* +Y03098* +X05514Y03089* +X05519Y03082* +X05526Y03077* +X05527Y03077* +X05528Y03072* +X05526Y0307* +X05472Y03017* +X05472* +X05464Y03015* +X05457Y03011* +X05428Y02981* +X05425Y02977* +X05424Y02976* +X0542Y02976* +X05419Y02976* +X05412Y02981* +X05402Y02985* +X05392Y02987* +X05382Y02985* +X05305Y03063* +Y03089* +X05305Y03089* +X05306Y03098* +Y03161* +X05306Y03165* +X05309Y0317* +X05313Y03165* +X05312Y03161* +Y03139* +X05357* +Y03161* +X05355Y03169* +X0535Y03177* +X05346Y03179* +X05346Y03186* +X05358Y03198* +X05363Y03196* +X05363Y03193* +X05364Y0319* +X05364Y03189* +Y0317* +X05364Y03169* +X05362Y03161* +Y03098* +X05364Y03089* +X05369Y03082* +X05376Y03078* +X05384Y03076* +X05388Y03072* +X05388Y0307* +X05387Y03069* +X05381Y03061* +X05378Y03053* +X05377Y03044* +X05378Y03035* +X05381Y03026* +X05387Y03019* +X05394Y03013* +X05403Y0301* +X05412Y03009* +X05421Y0301* +X05429Y03013* +X05437Y03019* +X05442Y03026* +X05446Y03035* +X05447Y03044* +X05446Y03053* +X05442Y03061* +X05437Y03069* +X05436Y03069* +X05436Y03076* +X05436Y03076* +X05443Y03078* +X0545Y03082* +X05455Y03089* +X05456Y03098* +Y03161* +X05455Y03168* +X0546Y03172* +X05464Y0317* +X05464Y03169* +X05462Y03161* +Y03139* +X05474* +Y03184* +X05473Y03186* +X05491Y03204* +X0552* +X05528Y03205* +X05535Y0321* +X0556Y03235* +X05565Y03233* +X05568Y03229* +X05574Y03225* +X05576Y03225* +Y03219* +X05574Y03219* +X05568Y03215* +X05564Y03209* +X05563Y03202* +Y03195* +X05643* +Y03202* +X05641Y03209* +X05637Y03215* +X05632Y03219* +X0563Y03219* +Y03225* +X05632Y03225* +X05637Y03229* +X05641Y03235* +X05643Y03241* +Y03277* +X05641Y03284* +X05637Y0329* +X05632Y03294* +X05625Y03295* +X05589* +Y03429* +X05742Y03581* +X05746Y03588* +X05748Y03596* +Y03734* +X05807Y03793* +X05962* +X05967Y03788* +X05968Y03787* +X05968Y03787* +X05975Y03782* +X05984Y0378* +X06035* +X06043Y03782* +X06051Y03787* +X06055Y03794* +X06057Y03801* +X06081Y03825* +X06085Y03832* +X06087Y03839* +Y03866* +X06085Y03873* +X06081Y0388* +X06057Y03904* +X06055Y03911* +X06051Y03918* +X06043Y03923* +X06035Y03925* +X05984* +X05975Y03923* +X05968Y03918* +X05963Y03911* +X05962Y03902* +X05963Y03894* +X05968Y03887* +X05975Y03882* +X05984Y0388* +X06019* +X0602Y0388* +X06017Y03875* +X05984* +X05975Y03873* +X05968Y03868* +X05964Y03862* +X06009* +Y03842* +X05964* +X05967Y03839* +X05964Y03834* +X0594* +X05938Y03839* +X05942Y03841* +X05946Y03847* +X05947Y03853* +Y03861* +X05859* +Y03853* +X05861Y03847* +X05864Y03841* +X05868Y03839* +X05866Y03834* +X05799* +X05791Y03832* +X05784Y03828* +X05723Y03766* +X05718Y03768* +Y03842* +X05723Y03843* +X05726Y0384* +X05733Y03834* +X05741Y03831* +X0575Y0383* +X0576Y03831* +X05768Y03834* +X05775Y0384* +X05781Y03847* +X05784Y03856* +X05786Y03865* +Y03898* +X05791Y03898* +X05791Y03897* +X05795Y03891* +X05801Y03887* +X05807Y03886* +X05843* +X0585Y03887* +X05855Y0389* +X05859Y03888* +X05859Y03888* +X05859Y03888* +Y03881* +X05893* +Y03906* +X05877* +X0587Y03904* +X05866Y03901* +X05861Y03903* +X05861Y03904* +X05861Y03904* +Y03924* +X05912Y03976* +X05929* +X05936Y03977* +X05942Y03981* +X05945Y03986* +X0595* +X0595Y03985* +X05956Y03981* +X05963Y03979* +X06015* +X06021Y03981* +X06027Y03985* +X06028Y03987* +X06035* +X06036Y03985* +X06042Y03981* +X06048Y03979* +X061* +X06107Y03981* +X06113Y03985* +X06117Y0399* +X06118Y03997* +Y04031* +X06118Y04032* +X06136Y0405* +X06141* +X06153Y04039* +G37* +G36* +X06379Y03728D02* +Y03696D01* +X0638Y0369* +X06384Y03685* +X06385Y03684* +X06386Y03678* +X06383Y0367* +X06382Y03661* +X06383Y03652* +X06386Y03643* +X06387Y03642* +Y03629* +X06384Y03626* +X0638Y03621* +X06379Y03615* +Y03598* +X06378Y03596* +X06377Y03592* +Y0338* +X0637Y03373* +X06334Y03336* +X06278* +X06277Y03337* +X06268Y03341* +X06259Y03342* +X0625Y03341* +X06242Y03337* +X06241Y03336* +X06219* +X06218Y03337* +X0621Y0334* +Y03503* +X0621Y03507* +X06208Y03509* +X06207Y03514* +X06203Y0352* +X062Y03522* +Y03523* +X06122Y03602* +Y03759* +X06348* +X06379Y03728* +G37* +G36* +X06086Y04771D02* +X06087Y04768D01* +X06091Y04762* +X06097Y04758* +X06103Y04757* +X06136* +X06152Y04741* +Y04725* +X0611Y04683* +X06109* +X06104Y04682* +X061Y04679* +X06097Y04674* +X06096Y04669* +Y04625* +X06096Y04625* +X06066* +X06065Y04627* +Y04669* +X06064Y04674* +X06063Y04675* +Y04681* +X06064* +X06071Y04683* +X06076Y04686* +X0608Y04692* +X06082Y04699* +Y04751* +X0608Y04758* +X06076Y04763* +X06076Y04765* +X06077Y04769* +X06081Y04772* +X06086Y04771* +G37* +G36* +X06633Y03018D02* +X06619Y03006D01* +X06603Y02987* +X0659Y02967* +X06579Y02945* +X06571Y02922* +X06566Y02898* +X06565Y02874* +X06566Y02849* +X06571Y02825* +X06579Y02802* +X06586Y02787* +X06515Y02716* +X06377* +X06338Y02755* +Y02874* +X06397Y02932* +X06407* +X06411Y02933* +X06414Y02935* +X06452Y02973* +X06456Y02976* +X06459Y0298* +X06463Y02985* +X06465Y02988* +X06466Y02992* +Y02992* +X06469Y02998* +X0647Y03011* +Y03051* +X06469Y03064* +X06466Y0307* +Y03135* +X06492Y03161* +X06493Y03162* +X06493Y03162* +X06497Y03166* +X06519Y03188* +X06633* +Y03018* +G37* +G36* +X0658Y03976D02* +X06581Y03976D01* +X06586Y03973* +X06592Y03972* +X06653* +X06681Y03944* +Y03631* +X06397* +Y03642* +X06397Y03643* +X06397Y03645* +X06397Y03645* +X06397Y03646* +X06396Y03647* +X06395Y03648* +X06395Y03648* +X06393Y03654* +X06392Y03661* +X06393Y03667* +X06396Y03675* +X06396Y03676* +X06396Y03677* +X06396Y03678* +X06396Y03678* +X06396Y0368* +X06396Y03681* +X06395Y03686* +X06394Y03688* +X06394Y03689* +X06394Y03689* +X06393Y0369* +X06392Y03691* +X06391Y03692* +X0639Y03694* +X06389Y03697* +Y03728* +X06388Y03732* +X06387Y03734* +Y03966* +X06564* +X06575Y03977* +X0658Y03976* +G37* +G36* +X06619Y06057D02* +D01* +X06603Y06038* +X0659Y06018* +X06579Y05996* +X06574Y05983* +X06569Y05983* +X06563Y05993* +X06555Y06004* +X06544Y06012* +X06536Y06017* +X0653Y06021* +X06516Y06028* +X06501Y06033* +X06486Y06035* +X0647Y06033* +X06455Y06028* +X06441Y06021* +X06436Y06017* +X06427Y06012* +X06417Y06004* +X06408Y05993* +X06405Y05987* +X06388Y0597* +X06378Y05958* +X0637Y05944* +X06366Y05929* +X06364Y05913* +Y05913* +Y05785* +X06347Y05767* +X06343Y0577* +X06348Y05781* +X06353Y05797* +X06355Y05813* +Y05932* +X06357Y05941* +X06359Y05954* +X06357Y05968* +X06353Y05981* +X06347Y05993* +X06342Y05999* +X0634Y06002* +X0633Y06015* +X06317Y06025* +X06302Y06033* +X06286Y06038* +X06269Y0604* +X05984* +X05967Y06038* +X05951Y06033* +X05936Y06025* +X05923Y06015* +X05911Y06003* +X05901Y0599* +X05893Y05975* +X05888Y05959* +X05886Y05942* +Y0575* +X05886Y0575* +Y0572* +X05882Y05718* +X05821Y05778* +Y05789* +X0582Y05801* +X05815Y05812* +X05807Y05822* +X05798Y0583* +X05786Y05834* +X05774Y05836* +X05697* +X05685Y05834* +X05674Y0583* +X05664Y05822* +X05656Y05812* +X05652Y05801* +X0565Y05789* +Y05712* +X05652Y057* +X05656Y05688* +X05664Y05679* +X05674Y05671* +X05685Y05666* +X05697Y05665* +X05708* +X05814Y05558* +X05826Y05548* +X0584Y05541* +X05855Y05536* +X05871Y05535* +X06308* +X06324Y05536* +X06339Y05541* +X06353Y05548* +X06365Y05558* +X06481Y05674* +X06492Y0568* +X06505Y05691* +X06516Y05704* +X06523Y05719* +X06528Y05735* +X0653Y05751* +X06528Y05768* +X06525Y05779* +Y0588* +X06538Y05893* +X06544Y05896* +X06555Y05905* +X0656Y05912* +X06565Y0591* +X06566Y059* +X06571Y05876* +X06579Y05853* +X0659Y05831* +X06603Y05811* +X06619Y05793* +X06638Y05776* +X06658Y05763* +X0668Y05752* +X06703Y05744* +X06713Y05742* +X06716Y05736* +X06716Y05736* +X06707Y05734* +X06699Y05729* +X06694Y05721* +X06694Y0572* +X06686Y05714* +X06674Y05699* +X06664Y05683* +X06657Y05666* +X06652Y05647* +X06651Y05629* +Y05448* +X06652Y0543* +X06657Y05411* +X06664Y05394* +X06674Y05378* +X06686Y05363* +X06692Y05359* +Y05336* +X06694Y05326* +X06699Y05318* +X06707Y05313* +X06716Y05311* +X06826* +X06835Y05313* +X06843Y05318* +X06849Y05326* +X0685Y05336* +Y05359* +X06856Y05363* +X06868Y05378* +X06878Y05394* +X06884Y05408* +X06889Y05407* +Y05101* +X06884Y051* +X06878Y05115* +X06868Y05131* +X06856Y05145* +X06842Y05158* +X06837Y05161* +X06727Y0527* +X06713Y05283* +X06697Y05293* +X06679Y053* +X06661Y05304* +X06642Y05306* +X05601* +X05582Y05304* +X05563Y053* +X05546Y05293* +X0553Y05283* +X05516Y0527* +X05433Y05188* +X05421Y05174* +X05411Y05158* +X05404Y0514* +X05399Y05122* +X05398Y05103* +X05399Y05084* +X05404Y05066* +X05411Y05048* +X05421Y05032* +X05433Y05018* +X05447Y05006* +X05464Y04996* +X05481Y04989* +X05499Y04984* +X05512Y04983* +Y04226* +X05511Y04225* +X05464* +X05462Y04227* +X05455Y04228* +X05375* +X05368Y04227* +X05366Y04225* +X05353* +X05349Y0423* +X05349Y04234* +Y04269* +X05348Y04276* +X05344Y04282* +X05338Y04286* +X05331Y04287* +X05288* +X05281Y04286* +X05275Y04282* +X05271Y04276* +X0527Y04272* +X05257* +Y04316* +X05255Y04322* +X05252Y04327* +X05247Y04331* +X05241Y04332* +X05239* +Y04365* +X05239Y04366* +Y044* +X05238Y04406* +X05234Y04412* +X05228Y04416* +X05221Y04417* +X05187* +X0518Y04416* +X05175Y04412* +X05173Y04409* +X05166Y04408* +X05143Y04432* +X05145Y04437* +X0522* +X05227Y04438* +X05232Y04442* +X05236Y04447* +X05237Y04454* +Y04511* +X05236Y04517* +X05232Y04523* +X0523Y04524* +X05232Y04529* +X053* +X05306Y04525* +X05307Y04525* +X0531Y04519* +X05309Y04517* +Y045* +X0531Y04495* +X05313Y0449* +X05318Y04487* +X05323Y04486* +X05367* +X05372Y04487* +X05373Y04488* +X05416* +Y04472* +X05417Y04465* +X05421Y04459* +X05427Y04455* +X05429Y04455* +Y0445* +X05427Y04449* +X05421Y04446* +X05417Y0444* +X05417Y04438* +X05399* +X05398Y04439* +X05392Y04442* +X05386Y04444* +X0535* +X05343Y04442* +X05337Y04439* +X05333Y04433* +X05333Y04431* +X05328* +X05327Y04433* +X05323Y04439* +X05318Y04443* +X05311Y04444* +X05303* +Y04404* +Y04364* +X05311* +X05318Y04366* +X05323Y04369* +X05327Y04375* +X05328Y04377* +X05333* +X05333Y04375* +X05337Y0437* +X05343Y04366* +X0535Y04364* +X05358* +Y04336* +X05357Y04335* +Y04278* +X05359Y04272* +X05362Y04266* +X05368Y04262* +X05375Y04261* +X05455* +X05462Y04262* +X05467Y04266* +X05471Y04272* +X05472Y04278* +Y04335* +X05471Y04342* +X05467Y04347* +X05462Y04351* +X05455Y04352* +X05403* +Y04381* +X05403Y04382* +Y04388* +X05408Y04392* +X05417* +X05417Y0439* +X05421Y04385* +X05427Y04381* +X05434Y04379* +X05478* +X05485Y04381* +X0549Y04385* +X05494Y0439* +X05496Y04397* +Y04433* +X05494Y0444* +X0549Y04446* +X05485Y04449* +X05482Y0445* +Y04455* +X05485Y04455* +X0549Y04459* +X05494Y04465* +X05496Y04472* +Y04508* +X05494Y04515* +X0549Y0452* +X05485Y04524* +X05478Y04526* +X05464* +X05461Y04531* +X05462Y04532* +X05463Y04537* +Y04554* +X05462Y04559* +X05459Y04564* +X05457Y04565* +Y04603* +X05464* +X05471Y04605* +X05477Y04609* +X05481Y04615* +X05482Y04621* +Y04677* +X05481Y04684* +X05477Y04689* +X05473Y04692* +X05473Y04698* +X05473Y04698* +X05473Y04698* +X05477Y04704* +X05479Y04711* +Y04763* +X05477Y0477* +X05473Y04775* +X05471Y04777* +Y04783* +X05473Y04784* +X05477Y0479* +X05478Y04796* +Y04848* +X05477Y04855* +X05473Y04861* +X05467Y04865* +X05461Y04866* +X05426* +X05419Y04865* +X05414Y04861* +X0541Y04855* +X05409Y04848* +Y04796* +X0541Y0479* +X05414Y04784* +X05416Y04782* +Y04776* +X05414Y04775* +X0541Y0477* +X05409Y04763* +Y04711* +X0541Y04704* +X05414Y04698* +X05417Y04696* +X05417Y0469* +X05416Y04689* +X05412Y04684* +X05411Y04677* +Y04621* +X05412Y04615* +Y04569* +X05384* +X0538Y04574* +X0538Y04575* +Y04591* +X05379Y04597* +X05376Y04601* +X05372Y04604* +X05367Y04605* +X05366* +X05364Y0461* +X05367Y04615* +X05368Y04621* +Y04677* +X05367Y04684* +X05363Y04689* +X05357Y04693* +X05351Y04695* +X05351Y04695* +X05346Y04702* +X05339Y0471* +X05339Y04711* +Y04763* +X05337Y0477* +X05334Y04775* +X05332Y04777* +Y04783* +X05333Y04784* +X05337Y04789* +X05339Y04796* +Y04812* +X05269* +Y04796* +X0527Y04789* +X05274Y04784* +X05276Y04782* +Y04776* +X05274Y04775* +X05271Y0477* +X05269Y04763* +Y04711* +X05271Y04704* +X05274Y04698* +X0528Y04695* +X05287Y04693* +X05298* +X05302Y04689* +X05298Y04684* +X05296Y04677* +Y04621* +X05298Y04615* +X05302Y04609* +X05307Y04605* +X05311Y04604* +X05312Y04599* +X0531Y04597* +X05309Y04591* +Y04575* +X05309Y04574* +X0523* +X05217Y04588* +X05218Y04593* +Y04634* +X05216Y04642* +X05212Y04648* +X05206Y04652* +X052Y04653* +X05199Y04656* +X05199Y04658* +X05206Y04664* +X05213Y04672* +X05217Y04682* +X05217Y04682* +X05139* +X0514Y04682* +X05143Y04672* +X0515Y04664* +X05157Y04658* +X05157Y04656* +X05156Y04653* +X0515Y04652* +X05144Y04648* +X0514Y04642* +X05138Y04634* +Y04593* +X0514Y04586* +X05144Y0458* +X0515Y04575* +X05157Y04574* +X05166* +Y04528* +X0514* +X05133Y04526* +X05127Y04523* +X05126Y04521* +X05121Y04522* +Y04524* +X0512Y04532* +X05115Y04538* +X05048Y04606* +Y04649* +X05046Y04657* +X05042Y04663* +X05036Y04667* +X05029Y04669* +X04956* +X04949Y04667* +X04943Y04663* +X04938Y04657* +X04937Y04649* +Y04577* +X04938Y04569* +X04943Y04563* +X04949Y04559* +X04956Y04558* +X05029* +X05036Y04559* +X05037Y0456* +X05065Y04532* +X05062Y04527* +X05058Y04528* +X04978* +X04972Y04526* +X04966Y04523* +X04962Y04517* +X04961Y04511* +Y04454* +X04962Y04447* +X04966Y04442* +X04972Y04438* +X04978Y04437* +X04993* +X04997Y0443* +X05029Y04398* +Y04331* +X05026Y04331* +X05021Y04327* +X05017Y04322* +X05016Y04316* +Y04315* +X04958Y04256* +X04952Y04249* +X04948Y0424* +X04947Y04231* +Y04176* +X04905* +X04905Y04176* +X04861* +X04861Y04176* +X04828* +X04828Y04176* +X04784* +X04783Y04176* +X04747* +X04741Y04175* +X04738Y0418* +X04857Y04299* +X04864Y04308* +X0487Y04318* +X04873Y0433* +X04875Y04341* +Y04433* +X0489* +X04896Y04434* +X04902Y04438* +X04905Y04443* +X04907Y0445* +Y04657* +X04905Y04663* +X04902Y04669* +X04896Y04673* +X0489Y04674* +X04768* +X04762Y04673* +X04756Y04669* +X04753Y04663* +X04751Y04657* +Y0445* +X04753Y04443* +X04754Y04441* +Y04366* +X04666Y04278* +X04603* +X04602Y0428* +X04596Y04284* +X04589Y04285* +X04553* +X04547Y04284* +X04541Y0428* +X04537Y04274* +X04536Y04272* +X04531* +X04531Y04274* +X04527Y0428* +X04521Y04284* +X04514Y04285* +X04479* +X04472Y04284* +X04466Y0428* +X04462Y04274* +X04461Y04267* +Y04243* +X0442Y04202* +X04372* +X04363Y042* +X04356Y04196* +X04351Y04188* +X0435Y0418* +X04351Y04172* +X04356Y04164* +X04363Y0416* +X04372Y04158* +X04423* +X04425Y04158* +X0443Y04157* +X04439Y04159* +X04446Y04164* +X04488Y04206* +X04514* +X04521Y04207* +X04527Y04211* +X04531Y04217* +X04531Y04219* +X04536* +X04537Y04217* +X04541Y04211* +X04544Y04209* +X04544Y04206* +X04546Y04199* +X04541Y04196* +X04536Y04188* +X04535Y0418* +X04536Y04172* +X04541Y04164* +X04544Y04162* +X04544Y04156* +X04542Y04154* +X04537Y04147* +X04533Y04139* +X04532Y04131* +X04533Y04122* +X04537Y04114* +X04542Y04107* +X04545Y04105* +X04545Y04099* +X04541Y04096* +X04537Y0409* +X04627* +X04626Y04093* +X04628Y04098* +X04641* +X04645Y04093* +X04644Y0409* +Y04009* +X04645Y04003* +X04649Y03997* +X04655Y03993* +X04661Y03992* +X04665* +Y03929* +X04617* +X0461Y03927* +Y03927* +X0459* +X04581Y03926* +X04572Y03922* +X04565Y03917* +X04487Y03839* +X04481Y03831* +X04478Y03823* +X04476Y03814* +Y03757* +X04476Y03757* +X04468Y03752* +X04464Y03745* +X04462Y03736* +X0446Y03734* +X0441Y03735* +X0441Y03735* +X0441Y03735* +X04406Y03734* +X04401Y03733* +X04401Y03733* +X04401Y03733* +X04397Y03732* +X04393Y0373* +X04393Y0373* +X04393Y0373* +X04389Y03727* +X04385Y03724* +X04385Y03724* +X04385Y03724* +X04383Y03721* +X0438Y03717* +X0438Y03717* +X0438Y03717* +X04378Y03713* +X04376Y03709* +X04376Y03709* +X04376Y03709* +X04376Y03704* +X04375Y037* +X04375Y037* +X04375Y03699* +Y03663* +X04376Y03659* +X04376Y03655* +X04376Y03654* +X04376Y03654* +X04378Y0365* +X0438Y03646* +X0438Y03646* +X0438Y03646* +X04382Y03642* +X04385Y03639* +X04385Y03639* +X04385Y03639* +X04389Y03636* +X04392Y03633* +X04393Y03633* +X04393Y03633* +X04397Y03631* +X04401Y0363* +X04653Y03561* +X04653Y03561* +X04653Y03561* +X04658Y0356* +X04662Y03559* +X04662Y03559* +X04662Y03559* +X04667Y0356* +X04671Y0356* +X04671Y0356* +X04671Y03561* +X04675Y03562* +X0468Y03564* +X0468Y03564* +X0468Y03564* +X04683Y03567* +X04687Y03569* +X04687Y0357* +X04687Y0357* +X0469Y03573* +X04693Y03577* +X04693Y03577* +X04693Y03577* +X04694Y03581* +X04696Y03585* +X04696Y03585* +X04696Y03585* +X04697Y0359* +X04697Y03594* +X04697Y03594* +X04697Y03594* +Y03698* +X04697Y03703* +X04696Y03707* +X04696Y03707* +X04696Y03708* +X04694Y03712* +X04693Y03716* +X04693Y03716* +X04693Y03716* +X0469Y0372* +X04687Y03723* +X04687Y03723* +X04687Y03723* +X04683Y03726* +X0468Y03729* +X0468Y03729* +X0468Y03729* +X04676Y03731* +X04671Y03732* +X04671Y03732* +X04671Y03732* +X04667Y03733* +X04662Y03734* +X0461Y03734* +Y03736* +X0461Y03739* +X04614Y03743* +X04617Y03743* +X04635* +Y03769* +X04599* +Y03761* +X04599Y0376* +X04598Y0376* +X04595Y03757* +X04588Y03759* +X04547* +Y03799* +X04604Y03857* +X04662* +X04663Y03857* +X04673* +X04676Y03858* +X04676Y03858* +X047* +X04701Y03853* +X04699Y03852* +X04694Y03848* +X0469Y03843* +X04688Y03836* +Y03813* +X04683Y03811* +X0468Y03813* +X04673Y03815* +X04655* +Y03779* +Y03743* +X04673* +X0468Y03744* +X04685Y03748* +X04689Y03754* +X04691Y03761* +Y03783* +X04696Y03786* +X04699Y03783* +X04706Y03782* +X04718* +Y03818* +X04728* +Y03828* +X04768* +Y03836* +X04767Y03843* +X04763Y03848* +X04757Y03852* +X04755Y03853* +X04756Y03858* +X04802* +X04811Y03859* +X04819Y03862* +X04827Y03868* +X04827Y03869* +X04832Y03872* +X04836Y03877* +X04837Y03884* +Y03923* +X04836Y0393* +X04832Y03935* +X04826Y03939* +X0482Y0394* +X04806* +X048Y03939* +X04794Y03935* +X0479Y0393* +X0479Y03928* +X04752* +X0475Y03928* +X04735* +Y04007* +X04735Y04009* +Y0409* +X04735Y04093* +X04735Y04093* +X04738Y04098* +X04738Y04098* +X04743Y04099* +X04751Y04102* +X04758Y04107* +X04761Y0411* +X04771* +X04777Y04106* +X04779Y04106* +Y04101* +X04777Y041* +X04771Y04097* +X04767Y04091* +X04766Y04084* +Y04076* +X04806* +Y04066* +X04816* +Y0403* +X04828* +X04835Y04031* +X0484Y04035* +X04841Y04037* +X04847* +X04848Y04035* +X04854Y04031* +X04861Y0403* +X04873* +Y04066* +X04883* +Y04076* +X04923* +Y04084* +X04921Y04091* +X04918Y04097* +X04912Y041* +X0491Y04101* +Y04106* +X04912Y04106* +X04917Y0411* +X04947* +Y03943* +X04942Y0394* +X04941Y0394* +Y03904* +Y03867* +X04942Y03868* +X04947Y03864* +Y03594* +X04947Y03593* +X04947Y03592* +Y03535* +X04945Y03531* +X04943Y03523* +Y03472* +X04945Y03464* +X04949Y03457* +X04956Y03452* +X04964Y03451* +X05015* +X05023Y03452* +X0503Y03457* +X05035Y03464* +X05036Y03472* +Y03523* +X05035Y03531* +X0503Y03538* +X05023Y03543* +X05018Y03544* +Y03558* +X05139* +Y03557* +X0514Y03549* +X05145Y03542* +X05152Y03537* +X0516Y03536* +X05211* +X05219Y03537* +X05226Y03542* +X05231Y03549* +X05232Y03557* +Y03608* +X05231Y03613* +X05234Y03618* +X05345* +X05348Y03613* +X05342Y03606* +X05337Y03594* +X05337Y03592* +X05428* +X05428Y03594* +X05423Y03606* +X05417Y03613* +X05419Y03618* +X05455* +X05457Y03613* +X05455Y0361* +X05451Y03601* +X0545Y03592* +X05451Y03583* +X05455Y03575* +X0546Y03567* +X05467Y03562* +X05476Y03558* +X05485Y03557* +X05494Y03558* +X05503Y03562* +X0551Y03567* +X05515Y03575* +X05517Y03577* +X05517Y03578* +X05545Y03606* +X0555Y03612* +X05551Y0362* +Y03917* +Y03923* +Y04129* +X05559Y04137* +X05616* +X05623Y04138* +X05629Y04142* +X05632Y04148* +X05634Y04154* +Y04211* +X05632Y04218* +X05632Y04218* +Y04272* +X05632Y04272* +X05634Y04278* +Y04335* +X05632Y04342* +X05632Y04342* +Y05047* +X0565Y05065* +X05694* +X05696Y0506* +X05689Y05055* +X05681Y05045* +X05675Y05034* +X05672Y05021* +X05671Y05019* +X058* +X058Y05021* +X05796Y05034* +X0579Y05045* +X05782Y05055* +X05775Y0506* +X05777Y05065* +X0593* +X05932Y0506* +X05926Y05055* +X05918Y05045* +X05911Y05034* +X05908Y05021* +X05907Y05019* +X06036* +X06036Y05021* +X06032Y05034* +X06026Y05045* +X06018Y05055* +X06012Y0506* +X06013Y05065* +X06143* +X06146Y0506* +X06144Y05056* +X06143Y05049* +Y04972* +X06144Y04965* +X06147Y04959* +X06151Y04953* +X06156Y04949* +X06163Y04946* +X0617Y04945* +X06247* +X06254Y04946* +X0626Y04949* +X06266Y04953* +X06266Y04954* +X06385* +X06387Y04952* +X06387Y04948* +X06292Y04852* +X06289Y04849* +X06289Y04846* +X06285Y04844* +X06284Y04843* +X06278Y04844* +X06243* +X06236Y04843* +X06231Y04839* +X06227Y04833* +X06226Y04827* +Y04803* +X06225Y04801* +X06226Y04798* +Y04775* +X06227Y04768* +X06231Y04762* +X06236Y04758* +X06238Y04753* +X06237Y04752* +X06231Y0475* +X06226Y04748* +X06221Y0475* +Y04751* +X0622Y04758* +X06216Y04763* +X0621Y04767* +X06204Y04769* +X06181* +X06155Y04795* +Y04827* +X06154Y04833* +X0615Y04839* +X06145Y04843* +X06138Y04844* +X06103* +X06097Y04843* +X06091Y04839* +X06089Y04837* +X06089Y04837* +X06084Y04837* +X06081Y04841* +X06075Y04845* +X06069Y04846* +X06033* +X06026Y04845* +X0602Y04841* +X06016Y04835* +X06016Y04833* +X06011* +X0601Y04835* +X06006Y04841* +X06001Y04845* +X05994Y04846* +X05958* +X05951Y04845* +X05945Y04841* +X05943Y04837* +X05937Y04837* +X05937Y04837* +X05937Y04837* +X05931Y04841* +X05924Y04842* +X05888* +X05881Y04841* +X05875Y04837* +X05872Y04831* +X05871Y04829* +X05866* +X05866Y04831* +X05862Y04837* +X05856Y04841* +X05849Y04842* +X05813* +X05806Y04841* +X05801Y04837* +X05797Y04831* +X05795Y04825* +Y04823* +X05783* +X05775Y04821* +X05769Y04817* +X05728Y04777* +X05724Y0477* +X05722Y04762* +Y045* +X05719Y04495* +X05716Y04487* +X05714Y04478* +X05716Y04469* +X05719Y0446* +X05725Y04453* +X05732Y04447* +X0574Y04444* +X05744Y04443* +X05745Y04439* +X05694Y04387* +X05689Y04381* +X05688Y04373* +Y04167* +X05654Y04133* +X05649Y04126* +X05648Y04119* +Y03945* +X05643Y03944* +X05636Y03953* +X05626Y0396* +X05615Y03965* +X05613Y03965* +Y0392* +Y03874* +X05615Y03875* +X05626Y03879* +X05636Y03887* +X05643Y03895* +X05648Y03894* +Y03629* +X05421Y03403* +X05322* +X05314Y03401* +X05308Y03397* +X05283Y03372* +X05276Y0337* +X05269Y03366* +X05264Y03358* +X05262Y0335* +Y03339* +X05257Y03336* +X05256Y03337* +Y0335* +X05255Y03358* +X0525Y03366* +X05243Y0337* +X05234Y03372* +X05226Y0337* +X05219Y03366* +X05214Y03358* +X05214Y03357* +X05207* +X05203Y03363* +X05197Y03367* +X05191Y03368* +X05147* +X0514Y03367* +X05134Y03363* +X0513Y03357* +X05129Y0335* +Y03332* +X05101Y03304* +X05096Y03296* +X05094Y03288* +Y03259* +X04939Y03104* +X04723* +X04714Y03102* +X04707Y03097* +X04643Y03034* +X04638Y03026* +X04637Y03018* +Y03009* +X04632Y03006* +X04537* +X04186Y03357* +Y03477* +X04184Y03487* +X04181Y03495* +X04175Y03502* +X04108Y0357* +X04108Y03575* +X04111Y03577* +X04119Y03587* +X04121Y03591* +X04121Y03592* +X04129Y03601* +X04134Y03611* +X04137Y03623* +X04139Y03634* +Y03998* +X04139Y03998* +X04144Y04005* +X04145Y04013* +X04144Y04021* +X04139Y04028* +X04139Y04028* +Y04105* +X04143Y04107* +X04236Y04015* +X04243Y0401* +X04251Y04008* +X0437* +X04372Y04008* +X04388* +Y04001* +X04387* +X0438Y04* +X04374Y03996* +X0437Y0399* +X04369Y03983* +Y03948* +X0437Y03941* +X04374Y03935* +X0438Y03931* +X04382Y03931* +Y03926* +X0438Y03925* +X04374Y03921* +X0437Y03916* +X04369Y03909* +Y03901* +X04448* +Y03909* +X04447Y03916* +X04443Y03921* +X04437Y03925* +X04435Y03926* +Y03931* +X04437Y03931* +X04443Y03935* +X04447Y03941* +X04448Y03948* +Y03983* +X04447Y0399* +X04443Y03996* +X04437Y04* +X0443Y04001* +X04429* +Y04009* +X04431Y0401* +X04438Y04014* +X04443Y04022* +X04445Y0403* +X04443Y04038* +X04438Y04046* +X04431Y0405* +X04423Y04052* +X04372* +X0437Y04052* +X0426* +X04172Y0414* +Y04201* +X04189* +X04197Y04202* +X04203Y04206* +X04204Y04208* +X0421* +X04212Y04206* +X04218Y04202* +X04225Y042* +X04237* +Y04236* +X04257* +Y042* +X04268* +X04275Y04202* +X04281Y04206* +X04282Y04208* +X04289* +X0429Y04206* +X04296Y04202* +X04303Y042* +X04315* +Y04236* +X04325* +Y04246* +X04364* +Y04254* +X04363Y04261* +X04359Y04267* +X04353Y04271* +X04351Y04271* +Y04276* +X04353Y04277* +X04355Y04278* +X04377* +X04389Y04279* +X044Y04283* +X04411Y04288* +X0442Y04296* +X04463Y04339* +X04471Y04348* +X04476Y04359* +X0448Y0437* +X04481Y04382* +Y04433* +X04496* +X04502Y04434* +X04508Y04438* +X04512Y04443* +X04513Y0445* +Y04657* +X04512Y04663* +X04508Y04669* +X04502Y04673* +X04496Y04674* +X04374* +X04368Y04673* +X04363Y04669* +X04359Y04663* +X04358Y04657* +Y0445* +X04359Y04443* +X04361Y04441* +Y04407* +X04352Y04398* +X04123* +X04112Y04397* +X041Y04394* +X0409Y04388* +X04081Y04381* +X04036Y04336* +X04029Y04327* +X04023Y04316* +X0402Y04305* +X04018Y04293* +Y03659* +X04016Y03657* +X04012Y03655* +X04001Y03647* +X03994Y03637* +X03989Y03625* +X03987Y03612* +X03989Y03599* +X03994Y03587* +X04001Y03577* +X04012Y03569* +X04017Y03567* +X04022Y03563* +X04026Y03554* +X04031Y03547* +X04077Y03501* +X04075Y03497* +X04066* +Y03447* +Y03397* +X04076* +X04089Y03399* +X04101Y03404* +X0411Y03411* +X04115Y0341* +Y03342* +X04117Y03333* +X0412Y03325* +X04126Y03318* +X04498Y02946* +X04505Y0294* +X04513Y02937* +X04523Y02935* +X04574* +Y02898* +X0457Y02893* +X04566Y02882* +X04564Y0287* +X04566Y02859* +X0457Y02848* +X04578Y02838* +X04587Y02831* +X04598Y02827* +X0461Y02825* +X04621Y02827* +X04632Y02831* +X04641Y02838* +X04649Y02848* +X04653Y02859* +X04655Y0287* +X04653Y02882* +X04649Y02893* +X04645Y02898* +Y02906* +X04665Y02926* +X04671Y02927* +X04682Y02931* +X04691Y02938* +X04699Y02948* +X04703Y02959* +X04705Y0297* +X04703Y02982* +X04699Y02993* +X04691Y03002* +X04686Y03007* +X04686Y03012* +X04732Y03058* +X04948* +X04957Y0306* +X04964Y03065* +X05108Y03208* +X05112Y03206* +X05112Y03205* +Y03197* +X05192* +Y03205* +X05191Y03212* +X05188Y03216* +X0519Y03221* +X05191* +X05198Y03223* +X05203Y03227* +X05207Y03233* +X05209Y03239* +Y03247* +X05169* +Y03267* +X05209* +Y03275* +X05207Y03282* +X05203Y03288* +X05198Y03292* +X05196Y03292* +Y03297* +X05197Y03298* +X05203Y03302* +X05207Y03307* +X05207Y03308* +X05212Y03308* +Y03287* +X05214Y03278* +X05219Y03271* +X05226Y03267* +X05234Y03265* +X05243Y03267* +X0525Y03271* +X05255Y03278* +X05256Y03287* +Y03306* +X05257Y03306* +X05262Y03304* +Y03287* +X05264Y03278* +X05269Y03271* +X05276Y03267* +X05279Y03266* +X05281Y03261* +X0528Y0326* +X05277Y03252* +X05275Y03243* +X05277Y03234* +X0528Y03225* +X05285Y03218* +X05285Y03216* +X05284Y03213* +X05272* +X05264Y03212* +X05257Y03207* +X05233Y03183* +X05226Y03181* +X05219Y03177* +X05214Y03169* +X05212Y03161* +Y03102* +X05207Y031* +X05193Y03114* +Y03115* +X05192Y03121* +Y03131* +X0519Y03137* +X05187Y03143* +X05181Y03147* +X05179Y03147* +Y03153* +X05181Y03153* +X05187Y03157* +X05191Y03163* +X05192Y0317* +Y03177* +X05112* +Y0317* +X05114Y03163* +X05117Y03157* +X05123Y03153* +X05125Y03153* +Y03147* +X05123Y03147* +X05118Y03143* +X05114Y03137* +X05112Y03131* +Y03095* +X05114Y03088* +X05118Y03082* +X05123Y03078* +X0513Y03077* +X05173* +X05198Y03052* +X05205Y03048* +X05212Y03046* +X05265* +X0527Y03041* +X05354Y02957* +X05353Y02947* +X05354Y02937* +X05358Y02927* +X05364Y02919* +X05372Y02913* +X05382Y02909* +X05392Y02907* +X05402Y02909* +X05412Y02913* +X05417Y02916* +X05422Y02914* +Y02906* +X05402Y02885* +X05392Y02887* +X05382Y02885* +X05372Y02881* +X05364Y02875* +X05358Y02867* +X05354Y02857* +X05353Y02847* +X05354Y02837* +X05358Y02827* +X05364Y02819* +X05372Y02813* +X05382Y02809* +X05392Y02807* +X05402Y02809* +X05412Y02813* +X0542Y02819* +X05427Y02827* +X05431Y02837* +X05432Y02847* +X05431Y02857* +X0545Y02877* +X05455Y02875* +Y0286* +X05454Y02857* +X05453Y02847* +X05454Y02837* +X05458Y02827* +X05464Y02819* +X05472Y02813* +X05482Y02809* +X05492Y02807* +X05502Y02809* +X05512Y02813* +X0552Y02819* +X05527Y02827* +X05531Y02837* +X05532Y02847* +X05531Y02857* +X05527Y02867* +X05525Y02868* +Y02922* +X05526Y02922* +X05548Y02944* +X05553Y02942* +X05554Y02937* +X05558Y02927* +X05564Y02919* +X05572Y02913* +X05582Y02909* +X05592Y02907* +X05602Y02909* +X05612Y02913* +X0562Y02919* +X05624Y02924* +X05781* +X05793Y02911* +X058Y02907* +X05808Y02905* +X05896* +X05924Y02877* +X05921Y02873* +X05916Y02863* +X05915Y02851* +X05916Y02839* +X05921Y02828* +X05928Y02819* +X05938Y02812* +X05948Y02807* +X0596Y02806* +X05972Y02807* +X05983Y02812* +X05992Y02819* +X05999Y02828* +X06004Y02839* +X06005Y02851* +X06004Y02863* +X05999Y02873* +X05992Y02883* +X05983Y0289* +X05972Y02895* +X05963Y02896* +X05918Y0294* +X05912Y02944* +X05904Y02946* +X05816* +X05804Y02958* +X05797Y02963* +X05789Y02964* +X05628* +X05627Y02967* +X05623Y02971* +X05624Y02973* +X05626Y02976* +X05633Y02977* +X05642Y02981* +X05649Y02986* +X05778Y03115* +X05783Y03122* +X05787Y03131* +X05788Y0314* +Y03289* +X05837Y03337* +X05871* +X05876Y03338* +X0588Y03341* +X05883Y03346* +X05884Y03351* +Y03512* +X05883Y03517* +X0588Y03522* +X05876Y03525* +X05871Y03526* +X05828* +X05826Y0353* +X05834Y03538* +X05838Y03545* +X05838Y03545* +X05839Y03552* +Y0358* +X05871* +X05873Y0358* +X05876Y03581* +X0588Y03583* +X05883Y03588* +X05884Y03591* +X05889Y03591* +X05889Y03591* +X05893Y03585* +X05899Y03581* +X05906Y03579* +X0613* +X06179Y03531* +X06177Y03527* +X062Y03503* +Y03336* +X06202Y03335* +X06203Y03333* +X06206Y03331* +X06213Y03328* +X06213Y03328* +X06214Y03328* +X06215Y03327* +X06216Y03327* +X06216Y03326* +X06218Y03326* +X06219Y03326* +X06241* +X06242Y03326* +X06243Y03326* +X06244Y03327* +X06244Y03327* +X06246Y03328* +X06247Y03328* +X06247Y03328* +X06253Y03331* +X06259Y03332* +X06266Y03331* +X06272Y03328* +X06272Y03328* +X06273Y03328* +X06274Y03327* +X06275Y03327* +X06276Y03326* +X06277Y03326* +X06278Y03326* +X06317* +X06319Y03321* +X06292Y03294* +X06289Y03291* +X06289Y03287* +Y03093* +X06284Y03091* +X0628Y03094* +X06268Y03099* +X06255Y031* +X06243Y03099* +X06239Y03097* +X06174Y03162* +X06167Y03168* +X06158Y03171* +X06149Y03172* +X06108* +Y03232* +X06107Y03238* +X06103Y03244* +X06097Y03248* +X06091Y03249* +X06034* +X06028Y03248* +X06022Y03244* +X06018Y03238* +X06017Y03232* +Y03172* +X06012* +X06003Y03171* +X05995Y03168* +X05987Y03162* +X05959Y03134* +X05947* +X0594Y03132* +X05935Y03128* +X05931Y03123* +X05929Y03116* +Y0308* +X05931Y03073* +X05935Y03067* +X0594Y03064* +X05943Y03063* +Y03058* +X0594Y03058* +X05935Y03054* +X05931Y03048* +X05929Y03041* +Y03005* +X05931Y02998* +X05935Y02993* +X0594Y02989* +X05947Y02987* +X05991* +X05994Y02988* +X06017* +X06018Y02983* +X06022Y02978* +X06028Y02974* +X06034Y02973* +X06048* +X06206Y02814* +Y02795* +X06207Y02782* +X06212Y0277* +X0622Y0276* +X06231Y02752* +X06243Y02747* +X06255Y02745* +X06268Y02747* +X0628Y02752* +X06291Y0276* +X06298Y0277* +X06303Y02782* +X06305Y02795* +Y02834* +X06303Y02847* +X06298Y02859* +X06291Y02869* +X0628Y02877* +X06268Y02882* +X06255Y02884* +X06243Y02882* +X06239Y02881* +X06108Y03011* +Y0307* +X06107Y03077* +X06103Y03082* +X06097Y03086* +X06091Y03087* +X06034* +X06028Y03086* +X06022Y03082* +X06018Y03077* +X06017Y0307* +Y03058* +X05997* +X05996Y03063* +X05998Y03064* +X06003Y03067* +X06007Y03073* +X06009Y0308* +Y03084* +X06027Y03102* +X06135* +X06206Y03031* +Y03011* +X06207Y02998* +X06212Y02986* +X0622Y02976* +X06231Y02968* +X06243Y02963* +X06255Y02962* +X06268Y02963* +X0628Y02968* +X06291Y02976* +X06292Y02979* +X06297Y02979* +X06341Y02935* +X06344Y02933* +X06348Y02932* +X06376* +X06378Y02928* +X06331Y02881* +X06329Y02877* +X06328Y02874* +Y02755* +X06329Y02752* +X06331Y02748* +X06359Y02721* +X06357Y02716* +X04271* +X04246Y02741* +X04262Y0276* +X04276Y0278* +X04286Y02802* +X04294Y02825* +X04299Y02849* +X04301Y02874* +X04299Y02898* +X04294Y02922* +X04286Y02945* +X04276Y02967* +X04262Y02987* +X04246Y03006* +X04227Y03022* +X04207Y03035* +X04185Y03046* +X04162Y03054* +X04138Y03059* +X04114Y0306* +X04089Y03059* +X04065Y03054* +X04042Y03046* +X0402Y03035* +X04Y03022* +X03982Y03006* +X03956Y03031* +Y04547* +X03982Y04572* +X04Y04556* +X0402Y04542* +X04042Y04532* +X04065Y04524* +X04089Y04519* +X04114Y04517* +X04138Y04519* +X04162Y04524* +X04185Y04532* +X04207Y04542* +X04227Y04556* +X04246Y04572* +X04262Y0459* +X04276Y04611* +X04286Y04633* +X04294Y04656* +X04299Y0468* +X04301Y04704* +X04299Y04729* +X04294Y04753* +X04286Y04776* +X04276Y04798* +X04262Y04818* +X04246Y04836* +X04271Y04862* +X05265* +X05334Y04931* +Y05994* +X05423Y06082* +X06594* +X06619Y06057* +G37* +G36* +X06889Y04202D02* +X06884D01* +X06883Y04204* +X06878Y04207* +X06872Y04208* +X06592* +X06591Y04208* +X0659Y04209* +X0659Y04209* +X0659Y0421* +X06589Y04211* +X06588Y04212* +X06588Y04212* +X06588Y04213* +X06584Y04216* +Y04565* +X06585Y04565* +X06621* +X06627Y04566* +X06889* +Y04202* +G37* +%LNunisolder52_back-2*% +%LPC*% +G36* +X04925Y03292D02* +X0492Y03292D01* +X04907Y03288* +X04894Y03281* +X04883Y03272* +X04874Y03261* +X04867Y03248* +X04863Y03235* +X04863Y0323* +X04925* +Y03292* +G37* +G36* +X04545D02* +Y0323D01* +X04606* +X04606Y03235* +X04602Y03248* +X04595Y03261* +X04586Y03272* +X04575Y03281* +X04562Y03288* +X04549Y03292* +X04545Y03292* +G37* +G36* +X0469Y03384D02* +X04686Y03383D01* +X04682Y0338* +X04679Y03375* +X04678Y0337* +Y03358* +X0469* +Y03384* +G37* +G36* +X04672Y03301D02* +Y03275D01* +X04684* +Y03288* +X04683Y03293* +X0468Y03297* +X04676Y033* +X04672Y03301* +G37* +G36* +X04397Y03261D02* +X04379D01* +X04372Y0326* +X04366Y03256* +X04362Y0325* +X04361Y03243* +Y03235* +X04397* +Y03261* +G37* +G36* +X04652Y03301D02* +X04649Y033D01* +X04644Y03297* +X04641Y03293* +X0464Y03288* +Y03275* +X04652* +Y03301* +G37* +G36* +X04722Y03338D02* +X0471D01* +Y03313* +X04713Y03313* +X04718Y03316* +X04721Y03321* +X04722Y03326* +Y03338* +G37* +G36* +X0469D02* +X04678D01* +Y03326* +X04679Y03321* +X04682Y03316* +X04686Y03313* +X0469Y03313* +Y03338* +G37* +G36* +X04945Y03292D02* +Y0323D01* +X05006* +X05006Y03235* +X05002Y03248* +X04995Y03261* +X04986Y03272* +X04975Y03281* +X04962Y03288* +X04949Y03292* +X04945Y03292* +G37* +G36* +X05428Y03572D02* +X05392D01* +Y03537* +X05394Y03537* +X05406Y03542* +X05415Y03549* +X05423Y03559* +X05428Y0357* +X05428Y03572* +G37* +G36* +X04263Y03602D02* +X04205D01* +X04205Y03599* +X0421Y03587* +X04218Y03577* +X04228Y03569* +X0424Y03564* +X04253Y03562* +X04263* +Y03602* +G37* +G36* +X06323Y03631D02* +X06255D01* +X0625Y0363* +X06245Y03627* +X06242Y03622* +X06241Y03617* +Y03587* +X06242Y03582* +X06245Y03577* +X0625Y03574* +X06255Y03573* +X06263* +X06265Y03568* +X06264Y03568* +X06258Y0356* +X06255Y03552* +X06254Y03543* +X06255Y03534* +X06258Y03525* +X06264Y03518* +X06271Y03512* +X0628Y03509* +X06289Y03508* +X06298Y03509* +X06306Y03512* +X06314Y03518* +X06319Y03525* +X06323Y03534* +X06324Y03543* +X06323Y03552* +X06319Y0356* +X06314Y03568* +X06313Y03568* +X06315Y03573* +X06323* +X06328Y03574* +X06332Y03577* +X06335Y03582* +X06336Y03587* +Y03617* +X06335Y03622* +X06332Y03627* +X06328Y0363* +X06323Y03631* +G37* +G36* +X05372Y03572D02* +X05337D01* +X05337Y0357* +X05342Y03559* +X05349Y03549* +X05359Y03542* +X0537Y03537* +X05372Y03537* +Y03572* +G37* +G36* +X04292Y03662D02* +X04283D01* +Y03622* +X04341* +X04341Y03625* +X04336Y03637* +X04328Y03647* +X04317Y03655* +X04305Y0366* +X04292Y03662* +G37* +G36* +X04862Y03784D02* +X04824D01* +Y03748* +X04825Y03741* +X04828Y03734* +X04833Y03728* +X04839Y03723* +X04846Y0372* +X04853Y03719* +X04862* +Y03784* +G37* +G36* +X04341Y03602D02* +X04283D01* +Y03562* +X04292* +X04305Y03564* +X04317Y03569* +X04328Y03577* +X04336Y03587* +X04341Y03599* +X04341Y03602* +G37* +G36* +X04263Y03662D02* +X04253D01* +X0424Y0366* +X04228Y03655* +X04218Y03647* +X0421Y03637* +X04205Y03625* +X04205Y03622* +X04263* +Y03662* +G37* +G36* +X04783Y03488D02* +X04747D01* +X04748Y03485* +X04752Y03474* +X0476Y03464* +X04769Y03457* +X04781Y03452* +X04783Y03452* +Y03488* +G37* +G36* +X04838D02* +X04803D01* +Y03452* +X04805Y03452* +X04816Y03457* +X04826Y03464* +X04833Y03474* +X04838Y03485* +X04838Y03488* +G37* +G36* +X0471Y03384D02* +Y03358D01* +X04722* +Y0337* +X04721Y03375* +X04718Y0338* +X04713Y03383* +X0471Y03384* +G37* +G36* +X04046Y03437D02* +X03988D01* +X03988Y03434* +X03993Y03422* +X04001Y03412* +X04012Y03404* +X04024Y03399* +X04037Y03397* +X04046* +Y03437* +G37* +G36* +X04783Y03543D02* +X04781Y03543D01* +X04769Y03538* +X0476Y03531* +X04752Y03521* +X04748Y0351* +X04747Y03508* +X04783* +Y03543* +G37* +G36* +X04803D02* +Y03508D01* +X04838* +X04838Y0351* +X04833Y03521* +X04826Y03531* +X04816Y03538* +X04805Y03543* +X04803Y03543* +G37* +G36* +X04046Y03497D02* +X04037D01* +X04024Y03495* +X04012Y0349* +X04001Y03482* +X03993Y03472* +X03988Y0346* +X03988Y03457* +X04046* +Y03497* +G37* +G36* +X0441Y03586D02* +X04406Y03585D01* +X04401Y03584* +X04401Y03584* +X04401Y03584* +X04397Y03583* +X04393Y03581* +X04393Y03581* +X04393Y03581* +X04389Y03578* +X04385Y03575* +X04385Y03575* +X04385Y03575* +X04383Y03572* +X0438Y03568* +X0438Y03568* +X0438Y03568* +X04378Y03564* +X04376Y0356* +X04376Y0356* +X04376Y0356* +X04376Y03555* +X04375Y03551* +X04375Y03551* +X04375Y0355* +Y03482* +X04327* +X04317Y0349* +X04305Y03495* +X04292Y03496* +X04253* +X0424Y03495* +X04228Y0349* +X04218Y03482* +X0421Y03472* +X04205Y0346* +X04203Y03447* +X04205Y03434* +X0421Y03422* +X04218Y03412* +X04228Y03404* +X0424Y03399* +X04253Y03397* +X04292* +X04305Y03399* +X04317Y03404* +X04327Y03412* +X04371* +Y03373* +X04366Y0337* +X04362Y03364* +X04361Y03357* +Y03321* +X04362Y03315* +X04366Y03309* +X04372Y03305* +X04379Y03304* +X04434* +X04441Y03305* +X04447Y03309* +X04451Y03315* +X04452Y03321* +Y03357* +X04451Y03364* +X04447Y0337* +X04442Y03373* +Y03408* +X04445Y03411* +X04462Y03411* +Y03408* +X04464Y034* +X04468Y03393* +X04476Y03388* +X04484Y03386* +X04571* +X04602Y03355* +Y03348* +X04603Y03344* +Y03326* +X04604Y03321* +X04607Y03316* +X04611Y03314* +X04617Y03312* +X04633* +X04638Y03314* +X04643Y03316* +X04646Y03321* +X04647Y03326* +Y03344* +X04648Y03348* +Y03365* +X04647Y03369* +Y0337* +X04646Y03375* +X04643Y0338* +X04641Y03381* +X04616Y03406* +X04618Y0341* +X04662Y0341* +X04662Y0341* +X04662Y0341* +X04667Y03411* +X04671Y03411* +X04671Y03411* +X04671Y03412* +X04675Y03413* +X0468Y03415* +X0468Y03415* +X0468Y03415* +X04683Y03418* +X04687Y03421* +X04687Y03421* +X04687Y03421* +X0469Y03424* +X04693Y03428* +X04693Y03428* +X04693Y03428* +X04694Y03432* +X04696Y03436* +X04696Y03436* +X04696Y03436* +X04697Y03441* +X04697Y03445* +X04697Y03445* +X04697Y03445* +Y03481* +X04697Y03486* +X04696Y0349* +X04696Y0349* +X04696Y03491* +X04694Y03495* +X04693Y03499* +X04693Y03499* +X04693Y03499* +X0469Y03503* +X04687Y03506* +X04687Y03506* +X04687Y03506* +X04683Y03509* +X0468Y03512* +X0468Y03512* +X0468Y03512* +X04676Y03514* +X04671Y03515* +X04419Y03584* +X04419Y03584* +X04419Y03584* +X04415Y03585* +X0441Y03586* +X0441Y03586* +X0441Y03586* +G37* +G36* +X04804Y0296D02* +X0477D01* +Y02926* +X04771Y02927* +X04782Y02931* +X04792Y02938* +X04799Y02948* +X04803Y02959* +X04804Y0296* +G37* +G36* +X0475D02* +X04715D01* +X04716Y02959* +X0472Y02948* +X04727Y02938* +X04737Y02931* +X04748Y02927* +X0475Y02926* +Y0296* +G37* +G36* +X0486Y03016D02* +X04848Y03014D01* +X04837Y0301* +X04828Y03002* +X0482Y02993* +X04816Y02982* +X04814Y0297* +X04816Y02959* +X0482Y02948* +X04828Y02938* +X04836Y02932* +X04837Y02928* +X04836Y02926* +X04824Y02913* +X04821Y02914* +X0481Y02916* +X04798Y02914* +X04787Y0291* +X04778Y02902* +X0477Y02893* +X04766Y02882* +X04764Y0287* +X04766Y02859* +X0477Y02848* +X04778Y02838* +X04787Y02831* +X04798Y02827* +X0481Y02825* +X04821Y02827* +X04824Y02828* +X04855Y02796* +X04862Y02792* +X0487Y0279* +X05057* +X05065Y02792* +X05071Y02796* +X05148Y02873* +X05153Y02871* +Y02808* +X05232* +Y02886* +X05168* +X05166Y02891* +X05183Y02908* +X05192Y02907* +X05202Y02909* +X05212Y02913* +X0522Y02919* +X05227Y02927* +X05231Y02937* +X05232Y02947* +X05231Y02957* +X05227Y02967* +X0522Y02975* +X05212Y02981* +X05202Y02985* +X05192Y02987* +X05182Y02985* +X05172Y02981* +X05164Y02975* +X05158Y02967* +X05154Y02957* +X05153Y02947* +X05154Y02937* +X05154Y02936* +X05049Y02831* +X04878* +X04852Y02856* +X04853Y02859* +X04855Y0287* +X04853Y02882* +X04852Y02885* +X04874Y02906* +X04878Y02913* +X0488Y0292* +Y0293* +X04882Y02931* +X04891Y02938* +X04899Y02948* +X04903Y02959* +X04905Y0297* +X04903Y02982* +X04899Y02993* +X04891Y03002* +X04882Y0301* +X04871Y03014* +X0486Y03016* +G37* +G36* +X0475Y03015D02* +X04748Y03014D01* +X04737Y0301* +X04727Y03003* +X0472Y02993* +X04716Y02982* +X04715Y0298* +X0475* +Y03015* +G37* +G36* +X05357Y03119D02* +X05344D01* +Y03078* +X0535Y03082* +X05355Y03089* +X05357Y03098* +Y03119* +G37* +G36* +X05324D02* +X05312D01* +Y03098* +X05314Y03089* +X05319Y03082* +X05324Y03078* +Y03119* +G37* +G36* +X0477Y03015D02* +Y0298D01* +X04804* +X04803Y02982* +X04799Y02993* +X04792Y03003* +X04782Y0301* +X04771Y03014* +X0477Y03015* +G37* +G36* +X04754Y0286D02* +X0472D01* +Y02826* +X04721Y02827* +X04732Y02831* +X04742Y02838* +X04749Y02848* +X04753Y02859* +X04754Y0286* +G37* +G36* +X047D02* +X04665D01* +X04666Y02859* +X0467Y02848* +X04677Y02838* +X04687Y02831* +X04698Y02827* +X047Y02826* +Y0286* +G37* +G36* +X06078Y02896D02* +X06043D01* +X06035Y02895* +X06029Y02892* +X06023Y02888* +X06019Y02882* +X06016Y02876* +X06015Y02868* +Y02833* +X06016Y02828* +X05966Y02777* +X05365* +X05322Y02821* +X05327Y02827* +X05331Y02837* +X05332Y02847* +X05331Y02857* +X05327Y02867* +X0532Y02875* +X05312Y02881* +X05302Y02885* +X05292Y02887* +X05282Y02885* +X05272Y02881* +X05264Y02875* +X05258Y02867* +X05254Y02857* +X05253Y02847* +X05254Y02837* +X05258Y02827* +X05264Y02819* +X05272Y02813* +X05275Y02811* +X05278Y02808* +X05343Y02743* +X05349Y02739* +X05357Y02737* +X05974* +X05982Y02739* +X05988Y02743* +X06051Y02806* +X06078* +X06085Y02807* +X06091Y02809* +X06097Y02814* +X06102Y0282* +X06104Y02826* +X06105Y02833* +Y02868* +X06104Y02876* +X06102Y02882* +X06097Y02888* +X06091Y02892* +X06085Y02895* +X06078Y02896* +G37* +G36* +X0586Y02896D02* +X05848Y02895D01* +X05838Y0289* +X05828Y02883* +X05821Y02873* +X0582Y02871* +X05623* +X0562Y02875* +X05612Y02881* +X05602Y02885* +X05592Y02887* +X05582Y02885* +X05572Y02881* +X05564Y02875* +X05558Y02867* +X05554Y02857* +X05553Y02847* +X05554Y02837* +X05558Y02827* +X05564Y02819* +X05572Y02813* +X05582Y02809* +X05592Y02807* +X05602Y02809* +X05612Y02813* +X0562Y02819* +X05627Y02827* +X05628Y02831* +X0582* +X05821Y02828* +X05828Y02819* +X05838Y02812* +X05848Y02807* +X0586Y02806* +X05872Y02807* +X05883Y02812* +X05892Y02819* +X05899Y02828* +X05904Y02839* +X05905Y02851* +X05904Y02863* +X05899Y02873* +X05892Y02883* +X05883Y0289* +X05872Y02895* +X0586Y02896* +G37* +G36* +X05292Y02987D02* +X05282Y02985D01* +X05272Y02981* +X05264Y02975* +X05258Y02967* +X05254Y02957* +X05253Y02947* +X05254Y02937* +X05258Y02927* +X05264Y02919* +X05272Y02913* +X05282Y02909* +X05292Y02907* +X05302Y02909* +X05312Y02913* +X0532Y02919* +X05327Y02927* +X05331Y02937* +X05332Y02947* +X05331Y02957* +X05327Y02967* +X0532Y02975* +X05312Y02981* +X05302Y02985* +X05292Y02987* +G37* +G36* +X0472Y02915D02* +Y0288D01* +X04754* +X04753Y02882* +X04749Y02893* +X04742Y02903* +X04732Y0291* +X04721Y02914* +X0472Y02915* +G37* +G36* +X047D02* +X04698Y02914D01* +X04687Y0291* +X04677Y02903* +X0467Y02893* +X04666Y02882* +X04665Y0288* +X047* +Y02915* +G37* +G36* +X04397Y03215D02* +X04361D01* +Y03207* +X04362Y032* +X04366Y03195* +X04372Y03191* +X04379Y03189* +X04397* +Y03215* +G37* +G36* +X05643Y03175D02* +X05613D01* +Y03149* +X05625* +X05632Y0315* +X05637Y03154* +X05641Y0316* +X05643Y03167* +Y03175* +G37* +G36* +X05593D02* +X05563D01* +Y03167* +X05564Y0316* +X05568Y03154* +X05574Y0315* +X05581Y03149* +X05593* +Y03175* +G37* +G36* +X04434Y03261D02* +X04417D01* +Y03225* +Y03189* +X04434* +X04441Y03191* +X04447Y03195* +X04451Y032* +X04452Y03207* +Y03243* +X04451Y0325* +X04447Y03256* +X04441Y0326* +X04434Y03261* +G37* +G36* +X04525Y03292D02* +X0452Y03292D01* +X04507Y03288* +X04494Y03281* +X04483Y03272* +X04474Y03261* +X04467Y03248* +X04463Y03235* +X04463Y0323* +X04525* +Y03292* +G37* +G36* +X04684Y03255D02* +X04672D01* +Y0323* +X04676Y03231* +X0468Y03234* +X04683Y03238* +X04684Y03243* +Y03255* +G37* +G36* +X04652D02* +X0464D01* +Y03243* +X04641Y03238* +X04644Y03234* +X04649Y03231* +X04652Y0323* +Y03255* +G37* +G36* +X05544Y0318D02* +Y03139D01* +X05557* +Y03161* +X05555Y03169* +X0555Y03177* +X05544Y0318* +G37* +G36* +X05494D02* +Y03129D01* +Y03078* +X055Y03082* +X05505Y03089* +X05507Y03098* +Y03161* +X05505Y03169* +X055Y03177* +X05494Y0318* +G37* +G36* +X05474Y03119D02* +X05462D01* +Y03098* +X05464Y03089* +X05469Y03082* +X05474Y03078* +Y03119* +G37* +G36* +X04525Y0321D02* +X04463D01* +X04463Y03206* +X04467Y03193* +X04474Y0318* +X04483Y03169* +X04494Y0316* +X04507Y03153* +X0452Y03149* +X04525Y03148* +Y0321* +G37* +G36* +X05006D02* +X04945D01* +Y03148* +X04949Y03149* +X04962Y03153* +X04975Y0316* +X04986Y03169* +X04995Y0318* +X05002Y03193* +X05006Y03206* +X05006Y0321* +G37* +G36* +X04925D02* +X04863D01* +X04863Y03206* +X04867Y03193* +X04874Y0318* +X04883Y03169* +X04894Y0316* +X04907Y03153* +X0492Y03149* +X04925Y03148* +Y0321* +G37* +G36* +X04606D02* +X04545D01* +Y03148* +X04549Y03149* +X04562Y03153* +X04575Y0316* +X04586Y03169* +X04595Y0318* +X04602Y03193* +X04606Y03206* +X04606Y0321* +G37* +G36* +X0492Y03784D02* +X04882D01* +Y03719* +X04891* +X04898Y0372* +X04905Y03723* +X04911Y03728* +X04916Y03734* +X04919Y03741* +X0492Y03748* +Y03784* +G37* +G36* +X05188Y04731D02* +Y04702D01* +X05217* +X05217Y04703* +X05213Y04712* +X05206Y04721* +X05198Y04727* +X05188Y04731* +X05188Y04731* +G37* +G36* +X05168D02* +X05168Y04731D01* +X05158Y04727* +X0515Y04721* +X05143Y04712* +X0514Y04703* +X05139Y04702* +X05168* +Y04731* +G37* +G36* +X05808Y04644D02* +X05779D01* +Y04636* +X0578Y04629* +X05784Y04623* +X0579Y04619* +X05797Y04618* +X05808* +Y04644* +G37* +G36* +X04982Y0478D02* +X04937D01* +Y04754* +X04938Y04747* +X04942Y0474* +X04949Y04736* +X04956Y04735* +X04982* +Y0478* +G37* +G36* +X05029Y04846D02* +X05002D01* +Y048* +X05048* +Y04826* +X05047Y04834* +X05042Y0484* +X05036Y04844* +X05029Y04846* +G37* +G36* +X04982D02* +X04956D01* +X04949Y04844* +X04942Y0484* +X04938Y04834* +X04937Y04826* +Y048* +X04982* +Y04846* +G37* +G36* +X05048Y0478D02* +X05002D01* +Y04735* +X05029* +X05036Y04736* +X05042Y0474* +X05047Y04747* +X05048Y04754* +Y0478* +G37* +G36* +X0588Y04266D02* +X05854D01* +Y04254* +X05856Y04247* +X0586Y04241* +X05865Y04238* +X05872Y04236* +X0588* +Y04266* +G37* +G36* +X04364Y04226D02* +X04335D01* +Y042* +X04346* +X04353Y04202* +X04359Y04206* +X04363Y04212* +X04364Y04218* +Y04226* +G37* +G36* +X04423Y04152D02* +X04407D01* +Y0414* +X04442* +X04438Y04146* +X04431Y04151* +X04423Y04152* +G37* +G36* +X05283Y04394D02* +X05257D01* +Y04382* +X05258Y04375* +X05262Y04369* +X05268Y04366* +X05275Y04364* +X05283* +Y04394* +G37* +G36* +X0588Y04594D02* +X05854D01* +Y04582* +X05856Y04575* +X0586Y04569* +X05865Y04565* +X05872Y04564* +X0588* +Y04594* +G37* +G36* +X05283Y04444D02* +X05275D01* +X05268Y04443* +X05262Y04439* +X05258Y04433* +X05257Y04426* +Y04414* +X05283* +Y04444* +G37* +G36* +X06519Y04508D02* +X06452D01* +X06447Y04507* +X06442Y04504* +X06439Y04499* +X06438Y04494* +Y04464* +X06439Y04459* +X06442Y04454* +X06447Y04451* +X06452Y0445* +X06453* +X06455Y04445* +X06452Y04438* +X06451Y04429* +X06452Y0442* +X06455Y04411* +X06461Y04404* +X06468Y04398* +X06477Y04395* +X06486Y04393* +X06495Y04395* +X06503Y04398* +X06511Y04404* +X06516Y04411* +X0652Y0442* +X06521Y04429* +X0652Y04438* +X06517Y04445* +X06519Y0445* +X06519* +X06525Y04451* +X06529Y04454* +X06532Y04459* +X06533Y04464* +Y04494* +X06532Y04499* +X06529Y04504* +X06525Y04507* +X06519Y04508* +G37* +G36* +X05509Y0589D02* +Y05835D01* +X05563* +X05563Y05838* +X05559Y0585* +X05553Y05861* +X05545Y05871* +X05535Y05879* +X05524Y05886* +X05511Y05889* +X05509Y0589* +G37* +G36* +X05489D02* +X05486Y05889D01* +X05473Y05886* +X05462Y05879* +X05452Y05871* +X05444Y05861* +X05438Y0585* +X05434Y05838* +X05434Y05835* +X05489* +Y0589* +G37* +G36* +X05563Y05815D02* +X05509D01* +Y05761* +X05511Y05761* +X05524Y05765* +X05535Y05771* +X05545Y05779* +X05553Y05789* +X05559Y058* +X05563Y05812* +X05563Y05815* +G37* +G36* +X05757Y05944D02* +X05699D01* +X05699Y05941* +X05704Y05929* +X05712Y05919* +X05723Y05911* +X05735Y05906* +X05748Y05904* +X05757* +Y05944* +G37* +G36* +X05787Y06004D02* +X05777D01* +Y05964* +X05835* +X05835Y05967* +X0583Y05979* +X05822Y05989* +X05812Y05997* +X058Y06002* +X05787Y06004* +G37* +G36* +X05757D02* +X05748D01* +X05735Y06002* +X05723Y05997* +X05712Y05989* +X05704Y05979* +X05699Y05967* +X05699Y05964* +X05757* +Y06004* +G37* +G36* +X05835Y05944D02* +X05777D01* +Y05904* +X05787* +X058Y05906* +X05812Y05911* +X05822Y05919* +X0583Y05929* +X05835Y05941* +X05835Y05944* +G37* +G36* +X05726Y04999D02* +X05671D01* +X05672Y04996* +X05675Y04984* +X05681Y04972* +X05689Y04962* +X05699Y04954* +X05711Y04948* +X05723Y04944* +X05726Y04944* +Y04999* +G37* +G36* +X05321Y04866D02* +X05314D01* +Y04832* +X05339* +Y04848* +X05337Y04855* +X05333Y04861* +X05328Y04865* +X05321Y04866* +G37* +G36* +X05294D02* +X05286D01* +X0528Y04865* +X05274Y04861* +X0527Y04855* +X05269Y04848* +Y04832* +X05294* +Y04866* +G37* +G36* +X058Y04999D02* +X05746D01* +Y04944* +X05748Y04944* +X05761Y04948* +X05772Y04954* +X05782Y04962* +X0579Y04972* +X05796Y04984* +X058Y04996* +X058Y04999* +G37* +G36* +X05489Y05815D02* +X05434D01* +X05434Y05812* +X05438Y058* +X05444Y05789* +X05452Y05779* +X05462Y05771* +X05473Y05765* +X05486Y05761* +X05489Y05761* +Y05815* +G37* +G36* +X06036Y04999D02* +X05982D01* +Y04944* +X05985Y04944* +X05997Y04948* +X06008Y04954* +X06018Y04962* +X06026Y04972* +X06032Y04984* +X06036Y04996* +X06036Y04999* +G37* +G36* +X05962D02* +X05907D01* +X05908Y04996* +X05911Y04984* +X05918Y04972* +X05926Y04962* +X05936Y04954* +X05947Y04948* +X05959Y04944* +X05962Y04944* +Y04999* +G37* +G36* +X04387Y04152D02* +X04372D01* +X04363Y04151* +X04356Y04146* +X04352Y0414* +X04387* +Y04152* +G37* +G36* +X05593Y0391D02* +X05557D01* +X05558Y03908* +X05562Y03896* +X0557Y03887* +X05579Y03879* +X05591Y03875* +X05593Y03874* +Y0391* +G37* +G36* +X04921Y03894D02* +X04907D01* +Y03884* +X04908Y03877* +X04912Y03872* +X04918Y03868* +X04921Y03867* +Y03894* +G37* +G36* +X04448Y03881D02* +X04419D01* +Y03855* +X0443* +X04437Y03856* +X04443Y0386* +X04447Y03866* +X04448Y03873* +Y03881* +G37* +G36* +X05929Y03906D02* +X05913D01* +Y03881* +X05947* +Y03888* +X05946Y03895* +X05942Y039* +X05936Y03904* +X05929Y03906* +G37* +G36* +X04882Y03941D02* +Y039D01* +X04896* +Y03924* +X04895Y03931* +X04891Y03936* +X04885Y0394* +X04882Y03941* +G37* +G36* +X04862D02* +X04859Y0394D01* +X04853Y03936* +X04849Y03931* +X04848Y03924* +Y039* +X04862* +Y03941* +G37* +G36* +X04227Y03921D02* +X04215Y03919D01* +X04204Y03914* +X04202Y03913* +X04227Y03888* +X04252Y03913* +X04251Y03914* +X04239Y03919* +X04227Y03921* +G37* +G36* +X04896Y0388D02* +X04848D01* +Y03869* +X04846Y03869* +X04839Y03866* +X04833Y03861* +X04828Y03855* +X04825Y03848* +X04824Y03841* +Y03804* +X0492* +Y03841* +X04919Y03848* +X04916Y03855* +X04911Y03861* +X04905Y03866* +X04898Y03869* +X04896Y03869* +Y0388* +G37* +G36* +X04635Y03815D02* +X04617D01* +X0461Y03813* +X04604Y03809* +X04601Y03803* +X04599Y03796* +Y03789* +X04635* +Y03815* +G37* +G36* +X04768Y03808D02* +X04738D01* +Y03782* +X0475* +X04757Y03783* +X04763Y03787* +X04767Y03793* +X04768Y038* +Y03808* +G37* +G36* +X04227Y0386D02* +X04202Y03835D01* +X04204Y03833* +X04215Y03829* +X04227Y03827* +X04239Y03829* +X04251Y03833* +X04252Y03835* +X04227Y0386* +G37* +G36* +X04399Y03881D02* +X04369D01* +Y03873* +X0437Y03866* +X04374Y0386* +X0438Y03856* +X04387Y03855* +X04399* +Y03881* +G37* +G36* +X04266Y03899D02* +X04241Y03874D01* +X04266Y03849* +X04268Y0385* +X04272Y03862* +X04274Y03874* +X04272Y03886* +X04268Y03897* +X04266Y03899* +G37* +G36* +X04188D02* +X04187Y03897D01* +X04182Y03886* +X0418Y03874* +X04182Y03862* +X04187Y0385* +X04188Y03849* +X04213Y03874* +X04188Y03899* +G37* +G36* +X04627Y0407D02* +X04592D01* +Y04058* +X04608* +X04616Y04059* +X04624Y04064* +X04627Y0407* +G37* +G36* +X04572D02* +X04537D01* +X04541Y04064* +X04548Y04059* +X04557Y04058* +X04572* +Y0407* +G37* +G36* +X04442D02* +X04407D01* +Y04058* +X04423* +X04431Y04059* +X04438Y04064* +X04442Y0407* +G37* +G36* +X06519Y04209D02* +X06452D01* +X06447Y04208* +X06442Y04205* +X06439Y042* +X06438Y04195* +Y04165* +X06439Y0416* +X06442Y04155* +X06447Y04152* +X06452Y04151* +X06457* +X06459Y04146* +X06455Y04141* +X06452Y04133* +X06451Y04124* +X06452Y04114* +X06455Y04106* +X06461Y04099* +X06468Y04093* +X06477Y0409* +X06486Y04088* +X06495Y0409* +X06503Y04093* +X06511Y04099* +X06516Y04106* +X0652Y04114* +X06521Y04124* +X0652Y04133* +X06516Y04141* +X06512Y04146* +X06515Y04151* +X06519* +X06525Y04152* +X06529Y04155* +X06532Y0416* +X06533Y04165* +Y04195* +X06532Y042* +X06529Y04205* +X06525Y04208* +X06519Y04209* +G37* +G36* +X04442Y0412D02* +X04352D01* +X04356Y04114* +X04363Y04109* +X04372Y04108* +X04423* +X04431Y04109* +X04438Y04114* +X04442Y0412* +G37* +G36* +X06253Y04142D02* +X06245D01* +X06238Y0414* +X06233Y04136* +X06229Y04131* +X06227Y04124* +Y04106* +X06253* +Y04142* +G37* +G36* +X04423Y04102D02* +X04372D01* +X04363Y04101* +X04356Y04096* +X04352Y0409* +X04442* +X04438Y04096* +X04431Y04101* +X04423Y04102* +G37* +G36* +X06043Y03974D02* +X05975D01* +X0597Y03973* +X05966Y0397* +X05963Y03966* +X05962Y03961* +Y03944* +X05963Y03939* +X05966Y03935* +X0597Y03932* +X05975Y03931* +X06043* +X06048Y03932* +X06053Y03935* +X06056Y03939* +X06057Y03944* +Y03961* +X06056Y03966* +X06053Y0397* +X06048Y03973* +X06043Y03974* +G37* +G36* +X05593Y03965D02* +X05591Y03965D01* +X05579Y0396* +X0557Y03953* +X05562Y03943* +X05558Y03932* +X05557Y0393* +X05593* +Y03965* +G37* +G36* +X04921Y0394D02* +X04918Y03939D01* +X04912Y03936* +X04908Y0393* +X04907Y03923* +Y03914* +X04921* +Y0394* +G37* +G36* +X04608Y04052D02* +X04557D01* +X04548Y0405* +X04541Y04046* +X04536Y04038* +X04535Y0403* +X04536Y04022* +X04541Y04014* +X04548Y0401* +X04557Y04008* +X04608* +X04616Y0401* +X04623Y04014* +X04628Y04022* +X0463Y0403* +X04628Y04038* +X04623Y04046* +X04616Y0405* +X04608Y04052* +G37* +G36* +X04387Y0407D02* +X04352D01* +X04356Y04064* +X04363Y04059* +X04372Y04058* +X04387* +Y0407* +G37* +G36* +X04923Y04056D02* +X04893D01* +Y0403* +X04905* +X04912Y04031* +X04918Y04035* +X04921Y04041* +X04923Y04048* +Y04056* +G37* +G36* +X04796D02* +X04766D01* +Y04048* +X04767Y04041* +X04771Y04035* +X04777Y04031* +X04784Y0403* +X04796* +Y04056* +G37* +%LNunisolder52_back-3*% +%LPD*% +G54D10* +X05446Y04649D03* +X05332D03* +X06603Y04611D03* +X06489D03* +X06263Y04096D03* +X06149D03* +G54D11* +X06289Y03602D03* +Y03423D03* +X06486Y043D03* +Y04479D03* +Y04D03* +Y0418D03* +X06289Y03888D03* +Y03709D03* +G54D12* +X06535Y03512D03* +X06732Y04389D03* +Y0409D03* +X06535Y03799D03* +G54D13* +X04872Y03794D03* +G54D14* +X04872Y0389D03* +G54D15* +X04931Y03904D03* +X04813D03* +G54D16* +X05978Y04377D03* +X05895Y0434D03* +Y04415D03* +X05911Y04067D03* +Y04142D03* +X05828Y04105D03* +X05978Y04705D03* +X05895Y04668D03* +Y04743D03* +X05345Y04583D03* +Y04508D03* +X05427Y04546D03* +G54D17* +X05046Y04277D03* +X05136D03* +X05227D03* +G54D18* +X05136Y04038D03* +G54D19* +X06009Y03952D03* +G54D20* +X06009Y03902D03* +Y03852D03* +Y03802D03* +X06194Y03952D03* +Y03902D03* +Y03852D03* +Y03802D03* +X04397Y0418D03* +Y0413D03* +Y0408D03* +Y0403D03* +X04582Y0418D03* +Y0413D03* +Y0408D03* +Y0403D03* +G54D21* +X05534Y03318D03* +X05484D03* +X05434D03* +X05384D03* +X05334D03* +X05284D03* +X05234D03* +X05534Y03129D03* +X05484D03* +X05434D03* +X05384D03* +X05334D03* +X05284D03* +X05234D03* +G54D22* +X06074Y04154D03* +Y04014D03* +X05989Y04154D03* +Y04014D03* +X05903Y03871D03* +Y0401D03* +G54D23* +X06048Y03432D03* +Y03674D03* +G54D24* +X05842Y03432D03* +Y03674D03* +G54D25* +X04536Y03688D03* +Y03456D03* +G54D26* +X04829Y04553D03* +X04435D03* +G54D27* +X06423Y03188D03* +X06584D03* +X05415Y04183D03* +X05576D03* +Y04307D03* +X05415D03* +X0518Y04482D03* +X05018D03* +G54D28* +X04169Y0424D03* +Y04308D03* +G54D29* +X05603Y03185D03* +Y03259D03* +X04409Y03966D03* +Y03891D03* +X05818Y04729D03* +Y04654D03* +X0531Y04251D03* +Y04177D03* +X06259Y04641D03* +Y04716D03* +X06182Y04572D03* +Y04647D03* +X05456Y0449D03* +Y04415D03* +X06259Y04313D03* +Y04388D03* +X06182Y04245D03* +Y04319D03* +X05818Y04402D03* +Y04327D03* +X05152Y03113D03* +Y03187D03* +X04247Y04311D03* +Y04236D03* +X04325Y04311D03* +Y04236D03* +X05169Y03332D03* +Y03257D03* +X04806Y04141D03* +Y04066D03* +X04883Y04141D03* +Y04066D03* +X05969Y03023D03* +Y03098D03* +X04728Y03818D03* +Y03893D03* +G54D30* +X0575Y04003D03* +X05825D03* +X0575Y03926D03* +X05825D03* +X06051Y04807D03* +X05976D03* +X06031Y04479D03* +X05956D03* +X05812Y04476D03* +X05886D03* +X05831Y04803D03* +X05906D03* +X0589Y04604D03* +X05965D03* +X0589Y04276D03* +X05965D03* +X06187Y04012D03* +X06262D03* +X06528Y04694D03* +X06603D03* +X04497Y04245D03* +X04571D03* +X05368Y04404D03* +X05293D03* +X06623Y03282D03* +X06548D03* +G54D31* +X06118Y04647D03* +X06043D03* +X0608Y04564D03* +X047Y03348D03* +X04625D03* +X04662Y03265D03* +X0608Y04237D03* +X06043Y04319D03* +X06118D03* +G54D32* +X06187Y04397D03* +X06047D03* +X06187Y04725D03* +X06047D03* +X05064Y04374D03* +X05204D03* +X05444Y04737D03* +X05304D03* +X05304Y04822D03* +X05443D03* +X06121Y04801D03* +X0626D03* +X06128Y04475D03* +X06268D03* +G54D33* +X0469Y04211D03* +Y04049D03* +X06062Y03191D03* +Y0303D03* +G54D34* +X04645Y03893D03* +Y03779D03* +X04407Y03339D03* +Y03225D03* +G54D35* +X04992Y0479D03* +Y04613D03* +G54D36* +X05743Y04762D02* +X05783Y04803D01* +X05743Y04485D02* +Y04762D01* +Y04485D02* +X0575Y04478D01* +X05332Y04583D02* +Y04688D01* +X05437Y04508D02* +X05455Y0449D01* +X05351Y04508D02* +X05437D01* +X05503Y03592D02* +X05531Y0362D01* +X05173Y03106D02* +X05212Y03066D01* +X05173Y03106D02* +Y03115D01* +X05384Y03189D02* +X05397Y03202D01* +X05324Y03193D02* +X05388Y03257D01* +X05311Y03243D02* +X05334Y03266D01* +X05384Y03129D02* +Y03189D01* +X05388Y03257D02* +Y03318D01* +X05272Y03193D02* +X05324D01* +X05234Y03156D02* +X05272Y03193D01* +X05155Y03242D02* +X05173Y03259D01* +X05155Y03189D02* +Y03242D01* +X05531Y04137D02* +X05576Y04183D01* +X05531Y0362D02* +Y04137D01* +X05164Y04382D02* +X05204D01* +X05101Y04445D02* +X05164Y04382D01* +X05101Y04445D02* +Y04524D01* +X05012Y04613D02* +X05101Y04524D01* +X05485Y03592D02* +X05503D01* +X0543Y03382D02* +X05668Y0362D01* +X05437Y03348D02* +X05698Y03608D01* +X05569Y03437D02* +X05727Y03596D01* +X05569Y03273D02* +Y03437D01* +X05668Y0362D02* +Y04119D01* +X05698Y03608D02* +Y04106D01* +X05727Y03596D02* +Y03742D01* +X05521Y03382D02* +X05568D01* +X05484Y03345D02* +X05521Y03382D01* +X05484Y03311D02* +Y03345D01* +X05322Y03382D02* +X0543D01* +X05437Y03321D02* +Y03348D01* +X05284Y03345D02* +X05322Y03382D01* +X05284Y03318D02* +Y03345D01* +X05219Y04296D02* +Y04365D01* +X05231Y04251D02* +X0531D01* +X05698Y04106D02* +X05739Y04147D01* +X05727Y03742D02* +X05799Y03813D01* +X05668Y04119D02* +X05708Y04159D01* +X05799Y03813D02* +X0597D01* +X06187Y04012D02* +Y04031D01* +X05808Y02926D02* +X05904D01* +X05789Y02944D02* +X05808Y02926D01* +X05592Y02944D02* +X05789D01* +X05357Y02757D02* +X05974D01* +X05292Y02822D02* +X05357Y02757D01* +X05292Y02822D02* +Y02847D01* +X05192Y02946D02* +Y02947D01* +X05057Y0281D02* +X05192Y02946D01* +X0487Y0281D02* +X05057D01* +X05442Y02897D02* +Y02967D01* +X05472Y02996* +X05392Y02847D02* +X05442Y02897D01* +X05592Y02944D02* +Y02947D01* +X05904Y02926D02* +X0596Y0287D01* +Y02851D02* +Y0287D01* +X05596Y02851D02* +X0586D01* +X05789Y03402D02* +Y03522D01* +X05708Y03322D02* +X05789Y03402D01* +X05819Y03651D02* +X05842Y03674D01* +X05819Y03552D02* +Y03651D01* +X05789Y03522D02* +X05819Y03552D01* +X06011Y04288D02* +X06062Y04237D01* +X06011Y04288D02* +Y04328D01* +X06062Y04237D02* +X0608D01* +X05739Y04147D02* +Y04338D01* +X05708Y04159D02* +Y04373D01* +X05304Y04716D02* +X05332Y04688D01* +X05304Y04716D02* +Y04734D01* +X05708Y04373D02* +X05811Y04476D01* +X05974Y02757D02* +X06064Y02847D01* +X05978Y04362D02* +X06011Y04328D01* +X05978Y04362D02* +Y04377D01* +X05739Y04338D02* +X05758Y04358D01* +X05811Y04476D02* +X05812D01* +X05234Y03122D02* +Y03156D01* +X0481Y0287D02* +X0486Y0292D01* +Y0297* +X04806Y04067D02* +X04883D01* +X04641Y03779D02* +X04689D01* +X04247Y04236D02* +X04325D01* +X0481Y0287D02* +X0487Y0281D01* +X06289Y03543D02* +Y03602D01* +X06194Y03802D02* +X06265D01* +X06194Y03902D02* +X06234D01* +X06248Y03888* +X06289* +X06009Y03902D02* +X0603D01* +X06067Y03866* +X0603Y03802D02* +X06067Y03839D01* +X06009Y03802D02* +X0603D01* +X06067Y03839D02* +Y03866D01* +X05783Y04803D02* +X05831D01* +X05895Y04743D02* +Y04792D01* +X05906Y04803* +X05835Y04743D02* +X05895D01* +X05821Y04729D02* +X05835Y04743D01* +X05976Y04807D02* +X05978Y04805D01* +Y04705D02* +Y04805D01* +X06181Y04725D02* +X06187D01* +X06118Y04662D02* +X06181Y04725D01* +X06118Y04647D02* +Y04662D01* +X06043Y04647D02* +Y04721D01* +X06051Y04807D02* +X06115D01* +X06121Y04801* +X06181Y04741* +X05978Y04673D02* +Y04705D01* +Y04673D02* +X06011Y04639D01* +X06031Y04479D02* +X06035Y04475D01* +X06128* +X05831Y04415D02* +X05895D01* +X05886Y04417D02* +Y04476D01* +X05956Y04479D02* +X05978Y04457D01* +Y04377D02* +Y04457D01* +X0597Y03813D02* +X05981Y03802D01* +X06009* +X06181Y04397D02* +X06187D01* +X06118Y04334D02* +X06181Y04397D01* +X06118Y04319D02* +Y04334D01* +X06043Y04319D02* +Y04393D01* +X06128Y04465D02* +Y04475D01* +Y04465D02* +X06187Y04407D01* +Y04397D02* +Y04407D01* +X05798Y04D02* +Y04105D01* +X05486Y03129D02* +X05536D01* +X05334Y03266D02* +Y03311D01* +X05533Y03283D02* +Y03313D01* +X04409Y03966D02* +Y0403D01* +X0552Y03224D02* +X05569Y03273D01* +X05384Y03254D02* +Y03311D01* +Y03254D02* +X05505D01* +X05533Y03283* +X05483Y03224D02* +X0552D01* +X05212Y03066D02* +X05273D01* +X05284Y03055D02* +Y03129D01* +X05273Y03066D02* +X05284Y03055D01* +X05392Y02947* +X06062Y04564D02* +X0608D01* +X06011Y04615D02* +Y04639D01* +Y04615D02* +X06062Y04564D01* +X04689Y03779D02* +X04716Y03752D01* +X04992Y04613D02* +X05012D01* +X06182Y04572D02* +X06263D01* +Y04644* +X06182Y04245D02* +X06245D01* +X06246Y04245* +X06259* +Y04322* +X05412Y03044D02* +Y03081D01* +X05434Y03103* +Y03175* +X05483Y03224* +X05472Y02996D02* +X05481D01* +X05708Y03159D02* +Y03322D01* +X05606Y03056D02* +X05708Y03159D01* +X0554Y03056D02* +X05606D01* +X05481Y02996D02* +X0554Y03056D01* +G54D37* +X05895Y04728D02* +X05946Y04676D01* +Y04623D02* +Y04676D01* +Y04623D02* +X05965Y04604D01* +X05895Y04728D02* +Y04743D01* +G54D38* +X054Y04305D02* +X05415D01* +X0538Y04324D02* +X054Y04305D01* +X0538Y04324D02* +Y04397D01* +X05398Y04415* +X05456D02* +X05463D01* +X05398D02* +X05456D01* +X05435Y04637D02* +X05446Y04649D01* +X05435Y04546D02* +Y04637D01* +X05315Y04546D02* +X05435D01* +X05309Y04552D02* +X05315Y04546D01* +X05221Y04552D02* +X05309D01* +X06607Y047D02* +X06677D01* +X05163Y03334D02* +X05225D01* +X05117Y03288D02* +X05163Y03334D01* +X05117Y0325D02* +Y03288D01* +X04948Y03081D02* +X05117Y0325D01* +X04723Y03081D02* +X04948D01* +X04625Y03348D02* +Y03365D01* +X05976Y03852D02* +X06009D01* +X05958Y03871D02* +X05976Y03852D01* +X05903Y03871D02* +X05958D01* +X06187Y04012D02* +Y04036D01* +X06149Y04074D02* +X06187Y04036D01* +X06149Y04074D02* +Y04096D01* +X06074Y04021D02* +X06149Y04096D01* +X06074Y04014D02* +Y04021D01* +X06134Y03967D02* +X06181Y04013D01* +X05199Y04573D02* +X05221Y04552D01* +X05189Y04477D02* +Y04596D01* +X0661Y04612D02* +X06679D01* +X0466Y03018D02* +X04723Y03081D01* +X0466Y0297D02* +Y03018D01* +X05225Y03334D02* +X05237Y03321D01* +X06486Y04429D02* +Y04479D01* +Y04124D02* +Y0418D01* +X0443Y0418D02* +X04496Y04246D01* +X05821Y04654D02* +X05835Y04668D01* +X05895* +Y04617D02* +Y04668D01* +X05831Y0434D02* +X05895D01* +X0589Y04276D02* +Y04335D01* +X0617Y03852D02* +X06194D01* +X06134Y03889D02* +X0617Y03852D01* +X06134Y03889D02* +Y03967D01* +X04536Y03454D02* +X04625Y03365D01* +X05834Y03929D02* +X05915Y04011D01* +X05892Y04142D02* +X06056D01* +X05911Y04008D02* +X05965D01* +X05911D02* +Y04055D01* +X04716Y03818D02* +X04728D01* +X04705Y03828D02* +X04716Y03818D01* +X0462Y03828D02* +X04705D01* +X05444Y04737D02* +Y04822D01* +G54D39* +X04662Y03445D02* +Y03481D01* +X0441Y03699D02* +X04662Y03698D01* +X0441Y03663D02* +Y03699D01* +Y03663D02* +X04662Y03594D01* +Y03698* +X0441Y03663D02* +X04661D01* +X04556Y03633D02* +X04662D01* +X0441Y03511D02* +X04526D01* +X0441Y03446D02* +Y0355D01* +Y03481D02* +X04662D01* +X0441Y03446D02* +X04662Y03445D01* +X0441Y0355D02* +X04662Y03481D01* +X05698Y05954D02* +X05827D01* +X05499Y05825D02* +Y05915D01* +Y05728D02* +Y05825D01* +X0558* +X0543D02* +X05499D01* +X05974Y04881D02* +Y05032D01* +X05738Y04881D02* +Y05032D01* +X05903Y05009D02* +X06054D01* +X05667D02* +X05817D01* +X05767Y05895D02* +Y06023D01* +X06259Y04723D02* +X06357D01* +X0626Y04801D02* +X0634D01* +X04512Y03814D02* +X0459Y03892D01* +X04512Y03693D02* +X04517Y03688D01* +X04512Y03693D02* +Y03814D01* +X0459Y03892D02* +X04662D01* +X04982Y03498D02* +Y04143D01* +Y04231D02* +X05064Y04313D01* +X04982Y04146D02* +Y04231D01* +X05064Y04313D02* +Y04413D01* +X05022Y04455D02* +X05064Y04413D01* +X05022Y04455D02* +Y04481D01* +X05136Y04061D02* +Y043D01* +X04982Y03593D02* +X05186D01* +X0575Y03865D02* +Y04001D01* +X0549Y02847D02* +Y02947D01* +X05842Y03392D02* +Y03432D01* +X05753Y03303D02* +X05842Y03392D01* +X04676Y03893D02* +X04802D01* +X047Y03893D02* +Y04015D01* +X0461Y0287D02* +Y02949D01* +X04523Y0297D02* +X0466D01* +X0461Y0292D02* +X0466Y0297D01* +X04151Y03342D02* +X04523Y0297D01* +X04056Y03572D02* +Y03612D01* +Y03572D02* +X04151Y03477D01* +Y03342D02* +Y03477D01* +X06268Y04475D02* +X06401D01* +X06259Y04397D02* +X06381D01* +X06149Y03137D02* +X06255Y03031D01* +X05969Y03023D02* +X06047D01* +X06255Y02814* +X04407Y03339D02* +Y03443D01* +X0441Y03446* +X04273Y03447D02* +X04496D01* +X05492Y02947D02* +X05501D01* +X05973Y03098D02* +X06012Y03137D01* +X06149* +X04872Y03667D02* +Y03794D01* +X05624Y03011D02* +X05753Y0314D01* +Y03303* +X05501Y02947D02* +X05565Y03011D01* +X05624* +G54D40* +X06209Y05014D02* +X06444D01* +Y05913D02* +X06486Y05954D01* +X06444Y05751D02* +Y05913D01* +X04079Y03634D02* +Y04293D01* +X04123Y04338* +X04814Y04341D02* +Y04532D01* +X04421Y04382D02* +Y04504D01* +X04056Y03612D02* +X04079Y03634D01* +X04377Y04338D02* +X04421Y04382D01* +X04123Y04338D02* +X04377D01* +X04691Y04218D02* +X04814Y04341D01* +X04603Y04218D02* +X04691D01* +X05871Y05615D02* +X06308D01* +X06444Y05751* +X05736Y0575D02* +X05871Y05615D01* +X05572Y04199D02* +Y05143D01* +G54D41* +X05984Y05954D02* +X06269D01* +X05972Y0575D02* +Y05942D01* +X05984Y05954* +X06269Y05813D02* +Y05954D01* +X06208Y05752D02* +X06269Y05813D01* +X05972Y0575D02* +X06206D01* +X06208Y05752* +G54D42* +X0415Y04221D02* +X04165Y04236D01* +X0415Y04131D02* +Y04221D01* +X04251Y0403D02* +X04409D01* +X0415Y04131D02* +X04251Y0403D01* +G54D43* +X04747Y04143D02* +X04982D01* +X04735Y04131D02* +X04747Y04143D01* +X04565Y04131D02* +X04735D01* +G54D44* +X05911Y04384D02* +Y04413D01* +X0606Y0428D02* +X06097D01* +X06043Y04297D02* +X0606Y0428D01* +X06043Y04297D02* +Y04319D01* +X06097Y0428D02* +X061Y04276D01* +X06135* +X06177Y04319* +X06182* +X06135Y04604D02* +X06177Y04647D01* +X06043Y04393D02* +X06047Y04397D01* +X05948Y04293D02* +X05965Y04276D01* +X05948Y04293D02* +Y04347D01* +X05911Y04384D02* +X05948Y04347D01* +X06043Y04624D02* +Y04647D01* +X06097Y04607D02* +X061Y04604D01* +X06135* +X06043Y04624D02* +X06059Y04607D01* +X06097* +G54D45* +X06567Y03095D02* +X06791Y03319D01* +Y04093* +X06715Y04066D02* +X06776Y04004D01* +G54D46* +X06262Y03951D02* +Y04176D01* +Y03951D02* +X06267Y03947D01* +G54D47* +X06771Y05448D02* +Y05629D01* +Y04839D02* +Y05056D01* +Y0506* +X06642Y05185D02* +X06771Y05056D01* +X05518Y05103D02* +X05601Y05185D01* +X06642* +G54D48* +X06043Y04647D02* +D01* +Y04721D02* +X06047Y04725D01* +X06175Y04647D02* +X06177D01* +X06182* +G54D49* +X04535Y0322D02* +X04571D01* +X04898D02* +X04935D01* +G54D50* +X06117Y05851D03* +G54D51* +X06535Y034D03* +G54D52* +X05264Y03922D03* +G54D53* +X044Y04104D03* +G54D54* +X04571Y04074D03* +G54D55* +X04056Y03612D03* +X04273D03* +Y03447D03* +X04056D03* +X06486Y05954D03* +X06269D03* +X05767D03* +X05984D03* +G54D56* +X0461Y0287D03* +X0466Y0297D03* +X0471Y0287D03* +X0476Y0297D03* +X0481Y0287D03* +X0486Y0297D03* +X0586Y02851D03* +X0596D03* +G54D57* +X04535Y0322D03* +X04935D03* +G54D58* +X06421Y02814D03* +Y03031D03* +X06255D03* +Y02814D03* +G54D59* +X06771Y05391D03* +Y05657D03* +Y04805D03* +Y05071D03* +G54D60* +X05178Y04614D03* +G54D61* +X05178Y04692D03* +G54D62* +X05406Y0392D03* +X0499Y03498D03* +X05186Y03582D03* +G54D63* +X05603Y0392D03* +X04793Y03498D03* +X05382Y03582D03* +X04227Y03874D03* +G54D64* +X05499Y05825D03* +X06208Y05752D03* +X06444Y05751D03* +X05736Y05009D03* +X05972D03* +G54D65* +X05499Y05083D03* +X06208Y0501D03* +X06444Y0501D03* +X05736Y0575D03* +X05972D03* +G54D66* +X0606Y02851D03* +G54D67* +X05192Y02847D03* +G54D68* +X05192Y02947D03* +X05292Y02847D03* +Y02947D03* +X05392Y02847D03* +Y02947D03* +X05492Y02847D03* +Y02947D03* +X05592Y02847D03* +Y02947D03* +G54D69* +X04114Y02874D03* +X06751D03* +Y05925D03* +X04114Y04704D03* +G54D70* +X04088Y04013D03* +G54D71* +X0533Y04342D03* +X04529Y04421D03* +X0454Y04629D03* +X05366Y05044D03* +X06564Y06043D03* +X06377D03* +X0683Y05246D03* +X05679Y04744D03* +X0625Y04872D03* +X05856Y04881D03* +X05641Y05657D03* +X05665Y0598D03* +X05848Y0587D03* +X05905Y06055D03* +X05748D03* +X0559Y05905D03* +X05433D03* +X05511Y05984D03* +X0559Y06055D03* +X05433D03* +X05362Y05984D03* +Y05826D03* +Y05669D03* +Y05196D03* +Y05354D03* +Y05511D03* +X05433Y05275D03* +X05511Y05354D03* +X05433Y05433D03* +X05511Y05511D03* +X05433Y0559D03* +Y05748D03* +X0559D03* +X05511Y05669D03* +X0559Y0559D03* +X05748D03* +X05669Y05511D03* +Y05354D03* +X05826Y05511D03* +Y05354D03* +X05984Y05511D03* +Y05354D03* +X0559Y05433D03* +X05748D03* +X05905D03* +X06062D03* +X06614Y05669D03* +Y05511D03* +X06535Y05433D03* +Y0559D03* +X06456Y05511D03* +Y05354D03* +X06377Y05433D03* +X06299Y05511D03* +Y05354D03* +X0622Y05433D03* +X06141Y05354D03* +Y05511D03* +X04572Y03785D03* +X04796Y03822D03* +X05472Y03053D03* +X05397Y03202D03* +X05311Y03243D03* +X05578Y03788D03* +X05487Y0425D03* +X05098Y03382D03* +X05285Y0349D03* +X05485Y03592D03* +X0551Y03534D03* +X05623Y03788D03* +X05598Y04023D03* +X05774Y03578D03* +X0575Y03865D03* +X05401Y03433D03* +X05442Y02804D03* +X05551Y02896D03* +X05243Y02905D03* +X05343Y02896D03* +X05258Y03008D03* +X05351Y03053D03* +X05412Y03044D03* +X05765Y02806D03* +X06157Y032D03* +X06189Y0325D03* +X05846Y03307D03* +X05816Y03257D03* +X05846Y03208D03* +X05875Y03257D03* +X06072Y04089D03* +X05218Y04837D03* +X05806Y04152D03* +X05905Y03208D03* +X05964D03* +X05994Y03257D03* +X05068Y02992D03* +X05994Y03553D03* +X06053D03* +X06112D03* +X05232Y02757D03* +X06084Y0395D03* +X05659Y04881D03* +X04317Y03767D03* +X03996Y04507D03* +X04133Y04429D03* +X0433Y04822D03* +X04899Y04821D03* +X04527Y04822D03* +X04724D03* +X04303Y02749D03* +X06073Y02757D03* +X06003Y02919D03* +X05767Y02898D03* +X05885Y0308D03* +X05935Y03257D03* +X05592Y03641D03* +X05257Y03589D03* +X05167Y03502D03* +X05207Y03404D03* +X06855Y04684D03* +X06063Y04872D03* +X0524Y03237D03* +X04953Y02985D03* +X04907Y02878D03* +X05045Y02884D03* +X0508Y03127D03* +X05179Y03025D03* +X0574Y03423D03* +X05589Y03115D03* +X05658Y04435D03* +X05661Y04177D03* +X05754Y04355D03* +X05679Y04586D03* +X05905Y03307D03* +X05875Y03553D03* +X06486Y04124D03* +Y04429D03* +X06263Y04576D03* +X0685Y04527D03* +X06614D03* +X06673D03* +X06732D03* +X06791D03* +X06417Y03937D03* +X06653D03* +X06594D03* +X06535D03* +X06476D03* +X06417Y03661D03* +X06476D03* +X06535D03* +X06594D03* +X06653D03* +X0685Y04251D03* +X06791D03* +X06732D03* +X06673D03* +X06614D03* +X0442Y0379D03* +X04802Y03967D03* +X04763Y04007D03* +X04324Y04449D03* +X04232Y04527D03* +X04392Y04229D03* +X05063Y0353D03* +X05487Y04565D03* +X05114Y04581D03* +X05269Y04603D03* +X04902Y0275D03* +X04305Y03364D03* +X04524Y02749D03* +X04384Y0299D03* +X04015Y03129D03* +X04186Y03181D03* +X0404Y03314D03* +X03985Y03776D03* +X03986Y03982D03* +Y04188D03* +X04822Y04724D03* +X04625D03* +X04429D03* +X0433Y04625D03* +X04724D03* +X04625Y04527D03* +X04724Y04429D03* +X04645Y04311D03* +X04932Y0453D03* +X04844Y04206D03* +X049Y04361D03* +X0499Y03347D03* +X04787Y03342D03* +X04515Y03337D03* +X0433Y03937D03* +X0449Y04161D03* +X04806Y03231D03* +X0453Y02906D03* +X04678Y0317D03* +X04173Y03699D03* +X04487Y04316D03* +X04015Y0435D03* +X04327Y04148D03* +X04223Y04134D03* +X05267Y04503D03* +X04477Y03964D03* +X04543D03* +X04608D03* +X0449Y04094D03* +X04178Y04023D03* +X0488Y03444D03* +X04742Y03593D03* +X06259Y03307D03* +X062D03* +X06141D03* +X06082D03* +X06023D03* +X05964D03* +X05935Y03553D03* +X06269Y03799D03* +X06289Y03543D03* +X0575Y04478D03* +X05922Y03937D03* +X05828Y0386D03* +X06102Y03799D03* +X05773Y03723D03* +X05619Y03412D03* +X05788Y04593D03* +X05838Y04541D03* +X06195Y04476D03* +X05837Y0422D03* +X06344Y03808D03* +X0613Y03251D03* +X0611Y04402D03* +X06114Y0473D03* +X05856Y05039D03* +X04491Y04026D03* +X06692Y04685D03* +Y04606D03* +X06771Y04685D03* +Y04606D03* +X0685D03* +X04841Y04004D03* +X04921Y04005D03* +X04882Y03966D03* +X04566Y04316D03* +X04321Y04078D03* +X04819Y0369D03* +X04921Y03692D03* +X05377Y04736D03* +X05349Y04896D03* +X0548Y04898D03* +X04992Y04701D03* +X04926Y04261D03* +X06262Y04168D03* +X06263Y0425D03* +X05989Y04087D03* +X04716Y03756D03* +X06306Y03951D03* +M02* \ No newline at end of file diff --git a/hardware/gerber/unisolder52_back.gto b/hardware/gerber/unisolder52_back.gto new file mode 100644 index 0000000..00eda7b --- /dev/null +++ b/hardware/gerber/unisolder52_back.gto @@ -0,0 +1,5375 @@ +%FSTAX23Y23*% +%MOIN*% +%SFA1B1*% + +%IPPOS*% +%ADD73C,0.009840*% +%ADD74C,0.007870*% +%ADD75C,0.010000*% +%ADD76C,0.008000*% +%ADD77C,0.005910*% +%ADD78C,0.005910*% +%ADD79R,0.220470X0.031500*% +%LNunisolder52_back-1*% +%LPD*% +G36* +X04691Y03051D02* +X04673D01* +X04674Y03058* +X04674Y03058* +X04673Y03057* +X04672Y03056* +X04671Y03055* +X04669Y03054* +X04668Y03053* +X04666Y03052* +X04664Y03051* +X04664Y03051* +X04663Y03051* +X04662Y0305* +X04661Y0305* +X04659Y0305* +X04657Y03049* +X04655Y03049* +X04653Y03049* +X04652* +X04651Y03049* +X0465Y03049* +X04649Y03049* +X04647Y0305* +X04644Y03051* +X04642Y03051* +X04641Y03052* +X04639Y03053* +X04638Y03054* +X04637Y03055* +X04635Y03056* +X04635Y03056* +X04635Y03057* +X04635Y03057* +X04634Y03058* +X04634Y03058* +X04633Y03059* +X04633Y03061* +X04632Y03062* +X04631Y03063* +X04631Y03065* +X0463Y03067* +X0463Y03069* +X04629Y03071* +X04629Y03073* +X04629Y03076* +X04629Y03078* +Y03078* +Y03079* +X04629Y0308* +Y03081* +X04629Y03082* +X04629Y03084* +X04629Y03086* +X0463Y03088* +X0463Y03091* +X04631Y03093* +X04632Y03095* +X04633Y03098* +X04634Y03101* +X04635Y03103* +X04637Y03106* +X04638Y03108* +X04638Y03109* +X04639Y03109* +X04639Y0311* +X0464Y03111* +X04641Y03112* +X04642Y03113* +X04643Y03114* +X04645Y03115* +X04647Y03117* +X04649Y03118* +X04651Y03119* +X04653Y0312* +X04655Y03121* +X04658Y03121* +X04661Y03122* +X04664Y03122* +X04664* +X04665Y03122* +X04666* +X04667Y03122* +X04668Y03121* +X0467Y03121* +X04672Y03121* +X04673Y0312* +X04675Y03119* +X04677Y03118* +X04678Y03117* +X0468Y03116* +X04682Y03115* +X04683Y03113* +X04685Y03111* +X04693Y03147* +X04712* +X04691Y03051* +G37* +G36* +X04834Y03122D02* +X04835Y03122D01* +X04836Y03122* +X04838Y03121* +X04839Y03121* +X04841Y0312* +X04834Y03105* +X04834* +X04833Y03105* +X04833Y03105* +X04832Y03105* +X04831Y03105* +X04831Y03105* +X04828Y03106* +X04828* +X04827Y03105* +X04825Y03105* +X04824Y03105* +X04822Y03104* +X0482Y03103* +X04819Y03102* +X04818Y03102* +X04818Y03101* +X04817Y031* +X04816Y03099* +X04814Y03098* +X04813Y03096* +X04812Y03094* +X04811Y03092* +Y03092* +X04811Y03092* +X0481Y03091* +X0481Y03091* +X0481Y0309* +X0481Y03089* +X04809Y03088* +X04809Y03087* +X04808Y03086* +X04808Y03084* +X04808Y03083* +X04807Y03081* +X04807Y03079* +X04806Y03077* +X04806Y03075* +X04805Y03072* +X04801Y03051* +X04782* +X04796Y0312* +X04814* +X04811Y03107* +X04811Y03107* +X04812Y03108* +X04812Y03108* +X04813Y03109* +X04814Y0311* +X04815Y03112* +X04816Y03113* +X04817Y03115* +X04819Y03116* +X04821Y03117* +X04822Y03119* +X04824Y0312* +X04826Y03121* +X04828Y03121* +X0483Y03122* +X04832Y03122* +X04833* +X04834Y03122* +G37* +G36* +X04469Y03148D02* +X04471Y03148D01* +X04472Y03148* +X04474Y03148* +X04476Y03148* +X0448Y03147* +X04482Y03146* +X04485Y03145* +X04487Y03144* +X04489Y03143* +X04491Y03142* +X04493Y03141* +X04493Y0314* +X04493Y0314* +X04493Y0314* +X04494Y03139* +X04495Y03138* +X04496Y03137* +X04496Y03136* +X04497Y03135* +X04498Y03134* +X04499Y03132* +X045Y0313* +X04501Y03128* +X04501Y03126* +X04502Y03124* +X04503Y03122* +X04503Y03119* +X04484Y03119* +Y03119* +Y03119* +X04484Y03119* +Y0312* +X04483Y03121* +X04483Y03123* +X04482Y03124* +X04481Y03126* +X0448Y03128* +X04479Y03129* +X04479Y03129* +X04478Y0313* +X04477Y0313* +X04476Y03131* +X04474Y03132* +X04472Y03132* +X04469Y03133* +X04466Y03133* +X04465* +X04463Y03133* +X04462Y03133* +X0446Y03132* +X04458Y03132* +X04456Y03131* +X04455Y0313* +X04454Y0313* +X04454Y03129* +X04453Y03129* +X04453Y03128* +X04452Y03127* +X04452Y03126* +X04451Y03124* +X04451Y03123* +Y03123* +Y03122* +X04451Y03121* +X04451Y0312* +X04452Y03119* +X04452Y03118* +X04453Y03117* +X04454Y03116* +X04454Y03116* +X04455Y03115* +X04456Y03115* +X04456Y03114* +X04457Y03114* +X04458Y03113* +X04459Y03113* +X0446Y03112* +X04462Y03111* +X04463Y03111* +X04465Y0311* +X04466Y03109* +X04468Y03108* +X04469Y03108* +X04469Y03108* +X0447Y03108* +X04471Y03107* +X04472Y03107* +X04474Y03106* +X04476Y03105* +X04477Y03104* +X04481Y03102* +X04484Y031* +X04486Y03099* +X04487Y03098* +X04489Y03098* +X0449Y03097* +X0449Y03097* +X0449Y03096* +X0449Y03096* +X04491Y03095* +X04491Y03095* +X04492Y03094* +X04492Y03093* +X04493Y03092* +X04494Y0309* +X04495Y03087* +X04496Y03083* +X04496Y03082* +X04496Y0308* +Y0308* +Y03079* +X04496Y03078* +Y03078* +X04496Y03076* +X04496Y03075* +X04496Y03074* +X04495Y03072* +X04495Y03071* +X04494Y03069* +X04493Y03067* +X04492Y03065* +X04491Y03063* +X0449Y03061* +X04488Y0306* +X04486Y03058* +X04486Y03058* +X04486Y03058* +X04485Y03057* +X04484Y03057* +X04483Y03056* +X04482Y03055* +X04481Y03054* +X04479Y03053* +X04477Y03053* +X04475Y03052* +X04473Y03051* +X0447Y0305* +X04468Y0305* +X04465Y03049* +X04462Y03049* +X04458Y03049* +X04457* +X04456Y03049* +X04455* +X04454Y03049* +X04453Y03049* +X04451Y03049* +X04448Y0305* +X04444Y03051* +X0444Y03052* +X04437Y03053* +X04437* +X04436Y03053* +X04436Y03053* +X04435Y03054* +X04435Y03054* +X04434Y03055* +X04432Y03056* +X0443Y03058* +X04428Y0306* +X04426Y03062* +X04425Y03063* +X04424Y03065* +Y03065* +X04424Y03065* +X04424Y03065* +X04423Y03066* +X04423Y03067* +X04423Y03067* +X04422Y03068* +X04422Y0307* +X04421Y03072* +X04421Y03075* +X04421Y03078* +Y03082* +X04439Y03083* +Y03083* +Y03082* +Y03082* +X0444Y03081* +X0444Y0308* +X0444Y03078* +X0444Y03076* +X04441Y03074* +X04442Y03072* +X04442Y03071* +X04442Y0307* +X04443Y0307* +X04443Y0307* +X04444Y03069* +X04444Y03069* +X04445Y03068* +X04446Y03068* +X04447Y03067* +X04448Y03067* +X0445Y03067* +X04451Y03066* +X04453Y03066* +X04454Y03066* +X04456Y03065* +X0446* +X04461Y03066* +X04462* +X04464Y03066* +X04466Y03066* +X04469Y03067* +X04471Y03068* +X04472Y03068* +X04473Y03069* +X04473Y03069* +X04473Y03069* +X04474Y0307* +X04475Y03071* +X04476Y03072* +X04476Y03074* +X04477Y03076* +X04477Y03077* +Y03078* +Y03078* +X04477Y03079* +X04476Y0308* +X04476Y03081* +X04475Y03082* +X04475Y03083* +X04473Y03085* +X04473Y03085* +X04473Y03085* +X04472Y03085* +X04471Y03086* +X04471Y03086* +X0447Y03087* +X04469Y03087* +X04468Y03088* +X04466Y03088* +X04465Y03089* +X04463Y0309* +X04462Y03091* +X0446Y03092* +X04459* +X04459Y03092* +X04459Y03092* +X04458Y03092* +X04457Y03093* +X04456Y03093* +X04453Y03094* +X04451Y03096* +X04448Y03097* +X04445Y03098* +X04444Y03099* +X04443Y031* +X04443Y031* +X04442Y031* +X04441Y03101* +X0444Y03102* +X04439Y03103* +X04438Y03105* +X04436Y03106* +X04435Y03108* +X04435Y03108* +X04435Y03109* +X04434Y0311* +X04434Y03112* +X04433Y03113* +X04433Y03115* +X04432Y03118* +X04432Y0312* +Y0312* +Y03121* +Y03121* +X04432Y03122* +X04432Y03123* +X04433Y03125* +X04433Y03126* +X04433Y03127* +X04434Y03129* +X04434Y03131* +X04435Y03132* +X04436Y03134* +X04437Y03136* +X04438Y03137* +X04439Y03139* +X04441Y0314* +X04441Y03141* +X04441Y03141* +X04442Y03141* +X04443Y03142* +X04443Y03142* +X04445Y03143* +X04446Y03144* +X04447Y03145* +X04449Y03145* +X04451Y03146* +X04453Y03147* +X04455Y03147* +X04458Y03148* +X0446Y03148* +X04463Y03148* +X04466Y03149* +X04468* +X04469Y03148* +G37* +G36* +X04355Y03122D02* +X04356D01* +X04357Y03122* +X04359Y03121* +X04361Y03121* +X04363Y0312* +X04366Y03119* +X04368Y03117* +X04368Y03117* +X04368Y03116* +X04369Y03115* +X0437Y03114* +X04371Y03112* +X04372Y03109* +X04372Y03107* +X04373Y03104* +Y03104* +Y03103* +X04372Y03102* +X04372Y03101* +X04372Y031* +X04372Y03099* +X04372Y03098* +X04372Y03096* +X04371Y03095* +X04371Y03093* +X04371Y03092* +X0437Y0309* +X04362Y03051* +X04343* +X04352Y0309* +Y0309* +X04352Y0309* +Y03091* +X04352Y03091* +X04352Y03093* +X04352Y03095* +X04353Y03097* +X04353Y03098* +X04353Y031* +X04353Y031* +Y03101* +Y03101* +Y03101* +X04353Y03102* +X04353Y03103* +X04353Y03104* +X04353Y03105* +X04352Y03106* +X04351Y03106* +X04351Y03107* +X04351Y03107* +X0435Y03107* +X0435Y03108* +X04349Y03108* +X04348Y03108* +X04347Y03108* +X04345Y03109* +X04345* +X04344Y03108* +X04343Y03108* +X04341Y03108* +X0434Y03107* +X04338Y03106* +X04336Y03105* +X04336Y03105* +X04335Y03104* +X04334Y03104* +X04333Y03103* +X04332Y03101* +X0433Y031* +X04329Y03098* +X04328Y03096* +X04328Y03096* +X04328Y03095* +X04327Y03095* +X04327Y03094* +X04327Y03093* +X04327Y03092* +X04326Y03091* +X04326Y0309* +X04325Y03089* +X04325Y03087* +X04325Y03085* +X04324Y03084* +X04324Y03081* +X04323Y03079* +X04317Y03051* +X04298* +X04313Y0312* +X04331* +X04329Y03111* +X04329Y03111* +X04329Y03111* +X0433Y03112* +X0433Y03112* +X04332Y03113* +X04333Y03114* +X04335Y03116* +X04337Y03117* +X04339Y03118* +X04342Y0312* +X04342* +X04342Y0312* +X04343Y0312* +X04344Y0312* +X04345Y03121* +X04347Y03121* +X04349Y03122* +X04352Y03122* +X04354Y03122* +X04355* +X04355Y03122* +G37* +G36* +X04291Y03092D02* +Y03092D01* +X0429Y03092* +X0429Y03091* +X0429Y0309* +X0429Y03088* +X04289Y03087* +X04289Y03085* +X04288Y03083* +X04287Y03079* +X04286Y03075* +X04284Y03071* +X04283Y03069* +X04282Y03068* +Y03068* +X04282Y03067* +X04282Y03067* +X04281Y03066* +X04281Y03066* +X0428Y03065* +X04279Y03063* +X04277Y03061* +X04274Y03059* +X04271Y03056* +X04268Y03054* +X04268* +X04268Y03054* +X04267Y03054* +X04266Y03053* +X04265Y03053* +X04264Y03053* +X04263Y03052* +X04261Y03052* +X0426Y03051* +X04258Y03051* +X04256Y0305* +X04254Y0305* +X04252Y03049* +X04249Y03049* +X04247Y03049* +X04244Y03049* +X04242* +X04241Y03049* +X0424Y03049* +X04238Y03049* +X04236Y0305* +X04234Y0305* +X0423Y03051* +X04228Y03052* +X04225Y03052* +X04223Y03053* +X04221Y03054* +X04219Y03056* +X04217Y03057* +X04217Y03057* +X04217Y03058* +X04216Y03058* +X04216Y03059* +X04215Y03059* +X04214Y0306* +X04214Y03062* +X04213Y03063* +X04212Y03064* +X04211Y03066* +X0421Y03068* +X0421Y0307* +X04209Y03072* +X04208Y03074* +X04208Y03076* +X04208Y03078* +Y03078* +Y03079* +Y03079* +X04208Y0308* +Y03081* +X04208Y03082* +X04209Y03084* +Y03084* +X04209Y03085* +X04209Y03085* +X04209Y03086* +X04209Y03087* +X04209Y03088* +X0421Y03089* +X0421Y0309* +X0421Y03091* +X0421Y03093* +X04211Y03094* +X04211Y03096* +X04222Y03147* +X04242* +X04231Y03094* +X04228Y03082* +Y03082* +Y03081* +X04228Y03081* +X04228Y03081* +X04227Y03079* +X04227Y03077* +Y03077* +X04227Y03077* +X04227Y03076* +X04228Y03074* +X04228Y03073* +X04229Y03072* +X0423Y0307* +X04232Y03069* +X04232Y03069* +X04233Y03068* +X04234Y03068* +X04235Y03067* +X04237Y03067* +X04239Y03066* +X04242Y03066* +X04245Y03065* +X04246* +X04248Y03066* +X04249Y03066* +X04251Y03066* +X04253Y03067* +X04256Y03067* +X04258Y03068* +X04258Y03068* +X04258Y03069* +X04259Y03069* +X0426Y0307* +X04262Y03071* +X04263Y03073* +X04264Y03074* +X04265Y03076* +Y03076* +X04266Y03076* +X04266Y03077* +X04266Y03077* +X04266Y03078* +X04267Y03078* +X04267Y03079* +X04267Y0308* +X04268Y03082* +X04268Y03083* +X04269Y03084* +X04269Y03086* +X0427Y03088* +X0427Y0309* +X04271Y03092* +X04271Y03094* +X04282Y03147* +X04302* +X04291Y03092* +G37* +G36* +X04751Y03122D02* +X04753Y03122D01* +X04754Y03122* +X04755Y03121* +X04757Y03121* +X0476Y0312* +X04762Y03119* +X04763Y03119* +X04765Y03118* +X04767Y03117* +X04768Y03115* +X0477Y03114* +X0477Y03114* +X0477Y03114* +X0477Y03113* +X04771Y03113* +X04771Y03112* +X04772Y03111* +X04773Y0311* +X04773Y03108* +X04774Y03107* +X04775Y03105* +X04775Y03103* +X04776Y03101* +X04776Y03099* +X04777Y03097* +X04777Y03095* +X04777Y03092* +Y03092* +Y03092* +Y03091* +Y03091* +X04777Y03089* +Y03088* +X04777Y03086* +X04777Y03084* +X04776Y03082* +X04776Y0308* +X04729* +Y0308* +Y03079* +X04729Y03078* +Y03078* +Y03078* +Y03078* +Y03077* +X04729Y03077* +X04729Y03076* +X04729Y03074* +X0473Y03072* +X0473Y0307* +X04731Y03068* +X04733Y03067* +X04733Y03067* +X04733Y03066* +X04734Y03065* +X04735Y03065* +X04737Y03064* +X04738Y03063* +X0474Y03063* +X04742Y03062* +X04743* +X04743Y03063* +X04744* +X04745Y03063* +X04745Y03063* +X04748Y03064* +X04749Y03064* +X0475Y03065* +X04751Y03066* +X04752Y03067* +X04754Y03068* +X04755Y03069* +X04756Y0307* +X04757Y03072* +X04774Y03069* +Y03069* +X04774Y03069* +X04773Y03068* +X04773Y03068* +X04772Y03067* +X04772Y03066* +X0477Y03064* +X04768Y03061* +X04766Y03059* +X04764Y03056* +X04761Y03054* +X0476* +X0476Y03054* +X0476Y03053* +X04759Y03053* +X04758Y03053* +X04757Y03052* +X04756Y03052* +X04755Y03051* +X04752Y03051* +X04749Y0305* +X04746Y03049* +X04742Y03049* +X04741* +X0474Y03049* +X04739Y03049* +X04737Y03049* +X04736Y0305* +X04734Y0305* +X04732Y03051* +X0473Y03051* +X04728Y03052* +X04727Y03053* +X04725Y03054* +X04723Y03055* +X04721Y03056* +X04719Y03058* +X04719Y03058* +X04719Y03058* +X04719Y03059* +X04718Y03059* +X04717Y0306* +X04717Y03061* +X04716Y03063* +X04715Y03064* +X04714Y03066* +X04713Y03067* +X04713Y03069* +X04712Y03071* +X04711Y03074* +X04711Y03076* +X04711Y03079* +X04711Y03081* +Y03081* +Y03082* +Y03083* +X04711Y03084* +X04711Y03085* +X04711Y03086* +X04711Y03088* +X04712Y0309* +X04712Y03092* +X04712Y03094* +X04713Y03096* +X04714Y03098* +X04715Y031* +X04716Y03103* +X04717Y03105* +X04718Y03107* +X04719Y03107* +X04719Y03108* +X0472Y03108* +X0472Y03109* +X04722Y0311* +X04723Y03112* +X04724Y03113* +X04726Y03115* +X04728Y03116* +X04731Y03117* +X04733Y03119* +X04736Y0312* +X04739Y03121* +X04742Y03121* +X04746Y03122* +X04749Y03122* +X04751* +X04751Y03122* +G37* +G36* +X04552D02* +X04553Y03122D01* +X04555Y03122* +X04556Y03121* +X04558Y03121* +X0456Y03121* +X04562Y0312* +X04564Y03119* +X04566Y03118* +X04568Y03117* +X0457Y03116* +X04572Y03115* +X04573Y03113* +X04573Y03113* +X04574Y03113* +X04574Y03113* +X04575Y03112* +X04575Y03111* +X04576Y0311* +X04577Y03109* +X04578Y03107* +X04578Y03106* +X04579Y03104* +X0458Y03102* +X04581Y031* +X04581Y03098* +X04582Y03096* +X04582Y03093* +X04582Y03091* +Y0309* +Y0309* +X04582Y03089* +Y03088* +X04582Y03086* +X04581Y03085* +X04581Y03083* +X04581Y03081* +X0458Y03078* +X04579Y03076* +X04578Y03073* +X04577Y03071* +X04576Y03068* +X04575Y03066* +X04573Y03064* +X04571Y03061* +X04571Y03061* +X04571Y03061* +X0457Y0306* +X04569Y03059* +X04568Y03058* +X04567Y03057* +X04565Y03056* +X04563Y03055* +X04561Y03054* +X04559Y03053* +X04557Y03052* +X04554Y03051* +X04552Y0305* +X04549Y03049* +X04545Y03049* +X04542Y03049* +X04541* +X0454Y03049* +X0454* +X04539Y03049* +X04536Y03049* +X04534Y0305* +X04531Y03051* +X04528Y03052* +X04525Y03053* +X04525* +X04524Y03053* +X04524Y03053* +X04523Y03054* +X04522Y03054* +X0452Y03056* +X04519Y03057* +X04517Y03059* +X04515Y03061* +X04513Y03064* +Y03064* +X04513Y03064* +X04513Y03065* +X04513Y03065* +X04512Y03066* +X04512Y03067* +X04512Y03069* +X04511Y03071* +X0451Y03074* +X0451Y03076* +X0451Y0308* +Y0308* +Y0308* +X0451Y03081* +Y03083* +X0451Y03084* +X0451Y03086* +X04511Y03088* +X04511Y03091* +X04512Y03093* +X04512Y03096* +X04513Y03098* +X04514Y03101* +X04516Y03103* +X04517Y03106* +X04519Y03108* +X04521Y0311* +X04521Y03111* +X04521Y03111* +X04522Y03112* +X04523Y03112* +X04524Y03113* +X04525Y03114* +X04526Y03115* +X04528Y03116* +X0453Y03117* +X04532Y03118* +X04535Y03119* +X04537Y0312* +X0454Y03121* +X04543Y03122* +X04546Y03122* +X04549Y03122* +X04551* +X04552Y03122* +G37* +G36* +X04608Y03051D02* +X04589D01* +X04609Y03147* +X04628* +X04608Y03051* +G37* +G36* +X04399D02* +X0438D01* +X04395Y0312* +X04413* +X04399Y03051* +G37* +G36* +X04415Y0313D02* +X04397D01* +X044Y03147* +X04419* +X04415Y0313* +G37* +G36* +X05559Y04115D02* +X05579D01* +X05589Y04105* +X05604* +X05629Y0408* +X05639* +X05664Y04055* +Y04045* +X05689Y0402* +Y04005* +X05699Y03995* +Y03975* +X05709Y03965* +Y03885* +X05704Y0388* +Y03855* +X05694Y03845* +Y0383* +X05679Y03815* +Y03805* +X05619Y03745* +X05609* +X05594Y0373* +X05579* +X05569Y0372* +X05549* +X05544Y03715* +X05504* +Y0392* +Y04125* +X05549* +X05559Y04115* +G37* +G36* +X04334Y04057D02* +Y04042D01* +X04348Y04028* +Y04014* +X04359Y04004* +Y03968* +X04366Y03961* +Y03926* +X04359Y03919* +Y03883* +X04348Y03873* +Y03859* +X04334Y03844* +Y0383* +X04278Y03774* +X04271* +X04253Y03756* +X04239* +X04228Y03745* +X04207* +X042Y03738* +X04115* +X04108Y03745* +X04087* +X04076Y03756* +X04062* +X04048Y0377* +X04041* +X04013Y03798* +X04158Y03943* +X04302Y04088* +X04334Y04057* +G37* +G36* +X05223Y04743D02* +X05233D01* +X05263Y04713* +Y04703* +X05278Y04688* +Y04668* +X05283Y04663* +Y04653* +X05198* +X05218Y04673* +Y04708* +X05193Y04733* +X05163* +X05138Y04708* +Y04678* +X05163Y04653* +X05078* +Y04683* +X05088Y04693* +Y04708* +X05118Y04738* +X05128* +X05143Y04753* +X05213* +X05223Y04743* +G37* +G36* +X05339Y03777D02* +X05359D01* +X05369Y03767* +X05384* +X05409Y03742* +X05419* +X05444Y03717* +Y03707* +X05469Y03682* +Y03667* +X05479Y03657* +Y03637* +X05489Y03627* +Y03547* +X05484Y03542* +Y03517* +X05474Y03507* +Y03492* +X05459Y03477* +Y03467* +X05399Y03407* +X05389* +X05374Y03392* +X05359* +X05349Y03382* +X05329* +X05324Y03377* +X05284* +Y03582* +Y03787* +X05329* +X05339Y03777* +G37* +G36* +X04891Y03498D02* +Y03293D01* +X04846* +X04836Y03303* +X04816* +X04806Y03313* +X04791* +X04766Y03338* +X04756* +X04731Y03363* +Y03373* +X04706Y03398* +Y03413* +X04696Y03423* +Y03443* +X04686Y03453* +Y03533* +X04691Y03538* +Y03563* +X04701Y03573* +Y03588* +X04716Y03603* +Y03613* +X04776Y03673* +X04786* +X04801Y03688* +X04816* +X04826Y03698* +X04846* +X04851Y03703* +X04891* +Y03498* +G37* +%LNunisolder52_back-2*% +%LPC*% +G36* +X04246Y03926D02* +X04211D01* +X04193Y03908* +X04175Y0389* +Y03855* +X04211Y0382* +X04246* +X04281Y03855* +Y0389* +X04246Y03926* +G37* +G36* +X05629Y0397D02* +X05579D01* +X05554Y03945* +Y0392* +Y03895* +X05579Y0387* +X05629* +X05654Y03895* +Y03945* +X05629Y0397* +G37* +G36* +X04666Y03108D02* +X04665D01* +X04665Y03108* +X04664Y03108* +X04663Y03108* +X04661Y03107* +X0466Y03107* +X04659Y03106* +X04658Y03105* +X04657Y03104* +X04656Y03103* +X04654Y03102* +X04653Y03101* +X04652Y03099* +Y03099* +X04652Y03099* +X04652Y03098* +X04651Y03097* +X04651Y03096* +X04651Y03095* +X0465Y03094* +X0465Y03093* +X04649Y03092* +X04649Y0309* +X04648Y03087* +X04647Y03083* +X04647Y03081* +X04647Y03079* +Y03079* +Y03079* +Y03078* +X04647Y03078* +X04647Y03076* +X04647Y03075* +X04648Y03073* +X04649Y03071* +X04649Y03069* +X04651Y03067* +X04651Y03067* +X04651Y03067* +X04652Y03066* +X04653Y03065* +X04655Y03064* +X04656Y03064* +X04658Y03063* +X0466Y03063* +X04661* +X04662Y03063* +X04663Y03064* +X04665Y03064* +X04666Y03065* +X04668Y03065* +X0467Y03067* +X0467Y03067* +X04671Y03067* +X04671Y03068* +X04672Y03069* +X04674Y03071* +X04675Y03073* +X04676Y03075* +X04677Y03077* +Y03077* +X04677Y03078* +X04677Y03078* +X04677Y03079* +X04678Y0308* +X04678Y03082* +X04679Y03084* +X04679Y03086* +X0468Y03089* +X0468Y03091* +Y03091* +Y03092* +Y03092* +Y03092* +X04679Y03094* +X04679Y03096* +X04679Y03098* +X04678Y031* +X04677Y03102* +X04676Y03103* +X04675Y03104* +X04675Y03104* +X04674Y03105* +X04673Y03106* +X04671Y03107* +X0467Y03107* +X04668Y03108* +X04666Y03108* +G37* +G36* +X04747Y03109D02* +X04747D01* +X04746Y03108* +X04745Y03108* +X04744Y03108* +X04742Y03107* +X0474Y03107* +X04739Y03106* +X04737Y03104* +X04737Y03104* +X04736Y03103* +X04735Y03102* +X04734Y03101* +X04733Y03099* +X04732Y03097* +X04731Y03094* +X04731Y03091* +X0476* +Y03091* +Y03092* +Y03092* +Y03093* +Y03093* +Y03093* +Y03094* +Y03094* +X0476Y03096* +X0476Y03097* +X04759Y03099* +X04759Y03101* +X04758Y03103* +X04757Y03105* +X04756Y03105* +X04756Y03105* +X04755Y03106* +X04754Y03107* +X04753Y03107* +X04751Y03108* +X04749Y03108* +X04747Y03109* +G37* +G36* +X05409Y03632D02* +X05359D01* +X05334Y03607* +Y03582* +Y03557* +X05359Y03532* +X05409* +X05434Y03557* +Y03607* +X05409Y03632* +G37* +G36* +X04549Y03108D02* +X04548D01* +X04547Y03108* +X04546Y03107* +X04544Y03107* +X04542Y03106* +X0454Y03105* +X04538Y03104* +X04538Y03104* +X04538Y03103* +X04537Y03102* +X04536Y03101* +X04535Y031* +X04533Y03098* +X04532Y03096* +X04531Y03093* +Y03093* +X04531Y03093* +X04531Y03092* +X04531Y03092* +X0453Y0309* +X0453Y03089* +X04529Y03087* +X04529Y03084* +X04529Y03082* +X04529Y0308* +Y0308* +Y03079* +Y03079* +X04529Y03078* +X04529Y03077* +X04529Y03075* +X0453Y03073* +X0453Y03072* +X04531Y0307* +X04533Y03068* +X04533Y03068* +X04533Y03067* +X04534Y03066* +X04535Y03066* +X04537Y03065* +X04539Y03064* +X04541Y03064* +X04543Y03063* +X04544* +X04544Y03064* +X04546Y03064* +X04547Y03064* +X04549Y03065* +X04552Y03066* +X04553Y03067* +X04554Y03068* +X04555Y03069* +X04556Y0307* +X04556Y0307* +X04556Y0307* +X04557Y03071* +X04557Y03072* +X04558Y03073* +X04558Y03074* +X04559Y03075* +X0456Y03076* +X0456Y03078* +X04561Y0308* +X04562Y03082* +X04562Y03084* +X04563Y03086* +X04563Y03088* +X04563Y03091* +X04563Y03093* +Y03093* +Y03093* +Y03094* +Y03094* +X04563Y03095* +X04563Y03097* +X04562Y03099* +X04562Y031* +X04561Y03102* +X04559Y03104* +X04559Y03104* +X04559Y03104* +X04558Y03105* +X04557Y03106* +X04555Y03107* +X04553Y03107* +X04552Y03108* +X04549Y03108* +G37* +G36* +X04816Y03548D02* +X04766D01* +X04741Y03523* +Y03473* +X04766Y03448* +X04816* +X04841Y03473* +Y03498* +Y03523* +X04816Y03548* +G37* +%LNunisolder52_back-3*% +%LPD*% +G54D73* +X06294Y03642D02* +D01* +X06294Y03643* +X06294Y03643* +X06294Y03643* +X06294Y03644* +X06293Y03644* +X06293Y03644* +X06293Y03645* +X06293Y03645* +X06293Y03645* +X06293Y03646* +X06292Y03646* +X06292Y03646* +X06292Y03646* +X06292Y03646* +X06291Y03647* +X06291Y03647* +X06291Y03647* +X0629Y03647* +X0629Y03647* +X0629Y03647* +X06289Y03647* +X06289Y03647* +X06289* +X06288Y03647* +X06288Y03647* +X06288Y03647* +X06287Y03647* +X06287Y03647* +X06287Y03647* +X06286Y03647* +X06286Y03646* +X06286Y03646* +X06286Y03646* +X06285Y03646* +X06285Y03646* +X06285Y03645* +X06285Y03645* +X06285Y03645* +X06284Y03644* +X06284Y03644* +X06284Y03644* +X06284Y03643* +X06284Y03643* +X06284Y03643* +X06284Y03642* +X06284Y03642* +X06284Y03642* +X06284Y03641* +X06284Y03641* +X06284Y03641* +X06284Y0364* +X06285Y0364* +X06285Y0364* +X06285Y0364* +X06285Y03639* +X06285Y03639* +X06286Y03639* +X06286Y03639* +X06286Y03638* +X06286Y03638* +X06287Y03638* +X06287Y03638* +X06287Y03638* +X06288Y03638* +X06288Y03638* +X06288Y03638* +X06289Y03637* +X06289* +X06289Y03638* +X0629Y03638* +X0629Y03638* +X0629Y03638* +X06291Y03638* +X06291Y03638* +X06291Y03638* +X06292Y03638* +X06292Y03639* +X06292Y03639* +X06292Y03639* +X06293Y03639* +X06293Y0364* +X06293Y0364* +X06293Y0364* +X06293Y0364* +X06293Y03641* +X06294Y03641* +X06294Y03641* +X06294Y03642* +X06294Y03642* +X06294Y03642* +X0443Y04215D02* +D01* +X0443Y04215* +X0443Y04216* +X0443Y04216* +X04429Y04216* +X04429Y04217* +X04429Y04217* +X04429Y04217* +X04429Y04218* +X04429Y04218* +X04429Y04218* +X04428Y04218* +X04428Y04219* +X04428Y04219* +X04428Y04219* +X04427Y04219* +X04427Y04219* +X04427Y0422* +X04426Y0422* +X04426Y0422* +X04426Y0422* +X04425Y0422* +X04425Y0422* +X04425* +X04424Y0422* +X04424Y0422* +X04424Y0422* +X04423Y0422* +X04423Y0422* +X04423Y04219* +X04422Y04219* +X04422Y04219* +X04422Y04219* +X04421Y04219* +X04421Y04218* +X04421Y04218* +X04421Y04218* +X04421Y04218* +X0442Y04217* +X0442Y04217* +X0442Y04217* +X0442Y04216* +X0442Y04216* +X0442Y04216* +X0442Y04215* +X0442Y04215* +X0442Y04215* +X0442Y04214* +X0442Y04214* +X0442Y04214* +X0442Y04213* +X0442Y04213* +X0442Y04213* +X04421Y04212* +X04421Y04212* +X04421Y04212* +X04421Y04212* +X04421Y04211* +X04422Y04211* +X04422Y04211* +X04422Y04211* +X04423Y04211* +X04423Y0421* +X04423Y0421* +X04424Y0421* +X04424Y0421* +X04424Y0421* +X04425Y0421* +X04425* +X04425Y0421* +X04426Y0421* +X04426Y0421* +X04426Y0421* +X04427Y0421* +X04427Y04211* +X04427Y04211* +X04428Y04211* +X04428Y04211* +X04428Y04211* +X04428Y04212* +X04429Y04212* +X04429Y04212* +X04429Y04212* +X04429Y04213* +X04429Y04213* +X04429Y04213* +X04429Y04214* +X0443Y04214* +X0443Y04214* +X0443Y04215* +X0443Y04215* +X05204Y03164D02* +D01* +X05204Y03164* +X05204Y03165* +X05204Y03165* +X05204Y03165* +X05204Y03166* +X05204Y03166* +X05204Y03166* +X05204Y03167* +X05203Y03167* +X05203Y03167* +X05203Y03167* +X05203Y03168* +X05202Y03168* +X05202Y03168* +X05202Y03168* +X05201Y03168* +X05201Y03169* +X05201Y03169* +X05201Y03169* +X052Y03169* +X052Y03169* +X052Y03169* +X05199* +X05199Y03169* +X05198Y03169* +X05198Y03169* +X05198Y03169* +X05197Y03169* +X05197Y03168* +X05197Y03168* +X05197Y03168* +X05196Y03168* +X05196Y03168* +X05196Y03167* +X05196Y03167* +X05195Y03167* +X05195Y03167* +X05195Y03166* +X05195Y03166* +X05195Y03166* +X05195Y03165* +X05195Y03165* +X05194Y03165* +X05194Y03164* +X05194Y03164* +X05194Y03164* +X05194Y03163* +X05195Y03163* +X05195Y03163* +X05195Y03162* +X05195Y03162* +X05195Y03162* +X05195Y03161* +X05195Y03161* +X05196Y03161* +X05196Y03161* +X05196Y0316* +X05196Y0316* +X05197Y0316* +X05197Y0316* +X05197Y0316* +X05197Y03159* +X05198Y03159* +X05198Y03159* +X05198Y03159* +X05199Y03159* +X05199Y03159* +X052* +X052Y03159* +X052Y03159* +X05201Y03159* +X05201Y03159* +X05201Y03159* +X05201Y0316* +X05202Y0316* +X05202Y0316* +X05202Y0316* +X05203Y0316* +X05203Y03161* +X05203Y03161* +X05203Y03161* +X05204Y03161* +X05204Y03162* +X05204Y03162* +X05204Y03162* +X05204Y03163* +X05204Y03163* +X05204Y03163* +X05204Y03164* +X05204Y03164* +X06491Y04519D02* +D01* +X06491Y0452* +X06491Y0452* +X06491Y0452* +X0649Y04521* +X0649Y04521* +X0649Y04521* +X0649Y04522* +X0649Y04522* +X0649Y04522* +X06489Y04523* +X06489Y04523* +X06489Y04523* +X06489Y04523* +X06488Y04523* +X06488Y04524* +X06488Y04524* +X06488Y04524* +X06487Y04524* +X06487Y04524* +X06487Y04524* +X06486Y04524* +X06486Y04524* +X06486* +X06485Y04524* +X06485Y04524* +X06485Y04524* +X06484Y04524* +X06484Y04524* +X06484Y04524* +X06483Y04524* +X06483Y04523* +X06483Y04523* +X06482Y04523* +X06482Y04523* +X06482Y04523* +X06482Y04522* +X06482Y04522* +X06481Y04522* +X06481Y04521* +X06481Y04521* +X06481Y04521* +X06481Y0452* +X06481Y0452* +X06481Y0452* +X06481Y04519* +X06481Y04519* +X06481Y04519* +X06481Y04518* +X06481Y04518* +X06481Y04518* +X06481Y04517* +X06481Y04517* +X06482Y04517* +X06482Y04516* +X06482Y04516* +X06482Y04516* +X06482Y04516* +X06483Y04516* +X06483Y04515* +X06483Y04515* +X06484Y04515* +X06484Y04515* +X06484Y04515* +X06485Y04515* +X06485Y04515* +X06485Y04514* +X06486Y04514* +X06486* +X06486Y04514* +X06487Y04515* +X06487Y04515* +X06487Y04515* +X06488Y04515* +X06488Y04515* +X06488Y04515* +X06488Y04515* +X06489Y04516* +X06489Y04516* +X06489Y04516* +X06489Y04516* +X0649Y04516* +X0649Y04517* +X0649Y04517* +X0649Y04517* +X0649Y04518* +X0649Y04518* +X06491Y04518* +X06491Y04519* +X06491Y04519* +X06491Y04519* +Y0422D02* +D01* +X06491Y04221* +X06491Y04221* +X06491Y04221* +X0649Y04222* +X0649Y04222* +X0649Y04222* +X0649Y04222* +X0649Y04223* +X0649Y04223* +X06489Y04223* +X06489Y04224* +X06489Y04224* +X06489Y04224* +X06488Y04224* +X06488Y04224* +X06488Y04225* +X06488Y04225* +X06487Y04225* +X06487Y04225* +X06487Y04225* +X06486Y04225* +X06486Y04225* +X06486* +X06485Y04225* +X06485Y04225* +X06485Y04225* +X06484Y04225* +X06484Y04225* +X06484Y04225* +X06483Y04224* +X06483Y04224* +X06483Y04224* +X06482Y04224* +X06482Y04224* +X06482Y04223* +X06482Y04223* +X06482Y04223* +X06481Y04222* +X06481Y04222* +X06481Y04222* +X06481Y04222* +X06481Y04221* +X06481Y04221* +X06481Y04221* +X06481Y0422* +X06481Y0422* +X06481Y04219* +X06481Y04219* +X06481Y04219* +X06481Y04218* +X06481Y04218* +X06481Y04218* +X06482Y04218* +X06482Y04217* +X06482Y04217* +X06482Y04217* +X06482Y04217* +X06483Y04216* +X06483Y04216* +X06483Y04216* +X06484Y04216* +X06484Y04216* +X06484Y04215* +X06485Y04215* +X06485Y04215* +X06485Y04215* +X06486Y04215* +X06486* +X06486Y04215* +X06487Y04215* +X06487Y04215* +X06487Y04215* +X06488Y04216* +X06488Y04216* +X06488Y04216* +X06488Y04216* +X06489Y04216* +X06489Y04217* +X06489Y04217* +X06489Y04217* +X0649Y04217* +X0649Y04218* +X0649Y04218* +X0649Y04218* +X0649Y04218* +X0649Y04219* +X06491Y04219* +X06491Y04219* +X06491Y0422* +X06491Y0422* +X06294Y03929D02* +D01* +X06294Y03929* +X06294Y0393* +X06294Y0393* +X06294Y0393* +X06293Y03931* +X06293Y03931* +X06293Y03931* +X06293Y03931* +X06293Y03932* +X06293Y03932* +X06292Y03932* +X06292Y03932* +X06292Y03933* +X06292Y03933* +X06291Y03933* +X06291Y03933* +X06291Y03933* +X0629Y03934* +X0629Y03934* +X0629Y03934* +X06289Y03934* +X06289Y03934* +X06289* +X06288Y03934* +X06288Y03934* +X06288Y03934* +X06287Y03934* +X06287Y03933* +X06287Y03933* +X06286Y03933* +X06286Y03933* +X06286Y03933* +X06286Y03932* +X06285Y03932* +X06285Y03932* +X06285Y03932* +X06285Y03931* +X06285Y03931* +X06284Y03931* +X06284Y03931* +X06284Y0393* +X06284Y0393* +X06284Y0393* +X06284Y03929* +X06284Y03929* +X06284Y03928* +X06284Y03928* +X06284Y03928* +X06284Y03927* +X06284Y03927* +X06284Y03927* +X06285Y03927* +X06285Y03926* +X06285Y03926* +X06285Y03926* +X06285Y03925* +X06286Y03925* +X06286Y03925* +X06286Y03925* +X06286Y03925* +X06287Y03924* +X06287Y03924* +X06287Y03924* +X06288Y03924* +X06288Y03924* +X06288Y03924* +X06289Y03924* +X06289* +X06289Y03924* +X0629Y03924* +X0629Y03924* +X0629Y03924* +X06291Y03924* +X06291Y03924* +X06291Y03925* +X06292Y03925* +X06292Y03925* +X06292Y03925* +X06292Y03925* +X06293Y03926* +X06293Y03926* +X06293Y03926* +X06293Y03927* +X06293Y03927* +X06293Y03927* +X06294Y03927* +X06294Y03928* +X06294Y03928* +X06294Y03928* +X06294Y03929* +G54D74* +X0528Y04653D02* +D01* +X0528Y0466* +X05279Y04667* +X05278Y04674* +X05276Y04681* +X05274Y04688* +X05272Y04695* +X05268Y04701* +X05265Y04707* +X05261Y04713* +X05256Y04719* +X05252Y04724* +X05247Y04729* +X05241Y04734* +X05235Y04738* +X05229Y04742* +X05223Y04745* +X05216Y04748* +X0521Y0475* +X05203Y04752* +X05196Y04754* +X05189Y04755* +X05182Y04755* +X05174* +X05167Y04755* +X0516Y04754* +X05153Y04752* +X05146Y0475* +X0514Y04748* +X05133Y04745* +X05127Y04742* +X05121Y04738* +X05115Y04734* +X0511Y04729* +X05104Y04724* +X051Y04719* +X05095Y04713* +X05091Y04707* +X05088Y04701* +X05084Y04695* +X05082Y04688* +X0508Y04681* +X05078Y04674* +X05077Y04667* +X05076Y0466* +X05076Y04653* +X05076Y04646* +X05077Y04639* +X05078Y04632* +X0508Y04625* +X05082Y04618* +X05084Y04611* +X05088Y04605* +X05091Y04599* +X05095Y04593* +X051Y04587* +X05104Y04582* +X0511Y04577* +X05115Y04572* +X05121Y04568* +X05127Y04564* +X05133Y04561* +X0514Y04558* +X05146Y04556* +X05153Y04554* +X0516Y04552* +X05167Y04551* +X05174Y04551* +X05182* +X05189Y04551* +X05196Y04552* +X05203Y04554* +X0521Y04556* +X05216Y04558* +X05223Y04561* +X05229Y04564* +X05235Y04568* +X05241Y04572* +X05247Y04577* +X05252Y04582* +X05256Y04587* +X05261Y04593* +X05265Y04599* +X05268Y04605* +X05272Y04611* +X05274Y04618* +X05276Y04625* +X05278Y04632* +X05279Y04639* +X0528Y04646* +X0528Y04653* +X05711Y0392D02* +D01* +X05711Y03934* +X05709Y03949* +X05707Y03963* +X05703Y03977* +X05699Y0399* +X05693Y04004* +X05687Y04017* +X0568Y04029* +X05672Y04041* +X05663Y04053* +X05653Y04063* +X05643Y04073* +X05632Y04083* +X0562Y04091* +X05608Y04099* +X05595Y04106* +X05582Y04111* +X05568Y04116* +X05554Y0412* +X0554Y04123* +X05526Y04125* +X05512Y04126* +X05497* +X05483Y04125* +X05469Y04123* +X05454Y0412* +X05441Y04116* +X05427Y04111* +X05414Y04106* +X05401Y04099* +X05389Y04091* +X05377Y04083* +X05366Y04073* +X05356Y04063* +X05346Y04053* +X05337Y04041* +X05329Y04029* +X05322Y04017* +X05316Y04004* +X0531Y0399* +X05306Y03977* +X05302Y03963* +X053Y03949* +X05298Y03934* +X05298Y0392* +X05298Y03905* +X053Y03891* +X05302Y03877* +X05306Y03863* +X0531Y03849* +X05316Y03836* +X05322Y03823* +X05329Y0381* +X05337Y03798* +X05346Y03787* +X05356Y03776* +X05366Y03766* +X05377Y03757* +X05389Y03748* +X05401Y03741* +X05414Y03734* +X05427Y03728* +X05441Y03723* +X05454Y03719* +X05469Y03716* +X05483Y03714* +X05497Y03713* +X05512* +X05526Y03714* +X0554Y03716* +X05554Y03719* +X05568Y03723* +X05582Y03728* +X05595Y03734* +X05608Y03741* +X0562Y03748* +X05632Y03757* +X05643Y03766* +X05653Y03776* +X05663Y03787* +X05672Y03798* +X0568Y0381* +X05687Y03823* +X05693Y03836* +X05699Y03849* +X05703Y03863* +X05707Y03877* +X05709Y03891* +X05711Y03905* +X05711Y0392* +X05098Y03498D02* +D01* +X05097Y03512* +X05096Y03526* +X05093Y03541* +X0509Y03555* +X05085Y03568* +X0508Y03582* +X05074Y03595* +X05067Y03607* +X05058Y03619* +X0505Y0363* +X0504Y03641* +X0503Y03651* +X05018Y0366* +X05007Y03669* +X04995Y03677* +X04982Y03683* +X04969Y03689* +X04955Y03694* +X04941Y03698* +X04927Y03701* +X04913Y03703* +X04898Y03704* +X04884* +X0487Y03703* +X04855Y03701* +X04841Y03698* +X04827Y03694* +X04814Y03689* +X04801Y03683* +X04788Y03677* +X04776Y03669* +X04764Y0366* +X04753Y03651* +X04743Y03641* +X04733Y0363* +X04724Y03619* +X04716Y03607* +X04709Y03595* +X04702Y03582* +X04697Y03568* +X04693Y03555* +X04689Y03541* +X04687Y03526* +X04685Y03512* +X04685Y03498* +X04685Y03483* +X04687Y03469* +X04689Y03455* +X04693Y03441* +X04697Y03427* +X04702Y03413* +X04709Y034* +X04716Y03388* +X04724Y03376* +X04733Y03365* +X04743Y03354* +X04753Y03344* +X04764Y03335* +X04776Y03326* +X04788Y03319* +X04801Y03312* +X04814Y03306* +X04827Y03301* +X04841Y03297* +X04855Y03294* +X0487Y03292* +X04884Y03291* +X04898* +X04913Y03292* +X04927Y03294* +X04941Y03297* +X04955Y03301* +X04969Y03306* +X04982Y03312* +X04995Y03319* +X05007Y03326* +X05018Y03335* +X0503Y03344* +X0504Y03354* +X0505Y03365* +X05058Y03376* +X05067Y03388* +X05074Y034* +X0508Y03413* +X05085Y03427* +X0509Y03441* +X05093Y03455* +X05096Y03469* +X05097Y03483* +X05098Y03498* +X05491Y03582D02* +D01* +X0549Y03597* +X05489Y03611* +X05486Y03625* +X05483Y03639* +X05478Y03653* +X05473Y03666* +X05466Y03679* +X05459Y03692* +X05451Y03704* +X05442Y03715* +X05433Y03726* +X05422Y03736* +X05411Y03745* +X054Y03754* +X05387Y03761* +X05375Y03768* +X05361Y03774* +X05348Y03779* +X05334Y03783* +X0532Y03786* +X05306Y03788* +X05291Y03789* +X05277* +X05262Y03788* +X05248Y03786* +X05234Y03783* +X0522Y03779* +X05207Y03774* +X05193Y03768* +X05181Y03761* +X05168Y03754* +X05157Y03745* +X05146Y03736* +X05135Y03726* +X05126Y03715* +X05117Y03704* +X05109Y03692* +X05101Y03679* +X05095Y03666* +X0509Y03653* +X05085Y03639* +X05082Y03625* +X05079Y03611* +X05078Y03597* +X05077Y03582* +X05078Y03568* +X05079Y03553* +X05082Y03539* +X05085Y03525* +X0509Y03511* +X05095Y03498* +X05101Y03485* +X05109Y03473* +X05117Y03461* +X05126Y03449* +X05135Y03439* +X05146Y03429* +X05157Y03419* +X05168Y03411* +X05181Y03403* +X05193Y03396* +X05207Y03391* +X0522Y03386* +X05234Y03382* +X05248Y03379* +X05262Y03377* +X05277Y03376* +X05291* +X05306Y03377* +X0532Y03379* +X05334Y03382* +X05348Y03386* +X05361Y03391* +X05375Y03396* +X05387Y03403* +X054Y03411* +X05411Y03419* +X05422Y03429* +X05433Y03439* +X05442Y03449* +X05451Y03461* +X05459Y03473* +X05466Y03485* +X05473Y03498* +X05478Y03511* +X05483Y03525* +X05486Y03539* +X05489Y03553* +X0549Y03568* +X05491Y03582* +X04364Y03943D02* +D01* +X04364Y03958* +X04362Y03972* +X0436Y03986* +X04356Y04* +X04352Y04014* +X04346Y04028* +X0434Y0404* +X04333Y04053* +X04325Y04065* +X04316Y04076* +X04306Y04087* +X04296Y04097* +X04285Y04106* +X04273Y04115* +X04261Y04122* +X04248Y04129* +X04235Y04135* +X04221Y0414* +X04208Y04144* +X04193Y04147* +X04179Y04149* +X04165Y0415* +X0415* +X04136Y04149* +X04122Y04147* +X04107Y04144* +X04094Y0414* +X0408Y04135* +X04067Y04129* +X04054Y04122* +X04042Y04115* +X0403Y04106* +X04019Y04097* +X04009Y04087* +X03999Y04076* +X0399Y04065* +X03982Y04053* +X03975Y0404* +X03969Y04028* +X03963Y04014* +X03959Y04* +X03955Y03986* +X03953Y03972* +X03951Y03958* +X03951Y03943* +X03951Y03929* +X03953Y03915* +X03955Y039* +X03959Y03886* +X03963Y03873* +X03969Y03859* +X03975Y03846* +X03982Y03834* +X0399Y03822* +X03999Y03811* +X04009Y038* +X04019Y0379* +X0403Y03781* +X04042Y03772* +X04054Y03764* +X04067Y03758* +X0408Y03752* +X04094Y03747* +X04107Y03743* +X04122Y0374* +X04136Y03738* +X0415Y03737* +X04165* +X04179Y03738* +X04193Y0374* +X04208Y03743* +X04221Y03747* +X04235Y03752* +X04248Y03758* +X04261Y03764* +X04273Y03772* +X04285Y03781* +X04296Y0379* +X04306Y038* +X04316Y03811* +X04325Y03822* +X04333Y03834* +X0434Y03846* +X04346Y03859* +X04352Y03873* +X04356Y03886* +X0436Y039* +X04362Y03915* +X04364Y03929* +X04364Y03943* +X05374Y04618D02* +X05405D01* +X05374Y04681D02* +X05405D01* +X06374Y0338D02* +Y03644D01* +X04782Y03884D02* +X04785D01* +X04959D02* +X04963D01* +X04782Y03782D02* +X0482D01* +X04924D02* +X04963D01* +Y03884* +X04782Y03782D02* +Y03884D01* +X05964Y04318D02* +Y0435D01* +X05937Y04318D02* +X05964D01* +Y04405D02* +Y04437D01* +X05937D02* +X05964D01* +X06122Y03976D02* +X06141D01* +X06113Y03967D02* +X06122Y03976D01* +X06062D02* +X06082D01* +X06091Y03967* +X06062Y03779D02* +Y03976D01* +X06141Y03779D02* +Y03976D01* +X06091Y03967D02* +X06113D01* +X06062Y03779D02* +X06141D01* +X04509Y04203D02* +X04529D01* +X04501Y04195D02* +X04509Y04203D01* +X0445D02* +X0447D01* +X04478Y04195* +X0445Y04007D02* +Y04203D01* +X04529Y04007D02* +Y04203D01* +X04478Y04195D02* +X04501D01* +X0445Y04007D02* +X04529D01* +X05211Y03242D02* +Y03259D01* +Y03242D02* +X05219Y03233D01* +X05211Y03188D02* +Y03206D01* +X05219Y03214* +X05558Y03188D02* +Y03259D01* +X05219Y03214D02* +Y03233D01* +X05211Y03259D02* +X05558D01* +X05211Y03188D02* +X05558D01* +X06104Y04054D02* +Y04114D01* +X06044Y04054D02* +Y04114D01* +Y04054D02* +X06104D01* +X06045Y04058D02* +X06104D01* +X05388Y05265D02* +Y05643D01* +X05609Y05265D02* +Y05643D01* +X05388D02* +X05609D01* +X06541Y03137D02* +X0663D01* +X06541Y0324D02* +X06629D01* +X0636Y03137D02* +Y0324D01* +Y03137D02* +X06466D01* +X0636Y0324D02* +X06466D01* +X0663Y03137D02* +X06648Y03155D01* +X0663Y0324D02* +X06648Y03222D01* +Y03155D02* +Y03222D01* +X0611Y02721D02* +Y02951D01* +X0581Y02721D02* +X0611D01* +X0581D02* +Y02951D01* +X0611* +X05812Y02915D02* +X06109D01* +X05792Y02721D02* +Y03074D01* +X04992Y02721D02* +Y03074D01* +X05792* +X05312Y02771D02* +X05472D01* +X0559Y02721D02* +X05792D01* +X04992D02* +X05142D01* +X05472D02* +X0559D01* +X05472D02* +Y02771D01* +X05312Y02721D02* +Y02771D01* +X05142Y02721D02* +X05312D01* +X0653Y04579D02* +X06562D01* +X0653Y04642D02* +X06562D01* +X05351Y04149D02* +Y04216D01* +Y04149D02* +X05369Y04131D01* +X05351Y04216D02* +X05369Y04234D01* +X05533Y04131D02* +X05639D01* +X05533Y04234D02* +X05639D01* +Y04131D02* +Y04234D01* +X0537Y04131D02* +X05458D01* +X05369Y04234D02* +X05458D01* +X0564Y04273D02* +Y0434D01* +X05622Y04358D02* +X0564Y0434D01* +X05622Y04255D02* +X0564Y04273D01* +X05352Y04358D02* +X05458D01* +X05352Y04255D02* +X05458D01* +X05352D02* +Y04358D01* +X05533D02* +X05622D01* +X05533Y04255D02* +X05623D01* +X06019Y04054D02* +Y04114D01* +X05959Y04054D02* +Y04114D01* +Y04054D02* +X06019D01* +X05959Y04058D02* +X06018D01* +X05842Y04046D02* +X0587D01* +X05842D02* +Y04077D01* +Y04164D02* +X0587D01* +X05842Y04132D02* +Y04164D01* +X0619Y04064D02* +X06222D01* +X0619Y04127D02* +X06222D01* +X06098Y05192D02* +Y0557D01* +X06318Y05192D02* +Y0557D01* +X06098D02* +X06318D01* +X05964Y04646D02* +Y04678D01* +X05937Y04646D02* +X05964D01* +Y04733D02* +Y04764D01* +X05937D02* +X05964D01* +X06139Y04578D02* +Y04606D01* +X06108Y04578D02* +X06139D01* +X06021D02* +Y04606D01* +Y04578D02* +X06053D01* +X0657Y04257D02* +Y04521D01* +X06087Y04367D02* +X06147D01* +X06087Y04427D02* +X06147D01* +X06087Y04367D02* +Y04427D01* +X06091Y04368D02* +Y04427D01* +X06087Y04695D02* +X06147D01* +X06087Y04755D02* +X06147D01* +X06087Y04695D02* +Y04755D01* +X06091Y04695D02* +Y04754D01* +X04656Y04275D02* +X04723D01* +X04639Y04257D02* +X04656Y04275D01* +X04723D02* +X04741Y04257D01* +X04639Y03986D02* +Y04093D01* +X04741Y03986D02* +Y04093D01* +X04639Y03986D02* +X04741D01* +X04639Y04168D02* +Y04256D01* +X04741Y04168D02* +Y04257D01* +X05104Y04404D02* +X05164D01* +X05104Y04344D02* +X05164D01* +Y04404* +X0516Y04344D02* +Y04403D01* +X06011Y02984D02* +Y03073D01* +X06114Y02985D02* +Y03073D01* +X06011Y03254D02* +X06114D01* +X06011Y03148D02* +Y03254D01* +X06114Y03148D02* +Y03254D01* +X06011Y02984D02* +X06029Y02966D01* +X06096D02* +X06114Y02984D01* +X06029Y02966D02* +X06096D01* +X06334Y05191D02* +Y05569D01* +X06555Y05191D02* +Y05569D01* +X06334D02* +X06555D01* +X05846Y0519D02* +Y05568D01* +X05625Y0519D02* +Y05568D01* +Y0519D02* +X05846D01* +X06082D02* +Y05568D01* +X05862Y0519D02* +Y05568D01* +Y0519D02* +X06082D01* +X05244Y04449D02* +Y04516D01* +X05226Y04533D02* +X05244Y04516D01* +X05226Y04431D02* +X05244Y04449D01* +X04955Y04533D02* +X05062D01* +X04955Y04431D02* +X05062D01* +X04955D02* +Y04533D01* +X05136D02* +X05225D01* +X05136Y04431D02* +X05226D01* +X05386Y04605D02* +X05414D01* +Y04573D02* +Y04605D01* +X05386Y04487D02* +X05414D01* +Y04518* +X04676Y0382D02* +Y03851D01* +X04613Y0382D02* +Y03851D01* +X04438Y03267D02* +Y03298D01* +X04375Y03267D02* +Y03298D01* +X04721Y03279D02* +Y03307D01* +X0469Y03279D02* +X04721D01* +X04603D02* +Y03307D01* +Y03279D02* +X04635D01* +X0657Y03958D02* +Y04222D01* +X06021Y0425D02* +X06053D01* +X06021D02* +Y04278D01* +X06108Y0425D02* +X06139D01* +Y04278* +X06374Y03667D02* +Y03931D01* +X0456Y02734D02* +X0486D01* +X0456D02* +Y02975D01* +X04694Y02934D02* +X04726D01* +X04709Y02976D02* +X04711D01* +X0456Y02975D02* +X04611D01* +X04809D02* +X04811D01* +X0486Y02734D02* +Y0292D01* +X04794Y02934D02* +X04826D01* +X04562D02* +X04626D01* +X05344Y04707D02* +X05404D01* +X05344Y04767D02* +X05404D01* +X05344Y04707D02* +Y04767D01* +X05348Y04707D02* +Y04766D01* +X05344Y04852D02* +X05404D01* +X05344Y04792D02* +X05404D01* +Y04852* +X054Y04793D02* +Y04852D01* +X05873Y0391D02* +Y0397D01* +X05933Y0391D02* +Y0397D01* +X05873D02* +X05933D01* +X05874Y03966D02* +X05933D01* +X0616Y04831D02* +X0622D01* +X0616Y04771D02* +X0622D01* +Y04831* +X06216Y04771D02* +Y0483D01* +X06168Y04505D02* +X06228D01* +X06168Y04445D02* +X06228D01* +Y04505* +X06224Y04445D02* +Y04504D01* +X04931Y04851D02* +X05053D01* +X04931Y04568D02* +X04949Y0455D01* +X05036D02* +X05053Y04568D01* +X04949Y0455D02* +X05036D01* +X04931Y04749D02* +Y04851D01* +X05053Y04749D02* +Y04851D01* +Y04569D02* +Y04654D01* +X04931Y04569D02* +Y04654D01* +X06223Y04748D02* +X0623Y04754D01* +X06311* +X06213Y04609D02* +X06219Y04603D01* +X06296D02* +X063Y04599D01* +X06219Y04603D02* +X06296D01* +X0623Y04427D02* +X06311D01* +X06223Y0442D02* +X0623Y04427D01* +X05823Y0457D02* +X05852Y04588D01* +X05939Y04177D02* +X05942Y04174D01* +X05863Y04177D02* +X05939D01* +X05848Y04183D02* +X05857D01* +X05863Y04177* +X04738Y0378D02* +X04752Y03756D01* +G54D75* +X04386Y03452D02* +D01* +X04386Y0345* +X04386Y03448* +X04387Y03446* +X04387Y03444* +X04388Y03442* +X04389Y0344* +X0439Y03438* +X04391Y03437* +X04392Y03435* +X04393Y03433* +X04395Y03432* +X04396Y0343* +X04398Y03429* +X04399Y03428* +X04401Y03426* +X04403Y03425* +X04405Y03425* +X04407Y03424* +X04409Y03423* +X04411Y03423* +X04413Y03423* +X04415Y03422* +X04416Y03422* +X04656D02* +D01* +X04658Y03423* +X0466Y03423* +X04662Y03423* +X04664Y03424* +X04666Y03424* +X04668Y03425* +X0467Y03426* +X04672Y03427* +X04674Y03428* +X04675Y03429* +X04677Y03431* +X04678Y03432* +X0468Y03434* +X04681Y03436* +X04682Y03437* +X04683Y03439* +X04684Y03441* +X04685Y03443* +X04685Y03445* +X04686Y03447* +X04686Y03449* +X04686Y03451* +X04686Y03452* +Y03692D02* +D01* +X04686Y03695* +X04686Y03697* +X04686Y03699* +X04685Y03701* +X04684Y03703* +X04684Y03705* +X04683Y03707* +X04682Y03708* +X0468Y0371* +X04679Y03712* +X04678Y03713* +X04676Y03715* +X04675Y03716* +X04673Y03717* +X04671Y03718* +X04669Y03719* +X04667Y0372* +X04665Y03721* +X04663Y03722* +X04661Y03722* +X04659Y03722* +X04657Y03722* +X04656Y03722* +X04416D02* +D01* +X04414Y03722* +X04412Y03722* +X0441Y03722* +X04408Y03721* +X04406Y03721* +X04404Y0372* +X04402Y03719* +X044Y03718* +X04399Y03717* +X04397Y03715* +X04395Y03714* +X04394Y03713* +X04393Y03711* +X04391Y03709* +X0439Y03707* +X04389Y03706* +X04388Y03704* +X04388Y03702* +X04387Y037* +X04387Y03698* +X04386Y03696* +X04386Y03693* +X04386Y03692* +X04772Y04303D02* +D01* +X0478Y04304* +X04787Y04305* +X04795Y04306* +X04802Y04308* +X0481Y0431* +X04817Y04313* +X04824Y04316* +X0483Y0432* +X04837Y04324* +X04843Y04329* +X04848Y04334* +X04854Y0434* +X04859Y04346* +X04863Y04352* +X04867Y04358* +X04871Y04365* +X04874Y04372* +X04877Y04379* +X04879Y04387* +X0488Y04394* +X04881Y04402* +X04882Y0441* +X04882Y04413* +X04382D02* +D01* +X04382Y04406* +X04383Y04398* +X04384Y04391* +X04386Y04383* +X04389Y04376* +X04392Y04369* +X04395Y04362* +X04399Y04355* +X04403Y04349* +X04408Y04343* +X04413Y04337* +X04418Y04332* +X04424Y04327* +X04431Y04322* +X04437Y04318* +X04444Y04315* +X04451Y04311* +X04458Y04309* +X04465Y04307* +X04473Y04305* +X04481Y04304* +X04488Y04304* +X04492Y04303* +Y04803D02* +D01* +X04484Y04803* +X04477Y04802* +X04469Y04801* +X04462Y04799* +X04454Y04797* +X04447Y04794* +X0444Y04791* +X04434Y04787* +X04427Y04782* +X04421Y04778* +X04416Y04773* +X0441Y04767* +X04405Y04761* +X04401Y04755* +X04397Y04748* +X04393Y04742* +X0439Y04735* +X04387Y04727* +X04385Y0472* +X04384Y04713* +X04383Y04705* +X04382Y04697* +X04382Y04693* +X04882D02* +D01* +X04882Y04701* +X04881Y04709* +X0488Y04716* +X04878Y04724* +X04875Y04731* +X04873Y04738* +X04869Y04745* +X04865Y04752* +X04861Y04758* +X04856Y04764* +X04851Y0477* +X04846Y04775* +X0484Y0478* +X04834Y04785* +X04827Y04789* +X0482Y04792* +X04813Y04795* +X04806Y04798* +X04799Y048* +X04791Y04802* +X04784Y04803* +X04776Y04803* +X04772Y04803* +X03964Y03327D02* +X04357D01* +Y03737* +X03964D02* +X04357D01* +X03964Y03327D02* +Y03737D01* +X0613Y02722D02* +X06541D01* +X0613D02* +Y03116D01* +X06541* +Y02722D02* +Y03116D01* +X06177Y05834D02* +X0657D01* +Y06079* +X06177D02* +X0657D01* +X06177Y05834D02* +Y06079D01* +X06642Y05747D02* +X06902D01* +X06642Y04715D02* +Y05747D01* +Y04715D02* +X06902D01* +Y05747* +X04386Y03452D02* +Y03692D01* +X04686Y03452D02* +Y03692D01* +X04416Y03722D02* +X04451D01* +X04621D02* +X04656D01* +X04416Y03422D02* +X04451D01* +X04621D02* +X04656D01* +X04492Y04303D02* +X04772D01* +X04492Y04803D02* +X04657D01* +X04772* +X04882Y04688D02* +Y04693D01* +Y04413D02* +Y04418D01* +X04382Y04688D02* +Y04693D01* +Y04413D02* +Y04418D01* +X05499Y05159D02* +Y05273D01* +Y05644D02* +Y05747D01* +X05393Y05273D02* +X05605D01* +X05393Y05352D02* +X05605D01* +X05675Y05834D02* +Y06079D01* +X06068* +Y05834D02* +Y06079D01* +X05675Y05834D02* +X06068D01* +X06208Y05086D02* +Y052D01* +Y05571D02* +Y05674D01* +X06102Y052D02* +X06314D01* +X06102Y05279D02* +X06314D01* +X06444Y05086D02* +Y052D01* +Y05571D02* +Y05674D01* +X06338Y052D02* +X0655D01* +X06338Y05279D02* +X0655D01* +X05736Y0556D02* +Y05674D01* +Y05086D02* +Y05189D01* +X0563Y0556D02* +X05842D01* +X0563Y05481D02* +X05842D01* +X05972Y0556D02* +Y05674D01* +Y05086D02* +Y05189D01* +X05866Y0556D02* +X06078D01* +X05866Y05481D02* +X06078D01* +X04219Y03035D02* +X04972Y03036D01* +X05521Y056D02* +Y0556D01* +Y0558* +X05461* +X05521Y0554D02* +X05481D01* +X05461Y0552* +X05481Y055* +X05521* +X05511Y0544D02* +X05521Y0545D01* +Y0547* +X05511Y0548* +X05501* +X05491Y0547* +Y0545* +X05481Y0544* +X05471* +X05461Y0545* +Y0547* +X05471Y0548* +X05461Y0542D02* +Y054D01* +Y0541* +X05521* +X05511Y0542* +G54D76* +X05433Y04574D02* +X05471Y04597D01* +X05489Y04377D02* +X05523Y04423D01* +X05406Y04384D02* +X05413Y04377D01* +X05488* +X06929Y02795D02* +Y02937D01* +X04035Y04881D02* +X04177D01* +X03936Y04783D02* +X04035Y04881D01* +X03936Y04653D02* +Y04783D01* +X04035Y02696D02* +X04165D01* +X03937Y02795D02* +X04035Y02696D01* +X03937Y02795D02* +Y02937D01* +X0683Y02696D02* +X06929Y02795D01* +X06688Y02696D02* +X0683D01* +X06929Y05861D02* +Y06004D01* +X0683Y06102D02* +X06929Y06004D01* +X06701Y06102D02* +X0683D01* +X05314Y05874D02* +Y06003D01* +X05413Y06102* +X05555* +X05074Y04882D02* +X05256D01* +X05315Y04941* +X05314Y0494D02* +Y05109D01* +X05586Y03698D02* +X0558Y03705D01* +X05566* +X0556Y03698* +Y03672* +X05566Y03665* +X0558* +X05586Y03672* +X05626Y03665D02* +X056D01* +X05626Y03692* +Y03698* +X0562Y03705* +X05606* +X056Y03698* +X05666Y03665D02* +X0564D01* +X05666Y03692* +Y03698* +X0566Y03705* +X05646* +X0564Y03698* +X06121Y04184D02* +Y04144D01* +X06141* +X06147Y04151* +Y04178* +X06141Y04184* +X06121* +X06161Y04144D02* +X06174D01* +X06167* +Y04184* +X06161Y04178* +X06221Y04184D02* +X06194D01* +Y04164* +X06207Y04171* +X06214* +X06221Y04164* +Y04151* +X06214Y04144* +X06201* +X06194Y04151* +X05576Y03298D02* +Y03338D01* +X05596* +X05603Y03331* +Y03318* +X05596Y03311* +X05576* +X0559D02* +X05603Y03298D01* +X05643D02* +X05616D01* +X05643Y03324* +Y03331* +X05636Y03338* +X05623* +X05616Y03331* +X05683Y03298D02* +X05656D01* +X05683Y03324* +Y03331* +X05676Y03338* +X05663* +X05656Y03331* +X05019Y0316D02* +Y032D01* +X05039* +X05046Y03193* +Y0318* +X05039Y03173* +X05019* +X05033D02* +X05046Y0316D01* +X05086D02* +X05059D01* +X05086Y03187* +Y03193* +X05079Y032* +X05066* +X05059Y03193* +X05099Y0316D02* +X05112D01* +X05106* +Y032* +X05099Y03193* +X05119Y03312D02* +X05126Y03319D01* +Y03332* +X05119Y03339* +X05093* +X05086Y03332* +Y03319* +X05093Y03312* +X05086Y03272D02* +Y03299D01* +X05113Y03272* +X05119* +X05126Y03279* +Y03292* +X05119Y03299* +X05086Y03259D02* +Y03246D01* +Y03252* +X05126* +X05119Y03259* +X05481Y04843D02* +X05507D01* +Y04836* +X05481Y04809* +Y04803* +X05507* +X05521Y04843D02* +Y04803D01* +X05541* +X05547Y04809* +Y04836* +X05541Y04843* +X05521* +X05587Y04803D02* +X05561D01* +X05587Y04829* +Y04836* +X05581Y04843* +X05567* +X05561Y04836* +X05855Y03168D02* +X05861Y03174D01* +Y03188* +X05855Y03194* +X05848* +X05841Y03188* +Y03174* +X05835Y03168* +X05828* +X05821Y03174* +Y03188* +X05828Y03194* +X05861Y03128D02* +Y03154D01* +X05821* +Y03128* +X05841Y03154D02* +Y03141D01* +X05821Y03114D02* +X05861D01* +X05821Y03088* +X05861* +X05855Y03048D02* +X05861Y03054D01* +Y03068* +X05855Y03074* +X05848* +X05841Y03068* +Y03054* +X05835Y03048* +X05828* +X05821Y03054* +Y03068* +X05828Y03074* +X05861Y03014D02* +Y03028D01* +X05855Y03034* +X05828* +X05821Y03028* +Y03014* +X05828Y03008* +X05855* +X05861Y03014* +X05821Y02994D02* +X05861D01* +Y02974* +X05855Y02968* +X05841* +X05835Y02974* +Y02994* +Y02981D02* +X05821Y02968D01* +X05918Y03007D02* +Y03021D01* +Y03014* +X05885* +X05878Y03021* +Y03027* +X05885Y03034* +X05918Y02967D02* +X05912Y02981D01* +X05898Y02994* +X05885* +X05878Y02987* +Y02974* +X05885Y02967* +X05892* +X05898Y02974* +Y02994* +X06245Y03857D02* +Y03824D01* +X06251Y03817* +X06265* +X06271Y03824* +Y03857* +X06311Y03817D02* +X06285D01* +X06311Y03844* +Y03851* +X06305Y03857* +X06291* +X06285Y03851* +X06721Y03493D02* +Y0352D01* +X06714Y03527* +X06701* +X06694Y0352* +Y03493* +X06701Y03487* +X06714* +X06708Y035D02* +X06721Y03487D01* +X06714D02* +X06721Y03493D01* +X06734Y03487D02* +X06748D01* +X06741* +Y03527* +X06734Y0352* +X06768Y03487D02* +X06781D01* +X06774* +Y03527* +X06768Y0352* +X0672Y03786D02* +Y03812D01* +X06713Y03819* +X067* +X06693Y03812* +Y03786* +X067Y03779* +X06713* +X06707Y03792D02* +X0672Y03779D01* +X06713D02* +X0672Y03786D01* +X06733Y03779D02* +X06747D01* +X0674* +Y03819* +X06733Y03812* +X06767D02* +X06773Y03819D01* +X06787* +X06793Y03812* +Y03786* +X06787Y03779* +X06773* +X06767Y03786* +Y03812* +X06306Y04522D02* +X06332D01* +Y04515* +X06306Y04488* +Y04482* +X06332* +X06346Y04522D02* +Y04482D01* +X06366* +X06372Y04488* +Y04515* +X06366Y04522* +X06346* +X06386D02* +X06412D01* +Y04515* +X06386Y04488* +Y04482* +X05449Y03412D02* +Y03378D01* +X05456Y03372* +X05469* +X05476Y03378* +Y03412* +X05489Y03405D02* +X05496Y03412D01* +X05509* +X05516Y03405* +Y03398* +X05509Y03392* +X05503* +X05509* +X05516Y03385* +Y03378* +X05509Y03372* +X05496* +X05489Y03378* +X05701Y03485D02* +Y03525D01* +X05721* +X05728Y03518* +Y03505* +X05721Y03498* +X05701* +X05715D02* +X05728Y03485D01* +X05741D02* +X05761D01* +X05768Y03491* +X05761Y03498* +X05748* +X05741Y03505* +X05748Y03511* +X05768* +X05781Y03485D02* +X05795D01* +X05788* +Y03525* +X05781Y03518* +X05676Y04374D02* +Y04414D01* +X05696* +X05702Y04407* +Y04394* +X05696Y04387* +X05676* +X05689D02* +X05702Y04374D01* +X05716D02* +X05729D01* +X05722* +Y04414* +X05716Y04407* +X05749D02* +X05756Y04414D01* +X05769* +X05776Y04407* +Y044* +X05769Y04394* +X05776Y04387* +Y0438* +X05769Y04374* +X05756* +X05749Y0438* +Y04387* +X05756Y04394* +X05749Y044* +Y04407* +X05756Y04394D02* +X05769D01* +X05692Y04783D02* +Y04823D01* +X05712* +X05719Y04816* +Y04803* +X05712Y04796* +X05692* +X05706D02* +X05719Y04783D01* +X05732D02* +X05746D01* +X05739* +Y04823* +X05732Y04816* +X05766Y04823D02* +X05792D01* +Y04816* +X05766Y0479* +Y04783* +X05674Y04431D02* +Y04471D01* +X05694* +X057Y04464* +Y04451* +X05694Y04444* +X05674* +X05687D02* +X057Y04431D01* +X05714D02* +X05727D01* +X0572* +Y04471* +X05714Y04464* +X05774Y04471D02* +X0576Y04464D01* +X05747Y04451* +Y04437* +X05754Y04431* +X05767* +X05774Y04437* +Y04444* +X05767Y04451* +X05747* +X05867Y04521D02* +Y04561D01* +X05887* +X05893Y04554* +Y04541* +X05887Y04534* +X05867* +X0588D02* +X05893Y04521D01* +X05907D02* +X0592D01* +X05913* +Y04561* +X05907Y04554* +X05967Y04561D02* +X0594D01* +Y04541* +X05953Y04548* +X0596* +X05967Y04541* +Y04528* +X0596Y04521* +X05947* +X0594Y04528* +X06237Y04191D02* +Y04231D01* +X06257* +X06263Y04225* +Y04211* +X06257Y04205* +X06237* +X0625D02* +X06263Y04191D01* +X06277D02* +X0629D01* +X06283* +Y04231* +X06277Y04225* +X0633Y04191D02* +Y04231D01* +X0631Y04211* +X06337* +X06304Y04385D02* +X06344D01* +Y04365* +X06337Y04359* +X06324* +X06317Y04365* +Y04385* +Y04372D02* +X06304Y04359D01* +Y04345D02* +Y04332D01* +Y04339* +X06344* +X06337Y04345* +Y04312D02* +X06344Y04305D01* +Y04292* +X06337Y04285* +X0633* +X06324Y04292* +Y04299* +Y04292* +X06317Y04285* +X0631* +X06304Y04292* +Y04305* +X0631Y04312* +X05778Y04255D02* +Y04282D01* +X05771Y04289* +X05758* +X05751Y04282* +Y04255* +X05758Y04249* +X05771* +X05765Y04262D02* +X05778Y04249D01* +X05771D02* +X05778Y04255D01* +X05791Y04249D02* +X05805D01* +X05798* +Y04289* +X05791Y04282* +X05851Y04249D02* +X05825D01* +X05851Y04275* +Y04282* +X05845Y04289* +X05831* +X05825Y04282* +X06015Y042D02* +Y04227D01* +X06009Y04233* +X05995* +X05989Y04227* +Y042* +X05995Y04193* +X06009* +X06002Y04207D02* +X06015Y04193D01* +X06009D02* +X06015Y042D01* +X06029D02* +X06035Y04193D01* +X06049* +X06055Y042* +Y04227* +X06049Y04233* +X06035* +X06029Y04227* +Y0422* +X06035Y04213* +X06055* +X06478Y04044D02* +Y0407D01* +X06471Y04077* +X06458* +X06451Y0407* +Y04044* +X06458Y04037* +X06471* +X06465Y0405D02* +X06478Y04037D01* +X06471D02* +X06478Y04044D01* +X06491Y0407D02* +X06498Y04077D01* +X06511* +X06518Y0407* +Y04064* +X06511Y04057* +X06518Y0405* +Y04044* +X06511Y04037* +X06498* +X06491Y04044* +Y0405* +X06498Y04057* +X06491Y04064* +Y0407* +X06498Y04057D02* +X06511D01* +X06665Y03209D02* +Y03169D01* +X06685* +X06692Y03175* +Y03202* +X06685Y03209* +X06665* +X06705Y03169D02* +X06718D01* +X06712* +Y03209* +X06705Y03202* +X06738D02* +X06745Y03209D01* +X06758* +X06765Y03202* +Y03195* +X06758Y03189* +X06751* +X06758* +X06765Y03182* +Y03175* +X06758Y03169* +X06745* +X06738Y03175* +X05892Y04227D02* +X05886Y04233D01* +X05872* +X05866Y04227* +Y042* +X05872Y04193* +X05886* +X05892Y042* +X05906Y04193D02* +X05919D01* +X05912* +Y04233* +X05906Y04227* +X05939D02* +X05946Y04233D01* +X05959* +X05966Y04227* +Y0422* +X05959Y04213* +X05966Y04207* +Y042* +X05959Y04193* +X05946* +X05939Y042* +Y04207* +X05946Y04213* +X05939Y0422* +Y04227* +X05946Y04213D02* +X05959D01* +X06566Y03358D02* +X06559Y03364D01* +X06546* +X06539Y03358* +Y03331* +X06546Y03324* +X06559* +X06566Y03331* +X06579Y03324D02* +X06592D01* +X06586* +Y03364* +X06579Y03358* +X06612Y03364D02* +X06639D01* +Y03358* +X06612Y03331* +Y03324* +X05651Y03124D02* +X05644Y03131D01* +X05631* +X05625Y03124* +Y03098* +X05631Y03091* +X05644* +X05651Y03098* +X05664Y03091D02* +Y03131D01* +X05691Y03091* +Y03131* +X05704D02* +X05731D01* +X05718* +Y03091* +X05744D02* +Y03131D01* +X05764* +X05771Y03124* +Y03111* +X05764Y03104* +X05744* +X05758D02* +X05771Y03091D01* +X05732Y03189D02* +X05719D01* +X05725* +Y03156* +X05719Y03149* +X05712* +X05705Y03156* +X05765Y03149D02* +Y03189D01* +X05745Y03169* +X05772* +X05008Y03786D02* +Y03812D01* +X05002Y03819* +X04988* +X04982Y03812* +Y03786* +X04988Y03779* +X05002* +X04995Y03792D02* +X05008Y03779D01* +X05002D02* +X05008Y03786D01* +X05022Y03819D02* +X05048D01* +Y03812* +X05022Y03786* +Y03779* +X04714Y03229D02* +Y03256D01* +X04707Y03263* +X04694* +X04687Y03256* +Y03229* +X04694Y03223* +X04707* +X04701Y03236D02* +X04714Y03223D01* +X04707D02* +X04714Y03229D01* +X04754Y03263D02* +X04741Y03256D01* +X04727Y03243* +Y03229* +X04734Y03223* +X04747* +X04754Y03229* +Y03236* +X04747Y03243* +X04727* +X04465Y03801D02* +Y03761D01* +X04492* +X04532D02* +X04505D01* +X04532Y03788* +Y03795* +X04525Y03801* +X04512* +X04505Y03795* +X04285Y03242D02* +X04279Y03249D01* +X04265* +X04259Y03242* +Y03215* +X04265Y03209* +X04279* +X04285Y03215* +X04299Y03209D02* +X04312D01* +X04305* +Y03249* +X04299Y03242* +X04359Y03249D02* +X04332D01* +Y03229* +X04345Y03235* +X04352* +X04359Y03229* +Y03215* +X04352Y03209* +X04339* +X04332Y03215* +X0459Y03901D02* +X04597Y03908D01* +Y03921* +X0459Y03928* +X04563* +X04557Y03921* +Y03908* +X04563Y03901* +X04557Y03888D02* +Y03874D01* +Y03881* +X04597* +X0459Y03888* +X04557Y03834D02* +X04597D01* +X04577Y03854* +Y03828* +X05486Y04757D02* +X05512D01* +Y0475* +X05486Y04724* +Y04717* +X05512* +X05526Y04757D02* +Y04717D01* +X05546* +X05552Y04724* +Y0475* +X05546Y04757* +X05526* +X05566Y04717D02* +X05579D01* +X05572* +Y04757* +X05566Y0475* +X05485Y04641D02* +Y04681D01* +X05505* +X05511Y04675* +Y04661* +X05505Y04655* +X05485* +X05498D02* +X05511Y04641D01* +X05525D02* +X05538D01* +X05531* +Y04681* +X05525Y04675* +X05558D02* +X05565Y04681D01* +X05578* +X05585Y04675* +Y04648* +X05578Y04641* +X05565* +X05558Y04648* +Y04675* +X05499Y045D02* +Y0454D01* +X05519* +X05525Y04534* +Y0452* +X05519Y04514* +X05499* +X05512D02* +X05525Y045D01* +X05539Y04507D02* +X05545Y045D01* +X05559* +X05565Y04507* +Y04534* +X05559Y0454* +X05545* +X05539Y04534* +Y04527* +X05545Y0452* +X05565* +X05514Y04591D02* +Y04617D01* +X05508Y04624* +X05494* +X05488Y04617* +Y04591* +X05494Y04584* +X05508* +X05501Y04597D02* +X05514Y04584D01* +X05508D02* +X05514Y04591D01* +X05554Y04624D02* +X05528D01* +Y04604* +X05541Y04611* +X05548* +X05554Y04604* +Y04591* +X05548Y04584* +X05534* +X05528Y04591* +X04915Y04414D02* +Y04374D01* +X04935* +X04942Y0438* +Y04407* +X04935Y04414* +X04915* +X04955Y04374D02* +X04968D01* +X04962* +Y04414* +X04955Y04407* +X05015Y04374D02* +X04988D01* +X05015Y044* +Y04407* +X05008Y04414* +X04995* +X04988Y04407* +X05167Y04805D02* +X0516Y04812D01* +X05147* +X0514Y04805* +Y04779* +X05147Y04772* +X0516* +X05167Y04779* +X0518Y04772D02* +X05194D01* +X05187* +Y04812* +X0518Y04805* +X05214D02* +X0522Y04812D01* +X05234* +X0524Y04805* +Y04799* +X05234Y04792* +X05227* +X05234* +X0524Y04785* +Y04779* +X05234Y04772* +X0522* +X05214Y04779* +X05555Y04469D02* +X05548Y04476D01* +X05535* +X05528Y04469* +Y04442* +X05535Y04436* +X05548* +X05555Y04442* +X05568Y04436D02* +X05581D01* +X05575* +Y04476* +X05568Y04469* +X05628Y04436D02* +X05601D01* +X05628Y04462* +Y04469* +X05621Y04476* +X05608* +X05601Y04469* +X06397Y04615D02* +Y04655D01* +X06417* +X06424Y04648* +Y04635* +X06417Y04628* +X06397* +X0641D02* +X06424Y04615D01* +X06437D02* +X0645D01* +X06444* +Y04655* +X06437Y04648* +X06566Y0477D02* +X06559Y04777D01* +X06546* +X06539Y0477* +Y04743* +X06546Y04737* +X06559* +X06566Y04743* +X06579Y04737D02* +X06592D01* +X06586* +Y04777* +X06579Y0477* +X05742Y04555D02* +X05735Y04562D01* +X05722* +X05715Y04555* +Y04529* +X05722Y04522* +X05735* +X05742Y04529* +X05755Y04522D02* +X05768D01* +X05762* +Y04562* +X05755Y04555* +X05788D02* +X05795Y04562D01* +X05808* +X05815Y04555* +Y04529* +X05808Y04522* +X05795* +X05788Y04529* +Y04555* +X0426Y04389D02* +X04267Y04396D01* +Y04409* +X0426Y04416* +X04234* +X04227Y04409* +Y04396* +X04234Y04389* +X04227Y04349D02* +Y04376D01* +X04254Y04349* +X0426* +X04267Y04356* +Y04369* +X0426Y04376* +X04337Y04389D02* +X04344Y04396D01* +Y04409* +X04337Y04416* +X0431* +X04304Y04409* +Y04396* +X0431Y04389* +X04337Y04376D02* +X04344Y04369D01* +Y04356* +X04337Y04349* +X0433* +X04324Y04356* +Y04363* +Y04356* +X04317Y04349* +X0431* +X04304Y04356* +Y04369* +X0431Y04376* +X04044Y04185D02* +X04037Y04192D01* +X04024* +X04017Y04185* +Y04159* +X04024Y04152* +X04037* +X04044Y04159* +X04077Y04152D02* +Y04192D01* +X04057Y04172* +X04084* +X04416Y04285D02* +X04409Y04291D01* +X04396* +X04389Y04285* +Y04258* +X04396Y04251* +X04409* +X04416Y04258* +X04456Y04291D02* +X04429D01* +Y04271* +X04443Y04278* +X04449* +X04456Y04271* +Y04258* +X04449Y04251* +X04436* +X04429Y04258* +X04817Y04219D02* +X04824Y04226D01* +Y04239* +X04817Y04246* +X04791* +X04784Y04239* +Y04226* +X04791Y04219* +X04824Y04179D02* +X04817Y04192D01* +X04804Y04206* +X04791* +X04784Y04199* +Y04186* +X04791Y04179* +X04797* +X04804Y04186* +Y04206* +X05954Y0317D02* +X05948Y03176D01* +X05934* +X05928Y0317* +Y03143* +X05934Y03136* +X05948* +X05954Y03143* +X05968D02* +X05974Y03136D01* +X05988* +X05994Y03143* +Y0317* +X05988Y03176* +X05974* +X05968Y0317* +Y03163* +X05974Y03156* +X05994* +X04901Y04219D02* +X04908Y04226D01* +Y04239* +X04901Y04246* +X04874* +X04868Y04239* +Y04226* +X04874Y04219* +X04908Y04206D02* +Y04179D01* +X04901* +X04874Y04206* +X04868* +X05207Y03836D02* +X05201Y03843D01* +X05187* +X05181Y03836* +Y03809* +X05187Y03803* +X05201* +X05207Y03809* +X05221Y03836D02* +X05227Y03843D01* +X05241* +X05247Y03836* +Y03829* +X05241Y03823* +X05247Y03816* +Y03809* +X05241Y03803* +X05227* +X05221Y03809* +Y03816* +X05227Y03823* +X05221Y03829* +Y03836* +X05227Y03823D02* +X05241D01* +X05945Y05393D02* +X05905D01* +Y05373* +X05912Y05367* +X05938* +X05945Y05373* +Y05393* +X05905Y05333D02* +X05945D01* +X05925Y05353* +Y05327* +X05748Y05393D02* +X05708D01* +Y05373* +X05715Y05367* +X05741* +X05748Y05373* +Y05393* +X05741Y05353D02* +X05748Y05347D01* +Y05333* +X05741Y05327* +X05735* +X05728Y05333* +Y0534* +Y05333* +X05721Y05327* +X05715* +X05708Y05333* +Y05347* +X05715Y05353* +X06417Y05393D02* +X06377D01* +Y05373* +X06384Y05367* +X06411* +X06417Y05373* +Y05393* +X06377Y05327D02* +Y05353D01* +X06404Y05327* +X06411* +X06417Y05333* +Y05347* +X06411Y05353* +X0613Y03177D02* +Y03137D01* +X0615* +X06157Y03144* +Y03171* +X0615Y03177* +X0613* +X0617Y03144D02* +X06177Y03137D01* +X0619* +X06197Y03144* +Y03171* +X0619Y03177* +X06177* +X0617Y03171* +Y03164* +X06177Y03157* +X06197* +X04948Y04356D02* +Y04316D01* +X04968* +X04975Y04323* +Y0435* +X04968Y04356* +X04948* +X05015D02* +X04988D01* +Y04336* +X05002Y04343* +X05008* +X05015Y04336* +Y04323* +X05008Y04316* +X04995* +X04988Y04323* +X04659Y0415D02* +Y0411D01* +X04679* +X04686Y04116* +Y04143* +X04679Y0415* +X04659* +X04699D02* +X04726D01* +Y04143* +X04699Y04116* +Y0411* +X06327Y04771D02* +Y04731D01* +X06347* +X06354Y04737* +Y04764* +X06347Y04771* +X06327* +X06367Y04764D02* +X06374Y04771D01* +X06387* +X06394Y04764* +Y04757* +X06387Y04751* +X06394Y04744* +Y04737* +X06387Y04731* +X06374* +X06367Y04737* +Y04744* +X06374Y04751* +X06367Y04757* +Y04764* +X06374Y04751D02* +X06387D01* +X06327Y04444D02* +Y04404D01* +X06347* +X06354Y04411* +Y04437* +X06347Y04444* +X06327* +X06367Y04404D02* +X06381D01* +X06374* +Y04444* +X06367Y04437* +X06401D02* +X06407Y04444D01* +X06421* +X06427Y04437* +Y04411* +X06421Y04404* +X06407* +X06401Y04411* +Y04437* +X06788Y05238D02* +Y05264D01* +X06768* +X06774Y05251* +Y05244* +X06768Y05238* +X06754* +X06748Y05244* +Y05258* +X06754Y05264* +X06748Y05224D02* +X06774D01* +X06788Y05211* +X06774Y05198* +X06748* +X06768* +Y05224* +X06624Y05283D02* +Y0531D01* +X06604* +Y05296* +Y0531* +X06584* +X06624Y0527D02* +X06591D01* +X06584Y05263* +Y0525* +X06591Y05243* +X06624* +X06617Y05203D02* +X06624Y0521D01* +Y05223* +X06617Y0523* +X06611* +X06604Y05223* +Y0521* +X06597Y05203* +X06591* +X06584Y0521* +Y05223* +X06591Y0523* +X06624Y05163D02* +Y0519D01* +X06584* +Y05163* +X06604Y0519D02* +Y05176D01* +X06584Y0515D02* +Y05136D01* +Y05143* +X06624* +X06617Y0515* +X06112Y06026D02* +Y06053D01* +X06138Y06026* +X06145* +X06152Y06033* +Y06046* +X06145Y06053* +X06112Y05993D02* +X06152D01* +X06132Y06013* +Y05986* +X06152Y05973D02* +X06125D01* +X06112Y05959* +X06125Y05946* +X06152* +X06112Y05933D02* +X06138D01* +X06152Y05919* +X06138Y05906* +X06112* +X06132* +Y05933* +X06145Y05866D02* +X06152Y05873D01* +Y05886* +X06145Y05893* +X06118* +X06112Y05886* +Y05873* +X06118Y05866* +X0634Y05814D02* +X06327D01* +X06333* +Y05781* +X06327Y05774* +X0632* +X06313Y05781* +X06353Y05774D02* +X06367D01* +X0636* +Y05814* +X06353Y05807* +X06564Y0311D02* +X06578D01* +X06571* +Y0307* +X06564* +X06578* +X06598D02* +Y0311D01* +X06618* +X06624Y03104* +Y0309* +X06618Y03084* +X06598* +X06611D02* +X06624Y0307D01* +X06658Y0311D02* +X06644D01* +X06638Y03104* +Y03077* +X06644Y0307* +X06658* +X06664Y03077* +Y03104* +X06658Y0311* +X06678Y0307D02* +Y0311D01* +X06704Y0307* +Y0311* +X06585Y03043D02* +X06572D01* +X06579* +Y0301* +X06572Y03003* +X06565* +X06559Y0301* +X06625Y03003D02* +X06599D01* +X06625Y0303* +Y03037* +X06619Y03043* +X06605* +X06599Y03037* +X04337Y0481D02* +Y0477D01* +X04364* +X04377D02* +X0439D01* +X04384* +Y0481* +X04377Y04803* +X06479Y0435D02* +Y04376D01* +X06472Y04383* +X06459* +X06452Y04376* +Y0435* +X06459Y04343* +X06472* +X06466Y04356D02* +X06479Y04343D01* +X06472D02* +X06479Y0435D01* +X06519Y04343D02* +X06492D01* +X06519Y0437* +Y04376* +X06512Y04383* +X06499* +X06492Y04376* +X06015Y04528D02* +Y04554D01* +X06009Y04561* +X05995* +X05989Y04554* +Y04528* +X05995Y04521* +X06009* +X06002Y04534D02* +X06015Y04521D01* +X06009D02* +X06015Y04528D01* +X06029Y04554D02* +X06035Y04561D01* +X06049* +X06055Y04554* +Y04548* +X06049Y04541* +X06042* +X06049* +X06055Y04534* +Y04528* +X06049Y04521* +X06035* +X06029Y04528* +X05736Y04714D02* +Y04741D01* +X05729Y04747* +X05716* +X05709Y04741* +Y04714* +X05716Y04707* +X05729* +X05722Y04721D02* +X05736Y04707D01* +X05729D02* +X05736Y04714D01* +X05769Y04707D02* +Y04747D01* +X05749Y04727* +X05776* +X04992Y04215D02* +Y04241D01* +X04985Y04248* +X04972* +X04965Y04241* +Y04215* +X04972Y04208* +X04985* +X04978Y04221D02* +X04992Y04208D01* +X04985D02* +X04992Y04215D01* +X05005Y04208D02* +X05018D01* +X05012* +Y04248* +X05005Y04241* +X06315Y04554D02* +Y04594D01* +X06335* +X06342Y04587* +Y04574* +X06335Y04567* +X06315* +X06329D02* +X06342Y04554D01* +X06382Y04594D02* +X06369Y04587D01* +X06355Y04574* +Y0456* +X06362Y04554* +X06375* +X06382Y0456* +Y04567* +X06375Y04574* +X06355* +X06302Y04698D02* +X06342D01* +Y04678* +X06335Y04672* +X06322* +X06315Y04678* +Y04698* +Y04685D02* +X06302Y04672D01* +X06342Y04632D02* +Y04658D01* +X06322* +X06328Y04645* +Y04638* +X06322Y04632* +X06308* +X06302Y04638* +Y04652* +X06308Y04658* +X05259Y0429D02* +Y0433D01* +X05279* +X05286Y04323* +Y0431* +X05279Y04303* +X05259* +X05273D02* +X05286Y0429D01* +X05326D02* +X05299D01* +X05326Y04317* +Y04323* +X05319Y0433* +X05306* +X05299Y04323* +X05709Y04633D02* +Y04673D01* +X05729* +X05736Y04667* +Y04653* +X05729Y04647* +X05709* +X05722D02* +X05736Y04633D01* +X05749Y04667D02* +X05756Y04673D01* +X05769* +X05776Y04667* +Y0466* +X05769Y04653* +X05776Y04647* +Y0464* +X05769Y04633* +X05756* +X05749Y0464* +Y04647* +X05756Y04653* +X05749Y0466* +Y04667* +X05756Y04653D02* +X05769D01* +X04154Y04416D02* +X04194D01* +Y04396* +X04187Y04389* +X04174* +X04167Y04396* +Y04416* +Y04403D02* +X04154Y04389D01* +X04187Y04376D02* +X04194Y04369D01* +Y04356* +X04187Y04349* +X04181* +X04174Y04356* +Y04363* +Y04356* +X04167Y04349* +X04161* +X04154Y04356* +Y04369* +X04161Y04376* +X04376Y03812D02* +Y03852D01* +X04395* +X04402Y03845* +Y03832* +X04395Y03825* +X04376* +X04389D02* +X04402Y03812D01* +X04435D02* +Y03852D01* +X04415Y03832* +X04442* +X05965Y04849D02* +Y04889D01* +X05985* +X05992Y04882* +Y04869* +X05985Y04862* +X05965* +X05978D02* +X05992Y04849D01* +X06005Y04889D02* +X06032D01* +Y04882* +X06005Y04856* +Y04849* +X04471Y03941D02* +Y03908D01* +X04478Y03901* +X04491* +X04498Y03908* +Y03941* +X04511Y03901D02* +X04524D01* +X04518* +Y03941* +X04511Y03934* +X06104Y04888D02* +X0613D01* +Y04881* +X06104Y04855* +Y04848* +X0613* +X06144Y04888D02* +Y04848D01* +X06164* +X0617Y04855* +Y04881* +X06164Y04888* +X06144* +X0621D02* +X06197Y04881D01* +X06184Y04868* +Y04855* +X0619Y04848* +X06204* +X0621Y04855* +Y04861* +X06204Y04868* +X06184* +X0511Y04853D02* +Y04826D01* +X05104* +X05077Y04853* +X0507* +Y04826* +X0511Y04813D02* +X0507D01* +Y04793* +X05077Y04786* +X05104* +X0511Y04793* +Y04813* +X05104Y04773D02* +X0511Y04766D01* +Y04753* +X05104Y04746* +X05097* +X0509Y04753* +Y0476* +Y04753* +X05084Y04746* +X05077* +X0507Y04753* +Y04766* +X05077Y04773* +X06221Y05393D02* +X06181D01* +Y05373* +X06187Y05367* +X06214* +X06221Y05373* +Y05393* +X06181Y05353D02* +Y0534D01* +Y05347* +X06221* +X06214Y05353* +X04503Y02876D02* +X04489D01* +X04496* +Y02843* +X04489Y02836* +X04483* +X04476Y02843* +X04543Y02876D02* +X04516D01* +Y02856* +X04529Y02863* +X04536* +X04543Y02856* +Y02843* +X04536Y02836* +X04523* +X04516Y02843* +X04729Y03733D02* +X04722Y03739D01* +X04709* +X04702Y03733* +Y03706* +X04709Y03699* +X04722* +X04729Y03706* +X04742Y03699D02* +X04756D01* +X04749* +Y03739* +X04742Y03733* +X04802Y03739D02* +X04789Y03733D01* +X04776Y03719* +Y03706* +X04782Y03699* +X04796* +X04802Y03706* +Y03713* +X04796Y03719* +X04776* +X03962Y03244D02* +Y03284D01* +X03982* +X03989Y03277* +Y03264* +X03982Y03257* +X03962* +X04002Y03284D02* +Y03244D01* +X04015Y03257* +X04029Y03244* +Y03284* +X04042Y03244D02* +Y03284D01* +X04062* +X04069Y03277* +Y03264* +X04062Y03257* +X04042* +X04055D02* +X04069Y03244D01* +X0416Y03308D02* +X04147D01* +X04153* +Y03275* +X04147Y03268* +X0414* +X04133Y03275* +X04173Y03302D02* +X0418Y03308D01* +X04193* +X042Y03302* +Y03295* +X04193Y03288* +X04187* +X04193* +X042Y03282* +Y03275* +X04193Y03268* +X0418* +X04173Y03275* +X06328Y04109D02* +X06322Y04115D01* +X06308* +X06302Y04109* +Y04082* +X06308Y04075* +X06322* +X06328Y04082* +X06342Y04075D02* +X06355D01* +X06348* +Y04115* +X06342Y04109* +X06375Y04082D02* +X06382Y04075D01* +X06395* +X06402Y04082* +Y04109* +X06395Y04115* +X06382* +X06375Y04109* +Y04102* +X06382Y04095* +X06402* +X0633Y04027D02* +X06323Y04034D01* +X0631* +X06303Y04027* +Y04* +X0631Y03994* +X06323* +X0633Y04* +X0637Y03994D02* +X06343D01* +X0637Y0402* +Y04027* +X06363Y04034* +X0635* +X06343Y04027* +X06383D02* +X06389Y04034D01* +X06403* +X06409Y04027* +Y04* +X06403Y03994* +X06389* +X06383Y04* +Y04027* +X05716Y0411D02* +Y04136D01* +X05709Y04143* +X05696* +X05689Y04136* +Y0411* +X05696Y04103* +X05709* +X05703Y04116D02* +X05716Y04103D01* +X05709D02* +X05716Y0411D01* +X05729Y04103D02* +X05743D01* +X05736* +Y04143* +X05729Y04136* +X05763D02* +X05769Y04143D01* +X05783* +X05789Y04136* +Y0413* +X05783Y04123* +X05776* +X05783* +X05789Y04116* +Y0411* +X05783Y04103* +X05769* +X05763Y0411* +X05717Y03803D02* +Y03843D01* +X05737* +X05744Y03836* +Y03823* +X05737Y03816* +X05717* +X0573D02* +X05744Y03803D01* +X05757D02* +X0577D01* +X05764* +Y03843* +X05757Y03836* +X0579Y03809D02* +X05797Y03803D01* +X0581* +X05817Y03809* +Y03836* +X0581Y03843* +X05797* +X0579Y03836* +Y03829* +X05797Y03823* +X05817* +X05845Y03833D02* +X05872D01* +Y03826* +X05845Y03799* +Y03793* +X05872* +X05885Y03833D02* +Y03793D01* +X05905* +X05912Y03799* +Y03826* +X05905Y03833* +X05885* +X05952D02* +X05925D01* +Y03813* +X05938Y03819* +X05945* +X05952Y03813* +Y03799* +X05945Y03793* +X05932* +X05925Y03799* +X05732Y04201D02* +Y04161D01* +X05752* +X05758Y04168* +Y04194* +X05752Y04201* +X05732* +X05772Y04161D02* +X05785D01* +X05778* +Y04201* +X05772Y04194* +X05825Y04161D02* +Y04201D01* +X05805Y04181* +X05832* +X05694Y04046D02* +Y04086D01* +X05714* +X05721Y04079* +Y04066* +X05714Y04059* +X05694* +X05708D02* +X05721Y04046D01* +X05761D02* +X05734D01* +X05761Y04072* +Y04079* +X05754Y04086* +X05741* +X05734Y04079* +X05774D02* +X05781Y04086D01* +X05794* +X05801Y04079* +Y04052* +X05794Y04046* +X05781* +X05774Y04052* +Y04079* +X05558Y04414D02* +Y04375D01* +X05578* +X05584Y04381* +Y04408* +X05578Y04414* +X05558* +X05598Y04375D02* +X05611D01* +X05604* +Y04414* +X05598Y04408* +X05631Y04375D02* +X05644D01* +X05638* +Y04414* +X05631Y04408* +X05014Y03729D02* +X05008Y03735D01* +X04994* +X04988Y03729* +Y03702* +X04994Y03695* +X05008* +X05014Y03702* +X05028Y03695D02* +X05041D01* +X05034* +Y03735* +X05028Y03729* +X05061Y03695D02* +X05074D01* +X05068* +Y03735* +X05061Y03729* +X05656Y04249D02* +Y04209D01* +X05676* +X05683Y04216* +Y04242* +X05676Y04249* +X05656* +X05723D02* +X05709Y04242D01* +X05696Y04229* +Y04216* +X05703Y04209* +X05716* +X05723Y04216* +Y04222* +X05716Y04229* +X05696* +X0561Y06016D02* +Y06043D01* +X05636Y06016* +X05643* +X0565Y06023* +Y06036* +X05643Y06043* +X0561Y05983D02* +X0565D01* +X0563Y06003* +Y05976* +X0565Y05963D02* +X05623D01* +X0561Y0595* +X05623Y05936* +X0565* +Y05923D02* +X0561D01* +Y05903* +X05616Y05896* +X05643* +X0565Y05903* +Y05923* +X05643Y05856D02* +X0565Y05863D01* +Y05876* +X05643Y05883* +X05616* +X0561Y05876* +Y05863* +X05616Y05856* +X05852Y05809D02* +X05839D01* +X05845* +Y05776* +X05839Y05769* +X05832* +X05825Y05776* +X05865Y05809D02* +X05892D01* +Y05803* +X05865Y05776* +Y05769* +X04891Y03095D02* +X04865D01* +Y03075* +X04878Y03081* +X04885* +X04891Y03075* +Y03061* +X04885Y03055* +X04871* +X04865Y03061* +X04905Y03055D02* +Y03061D01* +X04911* +Y03055* +X04905* +X04965D02* +X04938D01* +X04965Y03081* +Y03088* +X04958Y03095* +X04945* +X04938Y03088* +X04316Y02817D02* +Y02777D01* +Y02797* +X04343* +Y02817* +Y02777* +X04376Y02817D02* +X04363D01* +X04356Y0281* +Y02784* +X04363Y02777* +X04376* +X04383Y02784* +Y0281* +X04376Y02817* +X04396D02* +Y02777D01* +X04423* +X04436Y02817D02* +Y02777D01* +X04456* +X04463Y02784* +Y0281* +X04456Y02817* +X04436* +X04503D02* +X04476D01* +Y02777* +X04503* +X04476Y02797D02* +X0449D01* +X04516Y02777D02* +Y02817D01* +X04536* +X04543Y0281* +Y02797* +X04536Y0279* +X04516* +X0453D02* +X04543Y02777D01* +G54D77* +X05093Y04531D02* +Y0457D01* +X05073Y04551D02* +X05113D01* +G54D78* +X05276Y04036D02* +X05315D01* +X05296Y04056D02* +Y04016D01* +X05156Y03498D02* +X05117D01* +X05137Y03478D02* +Y03518D01* +X03971Y04121D02* +X0401D01* +X0399Y04141D02* +Y04101D01* +G54D79* +X05499Y05277D03* +X06208Y05204D03* +X06444Y05203D03* +X05736Y05557D03* +X05972D03* +M02* \ No newline at end of file diff --git a/hardware/gerber/unisolder52_back.gts b/hardware/gerber/unisolder52_back.gts new file mode 100644 index 0000000..e425131 --- /dev/null +++ b/hardware/gerber/unisolder52_back.gts @@ -0,0 +1,579 @@ +%FSTAX23Y23*% +%MOIN*% +%SFA1B1*% + +%IPPOS*% +%AMD81* +4,1,8,0.029600,-0.027800,0.029600,0.027800,0.017900,0.039400,-0.017900,0.039400,-0.029600,0.027800,-0.029600,-0.027800,-0.017900,-0.039400,0.017900,-0.039400,0.029600,-0.027800,0.0* +1,1,0.023360,0.017900,-0.027800* +1,1,0.023360,0.017900,0.027800* +1,1,0.023360,-0.017900,0.027800* +1,1,0.023360,-0.017900,-0.027800* +% +%AMD82* +4,1,8,-0.041400,0.015000,-0.041400,-0.015000,-0.033700,-0.022700,0.033700,-0.022700,0.041400,-0.015000,0.041400,0.015000,0.033700,0.022700,-0.033700,0.022700,-0.041400,0.015000,0.0* +1,1,0.015480,-0.033700,0.015000* +1,1,0.015480,-0.033700,-0.015000* +1,1,0.015480,0.033700,-0.015000* +1,1,0.015480,0.033700,0.015000* +% +%AMD83* +4,1,8,-0.149700,0.102900,-0.149700,-0.102900,-0.140300,-0.112300,0.140300,-0.112300,0.149700,-0.102900,0.149700,0.102900,0.140300,0.112300,-0.140300,0.112300,-0.149700,0.102900,0.0* +1,1,0.018820,-0.140300,0.102900* +1,1,0.018820,-0.140300,-0.102900* +1,1,0.018820,0.140300,-0.102900* +1,1,0.018820,0.140300,0.102900* +% +%AMD84* +4,1,8,-0.018700,-0.069000,0.018700,-0.069000,0.041400,-0.046300,0.041400,0.046300,0.018700,0.069000,-0.018700,0.069000,-0.041400,0.046300,-0.041400,-0.046300,-0.018700,-0.069000,0.0* +1,1,0.045400,-0.018700,-0.046300* +1,1,0.045400,0.018700,-0.046300* +1,1,0.045400,0.018700,0.046300* +1,1,0.045400,-0.018700,0.046300* +% +%AMD85* +4,1,8,-0.006900,-0.044400,0.006900,-0.044400,0.017800,-0.033500,0.017800,0.033500,0.006900,0.044400,-0.006900,0.044400,-0.017800,0.033500,-0.017800,-0.033500,-0.006900,-0.044400,0.0* +1,1,0.021780,-0.006900,-0.033500* +1,1,0.021780,0.006900,-0.033500* +1,1,0.021780,0.006900,0.033500* +1,1,0.021780,-0.006900,0.033500* +% +%AMD86* +4,1,8,-0.006900,-0.030600,0.006900,-0.030600,0.017800,-0.019700,0.017800,0.019700,0.006900,0.030600,-0.006900,0.030600,-0.017800,0.019700,-0.017800,-0.019700,-0.006900,-0.030600,0.0* +1,1,0.021780,-0.006900,-0.019700* +1,1,0.021780,0.006900,-0.019700* +1,1,0.021780,0.006900,0.019700* +1,1,0.021780,-0.006900,0.019700* +% +%AMD87* +4,1,8,-0.029600,0.008300,-0.029600,-0.008300,-0.022000,-0.015800,0.022000,-0.015800,0.029600,-0.008300,0.029600,0.008300,0.022000,0.015800,-0.022000,0.015800,-0.029600,0.008300,0.0* +1,1,0.015080,-0.022000,0.008300* +1,1,0.015080,-0.022000,-0.008300* +1,1,0.015080,0.022000,-0.008300* +1,1,0.015080,0.022000,0.008300* +% +%AMD88* +4,1,8,0.013800,0.049000,-0.013800,0.049000,-0.023700,0.039100,-0.023700,-0.039100,-0.013800,-0.049000,0.013800,-0.049000,0.023700,-0.039100,0.023700,0.039100,0.013800,0.049000,0.0* +1,1,0.019820,0.013800,0.039100* +1,1,0.019820,-0.013800,0.039100* +1,1,0.019820,-0.013800,-0.039100* +1,1,0.019820,0.013800,-0.039100* +% +%AMD89* +4,1,8,0.104700,0.151600,-0.104700,0.151600,-0.114200,0.142100,-0.114200,-0.142100,-0.104700,-0.151600,0.104700,-0.151600,0.114200,-0.142100,0.114200,0.142100,0.104700,0.151600,0.0* +1,1,0.019020,0.104700,0.142100* +1,1,0.019020,-0.104700,0.142100* +1,1,0.019020,-0.104700,-0.142100* +1,1,0.019020,0.104700,-0.142100* +% +%AMD90* +4,1,8,-0.041400,0.008300,-0.041400,-0.008300,-0.033900,-0.015800,0.033900,-0.015800,0.041400,-0.008300,0.041400,0.008300,0.033900,0.015800,-0.033900,0.015800,-0.041400,0.008300,0.0* +1,1,0.015080,-0.033900,0.008300* +1,1,0.015080,-0.033900,-0.008300* +1,1,0.015080,0.033900,-0.008300* +1,1,0.015080,0.033900,0.008300* +% +%AMD93* +4,1,8,0.026100,0.028600,-0.026100,0.028600,-0.037500,0.017200,-0.037500,-0.017200,-0.026100,-0.028600,0.026100,-0.028600,0.037500,-0.017200,0.037500,0.017200,0.026100,0.028600,0.0* +1,1,0.022760,0.026100,0.017200* +1,1,0.022760,-0.026100,0.017200* +1,1,0.022760,-0.026100,-0.017200* +1,1,0.022760,0.026100,-0.017200* +% +%AMD94* +4,1,8,-0.142000,-0.088100,0.142000,-0.088100,0.154400,-0.075600,0.154400,0.075600,0.142000,0.088100,-0.142000,0.088100,-0.154400,0.075600,-0.154400,-0.075600,-0.142000,-0.088100,0.0* +1,1,0.024820,-0.142000,-0.075600* +1,1,0.024820,0.142000,-0.075600* +1,1,0.024820,0.142000,0.075600* +1,1,0.024820,-0.142000,0.075600* +% +%AMD95* +4,1,8,-0.029400,-0.088100,0.029400,-0.088100,0.036700,-0.080800,0.036700,0.080800,0.029400,0.088100,-0.029400,0.088100,-0.036700,0.080800,-0.036700,-0.080800,-0.029400,-0.088100,0.0* +1,1,0.014540,-0.029400,-0.080800* +1,1,0.014540,0.029400,-0.080800* +1,1,0.014540,0.029400,0.080800* +1,1,0.014540,-0.029400,0.080800* +% +%AMD96* +4,1,8,0.052000,0.064000,-0.052000,0.064000,-0.068000,0.048000,-0.068000,-0.048000,-0.052000,-0.064000,0.052000,-0.064000,0.068000,-0.048000,0.068000,0.048000,0.052000,0.064000,0.0* +1,1,0.032000,0.052000,0.048000* +1,1,0.032000,-0.052000,0.048000* +1,1,0.032000,-0.052000,-0.048000* +1,1,0.032000,0.052000,-0.048000* +% +%AMD97* +4,1,8,0.071500,-0.103500,0.071500,0.103500,0.060700,0.114200,-0.060700,0.114200,-0.071500,0.103500,-0.071500,-0.103500,-0.060700,-0.114200,0.060700,-0.114200,0.071500,-0.103500,0.0* +1,1,0.021500,0.060700,-0.103500* +1,1,0.021500,0.060700,0.103500* +1,1,0.021500,-0.060700,0.103500* +1,1,0.021500,-0.060700,-0.103500* +% +%AMD98* +4,1,8,0.040200,0.039400,-0.040200,0.039400,-0.051200,0.028300,-0.051200,-0.028300,-0.040200,-0.039400,0.040200,-0.039400,0.051200,-0.028300,0.051200,0.028300,0.040200,0.039400,0.0* +1,1,0.022180,0.040200,0.028300* +1,1,0.022180,-0.040200,0.028300* +1,1,0.022180,-0.040200,-0.028300* +1,1,0.022180,0.040200,-0.028300* +% +%AMD99* +4,1,8,0.020800,0.033100,-0.020800,0.033100,-0.033500,0.020400,-0.033500,-0.020400,-0.020800,-0.033100,0.020800,-0.033100,0.033500,-0.020400,0.033500,0.020400,0.020800,0.033100,0.0* +1,1,0.025480,0.020800,0.020400* +1,1,0.025480,-0.020800,0.020400* +1,1,0.025480,-0.020800,-0.020400* +1,1,0.025480,0.020800,-0.020400* +% +%AMD100* +4,1,8,-0.021800,-0.029600,0.021800,-0.029600,0.033500,-0.017900,0.033500,0.017900,0.021800,0.029600,-0.021800,0.029600,-0.033500,0.017900,-0.033500,-0.017900,-0.021800,-0.029600,0.0* +1,1,0.023360,-0.021800,-0.017900* +1,1,0.023360,0.021800,-0.017900* +1,1,0.023360,0.021800,0.017900* +1,1,0.023360,-0.021800,0.017900* +% +%AMD101* +4,1,8,0.029600,-0.021800,0.029600,0.021800,0.017900,0.033500,-0.017900,0.033500,-0.029600,0.021800,-0.029600,-0.021800,-0.017900,-0.033500,0.017900,-0.033500,0.029600,-0.021800,0.0* +1,1,0.023360,0.017900,-0.021800* +1,1,0.023360,0.017900,0.021800* +1,1,0.023360,-0.017900,0.021800* +1,1,0.023360,-0.017900,-0.021800* +% +%AMD102* +4,1,8,0.008300,0.029600,-0.008300,0.029600,-0.015800,0.022000,-0.015800,-0.022000,-0.008300,-0.029600,0.008300,-0.029600,0.015800,-0.022000,0.015800,0.022000,0.008300,0.029600,0.0* +1,1,0.015080,0.008300,0.022000* +1,1,0.015080,-0.008300,0.022000* +1,1,0.015080,-0.008300,-0.022000* +1,1,0.015080,0.008300,-0.022000* +% +%AMD103* +4,1,8,0.028600,-0.026100,0.028600,0.026100,0.017200,0.037500,-0.017200,0.037500,-0.028600,0.026100,-0.028600,-0.026100,-0.017200,-0.037500,0.017200,-0.037500,0.028600,-0.026100,0.0* +1,1,0.022760,0.017200,-0.026100* +1,1,0.022760,0.017200,0.026100* +1,1,0.022760,-0.017200,0.026100* +1,1,0.022760,-0.017200,-0.026100* +% +%AMD104* +4,1,8,-0.039400,0.040200,-0.039400,-0.040200,-0.028300,-0.051200,0.028300,-0.051200,0.039400,-0.040200,0.039400,0.040200,0.028300,0.051200,-0.028300,0.051200,-0.039400,0.040200,0.0* +1,1,0.022180,-0.028300,0.040200* +1,1,0.022180,-0.028300,-0.040200* +1,1,0.022180,0.028300,-0.040200* +1,1,0.022180,0.028300,0.040200* +% +%AMD105* +4,1,8,0.027800,0.029600,-0.027800,0.029600,-0.039400,0.017900,-0.039400,-0.017900,-0.027800,-0.029600,0.027800,-0.029600,0.039400,-0.017900,0.039400,0.017900,0.027800,0.029600,0.0* +1,1,0.023360,0.027800,0.017900* +1,1,0.023360,-0.027800,0.017900* +1,1,0.023360,-0.027800,-0.017900* +1,1,0.023360,0.027800,-0.017900* +% +%AMD106* +4,1,8,0.049300,-0.036200,0.049300,0.036200,0.036200,0.049300,-0.036200,0.049300,-0.049300,0.036200,-0.049300,-0.036200,-0.036200,-0.049300,0.036200,-0.049300,0.049300,-0.036200,0.0* +1,1,0.026120,0.036200,-0.036200* +1,1,0.026120,0.036200,0.036200* +1,1,0.026120,-0.036200,0.036200* +1,1,0.026120,-0.036200,-0.036200* +% +%AMD110* +4,1,8,0.072900,-0.055100,0.072900,0.055100,0.055100,0.072900,-0.055100,0.072900,-0.072900,0.055100,-0.072900,-0.055100,-0.055100,-0.072900,0.055100,-0.072900,0.072900,-0.055100,0.0* +1,1,0.035560,0.055100,-0.055100* +1,1,0.035560,0.055100,0.055100* +1,1,0.035560,-0.055100,0.055100* +1,1,0.035560,-0.055100,-0.055100* +% +%AMD111* +4,1,8,-0.033500,0.020700,-0.033500,-0.020700,-0.020700,-0.033500,0.020700,-0.033500,0.033500,-0.020700,0.033500,0.020700,0.020700,0.033500,-0.020700,0.033500,-0.033500,0.020700,0.0* +1,1,0.025720,-0.020700,0.020700* +1,1,0.025720,-0.020700,-0.020700* +1,1,0.025720,0.020700,-0.020700* +1,1,0.025720,0.020700,0.020700* +% +%AMD113* +4,1,8,0.025500,0.040400,-0.025500,0.040400,-0.040400,0.025500,-0.040400,-0.025500,-0.025500,-0.040400,0.025500,-0.040400,0.040400,-0.025500,0.040400,0.025500,0.025500,0.040400,0.0* +1,1,0.029860,0.025500,0.025500* +1,1,0.029860,-0.025500,0.025500* +1,1,0.029860,-0.025500,-0.025500* +1,1,0.029860,0.025500,-0.025500* +% +%AMD116* +4,1,8,0.059100,-0.038600,0.059100,0.038600,0.038600,0.059100,-0.038600,0.059100,-0.059100,0.038600,-0.059100,-0.038600,-0.038600,-0.059100,0.038600,-0.059100,0.059100,-0.038600,0.0* +1,1,0.041080,0.038600,-0.038600* +1,1,0.041080,0.038600,0.038600* +1,1,0.041080,-0.038600,0.038600* +1,1,0.041080,-0.038600,-0.038600* +% +%AMD117* +4,1,8,-0.017500,-0.039000,0.017500,-0.039000,0.039000,-0.017500,0.039000,0.017500,0.017500,0.039000,-0.017500,0.039000,-0.039000,0.017500,-0.039000,-0.017500,-0.017500,-0.039000,0.0* +1,1,0.043000,-0.017500,-0.017500* +1,1,0.043000,0.017500,-0.017500* +1,1,0.043000,0.017500,0.017500* +1,1,0.043000,-0.017500,0.017500* +% +%AMD121* +4,1,8,0.046600,0.010500,0.010500,0.046600,-0.010500,0.046600,-0.046600,0.010500,-0.046600,-0.010500,-0.010500,-0.046600,0.010500,-0.046600,0.046600,-0.010500,0.046600,0.010500,0.0* +1,1,0.029860,0.036100,0.000000* +1,1,0.029860,0.000000,0.036100* +1,1,0.029860,-0.036100,0.000000* +1,1,0.029860,0.000000,-0.036100* +% +%ADD80R,0.066000X0.028000*% +G04~CAMADD=81~8~0.0~0.0~788.7~591.8~116.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~592.0~788.0* +%ADD81D81*% +G04~CAMADD=82~8~0.0~0.0~454.0~828.0~77.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~828.0~454.0* +%ADD82D82*% +G04~CAMADD=83~8~0.0~0.0~2245.3~2993.4~94.1~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~2994.0~2246.0* +%ADD83D83*% +G04~CAMADD=84~8~0.0~0.0~828.0~1379.2~227.0~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~829.0~1380.0* +%ADD84D84*% +G04~CAMADD=85~8~0.0~0.0~355.6~888.7~108.9~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~356.0~889.0* +%ADD85D85*% +G04~CAMADD=86~8~0.0~0.0~355.6~611.5~108.9~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~356.0~612.0* +%ADD86D86*% +G04~CAMADD=87~8~0.0~0.0~316.2~591.8~75.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~592.0~316.0* +%ADD87D87*% +G04~CAMADD=88~8~0.0~0.0~473.7~980.0~99.1~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~473.7~980.0* +%ADD88D88*% +G04~CAMADD=89~8~0.0~0.0~2284.7~3032.8~95.1~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~2284.7~3032.8* +%ADD89D89*% +G04~CAMADD=90~8~0.0~0.0~316.2~828.0~75.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~828.0~316.0* +%ADD90D90*% +%ADD91O,0.082800X0.031620*% +%ADD92O,0.031620X0.094610*% +G04~CAMADD=93~8~0.0~0.0~749.3~572.1~113.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~749.3~572.1* +%ADD93D93*% +G04~CAMADD=94~8~0.0~0.0~3087.9~1761.1~124.1~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~3088.0~1761.0* +%ADD94D94*% +G04~CAMADD=95~8~0.0~0.0~733.5~1761.1~72.7~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~734.0~1762.0* +%ADD95D95*% +G04~CAMADD=96~8~0.0~0.0~1359.5~1280.0~160.0~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~1359.5~1280.0* +%ADD96D96*% +G04~CAMADD=97~8~0.0~0.0~2284.7~1430.0~107.5~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~1430.0~2284.0* +%ADD97D97*% +G04~CAMADD=98~8~0.0~0.0~1024.9~788.7~110.9~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~1024.9~788.7* +%ADD98D98*% +G04~CAMADD=99~8~0.0~0.0~670.6~662.7~127.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~670.6~662.7* +%ADD99D99*% +G04~CAMADD=100~8~0.0~0.0~670.6~591.8~116.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~671.0~592.0* +%ADD100D100*% +G04~CAMADD=101~8~0.0~0.0~670.6~591.8~116.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~592.0~670.0* +%ADD101D101*% +G04~CAMADD=102~8~0.0~0.0~316.2~591.8~75.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~316.2~591.8* +%ADD102D102*% +G04~CAMADD=103~8~0.0~0.0~749.3~572.1~113.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~572.0~750.0* +%ADD103D103*% +G04~CAMADD=104~8~0.0~0.0~1024.9~788.7~110.9~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~788.0~1024.0* +%ADD104D104*% +G04~CAMADD=105~8~0.0~0.0~788.7~591.8~116.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~788.7~591.8* +%ADD105D105*% +G04~CAMADD=106~8~0.0~0.0~985.5~985.5~130.6~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~986.0~986.0* +%ADD106D106*% +%ADD107O,0.126110X0.086740*% +%ADD108C,0.078000*% +%ADD109O,0.086740X0.126110*% +G04~CAMADD=110~8~0.0~0.0~1457.9~1457.9~177.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~1458.0~1458.0* +%ADD110D110*% +G04~CAMADD=111~8~0.0~0.0~670.6~670.6~128.6~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~670.0~670.0* +%ADD111D111*% +%ADD112C,0.067060*% +G04~CAMADD=113~8~0.0~0.0~808.3~808.3~149.3~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~808.3~808.3* +%ADD113D113*% +%ADD114C,0.080830*% +%ADD115C,0.118240*% +G04~CAMADD=116~8~0.0~0.0~1182.4~1182.4~205.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~1182.0~1182.0* +%ADD116D116*% +G04~CAMADD=117~8~0.0~0.0~780.0~780.0~215.0~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~780.0~780.0* +%ADD117D117*% +%ADD118R,0.067060X0.067060*% +%ADD119C,0.067060*% +%ADD120C,0.322000*% +G04~CAMADD=121~8~0.0~0.0~808.3~808.3~149.3~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~315.0~1018.0~1017.0* +%ADD121D121*% +%LNunisolder52_back-1*% +%LPD*% +G54D80* +X04169Y04274D03* +G54D81* +X05446Y04649D03* +X05332D03* +X06603Y04611D03* +X06489D03* +X06263Y04096D03* +X06149D03* +G54D82* +X06289Y03602D03* +Y03423D03* +X06486Y043D03* +Y04479D03* +Y04D03* +Y0418D03* +X06289Y03888D03* +Y03709D03* +G54D83* +X06535Y03512D03* +X06732Y04389D03* +Y0409D03* +X06535Y03799D03* +G54D84* +X04872Y03794D03* +G54D85* +X04872Y0389D03* +G54D86* +X04931Y03904D03* +X04813D03* +G54D87* +X05978Y04377D03* +X05895Y0434D03* +Y04415D03* +X05911Y04067D03* +Y04142D03* +X05828Y04105D03* +X05978Y04705D03* +X05895Y04668D03* +Y04743D03* +X05345Y04583D03* +Y04508D03* +X05427Y04546D03* +G54D88* +X05046Y04277D03* +X05136D03* +X05227D03* +G54D89* +X05136Y04038D03* +G54D90* +X06009Y03952D03* +G54D91* +X06009Y03902D03* +Y03852D03* +Y03802D03* +X06194Y03952D03* +Y03902D03* +Y03852D03* +Y03802D03* +X04397Y0418D03* +Y0413D03* +Y0408D03* +Y0403D03* +X04582Y0418D03* +Y0413D03* +Y0408D03* +Y0403D03* +G54D92* +X05534Y03318D03* +X05484D03* +X05434D03* +X05384D03* +X05334D03* +X05284D03* +X05234D03* +X05534Y03129D03* +X05484D03* +X05434D03* +X05384D03* +X05334D03* +X05284D03* +X05234D03* +G54D93* +X06074Y04154D03* +Y04014D03* +X05989Y04154D03* +Y04014D03* +X05903Y03871D03* +Y0401D03* +G54D94* +X06048Y03432D03* +Y03674D03* +G54D95* +X05842Y03432D03* +Y03674D03* +G54D96* +X04536Y03688D03* +Y03456D03* +G54D97* +X04829Y04553D03* +X04435D03* +G54D98* +X06423Y03188D03* +X06584D03* +X05415Y04183D03* +X05576D03* +Y04307D03* +X05415D03* +X0518Y04482D03* +X05018D03* +G54D99* +X04169Y0424D03* +Y04308D03* +G54D100* +X05603Y03185D03* +Y03259D03* +X04409Y03966D03* +Y03891D03* +X05818Y04729D03* +Y04654D03* +X0531Y04251D03* +Y04177D03* +X06259Y04641D03* +Y04716D03* +X06182Y04572D03* +Y04647D03* +X05456Y0449D03* +Y04415D03* +X06259Y04313D03* +Y04388D03* +X06182Y04245D03* +Y04319D03* +X05818Y04402D03* +Y04327D03* +X05152Y03113D03* +Y03187D03* +X04247Y04311D03* +Y04236D03* +X04325Y04311D03* +Y04236D03* +X05169Y03332D03* +Y03257D03* +X04806Y04141D03* +Y04066D03* +X04883Y04141D03* +Y04066D03* +X05969Y03023D03* +Y03098D03* +X04728Y03818D03* +Y03893D03* +G54D101* +X0575Y04003D03* +X05825D03* +X0575Y03926D03* +X05825D03* +X06051Y04807D03* +X05976D03* +X06031Y04479D03* +X05956D03* +X05812Y04476D03* +X05886D03* +X05831Y04803D03* +X05906D03* +X0589Y04604D03* +X05965D03* +X0589Y04276D03* +X05965D03* +X06187Y04012D03* +X06262D03* +X06528Y04694D03* +X06603D03* +X04497Y04245D03* +X04571D03* +X05368Y04404D03* +X05293D03* +X06623Y03282D03* +X06548D03* +G54D102* +X06118Y04647D03* +X06043D03* +X0608Y04564D03* +X047Y03348D03* +X04625D03* +X04662Y03265D03* +X0608Y04237D03* +X06043Y04319D03* +X06118D03* +G54D103* +X06187Y04397D03* +X06047D03* +X06187Y04725D03* +X06047D03* +X05064Y04374D03* +X05204D03* +X05444Y04737D03* +X05304D03* +X05304Y04822D03* +X05443D03* +X06121Y04801D03* +X0626D03* +X06128Y04475D03* +X06268D03* +G54D104* +X0469Y04211D03* +Y04049D03* +X06062Y03191D03* +Y0303D03* +G54D105* +X04645Y03893D03* +Y03779D03* +X04407Y03339D03* +Y03225D03* +G54D106* +X04992Y0479D03* +Y04613D03* +G54D107* +X04056Y03612D03* +X04273D03* +Y03447D03* +X04056D03* +X06486Y05954D03* +X06269D03* +X05767D03* +X05984D03* +G54D108* +X0461Y0287D03* +X0466Y0297D03* +X0471Y0287D03* +X0476Y0297D03* +X0481Y0287D03* +X0486Y0297D03* +X0586Y02851D03* +X0596D03* +G54D109* +X06421Y02814D03* +Y03031D03* +X06255D03* +Y02814D03* +G54D110* +X06771Y05391D03* +Y05657D03* +Y04805D03* +Y05071D03* +G54D111* +X05178Y04614D03* +G54D112* +X05178Y04692D03* +G54D113* +X05406Y0392D03* +X0499Y03498D03* +X05186Y03582D03* +G54D114* +X05603Y0392D03* +X04793Y03498D03* +X05382Y03582D03* +X04227Y03874D03* +G54D115* +X05499Y05825D03* +X06208Y05752D03* +X06444Y05751D03* +X05736Y05009D03* +X05972D03* +G54D116* +X05499Y05083D03* +X06208Y0501D03* +X06444Y0501D03* +X05736Y0575D03* +X05972D03* +G54D117* +X0606Y02851D03* +G54D118* +X05192Y02847D03* +G54D119* +X05192Y02947D03* +X05292Y02847D03* +Y02947D03* +X05392Y02847D03* +Y02947D03* +X05492Y02847D03* +Y02947D03* +X05592Y02847D03* +Y02947D03* +G54D120* +X04114Y02874D03* +X06751D03* +Y05925D03* +X04114Y04704D03* +G54D121* +X04088Y04013D03* +M02* \ No newline at end of file diff --git a/hardware/gerber/unisolder52_back.txt b/hardware/gerber/unisolder52_back.txt new file mode 100644 index 0000000..5eb7d32 --- /dev/null +++ b/hardware/gerber/unisolder52_back.txt @@ -0,0 +1,345 @@ +%FSTAX23Y23*% +%MOIN*% +%SFA1B1*% + +%IPPOS*% +%ADD9500C,0.028000*% +%ADD9501C,0.035430*% +%ADD9502C,0.043310*% +%ADD9503C,0.047240*% +%ADD9504C,0.055120*% +%ADD9505C,0.066930*% +%ADD9506C,0.068900*% +%ADD9507C,0.098430*% +%ADD9508C,0.125200*% +%ADD9509C,0.145670*% +%LNunisolder52_back-1*% +%LPD*% +G54D9500* +X04902Y0275D03* +X04907Y02878D03* +X05045Y02884D03* +X05068Y02992D03* +X04953Y02985D03* +X05179Y03025D03* +X05258Y03008D03* +X05243Y02905D03* +X05343Y02896D03* +X05351Y03053D03* +X05412Y03044D03* +X05472Y03053D03* +X05589Y03115D03* +X05551Y02896D03* +X05442Y02804D03* +X05232Y02757D03* +X05765Y02806D03* +X05767Y02898D03* +X06003Y02919D03* +X06073Y02757D03* +X05885Y0308D03* +X0453Y02906D03* +X04524Y02749D03* +X04303D03* +X04384Y0299D03* +X04186Y03181D03* +X04015Y03129D03* +X0404Y03314D03* +X04305Y03364D03* +X04515Y03337D03* +X04678Y0317D03* +X04572Y03785D03* +X0442Y0379D03* +X04317Y03767D03* +X0433Y03937D03* +X04321Y04078D03* +X04327Y04148D03* +X04223Y04134D03* +X04178Y04023D03* +X03986Y03982D03* +Y04188D03* +X04015Y0435D03* +X03996Y04507D03* +X04133Y04429D03* +X04232Y04527D03* +X04324Y04449D03* +X0433Y04625D03* +X0454Y04629D03* +X04625Y04527D03* +X04529Y04421D03* +X04566Y04316D03* +X04487D03* +X0449Y04161D03* +Y04094D03* +X04491Y04026D03* +X04477Y03964D03* +X04543D03* +X04608D03* +X04645Y04311D03* +X04392Y04229D03* +X04173Y03699D03* +X03985Y03776D03* +X04716Y03756D03* +X04796Y03822D03* +X04802Y03967D03* +X04841Y04004D03* +X04882Y03966D03* +X04921Y04005D03* +X04763Y04007D03* +X04844Y04206D03* +X04926Y04261D03* +X049Y04361D03* +X04932Y0453D03* +X05114Y04581D03* +X05269Y04603D03* +X05267Y04503D03* +X0533Y04342D03* +X05487Y0425D03* +X05661Y04177D03* +X05806Y04152D03* +X05837Y0422D03* +X05754Y04355D03* +X0575Y04478D03* +X05658Y04435D03* +X05679Y04586D03* +X05788Y04593D03* +X05838Y04541D03* +X05487Y04565D03* +X05598Y04023D03* +X05578Y03788D03* +X05623D03* +X05592Y03641D03* +X05485Y03592D03* +X0551Y03534D03* +X05401Y03433D03* +X05285Y0349D03* +X05257Y03589D03* +X05167Y03502D03* +X05063Y0353D03* +X05098Y03382D03* +X05207Y03404D03* +X0524Y03237D03* +X05311Y03243D03* +X05397Y03202D03* +X0508Y03127D03* +X0499Y03347D03* +X0488Y03444D03* +X04787Y03342D03* +X04806Y03231D03* +X04742Y03593D03* +X04819Y0369D03* +X04921Y03692D03* +X05773Y03723D03* +X05774Y03578D03* +X05875Y03553D03* +X05935D03* +X05994D03* +X06053D03* +X06112D03* +X06102Y03799D03* +X06084Y0395D03* +X06072Y04089D03* +X05989Y04087D03* +X05922Y03937D03* +X05828Y0386D03* +X0575Y03865D03* +X0574Y03423D03* +X05619Y03412D03* +X05846Y03307D03* +X05905D03* +X05964D03* +X06023D03* +X06082D03* +X06141D03* +X062D03* +X06189Y0325D03* +X0613Y03251D03* +X06157Y032D03* +X05964Y03208D03* +X05905D03* +X05846D03* +X05816Y03257D03* +X05875D03* +X05935D03* +X05994D03* +X0611Y04402D03* +X06195Y04476D03* +X04724Y04429D03* +Y04625D03* +X06263Y04576D03* +Y0425D03* +X06262Y04168D03* +X06306Y03951D03* +X06417Y03937D03* +X06476D03* +X06535D03* +X06594D03* +X06653D03* +Y03661D03* +X06594D03* +X06535D03* +X06476D03* +X06417D03* +X06344Y03808D03* +X06269Y03799D03* +X06289Y03543D03* +X06259Y03307D03* +X06486Y04124D03* +X06614Y04251D03* +X06673D03* +X06732D03* +X06791D03* +X0685D03* +Y04527D03* +X06791D03* +X06732D03* +X06673D03* +X06614D03* +X06692Y04606D03* +X06771D03* +Y04685D03* +X06692D03* +X06855Y04684D03* +X0685Y04606D03* +X06486Y04429D03* +X0625Y04872D03* +X06299Y05354D03* +X06456D03* +Y05511D03* +X06377Y05433D03* +X06535D03* +X06614Y05511D03* +Y05669D03* +X06535Y0559D03* +X06299Y05511D03* +X06377Y06043D03* +X06564D03* +X0683Y05246D03* +X06141Y05354D03* +X05984D03* +X05826D03* +Y05511D03* +X05905Y05433D03* +X05984Y05511D03* +X06062Y05433D03* +X0622D03* +X06141Y05511D03* +X05748Y05433D03* +Y0559D03* +X0559D03* +X05641Y05657D03* +X0559Y05748D03* +Y05905D03* +X05665Y0598D03* +X0559Y06055D03* +X05511Y05984D03* +X05433Y06055D03* +X05362Y05984D03* +X05433Y05905D03* +X05362Y05826D03* +X05433Y05748D03* +X05362Y05669D03* +X05433Y0559D03* +X05362Y05511D03* +X05433Y05433D03* +X05362Y05354D03* +X05433Y05275D03* +X05362Y05196D03* +X05366Y05044D03* +X05349Y04896D03* +X0548Y04898D03* +X05659Y04881D03* +X05679Y04744D03* +X05377Y04736D03* +X05218Y04837D03* +X04899Y04821D03* +X04822Y04724D03* +X04992Y04701D03* +X04724Y04822D03* +X05856Y04881D03* +Y05039D03* +X06063Y04872D03* +X06114Y0473D03* +X05669Y05354D03* +X05511D03* +Y05511D03* +Y05669D03* +X05669Y05511D03* +X0559Y05433D03* +X05848Y0587D03* +X05905Y06055D03* +X05748D03* +X04527Y04822D03* +X0433D03* +X04429Y04724D03* +X04625D03* +G54D9501* +X05192Y02847D03* +Y02947D03* +X05292D03* +Y02847D03* +X05392D03* +Y02947D03* +X05492D03* +Y02847D03* +X05592D03* +Y02947D03* +X05178Y04614D03* +Y04692D03* +G54D9502* +X04227Y03874D03* +X04088Y04013D03* +X04793Y03498D03* +X0499D03* +X05186Y03582D03* +X05382D03* +X05406Y0392D03* +X05603D03* +G54D9503* +X0471Y0287D03* +X0481D03* +X0476Y0297D03* +X0486D03* +X0586Y02851D03* +X0596D03* +X0606D03* +X0461Y0287D03* +X0466Y0297D03* +G54D9504* +X06255Y02814D03* +X06421D03* +Y03031D03* +X06255D03* +X04273Y03447D03* +Y03612D03* +X04056D03* +Y03447D03* +X06269Y05954D03* +X06486D03* +X05984D03* +X05767D03* +G54D9505* +X06444Y0501D03* +Y05751D03* +X06208Y05752D03* +X05972Y0575D03* +X05736D03* +X05499Y05825D03* +Y05083D03* +X05736Y05009D03* +X05972D03* +X06208Y0501D03* +G54D9506* +X06771Y05071D03* +Y05391D03* +G54D9507* +X06771Y04805D03* +Y05657D03* +G54D9508* +X04535Y0322D03* +X04935D03* +G54D9509* +X06751Y02874D03* +X04114D03* +X06751Y05925D03* +X04114Y04704D03* +M02* \ No newline at end of file diff --git a/hardware/gerber/unisolder52_front.gbl b/hardware/gerber/unisolder52_front.gbl new file mode 100644 index 0000000..7d2092a --- /dev/null +++ b/hardware/gerber/unisolder52_front.gbl @@ -0,0 +1,4407 @@ +%FSTAX23Y23*% +%MOIN*% +%SFA1B1*% + +%IPPOS*% +%AMD64* +4,1,8,-0.007500,0.042600,-0.042600,0.007500,-0.042600,-0.007500,-0.007500,-0.042600,0.007500,-0.042600,0.042600,-0.007500,0.042600,0.007500,0.007500,0.042600,-0.007500,0.042600,0.0* +1,1,0.021260,0.000000,0.035100* +1,1,0.021260,-0.035100,0.000000* +1,1,0.021260,0.000000,-0.035100* +1,1,0.021260,0.035100,0.000000* +% +%AMD69* +4,1,8,0.021000,0.050000,-0.021000,0.050000,-0.030000,0.041000,-0.030000,-0.041000,-0.021000,-0.050000,0.021000,-0.050000,0.030000,-0.041000,0.030000,0.041000,0.021000,0.050000,0.0* +1,1,0.018000,0.021000,0.041000* +1,1,0.018000,-0.021000,0.041000* +1,1,0.018000,-0.021000,-0.041000* +1,1,0.018000,0.021000,-0.041000* +% +%ADD37C,0.012000*% +%ADD38C,0.022000*% +%ADD39C,0.050000*% +%ADD41C,0.020000*% +%ADD42C,0.025000*% +%ADD48C,0.052000*% +%ADD56O,0.043310X0.051180*% +%ADD57O,0.104330X0.196850*% +%ADD58C,0.078740*% +%ADD59C,0.059060*% +%ADD60O,0.078740X0.118110*% +%ADD61R,0.059060X0.059060*% +%ADD62C,0.055120*% +%ADD63R,0.059060X0.059060*% +G04~CAMADD=64~8~0.0~0.0~708.7~708.7~106.3~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~45.0~914.0~913.0* +%ADD64D64*% +%ADD65C,0.070870*% +%ADD66C,0.255900*% +%ADD67C,0.236220*% +%ADD68C,0.050000*% +G04~CAMADD=69~8~0.0~0.0~600.0~1000.0~90.0~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~600.0~1000.0* +%ADD69D69*% +%LNunisolder52_front-1*% +%LPD*% +G36* +X01555Y00875D02* +Y-01171D01* +X01446Y-01279* +X00393* +X00354Y-0124* +Y-01053* +X00295Y-00994* +X-00068* +X-00177Y-01102* +Y-01171* +X-00285Y-01279* +X-01456* +X-01555Y-01181* +Y-00752* +X-0155Y-0075* +X-01527Y-00772* +X-01529Y-00777* +X-01538* +Y-00854* +X-01461* +Y-00777* +X-01485* +X-01485Y-00773* +X-01489Y-00768* +X-01497Y-00759* +X-01495Y-00754* +X-01489Y-00753* +X-0148Y-00749* +X-01472Y-00743* +X-01466Y-00735* +X-01462Y-00726* +X-01461Y-00716* +X-01462Y-00705* +X-01466Y-00696* +X-01472Y-00688* +X-0148Y-00682* +X-01489Y-00678* +X-015Y-00677* +X-0151Y-00678* +X-01519Y-00682* +X-01524Y-00686* +X-01529Y-00683* +Y-00648* +X-01524Y-00645* +X-01519Y-00649* +X-0151Y-00653* +X-01507Y-00653* +Y-00616* +Y-00578* +X-0151Y-00578* +X-01519Y-00582* +X-01524Y-00586* +X-01529Y-00583* +Y-00548* +X-01524Y-00545* +X-01519Y-00549* +X-0151Y-00553* +X-015Y-00554* +X-01489Y-00553* +X-0148Y-00549* +X-01472Y-00543* +X-01466Y-00535* +X-01462Y-00526* +X-01461Y-00516* +X-01462Y-00505* +X-01466Y-00496* +X-01472Y-00488* +X-0148Y-00482* +X-01484Y-0048* +X-01483Y-00475* +X-01481* +X-01475Y-00474* +X-0147Y-00471* +X-01451Y-00452* +X-01393* +X-01387Y-00451* +X-01382Y-00447* +X-01357Y-00422* +X-01353Y-00417* +X-01352Y-00411* +Y-00331* +X-01286Y-00264* +X-01267* +X-01261Y-00263* +X-01256Y-0026* +X-01243Y-00247* +X-01239Y-0025* +X-01239Y-00251* +X-01238Y-00259* +X-01234Y-00268* +X-01229Y-00275* +Y-00281* +X-01228Y-0029* +X-01228Y-00291* +X-01231Y-00294* +X-01232Y-00294* +X-0124Y-00295* +X-01249Y-00299* +X-01256Y-00304* +X-01261Y-00311* +X-01265Y-0032* +X-01266Y-00329* +X-01265Y-00337* +X-01261Y-00346* +X-01259Y-00348* +X-01404Y-00494* +X-01408Y-00499* +X-01409Y-00505* +Y-00558* +X-01437Y-00587* +X-01441Y-00592* +X-01442Y-00598* +Y-00924* +X-01473Y-00955* +X-01475Y-00954* +X-01484Y-00953* +X-01492Y-00954* +X-01501Y-00958* +X-01508Y-00963* +X-01513Y-0097* +X-01517Y-00979* +X-01518Y-00988* +X-01517Y-00996* +X-01513Y-01005* +X-01508Y-01012* +X-01501Y-01017* +X-01492Y-01021* +X-01484Y-01022* +X-01475Y-01021* +X-01466Y-01017* +X-01459Y-01012* +X-01454Y-01005* +X-0145Y-00996* +X-01449Y-00988* +X-0145Y-00979* +X-01451Y-00977* +X-01416Y-00941* +X-01412Y-00936* +X-01411Y-00931* +Y-00604* +X-01383Y-00575* +X-01379Y-0057* +X-01378Y-00565* +Y-00511* +X-0123Y-00363* +X-01225Y-00362* +X-01223Y-00367* +X-01223Y-00367* +X-01226Y-00369* +X-01228Y-00372* +X-01239Y-00384* +X-01245Y-00391* +X-01249Y-00399* +X-0125Y-00409* +X-01249Y-00416* +Y-00565* +X-01248Y-00573* +X-01244Y-00582* +X-01239Y-00589* +X-01143Y-00685* +X-01136Y-0069* +X-01127Y-00694* +X-01119Y-00695* +X-00972* +X-0097Y-00695* +X-00961Y-00694* +X-00961Y-00694* +X-0096Y-00694* +X-00952Y-0069* +X-00945Y-00685* +X-00942Y-00682* +X-0092* +Y-00803* +X-00918Y-00812* +X-00915Y-0082* +X-00909Y-00828* +X-00902Y-00833* +X-00893Y-00837* +X-00888Y-00838* +X-0078Y-00945* +X-0078Y-00945* +X-00778Y-00953* +X-00774Y-0096* +X-00739Y-00995* +X-00732Y-00999* +X-00725Y-01001* +X-00717Y-00999* +X-00711Y-00995* +X-00676Y-0096* +X-00671Y-00953* +X-0067Y-00945* +X-00671Y-00938* +X-00676Y-00931* +X-00711Y-00896* +X-00717Y-00892* +X-00725Y-0089* +X-00732Y-00892* +X-00733Y-00892* +X-00848Y-00778* +X-00849Y-00777* +Y-00682* +X-00751* +X-00742Y-00681* +X-00734Y-00677* +X-00727Y-00672* +X-00664Y-00609* +X-00662Y-00609* +X-0065Y-00607* +X-00638Y-00602* +X-00629Y-00595* +X-0044* +X-00431Y-00602* +X-00419Y-00607* +X-00407Y-00609* +X-00394Y-00607* +X-00382Y-00602* +X-00372Y-00594* +X-00364Y-00584* +X-00359Y-00573* +X-00358Y-0056* +X-00359Y-00547* +X-00364Y-00536* +X-00372Y-00525* +X-00382Y-00518* +X-00394Y-00513* +X-00406Y-00511* +X-00407Y-00511* +X-0041Y-00507* +X-00408Y-00503* +X-00407Y-00495* +X-00408Y-00486* +X-00412Y-00477* +X-00417Y-0047* +X-00424Y-00465* +X-00433Y-00461* +X-00442Y-0046* +X-0045Y-00461* +X-00459Y-00465* +X-00466Y-0047* +X-00471Y-00477* +X-00475Y-00486* +X-00476Y-00495* +X-00475Y-005* +X-00479Y-00505* +X-00619* +X-00629Y-00495* +X-00634Y-00491* +X-0064Y-0049* +X-00685* +X-00691Y-00491* +X-00696Y-00495* +X-00728Y-00527* +X-00731Y-00532* +X-00732Y-00537* +Y-0055* +X-00775Y-00593* +X-00831* +X-00834Y-00589* +X-00834Y-00589* +X-00835Y-0058* +X-00839Y-00571* +X-00844Y-00564* +X-00851Y-00559* +X-0086Y-00555* +X-00869Y-00554* +X-00877Y-00555* +X-00886Y-00559* +X-00893Y-00564* +X-00898Y-00571* +X-00902Y-0058* +X-00903Y-00589* +X-00902Y-00597* +X-00898Y-00606* +X-00896Y-00608* +X-00899Y-00613* +X-00956* +X-00965Y-00614* +X-00973Y-00618* +X-0098Y-00623* +X-00983Y-00626* +X-01063* +X-01066Y-00621* +X-01064Y-00619* +X-0106Y-0061* +X-01059Y-00602* +X-0106Y-00593* +X-01064Y-00584* +X-01069Y-00577* +X-01076Y-00572* +X-01085Y-00568* +X-01094Y-00567* +X-01102Y-00568* +X-01111Y-00572* +X-01118Y-00577* +X-01119Y-00578* +X-01124Y-00579* +X-01159Y-00543* +Y-00433* +X-01118Y-00391* +X-01114Y-00386* +X-01113Y-00381* +Y-0029* +X-01114Y-00284* +X-01118Y-00279* +X-01138Y-00258* +Y-00201* +X-01134Y-00198* +X-01133Y-00198* +X-01124Y-00197* +X-01115Y-00193* +X-01108Y-00188* +X-01103Y-00181* +X-01099Y-00172* +X-01098Y-00164* +X-01099Y-00155* +X-01103Y-00146* +X-01108Y-00139* +X-01115Y-00134* +X-01124Y-0013* +X-01133Y-00129* +X-01134Y-00129* +X-01138Y-00126* +Y00039* +X-01139Y00045* +X-01143Y0005* +X-01194Y00101* +Y00124* +X-01066Y00252* +X-01062Y00257* +X-01061Y00263* +Y00425* +X-0096Y00526* +X-00837* +X-00837Y00524* +X-00833Y00515* +X-00828Y00508* +X-00821Y00503* +X-00812Y00499* +X-00803Y00498* +X-00795Y00499* +X-00786Y00503* +X-00779Y00508* +X-00774Y00515* +X-0077Y00524* +X-00769Y00533* +X-0077Y00541* +X-00774Y0055* +X-00779Y00557* +X-00786Y00562* +X-00795Y00566* +X-00803Y00567* +X-00812Y00566* +X-00821Y00562* +X-00828Y00557* +Y00557* +X-00967* +X-00972Y00556* +X-00977Y00552* +X-01077Y00453* +X-01082Y00454* +X-01082Y00458* +X-01086Y00466* +X-01091Y00473* +X-01099Y00479* +X-01107Y00482* +X-01116Y00484* +X-01125Y00482* +X-01134Y00479* +X-01141Y00473* +X-01147Y00466* +X-0115Y00458* +X-01152Y00448* +Y00294* +X-01274Y00171* +X-0128Y00164* +X-01284Y00156* +X-01285Y00147* +Y00079* +X-01284Y00069* +X-0128Y00061* +X-01274Y00054* +X-01229Y00008* +X-0123Y00003* +X-01234Y00001* +X-01236Y00003* +X-01245Y00007* +X-01254Y00008* +X-01262Y00007* +X-01271Y00003* +X-01278Y-00001* +X-01283Y-00008* +X-01287Y-00017* +X-01288Y-00026* +X-01287Y-00034* +X-01283Y-00043* +X-01278Y-0005* +X-01271Y-00055* +X-01262Y-00059* +X-01254Y-0006* +X-01253Y-0006* +X-01249Y-00063* +Y-0021* +X-01273Y-00234* +X-01292* +X-01298Y-00235* +X-01303Y-00238* +X-01378Y-00314* +X-01382Y-00319* +X-01383Y-00324* +Y-00405* +X-01399Y-00421* +X-01456* +X-01461Y-00418* +X-01461Y-00416* +X-01462Y-00405* +X-01466Y-00396* +X-01472Y-00388* +X-0148Y-00382* +X-01489Y-00378* +X-015Y-00377* +X-0151Y-00378* +X-01519Y-00382* +X-01527Y-00388* +X-01533Y-00396* +X-01537Y-00405* +X-01538Y-00416* +X-01537Y-00426* +X-01533Y-00435* +X-01527Y-00443* +X-01522Y-00447* +X-01522Y-00453* +X-0155Y-00481* +X-01555Y-00479* +Y00875* +X-01446Y00984* +X-00106* +X-00105Y00979* +X-0012Y00962* +X-00132Y00942* +X-00141Y0092* +X-00146Y00898* +X-00148Y00875* +X-00146Y00851* +X-00141Y00829* +X-00132Y00807* +X-0012Y00787* +X-00105Y00769* +X-00087Y00754* +X-00067Y00742* +X-00045Y00733* +X-00023Y00728* +X0Y00726* +X00023Y00728* +X00045Y00733* +X00067Y00742* +X00087Y00754* +X00105Y00769* +X0012Y00787* +X00132Y00807* +X00141Y00829* +X00146Y00851* +X00148Y00875* +X00146Y00898* +X00141Y0092* +X00132Y00942* +X0012Y00962* +X00105Y00979* +X00106Y00984* +X01446* +X01555Y00875* +G37* +G36* +X00275Y-01092D02* +Y-01299D01* +X00227Y-01346* +X00222Y-01345* +X0022Y-01338* +X00214Y-01328* +X00206Y-01318* +X00197Y-01311* +X00186Y-01305* +X00175Y-01301* +X00163Y-013* +X00151Y-01301* +X00139Y-01305* +X00129Y-01311* +X00119Y-01318* +X00112Y-01328* +X00106Y-01338* +X00103Y-0135* +X00101Y-01362* +Y-01454* +X00103Y-01466* +X00106Y-01478* +X00112Y-01488* +X00119Y-01498* +X00129Y-01505* +X00139Y-01511* +X00151Y-01515* +X00163Y-01516* +X00175Y-01515* +X00186Y-01511* +X00197Y-01505* +X00206Y-01498* +X00211Y-01492* +X00216Y-01494* +Y-01515* +X00196Y-01535* +X-00196* +X-00216Y-01515* +Y-01494* +X-00211Y-01492* +X-00206Y-01498* +X-00197Y-01505* +X-00186Y-01511* +X-00175Y-01515* +X-00163Y-01516* +X-00151Y-01515* +X-00139Y-01511* +X-00129Y-01505* +X-00119Y-01498* +X-00112Y-01488* +X-00106Y-01478* +X-00103Y-01466* +X-00101Y-01454* +Y-01362* +X-00103Y-0135* +X-00106Y-01338* +X-00112Y-01328* +X-00119Y-01318* +X-00129Y-01311* +X-00139Y-01305* +X-00151Y-01301* +X-00163Y-013* +X-00175Y-01301* +X-00186Y-01305* +X-00197Y-01311* +X-00206Y-01318* +X-00209Y-01322* +X-00215Y-01321* +X-00215Y-01318* +X-00098Y-012* +Y-01141* +X-00029Y-01072* +X00255* +X00275Y-01092* +G37* +%LNunisolder52_front-2*% +%LPC*% +G36* +X00822Y-00507D02* +X00813Y-00508D01* +X00805Y-00511* +X00798Y-00517* +X00792Y-00524* +X00789Y-00532* +X00788Y-00541* +X00789Y-0055* +X00789Y-00552* +X00736Y-00605* +X00691* +X00689Y-006* +X00697Y-00594* +X00705Y-00584* +X0071Y-00573* +X00711Y-0056* +X0071Y-00547* +X00705Y-00536* +X00697Y-00525* +X00687Y-00518* +X00675Y-00513* +X00662Y-00511* +X0065Y-00513* +X00638Y-00518* +X00628Y-00525* +X0062Y-00536* +X00615Y-00547* +X00614Y-0056* +X00615Y-00573* +X00619Y-00581* +X00619Y-00583* +X00616Y-00586* +X00609Y-00587* +X006Y-00591* +X00593Y-00596* +X00588Y-00603* +X00584Y-00612* +X00583Y-00621* +X00584Y-00629* +X00588Y-00638* +X00593Y-00645* +X006Y-0065* +X00609Y-00654* +X00618Y-00655* +X00626Y-00654* +X00635Y-0065* +X00642Y-00645* +X00647Y-00638* +X00648Y-00636* +X00742* +X00748Y-00635* +X00753Y-00631* +X00811Y-00573* +X00813Y-00574* +X00822Y-00575* +X00831Y-00574* +X00839Y-00571* +X00846Y-00565* +X00852Y-00558* +X00855Y-0055* +X00856Y-00541* +X00855Y-00532* +X00852Y-00524* +X00846Y-00517* +X00839Y-00511* +X00831Y-00508* +X00822Y-00507* +G37* +G36* +X01082Y-00438D02* +X01073Y-00439D01* +X01065Y-00443* +X01058Y-00448* +X01053Y-00455* +X01049Y-00464* +X01048Y-00473* +X01048Y-00476* +X00851Y-00673* +X00847Y-0068* +X00845Y-00687* +Y-00979* +X00847Y-00986* +X00851Y-00993* +X00854Y-00996* +X00853Y-01001* +X00854Y-0101* +X00858Y-01018* +X00863Y-01025* +X0087Y-0103* +X00879Y-01034* +X00888Y-01035* +X00896Y-01034* +X00905Y-0103* +X00912Y-01025* +X00917Y-01018* +X00921Y-0101* +X00922Y-01001* +X00921Y-00992* +X00917Y-00983* +X00912Y-00976* +X00905Y-00971* +X00896Y-00968* +X00888Y-00966* +X00886Y-00965* +Y-00696* +X01076Y-00506* +X01082Y-00507* +X01091Y-00506* +X01099Y-00502* +X01106Y-00497* +X01112Y-0049* +X01115Y-00481* +X01117Y-00473* +X01115Y-00464* +X01112Y-00455* +X01106Y-00448* +X01099Y-00443* +X01091Y-00439* +X01082Y-00438* +G37* +G36* +X-00818Y-00356D02* +X-00828Y-00357D01* +X-00837Y-00361* +X-00844Y-00366* +X-0085Y-00374* +X-00854Y-00383* +X-00855Y-00393* +X-00854Y-00402* +X-0085Y-00411* +X-00844Y-00419* +X-00837Y-00424* +X-00828Y-00428* +X-00818Y-00429* +X-00809Y-00428* +X-008Y-00424* +X-00792Y-00419* +X-00786Y-00411* +X-00783Y-00402* +X-00781Y-00393* +X-00783Y-00383* +X-00786Y-00374* +X-00792Y-00366* +X-008Y-00361* +X-00809Y-00357* +X-00818Y-00356* +G37* +G36* +X-00127Y-00511D02* +X-0014Y-00513D01* +X-00152Y-00518* +X-00162Y-00525* +X-0017Y-00536* +X-00175Y-00547* +X-00176Y-0056* +X-00175Y-00573* +X-0017Y-00584* +X-00162Y-00594* +X-00152Y-00602* +X-0014Y-00607* +X-00127Y-00609* +X-00115Y-00607* +X-00103Y-00602* +X-00093Y-00594* +X-00085Y-00584* +X-0008Y-00573* +X-00079Y-0056* +X-0008Y-00547* +X-00085Y-00536* +X-00093Y-00525* +X-00103Y-00518* +X-00115Y-00513* +X-00127Y-00511* +G37* +G36* +X00407D02* +X00394Y-00513D01* +X00382Y-00518* +X00372Y-00525* +X00364Y-00536* +X00359Y-00547* +X00358Y-0056* +X00359Y-00573* +X00364Y-00584* +X00372Y-00594* +X00382Y-00602* +X00394Y-00607* +X00407Y-00609* +X00419Y-00607* +X00431Y-00602* +X00441Y-00594* +X00449Y-00584* +X00454Y-00573* +X00455Y-0056* +X00454Y-00547* +X00449Y-00536* +X00441Y-00525* +X00431Y-00518* +X00419Y-00513* +X00407Y-00511* +G37* +G36* +X-01492Y-00578D02* +Y-00608D01* +X-01462* +X-01462Y-00605* +X-01466Y-00596* +X-01472Y-00588* +X-0148Y-00582* +X-01489Y-00578* +X-01492Y-00578* +G37* +G36* +X00127Y-00511D02* +X00115Y-00513D01* +X00103Y-00518* +X00093Y-00525* +X00085Y-00536* +X0008Y-00547* +X00079Y-0056* +X0008Y-00573* +X00085Y-00584* +X00093Y-00594* +X00103Y-00602* +X00115Y-00607* +X00127Y-00609* +X0014Y-00607* +X00152Y-00602* +X00162Y-00594* +X0017Y-00584* +X00175Y-00573* +X00176Y-0056* +X00175Y-00547* +X0017Y-00536* +X00162Y-00525* +X00152Y-00518* +X0014Y-00513* +X00127Y-00511* +G37* +G36* +X-00732Y-00248D02* +X-00764D01* +Y-00282* +X-00762Y-00289* +X-00758Y-00294* +X-00753Y-00298* +X-00746Y-003* +X-00732* +Y-00248* +G37* +G36* +X-00685D02* +X-00717D01* +Y-003* +X-00704* +X-00696Y-00298* +X-00691Y-00294* +X-00687Y-00289* +X-00685Y-00282* +Y-00248* +G37* +G36* +X-00732Y-00181D02* +X-00746D01* +X-00753Y-00183* +X-00758Y-00187* +X-00762Y-00192* +X-00764Y-002* +Y-00233* +X-00732* +Y-00181* +G37* +G36* +X01284Y-0029D02* +X01242D01* +Y-0035* +X01247Y-0035* +X01259Y-00345* +X01269Y-00337* +X01277Y-00327* +X01282Y-00315* +X01284Y-00302* +Y-0029* +G37* +G36* +X-00626Y-00356D02* +X-00636Y-00357D01* +X-00644Y-00361* +X-00652Y-00366* +X-00658Y-00374* +X-00662Y-00383* +X-00663Y-00393* +X-00662Y-00402* +X-00658Y-00411* +X-00652Y-00419* +X-00644Y-00424* +X-00636Y-00428* +X-00626Y-00429* +X-00616Y-00428* +X-00608Y-00424* +X-006Y-00419* +X-00594Y-00411* +X-0059Y-00402* +X-00589Y-00393* +X-0059Y-00383* +X-00594Y-00374* +X-006Y-00366* +X-00608Y-00361* +X-00616Y-00357* +X-00626Y-00356* +G37* +G36* +X00297Y00773D02* +X00295D01* +X00286Y00772* +X00277Y00768* +X0027Y00763* +X00255Y00747* +X00249Y0074* +X00246Y00732* +X00245Y00723* +Y00622* +X00226* +X00217Y00621* +X00208Y00617* +X00201Y00612* +X00196Y00605* +X00192Y00596* +X00191Y00588* +X00192Y00579* +X00196Y0057* +X00198Y00568* +X00195Y00563* +X00194* +X00193* +X00185Y00562* +X00176Y00558* +X00169Y00553* +X00164Y00546* +X0016Y00537* +X00159Y00529* +X0016Y0052* +X00164Y00511* +X00169Y00504* +X00176Y00499* +X00185Y00495* +X00194Y00494* +X00202Y00495* +X00211Y00499* +X00218Y00504* +X00223Y00511* +X00227Y0052* +X00228Y00529* +X00231Y00532* +X00299* +X00517Y00314* +Y00308* +X00514Y00306* +X00509Y00299* +X00505Y0029* +X00504Y00282* +X00505Y00273* +X00509Y00264* +X00514Y00257* +X00521Y00252* +X0053Y00248* +X00539Y00247* +X00547Y00248* +X00556Y00252* +X00563Y00257* +X00568Y00264* +X00572Y00273* +X00573Y0028* +X00577Y00282* +X00592Y00268* +X00563Y00239* +X00558Y00232* +X00554Y00223* +X00553Y00215* +X00554Y00206* +X00558Y00197* +X00563Y0019* +X0057Y00185* +X00579Y00181* +X00588Y0018* +X00596Y00181* +X00605Y00185* +X00612Y0019* +X00641Y00219* +X00679Y0018* +X00686Y00175* +X00695Y00171* +X00704Y0017* +X01003* +X01005Y00169* +X01014Y00168* +X01014Y00168* +X01062Y0012* +X01069Y00115* +X0107Y00114* +Y-00143* +X01071Y-00152* +X01075Y-0016* +X0108Y-00167* +X01127Y-00214* +X01134Y-00219* +X01142Y-00223* +X01151Y-00224* +X01199* +X012Y-00227* +X012Y-00229* +X01193Y-00239* +X01188Y-0025* +X01186Y-00263* +Y-00275* +X01284* +Y-00263* +X01282Y-0025* +X01277Y-00239* +X01269Y-00229* +X0127Y-00227* +X01271Y-00224* +X01314* +X01352Y-00261* +X01351Y-00263* +Y-00302* +X01353Y-00315* +X01358Y-00327* +X01366Y-00337* +X01376Y-00345* +X01388Y-0035* +X014Y-00351* +X01413Y-0035* +X01425Y-00345* +X01435Y-00337* +X01442Y-00327* +X01447Y-00315* +X01449Y-00302* +Y-00263* +X01447Y-0025* +X01442Y-00239* +X01435Y-00229* +X01425Y-00221* +X01413Y-00216* +X01402Y-00215* +X01353Y-00165* +X01346Y-0016* +X01337Y-00156* +X01329Y-00155* +X01165* +X01139Y-00129* +Y0011* +X01218* +X01227Y00111* +X01235Y00115* +X01242Y0012* +X01282Y0016* +X01287Y00167* +X01291Y00175* +X01292Y00184* +Y00205* +X01291Y00213* +X01287Y00222* +X01282Y00229* +X01275Y00234* +X01266Y00238* +X01258Y00239* +X01249Y00238* +X0124Y00234* +X01233Y00229* +X01228Y00222* +X01224Y00213* +X01223Y00205* +Y00198* +X01204Y00179* +X01105* +X01101Y00178* +X01051Y00229* +X01044Y00234* +X01035Y00238* +X01027Y00239* +X00718* +X0054Y00417* +X00542Y00422* +X00545Y00422* +X00554Y00426* +X00561Y00431* +X00566Y00438* +X0057Y00447* +X00571Y00456* +X0057Y00464* +X00566Y00473* +X00561Y0048* +X00554Y00485* +X00545Y00489* +X00537Y0049* +X00528Y00489* +X00519Y00485* +X00512Y0048* +X00511Y00479* +X00506Y00478* +X00364Y00621* +X00368Y00627* +X00372Y00636* +X00373Y00645* +X00372Y00653* +X00368Y00662* +X00363Y00669* +X00356Y00674* +X00347Y00678* +X00339Y00679* +X0033Y00678* +X00321Y00674* +X00318Y00672* +X00313Y00674* +Y00709* +X00314Y00709* +X00321Y00714* +X00326Y00721* +X0033Y0073* +X00331Y00739* +X0033Y00747* +X00326Y00756* +X00321Y00763* +X00314Y00768* +X00305Y00772* +X00297Y00773* +G37* +G36* +X01227Y-0029D02* +X01186D01* +Y-00302* +X01188Y-00315* +X01193Y-00327* +X012Y-00337* +X0121Y-00345* +X01222Y-0035* +X01227Y-0035* +Y-0029* +G37* +G36* +X-01462Y-00623D02* +X-01492D01* +Y-00653* +X-01489Y-00653* +X-0148Y-00649* +X-01472Y-00643* +X-01466Y-00635* +X-01462Y-00626* +X-01462Y-00623* +G37* +G36* +X-00736Y-01068D02* +X-00745Y-01069D01* +X-00753Y-01072* +X-0076Y-01078* +X-00765Y-01085* +X-00769Y-01093* +X-0077Y-01102* +X-0077Y-01102* +X-00773Y-01106* +X-00866* +X-00867Y-01104* +X-00874Y-01095* +X-00883Y-01088* +X-00894Y-01083* +X-00906Y-01082* +X-00917Y-01083* +X-00928Y-01088* +X-00937Y-01095* +X-00945Y-01104* +X-00949Y-01115* +X-00951Y-01126* +X-00949Y-01138* +X-00945Y-01149* +X-00937Y-01158* +X-00928Y-01165* +X-00917Y-0117* +X-00906Y-01171* +X-00894Y-0117* +X-00883Y-01165* +X-00874Y-01158* +X-00867Y-01149* +X-00866Y-01147* +X-00753* +X-00746Y-01145* +X-00739Y-01141* +X-00734Y-01136* +X-00727Y-01135* +X-00719Y-01132* +X-00711Y-01126* +X-00706Y-01119* +X-00703Y-01111* +X-00701Y-01102* +X-00703Y-01093* +X-00706Y-01085* +X-00711Y-01078* +X-00719Y-01072* +X-00727Y-01069* +X-00736Y-01068* +G37* +G36* +X00461Y-00967D02* +X00452Y-00968D01* +X00443Y-00972* +X00436Y-00977* +X00431Y-00984* +X00427Y-00993* +X00426Y-01002* +X00427Y-0101* +X00431Y-01019* +X00436Y-01026* +X00443Y-01031* +X00452Y-01035* +X00461Y-01036* +X00468Y-01035* +X0047Y-01036* +X00478Y-01038* +X00568* +X00571Y-0104* +X00577Y-01044* +X00585Y-01046* +X00596* +X00599Y-01051* +X00606Y-01056* +X00615Y-0106* +X00624Y-01061* +X00632Y-0106* +X00641Y-01056* +X00648Y-01051* +X00653Y-01044* +X00657Y-01035* +X00658Y-01027* +X00657Y-01018* +X00653Y-01009* +X00648Y-01002* +X00641Y-00997* +X00632Y-00993* +X00624Y-00992* +X00615Y-00993* +X00606Y-00997* +X00599Y-01002* +X00597Y-01005* +X00591Y-01006* +X0059Y-01005* +X00584Y-01001* +X00577Y-00999* +X00494* +X00494Y-00993* +X0049Y-00984* +X00485Y-00977* +X00478Y-00972* +X00469Y-00968* +X00461Y-00967* +G37* +G36* +X01063Y-00346D02* +X01054Y-00347D01* +X01045Y-00351* +X01038Y-00356* +X01033Y-00363* +X01029Y-00372* +X01028Y-0038* +X01029Y-00389* +X01033Y-00398* +X01038Y-00405* +X01045Y-0041* +X01054Y-00414* +X01063Y-00415* +X01071Y-00414* +X0108Y-0041* +X01087Y-00405* +X0109Y-00401* +X01126* +X0116Y-00435* +Y-00582* +X00971Y-00771* +X00967Y-00777* +X00965Y-00785* +Y-00968* +X00958Y-00969* +X00949Y-00972* +X00942Y-00978* +X00937Y-00985* +X00933Y-00993* +X00932Y-01002* +X00933Y-01011* +X00937Y-01019* +X00942Y-01026* +X00949Y-01032* +X00958Y-01035* +X00967Y-01036* +X00975Y-01035* +X00984Y-01032* +X00991Y-01026* +X00996Y-01019* +X01Y-01011* +X01001Y-01002* +X01Y-00997* +X01004Y-00991* +X01006Y-00983* +Y-00794* +X01195Y-00604* +X01199Y-00598* +X01201Y-0059* +Y-00427* +X01199Y-00419* +X01195Y-00412* +X01149Y-00366* +X01142Y-00362* +X01134Y-0036* +X0109* +X01087Y-00356* +X0108Y-00351* +X01071Y-00347* +X01063Y-00346* +G37* +G36* +X00031Y-0133D02* +X00023Y-01331D01* +X00016Y-01334* +X00009Y-01339* +X00004Y-01345* +X00002Y-0135* +X-00002* +X-00004Y-01345* +X-00009Y-01339* +X-00016Y-01334* +X-00023Y-01331* +X-00031Y-0133* +X-00039Y-01331* +X-00046Y-01334* +X-00053Y-01339* +X-00058Y-01345* +X-00061Y-01353* +X-00062Y-01361* +Y-01369* +X-00061Y-01377* +X-00058Y-01384* +X-00053Y-0139* +X-00046Y-01395* +X-00039Y-01398* +X-00031Y-014* +X-00023Y-01398* +X-00016Y-01395* +X-00009Y-0139* +X-00004Y-01384* +X-00002Y-01379* +X00002* +X00004Y-01384* +X00009Y-0139* +X00016Y-01395* +X00023Y-01398* +X00031Y-014* +X00039Y-01398* +X00046Y-01395* +X00053Y-0139* +X00058Y-01384* +X00061Y-01377* +X00062Y-01369* +Y-01361* +X00061Y-01353* +X00058Y-01345* +X00053Y-01339* +X00046Y-01334* +X00039Y-01331* +X00031Y-0133* +G37* +G36* +X00093Y-01459D02* +X0007D01* +Y-01485* +X0007Y-01485* +X00078Y-01482* +X00084Y-01477* +X00089Y-01471* +X00092Y-01463* +X00093Y-01459* +G37* +G36* +X0007Y-01417D02* +Y-01444D01* +X00093* +X00092Y-01439* +X00089Y-01432* +X00084Y-01425* +X00078Y-01421* +X0007Y-01417* +X0007Y-01417* +G37* +G36* +X0Y-01416D02* +X-00008Y-01417D01* +X-00015Y-01421* +X-00021Y-01425* +X-00026Y-01432* +X-00028Y-01437* +X-00034* +X-00036Y-01432* +X-00041Y-01425* +X-00047Y-01421* +X-00054Y-01417* +X-00062Y-01416* +X-0007Y-01417* +X-00078Y-01421* +X-00084Y-01425* +X-00089Y-01432* +X-00092Y-01439* +X-00093Y-01447* +Y-01455* +X-00092Y-01463* +X-00089Y-01471* +X-00084Y-01477* +X-00078Y-01482* +X-0007Y-01485* +X-00062Y-01486* +X-00054Y-01485* +X-00047Y-01482* +X-00041Y-01477* +X-00036Y-01471* +X-00034Y-01466* +X-00028* +X-00026Y-01471* +X-00021Y-01477* +X-00015Y-01482* +X-00008Y-01485* +X0Y-01486* +X00008Y-01485* +X00015Y-01482* +X00021Y-01477* +X00026Y-01471* +X00028Y-01466* +X00034* +X00036Y-01471* +X00041Y-01477* +X00047Y-01482* +X00054Y-01485* +X00055Y-01485* +Y-01451* +Y-01417* +X00054Y-01417* +X00047Y-01421* +X00041Y-01425* +X00036Y-01432* +X00034Y-01437* +X00028* +X00026Y-01432* +X00021Y-01425* +X00015Y-01421* +X00008Y-01417* +X0Y-01416* +G37* +G36* +X00662Y-00688D02* +X0065Y-0069D01* +X00638Y-00695* +X00628Y-00703* +X0062Y-00713* +X00615Y-00724* +X00614Y-00737* +X00615Y-0075* +X0062Y-00761* +X00628Y-00772* +X00638Y-00779* +X0065Y-00784* +X00662Y-00786* +X00675Y-00784* +X00687Y-00779* +X00697Y-00772* +X00705Y-00761* +X0071Y-0075* +X00711Y-00737* +X0071Y-00724* +X00705Y-00713* +X00697Y-00703* +X00687Y-00695* +X00675Y-0069* +X00662Y-00688* +G37* +G36* +X-00407D02* +X-00419Y-0069D01* +X-00431Y-00695* +X-00441Y-00703* +X-00449Y-00713* +X-00453Y-00722* +X-00616* +X-0062Y-00713* +X-00628Y-00703* +X-00638Y-00695* +X-0065Y-0069* +X-00662Y-00688* +X-00675Y-0069* +X-00687Y-00695* +X-00697Y-00703* +X-00705Y-00713* +X-0071Y-00724* +X-00711Y-00737* +X-0071Y-0075* +X-00705Y-00761* +X-00697Y-00772* +X-00687Y-00779* +X-00675Y-00784* +X-00662Y-00786* +X-0065Y-00784* +X-00638Y-00779* +X-00628Y-00772* +X-0062Y-00761* +X-00616Y-00752* +X-00453* +X-00449Y-00761* +X-00441Y-00772* +X-00431Y-00779* +X-00419Y-00784* +X-00407Y-00786* +X-00394Y-00784* +X-00382Y-00779* +X-00372Y-00772* +X-00364Y-00761* +X-00359Y-0075* +X-00358Y-00737* +X-00359Y-00724* +X-00364Y-00713* +X-00372Y-00703* +X-00382Y-00695* +X-00394Y-0069* +X-00407Y-00688* +G37* +G36* +X-0131Y-00478D02* +X-01319Y-0048D01* +X-01327Y-00483* +X-01334Y-00488* +X-01339Y-00496* +X-01343Y-00504* +X-01344Y-00513* +X-01343Y-00522* +X-01339Y-0053* +X-01334Y-00537* +X-01331Y-00539* +Y-00591* +X-0133Y-00596* +X-01326Y-00601* +X-01213Y-00715* +X-01215Y-00719* +X-0122Y-00718* +X-01245Y-00716* +X-01269Y-00718* +X-01293Y-00724* +X-01316Y-00733* +X-01338Y-00746* +X-01357Y-00762* +X-01373Y-00781* +X-01386Y-00803* +X-01395Y-00826* +X-01401Y-0085* +X-01403Y-00875* +X-01401Y-00899* +X-01395Y-00923* +X-01386Y-00946* +X-01373Y-00968* +X-01357Y-00987* +X-01338Y-01003* +X-01316Y-01016* +X-01293Y-01025* +X-01269Y-01031* +X-01245Y-01033* +X-0122Y-01031* +X-01196Y-01025* +X-01173Y-01016* +X-01151Y-01003* +X-01132Y-00987* +X-01116Y-00968* +X-01103Y-00946* +X-01099Y-00935* +X-01094Y-00936* +Y-01034* +X-01099Y-01038* +X-01104Y-01045* +X-01108Y-01054* +X-01109Y-01063* +X-01108Y-01071* +X-01104Y-0108* +X-01099Y-01087* +X-01092Y-01092* +X-01083Y-01096* +X-01075Y-01097* +X-01066Y-01096* +X-01057Y-01092* +X-0105Y-01087* +X-01045Y-0108* +X-01041Y-01071* +X-0104Y-01063* +X-01041Y-01054* +X-01045Y-01045* +X-0105Y-01038* +X-01057Y-01033* +X-01063Y-0103* +Y-00808* +X-01064Y-00802* +X-01068Y-00797* +X-01153Y-00712* +X-01158Y-00708* +X-01164Y-00707* +X-01177* +X-013Y-00584* +Y-00546* +X-01292Y-00542* +X-01285Y-00537* +X-0128Y-0053* +X-01277Y-00522* +X-01275Y-00513* +X-01277Y-00504* +X-0128Y-00496* +X-01285Y-00488* +X-01292Y-00483* +X-01301Y-0048* +X-0131Y-00478* +G37* +G36* +X00407Y-00688D02* +X00394Y-0069D01* +X00382Y-00695* +X00372Y-00703* +X00364Y-00713* +X00359Y-00724* +X00358Y-00737* +X00359Y-0075* +X00364Y-00761* +X00372Y-00772* +X00382Y-00779* +X00394Y-00784* +X00407Y-00786* +X00419Y-00784* +X00431Y-00779* +X00441Y-00772* +X00449Y-00761* +X00454Y-0075* +X00455Y-00737* +X00454Y-00724* +X00449Y-00713* +X00441Y-00703* +X00431Y-00695* +X00419Y-0069* +X00407Y-00688* +G37* +G36* +X01245Y-00716D02* +X0122Y-00718D01* +X01196Y-00724* +X01173Y-00733* +X01151Y-00746* +X01132Y-00762* +X01116Y-00781* +X01103Y-00803* +X01094Y-00826* +X01088Y-0085* +X01086Y-00875* +X01088Y-00899* +X01094Y-00923* +X01103Y-00946* +X01116Y-00968* +X01132Y-00987* +X01151Y-01003* +X01173Y-01016* +X01196Y-01025* +X0122Y-01031* +X01245Y-01033* +X01269Y-01031* +X01293Y-01025* +X01316Y-01016* +X01338Y-01003* +X01357Y-00987* +X01373Y-00968* +X01386Y-00946* +X01395Y-00923* +X01401Y-00899* +X01403Y-00875* +X01401Y-0085* +X01395Y-00826* +X01386Y-00803* +X01373Y-00781* +X01357Y-00762* +X01338Y-00746* +X01316Y-00733* +X01293Y-00724* +X01269Y-00718* +X01245Y-00716* +G37* +G36* +X-00127Y-00688D02* +X-0014Y-0069D01* +X-00152Y-00695* +X-00162Y-00703* +X-0017Y-00713* +X-00175Y-00724* +X-00176Y-00737* +X-00175Y-0075* +X-0017Y-00761* +X-00162Y-00772* +X-00152Y-00779* +X-0014Y-00784* +X-00127Y-00786* +X-00115Y-00784* +X-00103Y-00779* +X-00093Y-00772* +X-00085Y-00761* +X-0008Y-0075* +X-00079Y-00737* +X-0008Y-00724* +X-00085Y-00713* +X-00093Y-00703* +X-00103Y-00695* +X-00115Y-0069* +X-00127Y-00688* +G37* +G36* +X00127D02* +X00115Y-0069D01* +X00103Y-00695* +X00093Y-00703* +X00085Y-00713* +X0008Y-00724* +X00079Y-00737* +X0008Y-0075* +X00085Y-00761* +X00093Y-00772* +X00103Y-00779* +X00115Y-00784* +X00127Y-00786* +X0014Y-00784* +X00152Y-00779* +X00162Y-00772* +X0017Y-00761* +X00175Y-0075* +X00176Y-00737* +X00175Y-00724* +X0017Y-00713* +X00162Y-00703* +X00152Y-00695* +X0014Y-0069* +X00127Y-00688* +G37* +G36* +X-00704Y-00181D02* +X-00717D01* +Y-00233* +X-00685* +Y-002* +X-00687Y-00192* +X-00691Y-00187* +X-00696Y-00183* +X-00704Y-00181* +G37* +G36* +X-0077Y00415D02* +X-00778Y00414D01* +X-00787Y0041* +X-00794Y00405* +X-00799Y00398* +X-00803Y00389* +X-00804Y00381* +X-00803Y00372* +X-00802Y0037* +X-00861Y00311* +X-00918* +X-00923Y0031* +X-00928Y00306* +X-01003Y00232* +X-01006Y00227* +X-01008Y00221* +Y-00372* +X-01122Y-00487* +X-01126Y-00492* +X-01129Y-00493* +X-01136Y-00498* +X-01141Y-00505* +X-01145Y-00514* +X-01146Y-00523* +X-01145Y-00531* +X-01141Y-0054* +X-01136Y-00547* +X-01129Y-00552* +X-0112Y-00556* +X-01112Y-00557* +X-01103Y-00556* +X-01094Y-00552* +X-01087Y-00547* +X-01082Y-0054* +X-01078Y-00531* +X-01077Y-00523* +X-01078Y-00514* +X-01082Y-00505* +X-01087Y-00498* +X-01087Y-00495* +X-00981Y-00389* +X-00978Y-00384* +X-00977Y-00378* +Y00214* +X-00911Y0028* +X-00855* +X-00849Y00281* +X-00844Y00285* +X-0078Y00348* +X-00778Y00347* +X-0077Y00346* +X-00761Y00347* +X-00752Y00351* +X-00745Y00356* +X-0074Y00363* +X-00736Y00372* +X-00735Y00381* +X-00736Y00389* +X-0074Y00398* +X-00745Y00405* +X-00752Y0041* +X-00761Y00414* +X-0077Y00415* +G37* +G36* +X01309Y00655D02* +X013Y00654D01* +X01291Y0065* +X01284Y00645* +X01279Y00638* +X01275Y00629* +X01274Y00621* +Y00565* +X01127* +X01119Y00564* +X0111Y00561* +X01103Y00555* +X01074Y00526* +X0094* +X00931Y00525* +X00922Y00521* +X00915Y00516* +X00831Y00432* +X00826Y00425* +X00822Y00416* +X00821Y00408* +X00822Y00399* +X00826Y0039* +X00831Y00383* +X00838Y00378* +X00847Y00374* +X00856Y00373* +X00864Y00374* +X00873Y00378* +X0088Y00383* +X00954Y00457* +X00989* +X00991Y00453* +X00964Y00425* +X0096Y00425* +X00951Y00421* +X00944Y00416* +X00939Y00409* +X00935Y004* +X00934Y00392* +X00935Y00383* +X00939Y00374* +X00944Y00367* +X00951Y00362* +X0096Y00358* +X00969Y00357* +X00977Y00358* +X00986Y00362* +X00993Y00367* +X00998Y00374* +X01002Y00383* +X01003Y00392* +X01002Y004* +X00998Y00409* +X00995Y00413* +X01019Y00437* +X01104* +X0111Y00438* +X01115Y00442* +X0115Y00477* +X01302* +X01331Y00448* +X01331Y00443* +X01329Y00442* +X01324Y00435* +X0132Y00426* +X0132Y0042* +X01314Y00418* +X01309Y00423* +X01304Y00427* +X01299Y00428* +X01288* +X01286Y00431* +X01279Y00436* +X0127Y0044* +X01262Y00441* +X01253Y0044* +X01244Y00436* +X01237Y00431* +X01235Y00428* +X01212* +X01212Y00433* +X01208Y00442* +X01203Y00449* +X01196Y00454* +X01187Y00458* +X01179Y00459* +X0117Y00458* +X01161Y00454* +X01154Y00449* +X01149Y00442* +X01145Y00433* +X01144Y00425* +X01145Y00416* +X01149Y00407* +X01154Y004* +X01161Y00395* +X0117Y00391* +X01179Y0039* +X01187Y00391* +X01196Y00395* +X01199Y00397* +X01229* +X01232Y00389* +X01237Y00382* +X01244Y00377* +X01253Y00373* +X01262Y00372* +X0127Y00373* +X01279Y00377* +X01286Y00382* +X01291Y00389* +X01292Y00391* +X01297Y00392* +X01321Y00368* +X0132Y00366* +X01319Y00358* +X0132Y00349* +X01324Y0034* +X01329Y00333* +X01336Y00328* +X01345Y00324* +X01354Y00323* +X01362Y00324* +X01371Y00328* +X01378Y00333* +X01383Y0034* +X01387Y00349* +X01388Y00358* +X01387Y00366* +X01383Y00375* +X01378Y00382* +X01374Y00384* +Y00391* +X01378Y00393* +X01383Y004* +X01387Y00409* +X01387Y00413* +X01392Y00414* +X01441Y00366* +Y00198* +X01244Y0* +X01235Y00001* +X01222Y0* +X0121Y-00004* +X012Y-00012* +X01193Y-00022* +X01188Y-00034* +X01186Y-00047* +Y-00086* +X01188Y-00099* +X01193Y-0011* +X012Y-0012* +X0121Y-00128* +X01222Y-00133* +X01235Y-00135* +X01247Y-00133* +X01259Y-00128* +X01269Y-0012* +X01277Y-0011* +X01282Y-00099* +X01284Y-00086* +Y-00056* +X015Y00159* +X01505Y00166* +X01509Y00175* +X0151Y00184* +Y0038* +X01509Y00389* +X01505Y00397* +X015Y00404* +X01343Y00561* +Y00621* +X01342Y00629* +X01338Y00638* +X01333Y00645* +X01326Y0065* +X01317Y00654* +X01309Y00655* +G37* +G36* +X-00475Y00836D02* +X-00483Y00835D01* +X-00492Y00831* +X-00499Y00826* +X-00504Y00819* +X-00508Y0081* +X-00509Y00802* +Y0076* +X-00924* +X-00933Y00759* +X-00941Y00756* +X-00948Y0075* +X-00953Y00743* +X-00957Y00735* +X-00958Y00726* +X-00957Y00717* +X-00953Y00709* +X-00948Y00702* +X-00941Y00696* +X-00933Y00693* +X-00924Y00692* +X-00458* +X-00375Y00608* +X-00368Y00603* +X-00359Y00599* +X-00351Y00598* +X-00224* +X-00176Y0055* +X-00169Y00545* +X-0016Y00541* +X-00152Y0054* +X-00128* +X-00119Y00541* +X-0011Y00545* +X-00103Y0055* +X-00098Y00557* +X-00094Y00566* +X-00093Y00575* +X-00093Y00575* +X-00093Y00576* +X-00094Y00584* +X-00098Y00593* +X-00103Y006* +X-0011Y00605* +X-00119Y00609* +X-00128Y0061* +X-00135Y00609* +X-00137* +X-00185Y00657* +X-00192Y00662* +X-00201Y00666* +X-0021Y00667* +X-00336* +X-00425Y00755* +X-00432Y00761* +X-0044Y00764* +X-0044Y00764* +Y00802* +X-00441Y0081* +X-00445Y00819* +X-0045Y00826* +X-00457Y00831* +X-00466Y00835* +X-00475Y00836* +G37* +G36* +X00901Y00372D02* +X00892Y00371D01* +X00883Y00367* +X00876Y00362* +X00871Y00355* +X00867Y00346* +X00866Y00338* +X00867Y00329* +X00871Y0032* +X00876Y00313* +X00883Y00308* +X00892Y00304* +X00901Y00303* +X00909Y00304* +X00912Y00305* +X00917Y00302* +X00923Y00301* +X01204* +X01209Y00302* +X0121Y00303* +X01216Y00302* +X01224Y00303* +X01233Y00307* +X0124Y00312* +X01245Y00319* +X01249Y00328* +X0125Y00337* +X01249Y00345* +X01245Y00354* +X0124Y00361* +X01233Y00366* +X01224Y0037* +X01216Y00371* +X01207Y0037* +X01198Y00366* +X01191Y00361* +X01186Y00354* +X01182Y00345* +X01181Y00337* +X01181Y00336* +X01178Y00332* +X00938* +X00935Y00336* +X00935Y00338* +X00934Y00346* +X0093Y00355* +X00925Y00362* +X00918Y00367* +X00909Y00371* +X00901Y00372* +G37* +G36* +X-00381Y00583D02* +X-00645D01* +X-00651Y00582* +X-00656Y00578* +X-0075Y00484* +X-0084* +X-0084Y00485* +X-00847Y0049* +X-00856Y00494* +X-00865Y00495* +X-00873Y00494* +X-00882Y0049* +X-00889Y00485* +X-0089Y00483* +X-00897* +X-00899Y00486* +X-00906Y00491* +X-00915Y00495* +X-00924Y00496* +X-00932Y00495* +X-00941Y00491* +X-00948Y00486* +X-00953Y00479* +X-00957Y0047* +X-00958Y00462* +X-00957Y00453* +X-00953Y00444* +X-00948Y00437* +X-00941Y00432* +X-00932Y00428* +X-00924Y00427* +X-00915Y00428* +X-00913Y00429* +X-00893Y0041* +X-00888Y00406* +X-00883Y00405* +X-00848* +X-00842Y00406* +X-00837Y0041* +X-00813Y00433* +X-00736* +X-0073Y00434* +X-00725Y00438* +X-0063Y00532* +X-00395* +X-00381Y00518* +Y00505* +X-0038Y00499* +X-00376Y00494* +X-00353Y00471* +X-00348Y00467* +X-00343Y00466* +X-00289* +X-00283Y00467* +X-00281Y00468* +X-00278Y00467* +X-0027Y00466* +X-00268Y00466* +X-00264Y00463* +Y00362* +X-00263Y00356* +X-00259Y00351* +X-00213Y00304* +X-00215Y00299* +X-00221Y00298* +X-0023Y00294* +X-00238Y00288* +X-00244Y0028* +X-00248Y00271* +X-00249Y00261* +X-00248Y0025* +X-00244Y00241* +X-00238Y00233* +X-0023Y00227* +X-00221Y00223* +X-00211Y00222* +X-002Y00223* +X-00191Y00227* +X-00186Y00231* +X-00181Y00228* +Y00193* +X-00186Y0019* +X-00191Y00194* +X-002Y00198* +X-00211Y00199* +X-00221Y00198* +X-0023Y00194* +X-00238Y00188* +X-00244Y0018* +X-00248Y00171* +X-00249Y00161* +X-00248Y0015* +X-00244Y00141* +X-00238Y00133* +X-0023Y00127* +X-00221Y00123* +X-00211Y00122* +X-002Y00123* +X-00191Y00127* +X-00186Y00131* +X-00181Y00128* +Y00093* +X-00186Y0009* +X-00191Y00094* +X-002Y00098* +X-00211Y00099* +X-00221Y00098* +X-0023Y00094* +X-00238Y00088* +X-00244Y0008* +X-00248Y00071* +X-00249Y00061* +X-00248Y0005* +X-00244Y00041* +X-00238Y00033* +X-0023Y00027* +X-00221Y00023* +X-00211Y00022* +X-002Y00023* +X-00191Y00027* +X-00186Y00031* +X-00181Y00028* +Y-00006* +X-00186Y-00009* +X-00191Y-00005* +X-002Y-00001* +X-00211Y0* +X-00221Y-00001* +X-0023Y-00005* +X-00238Y-00011* +X-00244Y-00019* +X-00248Y-00028* +X-00249Y-00039* +X-00249Y-00043* +X-00253Y-00046* +X-00277Y-00022* +Y00217* +X-00278Y00226* +X-00282Y00234* +X-00288Y00241* +X-00332Y00285* +X-00339Y00291* +X-00347Y00295* +X-00357Y00296* +X-00395* +X-004Y00298* +X-00411Y00299* +X-00421Y00298* +X-0043Y00294* +X-00438Y00288* +X-00444Y0028* +X-00448Y00271* +X-00449Y00261* +X-00448Y0025* +X-00444Y00241* +X-00438Y00233* +X-0043Y00227* +X-00421Y00223* +X-00411Y00222* +X-004Y00223* +X-00395Y00225* +X-00371* +X-00348Y00202* +Y-00037* +X-00347Y-00046* +X-00343Y-00054* +X-00337Y-00061* +X-00259Y-0014* +X-00316Y-00198* +X-00322Y-00205* +X-00326Y-00213* +X-00327Y-00223* +Y-0027* +X-00326Y-00279* +X-00322Y-00287* +X-00316Y-00294* +X-00309Y-003* +X-00301Y-00304* +X-00292Y-00305* +X-00282Y-00304* +X-00274Y-003* +X-00267Y-00294* +X-00261Y-00287* +X-00257Y-00279* +X-00256Y-0027* +Y-00237* +X-00191Y-00172* +X-00191Y-00172* +X-00186Y-00168* +X-00181Y-00171* +Y-00209* +X-0018Y-00214* +X-00176Y-00219* +X-00113Y-00282* +X-00114Y-00287* +X-00115Y-00288* +X-0012Y-00295* +X-00124Y-00304* +X-00125Y-00313* +X-00124Y-00321* +X-0012Y-0033* +X-00115Y-00337* +X-00108Y-00342* +X-00099Y-00346* +X-00091Y-00347* +X-00082Y-00346* +X-00073Y-00342* +X-00066Y-00337* +X-00065Y-00336* +X-0006Y-00335* +X-00024Y-00371* +X-00019Y-00375* +X-00014Y-00376* +X00095* +X00216Y-00496* +Y-00712* +X00217Y-00718* +X0022Y-00723* +X00268Y-0077* +X00268Y-00771* +X00266Y-00775* +X00259Y-00776* +X0025Y-0078* +X00243Y-00785* +X00238Y-00792* +X00234Y-00801* +X00233Y-0081* +X00234Y-00818* +X00238Y-00827* +X00243Y-00834* +X0025Y-00839* +X00259Y-00843* +X00268Y-00844* +X00276Y-00843* +X00278Y-00844* +X0028Y-00846* +X00281Y-00854* +X00285Y-00863* +X0029Y-0087* +X00297Y-00875* +X00306Y-00879* +X00315Y-0088* +X00323Y-00879* +X00332Y-00875* +X00339Y-0087* +X00344Y-00863* +X00348Y-00854* +X00349Y-00846* +X00348Y-00837* +X00344Y-00828* +X00339Y-00821* +X00332Y-00816* +X00323Y-00812* +X00323Y-00812* +Y-0076* +X00322Y-00754* +X00318Y-00749* +X00266Y-00697* +Y-00482* +X00265Y-00476* +X00262Y-00471* +X00121Y-0033* +X00116Y-00326* +X0011Y-00325* +X00069* +X00066Y-00321* +X00066Y-00321* +X00065Y-00312* +X00061Y-00303* +X00056Y-00296* +X00049Y-00291* +X0004Y-00287* +X00032Y-00286* +X00023Y-00287* +X00014Y-00291* +X00007Y-00296* +X00002Y-00303* +X-00001Y-00312* +X-00001Y-00316* +X-00006Y-00318* +X-0013Y-00194* +Y-0017* +X-00125Y-00167* +X-00119Y-00172* +X-0011Y-00176* +X-001Y-00177* +X-00089Y-00176* +X-0008Y-00172* +X-00072Y-00166* +X-00066Y-00158* +X-00062Y-00149* +X-00061Y-00139* +X-00062Y-00128* +X-00066Y-00119* +X-00072Y-00111* +X-0008Y-00105* +X-00089Y-00101* +X-001Y-001* +X-0011Y-00101* +X-00119Y-00105* +X-00125Y-0011* +X-0013Y-00107* +Y-0007* +X-00125Y-00067* +X-00119Y-00072* +X-0011Y-00076* +X-001Y-00077* +X-00089Y-00076* +X-0008Y-00072* +X-00072Y-00066* +X-00066Y-00058* +X-00062Y-00049* +X-00061Y-00039* +X-00062Y-00028* +X-00066Y-00019* +X-00072Y-00011* +X-0008Y-00005* +X-00089Y-00001* +X-001Y0* +X-0011Y-00001* +X-00119Y-00005* +X-00125Y-0001* +X-0013Y-00007* +Y00029* +X-00125Y00032* +X-00119Y00027* +X-0011Y00023* +X-001Y00022* +X-00089Y00023* +X-0008Y00027* +X-00072Y00033* +X-00066Y00041* +X-00062Y0005* +X-00061Y00061* +X-00062Y00071* +X-00066Y0008* +X-00072Y00088* +X-0008Y00094* +X-00089Y00098* +X-001Y00099* +X-0011Y00098* +X-00119Y00094* +X-00125Y00089* +X-0013Y00092* +Y00129* +X-00125Y00132* +X-00119Y00127* +X-0011Y00123* +X-001Y00122* +X-00089Y00123* +X-0008Y00127* +X-00072Y00133* +X-00066Y00141* +X-00062Y0015* +X-00061Y00161* +X-00062Y00171* +X-00066Y0018* +X-00072Y00188* +X-0008Y00194* +X-00089Y00198* +X-001Y00199* +X-0011Y00198* +X-00119Y00194* +X-00125Y00189* +X-0013Y00192* +Y00229* +X-00125Y00232* +X-00119Y00227* +X-0011Y00223* +X-001Y00222* +X-00089Y00223* +X-00084Y00225* +X-00067* +X-00034Y00192* +Y-00039* +X-00033Y-00048* +X-00029Y-00056* +X-00023Y-00063* +X00063Y-00151* +X00066Y-00158* +X00072Y-00166* +X0008Y-00172* +X00085Y-00174* +X00228Y-00316* +X00235Y-00322* +X00243Y-00326* +X00253Y-00327* +X00327* +X00336Y-00326* +X00344Y-00322* +X00351Y-00316* +X00357Y-00309* +X00361Y-00301* +X00362Y-00292* +X00361Y-00282* +X00357Y-00274* +X00351Y-00267* +X00344Y-00261* +X00336Y-00257* +X00327Y-00256* +X00267* +X00184Y-00173* +X00187Y-00169* +X00191Y-00172* +X002Y-00176* +X00211Y-00177* +X00221Y-00176* +X0023Y-00172* +X00238Y-00166* +X00244Y-00158* +X00248Y-00149* +X00249Y-00139* +X00248Y-00128* +X00244Y-00119* +X00238Y-00111* +X0023Y-00105* +X00221Y-00101* +X00211Y-001* +X002Y-00101* +X00191Y-00105* +X00183Y-00111* +X00177Y-00119* +X00173Y-00128* +X00172Y-00139* +X00173Y-00149* +X00177Y-00158* +X0018Y-00162* +X00176Y-00165* +X00135Y-00124* +X00133Y-00119* +X00127Y-00111* +X00119Y-00105* +X00115Y-00103* +X00094Y-00082* +X00096Y-00077* +X001Y-00077* +X0011Y-00076* +X00119Y-00072* +X00127Y-00066* +X00133Y-00058* +X00137Y-00049* +X00138Y-00039* +X00137Y-00028* +X00133Y-00019* +X00127Y-00011* +X00119Y-00005* +X0011Y-00001* +X001Y0* +X00089Y-00001* +X0008Y-00005* +X00072Y-00011* +X00066Y-00019* +X00062Y-00028* +X00061Y-00039* +X00061Y-00042* +X00056Y-00044* +X00036Y-00024* +Y00206* +X00035Y00215* +X00031Y00224* +X00025Y00231* +X-00028Y00285* +X-00035Y00291* +X-00044Y00295* +X-00053Y00296* +X-00084* +X-00089Y00298* +X-001Y00299* +X-0011Y00298* +X-00119Y00294* +X-00126Y00289* +X-0013Y0029* +X-00131Y00291* +X-00131Y00293* +X-00135Y00298* +X-00213Y00376* +Y00516* +X-00214Y00522* +X-00217Y00527* +X-00242Y00551* +X-00247Y00555* +X-00253Y00556* +X-00347* +X-0037Y00578* +X-00375Y00582* +X-00381Y00583* +G37* +G36* +X001Y00299D02* +X00089Y00298D01* +X0008Y00294* +X00072Y00288* +X00066Y0028* +X00062Y00271* +X00061Y00261* +X00062Y0025* +X00066Y00241* +X00072Y00233* +X0008Y00227* +X00089Y00223* +X001Y00222* +X0011Y00223* +X00119Y00227* +X00127Y00233* +X00133Y00241* +X00137Y0025* +X00138Y00261* +X00137Y00271* +X00133Y0028* +X00127Y00288* +X00119Y00294* +X0011Y00298* +X001Y00299* +G37* +G36* +X00282Y0047D02* +X00273Y00469D01* +X00264Y00465* +X00257Y0046* +X00252Y00453* +X00248Y00444* +X00247Y00436* +X00248Y00427* +X00252Y00418* +X00257Y00411* +X00264Y00406* +X00266Y00405* +Y0035* +X00267Y00344* +X0027Y00339* +X00314Y00295* +X00313Y00293* +X00312Y00285* +X00313Y00276* +X00317Y00267* +X00322Y0026* +X00329Y00255* +X00338Y00251* +X00347Y0025* +X00355Y00251* +X00364Y00255* +X00367Y00257* +X00372Y00255* +X00373Y0025* +X00377Y00241* +X00383Y00233* +X00391Y00227* +X004Y00223* +X00411Y00222* +X00421Y00223* +X0043Y00227* +X00438Y00233* +X00444Y00241* +X00448Y0025* +X00449Y00261* +X00448Y00271* +X00444Y0028* +X00438Y00288* +X0043Y00294* +X00421Y00298* +X00411Y00299* +X004Y00298* +X00391Y00294* +X00385Y0029* +X0038Y00292* +X0038Y00293* +X00376Y00302* +X00371Y00309* +X00364Y00314* +X00355Y00318* +X00347Y00319* +X00338Y00318* +X00336Y00317* +X00296Y00356* +Y00405* +X00299Y00406* +X00306Y00411* +X00311Y00418* +X00315Y00427* +X00316Y00436* +X00315Y00444* +X00311Y00453* +X00306Y0046* +X00299Y00465* +X0029Y00469* +X00282Y0047* +G37* +G36* +X01356Y00729D02* +X0119D01* +X01184Y00728* +X01179Y00724* +X01163Y00708* +X01132* +X01126Y00707* +X01121Y00703* +X01068Y00651* +X01062Y0065* +X01053Y00646* +X01046Y00641* +X01041Y00634* +X01037Y00625* +X01036Y00617* +X01037Y00608* +X01041Y00599* +X01046Y00592* +X01053Y00587* +X01062Y00583* +X01071Y00582* +X01079Y00583* +X01088Y00587* +X01095Y00592* +X011Y00599* +X01104Y00608* +X01105Y00617* +X01104Y00625* +X011Y00634* +X01098Y00637* +X0111Y00649* +X01115Y00647* +X01115Y00644* +X01119Y00635* +X01124Y00628* +X01131Y00623* +X0114Y00619* +X01149Y00618* +X01157Y00619* +X01166Y00623* +X01173Y00628* +X01178Y00635* +X01182Y00644* +X01183Y00653* +X01182Y00656* +X01205Y00678* +X01341* +X01361Y00658* +Y00619* +X01362Y00613* +X01366Y00608* +X0138Y00594* +X0138Y00594* +X01376Y00585* +X01375Y00577* +X01376Y00568* +X0138Y00559* +X01385Y00552* +X01392Y00547* +X01401Y00543* +X0141Y00542* +X01418Y00543* +X01427Y00547* +X01434Y00552* +X01439Y00559* +X01443Y00568* +X01444Y00577* +X01443Y00585* +X01439Y00594* +X01434Y00601* +X01434Y00601* +X01435Y00606* +X01441Y00611* +X01446Y00618* +X0145Y00627* +X01451Y00636* +X0145Y00644* +X01446Y00653* +X01441Y0066* +X01434Y00665* +X01425Y00669* +X01422Y00669* +X01367Y00724* +X01362Y00728* +X01356Y00729* +G37* +G36* +X00606Y00889D02* +X00595Y00888D01* +X00586Y00884* +X00578Y00878* +X00572Y0087* +X00568Y00861* +X00567Y00851* +X00568Y0084* +X00572Y00831* +X00578Y00823* +X00586Y00817* +X00595Y00813* +X00606Y00812* +X00616Y00813* +X00625Y00817* +X00633Y00823* +X00639Y00831* +X00643Y0084* +X00644Y00851* +X00643Y00861* +X00639Y0087* +X00633Y00878* +X00625Y00884* +X00616Y00888* +X00606Y00889* +G37* +G36* +X00544Y00889D02* +X00467D01* +Y00812* +X00544* +Y00889* +G37* +G36* +X00932Y00948D02* +X00879D01* +X0087Y00947* +X00862Y00944* +X00855Y00938* +X00806Y00889* +X00806Y00889* +X00795Y00888* +X00786Y00884* +X00778Y00878* +X00772Y0087* +X00768Y00861* +X00767Y00851* +X00768Y0084* +X00772Y00831* +X00778Y00823* +X00786Y00817* +X00795Y00813* +X00806Y00812* +X00816Y00813* +X00825Y00817* +X00827Y00818* +X00833Y00821* +X0084Y00826* +X00862Y00848* +X00867Y00847* +X00868Y0084* +X00872Y00831* +X00878Y00823* +X00886Y00817* +X00895Y00813* +X00906Y00812* +X00916Y00813* +X00925Y00817* +X00933Y00823* +X00939Y00831* +X00943Y0084* +X00944Y00851* +X00944Y00851* +X00948Y00854* +X00951Y00853* +X0096Y00852* +X01205* +X01247Y0081* +X01254Y00804* +X01262Y00801* +X01271Y008* +X0128Y00801* +X01288Y00804* +X01295Y0081* +X01301Y00817* +X01304Y00825* +X01305Y00834* +X01304Y00843* +X01301Y00851* +X01295Y00858* +X01243Y00911* +X01236Y00916* +X01228Y00919* +X01219Y00921* +X00974* +X00956Y00938* +X00949Y00944* +X00941Y00947* +X00932Y00948* +G37* +G36* +X00706Y00889D02* +X00695Y00888D01* +X00686Y00884* +X00678Y00878* +X00672Y0087* +X00668Y00861* +X00667Y00851* +X00668Y0084* +X00669Y00839* +X00667Y00836* +X00665Y00835* +X00657Y00834* +X00648Y0083* +X00641Y00825* +X00636Y00818* +X00632Y00809* +X00631Y00801* +X00632Y00792* +X00636Y00783* +X00641Y00776* +X00646Y00773* +Y00767* +X00641Y00766* +X00639Y0077* +X00633Y00778* +X00625Y00784* +X00616Y00788* +X00606Y00789* +X00595Y00788* +X00586Y00784* +X00578Y00778* +X00572Y0077* +X00568Y00761* +X00567Y00751* +X00568Y0074* +X00572Y00731* +X00578Y00723* +X00586Y00717* +X00595Y00713* +X00606Y00712* +X00616Y00713* +X00625Y00717* +X00633Y00723* +X00639Y00731* +X00641Y00735* +X00646Y00734* +Y00732* +X00647Y00726* +X0065Y00721* +X0068Y00691* +Y00636* +X00676Y00636* +X00667Y00632* +X0066Y00627* +X00655Y0062* +X00651Y00611* +X0065Y00603* +X00651Y00594* +X00655Y00585* +X0066Y00578* +X00667Y00573* +X00676Y00569* +X00685Y00568* +X00693Y00569* +X00702Y00573* +X00709Y00578* +X00712Y00582* +X00717* +X00719Y00578* +X00726Y00573* +X00735Y00569* +X00744Y00568* +X00752Y00569* +X00761Y00573* +X00768Y00578* +X00773Y00585* +X00777Y00594* +X00778Y00603* +X00777Y00611* +X00773Y0062* +X00768Y00627* +X00761Y00632* +X00752Y00636* +X00744Y00637* +X00735Y00636* +X00733Y00637* +X00731Y00639* +Y00691* +X00761Y00721* +X00764Y00726* +X00765Y00732* +Y00734* +X0077Y00735* +X00772Y00731* +X00778Y00723* +X00786Y00717* +X00795Y00713* +X00806Y00712* +X00816Y00713* +X00825Y00717* +X00833Y00723* +X00839Y00731* +X00843Y0074* +X00844Y00751* +X00843Y00761* +X00839Y0077* +X00833Y00778* +X00825Y00784* +X00816Y00788* +X00806Y00789* +X00795Y00788* +X00786Y00784* +X00778Y00778* +X00772Y0077* +X0077Y00766* +X00765Y00767* +Y00773* +X0077Y00776* +X00775Y00783* +X00779Y00792* +X0078Y00801* +X00779Y00809* +X00775Y00818* +X0077Y00825* +X00763Y0083* +X00754Y00834* +X00746Y00835* +X00744Y00836* +X00742Y00839* +X00743Y0084* +X00744Y00851* +X00743Y00861* +X00739Y0087* +X00733Y00878* +X00725Y00884* +X00716Y00888* +X00706Y00889* +G37* +G36* +X-01176Y00825D02* +X-01185Y00824D01* +X-01193Y0082* +X-012Y00815* +X-01206Y00808* +X-01209Y00799* +X-01211Y00791* +X-01209Y00782* +X-01206Y00773* +X-012Y00766* +X-01193Y00761* +X-01192Y0076* +Y00667* +X-0119Y00661* +X-01187Y00656* +X-01166Y00635* +X-01167Y00633* +X-01168Y00625* +X-01167Y00616* +X-01163Y00607* +X-01158Y006* +X-01151Y00595* +X-01142Y00591* +X-01134Y0059* +X-01125Y00591* +X-01116Y00595* +X-01109Y006* +X-01104Y00607* +X-011Y00616* +X-01099Y00625* +X-011Y00633* +X-01104Y00642* +X-01109Y00649* +X-01116Y00654* +X-01125Y00658* +X-01134Y00659* +X-01142Y00658* +X-01144Y00657* +X-01161Y00674* +Y0076* +X-01159Y00761* +X-01152Y00766* +X-01147Y00773* +X-01143Y00782* +X-01142Y00791* +X-01143Y00799* +X-01147Y00808* +X-01152Y00815* +X-01159Y0082* +X-01167Y00824* +X-01176Y00825* +G37* +G36* +X00506Y00789D02* +X00495Y00788D01* +X00486Y00784* +X00478Y00778* +X00472Y0077* +X00468Y00761* +X00467Y00751* +X00468Y0074* +X00472Y00731* +X00478Y00723* +X00486Y00717* +X00495Y00713* +X00506Y00712* +X00516Y00713* +X00525Y00717* +X00533Y00723* +X00539Y00731* +X00543Y0074* +X00544Y00751* +X00543Y00761* +X00539Y0077* +X00533Y00778* +X00525Y00784* +X00516Y00788* +X00506Y00789* +G37* +G36* +X00906D02* +X00895Y00788D01* +X00886Y00784* +X00878Y00778* +X00872Y0077* +X00868Y00761* +X00867Y00751* +X00868Y0074* +X00872Y00731* +X00878Y00723* +X00886Y00717* +X00895Y00713* +X00906Y00712* +X00916Y00713* +X00925Y00717* +X00933Y00723* +X00939Y00731* +X00943Y0074* +X00944Y00751* +X00943Y00761* +X00939Y0077* +X00933Y00778* +X00925Y00784* +X00916Y00788* +X00906Y00789* +G37* +G36* +X00211Y0D02* +X002Y-00001D01* +X00191Y-00005* +X00183Y-00011* +X00177Y-00019* +X00173Y-00028* +X00172Y-00039* +X00173Y-00049* +X00177Y-00058* +X00183Y-00066* +X00191Y-00072* +X002Y-00076* +X00211Y-00077* +X00221Y-00076* +X0023Y-00072* +X00238Y-00066* +X00244Y-00058* +X00248Y-00049* +X00249Y-00039* +X00248Y-00028* +X00244Y-00019* +X00238Y-00011* +X0023Y-00005* +X00221Y-00001* +X00211Y0* +G37* +G36* +Y00299D02* +X002Y00298D01* +X00191Y00294* +X00183Y00288* +X00177Y0028* +X00173Y00271* +X00172Y00266* +X00172Y00265* +X00171Y00256* +X00172Y00247* +X00176Y00238* +X00181Y00231* +X00208Y00204* +X00206Y00199* +X002Y00198* +X00191Y00194* +X00183Y00188* +X00177Y0018* +X00173Y00171* +X00172Y00161* +X00173Y0015* +X00177Y00141* +X00183Y00133* +X00191Y00127* +X002Y00123* +X00211Y00122* +X00221Y00123* +X0023Y00127* +X00238Y00133* +X00244Y00141* +X00248Y0015* +X00249Y00156* +X00254Y00158* +X00258Y00154* +Y-00023* +X0026Y-00032* +X00263Y-0004* +X00269Y-00048* +X00375Y-00154* +Y-00177* +X00376Y-00186* +X0038Y-00194* +X00386Y-00201* +X00452Y-00267* +X00459Y-00273* +X00467Y-00277* +X00477Y-00278* +X00486Y-00277* +X00494Y-00273* +X00501Y-00267* +X00507Y-0026* +X00511Y-00252* +X00512Y-00243* +X00511Y-00233* +X00507Y-00225* +X00501Y-00218* +X00446Y-00162* +Y-00154* +X00448Y-00149* +X00449Y-00139* +X00448Y-00128* +X00444Y-00119* +X00438Y-00111* +X0043Y-00105* +X00423Y-00102* +X00402Y-00081* +X00405Y-00077* +X00411Y-00077* +X00421Y-00076* +X0043Y-00072* +X00438Y-00066* +X00444Y-00058* +X00448Y-00049* +X00449Y-00039* +X00448Y-00028* +X00444Y-00019* +X00438Y-00011* +X0043Y-00005* +X00421Y-00001* +X00411Y0* +X004Y-00001* +X00391Y-00005* +X00383Y-00011* +X00377Y-00019* +X00373Y-00028* +X00372Y-00039* +X00372Y-00044* +X00368Y-00047* +X00329Y-00008* +Y00168* +X00328Y00178* +X00324Y00186* +X00319Y00193* +X00249Y00263* +X00248Y00271* +X00244Y0028* +X00238Y00288* +X0023Y00294* +X00221Y00298* +X00211Y00299* +G37* +G36* +X01393Y0D02* +X01388Y0D01* +X01376Y-00004* +X01366Y-00012* +X01358Y-00022* +X01353Y-00034* +X01351Y-00047* +Y-00059* +X01393* +Y0* +G37* +G36* +X-00411Y0D02* +X-00421Y-00001D01* +X-0043Y-00005* +X-00438Y-00011* +X-00444Y-00019* +X-00448Y-00028* +X-00449Y-00039* +X-00448Y-00049* +X-00444Y-00058* +X-00438Y-00066* +X-0043Y-00072* +X-00421Y-00076* +X-00411Y-00077* +X-004Y-00076* +X-00391Y-00072* +X-00383Y-00066* +X-00377Y-00058* +X-00373Y-00049* +X-00372Y-00039* +X-00373Y-00028* +X-00377Y-00019* +X-00383Y-00011* +X-00391Y-00005* +X-004Y-00001* +X-00411Y0* +G37* +G36* +Y-001D02* +X-00421Y-00101D01* +X-0043Y-00105* +X-00438Y-00111* +X-00444Y-00119* +X-00448Y-00128* +X-00449Y-00139* +X-00448Y-00149* +X-00444Y-00158* +X-00438Y-00166* +X-0043Y-00172* +X-00421Y-00176* +X-00411Y-00177* +X-004Y-00176* +X-00391Y-00172* +X-00383Y-00166* +X-00377Y-00158* +X-00373Y-00149* +X-00372Y-00139* +X-00373Y-00128* +X-00377Y-00119* +X-00383Y-00111* +X-00391Y-00105* +X-004Y-00101* +X-00411Y-001* +G37* +G36* +X01393Y-00074D02* +X01351D01* +Y-00086* +X01353Y-00099* +X01358Y-0011* +X01366Y-0012* +X01376Y-00128* +X01388Y-00133* +X01393Y-00134* +Y-00074* +G37* +G36* +X01449D02* +X01408D01* +Y-00134* +X01413Y-00133* +X01425Y-00128* +X01435Y-0012* +X01442Y-0011* +X01447Y-00099* +X01449Y-00086* +Y-00074* +G37* +G36* +X01408Y0D02* +Y-00059D01* +X01449* +Y-00047* +X01447Y-00034* +X01442Y-00022* +X01435Y-00012* +X01425Y-00004* +X01413Y0* +X01408Y0* +G37* +G36* +X-00411Y00199D02* +X-00421Y00198D01* +X-0043Y00194* +X-00438Y00188* +X-00444Y0018* +X-00448Y00171* +X-00449Y00161* +X-00448Y0015* +X-00444Y00141* +X-00438Y00133* +X-0043Y00127* +X-00421Y00123* +X-00411Y00122* +X-004Y00123* +X-00391Y00127* +X-00383Y00133* +X-00377Y00141* +X-00373Y0015* +X-00372Y00161* +X-00373Y00171* +X-00377Y0018* +X-00383Y00188* +X-00391Y00194* +X-004Y00198* +X-00411Y00199* +G37* +G36* +X001D02* +X00089Y00198D01* +X0008Y00194* +X00072Y00188* +X00066Y0018* +X00062Y00171* +X00061Y00161* +X00062Y0015* +X00066Y00141* +X00072Y00133* +X0008Y00127* +X00089Y00123* +X001Y00122* +X0011Y00123* +X00119Y00127* +X00127Y00133* +X00133Y00141* +X00137Y0015* +X00138Y00161* +X00137Y00171* +X00133Y0018* +X00127Y00188* +X00119Y00194* +X0011Y00198* +X001Y00199* +G37* +G36* +X00411D02* +X004Y00198D01* +X00391Y00194* +X00383Y00188* +X00377Y0018* +X00373Y00171* +X00372Y00161* +X00373Y0015* +X00377Y00141* +X00383Y00133* +X00391Y00127* +X004Y00123* +X00411Y00122* +X00421Y00123* +X0043Y00127* +X00438Y00133* +X00444Y00141* +X00448Y0015* +X00449Y00161* +X00448Y00171* +X00444Y0018* +X00438Y00188* +X0043Y00194* +X00421Y00198* +X00411Y00199* +G37* +G36* +Y00099D02* +X004Y00098D01* +X00391Y00094* +X00383Y00088* +X00377Y0008* +X00373Y00071* +X00372Y00061* +X00373Y0005* +X00377Y00041* +X00383Y00033* +X00391Y00027* +X004Y00023* +X00411Y00022* +X00421Y00023* +X0043Y00027* +X00438Y00033* +X00444Y00041* +X00448Y0005* +X00449Y00061* +X00448Y00071* +X00444Y0008* +X00438Y00088* +X0043Y00094* +X00421Y00098* +X00411Y00099* +G37* +G36* +X-00411D02* +X-00421Y00098D01* +X-0043Y00094* +X-00438Y00088* +X-00444Y0008* +X-00448Y00071* +X-00449Y00061* +X-00448Y0005* +X-00444Y00041* +X-00438Y00033* +X-0043Y00027* +X-00421Y00023* +X-00411Y00022* +X-004Y00023* +X-00391Y00027* +X-00383Y00033* +X-00377Y00041* +X-00373Y0005* +X-00372Y00061* +X-00373Y00071* +X-00377Y0008* +X-00383Y00088* +X-00391Y00094* +X-004Y00098* +X-00411Y00099* +G37* +G36* +X001D02* +X00089Y00098D01* +X0008Y00094* +X00072Y00088* +X00066Y0008* +X00062Y00071* +X00061Y00061* +X00062Y0005* +X00066Y00041* +X00072Y00033* +X0008Y00027* +X00089Y00023* +X001Y00022* +X0011Y00023* +X00119Y00027* +X00127Y00033* +X00133Y00041* +X00137Y0005* +X00138Y00061* +X00137Y00071* +X00133Y0008* +X00127Y00088* +X00119Y00094* +X0011Y00098* +X001Y00099* +G37* +G36* +X00211D02* +X002Y00098D01* +X00191Y00094* +X00183Y00088* +X00177Y0008* +X00173Y00071* +X00172Y00061* +X00173Y0005* +X00177Y00041* +X00183Y00033* +X00191Y00027* +X002Y00023* +X00211Y00022* +X00221Y00023* +X0023Y00027* +X00238Y00033* +X00244Y00041* +X00248Y0005* +X00249Y00061* +X00248Y00071* +X00244Y0008* +X00238Y00088* +X0023Y00094* +X00221Y00098* +X00211Y00099* +G37* +%LNunisolder52_front-3*% +%LPD*% +G54D37* +X01417Y00636D02* +Y00653D01* +X01376Y00619D02* +Y00665D01* +Y00619D02* +X01418Y00578D01* +X0119Y00714D02* +X01356D01* +X01169Y00693D02* +X0119Y00714D01* +X01199Y00694D02* +X01348D01* +X01158Y00653D02* +X01199Y00694D01* +X01308Y00492D02* +X01354Y00447D01* +X01144Y00492D02* +X01308D01* +X01104Y00453D02* +X01144Y00492D01* +X01013Y00453D02* +X01104D01* +X01354Y00418D02* +Y00447D01* +X01348Y00694D02* +X01376Y00665D01* +X-01316Y-00519D02* +X-0131Y-00513D01* +X-00819Y00542D02* +X-00802Y00525D01* +X00533Y00288D02* +X00539Y00282D01* +X-00918Y00296D02* +X-00855D01* +X-00992Y00221D02* +X-00918Y00296D01* +X-00992Y-00378D02* +Y00221D01* +X-01112Y-00498D02* +X-00992Y-00378D01* +X-00855Y00296D02* +X-0077Y00381D01* +X-00637Y00548D02* +X-00389D01* +X-00645Y00568D02* +X-00381D01* +X00194Y00529D02* +Y00548D01* +X00508Y00456D02* +X00537D01* +X00339Y00625D02* +X00508Y00456D01* +X00339Y00625D02* +Y00645D01* +X00533Y00288D02* +Y0032D01* +X00305Y00548D02* +X00533Y0032D01* +X-0027Y00501D02* +X-00249Y0048D01* +Y00362D02* +Y0048D01* +Y00362D02* +X-00166Y00279D01* +X-00228Y00369D02* +X-00146Y00287D01* +X-01076Y00263D02* +Y00432D01* +X01075Y00614D02* +Y00636D01* +X-01076Y00432D02* +X-00967Y00542D01* +X-0121Y0013D02* +X-01076Y00263D01* +X-0121Y00095D02* +Y0013D01* +X-01154Y-00265D02* +Y00039D01* +X-0121Y00095D02* +X-01154Y00039D01* +X00954Y00394D02* +X01013Y00453D01* +X01299Y00413D02* +X01354Y00358D01* +X01195Y00413D02* +X01299D01* +X01182Y00426D02* +X01195Y00413D01* +X-01393Y-00437D02* +X-01367Y-00411D01* +X-01458Y-00437D02* +X-01393D01* +X-01481Y-0046D02* +X-01458Y-00437D01* +X-01394Y-00505D02* +X-01232Y-00343D01* +X-01394Y-00565D02* +Y-00505D01* +X-01427Y-00598D02* +X-01394Y-00565D01* +X-01232Y-00343D02* +Y-00326D01* +X-01316Y-00591D02* +Y-00519D01* +Y-00591D02* +X-01184Y-00723D01* +X-01129Y-00381D02* +Y-0029D01* +X-01175Y-00427D02* +X-01129Y-00381D01* +X-01154Y-00265D02* +X-01129Y-0029D01* +X-01367Y-00324D02* +X-01292Y-00249D01* +X-01234Y-00216D02* +Y-00056D01* +X-01267Y-00249D02* +X-01234Y-00216D01* +X-01507Y-0046D02* +X-01481D01* +X-01544Y-00497D02* +X-01507Y-0046D01* +X-01292Y-00249D02* +X-01267D01* +X-01367Y-00411D02* +Y-00324D01* +X00901Y00339D02* +X00923Y00317D01* +X0028Y00436D02* +X00281Y00434D01* +Y0035D02* +Y00434D01* +X-00769Y-00609D02* +X-00717Y-00556D01* +X-00847Y-00609D02* +X-00769D01* +X-00862Y-00594D02* +X-00847Y-00609D01* +X-01112Y-00523D02* +Y-00498D01* +X-01122Y-00602D02* +X-01086D01* +X-01175Y-00549D02* +X-01122Y-00602D01* +X-01175Y-00549D02* +Y-00427D01* +X-00717Y-00556D02* +Y-00537D01* +X-00685Y-00506* +X-0064* +X-00626Y-0052* +X-00467* +X-00442Y-00495* +X00618Y-00621D02* +X00742D01* +X00822Y-00541* +X0011Y-00341D02* +X00251Y-00482D01* +X-00005Y-00341D02* +X0011D01* +X-00146Y-002D02* +X-00005Y-00341D01* +X-00014Y-00361D02* +X00102D01* +X-00166Y-00209D02* +X-00014Y-00361D01* +X00102D02* +X00231Y-0049D01* +X-00146Y-002D02* +Y00287D01* +X-00166Y-00209D02* +Y00279D01* +X00251Y-00704D02* +Y-00482D01* +X00231Y-00712D02* +Y-0049D01* +X00251Y-00704D02* +X00308Y-0076D01* +X00231Y-00712D02* +X00288Y-00769D01* +X-01079Y-01059D02* +Y-00808D01* +Y-01059D02* +X-01075Y-01063D01* +X-01427Y-00931D02* +Y-00598D01* +X-01485Y-00989D02* +X-01427Y-00931D01* +X-01544Y-00734D02* +Y-00497D01* +Y-00734D02* +X-015Y-00778D01* +Y-00816D02* +Y-00778D01* +X-00662Y-00737D02* +X-00407D01* +X-01184Y-00723D02* +X-01164D01* +X-01079Y-00808* +X01182Y00426D02* +Y00429D01* +X01196Y00317D02* +X01216Y00337D01* +X01356Y00714D02* +X01417Y00653D01* +X01075Y00636D02* +X01132Y00693D01* +X01169* +X-01257Y-00032D02* +X-01234Y-00056D01* +X0141Y00576D02* +Y00578D01* +X01196Y00317D02* +X01204D01* +X00923D02* +X01196D01* +X00288Y-00791D02* +Y-00769D01* +X00268Y-00811D02* +X00288Y-00791D01* +X00308Y-00847D02* +Y-0076D01* +X-00967Y00542D02* +X-00819D01* +X-0082Y00449D02* +X-00736D01* +X-00637Y00548* +X-00744Y00469D02* +X-00645Y00568D01* +X-00865Y00464D02* +X-0086Y00469D01* +X-00744* +X-00783Y00378D02* +X-00771D01* +X-00848Y00421D02* +X-0082Y00449D01* +X-00924Y00462D02* +X-00883Y00421D01* +X-00848* +X0075Y00732D02* +Y00796D01* +X00746Y00801D02* +X0075Y00796D01* +X00658Y00797D02* +X00666Y00789D01* +X00661Y00732D02* +Y00796D01* +X00666Y00801* +X00685Y00603D02* +X007Y00618D01* +X00716Y00631D02* +X00744Y00603D01* +X00716Y00631D02* +Y00698D01* +X0075Y00732* +X007Y00618D02* +Y00618D01* +X00696Y00622D02* +X007Y00618D01* +X00696Y00622D02* +Y00698D01* +X00661Y00732D02* +X00696Y00698D01* +X-00381Y00568D02* +X-00354Y00541D01* +X-00289Y00482D02* +X-0027Y00501D01* +X-00343Y00482D02* +X-00289D01* +X-00366Y00505D02* +X-00343Y00482D01* +X-00366Y00505D02* +Y00524D01* +X-00389Y00548D02* +X-00366Y00524D01* +X-00354Y00541D02* +X-00253D01* +X-00228Y00516* +Y00369D02* +Y00516D01* +X00194Y00548D02* +X00305D01* +X-01176Y00667D02* +X-01134Y00625D01* +X-01176Y00667D02* +Y00791D01* +X00281Y0035D02* +X00347Y00285D01* +G54D38* +X01181Y-0059D02* +Y-00427D01* +X01134Y-0038D02* +X01181Y-00427D01* +X01063Y-0038D02* +X01134D01* +X00986Y-00785D02* +X01181Y-0059D01* +X01063Y-0038D02* +X01063D01* +X00866Y-00687D02* +X01077Y-00476D01* +X00866Y-00979D02* +Y-00687D01* +Y-00979D02* +X00888Y-01001D01* +X00967Y-01002D02* +X00986Y-00983D01* +Y-00785* +X-00736Y-01109D02* +Y-01095D01* +X-00911Y-01126D02* +X-00753D01* +X-00736Y-01109* +G54D39* +X01219Y00886D02* +X01271Y00834D01* +X0096Y00886D02* +X01219D01* +X00879Y00914D02* +X00932D01* +X0096Y00886* +X01309Y00547D02* +Y00621D01* +Y00547D02* +X01476Y0038D01* +X01127Y00531D02* +X01309D01* +X01088Y00492D02* +X01127Y00531D01* +X0094Y00492D02* +X01088D01* +X01476Y00184D02* +Y0038D01* +X-00924Y00726D02* +X-00454D01* +X-00454Y00726* +X-00449Y00731* +X-00351Y00633* +X00295Y00739D02* +X00297D01* +X00279Y00723D02* +X00295Y00739D01* +X-00152Y00575D02* +X-00128D01* +X00321Y00588D02* +X00356Y00552D01* +X00279Y00588D02* +X00321D01* +X00356Y00552D02* +X00704Y00205D01* +X00356Y00552D02* +D01* +X00704Y00205D02* +X01012D01* +X00279Y00588D02* +Y00723D01* +X00588Y00215D02* +X00616Y00243D01* +X00856Y00408D02* +X0094Y00492D01* +X01012Y00205D02* +X01014Y00203D01* +X01235Y-00056D02* +X01476Y00184D01* +X01235Y-00066D02* +Y-00056D01* +X00226Y00588D02* +X00279D01* +X-00956Y-00648D02* +X-00751D01* +X-00664Y-0056* +X-00969Y-00661D02* +X-00956Y-00648D01* +X-01119Y-00661D02* +X-0097D01* +X-01215Y-00565D02* +X-01119Y-00661D01* +X-01215Y-00565D02* +Y-00409D01* +X01218Y00145D02* +X01258Y00184D01* +X01027Y00205D02* +X01087Y00145D01* +X01012Y00205D02* +X01027D01* +X01329Y-0019D02* +X01401Y-00262D01* +X01258Y00184D02* +Y00204D01* +Y00205* +X01105Y00145D02* +X01218D01* +X01105Y-00143D02* +X01151Y-0019D01* +X01105Y-00143D02* +Y00145D01* +X01151Y-0019D02* +X01329D01* +X00806Y00851D02* +X00816D01* +X00879Y00914* +X-0021Y00633D02* +X-00152Y00575D01* +X-00351Y00633D02* +X-0021D01* +X-00475Y00739D02* +Y00802D01* +G54D41* +X00585Y-01027D02* +X00624D01* +X00577Y-01019D02* +X00585Y-01027D01* +X-015Y-00667D02* +Y-00564D01* +X00478Y-01019D02* +X00577D01* +X00461Y-01002D02* +X00478Y-01019D01* +G54D42* +X00062Y-01503D02* +Y-01404D01* +G54D48* +X00001Y-00039D02* +Y00206D01* +X-00053Y00261D02* +X00001Y00206D01* +X-00099Y00261D02* +X-00053D01* +X-01215Y-00409D02* +X-01172Y-00366D01* +X00411Y-00177D02* +Y-00139D01* +Y-00177D02* +X00477Y-00243D01* +X-01116Y0028D02* +Y00448D01* +X-0125Y00147D02* +X-01116Y0028D01* +X-0125Y00079D02* +Y00147D01* +X-01194Y-00281D02* +Y00023D01* +X-0125Y00079D02* +X-01194Y00023D01* +Y-00281D02* +X-01172Y-00303D01* +Y-00366D02* +Y-00303D01* +X-00313Y-00037D02* +X-00209Y-0014D01* +X-00292Y-00223D02* +X-00209Y-0014D01* +X-00664Y-0056D02* +X-00662D01* +X-00407* +X-00292Y-0027D02* +Y-00223D01* +X-0021Y-0014D02* +X-00209D01* +X-00357Y00261D02* +X-00313Y00217D01* +X-00411Y00261D02* +X-00357D01* +X00398Y-0056D02* +X00407D01* +X-00884Y-00803D02* +Y-00663D01* +X-00313Y-00037D02* +Y00217D01* +X00658Y-00555D02* +X00662Y-0056D01* +X00001Y-00039D02* +X00101Y-00139D01* +X00253Y-00292D02* +X00327D01* +X001Y-00139D02* +X00253Y-00292D01* +X-00884Y-00803D02* +X-00873D01* +X-00737Y-00938* +X-00723* +X00294Y-00023D02* +X0041Y-00139D01* +X00294Y-00023D02* +Y00168D01* +X00206Y00256D02* +X00294Y00168D01* +G54D56* +X-00031Y-01365D03* +X-00062Y-01451D03* +X00031Y-01365D03* +X00062Y-01451D03* +X0D03* +G54D57* +X00163Y-01408D03* +X-00163D03* +G54D58* +X00662Y-00737D03* +Y-0056D03* +X00407D03* +Y-00737D03* +X-00407D03* +Y-0056D03* +X-00662D03* +Y-00737D03* +X00127D03* +Y-0056D03* +X-00127D03* +Y-00737D03* +G54D59* +X00211Y00261D03* +Y00161D03* +Y00061D03* +Y-00039D03* +Y-00139D03* +X00411Y00261D03* +Y00161D03* +Y00061D03* +Y-00039D03* +Y-00139D03* +X-015Y-00716D03* +Y-00616D03* +Y-00516D03* +Y-00416D03* +X00506Y00751D03* +X00606Y00851D03* +Y00751D03* +X00706Y00851D03* +Y00751D03* +X00806Y00851D03* +Y00751D03* +X00906Y00851D03* +Y00751D03* +X-00411Y00261D03* +Y00161D03* +Y00061D03* +Y-00039D03* +Y-00139D03* +X-00211Y00261D03* +Y00161D03* +Y00061D03* +Y-00039D03* +Y-00139D03* +X001D03* +Y-00039D03* +Y00061D03* +Y00161D03* +Y00261D03* +X-001Y-00139D03* +Y-00039D03* +Y00061D03* +Y00161D03* +Y00261D03* +G54D60* +X014Y-00283D03* +Y-00066D03* +X01235D03* +Y-00283D03* +G54D61* +X-015Y-00816D03* +G54D62* +X-00626Y-00393D03* +X-00818D03* +G54D63* +X00506Y00851D03* +G54D64* +X-00725Y-00945D03* +G54D65* +X-00906Y-01126D03* +G54D66* +X-01245Y-00875D03* +X01245D03* +G54D67* +X0Y00875D03* +G54D68* +X01417Y00636D03* +X0142Y00707D03* +X01271Y00834D03* +X01177Y00827D03* +X01116Y00822D03* +X-0131Y-00513D03* +X01169Y00002D03* +X-00645Y00827D03* +X-00924Y00726D03* +X00585Y-00487D03* +X00439Y00886D03* +X00756Y-01141D03* +X00927Y-00956D03* +X00622Y-01088D03* +X01003Y-01159D03* +X01332Y-00689D03* +X00996Y-00707D03* +X01063Y-0038D03* +X01056Y-00595D03* +X01082Y-00473D03* +X01066Y-00819D03* +X00297Y00739D03* +X00961Y00718D03* +X0063Y-0005D03* +X-01171Y00517D03* +X-00981Y00744D03* +X-00256Y00873D03* +X00141Y00496D03* +X00339Y00645D03* +X00539Y00282D03* +X00537Y00456D03* +X00194Y00529D03* +X00279Y00588D03* +X00282Y00436D03* +X00226Y00588D03* +X-0027Y00501D03* +X-00968Y00828D03* +X-01083Y00826D03* +X00226Y00876D03* +X-01134Y00625D03* +X-01187Y0096D03* +X-01176Y00791D03* +X-01303Y00744D03* +X-01455Y00511D03* +X-0153Y00657D03* +X-00319Y00692D03* +X-00186Y00508D03* +X-00161Y00958D03* +X-01397Y0037D03* +X-01177Y00333D03* +X00845Y00596D03* +X00536Y00517D03* +X01014Y00203D03* +X00588Y00215D03* +X00405Y00369D03* +X00792Y00454D03* +X00856Y00408D03* +X01071Y00617D03* +X01149Y00653D03* +X-01002Y00384D03* +X-01054Y00201D03* +X-00937D03* +X01354Y00358D03* +X00753Y-01006D03* +X01447Y0088D03* +X00776Y00038D03* +X00585Y00156D03* +X-01437Y-0054D03* +X-01279Y-00293D03* +X-01349Y-00249D03* +X-00803Y00533D03* +X00405Y00665D03* +X-00427Y00618D03* +X-00925Y-00563D03* +X-00869Y-00589D03* +X-01112Y-00523D03* +X-01094Y-00602D03* +X-00442Y-00495D03* +X00618Y-00621D03* +X-00052Y-00495D03* +X01258Y00204D03* +X00623Y00599D03* +X0106Y00558D03* +X01417Y00209D03* +X01194Y00204D03* +X-00924Y00462D03* +X-01058Y00914D03* +X00081Y-00277D03* +X00032Y-00321D03* +X-00162Y-00298D03* +X00201Y-00789D03* +X00363Y-00674D03* +X0074Y-00329D03* +X00732Y-00141D03* +X00614Y00056D03* +X01475Y-00321D03* +X01427Y-0053D03* +X01501Y-00829D03* +X01525Y-00587D03* +X0119Y-00694D03* +X00815Y-00679D03* +X01339Y-00423D03* +X-01194Y-00087D03* +X-015Y-00901D03* +X-01484Y-00988D03* +X-01359Y-00609D03* +X-01119Y-01014D03* +X-01075Y-01063D03* +X-01079Y-00733D03* +X-01036Y-0018D03* +X-01108Y-00096D03* +X-01202Y-00394D03* +X-01232Y-00329D03* +X-01205Y-00251D03* +X-01089Y-00277D03* +X-01254Y-00026D03* +X-01276Y-00202D03* +X-01133Y-00164D03* +X-00432Y-00824D03* +X-00499Y-00926D03* +X-00872Y-00462D03* +X-00924Y-00183D03* +X-00777Y-0031D03* +X-00465Y-00294D03* +X-01407Y-00395D03* +X-01445Y00312D03* +X-01524Y-00088D03* +X-00244Y-00352D03* +X-00243Y-00496D03* +X-00384Y-00449D03* +X-00064Y-00664D03* +X-00639Y-00909D03* +X-00728Y-00831D03* +X-00669Y-01146D03* +X-00736Y-01102D03* +X-0097Y-00661D03* +X-01275Y-0057D03* +X00474Y-00784D03* +X00039Y-00757D03* +X00888Y-01001D03* +X-00515Y00651D03* +X00358Y-00002D03* +X00197Y00681D03* +X-00292Y-0027D03* +X00155Y00958D03* +X00292Y-00499D03* +X-00047Y-00089D03* +X-00887Y-00879D03* +X006Y-00782D03* +X00522Y00958D03* +X00403Y-01053D03* +X01429Y-00945D03* +X-0141Y00917D03* +X-00745Y00539D03* +X00461Y-00677D03* +X01112Y-01012D03* +X00562Y-01234D03* +X00981Y-01251D03* +X00778D03* +X-00471Y-01249D03* +X-01409Y-00976D03* +X-01166Y-01237D03* +X-01421Y-01248D03* +X-01525Y-0116D03* +X-01029Y-01119D03* +X-0121Y-01112D03* +X-00566Y-00458D03* +X-01358Y-00717D03* +X-01027Y-00866D03* +X-00933Y-0124D03* +X-00389Y-00247D03* +X-01403Y00192D03* +X-00884Y-00803D03* +X-01008Y-00997D03* +X-00704Y-01244D03* +X00638Y-00232D03* +X-00358Y-0009D03* +X-00763Y-0013D03* +X-00508Y-00696D03* +X-00977Y00595D03* +X00822Y-00541D03* +X00462Y-00492D03* +X-01469Y-00184D03* +X01424Y00048D03* +X01045Y-00288D03* +X01406Y-00176D03* +X00355Y00091D03* +X00306Y-00132D03* +X0089Y-0007D03* +X01045Y-00018D03* +X01305Y-00122D03* +X01511Y-00167D03* +X00877Y-00231D03* +X005Y-00166D03* +X00477Y-00243D03* +X00327Y-00292D03* +X00328Y-00227D03* +X00285Y-00353D03* +X-00091Y-00313D03* +X00059Y-00417D03* +X-00034Y-00245D03* +X00032Y-01284D03* +X00075Y-01162D03* +X00129D03* +X-00108Y-01259D03* +X-00068Y-01151D03* +X-00092Y-01507D03* +X-00049Y-00757D03* +X-00206Y-00807D03* +X-00759Y-00731D03* +X-00762Y-00503D03* +X-00583Y-00621D03* +X-00455Y-01123D03* +X-00251Y-00976D03* +X-00254Y-01157D03* +X00063Y-00663D03* +X00692Y-00419D03* +X-00604Y-00797D03* +X-01116Y00448D03* +X01351Y00862D03* +X00901Y00338D03* +X00969Y00392D03* +X01309Y00621D03* +X0141Y00577D03* +X01354Y00418D03* +X01457Y00508D03* +X01017Y00101D03* +X01094Y00411D03* +X01262Y00407D03* +X0125Y00621D03* +X01179Y00425D03* +X01216Y00337D03* +X-01288Y-00076D03* +X-01353Y-00125D03* +X-0117Y00113D03* +X-0077Y00381D03* +X-01274Y00406D03* +X00314Y-00926D03* +X00967Y-01002D03* +X00624Y-01027D03* +X00461Y-01002D03* +X00502Y-00918D03* +X00393Y-012D03* +X01181Y-0123D03* +X0141Y-01234D03* +X01171Y-00126D03* +X-00128Y00576D03* +X-00865Y00461D03* +X-00899Y00384D03* +X-00609Y00623D03* +X00315Y-00846D03* +X00268Y-0081D03* +X00689Y0032D03* +X00746Y00801D03* +X00666D03* +X00986Y00956D03* +X00685Y00603D03* +X00744D03* +X-01421Y-01079D03* +X00243Y-01104D03* +X00231Y-01308D03* +X00091Y-01507D03* +X0018Y-00499D03* +X-00406Y00508D03* +X-00326Y00522D03* +X-00055Y00495D03* +X-00417Y00827D03* +X-00475Y00802D03* +X-00821Y00666D03* +X00984Y-00155D03* +X00355Y00191D03* +X00347Y00285D03* +G54D69* +X-00725Y-00241D03* +M02* \ No newline at end of file diff --git a/hardware/gerber/unisolder52_front.gbo b/hardware/gerber/unisolder52_front.gbo new file mode 100644 index 0000000..2e1041e --- /dev/null +++ b/hardware/gerber/unisolder52_front.gbo @@ -0,0 +1,205 @@ +%FSTAX23Y23*% +%MOIN*% +%SFA1B1*% + +%IPPOS*% +%ADD37C,0.012000*% +%ADD45C,0.010000*% +%ADD72C,0.008000*% +%ADD73C,0.007870*% +%LNunisolder52_front-1*% +%LPD*% +G54D37* +X00161Y-01555D02* +X00236D01* +Y-0148* +X-00236Y-01555D02* +Y-0148D01* +Y-01555D02* +X-00161D01* +X-01574Y-01299D02* +Y-01224D01* +Y-01299D02* +X-01499D01* +X01499D02* +X01574D01* +Y-01224* +Y00925D02* +Y01D01* +X01499D02* +X01574D01* +X-01574Y00925D02* +Y01D01* +X-01499* +X00236Y-01452D02* +Y-01377D01* +X00314Y-01299* +X00389* +X-00236Y-01452D02* +Y-01377D01* +X-00314Y-01299D02* +X-00236Y-01377D01* +X-00389Y-01299D02* +X-00314D01* +G54D45* +X01115Y-00375D02* +Y00017D01* +X01525* +Y-00375D02* +Y00017D01* +X01115Y-00375D02* +X01525D01* +G54D72* +X-00847Y-00304D02* +D01* +X-00853Y-00304* +X-00859Y-00304* +X-00866Y-00305* +X-00872Y-00307* +X-00877Y-00309* +X-00883Y-00311* +X-00889Y-00314* +X-00894Y-00317* +X-00899Y-00321* +X-00904Y-00324* +X-00909Y-00328* +X-00913Y-00333* +X-00917Y-00338* +X-00921Y-00343* +X-00924Y-00348* +X-00927Y-00353* +X-0093Y-00359* +X-00932Y-00365* +X-00933Y-00371* +X-00935Y-00377* +X-00936Y-00383* +X-00936Y-00389* +Y-00396* +X-00936Y-00402* +X-00935Y-00408* +X-00933Y-00414* +X-00932Y-0042* +X-0093Y-00426* +X-00927Y-00432* +X-00924Y-00437* +X-00921Y-00442* +X-00917Y-00447* +X-00913Y-00452* +X-00909Y-00457* +X-00904Y-00461* +X-00899Y-00465* +X-00894Y-00468* +X-00889Y-00471* +X-00883Y-00474* +X-00877Y-00476* +X-00872Y-00478* +X-00866Y-0048* +X-00859Y-00481* +X-00853Y-00481* +X-00847Y-00482* +X-00597D02* +D01* +X-00591Y-00481* +X-00585Y-00481* +X-00579Y-0048* +X-00573Y-00478* +X-00567Y-00476* +X-00561Y-00474* +X-00555Y-00471* +X-0055Y-00468* +X-00545Y-00465* +X-0054Y-00461* +X-00535Y-00457* +X-00531Y-00452* +X-00527Y-00447* +X-00523Y-00442* +X-0052Y-00437* +X-00517Y-00432* +X-00515Y-00426* +X-00512Y-0042* +X-00511Y-00414* +X-00509Y-00408* +X-00509Y-00402* +X-00508Y-00396* +Y-00389* +X-00509Y-00383* +X-00509Y-00377* +X-00511Y-00371* +X-00512Y-00365* +X-00515Y-00359* +X-00517Y-00353* +X-0052Y-00348* +X-00523Y-00343* +X-00527Y-00338* +X-00531Y-00333* +X-00535Y-00328* +X-0054Y-00324* +X-00545Y-00321* +X-0055Y-00317* +X-00555Y-00314* +X-00561Y-00311* +X-00567Y-00309* +X-00573Y-00307* +X-00579Y-00305* +X-00585Y-00304* +X-00591Y-00304* +X-00597Y-00304* +X-00847D02* +X-00597D01* +X-00847Y-00482D02* +X-00597D01* +X00434Y00597D02* +X00441Y00603D01* +X00454* +X00461Y00597* +Y0057* +X00454Y00564* +X00441* +X00434Y0057* +X00421Y00564D02* +Y00603D01* +X00394Y00564* +Y00603* +X00381D02* +X00354D01* +X00367* +Y00564* +X00341D02* +Y00603D01* +X00321* +X00314Y00597* +Y00583* +X00321Y00577* +X00341* +X00327D02* +X00314Y00564D01* +G54D73* +X-0155Y-00366D02* +X-0145D01* +X-0155Y-00866D02* +Y-00366D01* +X-0145Y-00866D02* +Y-00366D01* +X-0155Y-00866D02* +X-0145D01* +X01106Y00624D02* +Y00977D01* +X00306Y00624D02* +Y00977D01* +Y00624D02* +X01106D01* +X00626Y00927D02* +X00786D01* +X00904Y00977D02* +X01106D01* +X00306D02* +X00456D01* +X00786D02* +X00904D01* +X00786Y00927D02* +Y00977D01* +X00626Y00927D02* +Y00977D01* +X00456D02* +X00626D01* +M02* \ No newline at end of file diff --git a/hardware/gerber/unisolder52_front.gbs b/hardware/gerber/unisolder52_front.gbs new file mode 100644 index 0000000..d8d5a21 --- /dev/null +++ b/hardware/gerber/unisolder52_front.gbs @@ -0,0 +1,135 @@ +%FSTAX23Y23*% +%MOIN*% +%SFA1B1*% + +%IPPOS*% +%AMD112* +4,1,8,-0.010300,0.045400,-0.045400,0.010300,-0.045400,-0.010300,-0.010300,-0.045400,0.010300,-0.045400,0.045400,-0.010300,0.045400,0.010300,0.010300,0.045400,-0.010300,0.045400,0.0* +1,1,0.029260,0.000000,0.035100* +1,1,0.029260,-0.035100,0.000000* +1,1,0.029260,0.000000,-0.035100* +1,1,0.029260,0.035100,0.000000* +% +%AMD119* +4,1,8,0.021000,0.054000,-0.021000,0.054000,-0.034000,0.041000,-0.034000,-0.041000,-0.021000,-0.054000,0.021000,-0.054000,0.034000,-0.041000,0.034000,0.041000,0.021000,0.054000,0.0* +1,1,0.026000,0.021000,0.041000* +1,1,0.026000,-0.021000,0.041000* +1,1,0.026000,-0.021000,-0.041000* +1,1,0.026000,0.021000,-0.041000* +% +%ADD104O,0.051310X0.059180*% +%ADD105O,0.114330X0.206850*% +%ADD106C,0.086740*% +%ADD107C,0.067060*% +%ADD108O,0.086740X0.126110*% +%ADD109R,0.067060X0.067060*% +%ADD110C,0.063120*% +%ADD111R,0.067060X0.067060*% +G04~CAMADD=112~8~0.0~0.0~788.7~788.7~146.3~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~45.0~992.0~991.0* +%ADD112D112*% +%ADD113C,0.078870*% +%ADD114C,0.263900*% +%ADD115C,0.244220*% +%ADD116R,0.067300X0.065940*% +%ADD117R,0.063580X0.065940*% +%ADD118R,0.118000X0.066000*% +G04~CAMADD=119~8~0.0~0.0~680.0~1080.0~130.0~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~680.0~1080.0* +%ADD119D119*% +%LNunisolder52_front-1*% +%LPD*% +G54D104* +X-00031Y-01365D03* +X-00062Y-01451D03* +X00031Y-01365D03* +X00062Y-01451D03* +X0D03* +G54D105* +X00163Y-01408D03* +X-00163D03* +G54D106* +X00662Y-00737D03* +Y-0056D03* +X00407D03* +Y-00737D03* +X-00407D03* +Y-0056D03* +X-00662D03* +Y-00737D03* +X00127D03* +Y-0056D03* +X-00127D03* +Y-00737D03* +G54D107* +X00211Y00261D03* +Y00161D03* +Y00061D03* +Y-00039D03* +Y-00139D03* +X00411Y00261D03* +Y00161D03* +Y00061D03* +Y-00039D03* +Y-00139D03* +X-015Y-00716D03* +Y-00616D03* +Y-00516D03* +Y-00416D03* +X00506Y00751D03* +X00606Y00851D03* +Y00751D03* +X00706Y00851D03* +Y00751D03* +X00806Y00851D03* +Y00751D03* +X00906Y00851D03* +Y00751D03* +X-00411Y00261D03* +Y00161D03* +Y00061D03* +Y-00039D03* +Y-00139D03* +X-00211Y00261D03* +Y00161D03* +Y00061D03* +Y-00039D03* +Y-00139D03* +X001D03* +Y-00039D03* +Y00061D03* +Y00161D03* +Y00261D03* +X-001Y-00139D03* +Y-00039D03* +Y00061D03* +Y00161D03* +Y00261D03* +G54D108* +X014Y-00283D03* +Y-00066D03* +X01235D03* +Y-00283D03* +G54D109* +X-015Y-00816D03* +G54D110* +X-00626Y-00393D03* +X-00818D03* +G54D111* +X00506Y00851D03* +G54D112* +X-00725Y-00945D03* +G54D113* +X-00906Y-01126D03* +G54D114* +X-01245Y-00875D03* +X01245D03* +G54D115* +X0Y00875D03* +G54D116* +X00177Y0016D03* +G54D117* +X-00068Y0016D03* +G54D118* +X-00413Y00161D03* +G54D119* +X-00725Y-00241D03* +M02* \ No newline at end of file diff --git a/hardware/gerber/unisolder52_front.gd1 b/hardware/gerber/unisolder52_front.gd1 new file mode 100644 index 0000000..6300024 --- /dev/null +++ b/hardware/gerber/unisolder52_front.gd1 @@ -0,0 +1,2353 @@ +%FSTAX23Y23*% +%MOIN*% +%SFA1B1*% + +%IPPOS*% +%ADD120C,0.005000*% +%ADD121C,0.006670*% +%LNunisolder52_front-1*% +%LPD*% +G54D120* +X-00051Y-01385D02* +Y-01345D01* +X-00011* +Y-01385* +X-00051* +X-00082Y-01471D02* +Y-01431D01* +X-00042* +Y-01471* +X-00082* +X00011Y-01385D02* +Y-01345D01* +X00051* +Y-01385* +X00011* +X00042Y-01471D02* +Y-01431D01* +X00082* +Y-01471* +X00042* +X-0002D02* +Y-01431D01* +X0002* +Y-01471* +X-0002* +X00662Y-00757D02* +X00642Y-00717D01* +X00682* +X00662Y-00757* +Y-0058D02* +X00642Y-0054D01* +X00682* +X00662Y-0058* +X00407D02* +X00387Y-0054D01* +X00427* +X00407Y-0058* +Y-00757D02* +X00387Y-00717D01* +X00427* +X00407Y-00757* +X00211Y00241D02* +X00221Y00251D01* +X00231* +X00221Y00261* +X00231Y00271* +X00221* +X00211Y00281* +X00201Y00271* +X00191* +X00201Y00261* +X00191Y00251* +X00201* +X00211Y00241* +Y00141D02* +X00221Y00151D01* +X00231* +X00221Y00161* +X00231Y00171* +X00221* +X00211Y00181* +X00201Y00171* +X00191* +X00201Y00161* +X00191Y00151* +X00201* +X00211Y00141* +Y00041D02* +X00221Y00051D01* +X00231* +X00221Y00061* +X00231Y00071* +X00221* +X00211Y00081* +X00201Y00071* +X00191* +X00201Y00061* +X00191Y00051* +X00201* +X00211Y00041* +Y-00059D02* +X00221Y-00049D01* +X00231* +X00221Y-00039* +X00231Y-00029* +X00221* +X00211Y-00019* +X00201Y-00029* +X00191* +X00201Y-00039* +X00191Y-00049* +X00201* +X00211Y-00059* +Y-00159D02* +X00221Y-00149D01* +X00231* +X00221Y-00139* +X00231Y-00129* +X00221* +X00211Y-00119* +X00201Y-00129* +X00191* +X00201Y-00139* +X00191Y-00149* +X00201* +X00211Y-00159* +X00411Y00241D02* +X00421Y00251D01* +X00431* +X00421Y00261* +X00431Y00271* +X00421* +X00411Y00281* +X00401Y00271* +X00391* +X00401Y00261* +X00391Y00251* +X00401* +X00411Y00241* +Y00141D02* +X00421Y00151D01* +X00431* +X00421Y00161* +X00431Y00171* +X00421* +X00411Y00181* +X00401Y00171* +X00391* +X00401Y00161* +X00391Y00151* +X00401* +X00411Y00141* +Y00041D02* +X00421Y00051D01* +X00431* +X00421Y00061* +X00431Y00071* +X00421* +X00411Y00081* +X00401Y00071* +X00391* +X00401Y00061* +X00391Y00051* +X00401* +X00411Y00041* +Y-00059D02* +X00421Y-00049D01* +X00431* +X00421Y-00039* +X00431Y-00029* +X00421* +X00411Y-00019* +X00401Y-00029* +X00391* +X00401Y-00039* +X00391Y-00049* +X00401* +X00411Y-00059* +Y-00159D02* +X00421Y-00149D01* +X00431* +X00421Y-00139* +X00431Y-00129* +X00421* +X00411Y-00119* +X00401Y-00129* +X00391* +X00401Y-00139* +X00391Y-00149* +X00401* +X00411Y-00159* +X0138Y-00303D02* +X0139Y-00283D01* +X0138Y-00263* +X014Y-00273* +X0142Y-00263* +X0141Y-00283* +X0142Y-00303* +X014Y-00293* +X0138Y-00303* +Y-00086D02* +X0139Y-00066D01* +X0138Y-00046* +X014Y-00056* +X0142Y-00046* +X0141Y-00066* +X0142Y-00086* +X014Y-00076* +X0138Y-00086* +X01215D02* +X01225Y-00066D01* +X01215Y-00046* +X01235Y-00056* +X01255Y-00046* +X01245Y-00066* +X01255Y-00086* +X01235Y-00076* +X01215Y-00086* +Y-00303D02* +X01225Y-00283D01* +X01215Y-00263* +X01235Y-00273* +X01255Y-00263* +X01245Y-00283* +X01255Y-00303* +X01235Y-00293* +X01215Y-00303* +X-015Y-00836D02* +X-0149Y-00826D01* +X-0148* +X-0149Y-00816* +X-0148Y-00806* +X-0149* +X-015Y-00796* +X-0151Y-00806* +X-0152* +X-0151Y-00816* +X-0152Y-00826* +X-0151* +X-015Y-00836* +Y-00736D02* +X-0149Y-00726D01* +X-0148* +X-0149Y-00716* +X-0148Y-00706* +X-0149* +X-015Y-00696* +X-0151Y-00706* +X-0152* +X-0151Y-00716* +X-0152Y-00726* +X-0151* +X-015Y-00736* +Y-00636D02* +X-0149Y-00626D01* +X-0148* +X-0149Y-00616* +X-0148Y-00606* +X-0149* +X-015Y-00596* +X-0151Y-00606* +X-0152* +X-0151Y-00616* +X-0152Y-00626* +X-0151* +X-015Y-00636* +Y-00536D02* +X-0149Y-00526D01* +X-0148* +X-0149Y-00516* +X-0148Y-00506* +X-0149* +X-015Y-00496* +X-0151Y-00506* +X-0152* +X-0151Y-00516* +X-0152Y-00526* +X-0151* +X-015Y-00536* +Y-00436D02* +X-0149Y-00426D01* +X-0148* +X-0149Y-00416* +X-0148Y-00406* +X-0149* +X-015Y-00396* +X-0151Y-00406* +X-0152* +X-0151Y-00416* +X-0152Y-00426* +X-0151* +X-015Y-00436* +X-00636Y-00403D02* +Y-00413D01* +X-00616* +Y-00403* +X-00606* +Y-00383* +X-00616* +Y-00373* +X-00636* +Y-00383* +X-00646* +Y-00403* +X-00636* +X-00828D02* +Y-00413D01* +X-00808* +Y-00403* +X-00798* +Y-00383* +X-00808* +Y-00373* +X-00828* +Y-00383* +X-00838* +Y-00403* +X-00828* +X00506Y00831D02* +X00516Y00841D01* +X00526* +X00516Y00851* +X00526Y00861* +X00516* +X00506Y00871* +X00496Y00861* +X00486* +X00496Y00851* +X00486Y00841* +X00496* +X00506Y00831* +Y00731D02* +X00516Y00741D01* +X00526* +X00516Y00751* +X00526Y00761* +X00516* +X00506Y00771* +X00496Y00761* +X00486* +X00496Y00751* +X00486Y00741* +X00496* +X00506Y00731* +X00606Y00831D02* +X00616Y00841D01* +X00626* +X00616Y00851* +X00626Y00861* +X00616* +X00606Y00871* +X00596Y00861* +X00586* +X00596Y00851* +X00586Y00841* +X00596* +X00606Y00831* +Y00731D02* +X00616Y00741D01* +X00626* +X00616Y00751* +X00626Y00761* +X00616* +X00606Y00771* +X00596Y00761* +X00586* +X00596Y00751* +X00586Y00741* +X00596* +X00606Y00731* +X00706Y00831D02* +X00716Y00841D01* +X00726* +X00716Y00851* +X00726Y00861* +X00716* +X00706Y00871* +X00696Y00861* +X00686* +X00696Y00851* +X00686Y00841* +X00696* +X00706Y00831* +Y00731D02* +X00716Y00741D01* +X00726* +X00716Y00751* +X00726Y00761* +X00716* +X00706Y00771* +X00696Y00761* +X00686* +X00696Y00751* +X00686Y00741* +X00696* +X00706Y00731* +X00806Y00831D02* +X00816Y00841D01* +X00826* +X00816Y00851* +X00826Y00861* +X00816* +X00806Y00871* +X00796Y00861* +X00786* +X00796Y00851* +X00786Y00841* +X00796* +X00806Y00831* +Y00731D02* +X00816Y00741D01* +X00826* +X00816Y00751* +X00826Y00761* +X00816* +X00806Y00771* +X00796Y00761* +X00786* +X00796Y00751* +X00786Y00741* +X00796* +X00806Y00731* +X00906Y00831D02* +X00916Y00841D01* +X00926* +X00916Y00851* +X00926Y00861* +X00916* +X00906Y00871* +X00896Y00861* +X00886* +X00896Y00851* +X00886Y00841* +X00896* +X00906Y00831* +Y00731D02* +X00916Y00741D01* +X00926* +X00916Y00751* +X00926Y00761* +X00916* +X00906Y00771* +X00896Y00761* +X00886* +X00896Y00751* +X00886Y00741* +X00896* +X00906Y00731* +X-00725Y-00965D02* +X-00715Y-00955D01* +X-00705* +X-00715Y-00945* +X-00705Y-00935* +X-00715* +X-00725Y-00925* +X-00735Y-00935* +X-00745* +X-00735Y-00945* +X-00745Y-00955* +X-00735* +X-00725Y-00965* +X-00906Y-01146D02* +X-00896Y-01136D01* +X-00886* +X-00896Y-01126* +X-00886Y-01116* +X-00896* +X-00906Y-01106* +X-00916Y-01116* +X-00926* +X-00916Y-01126* +X-00926Y-01136* +X-00916* +X-00906Y-01146* +X-01265Y-00895D02* +X-01255D01* +X-01245Y-00885* +X-01235Y-00895* +X-01225* +Y-00885* +X-01235Y-00875* +X-01225Y-00865* +Y-00855* +X-01235* +X-01245Y-00865* +X-01255Y-00855* +X-01265* +Y-00865* +X-01255Y-00875* +X-01265Y-00885* +Y-00895* +X-0002Y00855D02* +X-0001D01* +X0Y00865* +X0001Y00855* +X0002* +Y00865* +X0001Y00875* +X0002Y00885* +Y00895* +X0001* +X0Y00885* +X-0001Y00895* +X-0002* +Y00885* +X-0001Y00875* +X-0002Y00865* +Y00855* +X01225Y-00895D02* +X01235D01* +X01245Y-00885* +X01255Y-00895* +X01265* +Y-00885* +X01255Y-00875* +X01265Y-00865* +Y-00855* +X01255* +X01245Y-00865* +X01235Y-00855* +X01225* +Y-00865* +X01235Y-00875* +X01225Y-00885* +Y-00895* +X-00411Y00241D02* +X-00401Y00251D01* +X-00391* +X-00401Y00261* +X-00391Y00271* +X-00401* +X-00411Y00281* +X-00421Y00271* +X-00431* +X-00421Y00261* +X-00431Y00251* +X-00421* +X-00411Y00241* +Y00141D02* +X-00401Y00151D01* +X-00391* +X-00401Y00161* +X-00391Y00171* +X-00401* +X-00411Y00181* +X-00421Y00171* +X-00431* +X-00421Y00161* +X-00431Y00151* +X-00421* +X-00411Y00141* +Y00041D02* +X-00401Y00051D01* +X-00391* +X-00401Y00061* +X-00391Y00071* +X-00401* +X-00411Y00081* +X-00421Y00071* +X-00431* +X-00421Y00061* +X-00431Y00051* +X-00421* +X-00411Y00041* +Y-00059D02* +X-00401Y-00049D01* +X-00391* +X-00401Y-00039* +X-00391Y-00029* +X-00401* +X-00411Y-00019* +X-00421Y-00029* +X-00431* +X-00421Y-00039* +X-00431Y-00049* +X-00421* +X-00411Y-00059* +Y-00159D02* +X-00401Y-00149D01* +X-00391* +X-00401Y-00139* +X-00391Y-00129* +X-00401* +X-00411Y-00119* +X-00421Y-00129* +X-00431* +X-00421Y-00139* +X-00431Y-00149* +X-00421* +X-00411Y-00159* +X-00211Y00241D02* +X-00201Y00251D01* +X-00191* +X-00201Y00261* +X-00191Y00271* +X-00201* +X-00211Y00281* +X-00221Y00271* +X-00231* +X-00221Y00261* +X-00231Y00251* +X-00221* +X-00211Y00241* +Y00141D02* +X-00201Y00151D01* +X-00191* +X-00201Y00161* +X-00191Y00171* +X-00201* +X-00211Y00181* +X-00221Y00171* +X-00231* +X-00221Y00161* +X-00231Y00151* +X-00221* +X-00211Y00141* +Y00041D02* +X-00201Y00051D01* +X-00191* +X-00201Y00061* +X-00191Y00071* +X-00201* +X-00211Y00081* +X-00221Y00071* +X-00231* +X-00221Y00061* +X-00231Y00051* +X-00221* +X-00211Y00041* +Y-00059D02* +X-00201Y-00049D01* +X-00191* +X-00201Y-00039* +X-00191Y-00029* +X-00201* +X-00211Y-00019* +X-00221Y-00029* +X-00231* +X-00221Y-00039* +X-00231Y-00049* +X-00221* +X-00211Y-00059* +Y-00159D02* +X-00201Y-00149D01* +X-00191* +X-00201Y-00139* +X-00191Y-00129* +X-00201* +X-00211Y-00119* +X-00221Y-00129* +X-00231* +X-00221Y-00139* +X-00231Y-00149* +X-00221* +X-00211Y-00159* +X001D02* +X0011Y-00149D01* +X0012* +X0011Y-00139* +X0012Y-00129* +X0011* +X001Y-00119* +X0009Y-00129* +X0008* +X0009Y-00139* +X0008Y-00149* +X0009* +X001Y-00159* +Y-00059D02* +X0011Y-00049D01* +X0012* +X0011Y-00039* +X0012Y-00029* +X0011* +X001Y-00019* +X0009Y-00029* +X0008* +X0009Y-00039* +X0008Y-00049* +X0009* +X001Y-00059* +Y00041D02* +X0011Y00051D01* +X0012* +X0011Y00061* +X0012Y00071* +X0011* +X001Y00081* +X0009Y00071* +X0008* +X0009Y00061* +X0008Y00051* +X0009* +X001Y00041* +Y00141D02* +X0011Y00151D01* +X0012* +X0011Y00161* +X0012Y00171* +X0011* +X001Y00181* +X0009Y00171* +X0008* +X0009Y00161* +X0008Y00151* +X0009* +X001Y00141* +Y00241D02* +X0011Y00251D01* +X0012* +X0011Y00261* +X0012Y00271* +X0011* +X001Y00281* +X0009Y00271* +X0008* +X0009Y00261* +X0008Y00251* +X0009* +X001Y00241* +X-001Y-00159D02* +X-0009Y-00149D01* +X-0008* +X-0009Y-00139* +X-0008Y-00129* +X-0009* +X-001Y-00119* +X-0011Y-00129* +X-0012* +X-0011Y-00139* +X-0012Y-00149* +X-0011* +X-001Y-00159* +Y-00059D02* +X-0009Y-00049D01* +X-0008* +X-0009Y-00039* +X-0008Y-00029* +X-0009* +X-001Y-00019* +X-0011Y-00029* +X-0012* +X-0011Y-00039* +X-0012Y-00049* +X-0011* +X-001Y-00059* +Y00041D02* +X-0009Y00051D01* +X-0008* +X-0009Y00061* +X-0008Y00071* +X-0009* +X-001Y00081* +X-0011Y00071* +X-0012* +X-0011Y00061* +X-0012Y00051* +X-0011* +X-001Y00041* +Y00141D02* +X-0009Y00151D01* +X-0008* +X-0009Y00161* +X-0008Y00171* +X-0009* +X-001Y00181* +X-0011Y00171* +X-0012* +X-0011Y00161* +X-0012Y00151* +X-0011* +X-001Y00141* +Y00241D02* +X-0009Y00251D01* +X-0008* +X-0009Y00261* +X-0008Y00271* +X-0009* +X-001Y00281* +X-0011Y00271* +X-0012* +X-0011Y00261* +X-0012Y00251* +X-0011* +X-001Y00241* +X-00407Y-00757D02* +X-00427Y-00717D01* +X-00387* +X-00407Y-00757* +Y-0058D02* +X-00427Y-0054D01* +X-00387* +X-00407Y-0058* +X-00662D02* +X-00682Y-0054D01* +X-00642* +X-00662Y-0058* +Y-00757D02* +X-00682Y-00717D01* +X-00642* +X-00662Y-00757* +X00127D02* +X00107Y-00717D01* +X00147* +X00127Y-00757* +Y-0058D02* +X00107Y-0054D01* +X00147* +X00127Y-0058* +X-00127D02* +X-00147Y-0054D01* +X-00107* +X-00127Y-0058* +Y-00757D02* +X-00147Y-00717D01* +X-00107* +X-00127Y-00757* +X01397Y00636D02* +X01417Y00656D01* +X01437Y00636* +X01417Y00616* +X01397Y00636* +X014Y00707D02* +X0142Y00727D01* +X0144Y00707* +X0142Y00687* +X014Y00707* +X01251Y00834D02* +X01271Y00854D01* +X01291Y00834* +X01271Y00814* +X01251Y00834* +X01157Y00827D02* +X01177Y00847D01* +X01197Y00827* +X01177Y00807* +X01157Y00827* +X01096Y00822D02* +X01116Y00842D01* +X01136Y00822* +X01116Y00802* +X01096Y00822* +X-0133Y-00513D02* +X-0131Y-00493D01* +X-0129Y-00513* +X-0131Y-00533* +X-0133Y-00513* +X01149Y00002D02* +X01169Y00022D01* +X01189Y00002* +X01169Y-00017* +X01149Y00002* +X-00665Y00827D02* +X-00645Y00847D01* +X-00625Y00827* +X-00645Y00807* +X-00665Y00827* +X-00944Y00726D02* +X-00924Y00746D01* +X-00904Y00726* +X-00924Y00706* +X-00944Y00726* +X00565Y-00487D02* +X00585Y-00467D01* +X00605Y-00487* +X00585Y-00507* +X00565Y-00487* +X00419Y00886D02* +X00439Y00906D01* +X00459Y00886* +X00439Y00866* +X00419Y00886* +X00736Y-01141D02* +X00756Y-01121D01* +X00776Y-01141* +X00756Y-01161* +X00736Y-01141* +X00907Y-00956D02* +X00927Y-00936D01* +X00947Y-00956* +X00927Y-00976* +X00907Y-00956* +X00602Y-01088D02* +X00622Y-01068D01* +X00642Y-01088* +X00622Y-01108* +X00602Y-01088* +X00983Y-01159D02* +X01003Y-01139D01* +X01023Y-01159* +X01003Y-01179* +X00983Y-01159* +X01312Y-00689D02* +X01332Y-00669D01* +X01352Y-00689* +X01332Y-00709* +X01312Y-00689* +X00976Y-00707D02* +X00996Y-00687D01* +X01016Y-00707* +X00996Y-00727* +X00976Y-00707* +X01043Y-0038D02* +X01063Y-0036D01* +X01083Y-0038* +X01063Y-004* +X01043Y-0038* +X01036Y-00595D02* +X01056Y-00575D01* +X01076Y-00595* +X01056Y-00615* +X01036Y-00595* +X01062Y-00473D02* +X01082Y-00453D01* +X01102Y-00473* +X01082Y-00493* +X01062Y-00473* +X01046Y-00819D02* +X01066Y-00799D01* +X01086Y-00819* +X01066Y-00839* +X01046Y-00819* +X00277Y00739D02* +X00297Y00759D01* +X00317Y00739* +X00297Y00719* +X00277Y00739* +X00941Y00718D02* +X00961Y00738D01* +X00981Y00718* +X00961Y00698* +X00941Y00718* +X0061Y-0005D02* +X0063Y-0003D01* +X0065Y-0005* +X0063Y-0007* +X0061Y-0005* +X-01191Y00517D02* +X-01171Y00537D01* +X-01151Y00517* +X-01171Y00497* +X-01191Y00517* +X-01001Y00744D02* +X-00981Y00764D01* +X-00961Y00744* +X-00981Y00724* +X-01001Y00744* +X-00276Y00873D02* +X-00256Y00893D01* +X-00236Y00873* +X-00256Y00853* +X-00276Y00873* +X00121Y00496D02* +X00141Y00516D01* +X00161Y00496* +X00141Y00476* +X00121Y00496* +X00319Y00645D02* +X00339Y00665D01* +X00359Y00645* +X00339Y00625* +X00319Y00645* +X00519Y00282D02* +X00539Y00302D01* +X00559Y00282* +X00539Y00262* +X00519Y00282* +X00517Y00456D02* +X00537Y00476D01* +X00557Y00456* +X00537Y00436* +X00517Y00456* +X00174Y00529D02* +X00194Y00549D01* +X00214Y00529* +X00194Y00509* +X00174Y00529* +X00259Y00588D02* +X00279Y00608D01* +X00299Y00588* +X00279Y00568* +X00259Y00588* +X00262Y00436D02* +X00282Y00456D01* +X00302Y00436* +X00282Y00416* +X00262Y00436* +X00206Y00588D02* +X00226Y00608D01* +X00246Y00588* +X00226Y00568* +X00206Y00588* +X-0029Y00501D02* +X-0027Y00521D01* +X-0025Y00501* +X-0027Y00481* +X-0029Y00501* +X-00988Y00828D02* +X-00968Y00848D01* +X-00948Y00828* +X-00968Y00808* +X-00988Y00828* +X-01103Y00826D02* +X-01083Y00846D01* +X-01063Y00826* +X-01083Y00806* +X-01103Y00826* +X00206Y00876D02* +X00226Y00896D01* +X00246Y00876* +X00226Y00856* +X00206Y00876* +X-01154Y00625D02* +X-01134Y00645D01* +X-01114Y00625* +X-01134Y00605* +X-01154Y00625* +X-01207Y0096D02* +X-01187Y0098D01* +X-01167Y0096* +X-01187Y0094* +X-01207Y0096* +X-01196Y00791D02* +X-01176Y00811D01* +X-01156Y00791* +X-01176Y00771* +X-01196Y00791* +X-01323Y00744D02* +X-01303Y00764D01* +X-01283Y00744* +X-01303Y00724* +X-01323Y00744* +X-01475Y00511D02* +X-01455Y00531D01* +X-01435Y00511* +X-01455Y00491* +X-01475Y00511* +X-0155Y00657D02* +X-0153Y00677D01* +X-0151Y00657* +X-0153Y00637* +X-0155Y00657* +X-00339Y00692D02* +X-00319Y00712D01* +X-00299Y00692* +X-00319Y00672* +X-00339Y00692* +X-00206Y00508D02* +X-00186Y00528D01* +X-00166Y00508* +X-00186Y00488* +X-00206Y00508* +X-00181Y00958D02* +X-00161Y00978D01* +X-00141Y00958* +X-00161Y00938* +X-00181Y00958* +X-01417Y0037D02* +X-01397Y0039D01* +X-01377Y0037* +X-01397Y0035* +X-01417Y0037* +X-01197Y00333D02* +X-01177Y00353D01* +X-01157Y00333* +X-01177Y00313* +X-01197Y00333* +X00825Y00596D02* +X00845Y00616D01* +X00865Y00596* +X00845Y00576* +X00825Y00596* +X00516Y00517D02* +X00536Y00537D01* +X00556Y00517* +X00536Y00497* +X00516Y00517* +X00994Y00203D02* +X01014Y00223D01* +X01034Y00203* +X01014Y00183* +X00994Y00203* +X00568Y00215D02* +X00588Y00235D01* +X00608Y00215* +X00588Y00195* +X00568Y00215* +X00385Y00369D02* +X00405Y00389D01* +X00425Y00369* +X00405Y00349* +X00385Y00369* +X00772Y00454D02* +X00792Y00474D01* +X00812Y00454* +X00792Y00434* +X00772Y00454* +X00836Y00408D02* +X00856Y00428D01* +X00876Y00408* +X00856Y00388* +X00836Y00408* +X01051Y00617D02* +X01071Y00637D01* +X01091Y00617* +X01071Y00597* +X01051Y00617* +X01129Y00653D02* +X01149Y00673D01* +X01169Y00653* +X01149Y00633* +X01129Y00653* +X-01022Y00384D02* +X-01002Y00404D01* +X-00982Y00384* +X-01002Y00364* +X-01022Y00384* +X-01074Y00201D02* +X-01054Y00221D01* +X-01034Y00201* +X-01054Y00181* +X-01074Y00201* +X-00957D02* +X-00937Y00221D01* +X-00917Y00201* +X-00937Y00181* +X-00957Y00201* +X01334Y00358D02* +X01354Y00378D01* +X01374Y00358* +X01354Y00338* +X01334Y00358* +X00733Y-01006D02* +X00753Y-00986D01* +X00773Y-01006* +X00753Y-01026* +X00733Y-01006* +X01427Y0088D02* +X01447Y009D01* +X01467Y0088* +X01447Y0086* +X01427Y0088* +X00756Y00038D02* +X00776Y00058D01* +X00796Y00038* +X00776Y00018* +X00756Y00038* +X00565Y00156D02* +X00585Y00176D01* +X00605Y00156* +X00585Y00136* +X00565Y00156* +X-01457Y-0054D02* +X-01437Y-0052D01* +X-01417Y-0054* +X-01437Y-0056* +X-01457Y-0054* +X-01299Y-00293D02* +X-01279Y-00273D01* +X-01259Y-00293* +X-01279Y-00313* +X-01299Y-00293* +X-01369Y-00249D02* +X-01349Y-00229D01* +X-01329Y-00249* +X-01349Y-00269* +X-01369Y-00249* +X-00823Y00533D02* +X-00803Y00553D01* +X-00783Y00533* +X-00803Y00513* +X-00823Y00533* +X00385Y00665D02* +X00405Y00685D01* +X00425Y00665* +X00405Y00645* +X00385Y00665* +X-00447Y00618D02* +X-00427Y00638D01* +X-00407Y00618* +X-00427Y00598* +X-00447Y00618* +X-00945Y-00563D02* +X-00925Y-00543D01* +X-00905Y-00563* +X-00925Y-00583* +X-00945Y-00563* +X-00889Y-00589D02* +X-00869Y-00569D01* +X-00849Y-00589* +X-00869Y-00609* +X-00889Y-00589* +X-01132Y-00523D02* +X-01112Y-00503D01* +X-01092Y-00523* +X-01112Y-00543* +X-01132Y-00523* +X-01114Y-00602D02* +X-01094Y-00582D01* +X-01074Y-00602* +X-01094Y-00622* +X-01114Y-00602* +X-00462Y-00495D02* +X-00442Y-00475D01* +X-00422Y-00495* +X-00442Y-00515* +X-00462Y-00495* +X00598Y-00621D02* +X00618Y-00601D01* +X00638Y-00621* +X00618Y-00641* +X00598Y-00621* +X-00072Y-00495D02* +X-00052Y-00475D01* +X-00032Y-00495* +X-00052Y-00515* +X-00072Y-00495* +X01238Y00204D02* +X01258Y00224D01* +X01278Y00204* +X01258Y00184* +X01238Y00204* +X00603Y00599D02* +X00623Y00619D01* +X00643Y00599* +X00623Y00579* +X00603Y00599* +X0104Y00558D02* +X0106Y00578D01* +X0108Y00558* +X0106Y00538* +X0104Y00558* +X01397Y00209D02* +X01417Y00229D01* +X01437Y00209* +X01417Y00189* +X01397Y00209* +X01174Y00204D02* +X01194Y00224D01* +X01214Y00204* +X01194Y00184* +X01174Y00204* +X-00944Y00462D02* +X-00924Y00482D01* +X-00904Y00462* +X-00924Y00442* +X-00944Y00462* +X-01078Y00914D02* +X-01058Y00934D01* +X-01038Y00914* +X-01058Y00894* +X-01078Y00914* +X00061Y-00277D02* +X00081Y-00257D01* +X00101Y-00277* +X00081Y-00297* +X00061Y-00277* +X00012Y-00321D02* +X00032Y-00301D01* +X00052Y-00321* +X00032Y-00341* +X00012Y-00321* +X-00182Y-00298D02* +X-00162Y-00278D01* +X-00142Y-00298* +X-00162Y-00318* +X-00182Y-00298* +X00181Y-00789D02* +X00201Y-00769D01* +X00221Y-00789* +X00201Y-00809* +X00181Y-00789* +X00343Y-00674D02* +X00363Y-00654D01* +X00383Y-00674* +X00363Y-00694* +X00343Y-00674* +X0072Y-00329D02* +X0074Y-00309D01* +X0076Y-00329* +X0074Y-00349* +X0072Y-00329* +X00712Y-00141D02* +X00732Y-00121D01* +X00752Y-00141* +X00732Y-00161* +X00712Y-00141* +X00594Y00056D02* +X00614Y00076D01* +X00634Y00056* +X00614Y00036* +X00594Y00056* +X01455Y-00321D02* +X01475Y-00301D01* +X01495Y-00321* +X01475Y-00341* +X01455Y-00321* +X01407Y-0053D02* +X01427Y-0051D01* +X01447Y-0053* +X01427Y-0055* +X01407Y-0053* +X01481Y-00829D02* +X01501Y-00809D01* +X01521Y-00829* +X01501Y-00849* +X01481Y-00829* +X01505Y-00587D02* +X01525Y-00567D01* +X01545Y-00587* +X01525Y-00607* +X01505Y-00587* +X0117Y-00694D02* +X0119Y-00674D01* +X0121Y-00694* +X0119Y-00714* +X0117Y-00694* +X00795Y-00679D02* +X00815Y-00659D01* +X00835Y-00679* +X00815Y-00699* +X00795Y-00679* +X01319Y-00423D02* +X01339Y-00403D01* +X01359Y-00423* +X01339Y-00443* +X01319Y-00423* +X-01214Y-00087D02* +X-01194Y-00067D01* +X-01174Y-00087* +X-01194Y-00107* +X-01214Y-00087* +X-0152Y-00901D02* +X-015Y-00881D01* +X-0148Y-00901* +X-015Y-00921* +X-0152Y-00901* +X-01504Y-00988D02* +X-01484Y-00968D01* +X-01464Y-00988* +X-01484Y-01008* +X-01504Y-00988* +X-01379Y-00609D02* +X-01359Y-00589D01* +X-01339Y-00609* +X-01359Y-00629* +X-01379Y-00609* +X-01139Y-01014D02* +X-01119Y-00994D01* +X-01099Y-01014* +X-01119Y-01034* +X-01139Y-01014* +X-01095Y-01063D02* +X-01075Y-01043D01* +X-01055Y-01063* +X-01075Y-01083* +X-01095Y-01063* +X-01099Y-00733D02* +X-01079Y-00713D01* +X-01059Y-00733* +X-01079Y-00753* +X-01099Y-00733* +X-01056Y-0018D02* +X-01036Y-0016D01* +X-01016Y-0018* +X-01036Y-002* +X-01056Y-0018* +X-01128Y-00096D02* +X-01108Y-00076D01* +X-01088Y-00096* +X-01108Y-00116* +X-01128Y-00096* +X-01222Y-00394D02* +X-01202Y-00374D01* +X-01182Y-00394* +X-01202Y-00414* +X-01222Y-00394* +X-01252Y-00329D02* +X-01232Y-00309D01* +X-01212Y-00329* +X-01232Y-00349* +X-01252Y-00329* +X-01225Y-00251D02* +X-01205Y-00231D01* +X-01185Y-00251* +X-01205Y-00271* +X-01225Y-00251* +X-01109Y-00277D02* +X-01089Y-00257D01* +X-01069Y-00277* +X-01089Y-00297* +X-01109Y-00277* +X-01274Y-00026D02* +X-01254Y-00006D01* +X-01234Y-00026* +X-01254Y-00046* +X-01274Y-00026* +X-01296Y-00202D02* +X-01276Y-00182D01* +X-01256Y-00202* +X-01276Y-00222* +X-01296Y-00202* +X-01153Y-00164D02* +X-01133Y-00144D01* +X-01113Y-00164* +X-01133Y-00184* +X-01153Y-00164* +X-00452Y-00824D02* +X-00432Y-00804D01* +X-00412Y-00824* +X-00432Y-00844* +X-00452Y-00824* +X-00519Y-00926D02* +X-00499Y-00906D01* +X-00479Y-00926* +X-00499Y-00946* +X-00519Y-00926* +X-00892Y-00462D02* +X-00872Y-00442D01* +X-00852Y-00462* +X-00872Y-00482* +X-00892Y-00462* +X-00944Y-00183D02* +X-00924Y-00163D01* +X-00904Y-00183* +X-00924Y-00203* +X-00944Y-00183* +X-00797Y-0031D02* +X-00777Y-0029D01* +X-00757Y-0031* +X-00777Y-0033* +X-00797Y-0031* +X-00485Y-00294D02* +X-00465Y-00274D01* +X-00445Y-00294* +X-00465Y-00314* +X-00485Y-00294* +X-01427Y-00395D02* +X-01407Y-00375D01* +X-01387Y-00395* +X-01407Y-00415* +X-01427Y-00395* +X-01465Y00312D02* +X-01445Y00332D01* +X-01425Y00312* +X-01445Y00292* +X-01465Y00312* +X-01544Y-00088D02* +X-01524Y-00068D01* +X-01504Y-00088* +X-01524Y-00108* +X-01544Y-00088* +X-00264Y-00352D02* +X-00244Y-00332D01* +X-00224Y-00352* +X-00244Y-00372* +X-00264Y-00352* +X-00263Y-00496D02* +X-00243Y-00476D01* +X-00223Y-00496* +X-00243Y-00516* +X-00263Y-00496* +X-00404Y-00449D02* +X-00384Y-00429D01* +X-00364Y-00449* +X-00384Y-00469* +X-00404Y-00449* +X-00084Y-00664D02* +X-00064Y-00644D01* +X-00044Y-00664* +X-00064Y-00684* +X-00084Y-00664* +X-00659Y-00909D02* +X-00639Y-00889D01* +X-00619Y-00909* +X-00639Y-00929* +X-00659Y-00909* +X-00748Y-00831D02* +X-00728Y-00811D01* +X-00708Y-00831* +X-00728Y-00851* +X-00748Y-00831* +X-00689Y-01146D02* +X-00669Y-01126D01* +X-00649Y-01146* +X-00669Y-01166* +X-00689Y-01146* +X-00756Y-01102D02* +X-00736Y-01082D01* +X-00716Y-01102* +X-00736Y-01122* +X-00756Y-01102* +X-0099Y-00661D02* +X-0097Y-00641D01* +X-0095Y-00661* +X-0097Y-00681* +X-0099Y-00661* +X-01295Y-0057D02* +X-01275Y-0055D01* +X-01255Y-0057* +X-01275Y-0059* +X-01295Y-0057* +X00454Y-00784D02* +X00474Y-00764D01* +X00494Y-00784* +X00474Y-00804* +X00454Y-00784* +X00019Y-00757D02* +X00039Y-00737D01* +X00059Y-00757* +X00039Y-00777* +X00019Y-00757* +X00868Y-01001D02* +X00888Y-00981D01* +X00908Y-01001* +X00888Y-01021* +X00868Y-01001* +X-00535Y00651D02* +X-00515Y00671D01* +X-00495Y00651* +X-00515Y00631* +X-00535Y00651* +X00338Y-00002D02* +X00358Y00018D01* +X00378Y-00002* +X00358Y-00022* +X00338Y-00002* +X00177Y00681D02* +X00197Y00701D01* +X00217Y00681* +X00197Y00661* +X00177Y00681* +X-00312Y-0027D02* +X-00292Y-0025D01* +X-00272Y-0027* +X-00292Y-0029* +X-00312Y-0027* +X00135Y00958D02* +X00155Y00978D01* +X00175Y00958* +X00155Y00938* +X00135Y00958* +X00272Y-00499D02* +X00292Y-00479D01* +X00312Y-00499* +X00292Y-00519* +X00272Y-00499* +X-00067Y-00089D02* +X-00047Y-00069D01* +X-00027Y-00089* +X-00047Y-00109* +X-00067Y-00089* +X-00907Y-00879D02* +X-00887Y-00859D01* +X-00867Y-00879* +X-00887Y-00899* +X-00907Y-00879* +X0058Y-00782D02* +X006Y-00762D01* +X0062Y-00782* +X006Y-00802* +X0058Y-00782* +X00502Y00958D02* +X00522Y00978D01* +X00542Y00958* +X00522Y00938* +X00502Y00958* +X00383Y-01053D02* +X00403Y-01033D01* +X00423Y-01053* +X00403Y-01073* +X00383Y-01053* +X01409Y-00945D02* +X01429Y-00925D01* +X01449Y-00945* +X01429Y-00965* +X01409Y-00945* +X-0143Y00917D02* +X-0141Y00937D01* +X-0139Y00917* +X-0141Y00897* +X-0143Y00917* +X-00765Y00539D02* +X-00745Y00559D01* +X-00725Y00539* +X-00745Y00519* +X-00765Y00539* +X00441Y-00677D02* +X00461Y-00657D01* +X00481Y-00677* +X00461Y-00697* +X00441Y-00677* +X01092Y-01012D02* +X01112Y-00992D01* +X01132Y-01012* +X01112Y-01032* +X01092Y-01012* +X00542Y-01234D02* +X00562Y-01214D01* +X00582Y-01234* +X00562Y-01254* +X00542Y-01234* +X00961Y-01251D02* +X00981Y-01231D01* +X01001Y-01251* +X00981Y-01271* +X00961Y-01251* +X00758D02* +X00778Y-01231D01* +X00798Y-01251* +X00778Y-01271* +X00758Y-01251* +X-00491Y-01249D02* +X-00471Y-01229D01* +X-00451Y-01249* +X-00471Y-01269* +X-00491Y-01249* +X-01429Y-00976D02* +X-01409Y-00956D01* +X-01389Y-00976* +X-01409Y-00996* +X-01429Y-00976* +X-01186Y-01237D02* +X-01166Y-01217D01* +X-01146Y-01237* +X-01166Y-01257* +X-01186Y-01237* +X-01441Y-01248D02* +X-01421Y-01228D01* +X-01401Y-01248* +X-01421Y-01268* +X-01441Y-01248* +X-01545Y-0116D02* +X-01525Y-0114D01* +X-01505Y-0116* +X-01525Y-0118* +X-01545Y-0116* +X-01049Y-01119D02* +X-01029Y-01099D01* +X-01009Y-01119* +X-01029Y-01139* +X-01049Y-01119* +X-0123Y-01112D02* +X-0121Y-01092D01* +X-0119Y-01112* +X-0121Y-01132* +X-0123Y-01112* +X-00586Y-00458D02* +X-00566Y-00438D01* +X-00546Y-00458* +X-00566Y-00478* +X-00586Y-00458* +X-01378Y-00717D02* +X-01358Y-00697D01* +X-01338Y-00717* +X-01358Y-00737* +X-01378Y-00717* +X-01047Y-00866D02* +X-01027Y-00846D01* +X-01007Y-00866* +X-01027Y-00886* +X-01047Y-00866* +X-00953Y-0124D02* +X-00933Y-0122D01* +X-00913Y-0124* +X-00933Y-0126* +X-00953Y-0124* +X-00409Y-00247D02* +X-00389Y-00227D01* +X-00369Y-00247* +X-00389Y-00267* +X-00409Y-00247* +X-01423Y00192D02* +X-01403Y00212D01* +X-01383Y00192* +X-01403Y00172* +X-01423Y00192* +X-00904Y-00803D02* +X-00884Y-00783D01* +X-00864Y-00803* +X-00884Y-00823* +X-00904Y-00803* +X-01028Y-00997D02* +X-01008Y-00977D01* +X-00988Y-00997* +X-01008Y-01017* +X-01028Y-00997* +X-00724Y-01244D02* +X-00704Y-01224D01* +X-00684Y-01244* +X-00704Y-01264* +X-00724Y-01244* +X00618Y-00232D02* +X00638Y-00212D01* +X00658Y-00232* +X00638Y-00252* +X00618Y-00232* +X-00378Y-0009D02* +X-00358Y-0007D01* +X-00338Y-0009* +X-00358Y-0011* +X-00378Y-0009* +X-00783Y-0013D02* +X-00763Y-0011D01* +X-00743Y-0013* +X-00763Y-0015* +X-00783Y-0013* +X-00528Y-00696D02* +X-00508Y-00676D01* +X-00488Y-00696* +X-00508Y-00716* +X-00528Y-00696* +X-00997Y00595D02* +X-00977Y00615D01* +X-00957Y00595* +X-00977Y00575* +X-00997Y00595* +X00802Y-00541D02* +X00822Y-00521D01* +X00842Y-00541* +X00822Y-00561* +X00802Y-00541* +X00442Y-00492D02* +X00462Y-00472D01* +X00482Y-00492* +X00462Y-00512* +X00442Y-00492* +X-01489Y-00184D02* +X-01469Y-00164D01* +X-01449Y-00184* +X-01469Y-00204* +X-01489Y-00184* +X01404Y00048D02* +X01424Y00068D01* +X01444Y00048* +X01424Y00028* +X01404Y00048* +X01025Y-00288D02* +X01045Y-00268D01* +X01065Y-00288* +X01045Y-00308* +X01025Y-00288* +X01386Y-00176D02* +X01406Y-00156D01* +X01426Y-00176* +X01406Y-00196* +X01386Y-00176* +X00335Y00091D02* +X00355Y00111D01* +X00375Y00091* +X00355Y00071* +X00335Y00091* +X00286Y-00132D02* +X00306Y-00112D01* +X00326Y-00132* +X00306Y-00152* +X00286Y-00132* +X0087Y-0007D02* +X0089Y-0005D01* +X0091Y-0007* +X0089Y-0009* +X0087Y-0007* +X01025Y-00018D02* +X01045Y00001D01* +X01065Y-00018* +X01045Y-00038* +X01025Y-00018* +X01285Y-00122D02* +X01305Y-00102D01* +X01325Y-00122* +X01305Y-00142* +X01285Y-00122* +X01491Y-00167D02* +X01511Y-00147D01* +X01531Y-00167* +X01511Y-00187* +X01491Y-00167* +X00857Y-00231D02* +X00877Y-00211D01* +X00897Y-00231* +X00877Y-00251* +X00857Y-00231* +X0048Y-00166D02* +X005Y-00146D01* +X0052Y-00166* +X005Y-00186* +X0048Y-00166* +X00457Y-00243D02* +X00477Y-00223D01* +X00497Y-00243* +X00477Y-00263* +X00457Y-00243* +X00307Y-00292D02* +X00327Y-00272D01* +X00347Y-00292* +X00327Y-00312* +X00307Y-00292* +X00308Y-00227D02* +X00328Y-00207D01* +X00348Y-00227* +X00328Y-00247* +X00308Y-00227* +X00265Y-00353D02* +X00285Y-00333D01* +X00305Y-00353* +X00285Y-00373* +X00265Y-00353* +X-00111Y-00313D02* +X-00091Y-00293D01* +X-00071Y-00313* +X-00091Y-00333* +X-00111Y-00313* +X00039Y-00417D02* +X00059Y-00397D01* +X00079Y-00417* +X00059Y-00437* +X00039Y-00417* +X-00054Y-00245D02* +X-00034Y-00225D01* +X-00014Y-00245* +X-00034Y-00265* +X-00054Y-00245* +X00012Y-01284D02* +X00032Y-01264D01* +X00052Y-01284* +X00032Y-01304* +X00012Y-01284* +X00055Y-01162D02* +X00075Y-01142D01* +X00095Y-01162* +X00075Y-01182* +X00055Y-01162* +X00109D02* +X00129Y-01142D01* +X00149Y-01162* +X00129Y-01182* +X00109Y-01162* +X-00128Y-01259D02* +X-00108Y-01239D01* +X-00088Y-01259* +X-00108Y-01279* +X-00128Y-01259* +X-00088Y-01151D02* +X-00068Y-01131D01* +X-00048Y-01151* +X-00068Y-01171* +X-00088Y-01151* +X-00112Y-01507D02* +X-00092Y-01487D01* +X-00072Y-01507* +X-00092Y-01527* +X-00112Y-01507* +X-00069Y-00757D02* +X-00049Y-00737D01* +X-00029Y-00757* +X-00049Y-00777* +X-00069Y-00757* +X-00226Y-00807D02* +X-00206Y-00787D01* +X-00186Y-00807* +X-00206Y-00827* +X-00226Y-00807* +X-00779Y-00731D02* +X-00759Y-00711D01* +X-00739Y-00731* +X-00759Y-00751* +X-00779Y-00731* +X-00782Y-00503D02* +X-00762Y-00483D01* +X-00742Y-00503* +X-00762Y-00523* +X-00782Y-00503* +X-00603Y-00621D02* +X-00583Y-00601D01* +X-00563Y-00621* +X-00583Y-00641* +X-00603Y-00621* +X-00475Y-01123D02* +X-00455Y-01103D01* +X-00435Y-01123* +X-00455Y-01143* +X-00475Y-01123* +X-00271Y-00976D02* +X-00251Y-00956D01* +X-00231Y-00976* +X-00251Y-00996* +X-00271Y-00976* +X-00274Y-01157D02* +X-00254Y-01137D01* +X-00234Y-01157* +X-00254Y-01177* +X-00274Y-01157* +X00043Y-00663D02* +X00063Y-00643D01* +X00083Y-00663* +X00063Y-00683* +X00043Y-00663* +X00672Y-00419D02* +X00692Y-00399D01* +X00712Y-00419* +X00692Y-00439* +X00672Y-00419* +X-00624Y-00797D02* +X-00604Y-00777D01* +X-00584Y-00797* +X-00604Y-00817* +X-00624Y-00797* +X-01136Y00448D02* +X-01116Y00468D01* +X-01096Y00448* +X-01116Y00428* +X-01136Y00448* +X01331Y00862D02* +X01351Y00882D01* +X01371Y00862* +X01351Y00842* +X01331Y00862* +X00881Y00338D02* +X00901Y00358D01* +X00921Y00338* +X00901Y00318* +X00881Y00338* +X00949Y00392D02* +X00969Y00412D01* +X00989Y00392* +X00969Y00372* +X00949Y00392* +X01289Y00621D02* +X01309Y00641D01* +X01329Y00621* +X01309Y00601* +X01289Y00621* +X0139Y00577D02* +X0141Y00597D01* +X0143Y00577* +X0141Y00557* +X0139Y00577* +X01334Y00418D02* +X01354Y00438D01* +X01374Y00418* +X01354Y00398* +X01334Y00418* +X01437Y00508D02* +X01457Y00528D01* +X01477Y00508* +X01457Y00488* +X01437Y00508* +X00997Y00101D02* +X01017Y00121D01* +X01037Y00101* +X01017Y00081* +X00997Y00101* +X01074Y00411D02* +X01094Y00431D01* +X01114Y00411* +X01094Y00391* +X01074Y00411* +X01242Y00407D02* +X01262Y00427D01* +X01282Y00407* +X01262Y00387* +X01242Y00407* +X0123Y00621D02* +X0125Y00641D01* +X0127Y00621* +X0125Y00601* +X0123Y00621* +X01159Y00425D02* +X01179Y00445D01* +X01199Y00425* +X01179Y00405* +X01159Y00425* +X01196Y00337D02* +X01216Y00357D01* +X01236Y00337* +X01216Y00317* +X01196Y00337* +X-01308Y-00076D02* +X-01288Y-00056D01* +X-01268Y-00076* +X-01288Y-00096* +X-01308Y-00076* +X-01373Y-00125D02* +X-01353Y-00105D01* +X-01333Y-00125* +X-01353Y-00145* +X-01373Y-00125* +X-0119Y00113D02* +X-0117Y00133D01* +X-0115Y00113* +X-0117Y00093* +X-0119Y00113* +X-0079Y00381D02* +X-0077Y00401D01* +X-0075Y00381* +X-0077Y00361* +X-0079Y00381* +X-01294Y00406D02* +X-01274Y00426D01* +X-01254Y00406* +X-01274Y00386* +X-01294Y00406* +X00294Y-00926D02* +X00314Y-00906D01* +X00334Y-00926* +X00314Y-00946* +X00294Y-00926* +X00947Y-01002D02* +X00967Y-00982D01* +X00987Y-01002* +X00967Y-01022* +X00947Y-01002* +X00604Y-01027D02* +X00624Y-01007D01* +X00644Y-01027* +X00624Y-01047* +X00604Y-01027* +X00441Y-01002D02* +X00461Y-00982D01* +X00481Y-01002* +X00461Y-01022* +X00441Y-01002* +X00482Y-00918D02* +X00502Y-00898D01* +X00522Y-00918* +X00502Y-00938* +X00482Y-00918* +X00373Y-012D02* +X00393Y-0118D01* +X00413Y-012* +X00393Y-0122* +X00373Y-012* +X01161Y-0123D02* +X01181Y-0121D01* +X01201Y-0123* +X01181Y-0125* +X01161Y-0123* +X0139Y-01234D02* +X0141Y-01214D01* +X0143Y-01234* +X0141Y-01254* +X0139Y-01234* +X01151Y-00126D02* +X01171Y-00106D01* +X01191Y-00126* +X01171Y-00146* +X01151Y-00126* +X-00148Y00576D02* +X-00128Y00596D01* +X-00108Y00576* +X-00128Y00556* +X-00148Y00576* +X-00885Y00461D02* +X-00865Y00481D01* +X-00845Y00461* +X-00865Y00441* +X-00885Y00461* +X-00919Y00384D02* +X-00899Y00404D01* +X-00879Y00384* +X-00899Y00364* +X-00919Y00384* +X-00629Y00623D02* +X-00609Y00643D01* +X-00589Y00623* +X-00609Y00603* +X-00629Y00623* +X00295Y-00846D02* +X00315Y-00826D01* +X00335Y-00846* +X00315Y-00866* +X00295Y-00846* +X00248Y-0081D02* +X00268Y-0079D01* +X00288Y-0081* +X00268Y-0083* +X00248Y-0081* +X00669Y0032D02* +X00689Y0034D01* +X00709Y0032* +X00689Y003* +X00669Y0032* +X00726Y00801D02* +X00746Y00821D01* +X00766Y00801* +X00746Y00781* +X00726Y00801* +X00646D02* +X00666Y00821D01* +X00686Y00801* +X00666Y00781* +X00646Y00801* +X00966Y00956D02* +X00986Y00976D01* +X01006Y00956* +X00986Y00936* +X00966Y00956* +X00665Y00603D02* +X00685Y00623D01* +X00705Y00603* +X00685Y00583* +X00665Y00603* +X00724D02* +X00744Y00623D01* +X00764Y00603* +X00744Y00583* +X00724Y00603* +X-01441Y-01079D02* +X-01421Y-01059D01* +X-01401Y-01079* +X-01421Y-01099* +X-01441Y-01079* +X00223Y-01104D02* +X00243Y-01084D01* +X00263Y-01104* +X00243Y-01124* +X00223Y-01104* +X00211Y-01308D02* +X00231Y-01288D01* +X00251Y-01308* +X00231Y-01328* +X00211Y-01308* +X00071Y-01507D02* +X00091Y-01487D01* +X00111Y-01507* +X00091Y-01527* +X00071Y-01507* +X0016Y-00499D02* +X0018Y-00479D01* +X002Y-00499* +X0018Y-00519* +X0016Y-00499* +X-00426Y00508D02* +X-00406Y00528D01* +X-00386Y00508* +X-00406Y00488* +X-00426Y00508* +X-00346Y00522D02* +X-00326Y00542D01* +X-00306Y00522* +X-00326Y00502* +X-00346Y00522* +X-00075Y00495D02* +X-00055Y00515D01* +X-00035Y00495* +X-00055Y00475* +X-00075Y00495* +X-00437Y00827D02* +X-00417Y00847D01* +X-00397Y00827* +X-00417Y00807* +X-00437Y00827* +X-00495Y00802D02* +X-00475Y00822D01* +X-00455Y00802* +X-00475Y00782* +X-00495Y00802* +X-00841Y00666D02* +X-00821Y00686D01* +X-00801Y00666* +X-00821Y00646* +X-00841Y00666* +X00964Y-00155D02* +X00984Y-00135D01* +X01004Y-00155* +X00984Y-00175* +X00964Y-00155* +X00335Y00191D02* +X00355Y00211D01* +X00375Y00191* +X00355Y00171* +X00335Y00191* +X00327Y00285D02* +X00347Y00305D01* +X00367Y00285* +X00347Y00265* +X00327Y00285* +G54D121* +X00183Y-01408D02* +D01* +X00183Y-01407* +X00183Y-01405* +X00182Y-01404* +X00182Y-01402* +X00182Y-01401* +X00181Y-014* +X00181Y-01399* +X0018Y-01397* +X00179Y-01396* +X00178Y-01395* +X00177Y-01394* +X00176Y-01393* +X00175Y-01392* +X00174Y-01391* +X00173Y-01391* +X00172Y-0139* +X0017Y-01389* +X00169Y-01389* +X00168Y-01389* +X00166Y-01388* +X00165Y-01388* +X00164Y-01388* +X00162* +X00161Y-01388* +X00159Y-01388* +X00158Y-01389* +X00157Y-01389* +X00155Y-01389* +X00154Y-0139* +X00153Y-01391* +X00152Y-01391* +X00151Y-01392* +X0015Y-01393* +X00149Y-01394* +X00148Y-01395* +X00147Y-01396* +X00146Y-01397* +X00145Y-01399* +X00145Y-014* +X00144Y-01401* +X00144Y-01402* +X00143Y-01404* +X00143Y-01405* +X00143Y-01407* +X00143Y-01408* +X00143Y-01409* +X00143Y-01411* +X00143Y-01412* +X00144Y-01413* +X00144Y-01415* +X00145Y-01416* +X00145Y-01417* +X00146Y-01419* +X00147Y-0142* +X00148Y-01421* +X00149Y-01422* +X0015Y-01423* +X00151Y-01424* +X00152Y-01425* +X00153Y-01425* +X00154Y-01426* +X00155Y-01427* +X00157Y-01427* +X00158Y-01427* +X00159Y-01428* +X00161Y-01428* +X00162Y-01428* +X00164* +X00165Y-01428* +X00166Y-01428* +X00168Y-01427* +X00169Y-01427* +X0017Y-01427* +X00172Y-01426* +X00173Y-01425* +X00174Y-01425* +X00175Y-01424* +X00176Y-01423* +X00177Y-01422* +X00178Y-01421* +X00179Y-0142* +X0018Y-01419* +X00181Y-01417* +X00181Y-01416* +X00182Y-01415* +X00182Y-01413* +X00182Y-01412* +X00183Y-01411* +X00183Y-01409* +X00183Y-01408* +X-00143D02* +D01* +X-00143Y-01407* +X-00143Y-01405* +X-00143Y-01404* +X-00144Y-01402* +X-00144Y-01401* +X-00145Y-014* +X-00145Y-01399* +X-00146Y-01397* +X-00147Y-01396* +X-00148Y-01395* +X-00149Y-01394* +X-0015Y-01393* +X-00151Y-01392* +X-00152Y-01391* +X-00153Y-01391* +X-00154Y-0139* +X-00155Y-01389* +X-00157Y-01389* +X-00158Y-01389* +X-00159Y-01388* +X-00161Y-01388* +X-00162Y-01388* +X-00164* +X-00165Y-01388* +X-00166Y-01388* +X-00168Y-01389* +X-00169Y-01389* +X-0017Y-01389* +X-00172Y-0139* +X-00173Y-01391* +X-00174Y-01391* +X-00175Y-01392* +X-00176Y-01393* +X-00177Y-01394* +X-00178Y-01395* +X-00179Y-01396* +X-0018Y-01397* +X-00181Y-01399* +X-00181Y-014* +X-00182Y-01401* +X-00182Y-01402* +X-00182Y-01404* +X-00183Y-01405* +X-00183Y-01407* +X-00183Y-01408* +X-00183Y-01409* +X-00183Y-01411* +X-00182Y-01412* +X-00182Y-01413* +X-00182Y-01415* +X-00181Y-01416* +X-00181Y-01417* +X-0018Y-01419* +X-00179Y-0142* +X-00178Y-01421* +X-00177Y-01422* +X-00176Y-01423* +X-00175Y-01424* +X-00174Y-01425* +X-00173Y-01425* +X-00172Y-01426* +X-0017Y-01427* +X-00169Y-01427* +X-00168Y-01427* +X-00166Y-01428* +X-00165Y-01428* +X-00164Y-01428* +X-00162* +X-00161Y-01428* +X-00159Y-01428* +X-00158Y-01427* +X-00157Y-01427* +X-00155Y-01427* +X-00154Y-01426* +X-00153Y-01425* +X-00152Y-01425* +X-00151Y-01424* +X-0015Y-01423* +X-00149Y-01422* +X-00148Y-01421* +X-00147Y-0142* +X-00146Y-01419* +X-00145Y-01417* +X-00145Y-01416* +X-00144Y-01415* +X-00144Y-01413* +X-00143Y-01412* +X-00143Y-01411* +X-00143Y-01409* +X-00143Y-01408* +M02* \ No newline at end of file diff --git a/hardware/gerber/unisolder52_front.gg1 b/hardware/gerber/unisolder52_front.gg1 new file mode 100644 index 0000000..e39daf6 --- /dev/null +++ b/hardware/gerber/unisolder52_front.gg1 @@ -0,0 +1,1398 @@ +%FSTAX23Y23*% +%MOIN*% +%SFA1B1*% + +%IPPOS*% +%ADD120C,0.005000*% +%LNunisolder52_front-1*% +%LPD*% +G54D120* +X-00045Y-01365D02* +X-00017D01* +X-00031Y-01379D02* +Y-01351D01* +X-00076Y-01451D02* +X-00049D01* +X-00062Y-01465D02* +Y-01437D01* +X00017Y-01365D02* +X00045D01* +X00031Y-01379D02* +Y-01351D01* +X00049Y-01451D02* +X00076D01* +X00062Y-01465D02* +Y-01437D01* +X00118Y-01408D02* +X00208D01* +X00163Y-01453D02* +Y-01363D01* +X-00208Y-01408D02* +X-00118D01* +X-00163Y-01453D02* +Y-01363D01* +X-00014Y-01451D02* +X00014D01* +X0Y-01465D02* +Y-01437D01* +X00643Y-00737D02* +X00682D01* +X00662Y-00757D02* +Y-00717D01* +X00643Y-0056D02* +X00682D01* +X00662Y-0058D02* +Y-0054D01* +X00387Y-0056D02* +X00426D01* +X00407Y-0058D02* +Y-0054D01* +X00387Y-00737D02* +X00426D01* +X00407Y-00757D02* +Y-00717D01* +X00193Y00261D02* +X00228D01* +X00211Y00243D02* +Y00278D01* +X00193Y00161D02* +X00228D01* +X00211Y00143D02* +Y00178D01* +X00193Y00061D02* +X00228D01* +X00211Y00043D02* +Y00078D01* +X00193Y-00039D02* +X00228D01* +X00211Y-00056D02* +Y-00021D01* +X00193Y-00139D02* +X00228D01* +X00211Y-00156D02* +Y-00121D01* +X00393Y00261D02* +X00428D01* +X00411Y00243D02* +Y00278D01* +X00393Y00161D02* +X00428D01* +X00411Y00143D02* +Y00178D01* +X00393Y00061D02* +X00428D01* +X00411Y00043D02* +Y00078D01* +X00393Y-00039D02* +X00428D01* +X00411Y-00056D02* +Y-00021D01* +X00393Y-00139D02* +X00428D01* +X00411Y-00156D02* +Y-00121D01* +X01373Y-00283D02* +X01428D01* +X014Y-0031D02* +Y-00255D01* +X01373Y-00066D02* +X01428D01* +X014Y-00094D02* +Y-00039D01* +X01207Y-00066D02* +X01262D01* +X01235Y-00094D02* +Y-00039D01* +X01207Y-00283D02* +X01262D01* +X01235Y-0031D02* +Y-00255D01* +X-01517Y-00816D02* +X-01482D01* +X-015Y-00833D02* +Y-00798D01* +X-01517Y-00716D02* +X-01482D01* +X-015Y-00733D02* +Y-00698D01* +X-01517Y-00616D02* +X-01482D01* +X-015Y-00633D02* +Y-00598D01* +X-01517Y-00516D02* +X-01482D01* +X-015Y-00533D02* +Y-00498D01* +X-01517Y-00416D02* +X-01482D01* +X-015Y-00433D02* +Y-00398D01* +X-00642Y-00393D02* +X-0061D01* +X-00626Y-00408D02* +Y-00377D01* +X-00834Y-00393D02* +X-00802D01* +X-00818Y-00408D02* +Y-00377D01* +X00488Y00851D02* +X00523D01* +X00506Y00833D02* +Y00868D01* +X00488Y00751D02* +X00523D01* +X00506Y00733D02* +Y00768D01* +X00588Y00851D02* +X00623D01* +X00606Y00833D02* +Y00868D01* +X00588Y00751D02* +X00623D01* +X00606Y00733D02* +Y00768D01* +X00688Y00851D02* +X00723D01* +X00706Y00833D02* +Y00868D01* +X00688Y00751D02* +X00723D01* +X00706Y00733D02* +Y00768D01* +X00788Y00851D02* +X00823D01* +X00806Y00833D02* +Y00868D01* +X00788Y00751D02* +X00823D01* +X00806Y00733D02* +Y00768D01* +X00888Y00851D02* +X00923D01* +X00906Y00833D02* +Y00868D01* +X00888Y00751D02* +X00923D01* +X00906Y00733D02* +Y00768D01* +X-00742Y-00945D02* +X-00707D01* +X-00725Y-00963D02* +Y-00928D01* +X-00923Y-01126D02* +X-00888D01* +X-00906Y-01144D02* +Y-01109D01* +X-01313Y-00875D02* +X-01176D01* +X-01245Y-00943D02* +Y-00806D01* +X-00068Y00875D02* +X00068D01* +X0Y00806D02* +Y00943D01* +X01176Y-00875D02* +X01313D01* +X01245Y-00943D02* +Y-00806D01* +X-00428Y00261D02* +X-00393D01* +X-00411Y00243D02* +Y00278D01* +X-00428Y00161D02* +X-00393D01* +X-00411Y00143D02* +Y00178D01* +X-00428Y00061D02* +X-00393D01* +X-00411Y00043D02* +Y00078D01* +X-00428Y-00039D02* +X-00393D01* +X-00411Y-00056D02* +Y-00021D01* +X-00428Y-00139D02* +X-00393D01* +X-00411Y-00156D02* +Y-00121D01* +X-00228Y00261D02* +X-00193D01* +X-00211Y00243D02* +Y00278D01* +X-00228Y00161D02* +X-00193D01* +X-00211Y00143D02* +Y00178D01* +X-00228Y00061D02* +X-00193D01* +X-00211Y00043D02* +Y00078D01* +X-00228Y-00039D02* +X-00193D01* +X-00211Y-00056D02* +Y-00021D01* +X-00228Y-00139D02* +X-00193D01* +X-00211Y-00156D02* +Y-00121D01* +X00082Y-00139D02* +X00117D01* +X001Y-00156D02* +Y-00121D01* +X00082Y-00039D02* +X00117D01* +X001Y-00056D02* +Y-00021D01* +X00082Y00061D02* +X00117D01* +X001Y00043D02* +Y00078D01* +X00082Y00161D02* +X00117D01* +X001Y00143D02* +Y00178D01* +X00082Y00261D02* +X00117D01* +X001Y00243D02* +Y00278D01* +X-00117Y-00139D02* +X-00082D01* +X-001Y-00156D02* +Y-00121D01* +X-00117Y-00039D02* +X-00082D01* +X-001Y-00056D02* +Y-00021D01* +X-00117Y00061D02* +X-00082D01* +X-001Y00043D02* +Y00078D01* +X-00117Y00161D02* +X-00082D01* +X-001Y00143D02* +Y00178D01* +X-00117Y00261D02* +X-00082D01* +X-001Y00243D02* +Y00278D01* +X-00426Y-00737D02* +X-00387D01* +X-00407Y-00757D02* +Y-00717D01* +X-00426Y-0056D02* +X-00387D01* +X-00407Y-0058D02* +Y-0054D01* +X-00682Y-0056D02* +X-00643D01* +X-00662Y-0058D02* +Y-0054D01* +X-00682Y-00737D02* +X-00643D01* +X-00662Y-00757D02* +Y-00717D01* +X00108Y-00737D02* +X00147D01* +X00127Y-00757D02* +Y-00717D01* +X00108Y-0056D02* +X00147D01* +X00127Y-0058D02* +Y-0054D01* +X-00147Y-0056D02* +X-00108D01* +X-00127Y-0058D02* +Y-0054D01* +X-00147Y-00737D02* +X-00108D01* +X-00127Y-00757D02* +Y-00717D01* +X01403Y00636D02* +X01431D01* +X01417Y00622D02* +Y0065D01* +X01406Y00707D02* +X01434D01* +X0142Y00693D02* +Y00721D01* +X01257Y00834D02* +X01285D01* +X01271Y0082D02* +Y00848D01* +X01163Y00827D02* +X01191D01* +X01177Y00813D02* +Y00841D01* +X01102Y00822D02* +X0113D01* +X01116Y00808D02* +Y00836D01* +X-01324Y-00513D02* +X-01296D01* +X-0131Y-00527D02* +Y-00499D01* +X01155Y00002D02* +X01183D01* +X01169Y-00011D02* +Y00016D01* +X-00659Y00827D02* +X-00631D01* +X-00645Y00813D02* +Y00841D01* +X-00938Y00726D02* +X-0091D01* +X-00924Y00712D02* +Y0074D01* +X00571Y-00487D02* +X00599D01* +X00585Y-00501D02* +Y-00473D01* +X00425Y00886D02* +X00453D01* +X00439Y00872D02* +Y009D01* +X00742Y-01141D02* +X0077D01* +X00756Y-01155D02* +Y-01127D01* +X00913Y-00956D02* +X00941D01* +X00927Y-0097D02* +Y-00942D01* +X00608Y-01088D02* +X00636D01* +X00622Y-01102D02* +Y-01074D01* +X00989Y-01159D02* +X01017D01* +X01003Y-01173D02* +Y-01145D01* +X01318Y-00689D02* +X01346D01* +X01332Y-00703D02* +Y-00675D01* +X00982Y-00707D02* +X0101D01* +X00996Y-00721D02* +Y-00693D01* +X01049Y-0038D02* +X01077D01* +X01063Y-00394D02* +Y-00366D01* +X01042Y-00595D02* +X0107D01* +X01056Y-00609D02* +Y-00581D01* +X01068Y-00473D02* +X01096D01* +X01082Y-00487D02* +Y-00459D01* +X01052Y-00819D02* +X0108D01* +X01066Y-00833D02* +Y-00805D01* +X00283Y00739D02* +X00311D01* +X00297Y00725D02* +Y00753D01* +X00947Y00718D02* +X00975D01* +X00961Y00704D02* +Y00732D01* +X00616Y-0005D02* +X00644D01* +X0063Y-00064D02* +Y-00036D01* +X-01185Y00517D02* +X-01157D01* +X-01171Y00503D02* +Y00531D01* +X-00995Y00744D02* +X-00967D01* +X-00981Y0073D02* +Y00758D01* +X-0027Y00873D02* +X-00242D01* +X-00256Y00859D02* +Y00887D01* +X00127Y00496D02* +X00155D01* +X00141Y00482D02* +Y0051D01* +X00325Y00645D02* +X00353D01* +X00339Y00631D02* +Y00659D01* +X00525Y00282D02* +X00553D01* +X00539Y00268D02* +Y00296D01* +X00523Y00456D02* +X00551D01* +X00537Y00442D02* +Y0047D01* +X0018Y00529D02* +X00208D01* +X00194Y00515D02* +Y00543D01* +X00265Y00588D02* +X00293D01* +X00279Y00574D02* +Y00602D01* +X00268Y00436D02* +X00296D01* +X00282Y00422D02* +Y0045D01* +X00212Y00588D02* +X0024D01* +X00226Y00574D02* +Y00602D01* +X-00284Y00501D02* +X-00256D01* +X-0027Y00487D02* +Y00515D01* +X-00982Y00828D02* +X-00954D01* +X-00968Y00814D02* +Y00842D01* +X-01097Y00826D02* +X-01069D01* +X-01083Y00812D02* +Y0084D01* +X00212Y00876D02* +X0024D01* +X00226Y00862D02* +Y0089D01* +X-01148Y00625D02* +X-0112D01* +X-01134Y00611D02* +Y00639D01* +X-01201Y0096D02* +X-01173D01* +X-01187Y00946D02* +Y00974D01* +X-0119Y00791D02* +X-01162D01* +X-01176Y00777D02* +Y00805D01* +X-01317Y00744D02* +X-01289D01* +X-01303Y0073D02* +Y00758D01* +X-01469Y00511D02* +X-01441D01* +X-01455Y00497D02* +Y00525D01* +X-01544Y00657D02* +X-01516D01* +X-0153Y00643D02* +Y00671D01* +X-00333Y00692D02* +X-00305D01* +X-00319Y00678D02* +Y00706D01* +X-002Y00508D02* +X-00172D01* +X-00186Y00494D02* +Y00522D01* +X-00175Y00958D02* +X-00147D01* +X-00161Y00944D02* +Y00972D01* +X-01411Y0037D02* +X-01383D01* +X-01397Y00356D02* +Y00384D01* +X-01191Y00333D02* +X-01163D01* +X-01177Y00319D02* +Y00347D01* +X00831Y00596D02* +X00859D01* +X00845Y00582D02* +Y0061D01* +X00522Y00517D02* +X0055D01* +X00536Y00503D02* +Y00531D01* +X01Y00203D02* +X01028D01* +X01014Y00189D02* +Y00217D01* +X00574Y00215D02* +X00602D01* +X00588Y00201D02* +Y00229D01* +X00391Y00369D02* +X00419D01* +X00405Y00355D02* +Y00383D01* +X00778Y00454D02* +X00806D01* +X00792Y0044D02* +Y00468D01* +X00842Y00408D02* +X0087D01* +X00856Y00394D02* +Y00422D01* +X01057Y00617D02* +X01085D01* +X01071Y00603D02* +Y00631D01* +X01135Y00653D02* +X01163D01* +X01149Y00639D02* +Y00667D01* +X-01016Y00384D02* +X-00988D01* +X-01002Y0037D02* +Y00398D01* +X-01068Y00201D02* +X-0104D01* +X-01054Y00187D02* +Y00215D01* +X-00951Y00201D02* +X-00923D01* +X-00937Y00187D02* +Y00215D01* +X0134Y00358D02* +X01368D01* +X01354Y00344D02* +Y00372D01* +X00739Y-01006D02* +X00767D01* +X00753Y-0102D02* +Y-00992D01* +X01433Y0088D02* +X01461D01* +X01447Y00866D02* +Y00894D01* +X00762Y00038D02* +X0079D01* +X00776Y00024D02* +Y00052D01* +X00571Y00156D02* +X00599D01* +X00585Y00142D02* +Y0017D01* +X-01451Y-0054D02* +X-01423D01* +X-01437Y-00554D02* +Y-00526D01* +X-01293Y-00293D02* +X-01265D01* +X-01279Y-00307D02* +Y-00279D01* +X-01363Y-00249D02* +X-01335D01* +X-01349Y-00263D02* +Y-00235D01* +X-00817Y00533D02* +X-00789D01* +X-00803Y00519D02* +Y00547D01* +X00391Y00665D02* +X00419D01* +X00405Y00651D02* +Y00679D01* +X-00441Y00618D02* +X-00413D01* +X-00427Y00604D02* +Y00632D01* +X-00939Y-00563D02* +X-00911D01* +X-00925Y-00577D02* +Y-00549D01* +X-00883Y-00589D02* +X-00855D01* +X-00869Y-00603D02* +Y-00575D01* +X-01126Y-00523D02* +X-01098D01* +X-01112Y-00537D02* +Y-00509D01* +X-01108Y-00602D02* +X-0108D01* +X-01094Y-00616D02* +Y-00588D01* +X-00456Y-00495D02* +X-00428D01* +X-00442Y-00509D02* +Y-00481D01* +X00604Y-00621D02* +X00632D01* +X00618Y-00635D02* +Y-00607D01* +X-00066Y-00495D02* +X-00038D01* +X-00052Y-00509D02* +Y-00481D01* +X01244Y00204D02* +X01272D01* +X01258Y0019D02* +Y00218D01* +X00609Y00599D02* +X00637D01* +X00623Y00585D02* +Y00613D01* +X01046Y00558D02* +X01074D01* +X0106Y00544D02* +Y00572D01* +X01403Y00209D02* +X01431D01* +X01417Y00195D02* +Y00223D01* +X0118Y00204D02* +X01208D01* +X01194Y0019D02* +Y00218D01* +X-00938Y00462D02* +X-0091D01* +X-00924Y00448D02* +Y00476D01* +X-01072Y00914D02* +X-01044D01* +X-01058Y009D02* +Y00928D01* +X00067Y-00277D02* +X00095D01* +X00081Y-00291D02* +Y-00263D01* +X00018Y-00321D02* +X00046D01* +X00032Y-00335D02* +Y-00307D01* +X-00176Y-00298D02* +X-00148D01* +X-00162Y-00312D02* +Y-00284D01* +X00187Y-00789D02* +X00215D01* +X00201Y-00803D02* +Y-00775D01* +X00349Y-00674D02* +X00377D01* +X00363Y-00688D02* +Y-0066D01* +X00726Y-00329D02* +X00754D01* +X0074Y-00343D02* +Y-00315D01* +X00718Y-00141D02* +X00746D01* +X00732Y-00155D02* +Y-00127D01* +X006Y00056D02* +X00628D01* +X00614Y00042D02* +Y0007D01* +X01461Y-00321D02* +X01489D01* +X01475Y-00335D02* +Y-00307D01* +X01413Y-0053D02* +X01441D01* +X01427Y-00544D02* +Y-00516D01* +X01487Y-00829D02* +X01515D01* +X01501Y-00843D02* +Y-00815D01* +X01511Y-00587D02* +X01539D01* +X01525Y-00601D02* +Y-00573D01* +X01176Y-00694D02* +X01204D01* +X0119Y-00708D02* +Y-0068D01* +X00801Y-00679D02* +X00829D01* +X00815Y-00693D02* +Y-00665D01* +X01325Y-00423D02* +X01353D01* +X01339Y-00437D02* +Y-00409D01* +X-01208Y-00087D02* +X-0118D01* +X-01194Y-00101D02* +Y-00073D01* +X-01514Y-00901D02* +X-01486D01* +X-015Y-00915D02* +Y-00887D01* +X-01498Y-00988D02* +X-0147D01* +X-01484Y-01002D02* +Y-00974D01* +X-01373Y-00609D02* +X-01345D01* +X-01359Y-00623D02* +Y-00595D01* +X-01133Y-01014D02* +X-01105D01* +X-01119Y-01028D02* +Y-01D01* +X-01089Y-01063D02* +X-01061D01* +X-01075Y-01077D02* +Y-01049D01* +X-01093Y-00733D02* +X-01065D01* +X-01079Y-00747D02* +Y-00719D01* +X-0105Y-0018D02* +X-01022D01* +X-01036Y-00194D02* +Y-00166D01* +X-01122Y-00096D02* +X-01094D01* +X-01108Y-0011D02* +Y-00082D01* +X-01216Y-00394D02* +X-01188D01* +X-01202Y-00408D02* +Y-0038D01* +X-01246Y-00329D02* +X-01218D01* +X-01232Y-00343D02* +Y-00315D01* +X-01219Y-00251D02* +X-01191D01* +X-01205Y-00265D02* +Y-00237D01* +X-01103Y-00277D02* +X-01075D01* +X-01089Y-00291D02* +Y-00263D01* +X-01268Y-00026D02* +X-0124D01* +X-01254Y-0004D02* +Y-00012D01* +X-0129Y-00202D02* +X-01262D01* +X-01276Y-00216D02* +Y-00188D01* +X-01147Y-00164D02* +X-01119D01* +X-01133Y-00178D02* +Y-0015D01* +X-00446Y-00824D02* +X-00418D01* +X-00432Y-00838D02* +Y-0081D01* +X-00513Y-00926D02* +X-00485D01* +X-00499Y-0094D02* +Y-00912D01* +X-00886Y-00462D02* +X-00858D01* +X-00872Y-00476D02* +Y-00448D01* +X-00938Y-00183D02* +X-0091D01* +X-00924Y-00197D02* +Y-00169D01* +X-00791Y-0031D02* +X-00763D01* +X-00777Y-00324D02* +Y-00296D01* +X-00479Y-00294D02* +X-00451D01* +X-00465Y-00308D02* +Y-0028D01* +X-01421Y-00395D02* +X-01393D01* +X-01407Y-00409D02* +Y-00381D01* +X-01459Y00312D02* +X-01431D01* +X-01445Y00298D02* +Y00326D01* +X-01538Y-00088D02* +X-0151D01* +X-01524Y-00102D02* +Y-00074D01* +X-00258Y-00352D02* +X-0023D01* +X-00244Y-00366D02* +Y-00338D01* +X-00257Y-00496D02* +X-00229D01* +X-00243Y-0051D02* +Y-00482D01* +X-00398Y-00449D02* +X-0037D01* +X-00384Y-00463D02* +Y-00435D01* +X-00078Y-00664D02* +X-0005D01* +X-00064Y-00678D02* +Y-0065D01* +X-00653Y-00909D02* +X-00625D01* +X-00639Y-00923D02* +Y-00895D01* +X-00742Y-00831D02* +X-00714D01* +X-00728Y-00845D02* +Y-00817D01* +X-00683Y-01146D02* +X-00655D01* +X-00669Y-0116D02* +Y-01132D01* +X-0075Y-01102D02* +X-00722D01* +X-00736Y-01116D02* +Y-01088D01* +X-00984Y-00661D02* +X-00956D01* +X-0097Y-00675D02* +Y-00647D01* +X-01289Y-0057D02* +X-01261D01* +X-01275Y-00584D02* +Y-00556D01* +X0046Y-00784D02* +X00488D01* +X00474Y-00798D02* +Y-0077D01* +X00025Y-00757D02* +X00053D01* +X00039Y-00771D02* +Y-00743D01* +X00874Y-01001D02* +X00902D01* +X00888Y-01015D02* +Y-00987D01* +X-00529Y00651D02* +X-00501D01* +X-00515Y00637D02* +Y00665D01* +X00344Y-00002D02* +X00372D01* +X00358Y-00016D02* +Y00012D01* +X00183Y00681D02* +X00211D01* +X00197Y00667D02* +Y00695D01* +X-00306Y-0027D02* +X-00278D01* +X-00292Y-00284D02* +Y-00256D01* +X00141Y00958D02* +X00169D01* +X00155Y00944D02* +Y00972D01* +X00278Y-00499D02* +X00306D01* +X00292Y-00513D02* +Y-00485D01* +X-00061Y-00089D02* +X-00033D01* +X-00047Y-00103D02* +Y-00075D01* +X-00901Y-00879D02* +X-00873D01* +X-00887Y-00893D02* +Y-00865D01* +X00586Y-00782D02* +X00614D01* +X006Y-00796D02* +Y-00768D01* +X00508Y00958D02* +X00536D01* +X00522Y00944D02* +Y00972D01* +X00389Y-01053D02* +X00417D01* +X00403Y-01067D02* +Y-01039D01* +X01415Y-00945D02* +X01443D01* +X01429Y-00959D02* +Y-00931D01* +X-01424Y00917D02* +X-01396D01* +X-0141Y00903D02* +Y00931D01* +X-00759Y00539D02* +X-00731D01* +X-00745Y00525D02* +Y00553D01* +X00447Y-00677D02* +X00475D01* +X00461Y-00691D02* +Y-00663D01* +X01098Y-01012D02* +X01126D01* +X01112Y-01026D02* +Y-00998D01* +X00548Y-01234D02* +X00576D01* +X00562Y-01248D02* +Y-0122D01* +X00967Y-01251D02* +X00995D01* +X00981Y-01265D02* +Y-01237D01* +X00764Y-01251D02* +X00792D01* +X00778Y-01265D02* +Y-01237D01* +X-00485Y-01249D02* +X-00457D01* +X-00471Y-01263D02* +Y-01235D01* +X-01423Y-00976D02* +X-01395D01* +X-01409Y-0099D02* +Y-00962D01* +X-0118Y-01237D02* +X-01152D01* +X-01166Y-01251D02* +Y-01223D01* +X-01435Y-01248D02* +X-01407D01* +X-01421Y-01262D02* +Y-01234D01* +X-01539Y-0116D02* +X-01511D01* +X-01525Y-01174D02* +Y-01146D01* +X-01043Y-01119D02* +X-01015D01* +X-01029Y-01133D02* +Y-01105D01* +X-01224Y-01112D02* +X-01196D01* +X-0121Y-01126D02* +Y-01098D01* +X-0058Y-00458D02* +X-00552D01* +X-00566Y-00472D02* +Y-00444D01* +X-01372Y-00717D02* +X-01344D01* +X-01358Y-00731D02* +Y-00703D01* +X-01041Y-00866D02* +X-01013D01* +X-01027Y-0088D02* +Y-00852D01* +X-00947Y-0124D02* +X-00919D01* +X-00933Y-01254D02* +Y-01226D01* +X-00403Y-00247D02* +X-00375D01* +X-00389Y-00261D02* +Y-00233D01* +X-01417Y00192D02* +X-01389D01* +X-01403Y00178D02* +Y00206D01* +X-00898Y-00803D02* +X-0087D01* +X-00884Y-00817D02* +Y-00789D01* +X-01022Y-00997D02* +X-00994D01* +X-01008Y-01011D02* +Y-00983D01* +X-00718Y-01244D02* +X-0069D01* +X-00704Y-01258D02* +Y-0123D01* +X00624Y-00232D02* +X00652D01* +X00638Y-00246D02* +Y-00218D01* +X-00372Y-0009D02* +X-00344D01* +X-00358Y-00104D02* +Y-00076D01* +X-00777Y-0013D02* +X-00749D01* +X-00763Y-00144D02* +Y-00116D01* +X-00522Y-00696D02* +X-00494D01* +X-00508Y-0071D02* +Y-00682D01* +X-00991Y00595D02* +X-00963D01* +X-00977Y00581D02* +Y00609D01* +X00808Y-00541D02* +X00836D01* +X00822Y-00555D02* +Y-00527D01* +X00448Y-00492D02* +X00476D01* +X00462Y-00506D02* +Y-00478D01* +X-01483Y-00184D02* +X-01455D01* +X-01469Y-00198D02* +Y-0017D01* +X0141Y00048D02* +X01438D01* +X01424Y00034D02* +Y00062D01* +X01031Y-00288D02* +X01059D01* +X01045Y-00302D02* +Y-00274D01* +X01392Y-00176D02* +X0142D01* +X01406Y-0019D02* +Y-00162D01* +X00341Y00091D02* +X00369D01* +X00355Y00077D02* +Y00105D01* +X00292Y-00132D02* +X0032D01* +X00306Y-00146D02* +Y-00118D01* +X00876Y-0007D02* +X00904D01* +X0089Y-00084D02* +Y-00056D01* +X01031Y-00018D02* +X01059D01* +X01045Y-00032D02* +Y-00004D01* +X01291Y-00122D02* +X01319D01* +X01305Y-00136D02* +Y-00108D01* +X01497Y-00167D02* +X01525D01* +X01511Y-00181D02* +Y-00153D01* +X00863Y-00231D02* +X00891D01* +X00877Y-00245D02* +Y-00217D01* +X00486Y-00166D02* +X00514D01* +X005Y-0018D02* +Y-00152D01* +X00463Y-00243D02* +X00491D01* +X00477Y-00257D02* +Y-00229D01* +X00313Y-00292D02* +X00341D01* +X00327Y-00306D02* +Y-00278D01* +X00314Y-00227D02* +X00342D01* +X00328Y-00241D02* +Y-00213D01* +X00271Y-00353D02* +X00299D01* +X00285Y-00367D02* +Y-00339D01* +X-00105Y-00313D02* +X-00077D01* +X-00091Y-00327D02* +Y-00299D01* +X00045Y-00417D02* +X00073D01* +X00059Y-00431D02* +Y-00403D01* +X-00048Y-00245D02* +X-0002D01* +X-00034Y-00259D02* +Y-00231D01* +X00018Y-01284D02* +X00046D01* +X00032Y-01298D02* +Y-0127D01* +X00061Y-01162D02* +X00089D01* +X00075Y-01176D02* +Y-01148D01* +X00115Y-01162D02* +X00143D01* +X00129Y-01176D02* +Y-01148D01* +X-00122Y-01259D02* +X-00094D01* +X-00108Y-01273D02* +Y-01245D01* +X-00082Y-01151D02* +X-00054D01* +X-00068Y-01165D02* +Y-01137D01* +X-00106Y-01507D02* +X-00078D01* +X-00092Y-01521D02* +Y-01493D01* +X-00063Y-00757D02* +X-00035D01* +X-00049Y-00771D02* +Y-00743D01* +X-0022Y-00807D02* +X-00192D01* +X-00206Y-00821D02* +Y-00793D01* +X-00773Y-00731D02* +X-00745D01* +X-00759Y-00745D02* +Y-00717D01* +X-00776Y-00503D02* +X-00748D01* +X-00762Y-00517D02* +Y-00489D01* +X-00597Y-00621D02* +X-00569D01* +X-00583Y-00635D02* +Y-00607D01* +X-00469Y-01123D02* +X-00441D01* +X-00455Y-01137D02* +Y-01109D01* +X-00265Y-00976D02* +X-00237D01* +X-00251Y-0099D02* +Y-00962D01* +X-00268Y-01157D02* +X-0024D01* +X-00254Y-01171D02* +Y-01143D01* +X00049Y-00663D02* +X00077D01* +X00063Y-00677D02* +Y-00649D01* +X00678Y-00419D02* +X00706D01* +X00692Y-00433D02* +Y-00405D01* +X-00618Y-00797D02* +X-0059D01* +X-00604Y-00811D02* +Y-00783D01* +X-0113Y00448D02* +X-01102D01* +X-01116Y00434D02* +Y00462D01* +X01337Y00862D02* +X01365D01* +X01351Y00848D02* +Y00876D01* +X00887Y00338D02* +X00915D01* +X00901Y00324D02* +Y00352D01* +X00955Y00392D02* +X00983D01* +X00969Y00378D02* +Y00406D01* +X01295Y00621D02* +X01323D01* +X01309Y00607D02* +Y00635D01* +X01396Y00577D02* +X01424D01* +X0141Y00563D02* +Y00591D01* +X0134Y00418D02* +X01368D01* +X01354Y00404D02* +Y00432D01* +X01443Y00508D02* +X01471D01* +X01457Y00494D02* +Y00522D01* +X01003Y00101D02* +X01031D01* +X01017Y00087D02* +Y00115D01* +X0108Y00411D02* +X01108D01* +X01094Y00397D02* +Y00425D01* +X01248Y00407D02* +X01276D01* +X01262Y00393D02* +Y00421D01* +X01236Y00621D02* +X01264D01* +X0125Y00607D02* +Y00635D01* +X01165Y00425D02* +X01193D01* +X01179Y00411D02* +Y00439D01* +X01202Y00337D02* +X0123D01* +X01216Y00323D02* +Y00351D01* +X-01302Y-00076D02* +X-01274D01* +X-01288Y-0009D02* +Y-00062D01* +X-01367Y-00125D02* +X-01339D01* +X-01353Y-00139D02* +Y-00111D01* +X-01184Y00113D02* +X-01156D01* +X-0117Y00099D02* +Y00127D01* +X-00784Y00381D02* +X-00756D01* +X-0077Y00367D02* +Y00395D01* +X-01288Y00406D02* +X-0126D01* +X-01274Y00392D02* +Y0042D01* +X003Y-00926D02* +X00328D01* +X00314Y-0094D02* +Y-00912D01* +X00953Y-01002D02* +X00981D01* +X00967Y-01016D02* +Y-00988D01* +X0061Y-01027D02* +X00638D01* +X00624Y-01041D02* +Y-01013D01* +X00447Y-01002D02* +X00475D01* +X00461Y-01016D02* +Y-00988D01* +X00488Y-00918D02* +X00516D01* +X00502Y-00932D02* +Y-00904D01* +X00379Y-012D02* +X00407D01* +X00393Y-01214D02* +Y-01186D01* +X01167Y-0123D02* +X01195D01* +X01181Y-01244D02* +Y-01216D01* +X01396Y-01234D02* +X01424D01* +X0141Y-01248D02* +Y-0122D01* +X01157Y-00126D02* +X01185D01* +X01171Y-0014D02* +Y-00112D01* +X-00142Y00576D02* +X-00114D01* +X-00128Y00562D02* +Y0059D01* +X-00879Y00461D02* +X-00851D01* +X-00865Y00447D02* +Y00475D01* +X-00913Y00384D02* +X-00885D01* +X-00899Y0037D02* +Y00398D01* +X-00623Y00623D02* +X-00595D01* +X-00609Y00609D02* +Y00637D01* +X00301Y-00846D02* +X00329D01* +X00315Y-0086D02* +Y-00832D01* +X00254Y-0081D02* +X00282D01* +X00268Y-00824D02* +Y-00796D01* +X00675Y0032D02* +X00703D01* +X00689Y00306D02* +Y00334D01* +X00732Y00801D02* +X0076D01* +X00746Y00787D02* +Y00815D01* +X00652Y00801D02* +X0068D01* +X00666Y00787D02* +Y00815D01* +X00972Y00956D02* +X01D01* +X00986Y00942D02* +Y0097D01* +X00671Y00603D02* +X00699D01* +X00685Y00589D02* +Y00617D01* +X0073Y00603D02* +X00758D01* +X00744Y00589D02* +Y00617D01* +X-01435Y-01079D02* +X-01407D01* +X-01421Y-01093D02* +Y-01065D01* +X00229Y-01104D02* +X00257D01* +X00243Y-01118D02* +Y-0109D01* +X00217Y-01308D02* +X00245D01* +X00231Y-01322D02* +Y-01294D01* +X00077Y-01507D02* +X00105D01* +X00091Y-01521D02* +Y-01493D01* +X00166Y-00499D02* +X00194D01* +X0018Y-00513D02* +Y-00485D01* +X-0042Y00508D02* +X-00392D01* +X-00406Y00494D02* +Y00522D01* +X-0034D02* +X-00312D01* +X-00326Y00508D02* +Y00536D01* +X-00069Y00495D02* +X-00041D01* +X-00055Y00481D02* +Y00509D01* +X-00431Y00827D02* +X-00403D01* +X-00417Y00813D02* +Y00841D01* +X-00489Y00802D02* +X-00461D01* +X-00475Y00788D02* +Y00816D01* +X-00835Y00666D02* +X-00807D01* +X-00821Y00652D02* +Y0068D01* +X0097Y-00155D02* +X00998D01* +X00984Y-00169D02* +Y-00141D01* +X00341Y00191D02* +X00369D01* +X00355Y00177D02* +Y00205D01* +X00333Y00285D02* +X00361D01* +X00347Y00271D02* +Y00299D01* +M02* \ No newline at end of file diff --git a/hardware/gerber/unisolder52_front.gko b/hardware/gerber/unisolder52_front.gko new file mode 100644 index 0000000..688a413 --- /dev/null +++ b/hardware/gerber/unisolder52_front.gko @@ -0,0 +1,29 @@ +%FSTAX23Y23*% +%MOIN*% +%SFA1B1*% + +%IPPOS*% +%ADD73C,0.007870*% +%LNunisolder52_front-1*% +%LPD*% +G54D73* +X-01574Y-01299D02* +Y01D01* +X01574* +Y-01299D02* +Y01D01* +X00314Y-01299D02* +X01574D01* +X00236Y-01377D02* +X00314Y-01299D01* +X00236Y-01555D02* +Y-01377D01* +X-00236Y-01555D02* +X00236D01* +X-00236D02* +Y-01377D01* +X-00314Y-01299D02* +X-00236Y-01377D01* +X-01574Y-01299D02* +X-00314D01* +M02* \ No newline at end of file diff --git a/hardware/gerber/unisolder52_front.gtl b/hardware/gerber/unisolder52_front.gtl new file mode 100644 index 0000000..14d6e16 --- /dev/null +++ b/hardware/gerber/unisolder52_front.gtl @@ -0,0 +1,11560 @@ +%FSTAX23Y23*% +%MOIN*% +%SFA1B1*% + +%IPPOS*% +%AMD12* +4,1,8,0.039400,-0.020500,0.039400,0.020500,0.034200,0.025600,-0.034200,0.025600,-0.039400,0.020500,-0.039400,-0.020500,-0.034200,-0.025600,0.034200,-0.025600,0.039400,-0.020500,0.0* +1,1,0.010240,0.034200,-0.020500* +1,1,0.010240,0.034200,0.020500* +1,1,0.010240,-0.034200,0.020500* +1,1,0.010240,-0.034200,-0.020500* +% +%AMD13* +4,1,8,0.039400,-0.031500,0.039400,0.031500,0.031500,0.039400,-0.031500,0.039400,-0.039400,0.031500,-0.039400,-0.031500,-0.031500,-0.039400,0.031500,-0.039400,0.039400,-0.031500,0.0* +1,1,0.015740,0.031500,-0.031500* +1,1,0.015740,0.031500,0.031500* +1,1,0.015740,-0.031500,0.031500* +1,1,0.015740,-0.031500,-0.031500* +% +%AMD14* +4,1,4,-0.017000,0.025000,-0.025000,0.017000,0.017000,-0.025000,0.025000,-0.017000,-0.017000,0.025000,0.0* +1,1,0.011420,-0.021000,0.021000* +1,1,0.011420,0.021000,-0.021000* +% +%AMD15* +4,1,4,0.025000,0.017000,0.017000,0.025000,-0.025000,-0.017000,-0.017000,-0.025000,0.025000,0.017000,0.0* +1,1,0.011420,0.021000,0.021000* +1,1,0.011420,-0.021000,-0.021000* +% +%AMD16* +4,1,8,0.053100,-0.048400,0.053100,0.048400,0.042500,0.059100,-0.042500,0.059100,-0.053100,0.048400,-0.053100,-0.048400,-0.042500,-0.059100,0.042500,-0.059100,0.053100,-0.048400,0.0* +1,1,0.021260,0.042500,-0.048400* +1,1,0.021260,0.042500,0.048400* +1,1,0.021260,-0.042500,0.048400* +1,1,0.021260,-0.042500,-0.048400* +% +%AMD17* +4,1,8,0.010200,0.021700,-0.010200,0.021700,-0.012800,0.019100,-0.012800,-0.019100,-0.010200,-0.021700,0.010200,-0.021700,0.012800,-0.019100,0.012800,0.019100,0.010200,0.021700,0.0* +1,1,0.005120,0.010200,0.019100* +1,1,0.005120,-0.010200,0.019100* +1,1,0.005120,-0.010200,-0.019100* +1,1,0.005120,0.010200,-0.019100* +% +%AMD18* +4,1,8,0.025600,-0.008300,0.025600,0.008300,0.022000,0.011800,-0.022000,0.011800,-0.025600,0.008300,-0.025600,-0.008300,-0.022000,-0.011800,0.022000,-0.011800,0.025600,-0.008300,0.0* +1,1,0.007080,0.022000,-0.008300* +1,1,0.007080,0.022000,0.008300* +1,1,0.007080,-0.022000,0.008300* +1,1,0.007080,-0.022000,-0.008300* +% +%AMD21* +4,1,8,-0.008300,-0.037400,0.008300,-0.037400,0.011800,-0.033900,0.011800,0.033900,0.008300,0.037400,-0.008300,0.037400,-0.011800,0.033900,-0.011800,-0.033900,-0.008300,-0.037400,0.0* +1,1,0.007080,-0.008300,-0.033900* +1,1,0.007080,0.008300,-0.033900* +1,1,0.007080,0.008300,0.033900* +1,1,0.007080,-0.008300,0.033900* +% +%AMD23* +4,1,8,-0.024600,0.026100,-0.024600,-0.026100,-0.017200,-0.033500,0.017200,-0.033500,0.024600,-0.026100,0.024600,0.026100,0.017200,0.033500,-0.017200,0.033500,-0.024600,0.026100,0.0* +1,1,0.014760,-0.017200,0.026100* +1,1,0.014760,-0.017200,-0.026100* +1,1,0.014760,0.017200,-0.026100* +1,1,0.014760,0.017200,0.026100* +% +%AMD25* +4,1,8,-0.035400,0.056300,-0.035400,-0.056300,-0.024800,-0.066900,0.024800,-0.066900,0.035400,-0.056300,0.035400,0.056300,0.024800,0.066900,-0.024800,0.066900,-0.035400,0.056300,0.0* +1,1,0.021260,-0.024800,0.056300* +1,1,0.021260,-0.024800,-0.056300* +1,1,0.021260,0.024800,-0.056300* +1,1,0.021260,0.024800,0.056300* +% +%AMD26* +4,1,8,0.021800,0.025600,-0.021800,0.025600,-0.029500,0.017900,-0.029500,-0.017900,-0.021800,-0.025600,0.021800,-0.025600,0.029500,-0.017900,0.029500,0.017900,0.021800,0.025600,0.0* +1,1,0.015360,0.021800,0.017900* +1,1,0.015360,-0.021800,0.017900* +1,1,0.015360,-0.021800,-0.017900* +1,1,0.015360,0.021800,-0.017900* +% +%AMD27* +4,1,8,-0.029100,0.020800,-0.029100,-0.020800,-0.020400,-0.029500,0.020400,-0.029500,0.029100,-0.020800,0.029100,0.020800,0.020400,0.029500,-0.020400,0.029500,-0.029100,0.020800,0.0* +1,1,0.017480,-0.020400,0.020800* +1,1,0.017480,-0.020400,-0.020800* +1,1,0.017480,0.020400,-0.020800* +1,1,0.017480,0.020400,0.020800* +% +%AMD28* +4,1,8,-0.025600,0.021800,-0.025600,-0.021800,-0.017900,-0.029500,0.017900,-0.029500,0.025600,-0.021800,0.025600,0.021800,0.017900,0.029500,-0.017900,0.029500,-0.025600,0.021800,0.0* +1,1,0.015360,-0.017900,0.021800* +1,1,0.015360,-0.017900,-0.021800* +1,1,0.015360,0.017900,-0.021800* +1,1,0.015360,0.017900,0.021800* +% +%AMD29* +4,1,8,-0.017100,0.012600,-0.017100,-0.012600,-0.012000,-0.017700,0.012000,-0.017700,0.017100,-0.012600,0.017100,0.012600,0.012000,0.017700,-0.012000,0.017700,-0.017100,0.012600,0.0* +1,1,0.010280,-0.012000,0.012600* +1,1,0.010280,-0.012000,-0.012600* +1,1,0.010280,0.012000,-0.012600* +1,1,0.010280,0.012000,0.012600* +% +%AMD30* +4,1,8,-0.009000,0.016100,-0.009000,-0.016100,-0.008100,-0.017000,0.008100,-0.017000,0.009000,-0.016100,0.009000,0.016100,0.008100,0.017000,-0.008100,0.017000,-0.009000,0.016100,0.0* +1,1,0.001800,-0.008100,0.016100* +1,1,0.001800,-0.008100,-0.016100* +1,1,0.001800,0.008100,-0.016100* +1,1,0.001800,0.008100,0.016100* +% +%AMD31* +4,1,8,-0.012600,-0.017100,0.012600,-0.017100,0.017700,-0.012000,0.017700,0.012000,0.012600,0.017100,-0.012600,0.017100,-0.017700,0.012000,-0.017700,-0.012000,-0.012600,-0.017100,0.0* +1,1,0.010280,-0.012600,-0.012000* +1,1,0.010280,0.012600,-0.012000* +1,1,0.010280,0.012600,0.012000* +1,1,0.010280,-0.012600,0.012000* +% +%AMD32* +4,1,8,0.003200,-0.021000,0.021000,-0.003200,0.021000,0.004000,0.004000,0.021000,-0.003200,0.021000,-0.021000,0.003200,-0.021000,-0.004000,-0.004000,-0.021000,0.003200,-0.021000,0.0* +1,1,0.010280,-0.000400,-0.017400* +1,1,0.010280,0.017400,0.000400* +1,1,0.010280,0.000400,0.017400* +1,1,0.010280,-0.017400,-0.000400* +% +%AMD34* +4,1,8,-0.008300,-0.025600,0.008300,-0.025600,0.011800,-0.022000,0.011800,0.022000,0.008300,0.025600,-0.008300,0.025600,-0.011800,0.022000,-0.011800,-0.022000,-0.008300,-0.025600,0.0* +1,1,0.007080,-0.008300,-0.022000* +1,1,0.007080,0.008300,-0.022000* +1,1,0.007080,0.008300,0.022000* +1,1,0.007080,-0.008300,0.022000* +% +%AMD35* +4,1,8,0.037400,-0.008300,0.037400,0.008300,0.033900,0.011800,-0.033900,0.011800,-0.037400,0.008300,-0.037400,-0.008300,-0.033900,-0.011800,0.033900,-0.011800,0.037400,-0.008300,0.0* +1,1,0.007080,0.033900,-0.008300* +1,1,0.007080,0.033900,0.008300* +1,1,0.007080,-0.033900,0.008300* +1,1,0.007080,-0.033900,-0.008300* +% +%AMD36* +4,1,8,0.033500,0.002700,0.002700,0.033500,-0.008200,0.033500,-0.033500,0.008200,-0.033500,-0.002700,-0.002700,-0.033500,0.008200,-0.033500,0.033500,-0.008200,0.033500,0.002700,0.0* +1,1,0.015360,0.028100,-0.002800* +1,1,0.015360,-0.002800,0.028100* +1,1,0.015360,-0.028100,0.002800* +1,1,0.015360,0.002800,-0.028100* +% +%AMD64* +4,1,8,-0.007500,0.042600,-0.042600,0.007500,-0.042600,-0.007500,-0.007500,-0.042600,0.007500,-0.042600,0.042600,-0.007500,0.042600,0.007500,0.007500,0.042600,-0.007500,0.042600,0.0* +1,1,0.021260,0.000000,0.035100* +1,1,0.021260,-0.035100,0.000000* +1,1,0.021260,0.000000,-0.035100* +1,1,0.021260,0.035100,0.000000* +% +%ADD10O,0.013780X0.066930*% +%ADD11O,0.066930X0.013780*% +G04~CAMADD=12~8~0.0~0.0~511.8~787.4~51.2~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~788.0~512.0* +%ADD12D12*% +G04~CAMADD=13~8~0.0~0.0~787.4~787.4~78.7~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~788.0~788.0* +%ADD13D13*% +G04~CAMADD=14~3~0.0~0.0~114.2~708.7~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~45.0~534.0~534.0* +%ADD14D14*% +G04~CAMADD=15~3~0.0~0.0~114.2~708.7~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~315.0~534.0~534.0* +%ADD15D15*% +G04~CAMADD=16~8~0.0~0.0~1181.1~1063.0~106.3~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~1064.0~1181.0* +%ADD16D16*% +G04~CAMADD=17~8~0.0~0.0~255.9~433.1~25.6~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~255.9~433.1* +%ADD17D17*% +G04~CAMADD=18~8~0.0~0.0~236.2~511.8~35.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~512.0~236.0* +%ADD18D18*% +%ADD19O,0.078740X0.023620*% +%ADD20O,0.086610X0.023620*% +G04~CAMADD=21~8~0.0~0.0~236.2~748.0~35.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~236.0~748.0* +%ADD21D21*% +%ADD22O,0.023620X0.074800*% +G04~CAMADD=23~8~0.0~0.0~669.3~492.1~73.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~492.0~670.0* +%ADD23D23*% +%ADD24O,0.016000X0.066930*% +G04~CAMADD=25~8~0.0~0.0~1338.6~708.7~106.3~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~708.0~1338.0* +%ADD25D25*% +G04~CAMADD=26~8~0.0~0.0~590.6~511.8~76.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~590.6~511.8* +%ADD26D26*% +G04~CAMADD=27~8~0.0~0.0~590.6~582.7~87.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~582.0~590.0* +%ADD27D27*% +G04~CAMADD=28~8~0.0~0.0~590.6~511.8~76.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~512.0~591.0* +%ADD28D28*% +G04~CAMADD=29~8~0.0~0.0~354.3~342.5~51.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~343.0~354.0* +%ADD29D29*% +G04~CAMADD=30~8~0.0~0.0~340.0~180.0~9.0~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~180.0~340.0* +%ADD30D30*% +G04~CAMADD=31~8~0.0~0.0~354.3~342.5~51.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~354.0~343.0* +%ADD31D31*% +G04~CAMADD=32~8~0.0~0.0~354.3~342.5~51.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~225.0~451.0~449.0* +%ADD32D32*% +%ADD33O,0.074800X0.023620*% +G04~CAMADD=34~8~0.0~0.0~236.2~511.8~35.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~236.0~512.0* +%ADD34D34*% +G04~CAMADD=35~8~0.0~0.0~236.2~748.0~35.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~748.0~236.0* +%ADD35D35*% +G04~CAMADD=36~8~0.0~0.0~590.6~511.8~76.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~315.0~716.0~716.0* +%ADD36D36*% +%ADD37C,0.012000*% +%ADD38C,0.022000*% +%ADD39C,0.050000*% +%ADD40C,0.035000*% +%ADD41C,0.020000*% +%ADD42C,0.025000*% +%ADD43C,0.014000*% +%ADD44C,0.015000*% +%ADD45C,0.010000*% +%ADD46C,0.048000*% +%ADD47C,0.032000*% +%ADD48C,0.052000*% +%ADD49C,0.034000*% +%ADD50C,0.023000*% +%ADD51C,0.018000*% +%ADD52C,0.019000*% +%ADD53C,0.030000*% +%ADD54C,0.011000*% +%ADD55C,0.016000*% +%ADD56O,0.043310X0.051180*% +%ADD57O,0.104330X0.196850*% +%ADD58C,0.078740*% +%ADD59C,0.059060*% +%ADD60O,0.078740X0.118110*% +%ADD61R,0.059060X0.059060*% +%ADD62C,0.055120*% +%ADD63R,0.059060X0.059060*% +G04~CAMADD=64~8~0.0~0.0~708.7~708.7~106.3~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~45.0~914.0~913.0* +%ADD64D64*% +%ADD65C,0.070870*% +%ADD66C,0.255900*% +%ADD67C,0.236220*% +%ADD68C,0.050000*% +%LNunisolder52_front-1*% +%LPD*% +G36* +X-00249Y00157D02* +X-00248Y0015D01* +X-00244Y00141* +X-00238Y00133* +X-0023Y00127* +X-00221Y00123* +X-00211Y00122* +X-002Y00123* +X-00191Y00127* +X-00183Y00133* +X-00177Y00141* +X-00173Y0015* +X-00172Y0016* +X-00141Y0019* +X-00132* +X-00129Y00185* +X-00133Y0018* +X-00137Y00171* +X-00137Y00168* +X-00062* +X-00062Y00171* +X-00066Y0018* +X-0007Y00185* +X-00067Y0019* +X00032* +X00061Y00161* +X00061Y00161* +X00062Y0015* +X00066Y00141* +X00072Y00133* +X0008Y00127* +X00089Y00123* +X001Y00122* +X0011Y00123* +X00119Y00127* +X00127Y00133* +X00133Y00141* +X00137Y0015* +X00138Y00161* +X00137Y00169* +X00158Y0019* +X00178* +X00181Y00185* +X00177Y0018* +X00173Y00171* +X00173Y00168* +X00211* +Y00153* +X00173* +X00173Y0015* +X00177Y00141* +X00182Y00134* +X00182Y00132* +X00182Y0013* +X00181Y00128* +X00175Y00124* +X00135Y00084* +X0013Y00084* +X00127Y00088* +X00119Y00094* +X0011Y00098* +X001Y00099* +X00089Y00098* +X0008Y00094* +X00072Y00088* +X00067Y00081* +X-00021* +X-00065Y00125* +X-0007Y00128* +X-0007Y0013* +X-00071Y00133* +X-00071Y00134* +X-00066Y00141* +X-00062Y0015* +X-00062Y00153* +X-00137* +X-00137Y0015* +X-00133Y00141* +X-00128Y00134* +X-00128Y00133* +X-00128Y0013* +X-00129Y00128* +X-00134Y00125* +X-00175Y00084* +X-0018Y00084* +X-00183Y00088* +X-00191Y00094* +X-002Y00098* +X-00211Y00099* +X-00221Y00098* +X-0023Y00094* +X-00238Y00088* +X-00243Y00081* +X-00332* +X-00375Y00124* +X-00381Y00128* +X-00382Y0013* +X-00382Y00131* +X-00382Y00134* +X-00377Y00141* +X-00373Y0015* +X-00373Y00153* +X-00411* +Y00168* +X-00373* +X-00373Y00171* +X-00377Y0018* +X-00381Y00186* +X-00379Y00191* +X-00282* +X-00249Y00157* +G37* +G36* +X01276Y00662D02* +X01284Y00657D01* +X01289Y00655* +X01289Y00654* +X0129Y00649* +X01284Y00645* +X01279Y00638* +X01275Y00629* +X01274Y00621* +X01275Y00612* +X01279Y00603* +X01282Y006* +X01282Y00598* +X0128Y00595* +X01275Y00594* +X0127Y00597* +X01264Y00598* +X0126* +Y00572* +X01245* +Y00598* +X0124* +X01235Y00597* +X0123Y00594* +X0123Y00594* +X01225Y00595* +Y00677* +X01256* +X01261Y00678* +X01276Y00662* +G37* +G36* +X00558Y00248D02* +X00562Y00242D01* +X00561Y00236* +X00558Y00232* +X00554Y00223* +X00553Y00215* +X00554Y00206* +X00558Y00197* +X00563Y0019* +X0057Y00185* +X00579Y00181* +X00588Y0018* +X00596Y00181* +X00605Y00185* +X00605Y00185* +X00612Y00184* +X00613Y00183* +X00614Y00183* +Y00176* +X00613Y00176* +X0061Y00171* +X00609Y00165* +Y00161* +X00636* +Y00146* +X00609* +Y00141* +X0061Y00136* +X0061Y00136* +X00607Y00131* +X00574* +X00548Y00157* +Y00249* +X00552Y0025* +X00558Y00248* +G37* +G36* +X-00904Y0022D02* +X-00908Y00215D01* +X-0091Y00207* +X-00908Y00198* +X-00906Y00196* +X-00925Y00177* +X-00928Y00173* +X-00929Y00167* +Y00151* +X-00943Y00137* +X-00946Y00132* +X-00947Y00127* +Y00106* +X-00951Y00102* +X-00956Y00104* +Y00106* +X-00957Y00113* +X-00961Y00118* +X-00966Y00122* +X-00973Y00123* +Y00128* +X-00966Y00129* +X-00961Y00133* +X-00957Y00138* +X-00956Y00145* +Y00155* +X-00995* +Y00163* +X-01002* +Y00198* +X-01016* +X-01023Y00197* +X-01028Y00193* +X-01032Y00187* +X-01033Y00181* +Y0017* +X-01036Y00169* +X-01038Y00168* +X-01042Y00171* +X-01048Y00172* +X-01053* +Y00146* +X-01068* +Y00172* +X-01073* +X-01074Y00172* +X-01078Y00175* +Y00211* +X-01064Y00225* +X-00906* +X-00904Y0022* +G37* +G36* +X00449Y-00887D02* +X0054D01* +Y-00917* +X00541Y-00923* +X00545Y-00928* +X00559Y-00942* +X0056Y-00948* +X00559Y-00949* +X00544Y-00964* +X0054Y-0097* +X00539Y-00976* +Y-00992* +X00534Y-00994* +X00488Y-00948* +X00483Y-00945* +X00477Y-00943* +X00431* +X00429Y-00939* +X0044Y-00928* +X00443Y-00923* +X00444Y-00918* +Y-0089* +X00448Y-00887* +X00449Y-00887* +G37* +G36* +X-01146Y00221D02* +Y00202D01* +X-01145Y00197* +Y00102* +X-01183Y00064* +X-01186Y00059* +X-01187Y00053* +X-01186Y00048* +X-01183Y00043* +X-01178Y0004* +X-01173Y00039* +X-01172Y00034* +X-01169Y00029* +X-01164Y00026* +X-01159Y00025* +X-01158Y0002* +X-01155Y00015* +X-0115Y00012* +X-01145Y00011* +X-01145Y00006* +X-01141Y00001* +X-01136Y-00001* +X-01132Y-00002* +X-01131Y-00007* +X-01127Y-00012* +X-01122Y-00015* +X-01118Y-00016* +X-01117Y-00021* +X-01113Y-00026* +X-01109Y-00029* +X-01107Y-00029* +X-01106Y-00032* +X-01109Y-00037* +X-01143* +X-01148Y-00038* +X-01153Y-00042* +X-01172Y-0006* +X-01176Y-00057* +X-01185Y-00053* +X-01194Y-00052* +X-01202Y-00053* +X-01211Y-00057* +X-01218Y-00062* +X-01223Y-00069* +X-01227Y-00078* +X-01228Y-00087* +X-01227Y-00095* +X-01227Y-00096* +X-0123Y-001* +X-01298* +X-01315Y-00083* +X-01317Y-0008* +X-01323Y-00074* +X-01328Y-00071* +X-01328Y-0007* +X-0133Y-00065* +X-01328Y-00063* +X-01327Y-00058* +X-01322Y-00057* +X-01317Y-00054* +X-01317Y-00052* +X-01313Y-00049* +X-01309Y-00049* +X-01308Y-0005* +X-01278* +X-01271Y-00055* +X-01262Y-00059* +X-01254Y-0006* +X-01245Y-00059* +X-01236Y-00055* +X-01229Y-0005* +X-01224Y-00043* +X-0122Y-00034* +X-01219Y-00026* +X-0122Y-00017* +X-01224Y-00008* +X-01229Y-00001* +X-01236Y00003* +X-01245Y00007* +X-01251Y00007* +X-01251Y00013* +X-01248Y00015* +X-01245Y0002* +X-01244Y00025* +X-01239Y00026* +X-01234Y00029* +X-01231Y00034* +X-0123Y00039* +X-01225Y0004* +X-0122Y00043* +X-01217Y00048* +X-01216Y00053* +X-01217Y00059* +X-0122Y00064* +X-01258Y00102* +Y00116* +X-0115Y00223* +X-01146Y00221* +G37* +G36* +X-00273Y00811D02* +Y00757D01* +X-00272Y00751* +X-00268Y00746* +X-00136Y00613* +X-00138Y00608* +X-00145Y00605* +X-00148Y00603* +X-00151Y00603* +X-00154Y00604* +X-00157Y00608* +X-00193Y00645* +X-00198Y00648* +X-00199Y00649* +Y00652* +X-002Y00659* +X-00204Y00664* +X-00209Y00668* +X-00216Y00669* +X-00223* +X-00224Y00674* +X-00228Y00679* +X-00291Y00742* +Y00744* +X-0029Y00745* +X-00289Y00751* +Y00802* +X-0029Y00809* +X-00294Y00814* +X-00299Y00818* +X-00306Y00819* +X-00313Y00818* +X-00318Y00814* +X-00319* +X-00325Y00818* +X-00332Y00819* +X-00338Y00818* +X-00344Y00814* +X-00345* +X-0035Y00818* +Y00777* +X-00365* +Y00818* +X-0037Y00814* +X-00371* +X-00376Y00818* +X-00383Y00819* +X-00389Y00818* +X-00395Y00814* +X-00399Y00809* +X-004Y00802* +Y00792* +X-00417* +X-00436Y00811* +X-00439Y00815* +X-00445Y00819* +X-0045Y00826* +X-00457Y00831* +X-00466Y00835* +X-00475Y00836* +X-00477Y00836* +X-00483Y00836* +X-00527* +X-00528Y00837* +X-00552* +X-00558Y00835* +X-00562Y00832* +X-00563Y00831* +X-00569* +X-0057Y00832* +X-00575Y00835* +X-00581Y00837* +X-00585* +Y0081* +X-00593* +Y00802* +X-00619* +Y00797* +X-00618Y00791* +X-00615Y00787* +X-00611Y00784* +X-0061Y0078* +X-00611Y00779* +X-00615Y00776* +X-00619Y00769* +X-00621Y00761* +Y00741* +X-00625Y00739* +X-00634Y00748* +X-00634Y00749* +Y00785* +X-00635Y00792* +X-00639Y00797* +X-00644Y00801* +X-00651Y00802* +X-00694* +X-00701Y00801* +X-00704Y00799* +X-00712Y00806* +X-00712Y00808* +Y00844* +X-00712Y00847* +X-00708Y00852* +X-00314* +X-00273Y00811* +G37* +G36* +X-00867Y00791D02* +X-00866Y00784D01* +X-00862Y00779* +X-00857Y00775* +X-0085Y00774* +Y00769* +X-00857Y00767* +X-00862Y00764* +X-00866Y00758* +X-00867Y00752* +Y00741* +X-00828* +Y00734* +X-00821* +Y00699* +X-00806* +X-008Y007* +X-00794Y00704* +X-00791Y00709* +X-00789Y00716* +Y0072* +X-00784Y00722* +X-00784Y00722* +X-00779Y00718* +X-00772Y00717* +X-0077* +Y0071* +X-00772* +X-00779Y00708* +X-00784Y00705* +X-00788Y00699* +X-00789Y00693* +Y00657* +X-00788Y0065* +X-00784Y00645* +X-00779Y00641* +X-00772Y0064* +Y00635* +X-00777Y00634* +X-00825* +X-00828Y00637* +X-00831Y0064* +X-00836Y00641* +X-00856* +X-00859Y0064* +X-00861Y00644* +X-00861Y00645* +X-00858Y00649* +X-00857Y00655* +Y0066* +X-00883* +Y00668* +X-00891* +Y00695* +X-00895* +X-00901Y00693* +X-00901Y00693* +X-00905Y00694* +X-00906Y00695* +X-00906Y00696* +X-00906Y00697* +X-009Y00702* +X-00894Y00709* +X-00891Y00717* +X-00889Y00726* +X-00891Y00735* +X-00894Y00743* +X-009Y0075* +X-00907Y00756* +X-00915Y00759* +X-00924Y0076* +X-00933Y00759* +X-00941Y00756* +X-00948Y0075* +X-00953Y00743* +X-00957Y00735* +X-00958Y00726* +X-00957Y00717* +X-00953Y00709* +X-00953Y00709* +Y00693* +X-00957Y0069* +X-00961Y00686* +X-00962Y0068* +Y00655* +X-00961Y00649* +X-00957Y00645* +X-00953Y00642* +X-00952Y00642* +X-00952Y00638* +X-00947Y00631* +X-00943Y00627* +Y00591* +X-00942Y00586* +X-0094Y00582* +X-00936Y0058* +X-00931Y00579* +X-00911* +X-00906Y0058* +X-00902Y00582* +X-00902* +X-00898Y0058* +X-00894Y00579* +X-00891* +Y0061* +X-00876* +Y00579* +X-00873* +X-00869Y0058* +X-00865Y00582* +X-00865* +X-00861Y0058* +X-00856Y00579* +X-00836* +X-00831Y0058* +X-00828Y00582* +X-00825Y00586* +X-00824Y00591* +Y00603* +X-00789* +Y00582* +X-00788Y00575* +X-00784Y0057* +X-00779Y00566* +X-00772Y00565* +X-00729* +X-00722Y00566* +X-00717Y0057* +X-00715Y00572* +X-00711Y0057* +X-00711Y00567* +Y00556* +X-00634* +Y00567* +X-00635Y00573* +X-00639Y00579* +X-00644Y00582* +X-00651Y00584* +Y00588* +X-00644Y0059* +X-00639Y00593* +X-00635Y00599* +X-00634Y00605* +Y00641* +X-00634Y00643* +X-00631Y00647* +X-00598* +X-00565Y00614* +Y00591* +X-00569Y00584* +X-00571Y00576* +Y00525* +X-00569Y00517* +X-00565Y0051* +X-00558Y00505* +X-0055Y00504* +X-00541Y00505* +X-00535Y0051* +X-0053Y00517* +X-00528Y00525* +Y00576* +X-0053Y00584* +X-00534Y00591* +Y00621* +X-00535Y00626* +X-00539Y00631* +X-00571Y00663* +X-00569Y00668* +X-00538* +X-00533Y00669* +X-00528Y00672* +X-00509Y00691* +X-00508Y0069* +X-005Y00689* +X-00491Y0069* +X-00485Y00695* +X-0048Y00702* +X-00478Y0071* +Y00761* +X-00475Y00765* +X-00472Y00762* +X-00471Y00761* +Y0071* +X-00469Y00702* +X-00465Y00695* +X-00458Y0069* +X-0045Y00689* +X-00441Y0069* +X-00435Y00695* +X-0043Y00702* +X-00428Y0071* +Y0075* +X-00423Y00754* +X-0042Y00753* +X-004* +Y00751* +X-00399Y00745* +X-00395Y00739* +X-00389Y00735* +X-00383Y00734* +X-00376Y00735* +X-00371Y00739* +X-0037* +X-00364Y00735* +X-00362Y00735* +X-00361Y00729* +X-00372Y00718* +X-00384* +X-0039Y00717* +X-00395Y00713* +X-00432Y00676* +X-00443* +X-00449Y00675* +X-00454Y00671* +X-0051Y00615* +X-00514Y0061* +X-00515Y00604* +Y00591* +X-00519Y00584* +X-00521Y00576* +Y00525* +X-00519Y00517* +X-00515Y0051* +X-00508Y00505* +X-005Y00504* +X-00491Y00505* +X-00485Y0051* +X-0048Y00517* +X-00478Y00525* +Y00576* +X-0048Y00584* +X-00484Y00591* +Y00598* +X-00437Y00645* +X-00426* +X-0042Y00646* +X-00415Y0065* +X-00378Y00687* +X-00366* +X-0036Y00688* +X-00355Y00692* +X-00322Y00724* +X-00318Y00725* +X-00316Y00724* +X-00265Y00673* +X-00265Y0067* +X-00267Y00668* +X-00272Y00664* +X-00275Y00659* +X-00277Y00652* +Y00616* +X-00275Y0061* +X-00272Y00604* +X-00266Y00601* +X-0026Y00599* +Y00594* +X-00266Y00593* +X-00272Y00589* +X-00275Y00584* +X-00277Y00577* +Y00557* +X-00281Y00555* +X-00294Y00569* +X-00294Y00574* +X-00294Y00574* +X-0029Y00579* +X-00289Y00586* +Y00604* +X-00306* +Y00611* +X-00314* +Y00652* +X-00315Y00651* +X-00319Y00649* +X-00323Y00651* +X-00325Y00653* +X-00332Y00654* +X-00338Y00653* +X-00341Y00651* +X-00344Y00649* +X-00348Y00651* +X-00351Y00653* +X-00357Y00654* +X-00364Y00653* +X-00366Y00651* +X-0037Y00649* +X-00374Y00651* +X-00375Y00652* +Y00611* +Y0057* +X-00375Y00571* +X-00371Y00569* +X-0037Y00568* +X-00367Y00564* +X-0035Y00546* +X-0035Y00546* +X-00355Y00539* +X-00359Y0053* +X-0036Y00522* +X-00359Y00513* +X-00355Y00504* +X-0035Y00497* +X-00343Y00492* +X-00334Y00488* +X-00326Y00487* +X-00317Y00488* +X-00308Y00492* +X-00307Y00493* +X-00302Y0049* +X-00299Y00483* +X-00294Y00476* +X-00287Y00471* +X-00278Y00467* +X-0027Y00466* +X-00261Y00467* +X-00252Y00471* +X-00245Y00476* +X-0024Y00483* +X-00236Y00492* +X-00235Y00501* +X-00236Y00509* +X-0024Y00518* +X-00242Y0052* +X-0024Y00525* +X-00216* +X-00209Y00526* +X-00204Y0053* +X-002Y00535* +X-00199Y00542* +Y00552* +X-00238* +Y00567* +X-00199* +Y00577* +X-002Y00584* +X-00204Y00589* +X-00209Y00593* +X-00216Y00594* +Y00599* +X-00209Y00601* +X-00204Y00604* +X-00203Y00606* +X-00198Y00606* +X-00183Y00591* +Y00559* +X-00182Y00553* +X-00178Y00548* +X-00155Y00525* +X-0015Y00521* +X-00144Y0052* +X-00029* +Y00488* +X-00027Y00482* +X-00024Y00476* +X-00022Y00475* +X-00023Y0047* +X-0018* +X-00186Y00469* +X-00191Y00466* +X-00216Y00441* +X-00294* +X-00319Y00466* +X-00324Y00469* +X-0033Y0047* +X-00411* +X-00416Y00476* +X-00421Y00479* +X-00427Y0048* +X-00656* +X-00662Y00479* +X-00667Y00476* +X-00739Y00403* +X-00744Y00404* +X-00745Y00405* +X-00752Y0041* +X-00761Y00414* +X-0077Y00415* +X-00778Y00414* +X-00787Y0041* +X-00794Y00405* +X-00799Y00398* +X-00803Y00389* +X-00804Y00381* +X-00803Y00372* +X-00799Y00363* +X-00797Y00361* +X-008Y00356* +X-01111* +X-01117Y00355* +X-01122Y00351* +X-01197Y00277* +X-01201Y00279* +Y00343* +X-01152Y00392* +X-01035* +X-01029Y00393* +X-01024Y00397* +X-01007Y00413* +X-01005Y00413* +X-00969* +X-00963Y00414* +X-00957Y00418* +X-00954Y00424* +X-00952Y0043* +Y00436* +X-00949Y00437* +X-00947Y00437* +X-00941Y00432* +X-00932Y00428* +X-00924Y00427* +X-00915Y00428* +X-00906Y00432* +X-00899Y00437* +X-00898Y00439* +X-00891* +X-00889Y00436* +X-00882Y00431* +X-00873Y00427* +X-00865Y00426* +X-00856Y00427* +X-00847Y00431* +X-0084Y00436* +X-00835Y00443* +X-00831Y00452* +X-0083Y00461* +X-00831Y00469* +X-00835Y00478* +X-00837Y0048* +X-00834Y00485* +X-00834Y00485* +X-00824* +Y00471* +X-00823Y00466* +X-00819Y00461* +X-00815Y00458* +X-00809Y00457* +X-00785* +X-0078Y00458* +X-00775Y00461* +X-00774Y00462* +X-00768* +X-00767Y00461* +X-00763Y00458* +X-00757Y00457* +X-00753* +Y00484* +Y00511* +X-00757* +X-00763Y0051* +X-00767Y00507* +X-00768Y00505* +X-00774* +X-00775Y00507* +X-00776Y00513* +X-00774Y00515* +X-0077Y00524* +X-00769Y00533* +X-0077Y00541* +X-00774Y0055* +X-00779Y00557* +X-00786Y00562* +X-00795Y00566* +X-00803Y00567* +X-00812Y00566* +X-00821Y00562* +X-00828Y00557* +X-00833Y0055* +X-00835Y00546* +X-00836Y00546* +X-00856* +X-00861Y00545* +X-00865Y00543* +X-00865* +X-00869Y00545* +X-00873Y00546* +X-00876* +X-00893Y00563* +X-00898Y00566* +X-00903Y00567* +X-00964* +X-00964Y00568* +X-0097Y00569* +X-01006* +X-01008Y00569* +X-01025Y00585* +X-0103Y00589* +X-01036Y0059* +X-0109* +X-01096Y00589* +X-01101Y00585* +X-01115Y00571* +X-01119Y00566* +X-0112Y0056* +Y00523* +X-01144Y00499* +X-01144Y00499* +X-01167Y00476* +X-0117Y00471* +X-01172Y00465* +Y00444* +X-01207Y00409* +X-01212Y00411* +Y00431* +X-01207* +X-01201Y00432* +X-01197Y00435* +X-01194Y0044* +X-01193Y00445* +Y0047* +X-01194Y00476* +X-01197Y00481* +X-01201Y00484* +X-01207Y00485* +X-01212* +Y00511* +X-01199Y00524* +X-01195Y0053* +X-01194Y00536* +X-01195Y00543* +X-01199Y00548* +X-01195Y00552* +X-0119Y00548* +X-01183Y00547* +X-01177Y00548* +X-01171Y00552* +X-01146Y00577* +X-01142Y00583* +X-01141Y00589* +X-01139Y00591* +X-01134Y0059* +X-01125Y00591* +X-01116Y00595* +X-01109Y006* +X-01104Y00607* +X-011Y00616* +X-01099Y00625* +X-011Y00633* +X-01104Y00642* +X-01109Y00649* +X-01116Y00654* +X-01125Y00658* +X-01134Y00659* +X-01142Y00658* +X-01151Y00654* +X-01158Y00649* +X-01163Y00642* +X-01167Y00633* +X-01167Y00629* +X-01172Y00628* +X-01177Y00632* +X-01182Y00636* +X-01189Y00637* +X-01195Y00636* +X-01201Y00632* +X-01226Y00607* +X-0123Y00601* +X-01231Y00595* +X-0123Y00588* +X-01226Y00583* +X-0123Y00579* +X-01235Y00583* +X-01242Y00584* +X-01248Y00583* +X-01254Y00579* +X-01279Y00554* +X-01283Y00548* +X-01284Y00542* +X-01283Y00535* +X-01279Y0053* +X-01248Y00499* +X-01243Y00495* +X-01242Y00495* +Y00483* +X-01244Y00481* +X-01249Y00481* +X-01254Y00484* +X-01259Y00485* +X-01264* +Y00458* +Y00431* +X-01259* +X-01254Y00432* +X-01249Y00435* +X-01244Y00435* +X-01242Y00433* +Y00402* +X-01267Y00377* +X-01271Y00372* +X-01272Y00366* +Y00339* +X-01277Y00338* +X-01277Y00338* +X-01283Y00342* +X-01289Y00343* +X-013* +Y00305* +Y00265* +X-01298Y00261* +X-01387Y00172* +X-01391Y00167* +X-01392Y00161* +Y0012* +X-01396Y00117* +X-01397Y00117* +X-01402* +Y00091* +X-01417* +Y00117* +X-01422* +X-01423Y00117* +X-01427Y0012* +Y00246* +X-01406Y00267* +X-014Y00266* +X-01364* +X-01357Y00267* +X-01352Y00271* +X-01348Y00276* +X-01347Y00283* +X-01342* +X-01341Y00276* +X-01337Y00271* +X-01332Y00267* +X-01325Y00266* +X-01315* +Y00305* +Y00343* +X-01322* +X-01324Y00348* +X-01303Y0037* +X-01299Y00375* +X-01298Y00381* +Y00433* +X-01295Y00435* +X-01293Y00435* +X-01289Y00432* +X-01283Y00431* +X-01279* +Y00458* +Y00485* +X-01283* +X-01289Y00484* +X-01293Y00481* +X-01295Y00481* +X-01298Y00483* +Y00567* +X-01195Y0067* +X-01092* +X-01086Y00664* +X-01087Y00662* +Y00626* +X-01085Y0062* +X-01082Y00614* +X-01076Y00611* +X-0107Y00609* +X-01026* +X-01019Y00611* +X-01014Y00614* +X-0101Y0062* +X-01009Y00626* +Y00662* +X-0101Y00669* +X-01014Y00674* +X-01019Y00678* +X-01026Y00679* +Y00684* +X-01019Y00685* +X-01014Y00689* +X-0101Y00695* +X-01009Y00701* +Y00737* +X-0101Y00743* +X-01014Y00749* +X-0099Y00772* +X-00951* +X-00945Y00773* +X-0094Y00777* +X-00925Y00792* +X-00867* +Y00791* +G37* +G36* +X00724Y00429D02* +X00725Y00428D01* +X00721Y00423* +X0072Y00418* +Y00313* +X00716Y00309* +X00712Y00304* +X00711Y00298* +Y0023* +X0068* +X00673Y00229* +X00668Y00225* +X00666Y00223* +X00664* +X00661Y00224* +X00658Y00228* +X00654Y00231* +X00648Y00232* +X00648* +Y00248* +X00648Y00248* +X0065Y00257* +X00648Y00265* +X00644Y00272* +X00637Y00276* +X00629Y00278* +X00577* +X00576Y00281* +X0058Y00285* +X00629* +X00637Y00287* +X00644Y00292* +X00648Y00298* +X0065Y00307* +X00648Y00315* +X00647Y00316* +X00666Y00335* +X0067Y0034* +X00671Y00345* +Y00361* +X00686Y00376* +X0069Y00381* +X00691Y00387* +Y00431* +X00693Y00433* +X00722* +X00724Y00429* +G37* +G36* +X00889Y00521D02* +X0089Y00514D01* +X00894Y00509* +X00895Y00508* +X00893Y00504* +X00892Y00504* +X00883Y00502* +X00877Y00498* +X00875Y00496* +X0087Y00498* +Y005* +X00844* +Y00515* +X0087* +Y0052* +X0087Y00521* +X00873Y00524* +X00889* +Y00521* +G37* +G36* +X00817Y00507D02* +Y00496D01* +X00818Y0049* +X00821Y00485* +X00822Y00485* +Y00478* +X00821Y00478* +X00818Y00473* +X00817Y00467* +Y00443* +X00818Y00438* +X00821Y00433* +X0082Y00432* +X00819Y00428* +X00788* +X00784Y00428* +X0077* +X00766Y00432* +X00767Y00433* +Y00464* +X00812Y00509* +X00817Y00507* +G37* +G36* +X01036Y00617D02* +X01036Y00617D01* +X01037Y00608* +X01041Y00599* +X01046Y00592* +X01053Y00587* +X01062Y00583* +X01071Y00582* +X01079Y00583* +X01088Y00587* +X01095Y00592* +X011Y00593* +X01123Y00569* +Y00402* +X01124Y00396* +X01128Y00391* +X01131Y00387* +X01129Y00383* +X01128Y00383* +X01085* +X01079Y00382* +X01053Y00408* +Y00414* +X01057Y00416* +X01061Y00423* +X01063Y00431* +Y00483* +X01061Y00491* +X01057Y00498* +X0105Y00502* +X01042Y00504* +X01032Y00514* +X01033Y00514* +X01034Y00521* +Y00564* +X01033Y00571* +X01029Y00576* +X01023Y0058* +X01017Y00581* +X00981* +X00974Y0058* +X00969Y00576* +X00965Y00571* +X00964Y00564* +X00959* +X00958Y00571* +X00954Y00576* +X00949Y0058* +X00942Y00581* +X00906* +X009Y0058* +X00894Y00576* +X0089Y00571* +X00889Y00564* +Y00555* +X00821* +X00815Y00554* +X0081Y00551* +X00748Y00488* +X00743Y0049* +X00742Y00493* +X00738Y00498* +X00733Y00502* +X00726Y00503* +Y00508* +X00733Y00509* +X00738Y00513* +X00742Y00518* +X00743Y00525* +Y00555* +X00758Y0057* +X0076Y00572* +X00761Y00573* +X00768Y00578* +X00773Y00585* +X00777Y00594* +X00778Y00603* +X00777Y00611* +X00775Y00616* +X00778Y00621* +X01033* +X01036Y00617* +G37* +G36* +X-01024Y-00254D02* +X-01024Y-00254D01* +X-01025Y-00254* +X-0103Y-00258* +X-01033Y-00263* +X-01034Y-00267* +X-01039Y-00268* +X-01044Y-00272* +X-01047Y-00276* +X-01048Y-00281* +X-01053Y-00282* +X-01058Y-00286* +X-01061Y-0029* +X-01062Y-00295* +X-01065Y-00296* +X-01062Y-00299* +X-01061Y-00302* +X-01058Y-00307* +X-01037Y-00328* +X-01043Y-00334* +X-01064Y-00313* +X-01069Y-0031* +X-01072Y-0031* +X-01075Y-00306* +X-01076Y-00309* +X-01081Y-0031* +X-01086Y-00313* +X-01089Y-00318* +X-0109Y-00323* +X-01095Y-00324* +X-011Y-00327* +X-01101Y-0033* +X-01104Y-0033* +X-0111Y-00329* +X-01127* +X-01132Y-0033* +X-01137Y-00334* +X-01173Y-0037* +X-01177Y-00369* +X-01184Y-00364* +X-01193Y-0036* +X-01202Y-00359* +X-01209Y-0036* +X-01211Y-00355* +X-01207Y-00353* +X-01202Y-00346* +X-01198Y-00337* +X-01198Y-00336* +X-01189* +X-01183Y-00335* +X-01178Y-00331* +X-01096Y-00249* +X-01028* +X-01024Y-00254* +G37* +G36* +X01274Y00543D02* +X01274Y00541D01* +X0127Y00538* +X01266Y00538* +X0126Y00537* +X01259Y00537* +X01254Y00538* +X01253Y0054* +X01255Y00545* +X01264* +X0127Y00546* +X01274Y00543* +G37* +G36* +X00236Y-00974D02* +Y-01033D01* +X00275Y-01072* +Y-01129* +X0027Y-01132* +X00264Y-01131* +X00247* +Y-01208* +Y-01284* +X00264* +X0027Y-01283* +X00275Y-01286* +Y-01299* +X00227Y-01346* +X00222Y-01345* +X0022Y-01338* +X00214Y-01328* +X00206Y-01318* +X00197Y-01311* +X00186Y-01305* +X00175Y-01301* +X00163Y-013* +X00158Y-01301* +X00156Y-01296* +X0019Y-01262* +X00195Y-01265* +X00196Y-01271* +X00201Y-01278* +X00207Y-01282* +X00215Y-01284* +X00232* +Y-01208* +Y-01131* +X00215* +X00209Y-01132* +X00204Y-01129* +Y-011* +X00218Y-01085* +X00222Y-01081* +X00223Y-01075* +Y-01005* +X00222Y-00999* +X00218Y-00994* +X00202Y-00978* +Y-00947* +X00207Y-00945* +X00236Y-00974* +G37* +G36* +X00291Y00221D02* +D01* +X00298Y00217* +X00306Y00215* +X00386* +X00393Y00217* +X004Y00221* +X00402Y00223* +X00411Y00222* +X00421Y00223* +X0043Y00227* +X00435Y00231* +X0044Y00228* +Y00193* +X00435Y0019* +X0043Y00194* +X00421Y00198* +X00411Y00199* +X004Y00198* +X00391Y00194* +X00383Y00188* +X00377Y0018* +X00373Y00171* +X00372Y00161* +X00309* +X00275Y00195* +X00274Y00195* +X00245Y00225* +X0024Y00228* +X00239Y0023* +X00239Y00233* +X00239Y00234* +X00244Y00241* +X00248Y0025* +X00249Y00256* +X00254Y00258* +X00291Y00221* +G37* +G36* +X00064Y-00103D02* +X0007Y-00107D01* +X0007Y-00108* +X00071Y-00111* +X00071Y-00112* +X00066Y-00119* +X00062Y-00128* +X00061Y-00134* +X00056Y-00136* +X00044Y-00124* +X00037Y-0012* +X00029Y-00118* +X-00067* +X-00072Y-00111* +X-0008Y-00105* +X-00089Y-00101* +X-001Y-001* +X-0011Y-00101* +X-00119Y-00105* +X-00127Y-00111* +X-00132Y-00118* +X-0014* +X-00148Y-0012* +X-00155Y-00124* +X-00167Y-00136* +X-00172Y-00134* +X-00173Y-00128* +X-00177Y-00119* +X-00181Y-00113* +X-00181Y-00111* +X-00179Y-00108* +X-00172Y-00107* +X-00166Y-00102* +X-00129Y-00066* +X-00127Y-00066* +X-00119Y-00072* +X-0011Y-00076* +X-001Y-00077* +X-00089Y-00076* +X-0008Y-00072* +X-00072Y-00066* +X-00067Y-00059* +X0002* +X00064Y-00103* +G37* +G36* +X01242Y00867D02* +X01245Y00863D01* +X01245Y00863* +X01245Y00856* +X01241Y00851* +X01239Y00845* +X01238Y00845* +X01233Y00846* +X01232* +Y00811* +Y00776* +X01233* +X01237Y00773* +Y00755* +X0122* +X01213Y00754* +X01208Y0075* +X01204Y00744* +X01203Y00738* +X01198* +X01197Y00744* +X01193Y0075* +X01187Y00754* +X01181Y00755* +X01172* +X01172Y00756* +X0117Y0076* +X01172Y00763* +X01173Y00768* +Y00769* +X01103* +Y00768* +X01104Y00763* +X01107Y00759* +X01107Y00758* +X01105Y00754* +X01088* +X01087Y00756* +X01083Y00759* +X01078Y0076* +X01071* +Y00792* +X01078* +X01083Y00793* +X01087Y00796* +X01089Y008* +X0109Y00805* +Y00822* +X01089Y00827* +X01087Y00831* +X01083Y00834* +X01078Y00835* +X01034* +X01029Y00834* +X01026Y00832* +X01021Y00834* +X01022Y00836* +Y00851* +X01027Y00853* +X01032Y00849* +X01039Y00848* +X01074* +X01081Y00849* +X01086Y00853* +X0109Y00858* +X01091Y00865* +X01096* +X01098Y00858* +X01101Y00853* +X01107Y00849* +X01113Y00848* +X01149* +X01156Y00849* +X01161Y00853* +X01165Y00858* +X01165Y00861* +X01168Y00862* +X01171Y00862* +X01174Y0086* +X01179Y00859* +X01196* +X01201Y0086* +X01205Y00863* +X01208Y00867* +X01208Y00871* +X01241* +X01242Y00867* +G37* +G36* +X-00039Y-00879D02* +X00009D01* +Y-00887* +X00016* +Y-00908* +X00036* +X00044Y-00906* +X00051Y-00902* +X00056Y-00895* +X00057Y-00887* +X00058Y-00885* +X00147* +X00182Y-00921* +X0018Y-00926* +X00149* +X00142Y-00927* +X00137Y-00931* +X00133Y-00936* +X00132Y-00943* +X00127* +X00126Y-00936* +X00122Y-00931* +X00117Y-00927* +X0011Y-00926* +X00075* +X0007Y-00922* +X00064Y-00921* +X00051* +X00044Y-00917* +X00036Y-00915* +X-00018* +X-00026Y-00917* +X-00033Y-00922* +X-00038Y-00928* +X-00039Y-00937* +X-00038Y-00945* +X-00033Y-00952* +X-00026Y-00956* +X-00018Y-00958* +X00036* +X00044Y-00956* +X00051Y-00952* +X00057* +Y-00972* +X00052Y-00973* +X00051Y-00972* +X00044Y-00967* +X00036Y-00965* +X-00018* +X-00026Y-00967* +X-00033Y-00972* +X-00038Y-00978* +X-00039Y-00987* +X-00038Y-00995* +X-00033Y-01002* +X-00026Y-01006* +X-00018Y-01008* +X00035* +X00037Y-0101* +X00037Y-01012* +X00035Y-01015* +X00012* +X00009Y-01015* +X00005Y-01015* +X-00018* +X-00026Y-01017* +X-00033Y-01022* +X-00038Y-01028* +X-00039Y-01037* +X-00038Y-01045* +X-00033Y-01052* +X-00026Y-01056* +X-00018Y-01058* +X-00012* +Y-01065* +X-00018* +X-00026Y-01067* +X-00033Y-01072* +X-00038Y-01078* +X-00039Y-01087* +X-00038Y-01095* +X-00033Y-01102* +X-00026Y-01106* +X-00018Y-01108* +X-00012* +Y-01115* +X-00018* +X-00026Y-01117* +X-00033Y-01122* +X-00038Y-01128* +X-00039Y-01137* +X-00038Y-01145* +X-00033Y-01152* +X-00026Y-01156* +X-00018Y-01158* +X00005* +X00009Y-01158* +X00012Y-01158* +X00036* +X00044Y-01156* +X00051Y-01152* +X00056Y-01145* +X00057Y-01137* +X00057Y-01136* +X00062Y-01133* +X00065Y-01135* +X0007Y-01136* +X00094* +X001Y-01135* +X00105Y-01132* +X00105Y-01131* +X00112* +X00112Y-01132* +X00117Y-01135* +X00123Y-01136* +X00127* +Y-01109* +X00142* +Y-01136* +X00147* +X00148Y-01136* +X00153Y-0114* +Y-01183* +X00148Y-01187* +X00148Y-01187* +X00143* +Y-01214* +X00128* +Y-01187* +X00124* +X00118Y-01188* +X00113Y-01191* +X00113Y-01192* +X00106* +X00106Y-01191* +X00101Y-01188* +X00095Y-01187* +X00071* +X00066Y-01188* +X00062Y-0119* +X0006Y-0119* +X00057Y-01188* +X00057Y-01187* +X00056Y-01178* +X00051Y-01172* +X00044Y-01167* +X00036Y-01165* +X00016* +Y-01187* +Y-01208* +X0003* +X00033Y-01213* +X00031Y-01215* +X-00018* +X-00026Y-01217* +X-00033Y-01222* +X-00038Y-01228* +X-00039Y-01237* +X-00038Y-01241* +X-00085Y-01288* +X-0009Y-01294* +X-00091Y-01302* +Y-01385* +X-0009Y-01393* +X-00085Y-01399* +X-00082Y-01403* +Y-01424* +X-00084Y-01425* +X-00089Y-01432* +X-00092Y-01439* +X-00093Y-01447* +Y-01455* +X-00092Y-01463* +X-00089Y-01471* +X-00084Y-01477* +X-00078Y-01482* +X-0007Y-01485* +X-00062Y-01486* +X-00054Y-01485* +X-00047Y-01482* +X-00041Y-01477* +X-00036Y-01471* +X-00034Y-01466* +X-00028* +X-00026Y-01471* +X-00021Y-01477* +X-00015Y-01482* +X-00008Y-01485* +X0Y-01486* +X00008Y-01485* +X00015Y-01482* +X00021Y-01477* +X00026Y-01471* +X00028Y-01466* +X00034* +X00036Y-01471* +X00041Y-01477* +X00047Y-01482* +X00054Y-01485* +X00055Y-01485* +Y-01451* +X00062* +Y-01444* +X00093* +X00092Y-01439* +X00089Y-01432* +X00084Y-01425* +X00078Y-01421* +X0007Y-01417* +X00064Y-01417* +X00061Y-01412* +X00078Y-01395* +X00082Y-0139* +X00083Y-01384* +Y-0135* +X00107Y-01326* +X00111Y-01329* +X00106Y-01338* +X00103Y-0135* +X00101Y-01362* +Y-01454* +X00103Y-01466* +X00106Y-01478* +X00112Y-01488* +X00119Y-01498* +X00129Y-01505* +X00139Y-01511* +X00151Y-01515* +X00163Y-01516* +X00175Y-01515* +X00186Y-01511* +X00197Y-01505* +X00206Y-01498* +X00211Y-01492* +X00216Y-01494* +Y-01515* +X00196Y-01535* +X-00196* +X-00216Y-01515* +Y-01494* +X-00211Y-01492* +X-00206Y-01498* +X-00197Y-01505* +X-00186Y-01511* +X-00175Y-01515* +X-00163Y-01516* +X-00151Y-01515* +X-00139Y-01511* +X-00129Y-01505* +X-00119Y-01498* +X-00112Y-01488* +X-00106Y-01478* +X-00103Y-01466* +X-00101Y-01454* +Y-01362* +X-00103Y-0135* +X-00106Y-01338* +X-00112Y-01328* +X-00119Y-01318* +X-00129Y-01311* +X-00139Y-01305* +X-00151Y-01301* +X-00163Y-013* +X-00175Y-01301* +X-00186Y-01305* +X-00197Y-01311* +X-00206Y-01318* +X-00209Y-01322* +X-00215Y-01321* +X-00215Y-01318* +X-00098Y-012* +Y-00895* +X-00078Y-00875* +X-00041* +X-00039Y-00879* +G37* +G36* +X01037Y-00559D02* +X01044Y-00565D01* +X01052Y-00568* +X01061Y-00569* +X01079* +X01083Y-00573* +Y-00615* +Y-00617* +X01078Y-0062* +X01026* +X01026Y-00615* +X01022Y-0061* +X01018Y-00607* +X01017Y-00606* +Y-00602* +X01018Y-00601* +X01022Y-00598* +X01026Y-00593* +X01027Y-00586* +Y-00556* +X01031Y-00554* +X01037Y-00559* +G37* +G36* +X-00789Y00847D02* +X-00789Y00844D01* +Y0084* +X-00794Y00838* +X-00794Y00838* +X-008Y00842* +X-00806Y00843* +X-0085* +X-00857Y00842* +X-00862Y00838* +X-00866Y00833* +X-00867Y00826* +Y00823* +X-00931* +X-00937Y00822* +X-00942Y00818* +X-00957Y00803* +X-00996* +X-01002Y00802* +X-01007Y00798* +X-01052Y00754* +X-0107* +X-01076Y00753* +X-01082Y00749* +X-01085Y00743* +X-01087Y00737* +Y00701* +X-01087Y00701* +X-01202* +X-01207Y007* +X-01212Y00696* +X-01324Y00584* +X-01328Y00579* +X-01329Y00574* +Y00387* +X-01373Y00343* +X-014* +X-01406Y00342* +X-01412Y00338* +X-01416Y00333* +X-01417Y00326* +Y00299* +X-01453Y00263* +X-01457Y00258* +X-01458Y00252* +Y00001* +X-01462Y0* +X-01469Y00006* +Y00336* +X-01439* +X-01432Y00337* +X-01427Y00341* +X-01423Y00347* +X-01422Y00353* +Y00388* +X-01413Y00397* +X-01411Y00396* +X-01405Y00395* +X-01361* +X-01355Y00396* +X-01349Y004* +X-01345Y00406* +X-01344Y00412* +Y00448* +X-01345Y00454* +X-01349Y0046* +X-01355Y00464* +X-01361Y00465* +Y0047* +X-01355Y00471* +X-01349Y00475* +X-01345Y0048* +X-01344Y00487* +Y00523* +X-01345Y00529* +X-01349Y00535* +X-01355Y00538* +X-01361Y0054* +X-01368* +Y00563* +X-01217Y00714* +X-01145* +X-0114Y00715* +X-01135Y00719* +X-01082Y00771* +X-01066* +X-0106Y00772* +X-01055Y00775* +X-00979Y00852* +X-00793* +X-00789Y00847* +G37* +G36* +X00113Y-01236D02* +X00118Y-01239D01* +X00124Y-0124* +X00134* +X00136Y-01245* +X00123Y-01258* +X00109* +X00104Y-01259* +X00099Y-01263* +X00053Y-01309* +X00016* +X0001Y-0131* +X00005Y-01313* +X-00015Y-01334* +X-00016Y-01334* +X-00023Y-01331* +X-00031Y-0133* +X-00039Y-01331* +X-00046Y-01334* +X-00048Y-01335* +X-00052Y-01333* +Y-0131* +X0Y-01258* +X00036* +X00044Y-01256* +X00051Y-01252* +X00052Y-0125* +X00064Y-01238* +X00066Y-01239* +X00071Y-0124* +X00095* +X00101Y-01239* +X00106Y-01236* +X00106Y-01235* +X00113* +X00113Y-01236* +G37* +G36* +X008Y-00515D02* +X00798Y-00517D01* +X00792Y-00524* +X0079Y-0053* +X00787Y-00529* +X00743* +X00738Y-0053* +X00734Y-00533* +X00731Y-00537* +X0073Y-00542* +Y-00558* +X00731Y-00563* +X00734Y-00567* +X00738Y-0057* +X00743Y-00571* +X00787* +X00792Y-0057* +X00796Y-00567* +X00802Y-00568* +X00805Y-00571* +X0081Y-00573* +X00813Y-00574* +X00813Y-00579* +X00813Y-00579* +Y-00596* +X00814Y-00601* +X00817Y-00605* +X00821Y-00608* +X00826Y-00609* +X00853* +X00882Y-00637* +Y-00665* +X00883Y-00672* +X00887Y-00677* +X00893Y-00681* +X00899Y-00682* +X00935* +X00942Y-00681* +X00947Y-00677* +X00951Y-00672* +X00952Y-00665* +X00957* +X00958Y-00672* +X00962Y-00677* +X00967Y-00681* +X00974Y-00682* +X0101* +X01016Y-00681* +X01022Y-00677* +X01026Y-00672* +X01027Y-00665* +Y-00652* +X01042* +X01045Y-00656* +Y-007* +X00989Y-00756* +X00983Y-00755* +X00981Y-00752* +X00976Y-00748* +X00969Y-00747* +X00933* +X00927Y-00748* +X00921Y-00752* +X00918Y-00758* +X00916Y-00764* +X00911* +X0091Y-00758* +X00906Y-00752* +X00901Y-00748* +X00894Y-00747* +X00859* +X00852Y-00748* +X00847Y-00752* +X00846Y-00752* +X00841Y-00751* +Y-00746* +X0084Y-0074* +X00837Y-00736* +X00833Y-00733* +X00827Y-00731* +X00822* +Y-00758* +X00814* +Y-00765* +X00787* +Y-0077* +X00789Y-00775* +X00792Y-0078* +X00793Y-00781* +Y-00787* +X00792Y-00788* +X00789Y-00793* +X00787Y-00798* +Y-00816* +X00773* +Y-00656* +X00772Y-00651* +X00777Y-00646* +X00787* +X00792Y-00645* +X00796Y-00642* +X00799Y-00638* +X008Y-00633* +Y-00617* +X00799Y-00612* +X00796Y-00608* +X00792Y-00605* +X00787Y-00604* +X00743* +X00738Y-00605* +X00737Y-00605* +X00708Y-00576* +X0071Y-00573* +X00711Y-0056* +X0071Y-00547* +X00707Y-0054* +X00737Y-0051* +X00799* +X008Y-00515* +G37* +G36* +X-00261Y-00102D02* +X-00255Y-00107D01* +X-00247Y-00108* +X-00242* +X-0024Y-00113* +X-00244Y-00119* +X-00248Y-00128* +X-00249Y-00139* +X-00248Y-00149* +X-00247Y-00151* +X-00251Y-00154* +X-00281Y-00124* +X-00288Y-0012* +X-00296Y-00118* +X-00378* +X-00383Y-00111* +X-00391Y-00105* +X-004Y-00101* +X-00411Y-001* +X-00421Y-00101* +X-0043Y-00105* +X-00438Y-00111* +X-00443Y-00118* +X-00459* +X-00466Y-0012* +X-00469Y-00121* +X-00472Y-00118* +X-00471Y-00115* +X-00469Y-00108* +Y-00091* +X-00466* +X-00458Y-00089* +X-00452Y-00085* +X-00436Y-00069* +X-00433Y-00071* +X-0043Y-00072* +X-0043Y-00072* +X-00421Y-00076* +X-00411Y-00077* +X-004Y-00076* +X-00391Y-00072* +X-00383Y-00066* +X-00378Y-00059* +X-00305* +X-00261Y-00102* +G37* +G36* +X01503Y0086D02* +Y00687D01* +X01499Y00685* +X01476Y00708* +Y0081* +X01475Y00816* +X01472Y00821* +X01358Y00935* +X0136Y00939* +X01424* +X01503Y0086* +G37* +G36* +X-01517Y00682D02* +X-0151D01* +X-01506Y00681* +X-01505Y00677* +Y00646* +X-01537Y00614* +X-01541Y00609* +X-01542Y00603* +Y-00012* +X-01541Y-00017* +X-01537Y-00022* +X-01533Y-00025* +X-01476Y-00082* +X-01477Y-00087* +X-01478Y-00088* +X-01481Y-00093* +X-01482Y-00098* +X-01487Y-00099* +X-01492Y-00102* +X-01495Y-00107* +X-01496Y-00112* +X-01499Y-00115* +X-01504* +X-01512Y-00117* +X-01516Y-00119* +X-01533* +X-01539Y-0012* +X-01543Y-00123* +X-01546Y-00128* +X-01547Y-00133* +Y-00157* +X-01546Y-00163* +X-01543Y-00168* +X-01542Y-00168* +Y-00175* +X-01543Y-00175* +X-01546Y-0018* +X-01547Y-00186* +Y-0021* +X-01546Y-00215* +X-01543Y-0022* +X-01539Y-00223* +X-01533Y-00224* +X-01528* +Y-00198* +X-01521* +Y-0019* +X-01494* +Y-00186* +X-01495Y-0018* +X-01498Y-00175* +X-01499Y-00175* +Y-00168* +X-01498Y-00168* +X-01495Y-00163* +X-01494Y-00159* +X-01467* +X-01459Y-00157* +X-01458Y-00157* +X-0145Y-00165* +X-01447Y-00167* +X-01439Y-00175* +X-01438Y-00176* +X-01433Y-0018* +X-01427Y-00181* +X-01337* +X-01331Y-0018* +X-01326Y-00176* +X-01325Y-00175* +X-01223* +X-01221Y-00177* +X-01216Y-00181* +X-0121Y-00182* +X-01161* +X-01157Y-00188* +X-0115Y-00193* +X-01141Y-00197* +X-01133Y-00198* +X-01124Y-00197* +X-01115Y-00193* +X-01108Y-00188* +X-01103Y-00181* +X-01099Y-00172* +X-01098Y-00164* +X-01099Y-00155* +X-01103Y-00146* +X-01108Y-00139* +X-01115Y-00134* +X-01124Y-0013* +X-01133Y-00129* +X-01141Y-0013* +X-0115Y-00134* +X-01157Y-00139* +X-01162Y-00146* +X-01164Y-00151* +X-01204* +X-01206Y-00149* +X-01211Y-00145* +X-01217Y-00144* +X-01331* +X-01337Y-00145* +X-01342Y-00149* +X-01343Y-0015* +X-01409* +X-01411Y-00146* +X-01409Y-00141* +X-01406Y-0014* +X-01401Y-00137* +X-01398Y-00132* +X-01397Y-00127* +X-01392Y-00127* +X-01387Y-00123* +X-01384Y-00118* +X-01383Y-00114* +X-01378Y-00113* +X-01373Y-00109* +X-0137Y-00104* +X-01369Y-001* +X-01364Y-00099* +X-01359Y-00095* +X-01359Y-00095* +X-01353* +X-01353Y-00095* +X-01348Y-00099* +X-01342Y-001* +X-0134* +X-0134Y-001* +X-01338Y-00103* +X-01315Y-00126* +X-0131Y-0013* +X-01304Y-00131* +X-01206* +X-012Y-0013* +X-01195Y-00126* +X-01189Y-0012* +X-01185Y-0012* +X-01176Y-00116* +X-01169Y-00111* +X-01164Y-00104* +X-0116Y-00095* +X-0116Y-00091* +X-01136Y-00068* +X-01084* +X-01079Y-00067* +X-01077Y-00066* +X-01072Y-00067* +X-01072Y-00068* +X-01067Y-00071* +X-01062Y-00072* +X-01061Y-00077* +X-01058Y-00082* +X-01053Y-00085* +X-01048Y-00086* +X-01047Y-00091* +X-01044Y-00095* +X-01039Y-00099* +X-01034Y-001* +X-01033Y-00104* +X-0103Y-00109* +X-01025Y-00113* +X-0102Y-00114* +X-01019Y-00118* +X-01016Y-00123* +X-01011Y-00127* +X-01006Y-00127* +X-01005Y-00132* +X-01002Y-00137* +X-00997Y-0014* +X-00992Y-00141* +X-00991Y-00146* +X-00988Y-00151* +X-00983Y-00154* +X-00978Y-00155* +X-00977Y-0016* +X-00974Y-00165* +X-00969Y-00168* +X-00964Y-00169* +X-00958Y-00168* +X-00953Y-00165* +X-00911Y-00123* +X-0091Y-00121* +X-00899Y-0011* +X-00897Y-00112* +X-00889Y-00114* +X-00826* +X-00817Y-00112* +X-00817Y-00112* +X-0081* +X-00803Y-0011* +X-00796Y-00106* +X-00792Y-00102* +X-00791Y-00102* +X-00787Y-00104* +X-00784Y-00105* +X-00767* +X-00764Y-00104* +X-00763Y-00103* +X-00761Y-00104* +X-00758Y-00105* +X-00741* +X-00738Y-00104* +X-00734Y-00102* +X-00733Y-00102* +X-00728Y-00106* +X-00722Y-0011* +X-00715Y-00112* +X-00708* +X-00708Y-00112* +X-007Y-00114* +X-00649* +X-00647Y-00117* +X-00649Y-00121* +X-007* +X-00708Y-00123* +X-00715Y-00128* +X-00719Y-00134* +X-00721Y-00143* +X-0072Y-00149* +X-00722Y-00154* +X-00803* +X-00805Y-0015* +X-00908* +X-00908Y-00151* +X-00904Y-00158* +X-00897Y-00162* +X-00889Y-00164* +X-00858* +X-00856Y-00168* +X-00921Y-00234* +X-00953Y-00202* +X-00958Y-00199* +X-00964Y-00198* +X-00969Y-00199* +X-00974Y-00202* +X-00977Y-00207* +X-00978Y-00212* +X-00983Y-00213* +X-00988Y-00216* +X-0099Y-00219* +X-00993Y-00219* +X-00999Y-00218* +X-01102* +X-01108Y-00219* +X-01113Y-00223* +X-01195Y-00305* +X-01207* +X-01207Y-00304* +X-01214Y-00299* +X-01223Y-00295* +X-01232Y-00294* +X-0124Y-00295* +X-01249Y-00299* +X-01256Y-00304* +X-01261Y-00311* +X-01265Y-0032* +X-01266Y-00328* +X-0127Y-0033* +X-01281Y-0032* +X-01286Y-00316* +X-01292Y-00315* +X-01307* +X-01313Y-00316* +X-01313* +X-01318Y-0032* +X-0132Y-00324* +X-01322Y-00325* +X-01325Y-00327* +X-01346Y-00348* +X-01352Y-00342* +X-01331Y-00321* +X-01328Y-00316* +X-01328Y-00313* +X-01324Y-0031* +X-01327Y-00309* +X-01328Y-00304* +X-01331Y-00299* +X-01336Y-00296* +X-01341Y-00295* +X-01342Y-0029* +X-01345Y-00286* +X-0135Y-00282* +X-01355Y-00281* +X-01356Y-00276* +X-01359Y-00272* +X-01364Y-00268* +X-01369Y-00267* +X-0137Y-00263* +X-01373Y-00258* +X-01378Y-00254* +X-01383Y-00253* +X-01384Y-00249* +X-01387Y-00244* +X-01388Y-00243* +X-01389Y-00238* +X-01375Y-00224* +X-01334* +X-01298Y-0026* +X-01293Y-00263* +X-01287Y-00264* +X-01236* +X-01234Y-00268* +X-01229Y-00275* +X-01222Y-0028* +X-01213Y-00284* +X-01205Y-00285* +X-01196Y-00284* +X-01187Y-0028* +X-0118Y-00275* +X-01175Y-00268* +X-01171Y-00259* +X-0117Y-00251* +X-01171Y-00242* +X-01175Y-00233* +X-0118Y-00226* +X-01187Y-00221* +X-01196Y-00217* +X-01205Y-00216* +X-01213Y-00217* +X-01222Y-00221* +X-01229Y-00226* +X-01234Y-00233* +X-01234Y-00234* +X-01281* +X-01317Y-00198* +X-01322Y-00194* +X-01328Y-00193* +X-0138* +X-01385Y-00194* +X-0139Y-00198* +X-01393Y-00202* +X-01409Y-00218* +X-01414Y-00217* +X-01415Y-00216* +X-0142Y-00213* +X-01425Y-00212* +X-01426Y-00207* +X-01429Y-00202* +X-01434Y-00199* +X-01439Y-00198* +X-01445Y-00199* +X-0145Y-00202* +X-01488Y-0024* +X-01488* +X-01494Y-00241* +X-01499Y-00244* +X-0155Y-00295* +X-01555Y-00293* +Y00681* +X-0155Y00684* +X-01549Y00683* +X-01543Y00682* +X-01532* +Y0072* +X-01517* +Y00682* +G37* +G36* +X01555Y00876D02* +Y-01171D01* +X01446Y-01279* +X00524* +X00521Y-01274* +X00523Y-01271* +X00524Y-01264* +Y-01215* +X00435* +Y-01264* +X00436Y-01271* +X00438Y-01274* +X00435Y-01279* +X00393* +X00354Y-0124* +Y-01053* +X00315Y-01013* +Y-00944* +X00177Y-00806* +X00069* +X00059Y-00797* +X-00108* +X-00177Y-00866* +Y-01171* +X-00285Y-01279* +X-01456* +X-01555Y-01181* +Y-00355* +X-0155Y-00353* +X-01523Y-0038* +X-01523Y-00385* +X-01527Y-00388* +X-01533Y-00396* +X-01537Y-00405* +X-01538Y-00416* +X-01537Y-00426* +X-01533Y-00435* +X-01527Y-00443* +X-01519Y-00449* +X-0151Y-00453* +X-015Y-00454* +X-01489Y-00453* +X-0148Y-00449* +X-01475Y-00445* +X-0147Y-00448* +Y-00465* +X-01485Y-0048* +X-01489Y-00478* +X-015Y-00477* +X-0151Y-00478* +X-01519Y-00482* +X-01527Y-00488* +X-01533Y-00496* +X-01537Y-00505* +X-01538Y-00516* +X-01537Y-00526* +X-01533Y-00535* +X-01527Y-00543* +X-01519Y-00549* +X-0151Y-00553* +X-015Y-00554* +X-01489Y-00553* +X-0148Y-00549* +X-01472Y-00543* +X-01466Y-00535* +X-01462Y-00526* +X-01461Y-00516* +X-01462Y-00505* +X-01464Y-00501* +X-01444Y-00482* +X-01441Y-00477* +X-0144Y-00471* +Y-00397* +X-01441Y-00391* +X-0144Y-00391* +X-0144Y-00391* +X-01435Y-00388* +X-01432Y-00384* +X-0145Y-00365* +X-01445Y-0036* +X-0145Y-00355* +X-01431Y-00336* +X-01434Y-00332* +X-01439Y-00329* +X-01445Y-00328* +X-01446Y-00329* +X-01451Y-00324* +X-0145Y-00323* +X-01451Y-00317* +X-01454Y-00312* +X-01456Y-00311* +X-01455Y-00309* +X-01454Y-00309* +X-01449Y-00308* +X-01445Y-0031* +X-01441Y-00311* +X-0144Y-00316* +X-01436Y-00321* +X-01431Y-00324* +X-01427Y-00325* +X-01426Y-0033* +X-01422Y-00335* +X-01418Y-00338* +X-01413Y-00339* +X-01412Y-00344* +X-01409Y-00349* +X-01404Y-00352* +X-01399Y-00353* +X-01398Y-00358* +X-01395Y-00363* +X-0139Y-00366* +X-01385Y-00367* +X-01384Y-00372* +X-01381Y-00377* +X-0138Y-00377* +X-01379Y-00384* +X-01381Y-00386* +X-01382Y-00391* +Y-00405* +X-01396Y-00419* +X-01396Y-00419* +X-01397Y-0042* +X-014* +X-01406Y-00421* +X-0141Y-00424* +X-01413Y-00429* +X-01414Y-00434* +Y-00458* +X-01413Y-00464* +X-0141Y-00469* +X-01409Y-00469* +Y-00476* +X-0141Y-00476* +X-01413Y-00481* +X-01414Y-00487* +Y-00491* +X-01361* +Y-00487* +X-01362Y-00481* +X-01365Y-00476* +X-01366Y-00476* +Y-00469* +X-01365Y-00469* +X-01362Y-00464* +X-01361Y-00458* +Y-00446* +X-01347Y-00432* +X-01344Y-00434* +X-01343Y-00435* +Y-00467* +X-01341Y-00473* +X-01338Y-00478* +X-01333Y-00483* +X-01333Y-00488* +X-01334Y-00488* +X-01339Y-00496* +X-01343Y-00504* +X-01344Y-00513* +X-01343Y-00522* +X-01339Y-0053* +X-01334Y-00537* +X-01327Y-00542* +X-01319Y-00546* +X-0131Y-00547* +X-01301Y-00546* +X-01292Y-00542* +X-01285Y-00537* +X-0128Y-0053* +X-01277Y-00522* +X-01275Y-00513* +X-01276Y-00505* +X-01274Y-005* +X-01158* +X-01144Y-00513* +X-01145Y-00514* +X-01146Y-00523* +X-01145Y-00531* +X-01141Y-0054* +X-01136Y-00547* +X-01129Y-00552* +X-0112Y-00556* +X-01112Y-00557* +X-01103Y-00556* +X-01094Y-00552* +X-01087Y-00547* +X-01082Y-0054* +X-01078Y-00531* +X-01078Y-00528* +X-01073Y-00526* +X-01024Y-00574* +X-01019Y-00578* +X-01014Y-00579* +X-0099* +X-00955Y-00613* +X-0095Y-00617* +X-00945Y-00618* +X-00886* +X-00886Y-00618* +X-00877Y-00622* +X-00869Y-00623* +X-0086Y-00622* +X-00851Y-00618* +X-00844Y-00613* +X-00839Y-00606* +X-00835Y-00597* +X-00834Y-00589* +X-00835Y-0058* +X-00839Y-00571* +X-00844Y-00564* +X-00851Y-00559* +X-0086Y-00555* +X-00869Y-00554* +X-00877Y-00555* +X-00886Y-00559* +X-00893Y-00564* +X-00898Y-00571* +X-00902Y-0058* +X-00903Y-00587* +X-00938* +X-00973Y-00553* +X-00978Y-00549* +X-00984Y-00548* +X-01007* +X-01084Y-00472* +X-01089Y-00468* +X-01095Y-00467* +X-01101* +X-01104Y-00465* +X-01106Y-0046* +X-01103Y-00455* +X-01102Y-0045* +X-01097Y-00449* +X-01092Y-00446* +X-01006Y-00532* +X-01001Y-00536* +X-00995Y-00537* +X-0085* +X-00717Y-00669* +X-00712Y-00673* +X-00707Y-00674* +X-00636* +X-00566Y-00744* +Y-00812* +X-00565Y-00817* +X-00562Y-00822* +X-00407Y-00977* +X-00408Y-00978* +X-00409Y-00987* +X-00408Y-00995* +X-00403Y-01002* +X-00396Y-01006* +X-00388Y-01008* +X-00333* +X-00325Y-01006* +X-00318Y-01002* +X-00313Y-00995* +X-00312Y-00987* +X-00313Y-00978* +X-00318Y-00972* +X-00325Y-00967* +X-00333Y-00965* +X-00375* +X-00377Y-00962* +X-00375Y-00958* +X-00333* +X-00325Y-00956* +X-00318Y-00952* +X-00313Y-00945* +X-00312Y-00937* +X-00313Y-00928* +X-00318Y-00922* +X-00325Y-00917* +X-00333Y-00915* +X-00388* +X-00396Y-00917* +X-00516Y-00797* +Y-00729* +X-00517Y-00723* +X-0052Y-00718* +X-00611Y-00628* +X-00616Y-00624* +X-00622Y-00623* +X-00692* +X-00824Y-00491* +X-00829Y-00487* +X-00835Y-00486* +X-00907* +X-0091Y-00482* +X-0091Y-00481* +X-00905Y-00478* +X-00902Y-00474* +X-00901Y-00468* +Y-00463* +X-00927* +Y-00448* +X-00901* +Y-00443* +X-00901Y-00441* +X-00898Y-00436* +X-00854* +X-00838Y-00452* +X-00833Y-00455* +X-00828Y-00456* +X-0072* +X-00715Y-00455* +X-0071Y-00452* +X-00695Y-00437* +X-00678* +X-00672Y-00436* +X-00668Y-00433* +X-00665Y-00428* +X-00664Y-00426* +X-00646* +X-00642Y-00426* +X-00636Y-00428* +X-00626Y-00429* +X-00616Y-00428* +X-00608Y-00424* +X-006Y-00419* +X-00594Y-00411* +X-0059Y-00402* +X-00589Y-00393* +X-0059Y-00383* +X-00594Y-00374* +X-006Y-00366* +X-00608Y-00361* +X-00616Y-00357* +X-00626Y-00356* +X-00636Y-00357* +X-00644Y-00361* +X-00652Y-00366* +X-00658Y-00374* +X-00662Y-00383* +X-00662Y-00384* +X-00667Y-00386* +X-00667Y-00386* +X-00668Y-00381* +X-00665Y-00376* +X-00664Y-0037* +Y-00366* +X-00717* +Y-0037* +X-00716Y-00376* +X-00713Y-00381* +X-00712Y-00381* +Y-00388* +X-00713Y-00388* +X-00716Y-00393* +X-00717Y-00399* +Y-00419* +X-00723Y-00424* +X-00726Y-00423* +X-00728Y-00422* +Y-00399* +X-00729Y-00393* +X-00732Y-00388* +X-00733Y-00388* +Y-00381* +X-00732Y-00381* +X-00729Y-00376* +X-00728Y-0037* +Y-00366* +X-00781* +Y-0037* +X-00781Y-00374* +X-00786Y-00376* +X-00786Y-00374* +X-00792Y-00366* +X-008Y-00361* +X-00809Y-00357* +X-00818Y-00356* +X-00828Y-00357* +X-00837Y-00361* +X-00844Y-00366* +X-0085Y-00374* +X-00854Y-00383* +X-00855Y-00389* +X-0099* +X-0101Y-00369* +X-0101Y-00364* +X-01008Y-00363* +X-01008Y-00361* +X-01003Y-00361* +X-00994Y-0037* +X-00991Y-00374* +X-00986Y-00377* +X-0098Y-00378* +X-00888* +X-00882Y-00377* +X-00877Y-00374* +X-00788Y-00285* +X-00695* +X-00659Y-00321* +X-00654Y-00324* +X-00648Y-00325* +X-00569* +X-00537Y-00357* +Y-00607* +X-00536Y-00613* +X-00532Y-00618* +X-00465Y-00685* +X-0046Y-00688* +X-00454Y-0069* +X-00431* +X-0043Y-00695* +X-00431Y-00695* +X-00441Y-00703* +X-00449Y-00713* +X-00454Y-00724* +X-00455Y-00737* +X-00454Y-0075* +X-00449Y-00761* +X-00441Y-00772* +X-00431Y-00779* +X-00419Y-00784* +X-00407Y-00786* +X-00394Y-00784* +X-00382Y-00779* +X-00372Y-00772* +X-00364Y-00761* +X-00359Y-0075* +X-00358Y-00737* +X-00359Y-00724* +X-00364Y-00713* +X-00372Y-00703* +X-00382Y-00695* +X-00383Y-00695* +X-00382Y-0069* +X-0035* +Y-00699* +X-00349Y-00706* +X-00345Y-00711* +X-0034Y-00715* +X-00333Y-00716* +Y-00721* +X-0034Y-00723* +X-00345Y-00726* +X-00349Y-00732* +X-0035Y-00738* +Y-00749* +X-00273* +Y-00738* +X-00274Y-00732* +X-00278Y-00726* +X-00283Y-00723* +X-0029Y-00721* +Y-00716* +X-00283Y-00715* +X-00278Y-00711* +X-00274Y-00706* +X-00273Y-00699* +Y-00664* +X-00273Y-0066* +X-0027Y-00655* +X-00262* +Y-00679* +X-00261Y-00685* +X-00257Y-00691* +X-00252Y-00694* +X-00245Y-00696* +Y-00701* +X-00252Y-00702* +X-00257Y-00706* +X-00261Y-00711* +X-00262Y-00718* +Y-00728* +X-00185* +Y-00718* +X-00186Y-00711* +X-0019Y-00706* +X-00195Y-00702* +X-00202Y-00701* +Y-00696* +X-00195Y-00694* +X-00191Y-00691* +X-00169Y-00712* +X-0017Y-00713* +X-00175Y-00724* +X-00176Y-00737* +X-00175Y-0075* +X-0017Y-00761* +X-00162Y-00772* +X-00152Y-00779* +X-0014Y-00784* +X-00127Y-00786* +X-00115Y-00784* +X-00103Y-00779* +X-00093Y-00772* +X-00085Y-00761* +X-0008Y-0075* +X-00079Y-00737* +X-0008Y-00726* +X-00077Y-00721* +X00077* +X0008Y-00726* +X00079Y-00737* +X0008Y-0075* +X00085Y-00761* +X00093Y-00772* +X00103Y-00779* +X00115Y-00784* +X00127Y-00786* +X0014Y-00784* +X00152Y-00779* +X00162Y-00772* +X0017Y-00761* +X00175Y-0075* +X00176Y-00737* +X00175Y-00724* +X0017Y-00713* +X00162Y-00703* +X00152Y-00695* +X0014Y-0069* +X00127Y-00688* +X00115Y-0069* +X00105Y-00694* +X00102Y-00692* +X00097Y-00691* +X-00097* +X-00102Y-00692* +X-00105Y-00694* +X-00115Y-0069* +X-00127Y-00688* +X-0014Y-0069* +X-00146Y-00692* +X-00185Y-00654* +Y-00643* +X-00184Y-00643* +X-0018Y-00641* +X-00176Y-00645* +X-00171Y-00648* +X-00165Y-0065* +X-00097* +X-00091Y-00648* +X-00086Y-00645* +X-00076Y-00635* +X00076* +X00086Y-00645* +X00091Y-00648* +X00097Y-0065* +X00158* +X00164Y-00648* +X00169Y-00645* +X00179Y-00635* +X00189* +Y-00659* +X0019Y-00666* +X00194Y-00671* +X00199Y-00675* +X00206Y-00676* +Y-00681* +X00199Y-00683* +X00194Y-00686* +X0019Y-00692* +X00189Y-00698* +Y-00709* +X00266* +Y-00698* +X00265Y-00692* +X00261Y-00686* +X00256Y-00683* +X00249Y-00681* +Y-00676* +X00256Y-00675* +X00261Y-00671* +X00265Y-00666* +X00266Y-00659* +Y-00635* +X00355* +X00365Y-00645* +X0037Y-00648* +X00376Y-0065* +X00391* +Y-00691* +X00382Y-00695* +X00372Y-00703* +X00364Y-00713* +X00359Y-00724* +X00358Y-00737* +X00359Y-0075* +X00364Y-00761* +X00372Y-00772* +X00382Y-00779* +X00394Y-00784* +X00407Y-00786* +X00419Y-00784* +X00431Y-00779* +X00441Y-00772* +X00449Y-00761* +X00454Y-0075* +X00455Y-00737* +X00454Y-00724* +X00449Y-00713* +X00441Y-00703* +X00431Y-00695* +X00422Y-00691* +Y-0065* +X00437* +X00443Y-00648* +X00448Y-00645* +X00458Y-00635* +X00554* +X0059Y-00671* +X00595Y-00675* +X00601Y-00676* +X00662* +X00667Y-00681* +X00667Y-00684* +X00663Y-00688* +X00662Y-00688* +X0065Y-0069* +X00638Y-00695* +X00628Y-00703* +X0062Y-00713* +X00615Y-00724* +X00614Y-00737* +X00615Y-0075* +X0062Y-00761* +X00628Y-00772* +X00638Y-00779* +X0065Y-00784* +X00662Y-00786* +X00675Y-00784* +X00687Y-00779* +X00697Y-00772* +X00697Y-00771* +X00702Y-00773* +Y-00816* +X00635* +X00631Y-00816* +X00578* +X00575Y-00816* +X00449* +X00441Y-00817* +X00436Y-00814* +X00428Y-00812* +X00371* +X00346Y-00787* +Y-00782* +X00345Y-00776* +X00342Y-00771* +X00341Y-00771* +Y-00764* +X00342Y-00764* +X00345Y-00759* +X00346Y-00753* +Y-00749* +X00293* +Y-00753* +X00294Y-00759* +X00297Y-00764* +X00298Y-00764* +Y-00771* +X00297Y-00771* +X00294Y-00776* +X00293Y-0078* +X00289Y-00782* +X00288Y-00782* +X00285Y-0078* +X00276Y-00776* +X00268Y-00775* +X00259Y-00776* +X0025Y-0078* +X00243Y-00785* +X00238Y-00792* +X00234Y-00801* +X00233Y-0081* +X00234Y-00818* +X00238Y-00827* +X00243Y-00834* +X0025Y-00839* +X00259Y-00843* +X00259Y-00843* +Y-00862* +X0026Y-00868* +X00264Y-00873* +X00287Y-00896* +X00292Y-009* +X00298Y-00901* +X00332* +X00334Y-009* +X00335Y-009* +X00335Y-00901* +X0038* +Y-00916* +X0034* +X00342Y-0092* +Y-00923* +X00339Y-00928* +X00338Y-00934* +X00339Y-0094* +X00341Y-00943* +X00342Y-00947* +X00341Y-00951* +X00339Y-00953* +X00338Y-0096* +X00339Y-00966* +X00342Y-00971* +Y-00974* +X00339Y-00979* +X00338Y-00985* +X00339Y-00991* +X00342Y-00997* +X00348Y-01* +X00354Y-01001* +X00407* +X00411Y-01001* +X00425* +X00426Y-01002* +X00427Y-0101* +X00431Y-01019* +X00436Y-01026* +X00443Y-01031* +X00452Y-01035* +X00461Y-01036* +X00469Y-01035* +X00478Y-01031* +X00485Y-01026* +X0049Y-01019* +X00494Y-0101* +X00494Y-01007* +X00499Y-01005* +X00517Y-01023* +Y-01095* +X00518Y-01101* +X00522Y-01107* +X00634Y-01219* +X00639Y-01223* +X00646Y-01224* +X01013* +X0102Y-01223* +X01025Y-01219* +X01078Y-01166* +X01081Y-01161* +X01083Y-01155* +Y-00998* +X01081Y-00992* +X01078Y-00987* +X01055Y-00964* +Y-00925* +X01058Y-0092* +X0106Y-00912* +Y-00861* +X01058Y-00852* +X01054Y-00846* +X01047Y-00841* +X01039Y-00839* +X0103Y-00841* +X01024Y-00846* +X01019Y-00852* +X01017Y-00861* +Y-00912* +X01019Y-0092* +X01022Y-00925* +Y-00971* +X01023Y-00977* +X01027Y-00982* +X0105Y-01005* +Y-01023* +X01046Y-01025* +Y-01071* +Y-01117* +X0105Y-0112* +Y-01148* +X01007Y-01191* +X00943* +X00941Y-01187* +X01Y-01127* +X01004Y-01122* +X01005Y-01116* +Y-0111* +X01008Y-01105* +X0101Y-01097* +Y-01046* +X01008Y-01037* +X01004Y-01031* +X00997Y-01026* +X00996Y-01025* +X00995Y-01021* +X00996Y-01019* +X01Y-01011* +X01001Y-01002* +X01Y-00993* +X00996Y-00985* +X00991Y-00978* +X00984Y-00972* +X00975Y-00969* +X00967Y-00968* +X00958Y-00969* +X00949Y-00972* +X00942Y-00978* +X00937Y-00985* +X00933Y-00993* +X00932Y-01002* +X00933Y-01011* +X00937Y-01019* +X00938Y-01021* +X00934Y-01025* +X0093Y-01026* +X00924Y-01031* +X00919Y-01037* +X00917Y-01046* +Y-01097* +X00919Y-01105* +X00924Y-01112* +X0093Y-01116* +X00939Y-01118* +X00947Y-01116* +X00954Y-01112* +X00958Y-01105* +X0096Y-01097* +Y-01058* +X00963Y-01056* +X00967Y-01058* +Y-01097* +X00969Y-01105* +X00972Y-01109* +X00912Y-01169* +X00661* +X00572Y-01079* +Y-01005* +X00577Y-01001* +X00578Y-01001* +X00594* +X00596Y-01006* +X00594Y-01009* +X0059Y-01018* +X00589Y-01027* +X0059Y-01035* +X00594Y-01044* +X00599Y-01051* +X00606Y-01056* +X00615Y-0106* +X00624Y-01061* +X00632Y-0106* +X00641Y-01056* +X00645Y-01053* +X0065Y-01056* +Y-01057* +X00651Y-01064* +X00655Y-01069* +X0066Y-01073* +X00667Y-01074* +Y-01079* +X0066Y-0108* +X00655Y-01084* +X00651Y-01089* +X0065Y-01096* +Y-01106* +X00727* +Y-01096* +X00726Y-01089* +X00722Y-01084* +X00717Y-0108* +X0071Y-01079* +Y-01074* +X00717Y-01073* +X00722Y-01069* +X00726Y-01064* +X00727Y-01057* +Y-01021* +X00726Y-01015* +X00722Y-01009* +X00717Y-01005* +X0071Y-01004* +X00702* +X00701Y-01002* +X007Y-00999* +X00702Y-00995* +X00704Y-0099* +Y-00984* +X00712Y-00976* +X00713* +X00714Y-00976* +X00718Y-00977* +X00762* +X00767Y-00976* +X0077Y-00975* +X00771Y-00974* +X00777Y-0097* +X00808Y-0094* +X00841* +X00843Y-00945* +X0083Y-00958* +X00826Y-00964* +X00824Y-00971* +Y-00981* +X00802* +X00795Y-00982* +X0079Y-00986* +X00786Y-00991* +X00785Y-00998* +Y-01033* +X00786Y-0104* +X0079Y-01045* +X00795Y-01049* +X00802Y-0105* +Y-01055* +X00795Y-01057* +X0079Y-0106* +X00786Y-01066* +X00785Y-01072* +Y-01108* +X00786Y-01115* +X0079Y-0112* +X00795Y-01124* +X00802Y-01125* +X00845* +X00852Y-01124* +X00857Y-0112* +X00861Y-01115* +X00862Y-0111* +X00868* +X00868Y-0111* +X00871Y-01114* +X00875Y-01117* +X0088Y-01118* +X00897* +X00902Y-01117* +X00906Y-01114* +X00909Y-0111* +X0091Y-01105* +Y-01037* +X00909Y-01034* +Y-01027* +X00912Y-01025* +X00917Y-01018* +X00921Y-0101* +X00922Y-01001* +X00921Y-00992* +X00917Y-00983* +X00912Y-00976* +X00905Y-00971* +X00896Y-00968* +X00888Y-00966* +X00882Y-00967* +X0088Y-00962* +X00902Y-0094* +X00906Y-00934* +X00908Y-00926* +Y-0092* +X00908Y-0092* +X0091Y-00912* +Y-00861* +X00908Y-00852* +X00908Y-00852* +Y-00818* +X0091Y-00814* +X00911Y-00808* +X00916* +X00918Y-00814* +X00918Y-00815* +Y-00856* +X00917Y-00861* +Y-00912* +X00919Y-0092* +X00924Y-00927* +X0093Y-00931* +X00939Y-00933* +X00947Y-00931* +X00954Y-00927* +X00958Y-0092* +X0096Y-00912* +Y-00861* +X00959Y-00856* +Y-00825* +X00965* +X00968Y-00828* +Y-00856* +X00967Y-00861* +Y-00912* +X00969Y-0092* +X00974Y-00927* +X0098Y-00931* +X00989Y-00933* +X00997Y-00931* +X01004Y-00927* +X01008Y-0092* +X0101Y-00912* +Y-00861* +X01009Y-00856* +Y-00837* +X01133Y-00712* +X01149* +X01154Y-00712* +X01158Y-00709* +X01161Y-00705* +X01162Y-007* +Y-00656* +X01161Y-00651* +X01158Y-00647* +X01154Y-00644* +X01149Y-00643* +X01133* +X01128Y-00644* +X01124Y-00647* +X01123Y-00648* +X01117* +X01104Y-00634* +X01106Y-0063* +X01112* +X01117Y-00629* +X01121Y-00626* +X01124Y-00622* +X01125Y-00617* +Y-00602* +X01176* +X01184Y-006* +X0119Y-00596* +X01201Y-00585* +X01228* +X01233Y-00584* +X01237Y-00581* +X0124Y-00577* +X01241Y-00572* +Y-00555* +X01244Y-00552* +X01346* +X01355Y-00551* +X01363Y-00547* +X01371Y-00542* +X01424Y-00488* +X0147* +X01478Y-00487* +X01484Y-00482* +X01489Y-00476* +X0149Y-00468* +Y-00371* +X01489Y-00364* +X01484Y-00357* +X01478Y-00353* +X0147Y-00351* +X01434* +Y-00337* +X01435Y-00337* +X01442Y-00327* +X01447Y-00315* +X01449Y-00302* +Y-00263* +X01447Y-0025* +X01442Y-00239* +X01435Y-00229* +X01425Y-00221* +X01413Y-00216* +X014Y-00214* +X01388Y-00216* +X01376Y-00221* +X01366Y-00229* +X01358Y-00239* +X01353Y-0025* +X01351Y-00263* +Y-00302* +X01353Y-00315* +X01358Y-00327* +X01366Y-00337* +X01366Y-00337* +Y-00367* +X01365Y-00371* +Y-00451* +X01332Y-00483* +X01322* +X0132Y-00478* +X01323Y-00474* +X01324Y-00469* +Y-00453* +X01323Y-00448* +X0132Y-00444* +X01316Y-00441* +X01311Y-0044* +X01267* +X01262Y-00441* +X01258Y-00444* +X01255Y-00448* +X01254Y-00453* +Y-00469* +X01255Y-00474* +X01258Y-00478* +X01256Y-00483* +X0118* +X01177Y-00478* +X01178Y-00477* +X01179Y-00472* +Y-00456* +X01178Y-00451* +X01177Y-00449* +X01179Y-00444* +X01181* +X01184Y-00445* +X01228* +X01233Y-00444* +X01237Y-00441* +X0124Y-00437* +X01241Y-00432* +Y-00415* +X0124Y-00411* +X01237Y-00406* +X01233Y-00404* +X01228Y-00403* +X01184* +X01183Y-00403* +X01179Y-004* +X01179Y-00398* +X01179Y-00397* +Y-00381* +X01178Y-00376* +X01175Y-00372* +X01171Y-00369* +X01166Y-00368* +X01122* +X01119Y-00369* +X01095* +X01092Y-00363* +X01087Y-00356* +X0108Y-00351* +X01071Y-00347* +X01063Y-00346* +X01054Y-00347* +X01045Y-00351* +X01038Y-00356* +X01038Y-00357* +X01027* +Y-00338* +X01026Y-00332* +X01022Y-00326* +X01016Y-00322* +X0101Y-00321* +X00974* +X00967Y-00322* +X00962Y-00326* +X00958Y-00332* +X00957Y-00338* +X00952* +X00951Y-00332* +X00947Y-00326* +X00942Y-00322* +X00935Y-00321* +X00899* +X00893Y-00322* +X00887Y-00326* +X00883Y-00332* +X00882Y-00338* +Y-00366* +X00842Y-00406* +X00826* +X00821Y-00407* +X00817Y-0041* +X00814Y-00414* +X00813Y-00419* +Y-00436* +X0081Y-00439* +X00723* +X00714Y-0044* +X00705Y-00444* +X00703Y-00445* +X00682* +X00677Y-00446* +X00672Y-00449* +X00671Y-00451* +X00665* +X00664Y-00449* +X00659Y-00446* +X00654Y-00445* +X00649* +Y-00472* +X00642* +Y-00479* +X00615* +Y-00485* +X00617Y-0049* +X0062Y-00495* +X00624Y-00498* +X0063Y-00499* +X00642* +X00644Y-00504* +X00622Y-00525* +X0044* +X00435Y-00521* +Y-00461* +X00436Y-0046* +X00436Y-00459* +X00529* +X00537Y-00458* +X00544Y-00453* +X00566Y-00431* +X00571Y-00424* +X00573Y-00416* +Y-00365* +X00572Y-0036* +Y-00343* +X00571Y-00338* +X00568Y-00334* +X00564Y-00331* +X00559Y-0033* +X00543* +X00538Y-00331* +X00534Y-00334* +X00531Y-00338* +X0053Y-00343* +Y-0036* +X00529Y-00365* +Y-00406* +X0052Y-00416* +X00436* +X00436Y-00415* +X00435Y-00414* +Y-00365* +X00434Y-0036* +Y-00343* +X00433Y-00338* +X0043Y-00334* +X00426Y-00331* +X00421Y-0033* +X00405* +X004Y-00331* +X00396Y-00334* +X00393Y-00338* +X00392Y-00343* +Y-0036* +X00391Y-00365* +Y-00415* +X0039Y-00416* +X00384* +X00383Y-00415* +X00379Y-00412* +X00373Y-00411* +X00369* +Y-00437* +Y-00464* +X00373* +X00379Y-00463* +X00383Y-0046* +X00389Y-00461* +X00391Y-00464* +Y-00514* +X00382Y-00518* +X00373Y-00525* +X00161* +X00152Y-00518* +X0014Y-00513* +X00127Y-00511* +X00115Y-00513* +X00103Y-00518* +X00094Y-00525* +X-00081* +Y-00462* +X-0008Y-00462* +X-00079Y-00461* +X-00063* +X-00063Y-00461* +X-00055Y-00463* +X-00003* +X00004Y-00461* +X00011Y-00457* +X00015Y-0045* +X00017Y-00442* +X00015Y-00433* +X00011Y-00427* +X00004Y-00422* +X-00003Y-0042* +X-00055* +X-00063Y-00422* +X-00063Y-00422* +X-00077* +X-0008Y-00417* +X-00081Y-00417* +Y-0041* +X-0008Y-0041* +X-00077Y-00405* +X-00071Y-00404* +X-0007Y-00407* +X-00063Y-00411* +X-00055Y-00413* +X-00037* +Y-00392* +Y-0037* +X-00055* +X-00063Y-00372* +X-0007Y-00377* +X-00071Y-00378* +X-00076Y-00376* +Y-00375* +X-00077Y-0037* +X-0008Y-00365* +X-00084Y-00362* +X-0009Y-00361* +X-00095* +Y-00387* +X-00103* +Y-00395* +X-00129* +Y-00399* +X-00128Y-00405* +X-00125Y-0041* +X-00124Y-0041* +Y-00417* +X-00125Y-00417* +X-00128Y-00422* +X-00129Y-00428* +Y-00452* +X-00128Y-00457* +X-00125Y-00462* +X-00124Y-00462* +Y-00508* +X-00127Y-00511* +X-0014Y-00513* +X-00152Y-00518* +X-00161Y-00525* +X-00276* +Y-00432* +X-00275Y-00432* +X-00274Y-0043* +X-00268* +X-00267Y-00432* +X-00263Y-00435* +X-00257Y-00436* +X-00253* +Y-00409* +Y-00382* +X-00257* +X-00263Y-00383* +X-00267Y-00386* +X-00267Y-00387* +X-00273Y-00387* +X-00276Y-00383* +Y-00348* +X-00277Y-00343* +Y-00326* +X-00278Y-00321* +X-00281Y-00316* +X-00285Y-00314* +X-0029Y-00313* +X-00306* +X-00311Y-00314* +X-00315Y-00316* +X-00318Y-00321* +X-00319Y-00326* +Y-00343* +X-0032Y-00348* +Y-00387* +X-00323Y-00391* +X-00324Y-00396* +Y-00422* +X-00323Y-00427* +X-0032Y-00431* +Y-00525* +X-00373* +X-00382Y-00518* +X-00394Y-00513* +X-00406Y-00511* +X-00407Y-00511* +X-0041Y-00507* +X-00408Y-00503* +X-00407Y-00495* +X-00408Y-00486* +X-00412Y-00477* +X-00417Y-0047* +X-00424Y-00465* +X-00433Y-00461* +X-00442Y-0046* +X-0045Y-00461* +X-00459Y-00465* +X-00461Y-00467* +X-00466Y-00464* +Y-00334* +X-00467Y-00328* +X-00471Y-00323* +X-00524Y-0027* +X-00522Y-00265* +X-00458* +X-00394Y-00329* +Y-0037* +X-00393Y-00375* +X-0039Y-00379* +X-00386Y-00381* +X-00381Y-00382* +X-00365* +X-0036Y-00381* +X-00356Y-00379* +X-00353Y-00375* +X-00352Y-0037* +Y-00326* +X-00353Y-00321* +X-00356Y-00316* +X-0036Y-00314* +X-00365Y-00313* +X-00367* +X-0044Y-00239* +X-00442Y-00238* +X-00443Y-00231* +X-0043Y-00218* +X-00301* +X-00288Y-00231* +X-00291Y-00235* +X-00292Y-00235* +X-003Y-00236* +X-00309Y-0024* +X-0031Y-00241* +X-00315Y-00239* +X-00315Y-00238* +X-00318Y-00234* +X-00322Y-00231* +X-00327Y-0023* +X-00344* +X-00349Y-00231* +X-00353Y-00234* +X-00356Y-00238* +X-00357Y-00243* +Y-00287* +X-00356Y-00292* +X-00353Y-00296* +X-00349Y-00299* +X-00344Y-003* +X-00327* +X-00322Y-00299* +X-00318Y-00296* +X-00312Y-00296* +X-00309Y-00299* +X-003Y-00303* +X-00292Y-00304* +X-00283Y-00303* +X-00274Y-00299* +X-00267Y-00294* +X-00262Y-00287* +X-00258Y-00278* +X-00257Y-0027* +X-00258Y-00261* +X-00261Y-00253* +X-0026Y-0025* +X-00259Y-00248* +X-00167* +X-00161Y-00247* +X-00156Y-00244* +X-00131Y-00219* +X00024* +X0005Y-00244* +X00054Y-00247* +X0006Y-00248* +X00191* +X00229Y-00287* +Y-00369* +X0023Y-00375* +X00234Y-0038* +X00257Y-00403* +X00262Y-00407* +X00268Y-00408* +X0031* +X00316Y-00407* +X00321Y-00403* +X00326Y-00399* +X0033Y-004* +X00346* +X00351Y-00399* +X00355Y-00396* +X00358Y-00392* +X00359Y-00387* +Y-00343* +X00358Y-00338* +X00355Y-00334* +X00351Y-00331* +X00346Y-0033* +X00333* +X00333Y-00325* +X00335Y-00325* +X00344Y-00321* +X00351Y-00316* +X00353Y-00313* +X00358* +X00362Y-00316* +X00367Y-00317* +X00384* +X00389Y-00316* +X00393Y-00313* +X00396Y-00309* +X00397Y-00304* +Y-00287* +X00397Y-00282* +X00397Y-00278* +Y-0026* +X00396Y-00255* +X00393Y-00251* +X00389Y-00248* +X00384Y-00247* +X00367* +X00362Y-00248* +X00358Y-00251* +X00355Y-00255* +X00354Y-0026* +Y-00264* +X00354Y-00265* +X00349Y-00266* +X00344Y-00262* +X00335Y-00258* +X00327Y-00257* +X00318Y-00258* +X00309Y-00262* +X00302Y-00267* +X00297Y-00274* +X00293Y-00283* +X00292Y-00292* +X00293Y-003* +X00297Y-00309* +X00302Y-00316* +X00309Y-00321* +X00318Y-00325* +X00327Y-00326* +X00327Y-00331* +X00325Y-00331* +X00321Y-00334* +X00318Y-00338* +X00317Y-00343* +Y-00364* +X00304Y-00377* +X00274* +X0026Y-00363* +Y-00281* +X00259Y-00275* +X00255Y-0027* +X00208Y-00222* +X00203Y-00219* +X00197Y-00218* +X00154* +X00152Y-00213* +X00167Y-00198* +X00352* +X00461Y-00307* +Y-00332* +X00459Y-00334* +X00456Y-00338* +X00455Y-00343* +Y-00387* +X00456Y-00392* +X00459Y-00396* +X00463Y-00399* +X00468Y-004* +X00484* +X00489Y-00399* +X00493Y-00396* +X00496Y-00392* +X00497Y-00387* +Y-00343* +X00496Y-00338* +X00493Y-00334* +X00491Y-00332* +Y-00315* +X00495Y-00314* +X00496Y-00313* +X005Y-00316* +X00505Y-00317* +X00522* +X00527Y-00316* +X00531Y-00313* +X00534Y-00309* +X00535Y-00304* +Y-00287* +X00535Y-00282* +Y-0028* +X00535Y-00275* +Y-0026* +X00534Y-00255* +X00531Y-00251* +X00527Y-00248* +X00522Y-00247* +X00515* +X00511Y-00243* +X00511Y-00243* +X0051Y-00234* +X00506Y-00225* +X00501Y-00218* +X00494Y-00213* +X00485Y-00209* +X00477Y-00208* +X00468Y-00209* +X00459Y-00213* +X00452Y-00218* +X00447Y-00225* +X00443Y-00234* +X00443Y-00239* +X00437Y-00241* +X00369Y-00172* +X00364Y-00169* +X00358Y-00168* +X00243* +X0024Y-00163* +X00244Y-00158* +X00248Y-00149* +X00249Y-00139* +X00248Y-00128* +X00244Y-00119* +X00238Y-00111* +X0023Y-00105* +X00221Y-00101* +X00211Y-001* +X002Y-00101* +X00191Y-00105* +X00183Y-00111* +X00178Y-00118* +X0017* +X00162Y-0012* +X00155Y-00124* +X00143Y-00136* +X00138Y-00134* +X00137Y-00128* +X00133Y-00119* +X00128Y-00113* +X0013Y-00108* +X00131Y-00107* +X00138Y-00103* +X00177Y-00064* +X00182Y-00064* +X00183Y-00066* +X00191Y-00072* +X002Y-00076* +X00211Y-00077* +X00221Y-00076* +X0023Y-00072* +X00238Y-00066* +X00244Y-00058* +X00248Y-00049* +X00249Y-00039* +X00248Y-00028* +X00244Y-00019* +X00238Y-00011* +X0023Y-00005* +X00221Y-00001* +X00211Y0* +X002Y-00001* +X00191Y-00005* +X00183Y-00011* +X00178Y-00018* +X00174* +X00166Y-0002* +X00159Y-00024* +X00143Y-00041* +X00138Y-00038* +X00137Y-00028* +X00133Y-00019* +X00129Y-00013* +X00131Y-00008* +X00136* +X00144Y-00007* +X0015Y-00002* +X00185Y00031* +X00191Y00027* +X002Y00023* +X00211Y00022* +X00221Y00023* +X0023Y00027* +X00238Y00033* +X00244Y00041* +X00248Y0005* +X00249Y00056* +X00254Y00058* +X00283Y00029* +X0029Y00025* +X00298Y00023* +X00394* +X00398Y00024* +X004Y00023* +X00411Y00022* +X00421Y00023* +X0043Y00027* +X00438Y00033* +X00444Y00041* +X00448Y0005* +X00449Y00061* +X00448Y00071* +X00444Y0008* +X00438Y00088* +X0043Y00094* +X00421Y00098* +X00411Y00099* +X004Y00098* +X00391Y00094* +X00383Y00088* +X00377Y0008* +X00373Y00071* +X00372Y00064* +X00306* +X00245Y00124* +X0024Y00128* +X00239Y0013* +X00239Y00132* +X00239Y00134* +X00244Y00141* +X00248Y0015* +X00249Y00156* +X00254Y00158* +X00286Y00126* +X00293Y00122* +X00301Y0012* +X00391* +X00398Y00122* +X004Y00123* +X004Y00123* +X00411Y00122* +X00421Y00123* +X0043Y00127* +X00435Y00131* +X0044Y00128* +Y00104* +X00441Y00098* +X00444Y00093* +X00521Y00016* +X00519Y00012* +X00488* +X00481Y00011* +X00476Y00007* +X00472Y00001* +X00471Y-00004* +Y-00018* +X00443* +X00438Y-00011* +X0043Y-00005* +X00421Y-00001* +X00411Y0* +X004Y-00001* +X00391Y-00005* +X00383Y-00011* +X00377Y-00019* +X00373Y-00028* +X00372Y-00039* +X00373Y-00049* +X00377Y-00058* +X00383Y-00066* +X00391Y-00072* +X004Y-00076* +X00411Y-00077* +X00421Y-00076* +X0043Y-00072* +X00438Y-00066* +X00443Y-00059* +X0048* +X0048Y-00059* +X0048Y-00064* +X00476Y-00067* +X00472Y-00072* +X00471Y-00079* +Y-00115* +X00472Y-00121* +X00476Y-00127* +X00481Y-00131* +X00488Y-00132* +X00526* +X00529Y-00137* +X00528Y-00138* +X00527Y-00143* +Y-00158* +X00548* +Y-00165* +X00556* +Y-002* +X00556* +X0056Y-00199* +X00565Y-00202* +Y-00222* +X00564Y-00226* +Y-0027* +X00565Y-00275* +X00568Y-00279* +X00572Y-00282* +X00577Y-00283* +X00594* +X00599Y-00282* +X00603Y-00279* +X00606Y-00275* +X00607Y-0027* +Y-00226* +X00606Y-00222* +Y-00202* +X00611Y-00199* +X00615Y-002* +X00631* +X00636Y-00199* +X0064Y-00196* +X00643Y-00192* +X00644Y-00187* +Y-00157* +X00649Y-00155* +X00667Y-00174* +Y-00349* +X00668Y-00355* +X00672Y-0036* +X00713Y-00401* +X00718Y-00404* +X00724Y-00405* +X00733* +X00734Y-00407* +X00738Y-0041* +X00743Y-00411* +X00787* +X00792Y-0041* +X00796Y-00407* +X00799Y-00403* +X008Y-00398* +Y-00382* +X00799Y-00377* +X00796Y-00373* +X00792Y-0037* +X00787Y-00369* +X00743* +X00738Y-0037* +X00734Y-00373* +X00728Y-00373* +X00698Y-00343* +Y-00168* +X00697Y-00162* +X00693Y-00157* +X0059Y-00053* +Y00017* +X00588Y00023* +X00585Y00028* +X0049Y00122* +Y00287* +X00489Y00293* +X00486Y00298* +X00448Y00336* +X00443Y00339* +X00437Y0034* +X00328* +X00328Y00341* +X00326Y00345* +X00608Y00627* +X00654* +X00657Y00622* +X00655Y0062* +X00651Y00611* +X0065Y00603* +X00651Y00594* +X00654Y00588* +X00649Y00584* +X00646Y00579* +X00645Y00573* +Y00535* +X00644Y00535* +X00639Y00538* +Y00555* +X00638Y00561* +X00634Y00567* +X00629Y00571* +X00622Y00572* +X00608* +Y00537* +X00601* +Y00529* +X00562* +Y00519* +X00563Y00512* +X00567Y00507* +X00572Y00503* +X00579Y00502* +Y00497* +X00572Y00496* +X00567Y00492* +X00563Y00487* +X00563Y00485* +X00557Y00483* +X00554Y00485* +X00545Y00489* +X00537Y0049* +X00528Y00489* +X00519Y00485* +X00512Y0048* +X00507Y00473* +X00503Y00464* +X00502Y00456* +X00503Y00447* +X00507Y00438* +X00512Y00431* +X00519Y00426* +X00521Y00425* +Y00359* +X00522Y00354* +X00526Y00349* +X00555Y00319* +X00555Y00317* +X00549Y00314* +X00547Y00315* +X00539Y00316* +X0053Y00315* +X00521Y00311* +X00514Y00306* +X00509Y00299* +X00505Y0029* +X00504Y00282* +X00505Y00273* +X00509Y00264* +X00514Y00257* +X00517Y00255* +Y00151* +X00518Y00145* +X00522Y0014* +X00557Y00105* +X00562Y00101* +X00568Y001* +X00663* +X00664Y00096* +X00668Y0009* +X00673Y00086* +X0068Y00085* +X00723* +X0073Y00086* +X00735Y0009* +X00739Y00096* +X0074Y00102* +Y00137* +X00756Y00153* +X00757Y00153* +X00761Y0015* +Y00145* +X00757Y00142* +X00753Y00137* +X00752Y0013* +Y00087* +X00753Y0008* +X00757Y00075* +X00763Y00071* +X00769Y0007* +X00805* +X00812Y00071* +X00817Y00075* +X00821Y0008* +X00822Y00087* +X00827* +X00828Y0008* +X00832Y00075* +X00837Y00071* +X00844Y0007* +X00854* +Y00109* +X00862* +Y00116* +X00897* +Y0013* +X00898Y00131* +X00902Y00132* +X00909Y00125* +Y00098* +X00909Y00095* +Y00062* +X00848Y00001* +X00783* +X00777Y0* +X00772Y-00003* +X00759Y-00016* +X00755Y-00021* +X00754Y-00027* +Y-00082* +X00755Y-00087* +X00759Y-00092* +X00776Y-00109* +X00775Y-00111* +Y-00147* +X00777Y-00153* +X0078Y-00159* +X00783Y-0016* +Y-00167* +X0078Y-00168* +X00777Y-00174* +X00775Y-0018* +Y-00216* +X00777Y-00223* +X0078Y-00228* +X00786Y-00232* +X00792Y-00233* +Y-00238* +X00786Y-00239* +X0078Y-00243* +X00777Y-00248* +X00775Y-00255* +Y-00291* +X00777Y-00297* +X0078Y-00303* +X00786Y-00307* +X00792Y-00308* +X00836* +X00843Y-00307* +X00848Y-00303* +X00852Y-00297* +X00853Y-00291* +Y-00289* +X00959* +X00965Y-00288* +X0097Y-00285* +X01022Y-00232* +X01025Y-00233* +X01093* +X01099Y-00232* +X01104Y-00228* +X01107Y-00224* +X01108Y-00218* +Y-00177* +X01107Y-00172* +X01104Y-00167* +X01099Y-00164* +X01093Y-00163* +X01025* +X01019Y-00164* +X01015Y-00167* +X01012Y-00172* +X01011Y-00177* +Y-00201* +X00953Y-00259* +X00853* +Y-00255* +X00852Y-00248* +X00848Y-00243* +X00843Y-00239* +X00836Y-00238* +Y-00233* +X00843Y-00232* +X00848Y-00228* +X00852Y-00223* +X00853Y-00216* +Y-00198* +X00858Y-00196* +X00858Y-00196* +X00864Y-002* +X0087Y-00201* +X00933* +X0094Y-002* +X00945Y-00196* +X00949Y-00191* +X0095Y-00184* +Y-00128* +X00974Y-00104* +X01002* +X01005Y-00105* +X01006Y-00105* +X01011Y-00108* +Y-00128* +X01012Y-00133* +X01015Y-00138* +X01019Y-00141* +X01025Y-00142* +X01093* +X01099Y-00141* +X01104Y-00138* +X01107Y-00133* +X01108Y-00128* +Y-00087* +X01107Y-00081* +X01104Y-00077* +X01099Y-00073* +X01093Y-00072* +X01025* +X01024Y-00073* +X0102Y-00069* +Y00015* +X01105Y001* +X01109Y00105* +X0111Y00111* +Y00238* +X01128* +X01135Y00239* +X0114Y00243* +X01142Y00246* +X01146Y00245* +X01147Y00244* +X01148Y00239* +X01152Y00233* +X01157Y0023* +X01163Y00229* +X0117Y0023* +X01172Y00232* +X01176Y00233* +X0118Y00232* +X01183Y0023* +X01189Y00229* +X01195Y0023* +X012Y00233* +X01203* +X01208Y0023* +X01215Y00229* +X01221Y0023* +X01224Y00232* +X01227Y00233* +X01231Y0023* +X01231Y00225* +X01228Y00221* +X01224Y00212* +X01223Y00204* +X01224Y00195* +X01228Y00186* +X01233Y00179* +X0124Y00174* +X01249Y0017* +X01249Y0017* +X01249Y00165* +X01242* +Y0013* +X01235* +Y00123* +X01196* +Y00112* +X01197Y00106* +X01201Y001* +X01206Y00097* +X01213Y00095* +Y00091* +X01206Y00089* +X01201Y00086* +X01197Y0008* +X01196Y00074* +Y00038* +X01197Y00031* +X01201Y00026* +Y-00012* +X012Y-00012* +X01193Y-00022* +X01188Y-00034* +X01186Y-00047* +Y-00086* +X01188Y-00099* +X01193Y-0011* +X012Y-0012* +X0121Y-00128* +X01222Y-00133* +X01235Y-00135* +X01247Y-00133* +X01259Y-00128* +X01269Y-0012* +X01277Y-0011* +X01282Y-00099* +X01284Y-00086* +Y-00047* +X01282Y-00034* +X01277Y-00022* +X01269Y-00012* +X01269Y-00012* +Y00021* +X01288* +X01291Y00021* +X01334* +X01341Y00022* +X01346Y00026* +X0135Y00031* +X01351Y00038* +Y00074* +X0135Y0008* +X01346Y00086* +X01341Y00089* +X01334Y00091* +Y00095* +X01341Y00097* +X01346Y001* +X0135Y00106* +X01351Y00112* +Y00123* +X01312* +Y00138* +X01351* +Y00148* +X0135Y00155* +X01346Y0016* +X01341Y00164* +X01334Y00165* +X01326* +X01325Y0017* +X01329Y00173* +X01329Y00174* +X01336* +X01336Y00173* +X01341Y0017* +X01347Y00169* +X01351* +Y00196* +Y00222* +X01347* +X01341Y00221* +X01336Y00218* +X01336Y00217* +X01329* +X01329Y00218* +X01324Y00221* +X01318Y00222* +X01309* +X01308Y00227* +X01312Y0023* +X01317Y00229* +X01323Y0023* +X01328Y00233* +X01331* +X01336Y0023* +X01342Y00229* +X01349Y0023* +X01352Y00232* +X01355Y00233* +X01359Y00232* +X01362Y0023* +X01368Y00229* +X01374Y0023* +X0138Y00233* +X01382* +X01387Y0023* +X01394Y00229* +X014Y0023* +X01405Y00233* +X01409Y00239* +X0141Y00245* +Y00298* +X01409Y00302* +Y00432* +X01426Y00449* +X0143Y00454* +X01431Y0046* +Y0052* +X0146Y00549* +X01464Y00554* +X01465Y0056* +Y00593* +X01464Y00599* +X0146Y00604* +X01446Y00618* +X01446Y00618* +X0145Y00627* +X01451Y00636* +X0145Y00644* +X01446Y00653* +X01441Y0066* +X01434Y00665* +X01425Y00669* +X01417Y0067* +X01408Y00669* +X014Y00665* +X01395Y00667* +X01395Y00667* +Y00714* +X01394Y0072* +X0139Y00725* +X01374Y00741* +X01374Y00743* +Y00779* +X01373Y00786* +X01369Y00791* +X01363Y00795* +X01357Y00796* +X01327* +Y00851* +X01326Y00857* +X01322Y00862* +X01287Y00897* +X01283Y009* +Y00916* +X01286Y00919* +X0133* +X01445Y00804* +Y00702* +X01447Y00696* +X0145Y00691* +X01481Y0066* +Y00497* +X01453Y00468* +X01449Y00463* +X01448Y00458* +Y00037* +X01434Y00023* +X01378* +X01372Y00022* +X01368Y00018* +X01335Y-00013* +X01332Y-00018* +X01331Y-00024* +Y-0013* +X01278Y-00183* +X01275Y-00188* +X01274Y-00193* +Y-00227* +X01272Y-00228* +X01269Y-00228* +X01259Y-00221* +X01247Y-00216* +X01242Y-00215* +Y-00283* +Y-0035* +X01247Y-0035* +X01259Y-00345* +X01269Y-00337* +X01272Y-00338* +X01274Y-00339* +Y-00365* +X01267* +X01262Y-00366* +X01258Y-00369* +X01255Y-00373* +X01254Y-00378* +Y-00395* +X01255Y-00399* +X01258Y-00404* +X01262Y-00406* +X01267Y-00407* +X01311* +X01316Y-00406* +X0132Y-00404* +X01323Y-00399* +X01324Y-00395* +Y-00378* +X01323Y-00373* +X0132Y-00369* +X01316Y-00366* +X01311Y-00365* +X01304* +Y-002* +X01357Y-00148* +X0136Y-00143* +X01361Y-00137* +Y-00122* +X01363Y-00121* +X01366Y-00121* +X01376Y-00128* +X01388Y-00133* +X01393Y-00134* +Y-00066* +X014* +Y-00059* +X01449* +Y-00047* +X01447Y-00034* +X01442Y-00022* +X01435Y-00012* +X01434Y-00012* +X01436Y-00007* +X0144* +X01446Y-00006* +X01451Y-00002* +X01474Y0002* +X01478Y00025* +X01479Y00031* +Y00451* +X01499Y00471* +X01503Y00469* +Y-00064* +X0146Y-00108* +X01456Y-00113* +X01455Y-00119* +Y-00216* +X01456Y-00221* +X0146Y-00226* +X01503Y-0027* +Y-00495* +X01428Y-00571* +X01375* +X01369Y-00572* +X01364Y-00575* +X01353Y-00586* +X01321* +X0132Y-00584* +X01316Y-00581* +X01311Y-0058* +X01267* +X01262Y-00581* +X01258Y-00584* +X01255Y-00588* +X01254Y-00593* +Y-00609* +X01255Y-00614* +X01258Y-00618* +X01262Y-00621* +X01267Y-00622* +X01311* +X01316Y-00621* +X0132Y-00618* +X01321Y-00616* +X0136* +X01366Y-00615* +X01371Y-00612* +X01381Y-00601* +X01434* +X0144Y-006* +X01445Y-00597* +X01529Y-00512* +X01533Y-00507* +X01534Y-00502* +Y-00264* +X01533Y-00258* +X01529Y-00253* +X01486Y-00209* +Y-00125* +X01529Y-00081* +X01533Y-00076* +X01534Y-00071* +Y00867* +X01533Y00872* +X01529Y00877* +X01441Y00965* +X01436Y00969* +X01431Y0097* +X01053* +X01047Y00969* +X01042Y00965* +X01007Y0093* +X00907* +X00901Y00929* +X00896Y00926* +X0085Y0088* +X00847Y00875* +X00846Y00869* +Y00867* +X00841Y00866* +X00839Y0087* +X00833Y00878* +X00827Y00883* +Y00898* +X00845* +X00851Y00899* +X00857Y00903* +X00861Y00908* +X00862Y00915* +Y00958* +X00861Y00965* +X00857Y0097* +X00851Y00974* +X00845Y00975* +X00809* +X00802Y00974* +X00797Y0097* +X00793Y00965* +X00792Y00958* +X00787* +X00786Y00965* +X00782Y0097* +X00777Y00974* +X0077Y00975* +X00734* +X00728Y00974* +X00722Y0097* +X00719Y00966* +X00718Y00966* +X00715* +X00714Y00966* +X00711Y0097* +X00705Y00974* +X00699Y00975* +X00663* +X00656Y00974* +X00651Y0097* +X00647Y00965* +X00646Y00958* +X00641* +X0064Y00965* +X00636Y0097* +X00631Y00974* +X00624Y00975* +X00588* +X00582Y00974* +X00576Y0097* +X00572Y00965* +X00571Y00958* +Y00915* +X00572Y00908* +X00576Y00903* +X00582Y00899* +X00588Y00898* +X00623* +X00646Y00875* +Y00867* +X00641Y00866* +X00639Y0087* +X00633Y00878* +X00625Y00884* +X00616Y00888* +X00606Y00889* +X00595Y00888* +X00586Y00884* +X00578Y00878* +X00572Y0087* +X00568Y00861* +X00567Y00851* +X00568Y0084* +X00572Y00831* +X00578Y00823* +X00582Y0082* +Y00812* +X0055Y0078* +X00547Y00775* +X00546Y00769* +Y00767* +X00541Y00766* +X00539Y0077* +X00533Y00778* +X00525Y00784* +X00516Y00788* +X00506Y00789* +X00495Y00788* +X00486Y00784* +X00485Y00783* +X0047Y00798* +X00465Y00801* +X00459Y00802* +X00442* +X00434Y0081* +Y00846* +X00433Y00852* +X0043Y00857* +X00413Y00874* +Y00909* +X00412Y00915* +X00408Y00921* +X00403Y00925* +X00396Y00926* +X00353* +X00346Y00925* +X00341Y00921* +X00337Y00915* +X00336Y00909* +X00295* +Y00916* +X00294Y00921* +X00291Y00925* +X00287Y00928* +X00282Y00929* +X00265* +X0026Y00928* +X00256Y00925* +X00253Y00921* +X00252Y00916* +Y00872* +X00253Y00867* +X00256Y00863* +X00258Y00861* +Y00844* +X00254Y00843* +X00253Y00842* +X00249Y00845* +X00244Y00846* +X00244* +Y00811* +X00236* +Y00804* +X00215* +Y00789* +X00215Y00789* +X00213Y00786* +X00207Y00785* +X00202Y00781* +X00092Y00672* +X-00088* +X-002Y00784* +Y00889* +X-00201Y00895* +X-00205Y009* +X-00228Y00923* +X-00233Y00927* +X-00239Y00928* +X-01002* +X-01008Y00927* +X-01013Y00923* +X-01053Y00884* +X-01097* +X-01103Y00883* +X-01108Y00879* +X-01165Y00823* +X-01167Y00824* +X-01176Y00825* +X-01185Y00824* +X-01193Y0082* +X-012Y00815* +X-01206Y00808* +X-01209Y00799* +X-01211Y00791* +X-01209Y00782* +X-01206Y00773* +X-012Y00766* +X-01193Y00761* +X-01185Y00757* +X-01176Y00756* +X-01167Y00757* +X-01159Y00761* +X-01152Y00766* +X-01147Y00773* +X-01143Y00782* +X-01142Y00791* +X-01143Y00799* +X-01144Y00801* +X-01091Y00853* +X-01046* +X-0104Y00854* +X-01035Y00858* +X-00996Y00897* +X-00245* +X-00231Y00883* +Y00778* +X-0023Y00772* +X-00226Y00767* +X-00105Y00646* +X-001Y00642* +X-00095Y00641* +X00099* +X00104Y00642* +X00109Y00646* +X00219Y00755* +X00252* +X00258Y00756* +X00263Y0076* +X00266Y00763* +X0027Y0076* +X00267Y00756* +X00263Y00747* +X00262Y00739* +X00263Y0073* +X00267Y00721* +X00272Y00714* +X00279Y00709* +X00288Y00705* +X00297Y00704* +X00336* +X00339Y00704* +X00375* +X00382Y00705* +X00387Y00709* +X00391Y00714* +X00392Y00721* +X00397* +X00398Y00714* +X00402Y00709* +X00407Y00705* +X00414Y00704* +X0045* +X00456Y00705* +X00462Y00709* +X00462Y00709* +X00484Y00687* +X00307Y00511* +X00257* +X00251Y0051* +X00246Y00506* +X0021Y0047* +X0013* +X00124Y00469* +X00119Y00466* +X00094Y0044* +X00016* +X-00008Y00466* +X-00009Y00466* +X-00008Y00471* +X00023* +X0003Y00473* +X00035Y00476* +X00039Y00482* +X0004Y00488* +X00045* +X00047Y00482* +X0005Y00476* +X00056Y00473* +X00062Y00471* +X00098* +X00105Y00473* +X0011Y00476* +X00114Y00482* +X00115Y00488* +Y0052* +X0016* +X0016Y0052* +X00164Y00511* +X00169Y00504* +X00176Y00499* +X00185Y00495* +X00194Y00494* +X00202Y00495* +X00211Y00499* +X00218Y00504* +X00223Y00511* +X00227Y0052* +X00228Y00529* +X00227Y00537* +X00223Y00546* +X00221Y00548* +X00224Y00553* +X00279* +X00288Y00554* +X00296Y00558* +X00303Y00563* +X00309Y0057* +X00312Y00579* +X00313Y00588* +X00312Y00596* +X00309Y00605* +X00307Y00607* +X00309Y00612* +X00322* +X00326Y00613* +X0033Y00611* +X00339Y0061* +X00347Y00611* +X00356Y00615* +X00363Y0062* +X00368Y00627* +X00372Y00636* +X00373Y00645* +X00372Y00653* +X00368Y00662* +X00363Y00669* +X00356Y00674* +X00347Y00678* +X00339Y00679* +X0033Y00678* +X00321Y00674* +X00314Y00669* +X00309Y00662* +X00305Y00653* +X00304Y00645* +X00303Y00643* +X00154* +X00148Y00642* +X00143Y00638* +X00136Y00631* +X-0011* +X-00242Y00763* +Y00818* +X-00243Y00823* +X-00247Y00828* +X-00297Y00878* +X-00302Y00882* +X-00308Y00883* +X-00985* +X-00991Y00882* +X-00996Y00878* +X-01072Y00802* +X-01089* +X-01095Y008* +X-011Y00797* +X-01152Y00745* +X-01223* +X-01229Y00744* +X-01234Y0074* +X-01323Y00651* +X-01324Y00652* +X-01359* +Y00624* +X-01357* +X-01355Y0062* +X-01394Y0058* +X-01397Y00575* +X-01398Y0057* +Y0054* +X-01405* +X-01407Y00539* +X-0141Y00544* +X-01407Y00548* +X-01406Y00554* +Y00565* +X-01437* +Y00537* +X-01423* +X-01421Y00538* +X-01418Y00533* +X-0142Y00529* +X-01422Y00523* +Y00487* +X-0142Y0048* +X-01417Y00475* +X-01411Y00471* +X-01405Y0047* +Y00465* +X-01411Y00464* +X-01417Y0046* +X-01417Y0046* +X-01422Y00462* +Y00464* +X-01423Y0047* +X-01427Y00476* +X-01432Y0048* +X-01439Y00481* +X-01453* +Y00446* +X-01468* +Y00481* +X-01482* +X-01486Y0048* +X-01491Y00484* +Y00586* +X-01488Y00589* +X-01483Y00587* +Y0058* +X-01406* +Y0059* +X-01407Y00597* +X-01411Y00602* +X-01416Y00606* +X-01423Y00607* +Y00612* +X-01416Y00613* +X-01411Y00617* +X-01407Y00622* +X-01406Y00628* +X-01404Y00629* +X-01401Y0063* +X-014Y00629* +X-01395Y00625* +X-01388Y00624* +X-01374* +Y00659* +X-01367* +Y00667* +X-01328* +Y00677* +X-01329Y00684* +X-01333Y00689* +X-01338Y00693* +X-01345Y00694* +Y00699* +X-01338Y007* +X-01333Y00704* +X-01329Y00709* +X-01328Y00716* +Y00752* +X-01329Y00758* +X-01333Y00764* +X-01338Y00768* +X-01345Y00769* +X-01348* +X-01349Y00774* +X-01346Y00779* +X-01344Y00786* +X-01339* +X-01338Y00779* +X-01334Y00774* +X-01329Y0077* +X-01322Y00769* +X-01287* +X-0128Y0077* +X-01275Y00774* +X-01271Y00779* +X-0127Y00786* +Y00821* +X-01255Y00836* +X-01239* +X-01233Y00837* +X-01228Y0084* +X-01211Y00857* +X-01209Y00856* +X-01173* +X-01167Y00858* +X-01161Y00861* +X-01158Y00867* +X-01156Y00873* +Y00909* +X-01126Y00939* +X-00227* +X-0019Y00902* +Y00799* +X-00189Y00793* +X-00185Y00788* +X-00086Y00689* +X-00081Y00685* +X-00076Y00684* +X00078* +X00083Y00685* +X00088Y00689* +X00196Y00797* +X002Y00802* +X00201Y00808* +Y0091* +X00233Y00942* +X00422* +X00471Y00894* +X00469Y00889* +X00467* +Y00812* +X00544* +Y00889* +X00519* +X00439Y00968* +X00434Y00972* +X00429Y00973* +X00227* +X00221Y00972* +X00216Y00968* +X00175Y00927* +X00171Y00922* +X0017Y00916* +Y00814* +X00071Y00715* +X-00069* +X-00159Y00805* +Y00909* +X-0016Y00914* +X-00164Y00919* +X-0021Y00965* +X-00215Y00969* +X-00221Y0097* +X-01132* +X-01138Y00969* +X-01143Y00965* +X-01174Y00934* +X-01209* +X-01216Y00933* +X-01221Y00929* +X-01225Y00924* +X-01226Y00917* +X-01231* +X-01232Y00924* +X-01236Y00929* +X-01242Y00933* +X-01248Y00934* +X-01284* +X-0129Y00933* +X-01296Y00929* +X-01298Y00926* +X-01304Y00927* +X-01306Y0093* +X-01311Y00933* +X-01318Y00935* +X-01352* +X-01358Y00933* +X-01364Y0093* +X-01368Y00924* +X-01369Y00918* +Y00907* +X-01373Y00906* +X-01378Y00903* +X-01439Y00842* +X-01467* +X-01474Y0084* +X-01479Y00837* +X-01483Y00831* +X-01484Y00825* +X-01489* +X-01491Y00831* +X-01494Y00837* +X-015Y0084* +X-01506Y00842* +X-01517* +Y00803* +X-01532* +Y00842* +X-01542* +X-01549Y0084* +X-0155Y0084* +X-01555Y00842* +Y00876* +X-01514Y00917* +X-01509Y00914* +Y00899* +X-01482* +Y00935* +X-01488* +X-0149Y0094* +X-01446Y00984* +X-00106* +X-00105Y00979* +X-0012Y00962* +X-00132Y00942* +X-00141Y0092* +X-00146Y00898* +X-00148Y00875* +X-00146Y00851* +X-00141Y00829* +X-00132Y00807* +X-0012Y00787* +X-00105Y00769* +X-00087Y00754* +X-00067Y00742* +X-00045Y00733* +X-00023Y00728* +X0Y00726* +X00023Y00728* +X00045Y00733* +X00067Y00742* +X00087Y00754* +X00105Y00769* +X0012Y00787* +X00132Y00807* +X00141Y00829* +X00146Y00851* +X00148Y00875* +X00146Y00898* +X00141Y0092* +X00132Y00942* +X0012Y00962* +X00105Y00979* +X00106Y00984* +X01446* +X01555Y00876* +G37* +G36* +X00996Y00173D02* +X01005Y00169D01* +X01014Y00168* +X01022Y00169* +X01031Y00173* +X01034Y00175* +X01035Y00176* +X01037Y00175* +X01038Y00173* +X01038Y00168* +X01036Y00165* +X01035Y00159* +Y00155* +X01062* +Y00147* +X01069* +Y00121* +X01074* +X01076Y00116* +X01077Y00115* +X00994Y00032* +X00991Y00027* +X00989Y00021* +Y-00074* +X00968* +X00962Y-00075* +X00957Y-00078* +X00932Y-00104* +X00883* +X00853Y-00073* +X00853Y-00072* +Y-00036* +X00853Y-00034* +X00855Y-00029* +X00856Y-00028* +X0086Y-00028* +X00865Y-00024* +X00935Y00045* +X00939Y0005* +X0094Y00055* +Y00081* +X00969* +X00976Y00082* +X00981Y00086* +X00985Y00092* +X00986Y00098* +Y00134* +X00985Y00141* +X00981Y00146* +X00976Y0015* +X00969Y00151* +Y00156* +X00976Y00157* +X00981Y00161* +X00985Y00166* +X00986Y00173* +Y00174* +X00991Y00177* +X00996Y00173* +G37* +G36* +X00846Y00829D02* +Y00795D01* +X00847Y00789* +X0085Y00784* +X0087Y00765* +X00868Y00761* +X00867Y00751* +X00868Y0074* +X00872Y00731* +X00878Y00723* +X00886Y00717* +X00895Y00713* +X00906Y00712* +X00916Y00713* +X00925Y00717* +X00933Y00723* +X00939Y00731* +X00943Y0074* +X00944Y00747* +X00947Y00749* +X00949Y00749* +X00954Y00745* +X00961Y00744* +X01005* +X01011Y00745* +X01016Y00749* +X01019Y00748* +X01021Y00746* +Y0073* +X01022Y00726* +X01025Y00721* +X01029Y00719* +X01034Y00718* +X01078* +X01083Y00719* +X01087Y00721* +X01088Y00723* +X01128* +Y00694* +X01129Y00688* +X01132Y00684* +X01131Y00682* +X01127Y00679* +X01115* +X01106Y00687* +X01101Y00691* +X01095Y00692* +X0079* +X00788Y00693* +X00783Y00697* +X00778Y00698* +X00644* +X00642Y00702* +X00659Y00719* +X00683* +X00686Y00717* +X00695Y00713* +X00706Y00712* +X00716Y00713* +X00725Y00717* +X00733Y00723* +X00739Y00731* +X00743Y0074* +X00744Y00751* +X00743Y00761* +X00742Y00762* +X00744Y00765* +X00746Y00766* +X00754Y00767* +X00763Y00771* +X00766Y00774* +X00771Y00771* +Y00768* +X00768Y00761* +X00767Y00751* +X00768Y0074* +X00772Y00731* +X00778Y00723* +X00786Y00717* +X00795Y00713* +X00806Y00712* +X00816Y00713* +X00825Y00717* +X00833Y00723* +X00839Y00731* +X00843Y0074* +X00844Y00751* +X00843Y00761* +X0084Y00768* +Y0083* +X00841Y00831* +X00846Y00829* +G37* +%LNunisolder52_front-2*% +%LPC*% +G36* +X-00368Y-00894D02* +X-00408D01* +X-00408Y-00895* +X-00403Y-00902* +X-00396Y-00906* +X-00388Y-00908* +X-00368* +Y-00894* +G37* +G36* +X-00319Y-00764D02* +X-0035D01* +Y-00774* +X-00349Y-00781* +X-00345Y-00786* +X-0034Y-0079* +X-00333Y-00791* +X-00319* +Y-00764* +G37* +G36* +X00001Y-00894D02* +X-00038D01* +X-00038Y-00895* +X-00033Y-00902* +X-00026Y-00906* +X-00018Y-00908* +X00001* +Y-00894* +G37* +G36* +X-00368Y-00865D02* +X-00388D01* +X-00396Y-00867* +X-00403Y-00872* +X-00408Y-00878* +X-00408Y-00879* +X-00368* +Y-00865* +G37* +G36* +X-00333D02* +X-00353D01* +Y-00879* +X-00313* +X-00313Y-00878* +X-00318Y-00872* +X-00325Y-00867* +X-00333Y-00865* +G37* +G36* +X-00313Y-00894D02* +X-00353D01* +Y-00908* +X-00333* +X-00325Y-00906* +X-00318Y-00902* +X-00313Y-00895* +X-00313Y-00894* +G37* +G36* +X-00989Y-00793D02* +X-01009D01* +Y-00812* +X-01003* +X-00998Y-00811* +X-00993Y-00808* +X-0099Y-00803* +X-00989Y-00798* +Y-00793* +G37* +G36* +X-01024D02* +X-01043D01* +Y-00798* +X-01042Y-00803* +X-01039Y-00808* +X-01034Y-00811* +X-01029Y-00812* +X-01024* +Y-00793* +G37* +G36* +X-01507Y-00623D02* +X-01537D01* +X-01537Y-00626* +X-01533Y-00635* +X-01527Y-00643* +X-01519Y-00649* +X-0151Y-00653* +X-01507Y-00653* +Y-00623* +G37* +G36* +X-01204Y-00608D02* +X-01223D01* +Y-00613* +X-01221Y-00619* +X-01218Y-00623* +X-01214Y-00626* +X-01208Y-00627* +X-01204* +Y-00608* +G37* +G36* +X-01492Y-00578D02* +Y-00616D01* +Y-00653* +X-01489Y-00653* +X-0148Y-00649* +X-01472Y-00643* +X-01466Y-00635* +X-01465Y-00634* +X-0146Y-00635* +Y-00664* +X-01479Y-00683* +X-0148Y-00682* +X-01489Y-00678* +X-015Y-00677* +X-0151Y-00678* +X-01519Y-00682* +X-01527Y-00688* +X-01533Y-00696* +X-01537Y-00705* +X-01538Y-00716* +X-01537Y-00726* +X-01533Y-00735* +X-01527Y-00743* +X-01519Y-00749* +X-0151Y-00753* +X-015Y-00754* +X-01489Y-00753* +X-0148Y-00749* +X-01472Y-00743* +X-01466Y-00735* +X-01465Y-00734* +X-0146Y-00735* +Y-00739* +X-01459Y-00745* +X-01459Y-00745* +X-01491Y-00777* +X-01538* +Y-00854* +X-01461* +Y-00791* +X-01426Y-00756* +X-014* +X-01393Y-00755* +X-01388Y-00751* +X-01384Y-00745* +X-01383Y-00739* +Y-00703* +X-01384Y-00696* +X-01388Y-00691* +X-01393Y-00687* +X-01395Y-00687* +X-01396Y-00682* +X-01395Y-00681* +X-01393Y-00681* +X-01202* +X-0119Y-00693* +X-01184Y-00697* +X-01177Y-00699* +X-01071* +X-01071Y-00699* +X-01068Y-00703* +X-01064Y-00706* +X-01059Y-00707* +X-01042* +X-0104Y-00709* +X-01039Y-00712* +X-01042Y-00716* +X-01043Y-00721* +Y-00745* +X-01042Y-00751* +X-01039Y-00755* +X-01037Y-00756* +Y-00762* +X-01039Y-00763* +X-01042Y-00768* +X-01043Y-00774* +Y-00778* +X-00989* +Y-00774* +X-0099Y-00768* +X-00993Y-00763* +X-00995Y-00762* +Y-00756* +X-00993Y-00755* +X-0099Y-00751* +X-00989Y-00745* +Y-00721* +X-0099Y-00716* +X-00993Y-00711* +X-00994Y-00711* +Y-00699* +X-00989* +X-00981Y-00697* +X-00977Y-007* +X-00969Y-00704* +X-0096Y-00705* +X-00946* +Y-00753* +X-00944Y-0076* +X-0094Y-00767* +X-00934Y-00771* +X-00926Y-00773* +X-0092* +Y-00803* +X-00918Y-00812* +X-00915Y-0082* +X-00909Y-00828* +X-00902Y-00833* +X-00893Y-00837* +X-00884Y-00838* +X-00875Y-00837* +X-00867Y-00833* +X-00859Y-00828* +X-00854Y-0082* +X-0085Y-00812* +X-00849Y-00803* +Y-00773* +X-00841* +X-00833Y-00771* +X-00827Y-00767* +X-00822Y-0076* +X-00821Y-00753* +Y-00656* +X-00822Y-00648* +X-00827Y-00642* +X-00833Y-00637* +X-00841Y-00636* +X-00926* +X-00928Y-00636* +X-00946* +X-00953Y-00631* +X-00961Y-00628* +X-0097Y-00626* +X-00979Y-00628* +X-00987Y-00631* +X-00994Y-00637* +X-01Y-00644* +X-01003Y-00652* +X-01004Y-0066* +X-01082* +X-01085Y-00657* +Y-00656* +X-01154* +Y-00657* +X-01157Y-0066* +X-01169* +X-0118Y-00648* +X-01187Y-00644* +X-01194Y-00643* +X-01383* +Y-00628* +X-01384Y-00622* +X-01388Y-00616* +X-01393Y-00612* +X-014Y-00611* +X-01443* +X-0145Y-00612* +X-01455Y-00616* +X-01456Y-00617* +X-0146Y-00616* +X-01461Y-00615* +X-01462Y-00605* +X-01466Y-00596* +X-01472Y-00588* +X-0148Y-00582* +X-01489Y-00578* +X-01492Y-00578* +G37* +G36* +X0142Y-00635D02* +X01385D01* +X01377Y-00636* +X01371Y-00641* +X01366Y-00647* +X01365Y-00655* +Y-00696* +X0142* +Y-00635* +G37* +G36* +X0147D02* +X01435D01* +Y-00696* +X0149* +Y-00655* +X01489Y-00647* +X01484Y-00641* +X01478Y-00636* +X0147Y-00635* +G37* +G36* +X-01094Y-00567D02* +X-01102Y-00568D01* +X-01111Y-00572* +X-01117Y-00576* +X-01122Y-00578* +X-01126Y-00575* +X-01132Y-00574* +X-01156* +X-01161Y-00575* +X-01166Y-00578* +X-01167Y-00579* +X-01173* +X-01174Y-00578* +X-01179Y-00575* +X-01184Y-00574* +X-01189* +Y-006* +Y-00627* +X-01184* +X-01179Y-00626* +X-01174Y-00623* +X-01173Y-00622* +X-01167* +X-01166Y-00623* +X-01161Y-00626* +X-01156Y-00627* +X-01154* +X-01153Y-00628* +X-01152Y-00632* +X-01153Y-00635* +X-01154Y-0064* +Y-00641* +X-01085* +Y-0064* +X-01085Y-0064* +X-01085Y-00635* +X-01081Y-00633* +X-01081Y-00633* +X-01027* +X-01023Y-00632* +X-01015* +X-0101Y-00631* +X-01006Y-00628* +X-01003Y-00624* +X-01002Y-00619* +Y-00603* +X-01003Y-00598* +X-01006Y-00594* +X-0101Y-00591* +X-01015Y-0059* +X-01023* +X-01027Y-00589* +X-01062* +X-01064Y-00584* +X-01069Y-00577* +X-01076Y-00572* +X-01085Y-00568* +X-01094Y-00567* +G37* +G36* +X-01395Y-00506D02* +X-01414D01* +Y-00511* +X-01413Y-00516* +X-0141Y-00521* +X-01406Y-00524* +X-014Y-00525* +X-01395* +Y-00506* +G37* +G36* +X-01204Y-00574D02* +X-01208D01* +X-01214Y-00575* +X-01218Y-00578* +X-01221Y-00582* +X-01223Y-00588* +Y-00593* +X-01204* +Y-00574* +G37* +G36* +X-00662Y-00511D02* +X-00675Y-00513D01* +X-00687Y-00518* +X-00697Y-00525* +X-00705Y-00536* +X-0071Y-00547* +X-00711Y-0056* +X-0071Y-00573* +X-00705Y-00584* +X-00697Y-00594* +X-00687Y-00602* +X-00675Y-00607* +X-00662Y-00609* +X-0065Y-00607* +X-00638Y-00602* +X-00628Y-00594* +X-0062Y-00584* +X-00615Y-00573* +X-00614Y-0056* +X-00615Y-00547* +X-0062Y-00536* +X-00628Y-00525* +X-00638Y-00518* +X-0065Y-00513* +X-00662Y-00511* +G37* +G36* +X-01507Y-00578D02* +X-0151Y-00578D01* +X-01519Y-00582* +X-01527Y-00588* +X-01533Y-00596* +X-01537Y-00605* +X-01537Y-00608* +X-01507* +Y-00578* +G37* +G36* +X00332Y-00715D02* +X00327D01* +Y-00734* +X00346* +Y-00729* +X00345Y-00724* +X00342Y-00719* +X00338Y-00716* +X00332Y-00715* +G37* +G36* +X0149Y-00711D02* +X01435D01* +Y-00772* +X0147* +X01478Y-0077* +X01484Y-00766* +X01489Y-00759* +X0149Y-00752* +Y-00711* +G37* +G36* +X-00231Y-00743D02* +X-00262D01* +Y-00753* +X-00261Y-0076* +X-00257Y-00765* +X-00252Y-00769* +X-00245Y-0077* +X-00231* +Y-00743* +G37* +G36* +X0142Y-00711D02* +X01365D01* +Y-00752* +X01366Y-00759* +X01371Y-00766* +X01377Y-0077* +X01385Y-00772* +X0142* +Y-00711* +G37* +G36* +X-00273Y-00764D02* +X-00304D01* +Y-00791* +X-0029* +X-00283Y-0079* +X-00278Y-00786* +X-00274Y-00781* +X-00273Y-00774* +Y-00764* +G37* +G36* +X-00662Y-00688D02* +X-00675Y-0069D01* +X-00687Y-00695* +X-00697Y-00703* +X-00705Y-00713* +X-0071Y-00724* +X-00711Y-00737* +X-0071Y-0075* +X-00705Y-00761* +X-00697Y-00772* +X-00687Y-00779* +X-00675Y-00784* +X-00662Y-00786* +X-0065Y-00784* +X-00638Y-00779* +X-00628Y-00772* +X-0062Y-00761* +X-00615Y-0075* +X-00614Y-00737* +X-00615Y-00724* +X-0062Y-00713* +X-00628Y-00703* +X-00638Y-00695* +X-0065Y-0069* +X-00662Y-00688* +G37* +G36* +X00807Y-00731D02* +X00802D01* +X00796Y-00733* +X00792Y-00736* +X00789Y-0074* +X00787Y-00746* +Y-0075* +X00807* +Y-00731* +G37* +G36* +X00312Y-00715D02* +X00307D01* +X00301Y-00716* +X00297Y-00719* +X00294Y-00724* +X00293Y-00729* +Y-00734* +X00312* +Y-00715* +G37* +G36* +X00266Y-00724D02* +X00235D01* +Y-00751* +X00249* +X00256Y-0075* +X00261Y-00746* +X00265Y-00741* +X00266Y-00734* +Y-00724* +G37* +G36* +X-00185Y-00743D02* +X-00216D01* +Y-0077* +X-00202* +X-00195Y-00769* +X-0019Y-00765* +X-00186Y-0076* +X-00185Y-00753* +Y-00743* +G37* +G36* +X0022Y-00724D02* +X00189D01* +Y-00734* +X0019Y-00741* +X00194Y-00746* +X00199Y-0075* +X00206Y-00751* +X0022* +Y-00724* +G37* +G36* +X-00841Y-00919D02* +X-00876D01* +Y-0098* +X-00821* +Y-00939* +X-00822Y-00932* +X-00827Y-00925* +X-00833Y-00921* +X-00841Y-00919* +G37* +G36* +X00472Y-01131D02* +X00455D01* +X00447Y-01133* +X00441Y-01137* +X00436Y-01144* +X00435Y-01151* +Y-012* +X00472* +Y-01131* +G37* +G36* +X00504D02* +X00487D01* +Y-012* +X00524* +Y-01151* +X00523Y-01144* +X00518Y-01137* +X00512Y-01133* +X00504Y-01131* +G37* +G36* +X-00313Y-01194D02* +X-00353D01* +Y-01208* +X-00333* +X-00325Y-01206* +X-00318Y-01202* +X-00313Y-01195* +X-00313Y-01194* +G37* +G36* +X00001D02* +X-00038D01* +X-00038Y-01195* +X-00033Y-01202* +X-00026Y-01206* +X-00018Y-01208* +X00001* +Y-01194* +G37* +G36* +X-01484Y-00953D02* +X-01492Y-00954D01* +X-01501Y-00958* +X-01508Y-00963* +X-01513Y-0097* +X-01517Y-00979* +X-01518Y-00988* +X-01517Y-00996* +X-01513Y-01005* +X-01508Y-01012* +X-01501Y-01017* +X-01492Y-01021* +X-01486Y-01021* +Y-01103* +X-01486* +X-01491Y-01104* +X-01495Y-01107* +X-01498Y-01111* +X-01499Y-01116* +Y-01132* +X-01498Y-01137* +X-01495Y-01141* +X-01491Y-01144* +X-01486Y-01145* +X-01442* +X-01437Y-01144* +X-01433Y-01141* +X-01431Y-01139* +X-01414* +X-01413Y-01143* +X-01412Y-01144* +X-01415Y-01148* +X-01416Y-01153* +Y-0117* +X-01415Y-01175* +X-01412Y-01179* +X-01408Y-01182* +X-01403Y-01183* +X-01359* +X-01356Y-01182* +X-01346* +Y-01201* +X-01345Y-01208* +X-01341Y-01213* +X-01335Y-01217* +X-01329Y-01218* +X-01293* +X-01287Y-01217* +X-01281Y-01213* +X-01277Y-01208* +X-01276Y-01201* +X-01271* +X-0127Y-01208* +X-01266Y-01213* +X-01261Y-01217* +X-01254Y-01218* +X-01218* +X-01212Y-01217* +X-01206Y-01213* +X-01203Y-01208* +X-01201Y-01201* +Y-012* +X-00993* +X-00986Y-01198* +X-00979Y-01194* +X-00943Y-01157* +X-00938Y-01158* +X-00937Y-01158* +X-00928Y-01165* +X-00917Y-0117* +X-00906Y-01171* +X-00894Y-0117* +X-00883Y-01165* +X-00874Y-01158* +X-00867Y-01149* +X-00862Y-01138* +X-00861Y-01126* +X-00862Y-01115* +X-00867Y-01104* +X-00874Y-01095* +X-00883Y-01088* +X-00894Y-01083* +X-00902Y-01082* +X-00902Y-01077* +X-00872* +X-00742Y-01206* +X-00737Y-0121* +X-00732Y-01211* +X-00626* +X-0062Y-0121* +X-00615Y-01206* +X-00588Y-01179* +X-00584Y-0118* +X-00567* +X-00562Y-01179* +X-00558Y-01176* +X-00555Y-01172* +X-00554Y-01167* +Y-01123* +X-00555Y-01118* +X-00558Y-01114* +X-00562Y-01111* +X-00567Y-0111* +X-00584* +X-00588Y-01111* +X-00593Y-01114* +X-00595Y-01118* +X-00596Y-01123* +Y-01144* +X-00632Y-0118* +X-00725* +X-00845Y-01061* +X-00843Y-01056* +X-00841* +X-00833Y-01055* +X-00827Y-0105* +X-00822Y-01044* +X-00821Y-01036* +Y-00995* +X-00946* +Y-01036* +X-00945Y-01041* +X-00948Y-01046* +X-01044* +X-01045Y-01045* +X-0105Y-01038* +X-01057Y-01033* +X-01066Y-01029* +X-01075Y-01028* +X-01083Y-01029* +X-01092Y-01033* +X-01099Y-01038* +X-01104Y-01045* +X-01108Y-01054* +X-01109Y-01063* +X-01108Y-01071* +X-01104Y-0108* +X-01099Y-01087* +X-01092Y-01092* +X-01083Y-01096* +X-01075Y-01097* +X-01066Y-01096* +X-01057Y-01092* +X-0105Y-01087* +X-01045Y-0108* +X-01044Y-01077* +X-0091* +X-00909Y-01082* +X-00917Y-01083* +X-00928Y-01088* +X-00937Y-01095* +X-00945Y-01104* +X-00946Y-01107* +X-00948Y-01108* +X-00955Y-01112* +X-01002Y-01159* +X-01201* +Y-01158* +X-01203Y-01151* +X-01206Y-01146* +X-01212Y-01142* +X-01218Y-01141* +X-01248* +X-0125Y-01136* +X-01249Y-01135* +X-01245Y-0113* +X-01244Y-01123* +Y-0108* +X-01245Y-01073* +X-01249Y-01068* +X-01255Y-01064* +X-01261Y-01063* +X-01297* +X-01304Y-01064* +X-01309Y-01068* +X-01313Y-01073* +X-01314Y-0108* +X-01319* +X-0132Y-01073* +X-01324Y-01068* +X-01329Y-01064* +X-01336Y-01063* +X-01372* +X-01378Y-01064* +X-01384Y-01068* +X-01388Y-01073* +X-01389Y-0108* +Y-01109* +X-01431* +X-01433Y-01107* +X-01437Y-01104* +X-01442Y-01103* +X-01455* +Y-01015* +X-01456Y-01009* +X-01457Y-01008* +X-01454Y-01005* +X-0145Y-00996* +X-01449Y-00988* +X-0145Y-00979* +X-01454Y-0097* +X-01459Y-00963* +X-01466Y-00958* +X-01475Y-00954* +X-01484Y-00953* +G37* +G36* +X-00333Y-01165D02* +X-00353D01* +Y-01179* +X-00313* +X-00313Y-01178* +X-00318Y-01172* +X-00325Y-01167* +X-00333Y-01165* +G37* +G36* +X-01471Y-01178D02* +X-01486D01* +X-01491Y-01179* +X-01495Y-01182* +X-01498Y-01186* +X-01499Y-01191* +Y-01191* +X-01471* +Y-01178* +G37* +G36* +X-01442D02* +X-01456D01* +Y-01191* +X-01429* +Y-01191* +X-0143Y-01186* +X-01433Y-01182* +X-01437Y-01179* +X-01442Y-01178* +G37* +G36* +X-00517Y-01235D02* +X-0053D01* +Y-01262* +X-0053* +X-00525Y-01261* +X-00521Y-01259* +X-00518Y-01255* +X-00517Y-0125* +Y-01235* +G37* +G36* +X-00725Y-0089D02* +X-00732Y-00892D01* +X-00739Y-00896* +X-00774Y-00931* +X-00778Y-00938* +X-0078Y-00945* +X-00778Y-00953* +X-00774Y-0096* +X-00739Y-00995* +X-00732Y-00999* +X-00725Y-01001* +X-00717Y-00999* +X-00711Y-00995* +X-00698Y-00982* +X-00674Y-01005* +X-00676Y-01007* +X-00677Y-01012* +Y-01029* +X-00676Y-01033* +X-00673Y-01038* +X-00669Y-0104* +X-00664Y-01041* +X-00638* +X-00591Y-01088* +X-00584Y-01094* +X-00576Y-01097* +X-00567Y-01099* +X-00515* +Y-01112* +X-00518Y-01114* +X-00521Y-01118* +X-00522Y-01123* +Y-01167* +X-00521Y-01172* +X-00518Y-01176* +X-00514Y-01179* +X-00509Y-0118* +X-00492* +X-00487Y-01179* +X-00483Y-01176* +X-0048Y-01172* +X-00479Y-01167* +Y-01123* +X-0048Y-01118* +X-00483Y-01114* +X-00486Y-01112* +Y-01099* +X-00448* +X-00444Y-01098* +X-0044Y-01102* +X-00433Y-01107* +X-00425Y-01108* +X-00382* +Y-01115* +X-00385* +X-00394Y-01116* +X-00394Y-01116* +X-00396Y-01117* +X-00403Y-01122* +X-00407Y-01127* +X-00437Y-01157* +X-00442Y-01164* +X-00443Y-01173* +Y-012* +X-00442Y-01209* +X-00437Y-01216* +X-00407Y-01246* +X-00403Y-01252* +X-00396Y-01256* +X-00394Y-01257* +X-00394Y-01257* +X-00385Y-01258* +X-00361* +X-00357Y-01258* +X-00333* +X-00325Y-01256* +X-00318Y-01252* +X-00313Y-01245* +X-00312Y-01237* +X-00313Y-01228* +X-00318Y-01222* +X-00325Y-01217* +X-00333Y-01215* +X-00357* +X-00361Y-01215* +X-00374* +X-00375Y-01213* +X-00373Y-01208* +X-00368* +Y-01187* +Y-01165* +X-00373* +X-00375Y-0116* +X-00374Y-01158* +X-00361* +X-00357Y-01158* +X-00333* +X-00325Y-01156* +X-00318Y-01152* +X-00313Y-01145* +X-00312Y-01137* +X-00313Y-01128* +X-00318Y-01122* +X-00325Y-01117* +X-00333Y-01115* +X-00339* +Y-01108* +X-00333* +X-00325Y-01106* +X-00318Y-01102* +X-00313Y-01095* +X-00312Y-01087* +X-00313Y-01078* +X-00318Y-01072* +X-00325Y-01067* +X-00333Y-01065* +X-00339* +Y-01058* +X-00333* +X-00325Y-01056* +X-00318Y-01052* +X-00313Y-01045* +X-00312Y-01037* +X-00313Y-01028* +X-00318Y-01022* +X-00325Y-01017* +X-00333Y-01015* +X-00357* +X-00361Y-01015* +X-00364Y-01015* +X-00388* +X-00396Y-01017* +X-00403Y-01022* +X-00408Y-01028* +X-00409Y-01037* +X-00408Y-01045* +X-00403Y-01052* +X-00396Y-01056* +X-00388Y-01058* +X-00382* +Y-01065* +X-00413* +X-00413Y-01064* +X-00414Y-01055* +X-00418Y-01047* +X-00421Y-01044* +Y-01041* +X-00422Y-01035* +X-00425Y-0103* +X-00426Y-0103* +Y-01023* +X-00425Y-01023* +X-00422Y-01018* +X-00421Y-01012* +Y-01008* +X-00474* +Y-01012* +X-00473Y-01018* +X-0047Y-01023* +X-00471Y-01028* +X-00474Y-0103* +X-00503* +X-00503Y-0103* +Y-01024* +X-00502Y-01023* +X-00499Y-01018* +X-00498Y-01013* +Y-01008* +X-00552* +Y-01013* +X-00551Y-01018* +X-00547Y-01023* +X-00549Y-01028* +X-00551Y-0103* +X-00553* +X-00668Y-00914* +X-00675Y-00909* +X-00684Y-00905* +X-00693Y-00904* +X-00703* +X-00711Y-00896* +X-00717Y-00892* +X-00725Y-0089* +G37* +G36* +X00093Y-01459D02* +X0007D01* +Y-01485* +X0007Y-01485* +X00078Y-01482* +X00084Y-01477* +X00089Y-01471* +X00092Y-01463* +X00093Y-01459* +G37* +G36* +X-00545Y-01235D02* +X-00559D01* +Y-0125* +X-00558Y-01255* +X-00555Y-01259* +X-00551Y-01261* +X-00546Y-01262* +X-00545* +Y-01235* +G37* +G36* +X-01471Y-01206D02* +X-01499D01* +Y-01207* +X-01498Y-01212* +X-01495Y-01216* +X-01491Y-01219* +X-01486Y-0122* +X-01471* +Y-01206* +G37* +G36* +X-01429D02* +X-01456D01* +Y-0122* +X-01442* +X-01437Y-01219* +X-01433Y-01216* +X-0143Y-01212* +X-01429Y-01207* +Y-01206* +G37* +G36* +X-00545Y-01193D02* +X-00546D01* +X-00551Y-01194* +X-00555Y-01196* +X-00558Y-01201* +X-00559Y-01206* +Y-0122* +X-00545* +Y-01193* +G37* +G36* +X-0053D02* +X-0053D01* +Y-0122* +X-00517* +Y-01206* +X-00518Y-01201* +X-00521Y-01196* +X-00525Y-01194* +X-0053Y-01193* +G37* +G36* +X00001Y-01165D02* +X-00018D01* +X-00026Y-01167* +X-00033Y-01172* +X-00038Y-01178* +X-00038Y-01179* +X00001* +Y-01165* +G37* +G36* +X01245Y-00716D02* +X0122Y-00718D01* +X01196Y-00724* +X01173Y-00733* +X01151Y-00746* +X01132Y-00762* +X01116Y-00781* +X01103Y-00803* +X01094Y-00826* +X01088Y-0085* +X01086Y-00875* +X01088Y-00899* +X01094Y-00923* +X01103Y-00946* +X01116Y-00968* +X01132Y-00987* +X01151Y-01003* +X01173Y-01016* +X01196Y-01025* +X0122Y-01031* +X01245Y-01033* +X01269Y-01031* +X01293Y-01025* +X01316Y-01016* +X01338Y-01003* +X01357Y-00987* +X01373Y-00968* +X01386Y-00946* +X01395Y-00923* +X01401Y-00899* +X01403Y-00875* +X01401Y-0085* +X01395Y-00826* +X01386Y-00803* +X01373Y-00781* +X01357Y-00762* +X01338Y-00746* +X01316Y-00733* +X01293Y-00724* +X01269Y-00718* +X01245Y-00716* +G37* +G36* +X-00532Y-00974D02* +X-00537D01* +X-00543Y-00975* +X-00547Y-00979* +X-00551Y-00983* +X-00552Y-00989* +Y-00993* +X-00532* +Y-00974* +G37* +G36* +X01031Y-01026D02* +X0103Y-01026D01* +X01024Y-01031* +X01019Y-01037* +X01017Y-01046* +Y-01064* +X01031* +Y-01026* +G37* +G36* +X-01245Y-00716D02* +X-01269Y-00718D01* +X-01293Y-00724* +X-01316Y-00733* +X-01338Y-00746* +X-01357Y-00762* +X-01373Y-00781* +X-01386Y-00803* +X-01395Y-00826* +X-01401Y-0085* +X-01403Y-00875* +X-01401Y-00899* +X-01395Y-00923* +X-01386Y-00946* +X-01373Y-00968* +X-01357Y-00987* +X-01338Y-01003* +X-01316Y-01016* +X-01293Y-01025* +X-01269Y-01031* +X-01245Y-01033* +X-0122Y-01031* +X-01196Y-01025* +X-01173Y-01016* +X-01151Y-01003* +X-01132Y-00987* +X-01116Y-00968* +X-01103Y-00946* +X-01094Y-00923* +X-01088Y-00899* +X-01086Y-00875* +X-01088Y-0085* +X-01094Y-00826* +X-01103Y-00803* +X-01116Y-00781* +X-01132Y-00762* +X-01151Y-00746* +X-01173Y-00733* +X-01196Y-00724* +X-0122Y-00718* +X-01245Y-00716* +G37* +G36* +X-00435Y-00974D02* +X-0044D01* +Y-00993* +X-00421* +Y-00988* +X-00422Y-00983* +X-00425Y-00978* +X-00429Y-00975* +X-00435Y-00974* +G37* +G36* +X-00891Y-00919D02* +X-00926D01* +X-00934Y-00921* +X-0094Y-00925* +X-00944Y-00932* +X-00946Y-00939* +Y-0098* +X-00891* +Y-00919* +G37* +G36* +X-00512Y-00974D02* +X-00517D01* +Y-00993* +X-00498* +Y-00989* +X-00499Y-00983* +X-00502Y-00979* +X-00507Y-00975* +X-00512Y-00974* +G37* +G36* +X-00455Y-00974D02* +X-0046D01* +X-00466Y-00975* +X-0047Y-00978* +X-00473Y-00983* +X-00474Y-00988* +Y-00993* +X-00455* +Y-00974* +G37* +G36* +X-00736Y-01035D02* +X-00742Y-01037D01* +X-00747* +X-00752Y-01038* +X-00756Y-0104* +X-00759Y-01045* +X-0076Y-01049* +Y-01066* +X-00759Y-01071* +X-00756Y-01075* +Y-01075* +X-0076Y-01078* +X-00765Y-01085* +X-00769Y-01093* +X-0077Y-01102* +X-00769Y-01111* +X-00765Y-01119* +X-0076Y-01126* +X-00753Y-01132* +X-00745Y-01135* +X-00736Y-01136* +X-00727Y-01135* +X-00719Y-01132* +X-00711Y-01126* +X-00706Y-01119* +X-00703Y-01111* +X-00701Y-01102* +X-00703Y-01093* +X-00706Y-01085* +X-00707Y-01083* +X-00705Y-01079* +X-00703* +X-00698Y-01078* +X-00694Y-01075* +X-00691Y-01071* +X-0069Y-01066* +Y-01049* +X-00691Y-01045* +X-00694Y-0104* +X-00698Y-01038* +X-00703Y-01037* +X-00729* +X-00736Y-01035* +G37* +G36* +X01031Y-01079D02* +X01017D01* +Y-01097* +X01019Y-01105* +X01024Y-01112* +X0103Y-01116* +X01031Y-01116* +Y-01079* +G37* +G36* +X00681Y-01121D02* +X0065D01* +Y-01132* +X00651Y-01138* +X00655Y-01144* +X0066Y-01148* +X00667Y-01149* +X00681* +Y-01121* +G37* +G36* +X00727D02* +X00696D01* +Y-01149* +X0071* +X00717Y-01148* +X00722Y-01144* +X00726Y-01138* +X00727Y-01132* +Y-01121* +G37* +G36* +X-0065Y-01074D02* +X-00664D01* +X-00669Y-01075* +X-00673Y-01078* +X-00676Y-01082* +X-00677Y-01087* +Y-01088* +X-0065* +Y-01074* +G37* +G36* +X-0062D02* +X-00635D01* +Y-01088* +X-00607* +Y-01087* +X-00608Y-01082* +X-00611Y-01078* +X-00615Y-01075* +X-0062Y-01074* +G37* +G36* +X-0065Y-01103D02* +X-00677D01* +Y-01103* +X-00676Y-01108* +X-00673Y-01112* +X-00669Y-01115* +X-00664Y-01116* +X-0065* +Y-01103* +G37* +G36* +X-00607D02* +X-00635D01* +Y-01116* +X-0062* +X-00615Y-01115* +X-00611Y-01112* +X-00608Y-01108* +X-00607Y-01103* +Y-01103* +G37* +G36* +X-01361Y-00506D02* +X-0138D01* +Y-00525* +X-01375* +X-01369Y-00524* +X-01365Y-00521* +X-01362Y-00516* +X-01361Y-00511* +Y-00506* +G37* +G36* +X-00591Y00597D02* +X-00608D01* +X-00613Y00596* +X-00617Y00593* +X-0062Y00589* +X-00621Y00584* +Y00517* +X-0062Y00512* +X-00617Y00508* +X-00613Y00505* +X-00608Y00504* +X-00591* +X-00586Y00505* +X-00582Y00508* +X-00579Y00512* +X-00578Y00517* +Y00584* +X-00579Y00589* +X-00582Y00593* +X-00586Y00596* +X-00591Y00597* +G37* +G36* +X-00457Y00543D02* +X-00471D01* +Y00525* +X-00469Y00517* +X-00465Y0051* +X-00458Y00505* +X-00457Y00505* +Y00543* +G37* +G36* +X-00719Y00476D02* +X-00738D01* +Y00457* +X-00733* +X-00728Y00458* +X-00723Y00461* +X-0072Y00466* +X-00719Y00471* +Y00476* +G37* +G36* +X-00733Y00511D02* +X-00738D01* +Y00491* +X-00719* +Y00496* +X-0072Y00502* +X-00723Y00507* +X-00728Y0051* +X-00733Y00511* +G37* +G36* +X-00634Y00541D02* +X-00665D01* +Y00514* +X-00651* +X-00644Y00515* +X-00639Y00519* +X-00635Y00524* +X-00634Y00531* +Y00541* +G37* +G36* +X-01452Y00565D02* +X-01483D01* +Y00554* +X-01482Y00548* +X-01478Y00542* +X-01473Y00538* +X-01466Y00537* +X-01452* +Y00565* +G37* +G36* +X-00428Y00543D02* +X-00442D01* +Y00505* +X-00441Y00505* +X-00435Y0051* +X-0043Y00517* +X-00428Y00525* +Y00543* +G37* +G36* +X-0068Y00541D02* +X-00711D01* +Y00531* +X-0071Y00524* +X-00706Y00519* +X-00701Y00515* +X-00694Y00514* +X-0068* +Y00541* +G37* +G36* +X01371Y00222D02* +X01366D01* +Y00203* +X01385* +Y00208* +X01384Y00214* +X01381Y00218* +X01376Y00221* +X01371Y00222* +G37* +G36* +X01449Y-00074D02* +X01408D01* +Y-00134* +X01413Y-00133* +X01425Y-00128* +X01435Y-0012* +X01442Y-0011* +X01447Y-00099* +X01449Y-00086* +Y-00074* +G37* +G36* +X00897Y00101D02* +X00869D01* +Y0007* +X0088* +X00886Y00071* +X00892Y00075* +X00896Y0008* +X00897Y00087* +Y00101* +G37* +G36* +X-00865Y-00121D02* +X-00889D01* +X-00897Y-00123* +X-00904Y-00128* +X-00908Y-00134* +X-00908Y-00135* +X-00865* +Y-00121* +G37* +G36* +X-00826D02* +X-0085D01* +Y-00135* +X-00806* +X-00806Y-00134* +X-00811Y-00128* +X-00817Y-00123* +X-00826Y-00121* +G37* +G36* +X01385Y00188D02* +X01366D01* +Y00169* +X01371* +X01376Y0017* +X01381Y00173* +X01384Y00177* +X01385Y00183* +Y00188* +G37* +G36* +X-00973Y00198D02* +X-00987D01* +Y0017* +X-00956* +Y00181* +X-00957Y00187* +X-00961Y00193* +X-00966Y00197* +X-00973Y00198* +G37* +G36* +X01054Y0014D02* +X01035D01* +Y00135* +X01036Y0013* +X01039Y00125* +X01043Y00122* +X01049Y00121* +X01054* +Y0014* +G37* +G36* +X01227Y00165D02* +X01213D01* +X01206Y00164* +X01201Y0016* +X01197Y00155* +X01196Y00148* +Y00138* +X01227* +Y00165* +G37* +G36* +X-006Y00837D02* +X-00605D01* +X-0061Y00835* +X-00615Y00832* +X-00618Y00828* +X-00619Y00822* +Y00817* +X-006* +Y00837* +G37* +G36* +X00229Y00846D02* +X00228D01* +X00223Y00845* +X00219Y00842* +X00216Y00838* +X00215Y00833* +Y00819* +X00229* +Y00846* +G37* +G36* +X01131Y00797D02* +X01116D01* +X01111Y00796* +X01107Y00793* +X01104Y00789* +X01103Y00784* +Y00784* +X01131* +Y00797* +G37* +G36* +X0116D02* +X01146D01* +Y00784* +X01173* +Y00784* +X01172Y00789* +X01169Y00793* +X01165Y00796* +X0116Y00797* +G37* +G36* +X-01441Y00884D02* +X-01467D01* +Y00849* +X-01457* +X-01451Y0085* +X-01446Y00854* +X-01442Y00859* +X-01441Y00866* +Y00884* +G37* +G36* +X-01457Y00935D02* +X-01467D01* +Y00899* +X-01441* +Y00918* +X-01442Y00924* +X-01446Y0093* +X-01451Y00933* +X-01457Y00935* +G37* +G36* +X01217Y00846D02* +X01217D01* +X01212Y00845* +X01208Y00842* +X01205Y00838* +X01204Y00833* +Y00819* +X01217* +Y00846* +G37* +G36* +X-01482Y00884D02* +X-01509D01* +Y00866* +X-01507Y00859* +X-01504Y00854* +X-01498Y0085* +X-01492Y00849* +X-01482* +Y00884* +G37* +G36* +X01217Y00804D02* +X01204D01* +Y00789* +X01205Y00784* +X01208Y0078* +X01212Y00777* +X01217Y00776* +X01217* +Y00804* +G37* +G36* +X-00442Y00596D02* +Y00558D01* +X-00428* +Y00576* +X-0043Y00584* +X-00435Y00591* +X-00441Y00596* +X-00442Y00596* +G37* +G36* +X-0039Y00604D02* +X-004D01* +Y00586* +X-00399Y00579* +X-00395Y00574* +X-0039Y0057* +Y00604* +G37* +G36* +X00593Y00572D02* +X00579D01* +X00572Y00571* +X00567Y00567* +X00563Y00561* +X00562Y00555* +Y00544* +X00593* +Y00572* +G37* +G36* +X-00457Y00596D02* +X-00458Y00596D01* +X-00465Y00591* +X-00469Y00584* +X-00471Y00576* +Y00558* +X-00457* +Y00596* +G37* +G36* +X-00871Y00695D02* +X-00876D01* +Y00675* +X-00857* +Y0068* +X-00858Y00686* +X-00861Y0069* +X-00866Y00693* +X-00871Y00695* +G37* +G36* +X-00836Y00726D02* +X-00867D01* +Y00716* +X-00866Y00709* +X-00862Y00704* +X-00857Y007* +X-0085Y00699* +X-00836* +Y00726* +G37* +G36* +X-0039Y00652D02* +X-00395Y00649D01* +X-00399Y00643* +X-004Y00637* +Y00619* +X-0039* +Y00652* +G37* +G36* +X-00299D02* +Y00619D01* +X-00289* +Y00637* +X-0029Y00643* +X-00294Y00649* +X-00299Y00652* +G37* +G36* +X00411Y-001D02* +X004Y-00101D01* +X00391Y-00105* +X00383Y-00111* +X00377Y-00119* +X00373Y-00128* +X00372Y-00139* +X00373Y-00149* +X00377Y-00158* +X00383Y-00166* +X00391Y-00172* +X004Y-00176* +X00411Y-00177* +X00421Y-00176* +X0043Y-00172* +X00438Y-00166* +X00444Y-00158* +X00448Y-00149* +X00449Y-00139* +X00448Y-00128* +X00444Y-00119* +X00438Y-00111* +X0043Y-00105* +X00421Y-00101* +X00411Y-001* +G37* +G36* +X-00233Y-00382D02* +X-00238D01* +Y-00401* +X-00219* +Y-00396* +X-0022Y-00391* +X-00223Y-00386* +X-00228Y-00383* +X-00233Y-00382* +G37* +G36* +X-00003Y-0037D02* +X-00022D01* +Y-00384* +X00015* +X00015Y-00383* +X00011Y-00377* +X00004Y-00372* +X-00003Y-0037* +G37* +G36* +X00148Y-00399D02* +X0011D01* +X0011Y-004* +X00114Y-00407* +X00121Y-00411* +X00129Y-00413* +X00148* +Y-00399* +G37* +G36* +X002D02* +X00163D01* +Y-00413* +X00181* +X00189Y-00411* +X00196Y-00407* +X002Y-004* +X002Y-00399* +G37* +G36* +X-0011Y-00361D02* +X-00115D01* +X-00121Y-00362* +X-00125Y-00365* +X-00128Y-0037* +X-00129Y-00375* +Y-0038* +X-0011* +Y-00361* +G37* +G36* +X-01421Y-00346D02* +X-01434Y-0036D01* +X-01421Y-00373* +X-01417Y-0037* +X-01414Y-00365* +X-01413Y-0036* +X-01414Y-00354* +X-01417Y-00349* +X-01421Y-00346* +G37* +G36* +X00148Y-0037D02* +X00129D01* +X00121Y-00372* +X00114Y-00377* +X0011Y-00383* +X0011Y-00384* +X00148* +Y-0037* +G37* +G36* +X00181D02* +X00163D01* +Y-00384* +X002* +X002Y-00383* +X00196Y-00377* +X00189Y-00372* +X00181Y-0037* +G37* +G36* +X00015Y-00399D02* +X-00022D01* +Y-00413* +X-00003* +X00004Y-00411* +X00011Y-00407* +X00015Y-004* +X00015Y-00399* +G37* +G36* +X00148Y-00449D02* +X0011D01* +X0011Y-0045* +X00114Y-00457* +X00121Y-00461* +X00129Y-00463* +X00148* +Y-00449* +G37* +G36* +X002D02* +X00163D01* +Y-00463* +X00181* +X00189Y-00461* +X00196Y-00457* +X002Y-0045* +X002Y-00449* +G37* +G36* +X00354Y-00445D02* +X00335D01* +Y-0045* +X00336Y-00456* +X00339Y-0046* +X00344Y-00463* +X00349Y-00464* +X00354* +Y-00445* +G37* +G36* +X00634Y-00445D02* +X0063D01* +X00624Y-00446* +X0062Y-00449* +X00617Y-00454* +X00615Y-00459* +Y-00464* +X00634* +Y-00445* +G37* +G36* +X00181Y-0042D02* +X00163D01* +Y-00434* +X002* +X002Y-00433* +X00196Y-00427* +X00189Y-00422* +X00181Y-0042* +G37* +G36* +X00354Y-00411D02* +X00349D01* +X00344Y-00412* +X00339Y-00415* +X00336Y-00419* +X00335Y-00425* +Y-0043* +X00354* +Y-00411* +G37* +G36* +X-00219Y-00416D02* +X-00238D01* +Y-00436* +X-00233* +X-00228Y-00435* +X-00223Y-00432* +X-0022Y-00427* +X-00219Y-00422* +Y-00416* +G37* +G36* +X00148Y-0042D02* +X00129D01* +X00121Y-00422* +X00114Y-00427* +X0011Y-00433* +X0011Y-00434* +X00148* +Y-0042* +G37* +G36* +Y-0027D02* +X00129D01* +X00121Y-00272* +X00114Y-00277* +X0011Y-00283* +X0011Y-00284* +X00148* +Y-0027* +G37* +G36* +X00181D02* +X00163D01* +Y-00284* +X002* +X002Y-00283* +X00196Y-00277* +X00189Y-00272* +X00181Y-0027* +G37* +G36* +X00148Y-00299D02* +X0011D01* +X0011Y-003* +X00114Y-00307* +X00121Y-00311* +X00129Y-00313* +X00148* +Y-00299* +G37* +G36* +X002D02* +X00163D01* +Y-00313* +X00181* +X00189Y-00311* +X00196Y-00307* +X002Y-003* +X002Y-00299* +G37* +G36* +X-01494Y-00205D02* +X-01513D01* +Y-00224* +X-01508* +X-01502Y-00223* +X-01498Y-0022* +X-01495Y-00215* +X-01494Y-0021* +Y-00205* +G37* +G36* +X00541Y-00173D02* +X00527D01* +Y-00187* +X00528Y-00192* +X00531Y-00196* +X00535Y-00199* +X0054Y-002* +X00541* +Y-00173* +G37* +G36* +X-00003Y-0027D02* +X-00055D01* +X-00063Y-00272* +X-00069Y-00276* +X-0007* +X-00075Y-00277* +X-0008Y-0028* +X-00082Y-00279* +X-00091Y-00278* +X-00099Y-00279* +X-00108Y-00283* +X-00115Y-00288* +X-0012Y-00295* +X-00124Y-00304* +X-00125Y-00313* +X-00124Y-00321* +X-0012Y-0033* +X-00115Y-00337* +X-00108Y-00342* +X-00099Y-00346* +X-00091Y-00347* +X-00082Y-00346* +X-00079Y-00345* +X-00075Y-00347* +X-00074Y-0035* +X-0007Y-00357* +X-00063Y-00361* +X-00055Y-00363* +X-00003* +X00004Y-00361* +X0001Y-00357* +X00011* +X00016Y-00356* +X00021Y-00353* +X00023Y-00354* +X00032Y-00355* +X0004Y-00354* +X00049Y-0035* +X00056Y-00345* +X00061Y-00338* +X00065Y-00329* +X00066Y-00321* +X00065Y-00312* +X00061Y-00303* +X00056Y-00296* +X00049Y-00291* +X0004Y-00287* +X00032Y-00286* +X00023Y-00287* +X0002Y-00288* +X00016Y-00286* +X00015Y-00283* +X00011Y-00277* +X00004Y-00272* +X-00003Y-0027* +G37* +G36* +X01227Y-00215D02* +X01222Y-00216D01* +X0121Y-00221* +X012Y-00229* +X01193Y-00239* +X01188Y-0025* +X01186Y-00263* +Y-00275* +X01227* +Y-00215* +G37* +G36* +X00181Y-0032D02* +X00163D01* +Y-00334* +X002* +X002Y-00333* +X00196Y-00327* +X00189Y-00322* +X00181Y-0032* +G37* +G36* +X-00762Y-00332D02* +X-00767D01* +X-00773Y-00333* +X-00777Y-00336* +X-0078Y-00341* +X-00781Y-00346* +Y-00351* +X-00762* +Y-00332* +G37* +G36* +X-00742D02* +X-00747D01* +Y-00351* +X-00728* +Y-00346* +X-00729Y-00341* +X-00732Y-00336* +X-00736Y-00333* +X-00742Y-00332* +G37* +G36* +X00148Y-00349D02* +X0011D01* +X0011Y-0035* +X00114Y-00357* +X00121Y-00361* +X00129Y-00363* +X00148* +Y-00349* +G37* +G36* +X002D02* +X00163D01* +Y-00363* +X00181* +X00189Y-00361* +X00196Y-00357* +X002Y-0035* +X002Y-00349* +G37* +G36* +X01227Y-0029D02* +X01186D01* +Y-00302* +X01188Y-00315* +X01193Y-00327* +X012Y-00337* +X0121Y-00345* +X01222Y-0035* +X01227Y-0035* +Y-0029* +G37* +G36* +X00148Y-0032D02* +X00129D01* +X00121Y-00322* +X00114Y-00327* +X0011Y-00333* +X0011Y-00334* +X00148* +Y-0032* +G37* +G36* +X-00698Y-00332D02* +X-00703D01* +X-00709Y-00333* +X-00713Y-00336* +X-00716Y-00341* +X-00717Y-00346* +Y-00351* +X-00698* +Y-00332* +G37* +G36* +X-00678D02* +X-00683D01* +Y-00351* +X-00664* +Y-00346* +X-00665Y-00341* +X-00668Y-00336* +X-00672Y-00333* +X-00678Y-00332* +G37* +%LNunisolder52_front-3*% +%LPD*% +G54D10* +X01394Y00271D03* +X01368D03* +X01342D03* +X01317D03* +X01189Y00496D03* +X01163D03* +Y00271D03* +X01189D03* +X01215D03* +X0124D03* +X01266D03* +X01291D03* +X01215Y00496D03* +X0124D03* +X01266D03* +X01291D03* +X01317D03* +X01342D03* +X01368D03* +X01394D03* +G54D11* +X00605Y-00985D03* +Y-0096D03* +Y-00934D03* +Y-00909D03* +Y-00883D03* +Y-00857D03* +Y-00832D03* +X0038Y-00985D03* +Y-0096D03* +Y-00934D03* +Y-00909D03* +Y-00883D03* +Y-00857D03* +Y-00832D03* +G54D12* +X01059Y-00198D03* +Y-00107D03* +G54D13* +X00902Y-00153D03* +G54D14* +X-01252Y00074D03* +X-01266Y0006D03* +X-01279Y00047D03* +X-01293Y00033D03* +X-01307Y00019D03* +X-01321Y00005D03* +X-01335Y-00008D03* +X-01349Y-00022D03* +X-01363Y-00036D03* +X-01377Y-0005D03* +X-01391Y-00064D03* +X-01405Y-00078D03* +X-01419Y-00092D03* +X-01433Y-00106D03* +X-01446Y-00119D03* +X-0146Y-00133D03* +X-01151Y-00442D03* +X-01137Y-00428D03* +X-01124Y-00415D03* +X-0111Y-00401D03* +X-01096Y-00387D03* +X-01082Y-00373D03* +X-01068Y-00359D03* +X-01054Y-00345D03* +X-0104Y-00331D03* +X-01026Y-00317D03* +X-01012Y-00303D03* +X-00998Y-00289D03* +X-00984Y-00275D03* +X-0097Y-00261D03* +X-00957Y-00248D03* +X-00943Y-00234D03* +G54D15* +X-0146Y-00234D03* +X-01446Y-00248D03* +X-01433Y-00261D03* +X-01419Y-00275D03* +X-01405Y-00289D03* +X-01391Y-00303D03* +X-01377Y-00317D03* +X-01363Y-00331D03* +X-01349Y-00345D03* +X-01335Y-00359D03* +X-01321Y-00373D03* +X-01307Y-00387D03* +X-01293Y-00401D03* +X-01279Y-00415D03* +X-01266Y-00428D03* +X-01252Y-00442D03* +X-00943Y-00133D03* +X-00957Y-00119D03* +X-0097Y-00106D03* +X-00984Y-00092D03* +X-00998Y-00078D03* +X-01012Y-00064D03* +X-01026Y-0005D03* +X-0104Y-00036D03* +X-01054Y-00022D03* +X-01068Y-00008D03* +X-01082Y00005D03* +X-01096Y00019D03* +X-0111Y00033D03* +X-01124Y00047D03* +X-01137Y0006D03* +X-01151Y00074D03* +G54D16* +X-00883Y-00988D03* +Y-00704D03* +X01428Y-0042D03* +Y-00703D03* +G54D17* +X-00846Y00515D03* +X-00884D03* +X-00921D03* +Y0061D03* +X-00884D03* +X-00846D03* +G54D18* +X-00642Y-01095D03* +Y-0102D03* +X-00725Y-01058D03* +X00823Y-00919D03* +X0074Y-00956D03* +Y-00881D03* +X01061Y-00427D03* +X01144Y-00389D03* +Y-00464D03* +X00848Y-00428D03* +X00765Y-00465D03* +Y-0039D03* +X00848Y-00588D03* +X00765Y-00625D03* +Y-0055D03* +X-01381Y-01162D03* +X-01464Y-01199D03* +Y-01124D03* +X01056Y00813D03* +Y00739D03* +X01138Y00776D03* +X-0112Y-00648D03* +X-01037Y-00611D03* +Y-00686D03* +X01206Y-00563D03* +X01289Y-00526D03* +Y-00601D03* +X01206Y-00424D03* +X01289Y-00386D03* +Y-00461D03* +G54D19* +X00009Y-01237D03* +Y-01187D03* +Y-01137D03* +Y-01087D03* +Y-01037D03* +Y-00987D03* +Y-00937D03* +Y-00887D03* +X-00361Y-01237D03* +Y-01187D03* +Y-01137D03* +Y-01087D03* +Y-01037D03* +Y-00987D03* +Y-00937D03* +Y-00887D03* +G54D20* +X-00857Y00207D03* +Y00157D03* +Y00107D03* +Y00057D03* +Y00007D03* +Y-00043D03* +Y-00093D03* +Y-00143D03* +X-00668Y00207D03* +Y00157D03* +Y00107D03* +Y00057D03* +Y00007D03* +Y-00043D03* +Y-00093D03* +Y-00143D03* +G54D21* +X-006Y0055D03* +X00889Y-01071D03* +G54D22* +X-0055Y0055D03* +X-005D03* +X-0045D03* +X-006Y00736D03* +X-0055D03* +X-005D03* +X-0045D03* +X01042Y00457D03* +X00992D03* +X00942D03* +X00892D03* +X01042Y00272D03* +X00992D03* +X00942D03* +X00892D03* +X00939Y-01071D03* +X00989D03* +X01039D03* +X00889Y-00886D03* +X00939D03* +X00989D03* +X01039D03* +G54D23* +X-01335Y00892D03* +X-01475D03* +G54D24* +X-00383Y00611D03* +X-00357D03* +X-00332D03* +X-00306D03* +X-00383Y00777D03* +X-00357D03* +X-00332D03* +X-00306D03* +G54D25* +X0048Y-01208D03* +X0024D03* +G54D26* +X-0075Y00826D03* +Y00751D03* +X01335Y00687D03* +Y00761D03* +X-00238Y0056D03* +Y00634D03* +X01235Y00056D03* +Y0013D03* +X-01383Y0043D03* +Y00505D03* +X-01461Y00446D03* +Y00371D03* +X01107Y00273D03* +Y00348D03* +X00814Y-00273D03* +Y-00198D03* +X-01445Y00572D03* +Y00647D03* +X00689Y-01039D03* +Y-01114D03* +X-00995Y00163D03* +Y00088D03* +X-01367Y00734D03* +Y00659D03* +X-01422Y-00721D03* +Y-00646D03* +X00228Y-00641D03* +Y-00716D03* +X-00224Y-00661D03* +Y-00736D03* +X-00312Y-00681D03* +Y-00756D03* +X00948Y00116D03* +Y00191D03* +X00983Y00779D03* +Y00854D03* +X00375Y00816D03* +Y00891D03* +X0051Y-00097D03* +Y-00022D03* +X-0075Y006D03* +Y00675D03* +X-00673Y00693D03* +Y00767D03* +X-01048Y00719D03* +Y00644D03* +X-00673Y00549D03* +Y00623D03* +X00814Y-00129D03* +Y-00054D03* +X-00828Y00809D03* +Y00734D03* +X01312Y00056D03* +Y0013D03* +X00702Y0012D03* +Y00195D03* +X00824Y-01015D03* +Y-0109D03* +X00705Y00468D03* +Y00543D03* +X00601Y00462D03* +Y00537D03* +G54D27* +X-00508Y00301D03* +X-00575D03* +X-00508Y-0001D03* +X-00575D03* +X-00508Y00068D03* +X-00575D03* +X-00508Y-00088D03* +X-00575D03* +X-00507Y-00165D03* +X-00575D03* +X-00508Y00145D03* +X-00575D03* +X-00508Y00223D03* +X-00575D03* +G54D28* +X00357Y00743D03* +X00432D03* +X-01279Y-01102D03* +X-01354D03* +X00005Y0051D03* +X0008D03* +X01238Y00716D03* +X01163D03* +X-01307Y00305D03* +X-01382D03* +X00917Y-0036D03* +X00992D03* +X00917Y-00644D03* +X00992D03* +X00917Y-00439D03* +X00992D03* +X00917Y-00565D03* +X00992D03* +X-01063Y0053D03* +X-00988D03* +X-01062Y00452D03* +X-00987D03* +X-01305Y00808D03* +X-01379D03* +X-01311Y-0118D03* +X-01236D03* +X-0145Y0072D03* +X-01525D03* +X00924Y00543D03* +X00999D03* +X-01191Y00895D03* +X-01266D03* +X01131Y00887D03* +X01056D03* +X-01524Y00803D03* +X-0145D03* +X00787Y00187D03* +X00862D03* +Y00109D03* +X00787D03* +X00092Y-01043D03* +X00167D03* +X00092Y-00965D03* +X00167D03* +X00876Y-00786D03* +X00951D03* +X00752Y00937D03* +X00827D03* +X00606D03* +X00681D03* +G54D29* +X00413Y-00437D03* +X00361D03* +X01306Y00196D03* +X01359D03* +X-0098Y-00456D03* +X-00927D03* +X00642Y-00472D03* +X00694D03* +X-01219Y00458D03* +X-01271D03* +X-01196Y-006D03* +X-01144D03* +X-00935Y00668D03* +X-00883D03* +X-00593Y0081D03* +X-0054D03* +X-00797Y00484D03* +X-00745D03* +X01252Y00572D03* +X01305D03* +X00083Y-01214D03* +X00136D03* +X00135Y-01109D03* +X00082D03* +X-00297Y-00409D03* +X-00245D03* +G54D30* +X-0075Y00182D03* +X-00776D03* +X-00776Y00129D03* +X-0075D03* +Y00077D03* +X-00776D03* +Y-00078D03* +X-0075D03* +Y-00026D03* +X-00776D03* +Y00025D03* +X-0075D03* +G54D31* +X-01521Y-00198D03* +Y-00145D03* +X-01388Y-00499D03* +Y-00446D03* +X00677Y-00925D03* +Y-00978D03* +X-00103Y-00387D03* +Y-0044D03* +X0032Y-00794D03* +Y-00741D03* +X01062Y00147D03* +Y002D03* +X00636Y00206D03* +Y00153D03* +X-01061Y00146D03* +Y00093D03* +X-0141Y00038D03* +Y00091D03* +X00814Y-00758D03* +Y-0081D03* +X-01016Y-00733D03* +Y-00786D03* +X-00525Y-01001D03* +Y-01053D03* +X-00755Y-00411D03* +Y-00358D03* +X-00691D03* +Y-00411D03* +X00844Y00455D03* +Y00508D03* +X-00448Y-01D03* +Y-01053D03* +G54D32* +X-01482Y-00323D03* +X-01445Y-0036D03* +G54D33* +X-00029Y-00292D03* +Y-00342D03* +Y-00392D03* +Y-00442D03* +X00155Y-00292D03* +Y-00342D03* +Y-00392D03* +Y-00442D03* +X00603Y00407D03* +Y00357D03* +Y00307D03* +Y00257D03* +X00788Y00407D03* +Y00357D03* +Y00307D03* +G54D34* +X01104Y-00595D03* +X01141Y-00678D03* +X01066D03* +X00514Y-00282D03* +X00551Y-00365D03* +X00476D03* +X00376Y-00282D03* +X00413Y-00365D03* +X00338D03* +X-00373Y-00348D03* +X-00298D03* +X-00336Y-00265D03* +X00274Y00894D03* +X00311Y00811D03* +X00236D03* +X01225D03* +X01187Y00894D03* +X01262D03* +X00586Y-00248D03* +X00548Y-00165D03* +X00623D03* +X-00538Y-01228D03* +X-00575Y-01145D03* +X-00501D03* +G54D35* +X00788Y00257D03* +G54D36* +X-01186Y00592D03* +X-01239Y00539D03* +G54D37* +X-00019Y00455D02* +X0001Y00425D01* +X-0018Y00455D02* +X-00019D01* +X-0021Y00426D02* +X-0018Y00455D01* +X-00027Y00435D02* +X00002Y00405D01* +X-00172Y00435D02* +X-00027D01* +X-00202Y00405D02* +X-00172Y00435D01* +X-00035Y00415D02* +X-00005Y00385D01* +X-00164Y00415D02* +X-00035D01* +X-00194Y00385D02* +X-00164Y00415D01* +X-00044Y00395D02* +X-00014Y00365D01* +X-00155Y00395D02* +X-00044D01* +X-00185Y00365D02* +X-00155Y00395D01* +X-00052Y00375D02* +X-00022Y00345D01* +X-00147Y00375D02* +X-00052D01* +X-00177Y00345D02* +X-00147Y00375D01* +X-0006Y00355D02* +X-0003Y00325D01* +X-00139Y00355D02* +X-0006D01* +X-00169Y00325D02* +X-00139Y00355D01* +X-00069Y00335D02* +X-00039Y00305D01* +X-0013Y00335D02* +X-00069D01* +X-0016Y00305D02* +X-0013Y00335D01* +X0138Y00659D02* +Y00714D01* +X01369Y00648D02* +X0138Y00659D01* +X01369Y00496D02* +Y00648D01* +X01335Y00757D02* +X01336D01* +X0138Y00714* +X00938Y00809D02* +X00983Y00854D01* +X00938Y00783D02* +Y00809D01* +X00906Y00751D02* +X00938Y00783D01* +X01013Y00915D02* +X01053Y00955D01* +X00861Y00869D02* +X00907Y00915D01* +X01461Y00702D02* +Y0081D01* +X01336Y00935D02* +X01461Y0081D01* +X01089Y00935D02* +X01336D01* +X01497Y00491D02* +Y00666D01* +X01461Y00702D02* +X01497Y00666D01* +X01464Y00458D02* +X01497Y00491D01* +X01417Y00626D02* +Y00636D01* +X01312Y00781D02* +X01335Y00757D01* +X01368Y00496D02* +X01369Y00496D01* +X01276Y00887D02* +X01312Y00851D01* +Y00781D02* +Y00851D01* +X01131Y00887D02* +X01276D01* +X0121Y00688D02* +X01238Y00716D01* +X01349Y0056D02* +Y00675D01* +X01056Y00739D02* +Y00813D01* +X0103D02* +X01056D01* +X00996Y00779D02* +X0103Y00813D01* +X01056Y00739D02* +X01137D01* +X01189Y00687* +Y00496D02* +Y00687D01* +X00983Y00779D02* +X00996D01* +X00274Y00894D02* +X00372D01* +X00375Y00891* +X00419Y00846* +X00496Y00751D02* +X00506D01* +X00459Y00787D02* +X00496Y00751D01* +X00436Y00787D02* +X00459D01* +X00907Y00915D02* +X01013D01* +X00861Y00795D02* +Y00869D01* +X0105Y00895D02* +X01089Y00935D01* +X0095Y00895D02* +X0105D01* +X00906Y00851D02* +X0095Y00895D01* +X00906Y00751D02* +X00917D01* +X01053Y00955D02* +X01431D01* +X00812Y00921D02* +X00827Y00937D01* +X00812Y00857D02* +Y00921D01* +X00806Y00851D02* +X00812Y00857D01* +X00661Y00805D02* +Y00882D01* +X00606Y00937D02* +X00661Y00882D01* +X00681Y00937D02* +X00699Y00919D01* +X-01227Y00395D02* +Y00454D01* +X-01257Y00366D02* +X-01227Y00395D01* +X-0131Y-00513D02* +Y-00485D01* +X-01327Y-00467D02* +X-0131Y-00485D01* +X-01281Y-00485D02* +X-01152D01* +X-01307Y-00458D02* +X-01281Y-00485D01* +X-01307Y-00458D02* +Y-00442D01* +X-00988Y0053D02* +X-00966Y00552D01* +X-00951Y00788D02* +X-00931Y00808D01* +X-00996Y00788D02* +X-00951D01* +X-01047Y00737D02* +X-00996Y00788D01* +X-00735Y00808D02* +X-00695Y00767D01* +X-00931Y00808D02* +X-00735D01* +X-00695Y00767D02* +X-00673D01* +X-00769Y00619D02* +X-0075Y006D01* +X00802Y00357D02* +X00841Y00318D01* +X00788Y00357D02* +X00802D01* +X00603Y00407D02* +Y00468D01* +X00533Y00276D02* +X00539Y00282D01* +X-01471Y-01117D02* +X-01464Y-01124D01* +X-01377D02* +X-01354Y-01102D01* +X-01464Y-01124D02* +X-01377D01* +X-00837Y00619D02* +X-00769D01* +X-00331Y00737D02* +Y00774D01* +X-00366Y00702D02* +X-00331Y00737D01* +X-00384Y00702D02* +X-00366D01* +X-005Y00548D02* +Y00604D01* +X-00426Y00661D02* +X-00384Y00702D01* +X-00443Y00661D02* +X-00426D01* +X-005Y00604D02* +X-00443Y00661D01* +X-00473Y-0021D02* +X-00446Y-00183D01* +X-00607Y-0021D02* +X-00473D01* +X-00647Y-0017D02* +X-00607Y-0021D01* +X00925Y00055D02* +Y00131D01* +X00855Y-00014D02* +X00925Y00055D01* +X01375Y-00586D02* +X01434D01* +X0136Y-00601D02* +X01375Y-00586D01* +X01289Y-00601D02* +X0136D01* +X01471Y-00119D02* +X01519Y-00071D01* +X01471Y-00216D02* +X01519Y-00264D01* +X01471Y-00216D02* +Y-00119D01* +X01431Y00955D02* +X01519Y00867D01* +X00652Y00735D02* +X0069D01* +X00699Y00853D02* +Y00919D01* +X00511Y00846D02* +Y00875D01* +X00429Y00958D02* +X00511Y00875D01* +X00227Y00958D02* +X00429D01* +X00419Y00804D02* +X00436Y00787D01* +X00419Y00804D02* +Y00846D01* +X00432Y00743D02* +X0045D01* +X00503Y00689* +X-00929Y-00275D02* +X-00913D01* +X-00827Y-0019* +X-00783Y00378D02* +X-00744D01* +X00476Y-00365D02* +Y-00301D01* +X-00095Y00657D02* +X00099D01* +X-00216Y00778D02* +X-00095Y00657D01* +X00099D02* +X00213Y00771D01* +X00197Y00533D02* +X00203Y00539D01* +X00589Y00307D02* +X00603D01* +X00537Y00359D02* +Y00456D01* +Y00359D02* +X00589Y00307D01* +X00697Y00116D02* +X00702Y0012D01* +X00533Y00151D02* +X00568Y00116D01* +X00533Y00151D02* +Y00276D01* +X00568Y00116D02* +X00697D01* +X00322Y00628D02* +X00339Y00645D01* +X00683Y-00349D02* +Y-00168D01* +X00574Y-00059D02* +X00683Y-00168D01* +X00574Y-00059D02* +Y00017D01* +X00475Y00116D02* +X00574Y00017D01* +X00475Y00116D02* +Y00287D01* +X00554Y-00072D02* +Y00005D01* +X00455Y00104D02* +X00554Y00005D01* +X00455Y00104D02* +Y00279D01* +X00623Y-00165D02* +Y-00141D01* +X00554Y-00072D02* +X00623Y-00141D01* +X00257Y00496D02* +X00314D01* +X00265Y00476D02* +X00322D01* +X00213Y00771D02* +X00252D01* +X00274Y00792* +X-01191Y00895D02* +X-01132Y00955D01* +X00274Y00792D02* +Y00894D01* +X00186Y00916D02* +X00227Y00958D01* +X00186Y00808D02* +Y00916D01* +X00078Y007D02* +X00186Y00808D01* +X-00076Y007D02* +X00078D01* +X-01239Y00539D02* +X-01227Y00527D01* +Y00458D02* +Y00527D01* +X-01166Y00592D02* +X-01134Y00625D01* +X-01186Y00592D02* +X-01166D01* +X-01314Y00574D02* +X-01202Y00686D01* +X-01314Y00381D02* +Y00574D01* +X-01383Y0057D02* +X-01223Y0073D01* +X-01383Y00505D02* +Y0057D01* +X-01239Y00851D02* +X-01194Y00895D01* +X-01261Y00851D02* +X-01239D01* +X-01305Y00808D02* +X-01261Y00851D01* +X-01194Y00895D02* +X-01191D01* +X-01257Y00366D02* +X-01255Y00368D01* +X-01257Y00281D02* +Y00366D01* +X-01377Y00161D02* +X-01257Y00281D01* +X-01443Y-00012D02* +Y00252D01* +X-01314Y00381* +X-01485Y00347D02* +X-01392Y00439D01* +X-01485Y00001D02* +Y00347D01* +X-01379Y00747D02* +Y00808D01* +Y00747D02* +X-01367Y00734D01* +X-01445Y00654D02* +X-01379Y00719D01* +X-01445Y00647D02* +Y00654D01* +X-01452Y00648D02* +X-01445D01* +X-01507Y00594D02* +X-01452Y00648D01* +X-01507Y-00004D02* +Y00594D01* +X-0149Y0064D02* +Y00681D01* +X-01527Y00603D02* +X-0149Y0064D01* +X-01527Y-00012D02* +Y00603D01* +X-01367Y00892D02* +X-01335D01* +X-0145Y00809D02* +X-01367Y00892D01* +X-0145Y00803D02* +Y00809D01* +X-0149Y00681D02* +X-0145Y0072D01* +X-01328Y00895D02* +X-01266D01* +X-0145Y0072D02* +X-0145Y00721D01* +Y00803* +X-00309Y00562D02* +X-00286Y00538D01* +Y00517D02* +Y00538D01* +Y00517D02* +X-0027Y00501D01* +X-005Y00722D02* +Y00736D01* +X-01237Y00358D02* +X-01156Y00438D01* +X-01237Y00273D02* +Y00358D01* +X-01217Y00349D02* +X-01158Y00407D01* +X-01217Y00264D02* +Y00349D01* +X-01158Y00407D02* +X-01035D01* +X-00981Y00462* +X00707Y00543D02* +Y00543D01* +X00709* +X00705D02* +X00707D01* +X0066Y00525D02* +Y00573D01* +X00603Y00468D02* +X0066Y00525D01* +X00367Y00305D02* +X00429D01* +X00752Y00433D02* +Y0047D01* +X00736Y00418D02* +X00752Y00433D01* +X00736Y00307D02* +Y00418D01* +X00884Y00378D02* +X00917D01* +X00988Y00307* +X00738Y00307D02* +X00788D01* +X00921Y0054D02* +X00924Y00543D01* +X00841Y0024D02* +Y00318D01* +X00702Y0012D02* +X00747Y00165D01* +X00787Y00187D02* +X00841Y0024D01* +X01009Y00372D02* +X01095Y00286D01* +Y00111D02* +Y00286D01* +X01251Y00572D02* +X01266Y00557D01* +X01108Y00664D02* +X01147D01* +X0145Y0056D02* +Y00593D01* +X01426Y00617D02* +X0145Y00593D01* +X01426Y00617D02* +X01426D01* +X01417Y00626D02* +X01426Y00617D01* +X01416Y0046D02* +Y00526D01* +X0145Y0056* +X01163Y00496D02* +Y0058D01* +X01139Y00402D02* +Y00575D01* +X01147Y00664D02* +X01158Y00653D01* +X-01133Y00489D02* +X-01104Y00518D01* +X-01133Y00488D02* +Y00489D01* +X-01156Y00438D02* +Y00465D01* +X-01105Y00519D02* +X-01104Y00518D01* +X-01156Y00465D02* +X-01133Y00488D01* +X-01377Y00021D02* +Y00161D01* +X-01337Y00048D02* +Y00144D01* +X-01357Y0004D02* +Y00153D01* +X-01316Y00083D02* +Y00136D01* +X-01294Y00088D02* +Y0013D01* +X-01274Y00098D02* +Y00122D01* +X01325Y00447D02* +X01342Y00464D01* +X01245Y00447D02* +X01325D01* +X01256Y00401D02* +X01262Y00407D01* +X01219Y00421D02* +X01245Y00447D01* +X01219Y00405D02* +Y00421D01* +X01294Y00382D02* +X01313Y00401D01* +X01294Y00331D02* +Y00382D01* +X01314Y00374D02* +X01357Y00418D01* +X01314Y00341D02* +Y00374D01* +X01394Y00271D02* +Y00438D01* +X01354Y00358D02* +X01368Y00343D01* +X01139Y00402D02* +X01156Y00385D01* +Y00307D02* +Y00385D01* +Y00307D02* +X01163Y00299D01* +X01176Y0032D02* +X01189Y00307D01* +X01176Y0032D02* +Y00362D01* +X01219Y00405* +X01313Y00401D02* +Y00446D01* +X01354Y00418D02* +X01357D01* +X00861Y00202D02* +Y00354D01* +X00884Y00378* +X00988Y00242D02* +Y00307D01* +X00632Y-01025D02* +Y-00985D01* +X00948Y00191D02* +Y00202D01* +X-0138Y-00209D02* +X-01328D01* +X-01292Y-00331D02* +X-01229Y-00394D01* +X-01307Y-00331D02* +X-01292D01* +X01464Y00031D02* +Y00458D01* +X01378Y00008D02* +X0144D01* +X01464Y00031* +X01346Y-00024D02* +X01378Y00008D01* +X01346Y-00137D02* +Y-00024D01* +X00942Y00413D02* +X0096Y00395D01* +X00942Y00413D02* +Y00447D01* +X-00924Y00462D02* +X-00921D01* +X-00981D02* +X-00924D01* +X-00921D02* +Y00506D01* +X-00987Y-00502D02* +X-00835D01* +X-00906Y-00522D02* +X-00844D01* +X-00995D02* +X-00906D01* +X-00407Y-00737D02* +Y-00677D01* +X-00877Y-00603D02* +X-00868Y-00594D01* +X-00984Y-00564D02* +X-00945Y-00603D01* +X-00877* +X-00868Y-00594D02* +X-00862D01* +X-01014Y-00564D02* +X-00984D01* +X-01095Y-00483D02* +X-01014Y-00564D01* +X-00835Y-00502D02* +X-00698Y-00639D01* +X-01064Y-00425D02* +X-00987Y-00502D01* +X-00844Y-00522D02* +X-00707Y-00659D01* +X-01081Y-00435D02* +X-00995Y-00522D01* +X-01152Y-00485D02* +X-01114Y-00523D01* +X-01107Y-00516* +X-01111Y-00483D02* +X-01095D01* +X-01116Y-00478D02* +X-01111Y-00483D01* +X-0098Y-00363D02* +X-00888D01* +X-00957Y-00303D02* +X-00913D01* +X-00461Y-00514D02* +X-00442Y-00495D01* +X-00461Y-00582D02* +Y-00514D01* +X-00482Y-0059D02* +X-00437Y-00634D01* +X-00502Y-00598D02* +X-00446Y-00654D01* +X-00522Y-00607D02* +X-00454Y-00674D01* +X-00461Y-00582D02* +X-00429Y-00614D01* +X00813Y-0055D02* +X00822Y-00541D01* +X00765Y-0055D02* +X00813D01* +X00597Y-006D02* +X00618Y-00621D01* +X-00454Y-00674D02* +X-00323D01* +X-00367Y-00654D02* +X-00353Y-0064D01* +X-00361Y-0062D02* +X-00179D01* +X-0037Y-006D02* +X-00164D01* +X-00446Y-00654D02* +X-00367D01* +X-00376Y-00634D02* +X-00361Y-0062D01* +X-00437Y-00634D02* +X-00376D01* +X-00384Y-00614D02* +X-0037Y-006D01* +X-00429Y-00614D02* +X-00384D01* +X00685Y-00715D02* +Y-00677D01* +X00669Y-00661D02* +X00685Y-00677D01* +X00601Y-00661D02* +X00669D01* +X0056Y-0062D02* +X00601Y-00661D01* +X00452Y-0062D02* +X0056D01* +X00437Y-00634D02* +X00452Y-0062D01* +X00376Y-00634D02* +X00437D01* +X00429Y-00614D02* +X00443Y-006D01* +X00384Y-00614D02* +X00429D01* +X00443Y-006D02* +X00597D01* +X00361Y-0062D02* +X00376Y-00634D01* +X0037Y-006D02* +X00384Y-00614D01* +X00173Y-0062D02* +X00361D01* +X00158Y-00634D02* +X00173Y-0062D01* +X00164Y-006D02* +X0037D01* +X00097Y-00634D02* +X00158D01* +X0015Y-00614D02* +X00164Y-006D01* +X00105Y-00614D02* +X0015D01* +X00082Y-0062D02* +X00097Y-00634D01* +X00091Y-006D02* +X00105Y-00614D01* +X-00082Y-0062D02* +X00082D01* +X-00091Y-006D02* +X00091D01* +X-00165Y-00634D02* +X-00097D01* +X-00082Y-0062* +X-00179Y-0062D02* +X-00165Y-00634D01* +X-00105Y-00614D02* +X-00091Y-006D01* +X-00164Y-006D02* +X-0015Y-00614D01* +X-00105* +X-0022Y-0064D02* +X-00127Y-00733D01* +X-00353Y-0064D02* +X-0022D01* +X-00551Y-00812D02* +Y-00737D01* +X-0063Y-00659D02* +X-00551Y-00737D01* +X-00707Y-00659D02* +X-0063D01* +X-00531Y-00803D02* +Y-00729D01* +X-00622Y-00639D02* +X-00531Y-00729D01* +X-00698Y-00639D02* +X-00622D01* +X-00531Y-00803D02* +X-00398Y-00937D01* +X-00551Y-00812D02* +X-00376Y-00987D01* +X00988Y00441D02* +X01009Y0042D01* +Y00372D02* +Y0042D01* +X00903Y00153D02* +X00925Y00131D01* +X00903Y00219D02* +X00938Y00254D01* +X00903Y00153D02* +Y00219D01* +X00938Y00254D02* +Y00272D01* +X00948Y00202D02* +X00988Y00242D01* +Y00441D02* +Y00457D01* +X00994Y0053D02* +Y00543D01* +Y0053D02* +X01038Y00487D01* +Y00402D02* +Y00487D01* +Y00402D02* +X01097Y00343D01* +X01163Y00271D02* +Y00299D01* +X01245Y00196D02* +X01247D01* +X-00966Y00552D02* +X-00903D01* +X-01036Y00575D02* +X-0099Y00529D01* +X-0109Y00575D02* +X-01036D01* +X-01105Y0056D02* +X-0109Y00575D01* +X00011Y-00342D02* +X00032Y-00321D01* +X-00029Y-00342D02* +X00011D01* +X-00091Y-00313D02* +X-0007Y-00292D01* +X-00029* +X-00903Y00552D02* +X-00884Y00532D01* +X01519Y-00502D02* +Y-00264D01* +X01434Y-00586D02* +X01519Y-00502D01* +X-0121Y-00167D02* +X-01138D01* +X-01217Y-0016D02* +X-0121Y-00167D01* +X-01138D02* +X-01135Y-00164D01* +X-01334Y-00065D02* +X-01297D01* +X-01342Y-00085D02* +X-01334D01* +X-01127Y-00345D02* +X-0111D01* +X-01176Y-00394D02* +X-01127Y-00345D01* +X-01202Y-00394D02* +X-01176D01* +X-01229D02* +X-01202D01* +X-01498Y-00988D02* +X-01471Y-01015D01* +Y-01117D02* +Y-01015D01* +X-01327Y-00467D02* +Y-00434D01* +X-01143Y-00053D02* +X-01084D01* +X-01102Y-00234D02* +X-00999D01* +X-01189Y-00321D02* +X-01102Y-00234D01* +X-01232Y-00326D02* +X-01227Y-00321D01* +X-01189* +X-012Y-00249D02* +X-01195Y-00255D01* +X-01287Y-00249D02* +X-012D01* +X-01328Y-00209D02* +X-01287Y-00249D01* +X-01483Y-00312D02* +X-0146Y-00289D01* +X-01483Y-00322D02* +Y-00312D01* +X-01327Y-00434D02* +X-01322Y-00428D01* +X-00972Y-00343D02* +X-00896D01* +X-00964Y-00323D02* +X-00904D01* +X-01388Y-00445D02* +Y-00432D01* +X-01488Y-00255D02* +X-01484D01* +X-01541Y-00307D02* +X-01488Y-00255D01* +X-01541Y-00341D02* +Y-00307D01* +X-01484Y-00255D02* +Y-00255D01* +X-01541Y-00341D02* +X-015Y-00382D01* +X-01521Y-00316D02* +X-01481Y-00276D01* +X-01521Y-00332D02* +Y-00317D01* +Y-00332D02* +X-01455Y-00397D01* +X-00097Y-00706D02* +X00097D01* +X00765Y-0039D02* +X00783D01* +X00407Y-00737D02* +Y-00637D01* +X00097Y-00706D02* +X00127Y-00737D01* +X-00127D02* +X-00097Y-00706D01* +X00724Y-0039D02* +X00765D01* +X-00127Y-00737D02* +Y-00733D01* +X-015Y-00516D02* +X-01455Y-00471D01* +Y-00397* +X-015Y-00416D02* +Y-00382D01* +Y-00716D02* +X-01485D01* +Y-0071D02* +X-01432Y-00657D01* +X-015Y-00816D02* +Y-00808D01* +X-01421Y-00729* +X-01432Y-00663D02* +X-0141D01* +X00959Y-00274D02* +X01035Y-00198D01* +X00814Y-00274D02* +X00959D01* +X01289Y-00193D02* +X01346Y-00137D01* +X01289Y-00379D02* +Y-00193D01* +X00683Y-00349D02* +X00724Y-0039D01* +X0013Y-00213D02* +X0016Y-00183D01* +X00358* +X-00156Y-0019D02* +D01* +X-0018Y-00213D02* +X-00156Y-0019D01* +X-00286Y-00183D02* +X-00256Y-00213D01* +X-0018* +X-00295Y-00203D02* +X-00265Y-00233D01* +X0031Y-00393D02* +X00338Y-00365D01* +X00245Y-00369D02* +X00268Y-00393D01* +X0031* +X-00265Y-00233D02* +X-00167D01* +X-00156Y-0019D02* +X-0015Y-00183D01* +X00039* +X-00167Y-00233D02* +X-00137Y-00204D01* +X00031* +X0006Y-00233* +X00039Y-00183D02* +X00069Y-00213D01* +X0013* +X0006Y-00233D02* +X00197D01* +X00245Y-00281* +Y-00369D02* +Y-00281D01* +X00358Y-00183D02* +X00476Y-00301D01* +X-00068Y-01446D02* +X-00062Y-01451D01* +X0D02* +X0D01* +X00068Y-01384* +X-00031Y-01365D02* +X-00024D01* +X00016Y-01324* +X00009Y-00937D02* +X00064D01* +X00016Y-01324D02* +X00059D01* +X00068Y-01384D02* +Y-01344D01* +X00118Y-01294* +X-00626Y-01195D02* +X-00574Y-01144D01* +X-00376Y-00987D02* +X-00361D01* +X-00398Y-00937D02* +X-00361D01* +X-00846Y0061D02* +X-00837Y00619D01* +X-01105Y00519D02* +Y0056D01* +X01317Y00496D02* +Y00528D01* +X0124Y00496D02* +Y00528D01* +X01189Y00496D02* +X0119Y00496D01* +X01519Y-00071D02* +Y00867D01* +X01215Y00462D02* +Y00496D01* +X01189Y00271D02* +Y00307D01* +X01182Y00429D02* +X01215Y00462D01* +X01342Y00464D02* +Y00496D01* +X0124Y00271D02* +Y00305D01* +X01256Y0032* +Y00401* +X01394Y00438D02* +X01416Y0046D01* +X00892Y00273D02* +Y00341D01* +X0121Y00559D02* +X0124Y00528D01* +X01317D02* +X01349Y0056D01* +X0121Y00559D02* +Y00688D01* +X01368Y00271D02* +Y00343D01* +X01314Y00341D02* +X01342Y00312D01* +Y00271D02* +Y00312D01* +X01317Y00271D02* +Y00307D01* +X01294Y00331D02* +X01317Y00307D01* +X-01334Y-00085D02* +X-01328Y-00091D01* +Y-00092D02* +Y-00091D01* +Y-00092D02* +X-01304Y-00116D01* +X-01331Y-0016D02* +X-01217D01* +X-01337Y-00166D02* +X-01331Y-0016D01* +X-01304Y-00116D02* +X-01206D01* +X-01143Y-00053* +X-01427Y-00166D02* +X-01337D01* +X01394Y00496D02* +Y00559D01* +X01412Y00577* +X00787Y00109D02* +Y00187D01* +X00774D02* +X00787D01* +X00789* +X01291Y00496D02* +Y00557D01* +X01306Y00572* +X01266Y00496D02* +Y00557D01* +X01215Y00271D02* +Y00336D01* +X01291Y00199D02* +Y00271D01* +X00189Y-01094D02* +X00207Y-01075D01* +Y-01005* +X00167Y-00965D02* +X00207Y-01005D01* +X00036Y-00987D02* +X00092Y-01043D01* +X00009Y-00987D02* +X00036D01* +X00038* +X00064Y-00937D02* +X00092Y-00965D01* +X00059Y-01324D02* +X00109Y-01274D01* +X00137Y-01294D02* +X00189Y-01242D01* +X00109Y-01274D02* +X00129D01* +X00169Y-01234* +Y-01022* +X00118Y-01294D02* +X00137D01* +X00189Y-01242D02* +Y-01094D01* +X00268Y-00811D02* +X00275Y-00818D01* +X00326Y-00857D02* +X0038D01* +X00315Y-00846D02* +X00326Y-00857D01* +X00275Y-00862D02* +X00298Y-00886D01* +X00275Y-00862D02* +Y-00818D01* +X00556Y-00917D02* +Y-00852D01* +Y-00917D02* +X00573Y-00934D01* +X00605* +X00429Y-00918D02* +Y-00871D01* +X00449Y-00852* +X0038Y-00934D02* +X00412D01* +X00429Y-00918* +X0038Y-00985D02* +X00444D01* +X00461Y-01002* +X-00884Y00499D02* +X-00865Y0048D01* +X-00884Y00499D02* +Y00532D01* +X00429Y00305D02* +X00455Y00279D01* +X00437Y00325D02* +X00475Y00287D01* +X00605Y-00985D02* +X00632D01* +X00675* +X-01444Y-00361D02* +Y-00321D01* +X-01447Y-00313D02* +Y-00305D01* +X-01357Y00153D02* +X-01237Y00273D01* +X-01337Y00144D02* +X-01217Y00264D01* +X-00239Y00634D02* +Y00668D01* +X-00258Y00757D02* +Y00818D01* +X00154Y00628D02* +X00322D01* +X00142Y00616D02* +X00154Y00628D01* +X-00522Y-00607D02* +Y-00351D01* +X-00502Y-00598D02* +Y-00342D01* +X-00482Y-0059D02* +Y-00334D01* +X-00674Y00766D02* +X-00626Y00718D01* +Y00695D02* +Y00718D01* +X-00913Y-00303D02* +X-00819Y-0021D01* +X-00904Y-00323D02* +X-00811Y-0023D01* +X-00896Y-00343D02* +X-00802Y-0025D01* +X-00888Y-00363D02* +X-00794Y-0027D01* +X-0092Y-00254D02* +X-00835Y-0017D01* +X-00865Y00461D02* +Y0048D01* +X-0113Y00098D02* +Y00201D01* +X-01131Y00202D02* +X-0113Y00201D01* +X-01093Y00218D02* +X-0107Y00241D01* +X-01111Y00228D02* +X-01078Y00261D01* +X-01131Y00202D02* +Y00237D01* +X-01087Y00281* +X-01274Y00122D02* +X-01095Y00301D01* +X-01294Y0013D02* +X-01103Y00321D01* +X-01316Y00136D02* +X-01111Y00341D01* +X-01132Y00955D02* +X-00221D01* +X-00239Y00913D02* +X-00216Y00889D01* +Y00778D02* +Y00889D01* +X-00175Y00799D02* +X-00076Y007D01* +X-00175Y00799D02* +Y00909D01* +X-00221Y00955D02* +X-00175Y00909D01* +X-0055Y00552D02* +Y00621D01* +X-00538Y00683D02* +X-005Y00722D01* +X-00626Y00695D02* +X-00614Y00683D01* +X-00538* +X-00592Y00663D02* +X-0055Y00621D01* +X-00664Y00678D02* +X-00654D01* +X-00639Y00663* +X-00592* +X-0046Y00385D02* +X-0045Y00375D01* +X-00452Y00405D02* +X-00442Y00395D01* +X-00444Y00425D02* +X-00434Y00415D01* +X-00435Y00445D02* +X-00425Y00435D01* +X-00711Y00241D02* +X-00606Y00345D01* +X-00719Y00261D02* +X-00615Y00365D01* +X-00727Y00281D02* +X-00623Y00385D01* +X-00736Y00301D02* +X-00631Y00405D01* +X-00744Y00321D02* +X-00639Y00425D01* +X-00752Y00341D02* +X-00648Y00445D01* +X-00606Y00345D02* +X-00477D01* +X-00615Y00365D02* +X-00469D01* +X-00623Y00385D02* +X-0046D01* +X-00631Y00405D02* +X-00452D01* +X-00639Y00425D02* +X-00444D01* +X-00648Y00445D02* +X-00435D01* +X-00744Y00378D02* +X-00656Y00465D01* +X-00427* +X-0107Y00241D02* +X-00711D01* +X-01078Y00261D02* +X-00719D01* +X-01087Y00281D02* +X-00727D01* +X-01095Y00301D02* +X-00736D01* +X-01103Y00321D02* +X-00744D01* +X-01111Y00341D02* +X-00752D01* +X-00436Y-00203D02* +X-00295D01* +X-00446Y-00183D02* +X-00286D01* +X-00562Y-0031D02* +X-00522Y-00351D01* +X-00554Y-0029D02* +X-00502Y-00342D01* +X-00546Y-0027D02* +X-00482Y-00334D01* +X-00463Y-0023D02* +X-00436Y-00203D01* +X-00794Y-0027D02* +X-00689D01* +X-00648Y-0031* +X-00562* +X-0068Y-0025D02* +X-0064Y-0029D01* +X-00554* +X-00672Y-0023D02* +X-00632Y-0027D01* +X-00546* +X-00664Y-0021D02* +X-00623Y-0025D01* +X-00655Y-0019D02* +X-00615Y-0023D01* +X-00463* +X-00623Y-0025D02* +X-00451D01* +X-00802Y-0025D02* +X-0068D01* +X-00811Y-0023D02* +X-00672D01* +X-00819Y-0021D02* +X-00664D01* +X-00827Y-0019D02* +X-00655D01* +X-00835Y-0017D02* +X-00647D01* +X-00373Y-0035D02* +Y-00328D01* +X-00451Y-0025D02* +X-00373Y-00328D01* +X00298Y-00886D02* +X00332D01* +X00334Y-00883* +X0038* +X00765Y00257D02* +X00781D01* +X00747Y00165D02* +Y00239D01* +X00765Y00257* +X00702Y00195D02* +X00727Y0022D01* +Y00298* +X00736Y00307* +X00616Y00307D02* +X00655Y00345D01* +X00603Y00357D02* +X00616D01* +X00603Y00307D02* +X00616D01* +X00655Y00492D02* +X00707Y00543D01* +X00655Y00345D02* +Y00367D01* +X00675Y00387* +X00655Y00395D02* +Y00492D01* +X00616Y00357D02* +X00655Y00395D01* +X00675Y00387D02* +Y00437D01* +X00707Y00468* +X00746Y00801D02* +X0075Y00805D01* +X00561Y00769D02* +X00598Y00806D01* +Y00851* +X00861Y00795D02* +X00906Y00751D01* +X0075Y00805D02* +Y00937D01* +X00577Y00703D02* +X0062D01* +X00652Y00735* +X00685Y00592D02* +X00693Y00583D01* +X00314Y00496D02* +X00561Y00743D01* +Y00769* +X00322Y00476D02* +X00597Y00751D01* +X01077Y00637D02* +X01139Y00575D01* +X00752Y0047D02* +X00821Y0054D01* +X00921* +X00709Y00543D02* +X00747Y00581D01* +X01087Y00657D02* +X01163Y0058D01* +X01095Y00677D02* +X01108Y00664D01* +X00766Y00637D02* +X01077D01* +X00774Y00657D02* +X01087D01* +X00602Y00643D02* +X0076D01* +X00766Y00637* +X00594Y00663D02* +X00768D01* +X00774Y00657* +X00585Y00683D02* +X00778D01* +X00784Y00677* +X01095* +X0066Y00573D02* +X00685Y00598D01* +X00687Y006* +X00685Y00592D02* +Y00598D01* +Y00603* +X-01079Y-01062D02* +X-00865D01* +X-00732Y-01195* +X-00626* +X00251Y00325D02* +X00437D01* +X00224Y00435D02* +X00265Y00476D01* +X0018Y00335D02* +X00241D01* +X00171Y00355D02* +X00314D01* +X00138Y00435D02* +X00224D01* +X0013Y00455D02* +X00216D01* +X00257Y00496* +X00133Y00345D02* +X00163Y00375D01* +X00125Y00365D02* +X00155Y00395D01* +X-00005Y00385D02* +X00116D01* +X00146Y00415* +X00002Y00405D02* +X00108D01* +X00138Y00435* +X0001Y00425D02* +X001D01* +X0013Y00455* +X00163Y00375D02* +X00306D01* +X-00022Y00345D02* +X00133D01* +X-00014Y00365D02* +X00125D01* +X-00039Y00305D02* +X0015D01* +X0018Y00335* +X-0003Y00325D02* +X00141D01* +X00171Y00355* +X00241Y00335D02* +X00251Y00325D01* +X00314Y00355D02* +X00602Y00643D01* +X00306Y00375D02* +X00594Y00663D01* +X00155Y00395D02* +X00298D01* +X00585Y00683* +X00146Y00415D02* +X0029D01* +X00577Y00703* +X-00019Y00536D02* +X00005Y0051D01* +X-00258Y00757D02* +X-00117Y00616D01* +X00142* +X-00144Y00536D02* +X-00019D01* +X-00168Y00559D02* +X-00144Y00536D01* +X-00168Y00559D02* +Y00598D01* +X-00204Y00634D02* +X-00168Y00598D01* +X-00238Y00634D02* +X-00204D01* +X-00306Y00736D02* +X-00239Y00668D01* +X-00306Y00736D02* +Y00777D01* +X-00314Y00562D02* +X-00309D01* +X-00332Y00579D02* +X-00314Y00562D01* +X-00332Y00579D02* +Y00611D01* +X00187Y00536D02* +X00194Y00529D01* +X00105Y00536D02* +X00187D01* +X0008Y0051D02* +X00105Y00536D01* +X-00308Y00405D02* +X-00202D01* +X-00316Y00385D02* +X-00194D01* +X-00325Y00365D02* +X-00185D01* +X-00333Y00345D02* +X-00177D01* +X-0035Y00305D02* +X-0016D01* +X-00341Y00325D02* +X-00169D01* +X-003Y00426D02* +X-0021D01* +X-00469Y00365D02* +X-00459Y00355D01* +X-00477Y00345D02* +X-00467Y00335D01* +X-0038* +X-0035Y00305* +X-00459Y00355D02* +X-00371D01* +X-00341Y00325* +X-0045Y00375D02* +X-00363D01* +X-00333Y00345* +X-00442Y00395D02* +X-00355D01* +X-00325Y00365* +X-00434Y00415D02* +X-00346D01* +X-00316Y00385* +X-00425Y00435D02* +X-00338D01* +X-00308Y00405* +X-0033Y00455D02* +X-003Y00426D01* +X-00427Y00465D02* +X-00417Y00455D01* +X-0033* +X-00308Y00868D02* +X-00258Y00818D01* +X-00985Y00868D02* +X-00308D01* +X-01202Y00686D02* +X-01086D01* +X-01046Y00646* +X-01177Y0079D02* +X-01097Y00869D01* +X-01046* +X-01223Y0073D02* +X-01145D01* +X-01089Y00786* +X-01066* +X-00985Y00868* +X-01046Y00869D02* +X-01002Y00913D01* +X-00239* +X01035Y-00198D02* +X01059D01* +X01041Y-00089D02* +X01059Y-00107D01* +X00936Y-00122D02* +X00968Y-00089D01* +X01041* +X00813Y-00055D02* +X0088Y-00122D01* +X00936* +X00814Y-00198D02* +Y-00129D01* +X00783Y-00014D02* +X00855D01* +X0077Y-00027D02* +X00783Y-00014D01* +X0077Y-00082D02* +Y-00027D01* +Y-00082D02* +X00814Y-00126D01* +Y-00129D02* +Y-00126D01* +X01005Y-0009D02* +Y00021D01* +X01095Y00111* +X00347Y00285D02* +X00367Y00305D01* +G54D38* +X-0005Y0028D02* +X-00049D01* +X-0005D02* +Y00281D01* +X-00079Y0031D02* +X-0005Y00281D01* +X-0012Y0031D02* +X-00079D01* +X-00149Y00281D02* +X-0012Y0031D01* +X-00149Y0028D02* +Y00281D01* +X-0015Y0028D02* +X-00149D01* +X-00049D02* +X-00029Y00261D01* +X-0017Y0026D02* +X-0015Y0028D01* +X00298Y00044D02* +X00394D01* +X00231Y0011D02* +X00298Y00044D01* +X0019Y0011D02* +X00231D01* +X-00029Y00061D02* +X0014D01* +X-0005Y00011D02* +X00136D01* +X-001Y00061D02* +X-0005Y00011D01* +X-0034Y00061D02* +X-0017D01* +X-0039Y0011D02* +X-0034Y00061D01* +X-00449Y0011D02* +X-0039D01* +X-00365Y00011D02* +X-00149D01* +X-00415Y00061D02* +X-00365Y00011D01* +X-00492Y00161D02* +X-00411D01* +X-00508Y00145D02* +X-00492Y00161D01* +X-00223D02* +X-002D01* +X-00274Y00211D02* +X-00223Y00161D01* +X-00496Y00211D02* +X-00274D01* +X0009Y00161D02* +X001D01* +X0004Y00211D02* +X0009Y00161D01* +X0015Y00211D02* +X00231D01* +X001Y00161D02* +X0015Y00211D01* +X0014Y00061D02* +X0019Y0011D01* +X00186Y00061D02* +X00211D01* +X00136Y00011D02* +X00186Y00061D01* +X-01329Y-01162D02* +X-01311Y-0118D01* +X-00508Y00301D02* +X-00498Y0031D01* +X-00508Y00223D02* +X-00496Y00211D01* +X-00507Y-00165D02* +X-00485D01* +X-00508Y-00088D02* +X-00491Y-00071D01* +X-00466* +X-00508Y-0001D02* +X-00486D01* +X-00508Y00068D02* +X-00492D01* +X00968Y-01021D02* +Y-01001D01* +X00939Y-0105D02* +X00968Y-01021D01* +X00939Y-01059D02* +Y-0105D01* +X01066Y-00707D02* +Y-00678D01* +X00995Y-00779D02* +X01066Y-00707D01* +X00951Y-00779D02* +X00995D01* +X00989Y-00828D02* +X0114Y-00677D01* +X01063Y-0038D02* +X01071Y-00389D01* +X01144* +X01061Y-00377D02* +X01063Y-00379D01* +X01005Y-00377D02* +X01061D01* +X01132Y-00427D02* +X01135Y-00424D01* +X01206* +X01061Y-00427D02* +X01132D01* +X01089Y-00464D02* +X01144D01* +X01077Y-00476D02* +X01089Y-00464D01* +X01193Y-00563D02* +X01206D01* +X00989Y-00874D02* +Y-00828D01* +X0051Y-00097D02* +X00543D01* +X00493Y-00039D02* +X0051Y-00022D01* +X00411Y-00039D02* +X00493D01* +X0026Y00181D02* +Y00181D01* +X00231Y00211D02* +X0026Y00181D01* +X00848Y-00588D02* +X00861D01* +X00917Y-00643* +X00939Y-00874D02* +Y-00787D01* +X-00736Y-01102D02* +Y-01056D01* +Y-01095D02* +Y-01078D01* +X-01236Y-0118D02* +X-00993D01* +X-00411Y-00039D02* +Y-00038D01* +X-00426Y-00053D02* +X-00411Y-00038D01* +X-00149Y00011D02* +X-001Y00061D01* +X-0014Y-00139D02* +X-001D01* +X-00131Y-00039D02* +X00029D01* +X-0018Y-00088D02* +X-00131Y-00039D01* +X-00247Y-00088D02* +X-0018D01* +X00889Y-01059D02* +Y-01001D01* +X01109Y-00581D02* +X01176D01* +X0017Y-00139D02* +X00211D01* +X00174Y-00039D02* +X00211D01* +X00124Y-00089D02* +X00174Y-00039D01* +X-00297D02* +X-00247Y-00088D01* +X00029Y-00039D02* +X00079Y-00089D01* +X00124* +X00851Y-00426D02* +X00906Y-00371D01* +X-00434Y-00039D02* +X-00411D01* +X-00297* +X01176Y-00581D02* +X01193Y-00563D01* +X-00633Y0081D02* +X-00595D01* +X00394Y00044D02* +X00411Y00061D01* +X0026Y00181D02* +X00301Y00141D01* +X00391* +X00411Y00161* +X00386Y00236D02* +X00411Y00261D01* +X0015Y-00158D02* +X0017Y-00139D01* +X0012Y-00188D02* +X00149Y-00159D01* +Y-00158* +X0015* +X-00411Y-00139D02* +X-00296D01* +X-00246Y-00188* +X-0019D02* +X-0014Y-00139D01* +X-00246Y-00188D02* +X-0019D01* +X00079D02* +X0012D01* +X-001Y-00139D02* +X00029D01* +X00079Y-00188* +X-00211Y00261D02* +X-0021Y0026D01* +X-0017* +X-00492Y00068D02* +X-00449Y0011D01* +X-00459Y-00139D02* +X-00411D01* +X-00466Y-00071D02* +X-00434Y-00039D01* +X-00485Y-00165D02* +X-00459Y-00139D01* +X-00486Y-0001D02* +X-00415Y00061D01* +X00586Y-00248D02* +Y-00139D01* +X00543Y-00097D02* +X00586Y-00139D01* +X-01378Y-01162D02* +X-01329D01* +X-01311Y-0118D02* +X-01296Y-01164D01* +Y-01118* +X-01279Y-01102* +X-00993Y-0118D02* +X-0094Y-01126D01* +X-00911* +X001Y00261D02* +X0014D01* +X-0017Y00061D02* +X-0012Y00111D01* +X-00079* +X-00029Y00061* +X-002Y00161D02* +X-0015Y00211D01* +X0004* +X-00029Y00261D02* +X001D01* +X0019Y0031D02* +X00231D01* +X0014Y00261D02* +X0019Y0031D01* +X-0034Y00261D02* +X-00211D01* +X-00498Y0031D02* +X-0039D01* +X-0034Y00261* +X00231Y0031D02* +X00306Y00236D01* +X00386* +G54D39* +X01271Y00716D02* +Y00834D01* +X01301Y00687D02* +X01335D01* +X01271Y00716D02* +X01301Y00687D01* +X01254Y00716D02* +X01271D01* +X-00134Y00161D02* +X-00062D01* +X-00411D02* +X-00347D01* +X-00567Y-01064D02* +X-00448D01* +X01028Y-00502D02* +X01061Y-00535D01* +X01151* +X01346Y-00518D02* +X014Y-00464D01* +X01289Y-00518D02* +X01346D01* +X01169D02* +X01289D01* +X01151Y-00535D02* +X01169Y-00518D01* +X00297Y00739D02* +X00353D01* +X01235Y-00066D02* +X01248Y-00053D01* +X-01116Y00449D02* +X-01065D01* +X00226Y00588D02* +X00279D01* +X-0097Y-00661D02* +X-0096Y-00671D01* +X-0091* +X-01065Y00449D02* +X-01062Y00452D01* +X014Y-00464D02* +Y-00283D01* +Y-0017D02* +Y-00066D01* +X01461* +X01235Y-00282D02* +X01235Y-00283D01* +Y-00199* +X01153Y-00283D02* +X01235D01* +Y-00343D02* +Y-00283D01* +X01428Y-00703D02* +Y-00628D01* +X0135Y-00703D02* +X01428D01* +Y-00798D02* +Y-00703D01* +X01499* +X-00723Y-00938D02* +X-00693D01* +X-00567Y-01064* +X00169Y00588D02* +X00226D01* +X-00128Y00575D02* +X00156D01* +X00169Y00588* +X00806Y00751D02* +Y00851D01* +X0116Y0013D02* +X01307D01* +X0139* +X01235Y00056D02* +X01307D01* +X01235Y-00066D02* +Y00056D01* +G54D40* +X00364Y00749D02* +Y00805D01* +X-0054Y0081D02* +X-00483D01* +X-00475Y00802* +G54D41* +X-00682Y00684D02* +X-00673Y00693D01* +X-00742Y00684D02* +X-00682D01* +X-0075Y00675D02* +X-00742Y00684D01* +X-00673Y00623D02* +Y00693D01* +X-0075Y00675D02* +Y00751D01* +X-00707Y00207D02* +X-00673D01* +X-00715Y-00093D02* +X-00668D01* +X-00729Y-00078D02* +X-00715Y-00093D01* +X-00748Y-00078D02* +X-00729D01* +X-00796D02* +X-00778D01* +X-0081Y-00093D02* +X-00796Y-00078D01* +X-00857Y-00093D02* +X-0081D01* +X-00715Y-00043D02* +X-00668D01* +X-00731Y-00026D02* +X-00715Y-00043D01* +X-00748Y-00026D02* +X-00731D01* +X-00794D02* +X-00778D01* +X-0081Y-00043D02* +X-00794Y-00026D01* +X-00857Y-00043D02* +X-0081D01* +X-00713Y00007D02* +X-00668D01* +X-00731Y00025D02* +X-00713Y00007D01* +X-00748Y00025D02* +X-00731D01* +X-00793D02* +X-00778D01* +X-00811Y00007D02* +X-00793Y00025D01* +X-00857Y00007D02* +X-00811D01* +X-00712Y00057D02* +X-00668D01* +X-00732Y00077D02* +X-00712Y00057D01* +X-00748Y00077D02* +X-00732D01* +X-0079D02* +X-00778D01* +X-00811Y00057D02* +X-0079Y00077D01* +X-00857Y00057D02* +X-00811D01* +X-00794Y0013D02* +X-00778D01* +X-0082Y00157D02* +X-00794Y0013D01* +X-00857Y00157D02* +X-0082D01* +X-00788Y00182D02* +X-00778D01* +X-00813Y00207D02* +X-00788Y00182D01* +X-00857Y00207D02* +X-00813D01* +X-00704Y00157D02* +X-00668D01* +X-00729Y00131D02* +X-00704Y00157D01* +X-00747Y00131D02* +X-00729D01* +X-00748Y00182D02* +X-00732D01* +X-00707Y00207* +X-00547Y00781D02* +Y00803D01* +X-0055Y00778D02* +X-00547Y00781D01* +X-0055Y00736D02* +Y00778D01* +X-00547Y00803D02* +X-0054Y0081D01* +X00801Y-00919D02* +X00819D01* +X00764Y-00956D02* +X00801Y-00919D01* +X00704Y-00956D02* +X00764D01* +X00844Y-00971D02* +X00889Y-00926D01* +X00844Y-00995D02* +Y-00971D01* +X00889Y-00926D02* +Y-00886D01* +X00677Y-00978D02* +X00683D01* +X00704Y-00956* +X00675Y-01031D02* +Y-00979D01* +X00629Y00216D02* +Y00257D01* +X00627Y00215D02* +X00629Y00216D01* +X00603Y00257D02* +X00629D01* +X00824Y-0109D02* +X0089D01* +X00824Y-01015D02* +X00844Y-00995D01* +X00046Y-00887D02* +X00062Y-00903D01* +X00009Y-00887D02* +X00046D01* +X00889Y-00886D02* +Y-00791D01* +X-01177Y-00679D02* +X-00989D01* +X-0097Y-00661* +X-01194Y-00662D02* +X-01177Y-00679D01* +X-01393Y-00662D02* +X-01194D01* +X-01411Y-00645D02* +X-01393Y-00662D01* +X-00061Y-01187D02* +X00009D01* +X0005D02* +X00075Y-01162D01* +X00009Y-01187D02* +X0005D01* +X-00052Y-00887D02* +X00009D01* +X00104Y-0125D02* +X00119D01* +X00137Y-01231* +Y-01214* +X-0141Y-00002D02* +Y00031D01* +X-0141Y00093D02* +Y0013D01* +X-01059Y00151D02* +X-01018D01* +X-00995Y00164D02* +X-00951D01* +X-00995D02* +Y00215D01* +X-00926Y-00456D02* +X-00878D01* +X-00872Y-00462* +X-015Y-00665D02* +Y-00616D01* +Y-00564* +X-00347Y-00753D02* +X-00312D01* +Y-00798D02* +Y-00753D01* +X-00274* +X-00224Y-00778D02* +Y-00733D01* +X-00262D02* +X-00224D01* +X-00097Y-00442D02* +X-00029D01* +X-00062Y-01451D02* +Y-01395D01* +X-00072Y-01385D02* +X-00062Y-01395D01* +X-00072Y-01385D02* +Y-01302D01* +X-00006Y-01237* +X0032Y-00795D02* +X00327D01* +X00363Y-00831* +X00428* +X00449Y-00852* +X-00006Y-01237D02* +X00038D01* +X00056Y-01219* +X00083* +X-00388Y00773D02* +X-00385Y00776D01* +X-0042Y00773D02* +X-00388D01* +X-00477Y00802D02* +X-00453D01* +G54D42* +X-008Y00484D02* +Y00535D01* +X-00931Y00647D02* +Y00718D01* +X00413Y-00554D02* +Y-00447D01* +X00407Y-0056D02* +X00413Y-00554D01* +X00529Y-00437D02* +X00551Y-00416D01* +X00413Y-00437D02* +X00529D01* +X00413D02* +Y-00365D01* +X-00884Y00662D02* +X-00878Y00668D01* +X-00823* +X-00879D02* +X-00878D01* +X-00829Y00674D02* +Y00725D01* +X-00842Y00507D02* +X-00804D01* +X00551Y-00416D02* +Y-00365D01* +X00477Y-00243D02* +X00514Y-0028D01* +Y-00282D02* +Y-0028D01* +X-01418Y00572D02* +X-01303Y00688D01* +X-01445Y00572D02* +X-01418D01* +X00804Y00466D02* +Y00478D01* +X00792Y00454D02* +X00804Y00466D01* +X00627Y00215D02* +X00636Y00206D01* +X00588Y00215D02* +X00627D01* +X01014Y00203D02* +X01015Y00201D01* +X00844Y00455D02* +X0089D01* +X00844Y0042D02* +Y00455D01* +Y0042D02* +X00856Y00408D01* +X00855Y00407D02* +X00856Y00408D01* +X00788Y00407D02* +X00855D01* +X01042Y00257D02* +X01062Y00237D01* +Y00201D02* +Y00237D01* +X01015Y00201D02* +X01062D01* +X01042Y00257D02* +Y00272D01* +X0125Y00621D02* +X01252Y00618D01* +Y00572D02* +Y00618D01* +X-01091Y-00611D02* +X-01027D01* +X-01132Y-006D02* +X-01131Y-00602D01* +X-01139D02* +X-01094D01* +X-01153Y-00649D02* +X-01068D01* +X-01062Y00452D02* +Y00516D01* +X-0092Y0061D02* +Y00636D01* +X-00294Y-0027D02* +X-00292D01* +X-00333D02* +X-00294D01* +X-00296Y-00267D02* +X-00294Y-0027D01* +X-01474Y00855D02* +Y00935D01* +X-01521Y00892D02* +X-01436D01* +X-00969Y-00992D02* +X-00797D01* +X-01521Y-00144D02* +X-01511D01* +X-01504Y-00137* +X-01467* +X-00995Y00029D02* +Y00089D01* +X-01381Y-00435D02* +X-0136Y-00414D01* +X00327Y-00292D02* +X00366D01* +X00376Y-00282* +X-00127Y-0056D02* +X-00127Y-0056D01* +X-00361Y-01137D02* +Y-01087D01* +Y-01037* +X-00421Y-012D02* +Y-01173D01* +Y-012D02* +X-00385Y-01237D01* +X-00361* +X-00421Y-01173D02* +X-00385Y-01137D01* +X-00361* +X00009D02* +Y-01087D01* +Y-01037* +X-00425Y-01087D02* +X-00361D01* +X-00448Y-01064D02* +X-00425Y-01087D01* +X01306Y00572D02* +X01309Y00574D01* +Y00621* +X01266Y00196D02* +X01305D01* +X01258Y00204D02* +X01266Y00196D01* +X-01529Y00678D02* +Y00856D01* +X-00931Y00647D02* +X-0092Y00636D01* +X-01016Y-00732D02* +Y-0069D01* +X00236Y-01303D02* +Y-01095D01* +X00009Y-01087D02* +X00045D01* +X00067Y-01109* +X00081* +X-00884Y0061D02* +Y00662D01* +X-00887Y-00879D02* +X-00883Y-00883D01* +Y-00988D02* +Y-00883D01* +X-00298Y-0056D02* +Y-00348D01* +X-00127Y-0056D02* +X-00103Y-00535D01* +Y-00441* +Y-00386D02* +X-00097Y-00392D01* +X-00029* +X00804Y00478D02* +X00834Y00508D01* +X00844* +X00062Y-01503D02* +Y-01451D01* +X-00244Y0056D02* +X-00238D01* +X-00273Y00588D02* +X-00244Y0056D01* +X-00238D02* +X-00237D01* +X-00186Y00508* +X-00931Y00718D02* +X-00924Y00726D01* +G54D43* +X-00625Y00107D02* +X-00586Y00145D01* +X-00668Y00107D02* +X-00625D01* +X-00586Y00145D02* +X-00575D01* +X-00668Y-00093D02* +X-00647D01* +X-00668Y-00043D02* +X-00628D01* +X-00673Y00207D02* +X-00577Y00302D01* +X-00592Y00007D02* +X-00575Y-0001D01* +X-00668Y00007D02* +X-00592D01* +X-00668Y00057D02* +X-00586D01* +X-00575Y00068* +X-00583Y-00088D02* +X-00575D01* +X-00668Y00157D02* +X-0064D01* +X-00647Y-00093D02* +X-00575Y-00165D01* +X-0064Y00157D02* +X-00575Y00222D01* +X01039Y-00971D02* +Y-00886D01* +Y-00971D02* +X01066Y-00998D01* +Y-01155D02* +Y-00998D01* +X00555Y-01086D02* +Y-00976D01* +X00655Y-01186D02* +X00919D01* +X00555Y-01086D02* +X00655Y-01186D01* +X00646Y-01208D02* +X01013D01* +X00533Y-01095D02* +X00646Y-01208D01* +X00533Y-01095D02* +Y-01016D01* +X01111Y-00664D02* +X0114D01* +X01083Y-00636D02* +X01111Y-00664D01* +X01012Y-00636D02* +X01083D01* +X00999Y-00623D02* +X01012Y-00636D01* +X01013Y-01208D02* +X01066Y-01155D01* +X00919Y-01186D02* +X00989Y-01116D01* +X00477Y-0096D02* +X00533Y-01016D01* +X-00628Y-00043D02* +X-00583Y-00088D01* +X00571Y-0096D02* +X00605D01* +X00555Y-00976D02* +X00571Y-0096D01* +X0038D02* +X00477D01* +X00989Y-01116D02* +Y-01071D01* +X-0045Y00802D02* +X-00421Y00773D01* +G54D44* +X-00371Y00729D02* +X-00357Y00742D01* +Y00777* +G54D45* +X-00871Y00211D02* +X-00857D01* +X-00501Y-01145D02* +Y-01065D01* +X-01172Y-00394D02* +X-01159Y-00407D01* +X-00897Y-00089D02* +X-00857D01* +X-00876Y-00039D02* +X-00857D01* +X-00871Y00011D02* +X-00857D01* +X-00871Y00061D02* +X-00857D01* +X-00871Y00161D02* +X-00857D01* +X-01507Y-00004D02* +X-01441Y-0007D01* +X-01485Y00001D02* +X-01427Y-00056D01* +X-01527Y-00012D02* +X-01455Y-00084D01* +X-01377Y00004D02* +Y00021D01* +Y00004D02* +X-01371Y0D01* +X-01357Y0004D02* +X-01343Y00027D01* +X-01337Y00048D02* +X-01329Y00041D01* +X-01316Y00083D02* +X-01302Y00069D01* +X-01294Y00088D02* +X-01288Y00082D01* +X-01115D02* +X-01111Y00087D01* +X-01093Y00078D02* +Y00218D01* +X-01102Y00069D02* +X-01093Y00078D01* +X-01129Y-00464D02* +X-01116Y-00478D01* +X-01004Y-00339D02* +X-0098Y-00363D01* +X-00962Y-00297D02* +X-00957Y-00303D01* +X-01398Y-00001D02* +Y00036D01* +X-01405Y-00008D02* +X-01398Y-00001D01* +X-01422Y-00005D02* +Y0004D01* +Y-00005D02* +X-01399Y-00028D01* +X-01443Y-00012D02* +X-01413Y-00042D01* +X-01379Y-00235D02* +X-01362D01* +X-0141Y-00239D02* +X-0138Y-00209D01* +X-01438Y-00155D02* +X-01427Y-00167D01* +X-01419Y-00147D02* +X-01346D01* +X-01424Y-00141D02* +X-01419Y-00147D01* +X-01483Y-00083D02* +X-01468Y-00097D01* +X-01491Y-00093D02* +X-01473D01* +X-01341Y-00058D02* +X-01334Y-00065D01* +X-01355Y-00072D02* +X-01342Y-00085D01* +X-0111Y-00345D02* +X-01104Y-00351D01* +X-0116Y-00379D02* +X-01146Y-00393D01* +X-00646Y-00412D02* +X-00626Y-00393D01* +X-00691Y-00412D02* +X-00646D01* +X-01084Y-00053D02* +X-01076Y-00044D01* +X-00999Y-00234D02* +X-00993Y-00239D01* +X-01397Y-00253D02* +X-01379Y-00235D01* +X-01407Y-00395D02* +X-01399D01* +X-01371Y-00367* +X-01308Y-00036D02* +X-01254D01* +X-01313Y-0003D02* +X-01309Y-00035D01* +X-01313Y-00337D02* +X-01307Y-00331D01* +X-0146Y-00289D02* +D01* +X-01455Y-00283* +X-01322Y-00428D02* +X-01321D01* +X-01315Y-00423* +X-01307Y-00442D02* +D01* +X-01301Y-00437* +X-0106Y-00395D02* +X-01042Y-00412D01* +X-01086Y-00424D02* +X-01083Y-00427D01* +Y-00434D02* +Y-00427D01* +X-01074Y-00409D02* +X-01064Y-00419D01* +X-0072Y-00442D02* +X-00691Y-00412D01* +X-00828Y-00442D02* +X-0072D01* +X-00848Y-00422D02* +X-00828Y-00442D01* +X-00776Y-00412D02* +X-00755D01* +X-0079Y-00399D02* +X-00776Y-00412D01* +X-00812Y-00399D02* +X-0079D01* +X-00818Y-00393D02* +X-00812Y-00399D01* +X-00829Y-00404D02* +X-00818Y-00393D01* +X-01018Y-00353D02* +X-01Y-00372D01* +X-0099Y-00325D02* +X-00972Y-00343D01* +X-00929Y-00275D02* +D01* +X-00935Y-0027D02* +X-00929Y-00275D01* +X-00976Y-00311D02* +X-00964Y-00323D01* +X-01474Y-00276D02* +X-01468Y-00269D01* +X-01481Y-00276D02* +X-01474D01* +X-01018Y-00014D02* +X-01005Y-00001D01* +X-01004Y-00028D02* +X-00986Y-0001D01* +X-0099Y-00042D02* +X-00968Y-0002D01* +X-00961Y-00068D02* +X-00932Y-00039D01* +X-00948Y-00083D02* +X-00914Y-00049D01* +X-00976Y-00056D02* +X-0095Y-0003D01* +X-01005Y00008D02* +X-00986Y00026D01* +Y00081* +X-01005Y-00001D02* +Y00008D01* +Y00089* +X-01032Y0D02* +X-01024Y00007D01* +Y00019D02* +Y00044D01* +Y00007D02* +Y00019D01* +X-01039Y00034D02* +X-01024Y00019D01* +X-01362Y-00402D02* +X-01355Y-00408D01* +X-01362Y-00402D02* +Y-00386D01* +X-01367Y-0042D02* +Y-00391D01* +X-01362Y-00386* +X-01358Y-00382* +X-01032Y-00367D02* +X-00995Y-00404D01* +X-00832* +X-01046Y-00381D02* +X-01005Y-00422D01* +X-00851* +X-01083Y-00434D02* +X-01081Y-00435D01* +X-01064Y-00425D02* +Y-00419D01* +X-01445Y-0036D02* +X-01445Y-00359D01* +X-01451Y-00309D02* +X-01442Y-00298D01* +X-01111Y00087D02* +Y00209D01* +X-01112Y0021D02* +X-01111Y00209D01* +X-01112Y00227D02* +X-01111Y00228D01* +X-01112Y0021D02* +Y00227D01* +X-00932Y00127D02* +X-00914Y00145D01* +Y00167* +X-00871Y00211* +X-00935Y-00097D02* +X-00876Y-00039D01* +X-00871Y00111D02* +X-00857D01* +X-00914Y00117D02* +X-00871Y00161D01* +X-00932Y00075D02* +X-00914Y00093D01* +X-0095Y00082D02* +X-00932Y001D01* +Y00127* +X-00914Y00067D02* +X-00871Y00111D01* +X-00914Y00093D02* +Y00117D01* +Y00043D02* +Y00067D01* +X-00932Y0005D02* +Y00075D01* +Y00025D02* +X-00914Y00043D01* +X-0095Y00032D02* +X-00932Y0005D01* +X-00968Y0004D02* +X-0095Y00058D01* +Y00082* +X-00914Y-00006D02* +Y00017D01* +X-00932Y0D02* +Y00025D01* +X-00914Y00017D02* +X-00871Y00061D01* +X-00914Y-00032D02* +X-00871Y00011D01* +X-00914Y-00049D02* +Y-00032D01* +X-00932Y-00039D02* +Y-00024D01* +X-00914Y-00006* +X-0095Y-0003D02* +Y-00017D01* +X-00932Y0* +X-00968Y-0002D02* +Y-00009D01* +X-0095Y00008* +Y00032* +X-00986Y-0001D02* +Y-00002D01* +X-00968Y00015* +Y0004* +X-00939Y-00131D02* +X-00897Y-00089D01* +X-00326Y00522D02* +Y00542D01* +X-00357Y00574D02* +X-00326Y00542D01* +X-00357Y00574D02* +Y00611D01* +G54D46* +X00954Y-00502D02* +X01027D01* +G54D47* +X01289Y-00518D02* +Y-00466D01* +X00921Y-00454D02* +X00964Y-00498D01* +X00931Y-00539D02* +X00955Y-00514D01* +G54D48* +X00738Y-00852D02* +Y-00656D01* +X00556Y-00852D02* +X00738D01* +Y-00851D02* +X00873D01* +X-00127Y-0056D02* +X00127D01* +X00127Y-0056* +X00407D02* +X00642D01* +X00738Y-00656* +X00645Y-00552D02* +X00723Y-00474D01* +X-00298Y-0056D02* +X-00127D01* +X-00407D02* +X-00298D01* +X-00884Y-00803D02* +Y-00753D01* +X00127Y-0056D02* +X00407D01* +X00723Y-00474D02* +X009D01* +X00917Y-00542D02* +Y-00443D01* +X00449Y-00852D02* +X00556D01* +G54D49* +X00677Y-00925D02* +Y-00853D01* +G54D50* +X00311Y00745D02* +Y00811D01* +X-0091Y-00143D02* +X-00794D01* +G54D51* +X00933Y-00624D02* +X00984Y-00573D01* +X00932Y-00377D02* +X00993Y-00438D01* +G54D52* +X01039Y-01118D02* +Y-01059D01* +G54D53* +X-0106Y00069D02* +Y00095D01* +Y00069D02* +X-01033Y00042D01* +G54D54* +X-01405Y-00021D02* +Y-00007D01* +G54D55* +X-01042Y-00414D02* +X-01014Y-00443D01* +X-01009Y-00447D02* +X-00976D01* +X-01014Y-00443D02* +X-00991Y-00466D01* +X-00977* +G54D56* +X-00031Y-01365D03* +X-00062Y-01451D03* +X00031Y-01365D03* +X00062Y-01451D03* +X0D03* +G54D57* +X00163Y-01408D03* +X-00163D03* +G54D58* +X00662Y-00737D03* +Y-0056D03* +X00407D03* +Y-00737D03* +X-00407D03* +Y-0056D03* +X-00662D03* +Y-00737D03* +X00127D03* +Y-0056D03* +X-00127D03* +Y-00737D03* +G54D59* +X00211Y00261D03* +Y00161D03* +Y00061D03* +Y-00039D03* +Y-00139D03* +X00411Y00261D03* +Y00161D03* +Y00061D03* +Y-00039D03* +Y-00139D03* +X-015Y-00716D03* +Y-00616D03* +Y-00516D03* +Y-00416D03* +X00506Y00751D03* +X00606Y00851D03* +Y00751D03* +X00706Y00851D03* +Y00751D03* +X00806Y00851D03* +Y00751D03* +X00906Y00851D03* +Y00751D03* +X-00411Y00261D03* +Y00161D03* +Y00061D03* +Y-00039D03* +Y-00139D03* +X-00211Y00261D03* +Y00161D03* +Y00061D03* +Y-00039D03* +Y-00139D03* +X001D03* +Y-00039D03* +Y00061D03* +Y00161D03* +Y00261D03* +X-001Y-00139D03* +Y-00039D03* +Y00061D03* +Y00161D03* +Y00261D03* +G54D60* +X014Y-00283D03* +Y-00066D03* +X01235D03* +Y-00283D03* +G54D61* +X-015Y-00816D03* +G54D62* +X-00626Y-00393D03* +X-00818D03* +G54D63* +X00506Y00851D03* +G54D64* +X-00725Y-00945D03* +G54D65* +X-00906Y-01126D03* +G54D66* +X-01245Y-00875D03* +X01245D03* +G54D67* +X0Y00875D03* +G54D68* +X01417Y00636D03* +X0142Y00707D03* +X01271Y00834D03* +X01177Y00827D03* +X01116Y00822D03* +X-0131Y-00513D03* +X01169Y00002D03* +X-00645Y00827D03* +X-00924Y00726D03* +X00585Y-00487D03* +X00439Y00886D03* +X00756Y-01141D03* +X00927Y-00956D03* +X00622Y-01088D03* +X01003Y-01159D03* +X01332Y-00689D03* +X00996Y-00707D03* +X01063Y-0038D03* +X01056Y-00595D03* +X01082Y-00473D03* +X01066Y-00819D03* +X00297Y00739D03* +X00961Y00718D03* +X0063Y-0005D03* +X-01171Y00517D03* +X-00981Y00744D03* +X-00256Y00873D03* +X00141Y00496D03* +X00339Y00645D03* +X00539Y00282D03* +X00537Y00456D03* +X00194Y00529D03* +X00279Y00588D03* +X00282Y00436D03* +X00226Y00588D03* +X-0027Y00501D03* +X-00968Y00828D03* +X-01083Y00826D03* +X00226Y00876D03* +X-01134Y00625D03* +X-01187Y0096D03* +X-01176Y00791D03* +X-01303Y00744D03* +X-01455Y00511D03* +X-0153Y00657D03* +X-00319Y00692D03* +X-00186Y00508D03* +X-00161Y00958D03* +X-01397Y0037D03* +X-01177Y00333D03* +X00845Y00596D03* +X00536Y00517D03* +X01014Y00203D03* +X00588Y00215D03* +X00405Y00369D03* +X00792Y00454D03* +X00856Y00408D03* +X01071Y00617D03* +X01149Y00653D03* +X-01002Y00384D03* +X-01054Y00201D03* +X-00937D03* +X01354Y00358D03* +X00753Y-01006D03* +X01447Y0088D03* +X00776Y00038D03* +X00585Y00156D03* +X-01437Y-0054D03* +X-01279Y-00293D03* +X-01349Y-00249D03* +X-00803Y00533D03* +X00405Y00665D03* +X-00427Y00618D03* +X-00925Y-00563D03* +X-00869Y-00589D03* +X-01112Y-00523D03* +X-01094Y-00602D03* +X-00442Y-00495D03* +X00618Y-00621D03* +X-00052Y-00495D03* +X01258Y00204D03* +X00623Y00599D03* +X0106Y00558D03* +X01417Y00209D03* +X01194Y00204D03* +X-00924Y00462D03* +X-01058Y00914D03* +X00081Y-00277D03* +X00032Y-00321D03* +X-00162Y-00298D03* +X00201Y-00789D03* +X00363Y-00674D03* +X0074Y-00329D03* +X00732Y-00141D03* +X00614Y00056D03* +X01475Y-00321D03* +X01427Y-0053D03* +X01501Y-00829D03* +X01525Y-00587D03* +X0119Y-00694D03* +X00815Y-00679D03* +X01339Y-00423D03* +X-01194Y-00087D03* +X-015Y-00901D03* +X-01484Y-00988D03* +X-01359Y-00609D03* +X-01119Y-01014D03* +X-01075Y-01063D03* +X-01079Y-00733D03* +X-01036Y-0018D03* +X-01108Y-00096D03* +X-01202Y-00394D03* +X-01232Y-00329D03* +X-01205Y-00251D03* +X-01089Y-00277D03* +X-01254Y-00026D03* +X-01276Y-00202D03* +X-01133Y-00164D03* +X-00432Y-00824D03* +X-00499Y-00926D03* +X-00872Y-00462D03* +X-00924Y-00183D03* +X-00777Y-0031D03* +X-00465Y-00294D03* +X-01407Y-00395D03* +X-01445Y00312D03* +X-01524Y-00088D03* +X-00244Y-00352D03* +X-00243Y-00496D03* +X-00384Y-00449D03* +X-00064Y-00664D03* +X-00639Y-00909D03* +X-00728Y-00831D03* +X-00669Y-01146D03* +X-00736Y-01102D03* +X-0097Y-00661D03* +X-01275Y-0057D03* +X00474Y-00784D03* +X00039Y-00757D03* +X00888Y-01001D03* +X-00515Y00651D03* +X00358Y-00002D03* +X00197Y00681D03* +X-00292Y-0027D03* +X00155Y00958D03* +X00292Y-00499D03* +X-00047Y-00089D03* +X-00887Y-00879D03* +X006Y-00782D03* +X00522Y00958D03* +X00403Y-01053D03* +X01429Y-00945D03* +X-0141Y00917D03* +X-00745Y00539D03* +X00461Y-00677D03* +X01112Y-01012D03* +X00562Y-01234D03* +X00981Y-01251D03* +X00778D03* +X-00471Y-01249D03* +X-01409Y-00976D03* +X-01166Y-01237D03* +X-01421Y-01248D03* +X-01525Y-0116D03* +X-01029Y-01119D03* +X-0121Y-01112D03* +X-00566Y-00458D03* +X-01358Y-00717D03* +X-01027Y-00866D03* +X-00933Y-0124D03* +X-00389Y-00247D03* +X-01403Y00192D03* +X-00884Y-00803D03* +X-01008Y-00997D03* +X-00704Y-01244D03* +X00638Y-00232D03* +X-00358Y-0009D03* +X-00763Y-0013D03* +X-00508Y-00696D03* +X-00977Y00595D03* +X00822Y-00541D03* +X00462Y-00492D03* +X-01469Y-00184D03* +X01424Y00048D03* +X01045Y-00288D03* +X01406Y-00176D03* +X00355Y00091D03* +X00306Y-00132D03* +X0089Y-0007D03* +X01045Y-00018D03* +X01305Y-00122D03* +X01511Y-00167D03* +X00877Y-00231D03* +X005Y-00166D03* +X00477Y-00243D03* +X00327Y-00292D03* +X00328Y-00227D03* +X00285Y-00353D03* +X-00091Y-00313D03* +X00059Y-00417D03* +X-00034Y-00245D03* +X00032Y-01284D03* +X00075Y-01162D03* +X00129D03* +X-00108Y-01259D03* +X-00068Y-01151D03* +X-00092Y-01507D03* +X-00049Y-00757D03* +X-00206Y-00807D03* +X-00759Y-00731D03* +X-00762Y-00503D03* +X-00583Y-00621D03* +X-00455Y-01123D03* +X-00251Y-00976D03* +X-00254Y-01157D03* +X00063Y-00663D03* +X00692Y-00419D03* +X-00604Y-00797D03* +X-01116Y00448D03* +X01351Y00862D03* +X00901Y00338D03* +X00969Y00392D03* +X01309Y00621D03* +X0141Y00577D03* +X01354Y00418D03* +X01457Y00508D03* +X01017Y00101D03* +X01094Y00411D03* +X01262Y00407D03* +X0125Y00621D03* +X01179Y00425D03* +X01216Y00337D03* +X-01288Y-00076D03* +X-01353Y-00125D03* +X-0117Y00113D03* +X-0077Y00381D03* +X-01274Y00406D03* +X00314Y-00926D03* +X00967Y-01002D03* +X00624Y-01027D03* +X00461Y-01002D03* +X00502Y-00918D03* +X00393Y-012D03* +X01181Y-0123D03* +X0141Y-01234D03* +X01171Y-00126D03* +X-00128Y00576D03* +X-00865Y00461D03* +X-00899Y00384D03* +X-00609Y00623D03* +X00315Y-00846D03* +X00268Y-0081D03* +X00689Y0032D03* +X00746Y00801D03* +X00666D03* +X00986Y00956D03* +X00685Y00603D03* +X00744D03* +X-01421Y-01079D03* +X00243Y-01104D03* +X00231Y-01308D03* +X00091Y-01507D03* +X0018Y-00499D03* +X-00406Y00508D03* +X-00326Y00522D03* +X-00055Y00495D03* +X-00417Y00827D03* +X-00475Y00802D03* +X-00821Y00666D03* +X00984Y-00155D03* +X00355Y00191D03* +X00347Y00285D03* +M02* \ No newline at end of file diff --git a/hardware/gerber/unisolder52_front.gto b/hardware/gerber/unisolder52_front.gto new file mode 100644 index 0000000..b915874 --- /dev/null +++ b/hardware/gerber/unisolder52_front.gto @@ -0,0 +1,8504 @@ +%FSTAX23Y23*% +%MOIN*% +%SFA1B1*% + +%IPPOS*% +%ADD37C,0.012000*% +%ADD45C,0.010000*% +%ADD70C,0.009840*% +%ADD71C,0.023620*% +%ADD72C,0.008000*% +%ADD73C,0.007870*% +%LNunisolder52_front-1*% +%LPD*% +G36* +X01241Y-01078D02* +X01229D01* +X01231Y-01067* +X01244* +X01241Y-01078* +G37* +G36* +X01277Y-01066D02* +X01278Y-01066D01* +X01279Y-01066* +X0128Y-01066* +X01281Y-01067* +X01284Y-01067* +X01286Y-01068* +X01287Y-01068* +X01289Y-01069* +X0129Y-0107* +X01291Y-0107* +X01293Y-01071* +X01293Y-01071* +X01293Y-01072* +X01293Y-01072* +X01294Y-01072* +X01294Y-01073* +X01295Y-01073* +X01295Y-01074* +X01296Y-01075* +X01296Y-01076* +X01297Y-01077* +X01297Y-01078* +X01298Y-01079* +X01298Y-01081* +X01299Y-01082* +X01299Y-01084* +X01299Y-01085* +X01287Y-01086* +Y-01086* +Y-01086* +X01287Y-01085* +Y-01085* +X01286Y-01084* +X01286Y-01083* +X01286Y-01082* +X01285Y-01081* +X01284Y-0108* +X01283Y-01079* +X01283Y-01079* +X01283Y-01078* +X01282Y-01078* +X01281Y-01078* +X0128Y-01077* +X01279Y-01077* +X01277Y-01076* +X01275Y-01076* +X01274* +X01273Y-01076* +X01272Y-01077* +X01271Y-01077* +X01269Y-01077* +X01268Y-01078* +X01267Y-01078* +X01267Y-01078* +X01267Y-01079* +X01266Y-01079* +X01266Y-0108* +X01266Y-0108* +X01265Y-01081* +X01265Y-01082* +X01265Y-01083* +Y-01083* +Y-01084* +X01265Y-01084* +X01265Y-01085* +X01265Y-01085* +X01266Y-01086* +X01266Y-01087* +X01267Y-01088* +X01267Y-01088* +X01267Y-01088* +X01268Y-01088* +X01268Y-01089* +X01269Y-01089* +X0127Y-01089* +X0127Y-0109* +X01271Y-0109* +X01272Y-01091* +X01273Y-01091* +X01274Y-01092* +X01275Y-01092* +X01276Y-01093* +X01277Y-01093* +X01277Y-01093* +X01278Y-01093* +X01278Y-01094* +X01279Y-01094* +X0128Y-01094* +X01281Y-01095* +X01282Y-01095* +X01285Y-01097* +X01287Y-01098* +X01288Y-01099* +X01289Y-01099* +X0129Y-011* +X01291Y-011* +X01291Y-01101* +X01291Y-01101* +X01291Y-01101* +X01291Y-01101* +X01292Y-01102* +X01292Y-01102* +X01292Y-01103* +X01293Y-01104* +X01294Y-01105* +X01294Y-01107* +X01295Y-01109* +X01295Y-01111* +X01295Y-01112* +Y-01112* +Y-01112* +X01295Y-01113* +Y-01113* +X01295Y-01114* +X01295Y-01115* +X01295Y-01116* +X01294Y-01117* +X01294Y-01118* +X01293Y-01119* +X01293Y-0112* +X01292Y-01121* +X01292Y-01123* +X01291Y-01124* +X0129Y-01125* +X01288Y-01126* +X01288Y-01126* +X01288Y-01127* +X01288Y-01127* +X01287Y-01127* +X01286Y-01128* +X01286Y-01128* +X01285Y-01129* +X01284Y-01129* +X01282Y-0113* +X01281Y-0113* +X01279Y-01131* +X01278Y-01131* +X01276Y-01132* +X01274Y-01132* +X01272Y-01132* +X0127Y-01132* +X01269* +X01268Y-01132* +X01268* +X01267Y-01132* +X01266Y-01132* +X01265Y-01132* +X01263Y-01132* +X0126Y-01131* +X01258Y-0113* +X01255Y-0113* +X01255* +X01255Y-01129* +X01255Y-01129* +X01254Y-01129* +X01254Y-01129* +X01253Y-01128* +X01252Y-01128* +X01251Y-01126* +X01249Y-01125* +X01248Y-01124* +X01247Y-01123* +X01247Y-01122* +Y-01122* +X01247Y-01122* +X01247Y-01121* +X01246Y-01121* +X01246Y-01121* +X01246Y-0112* +X01246Y-01119* +X01246Y-01119* +X01245Y-01117* +X01245Y-01115* +X01245Y-01113* +Y-0111* +X01257Y-0111* +Y-0111* +Y-0111* +Y-0111* +X01257Y-01111* +X01257Y-01112* +X01257Y-01113* +X01258Y-01114* +X01258Y-01116* +X01259Y-01117* +X01259Y-01118* +X01259Y-01118* +X01259Y-01118* +X0126Y-01118* +X0126Y-01119* +X0126Y-01119* +X01261Y-01119* +X01262Y-0112* +X01262Y-0112* +X01263Y-0112* +X01264Y-01121* +X01265Y-01121* +X01266Y-01121* +X01267Y-01121* +X01268Y-01121* +X01271* +X01271Y-01121* +X01272* +X01273Y-01121* +X01275Y-01121* +X01277Y-0112* +X01278Y-0112* +X01279Y-01119* +X01279Y-01119* +X01279Y-01119* +X0128Y-01119* +X0128Y-01118* +X01281Y-01117* +X01281Y-01117* +X01282Y-01116* +X01282Y-01115* +X01282Y-01113* +Y-01113* +Y-01113* +X01282Y-01112* +X01282Y-01112* +X01282Y-01111* +X01281Y-0111* +X01281Y-01109* +X0128Y-01109* +X0128Y-01108* +X01279Y-01108* +X01279Y-01108* +X01278Y-01108* +X01278Y-01107* +X01277Y-01107* +X01277Y-01107* +X01276Y-01106* +X01275Y-01106* +X01274Y-01106* +X01273Y-01105* +X01272Y-01104* +X01271Y-01104* +X0127* +X0127Y-01104* +X0127Y-01104* +X01269Y-01103* +X01269Y-01103* +X01268Y-01103* +X01266Y-01102* +X01265Y-01101* +X01263Y-011* +X01261Y-01099* +X0126Y-01099* +X0126Y-01098* +X01259Y-01098* +X01259Y-01098* +X01258Y-01098* +X01258Y-01097* +X01257Y-01096* +X01256Y-01095* +X01255Y-01094* +X01254Y-01093* +X01254Y-01093* +X01254Y-01092* +X01254Y-01092* +X01253Y-01091* +X01253Y-01089* +X01253Y-01088* +X01252Y-01086* +X01252Y-01085* +Y-01085* +Y-01084* +Y-01084* +X01252Y-01083* +X01252Y-01083* +X01253Y-01082* +X01253Y-01081* +X01253Y-0108* +X01253Y-01079* +X01254Y-01078* +X01254Y-01077* +X01255Y-01076* +X01255Y-01075* +X01256Y-01073* +X01257Y-01072* +X01258Y-01071* +X01258Y-01071* +X01258Y-01071* +X01259Y-01071* +X01259Y-0107* +X0126Y-0107* +X01261Y-0107* +X01261Y-01069* +X01262Y-01069* +X01264Y-01068* +X01265Y-01068* +X01266Y-01067* +X01268Y-01067* +X01269Y-01066* +X01271Y-01066* +X01273Y-01066* +X01275Y-01066* +X01276* +X01277Y-01066* +G37* +G36* +X01201Y-01084D02* +X01202D01* +X01202Y-01084* +X01203Y-01084* +X01205Y-01084* +X01206Y-01085* +X01208Y-01086* +X01209Y-01087* +X01209Y-01087* +X0121Y-01087* +X0121Y-01088* +X01211Y-01089* +X01211Y-0109* +X01212Y-01092* +X01212Y-01094* +X01213Y-01096* +Y-01096* +Y-01096* +X01212Y-01097* +X01212Y-01098* +X01212Y-01098* +X01212Y-01099* +X01212Y-011* +X01212Y-01101* +X01212Y-01102* +X01211Y-01103* +X01211Y-01104* +X01211Y-01105* +X01205Y-01131* +X01193* +X01199Y-01105* +Y-01105* +X01199Y-01105* +Y-01104* +X01199Y-01104* +X01199Y-01103* +X01199Y-01102* +X01199Y-01101* +X012Y-01099* +X012Y-01098* +X012Y-01098* +Y-01098* +Y-01098* +Y-01097* +X012Y-01097* +X012Y-01096* +X01199Y-01096* +X01199Y-01095* +X01199Y-01095* +X01198Y-01094* +X01198Y-01094* +X01198Y-01094* +X01198Y-01094* +X01197Y-01093* +X01197Y-01093* +X01196Y-01093* +X01195Y-01093* +X01194Y-01093* +X01194* +X01193Y-01093* +X01193Y-01093* +X01192Y-01093* +X01191Y-01094* +X01189Y-01094* +X01188Y-01095* +X01188Y-01095* +X01188Y-01095* +X01187Y-01096* +X01186Y-01097* +X01185Y-01097* +X01184Y-01098* +X01184Y-011* +X01183Y-01101* +X01183Y-01101* +X01183Y-01102* +X01182Y-01102* +X01182Y-01102* +X01182Y-01103* +X01182Y-01103* +X01182Y-01104* +X01181Y-01105* +X01181Y-01106* +X01181Y-01107* +X01181Y-01108* +X0118Y-01109* +X0118Y-01111* +X0118Y-01112* +X01176Y-01131* +X01163* +X01173Y-01085* +X01185* +X01184Y-01091* +X01184Y-01091* +X01184Y-01091* +X01184Y-0109* +X01184Y-0109* +X01185Y-01089* +X01186Y-01089* +X01188Y-01088* +X01189Y-01087* +X0119Y-01086* +X01192Y-01085* +X01192* +X01192Y-01085* +X01193Y-01085* +X01193Y-01085* +X01194Y-01084* +X01196Y-01084* +X01197Y-01084* +X01199Y-01084* +X012Y-01084* +X01201* +X01201Y-01084* +G37* +G36* +X00048Y00448D02* +X00049Y00448D01* +X00051Y00447* +X00052Y00447* +X00054Y00447* +X00056Y00446* +X00058Y00446* +X0006Y00445* +X00062Y00444* +X00064Y00443* +X00066Y00442* +X00068Y00441* +X00069Y00439* +X00069Y00439* +X0007Y00439* +X0007Y00438* +X00071Y00438* +X00071Y00437* +X00072Y00436* +X00073Y00435* +X00074Y00433* +X00074Y00432* +X00075Y0043* +X00076Y00428* +X00077Y00426* +X00077Y00424* +X00078Y00422* +X00078Y00419* +X00078Y00416* +Y00416* +Y00416* +X00078Y00415* +Y00414* +X00078Y00412* +X00077Y0041* +X00077Y00408* +X00077Y00406* +X00076Y00404* +X00075Y00402* +X00074Y00399* +X00073Y00397* +X00072Y00394* +X00071Y00392* +X00069Y00389* +X00067Y00387* +X00067Y00387* +X00067Y00387* +X00066Y00386* +X00065Y00385* +X00064Y00384* +X00063Y00383* +X00061Y00382* +X00059Y00381* +X00057Y0038* +X00055Y00379* +X00053Y00378* +X0005Y00377* +X00048Y00376* +X00045Y00375* +X00041Y00375* +X00038Y00375* +X00037* +X00036Y00375* +X00036* +X00035Y00375* +X00032Y00375* +X0003Y00376* +X00027Y00376* +X00024Y00377* +X00021Y00379* +X00021* +X0002Y00379* +X0002Y00379* +X00019Y00379* +X00018Y0038* +X00016Y00382* +X00015Y00383* +X00013Y00385* +X00011Y00387* +X00009Y0039* +Y0039* +X00009Y0039* +X00009Y00391* +X00009Y00391* +X00008Y00392* +X00008Y00393* +X00008Y00394* +X00007Y00397* +X00006Y00399* +X00006Y00402* +X00006Y00405* +Y00406* +Y00406* +X00006Y00407* +Y00409* +X00006Y0041* +X00006Y00412* +X00007Y00414* +X00007Y00417* +X00008Y00419* +X00008Y00421* +X00009Y00424* +X0001Y00427* +X00012Y00429* +X00013Y00432* +X00015Y00434* +X00017Y00436* +X00017Y00436* +X00017Y00437* +X00018Y00437* +X00019Y00438* +X0002Y00439* +X00021Y0044* +X00022Y00441* +X00024Y00442* +X00026Y00443* +X00028Y00444* +X00031Y00445* +X00033Y00446* +X00036Y00447* +X00039Y00447* +X00042Y00448* +X00045Y00448* +X00047* +X00048Y00448* +G37* +G36* +X-0032D02* +X-00319D01* +X-00317Y00448* +X-00316Y00447* +X-00314Y00447* +X-00311Y00447* +X-00308Y00446* +X-00305Y00444* +X-00303Y00443* +X-00302Y00442* +X-00302* +X-00302Y00442* +X-00301Y00441* +X-003Y0044* +X-00299Y00439* +X-00298Y00437* +X-00297Y00435* +X-00296Y00432* +X-00296Y00431* +X-00296Y00429* +Y00429* +Y00429* +Y00428* +X-00296Y00427* +Y00426* +X-00296Y00425* +X-00296Y00422* +Y00422* +X-00296Y00422* +Y00422* +X-00296Y00421* +X-00297Y00421* +X-00297Y0042* +X-00297Y00419* +X-00297Y00418* +X-00297Y00416* +X-00298Y00415* +X-00298Y00413* +X-00298Y00411* +X-00299Y00409* +X-00299Y00407* +X-003Y00404* +Y00404* +X-003Y00403* +X-003Y00403* +X-003Y00402* +X-00301Y00401* +X-00301Y004* +X-00301Y00397* +X-00302Y00394* +X-00302Y00391* +X-00303Y00389* +X-00303Y00387* +Y00386* +Y00386* +Y00386* +X-00303Y00385* +X-00303Y00384* +X-00302Y00382* +X-00302Y0038* +X-00302Y00379* +X-00301Y00377* +X-0032* +Y00377* +X-0032Y00377* +X-0032Y00378* +X-0032Y00379* +X-0032Y0038* +X-00321Y00381* +X-00321Y00384* +X-00321Y00384* +X-00322Y00384* +X-00323Y00383* +X-00324Y00382* +X-00325Y00381* +X-00327Y00379* +X-00329Y00378* +X-00331Y00377* +X-00331Y00377* +X-00331Y00377* +X-00333Y00377* +X-00334Y00376* +X-00336Y00376* +X-00337Y00375* +X-00339Y00375* +X-00341Y00375* +X-00342* +X-00343Y00375* +X-00343* +X-00344Y00375* +X-00346Y00376* +X-00349Y00376* +X-00351Y00377* +X-00353Y00379* +X-00354Y00379* +X-00356Y0038* +Y00381* +X-00356Y00381* +X-00356Y00381* +X-00356Y00381* +X-00357Y00383* +X-00358Y00384* +X-00359Y00387* +X-0036Y00389* +X-00361Y00392* +X-00361Y00393* +X-00361Y00395* +Y00395* +Y00396* +Y00396* +X-00361Y00397* +X-00361Y00398* +X-00361Y00399* +X-0036Y00401* +X-0036Y00403* +X-00359Y00406* +X-00358Y00407* +X-00357Y00409* +X-00356Y0041* +X-00355Y00411* +X-00355Y00411* +X-00355Y00411* +X-00354Y00412* +X-00354Y00412* +X-00353Y00412* +X-00352Y00413* +X-00351Y00414* +X-0035Y00414* +X-00349Y00415* +X-00347Y00415* +X-00345Y00416* +X-00343Y00417* +X-00341Y00417* +X-00338Y00418* +X-00336Y00418* +X-00333Y00418* +X-00332* +X-00332Y00418* +X-00331Y00419* +X-0033Y00419* +X-00328Y00419* +X-00326Y00419* +X-00323Y00419* +X-0032Y0042* +X-00318Y0042* +X-00317Y0042* +X-00316Y00421* +X-00315Y00421* +Y00421* +X-00315Y00422* +X-00315Y00422* +X-00314Y00423* +X-00314Y00425* +X-00314Y00426* +Y00427* +Y00427* +Y00428* +X-00314Y00428* +X-00314Y00429* +X-00314Y0043* +X-00315Y00431* +X-00315Y00432* +X-00316Y00432* +X-00316Y00432* +X-00317Y00433* +X-00317Y00433* +X-00318Y00433* +X-00319Y00434* +X-0032Y00434* +X-00322Y00434* +X-00323Y00434* +X-00324* +X-00325Y00434* +X-00326Y00434* +X-00328Y00434* +X-00329Y00434* +X-0033Y00433* +X-00331Y00432* +X-00332Y00432* +X-00332Y00432* +X-00332Y00431* +X-00333Y00431* +X-00334Y0043* +X-00334Y00429* +X-00335Y00428* +X-00335Y00427* +X-00354Y00428* +Y00428* +X-00354Y00429* +X-00353Y00429* +X-00353Y0043* +X-00353Y0043* +X-00352Y00431* +X-00351Y00433* +X-0035Y00436* +X-00348Y00438* +X-00346Y00441* +X-00343Y00443* +X-00343Y00443* +X-00342Y00443* +X-00342Y00443* +X-00341Y00444* +X-00341Y00444* +X-0034Y00444* +X-00339Y00445* +X-00337Y00445* +X-00336Y00446* +X-00334Y00446* +X-00333Y00447* +X-00331Y00447* +X-00329Y00447* +X-00327Y00448* +X-00324Y00448* +X-00321* +X-0032Y00448* +G37* +G36* +X00329Y00446D02* +X00341D01* +X00338Y00432* +X00326* +X0032Y00403* +Y00403* +X0032Y00403* +Y00402* +X0032Y00402* +X0032Y004* +X00319Y00399* +X00319Y00397* +X00319Y00396* +X00319Y00395* +X00319Y00394* +Y00394* +Y00394* +Y00394* +X00319Y00393* +Y00393* +X00319Y00392* +X00319Y00391* +X0032Y0039* +X0032* +X0032Y0039* +X00321Y0039* +X00321Y0039* +X00322Y0039* +X00323Y00389* +X00324Y00389* +X00326* +X00326Y00389* +X00327* +X00328Y0039* +X00329Y0039* +X00331Y0039* +X00328Y00376* +X00328* +X00327Y00376* +X00326Y00376* +X00325Y00375* +X00324Y00375* +X00322Y00375* +X0032Y00375* +X00317* +X00317Y00375* +X00316* +X00315Y00375* +X00313Y00375* +X0031Y00376* +X00308Y00376* +X00306Y00377* +X00305Y00378* +X00304Y00379* +X00304Y00379* +X00303Y00379* +X00302Y0038* +X00302Y00381* +X00301Y00383* +X003Y00385* +X003Y00387* +X00299Y00389* +Y00389* +Y0039* +X00299Y00391* +X003Y00392* +Y00392* +X003Y00393* +X003Y00394* +X003Y00396* +X003Y00397* +X00301Y00399* +X00301Y004* +X00301Y00402* +X00302Y00404* +X00308Y00432* +X00298* +X00301Y00446* +X0031* +X00313Y00457* +X00334Y0047* +X00329Y00446* +G37* +G36* +X00165D02* +X00177D01* +X00174Y00432* +X00162* +X00156Y00403* +Y00403* +X00156Y00403* +Y00402* +X00156Y00402* +X00156Y004* +X00155Y00399* +X00155Y00397* +X00155Y00396* +X00155Y00395* +X00155Y00394* +Y00394* +Y00394* +Y00394* +X00155Y00393* +Y00393* +X00155Y00392* +X00155Y00391* +X00156Y0039* +X00156* +X00156Y0039* +X00157Y0039* +X00157Y0039* +X00158Y0039* +X00159Y00389* +X0016Y00389* +X00162* +X00162Y00389* +X00163* +X00164Y0039* +X00165Y0039* +X00167Y0039* +X00164Y00376* +X00164* +X00163Y00376* +X00162Y00376* +X00161Y00375* +X0016Y00375* +X00158Y00375* +X00156Y00375* +X00153* +X00153Y00375* +X00152* +X00151Y00375* +X00149Y00375* +X00146Y00376* +X00144Y00376* +X00142Y00377* +X00141Y00378* +X0014Y00379* +X0014Y00379* +X00139Y00379* +X00138Y0038* +X00138Y00381* +X00137Y00383* +X00136Y00385* +X00136Y00387* +X00135Y00389* +Y00389* +Y0039* +X00135Y00391* +X00136Y00392* +Y00392* +X00136Y00393* +X00136Y00394* +X00136Y00396* +X00136Y00397* +X00137Y00399* +X00137Y004* +X00137Y00402* +X00138Y00404* +X00144Y00432* +X00134* +X00137Y00446* +X00146* +X00149Y00457* +X0017Y0047* +X00165Y00446* +G37* +G36* +X0123Y-01131D02* +X01218D01* +X01227Y-01085* +X0124* +X0123Y-01131* +G37* +G36* +X01465Y-01084D02* +X01466Y-01084D01* +X01467Y-01084* +X01468Y-01084* +X01469Y-01084* +X01471Y-01085* +X01472Y-01085* +X01473Y-01086* +X01474Y-01086* +X01475Y-01087* +X01476Y-01088* +X01477Y-01089* +X01477Y-01089* +X01477Y-01089* +X01478Y-01089* +X01478Y-0109* +X01478Y-0109* +X01479Y-01091* +X01479Y-01092* +X0148Y-01093* +X0148Y-01094* +X01481Y-01095* +X01481Y-01096* +X01481Y-01097* +X01482Y-01099* +X01482Y-011* +X01482Y-01102* +X01482Y-01104* +Y-01104* +Y-01104* +Y-01104* +Y-01104* +X01482Y-01105* +Y-01106* +X01482Y-01108* +X01482Y-01109* +X01482Y-0111* +X01481Y-01112* +X0145* +Y-01112* +Y-01112* +X0145Y-01113* +Y-01113* +Y-01113* +Y-01113* +Y-01113* +X0145Y-01114* +X0145Y-01115* +X0145Y-01116* +X0145Y-01117* +X01451Y-01118* +X01452Y-01119* +X01452Y-0112* +X01453Y-01121* +X01453Y-01121* +X01454Y-01121* +X01454Y-01122* +X01455Y-01122* +X01456Y-01123* +X01458Y-01123* +X01459Y-01123* +X01459* +X01459Y-01123* +X0146* +X0146Y-01123* +X01461Y-01123* +X01462Y-01122* +X01463Y-01122* +X01464Y-01122* +X01465Y-01121* +X01466Y-01121* +X01466Y-0112* +X01467Y-01119* +X01468Y-01118* +X01469Y-01117* +X0148Y-01119* +Y-01119* +X0148Y-01119* +X0148Y-01119* +X01479Y-0112* +X01479Y-0112* +X01479Y-01121* +X01478Y-01123* +X01476Y-01124* +X01475Y-01126* +X01473Y-01128* +X01471Y-01129* +X01471* +X01471Y-01129* +X01471Y-01129* +X0147Y-01129* +X0147Y-0113* +X01469Y-0113* +X01468Y-0113* +X01468Y-01131* +X01466Y-01131* +X01464Y-01132* +X01461Y-01132* +X01459Y-01132* +X01458* +X01457Y-01132* +X01457Y-01132* +X01456Y-01132* +X01455Y-01132* +X01453Y-01132* +X01452Y-01131* +X01451Y-01131* +X0145Y-0113* +X01448Y-0113* +X01447Y-01129* +X01446Y-01128* +X01445Y-01127* +X01444Y-01126* +X01444Y-01126* +X01443Y-01126* +X01443Y-01126* +X01443Y-01125* +X01442Y-01125* +X01442Y-01124* +X01441Y-01123* +X01441Y-01122* +X0144Y-01121* +X0144Y-0112* +X01439Y-01119* +X01439Y-01117* +X01438Y-01116* +X01438Y-01114* +X01438Y-01112* +X01438Y-01111* +Y-01111* +Y-0111* +Y-0111* +X01438Y-01109* +X01438Y-01108* +X01438Y-01107* +X01438Y-01106* +X01438Y-01105* +X01439Y-01104* +X01439Y-01102* +X0144Y-01101* +X0144Y-01099* +X01441Y-01098* +X01441Y-01097* +X01442Y-01095* +X01443Y-01094* +X01443Y-01094* +X01443Y-01093* +X01444Y-01093* +X01444Y-01092* +X01445Y-01091* +X01446Y-0109* +X01447Y-0109* +X01448Y-01089* +X0145Y-01088* +X01451Y-01087* +X01453Y-01086* +X01455Y-01085* +X01457Y-01084* +X01459Y-01084* +X01461Y-01084* +X01464Y-01084* +X01464* +X01465Y-01084* +G37* +G36* +X01332D02* +X01333Y-01084D01* +X01334Y-01084* +X01335Y-01084* +X01336Y-01084* +X01337Y-01085* +X01339Y-01085* +X0134Y-01085* +X01341Y-01086* +X01343Y-01087* +X01344Y-01087* +X01345Y-01088* +X01346Y-01089* +X01346Y-01089* +X01346Y-0109* +X01347Y-0109* +X01347Y-0109* +X01348Y-01091* +X01348Y-01092* +X01349Y-01092* +X01349Y-01093* +X0135Y-01094* +X0135Y-01096* +X01351Y-01097* +X01351Y-01098* +X01352Y-011* +X01352Y-01101* +X01352Y-01103* +X01352Y-01105* +Y-01105* +Y-01105* +X01352Y-01106* +Y-01106* +X01352Y-01107* +X01352Y-01109* +X01351Y-0111* +X01351Y-01111* +X01351Y-01113* +X0135Y-01114* +X0135Y-01116* +X01349Y-01118* +X01348Y-01119* +X01347Y-01121* +X01346Y-01123* +X01345Y-01124* +X01345Y-01124* +X01344Y-01124* +X01344Y-01125* +X01343Y-01125* +X01343Y-01126* +X01342Y-01127* +X01341Y-01127* +X0134Y-01128* +X01338Y-01129* +X01337Y-0113* +X01335Y-0113* +X01334Y-01131* +X01332Y-01132* +X0133Y-01132* +X01328Y-01132* +X01325Y-01132* +X01325* +X01324Y-01132* +X01324* +X01323Y-01132* +X01322Y-01132* +X0132Y-01132* +X01318Y-01131* +X01316Y-01131* +X01314Y-0113* +X01314* +X01314Y-0113* +X01313Y-01129* +X01313Y-01129* +X01312Y-01129* +X01311Y-01128* +X0131Y-01127* +X01309Y-01125* +X01307Y-01124* +X01306Y-01122* +Y-01122* +X01306Y-01122* +X01306Y-01122* +X01306Y-01121* +X01306Y-01121* +X01306Y-0112* +X01305Y-01119* +X01305Y-01118* +X01304Y-01116* +X01304Y-01114* +X01304Y-01112* +Y-01112* +Y-01111* +X01304Y-01111* +Y-0111* +X01304Y-01109* +X01304Y-01107* +X01305Y-01106* +X01305Y-01104* +X01305Y-01103* +X01306Y-01101* +X01306Y-01099* +X01307Y-01098* +X01308Y-01096* +X01309Y-01094* +X0131Y-01093* +X01311Y-01091* +X01311Y-01091* +X01312Y-01091* +X01312Y-01091* +X01312Y-0109* +X01313Y-01089* +X01314Y-01089* +X01315Y-01088* +X01316Y-01087* +X01318Y-01087* +X01319Y-01086* +X01321Y-01085* +X01322Y-01085* +X01324Y-01084* +X01326Y-01084* +X01328Y-01084* +X0133Y-01084* +X01331* +X01332Y-01084* +G37* +G36* +X01369Y-01131D02* +X01357D01* +X0137Y-01067* +X01383* +X01369Y-01131* +G37* +G36* +X01424D02* +X01413D01* +X01414Y-01126* +X01413Y-01126* +X01413Y-01127* +X01412Y-01127* +X01411Y-01128* +X0141Y-01129* +X01409Y-0113* +X01408Y-0113* +X01407Y-01131* +X01407Y-01131* +X01406Y-01131* +X01406Y-01131* +X01405Y-01132* +X01404Y-01132* +X01402Y-01132* +X01401Y-01132* +X01399Y-01132* +X01399* +X01398Y-01132* +X01398Y-01132* +X01397Y-01132* +X01395Y-01132* +X01393Y-01131* +X01392Y-01131* +X01391Y-0113* +X0139Y-0113* +X01389Y-01129* +X01389Y-01128* +X01388Y-01127* +X01388Y-01127* +X01387Y-01127* +X01387Y-01127* +X01387Y-01126* +X01387Y-01126* +X01386Y-01125* +X01386Y-01125* +X01385Y-01124* +X01385Y-01123* +X01385Y-01122* +X01384Y-0112* +X01384Y-01119* +X01384Y-01118* +X01383Y-01116* +X01383Y-01115* +X01383Y-01113* +Y-01113* +Y-01112* +X01383Y-01112* +Y-01111* +X01383Y-0111* +X01384Y-01109* +X01384Y-01107* +X01384Y-01106* +X01384Y-01105* +X01385Y-01103* +X01385Y-01101* +X01386Y-011* +X01387Y-01098* +X01387Y-01096* +X01388Y-01094* +X0139Y-01093* +X0139Y-01093* +X0139Y-01092* +X0139Y-01092* +X01391Y-01091* +X01391Y-01091* +X01392Y-0109* +X01393Y-01089* +X01394Y-01088* +X01395Y-01087* +X01396Y-01086* +X01398Y-01086* +X01399Y-01085* +X01401Y-01084* +X01403Y-01084* +X01405Y-01084* +X01406Y-01084* +X01407* +X01407Y-01084* +X01408* +X01409Y-01084* +X0141Y-01084* +X01411Y-01084* +X01412Y-01084* +X01413Y-01085* +X01414Y-01085* +X01415Y-01086* +X01416Y-01087* +X01418Y-01088* +X01419Y-01089* +X0142Y-0109* +X01421Y-01091* +X01426Y-01067* +X01438* +X01424Y-01131* +G37* +G36* +X0152Y-01084D02* +X01521Y-01084D01* +X01522Y-01084* +X01523Y-01084* +X01524Y-01084* +X01525Y-01085* +X0152Y-01095* +X0152* +X0152Y-01095* +X01519Y-01095* +X01519Y-01095* +X01518Y-01095* +X01518Y-01095* +X01516Y-01095* +X01516* +X01515Y-01095* +X01514Y-01095* +X01513Y-01095* +X01512Y-01096* +X01511Y-01096* +X0151Y-01097* +X0151Y-01097* +X01509Y-01097* +X01509Y-01098* +X01508Y-01099* +X01507Y-011* +X01506Y-01101* +X01505Y-01102* +X01505Y-01104* +Y-01104* +X01504Y-01104* +X01504Y-01104* +X01504Y-01104* +X01504Y-01105* +X01504Y-01105* +X01504Y-01106* +X01503Y-01107* +X01503Y-01108* +X01503Y-01109* +X01502Y-0111* +X01502Y-01111* +X01502Y-01112* +X01501Y-01114* +X01501Y-01115* +X01501Y-01117* +X01498Y-01131* +X01485* +X01495Y-01085* +X01507* +X01505Y-01094* +X01505Y-01094* +X01505Y-01093* +X01505Y-01093* +X01506Y-01092* +X01507Y-01091* +X01507Y-0109* +X01508Y-0109* +X01509Y-01089* +X0151Y-01088* +X01511Y-01087* +X01512Y-01086* +X01514Y-01085* +X01515Y-01084* +X01516Y-01084* +X01518Y-01084* +X01519Y-01084* +X0152* +X0152Y-01084* +G37* +G36* +X01158Y-01103D02* +Y-01103D01* +X01158Y-01104* +X01158Y-01104* +X01157Y-01105* +X01157Y-01106* +X01157Y-01107* +X01157Y-01108* +X01156Y-01109* +X01155Y-01112* +X01155Y-01115* +X01153Y-01117* +X01153Y-01119* +X01152Y-0112* +Y-0112* +X01152Y-0112* +X01152Y-0112* +X01152Y-01121* +X01151Y-01121* +X01151Y-01122* +X0115Y-01123* +X01149Y-01124* +X01147Y-01126* +X01145Y-01127* +X01143Y-01129* +X01143* +X01143Y-01129* +X01142Y-01129* +X01142Y-01129* +X01141Y-0113* +X0114Y-0113* +X01139Y-0113* +X01138Y-01131* +X01137Y-01131* +X01136Y-01131* +X01135Y-01131* +X01133Y-01132* +X01132Y-01132* +X0113Y-01132* +X01129Y-01132* +X01127Y-01132* +X01126* +X01125Y-01132* +X01124Y-01132* +X01123Y-01132* +X01122Y-01132* +X0112Y-01132* +X01117Y-01131* +X01116Y-01131* +X01114Y-0113* +X01113Y-01129* +X01112Y-01129* +X0111Y-01128* +X01109Y-01127* +X01109Y-01127* +X01109Y-01127* +X01108Y-01126* +X01108Y-01126* +X01108Y-01125* +X01107Y-01125* +X01107Y-01124* +X01106Y-01123* +X01105Y-01122* +X01105Y-01121* +X01104Y-0112* +X01104Y-01119* +X01104Y-01117* +X01103Y-01116* +X01103Y-01114* +X01103Y-01113* +Y-01113* +Y-01112* +Y-01112* +X01103Y-01112* +Y-01111* +X01103Y-0111* +X01103Y-01109* +Y-01109* +X01103Y-01108* +X01104Y-01108* +X01104Y-01107* +X01104Y-01107* +X01104Y-01106* +X01104Y-01106* +X01104Y-01105* +X01104Y-01104* +X01105Y-01103* +X01105Y-01102* +X01105Y-01101* +X01112Y-01067* +X01126* +X01118Y-01102* +X01116Y-0111* +Y-01111* +Y-01111* +X01116Y-01111* +X01116Y-01111* +X01116Y-01112* +X01116Y-01113* +Y-01113* +X01116Y-01114* +X01116Y-01115* +X01116Y-01115* +X01116Y-01116* +X01117Y-01117* +X01118Y-01118* +X01119Y-01119* +X01119Y-01119* +X01119Y-01119* +X0112Y-0112* +X01121Y-0112* +X01122Y-01121* +X01124Y-01121* +X01125Y-01121* +X01127Y-01121* +X01128* +X01129Y-01121* +X0113Y-01121* +X01132Y-01121* +X01133Y-01121* +X01135Y-0112* +X01136Y-0112* +X01136Y-01119* +X01136Y-01119* +X01137Y-01119* +X01138Y-01118* +X01139Y-01117* +X0114Y-01117* +X0114Y-01115* +X01141Y-01114* +Y-01114* +X01141Y-01114* +X01141Y-01114* +X01141Y-01114* +X01142Y-01113* +X01142Y-01113* +X01142Y-01112* +X01142Y-01111* +X01143Y-01111* +X01143Y-0111* +X01143Y-01109* +X01144Y-01108* +X01144Y-01106* +X01144Y-01105* +X01145Y-01104* +X01145Y-01102* +X01152Y-01067* +X01165* +X01158Y-01103* +G37* +G36* +X00403Y00377D02* +X00385D01* +X00386Y00384* +X00386Y00384* +X00386Y00383* +X00385Y00382* +X00383Y00381* +X00382Y0038* +X0038Y00379* +X00378Y00378* +X00376Y00377* +X00376Y00377* +X00375Y00377* +X00374Y00376* +X00373Y00376* +X00371Y00375* +X0037Y00375* +X00367Y00375* +X00365Y00375* +X00364* +X00363Y00375* +X00362Y00375* +X00361Y00375* +X00359Y00376* +X00356Y00377* +X00355Y00377* +X00353Y00378* +X00352Y00379* +X0035Y0038* +X00349Y00381* +X00348Y00382* +X00347Y00382* +X00347Y00383* +X00347Y00383* +X00347Y00384* +X00346Y00384* +X00345Y00385* +X00345Y00386* +X00344Y00388* +X00344Y00389* +X00343Y00391* +X00342Y00393* +X00342Y00395* +X00342Y00397* +X00341Y00399* +X00341Y00401* +X00341Y00404* +Y00404* +Y00405* +X00341Y00406* +Y00407* +X00341Y00408* +X00341Y0041* +X00342Y00412* +X00342Y00414* +X00343Y00416* +X00343Y00419* +X00344Y00421* +X00345Y00424* +X00346Y00427* +X00347Y00429* +X00349Y00432* +X0035Y00434* +X00351Y00434* +X00351Y00435* +X00351Y00436* +X00352Y00436* +X00353Y00437* +X00354Y00439* +X00356Y0044* +X00357Y00441* +X00359Y00442* +X00361Y00444* +X00363Y00445* +X00365Y00446* +X00368Y00447* +X0037Y00447* +X00373Y00448* +X00376Y00448* +X00376* +X00377Y00448* +X00378* +X00379Y00448* +X00381Y00447* +X00382Y00447* +X00384Y00447* +X00385Y00446* +X00387Y00445* +X00389Y00444* +X00391Y00443* +X00392Y00442* +X00394Y0044* +X00396Y00439* +X00397Y00437* +X00405Y00473* +X00424* +X00403Y00377* +G37* +G36* +X-00236Y00448D02* +X-00235Y00448D01* +X-00234Y00447* +X-00232Y00447* +X-00231Y00447* +X-00229Y00446* +X-00236Y0043* +X-00236* +X-00237Y00431* +X-00237Y00431* +X-00238Y00431* +X-00239Y00431* +X-00239Y00431* +X-00242Y00431* +X-00242* +X-00243Y00431* +X-00245Y00431* +X-00246Y00431* +X-00248Y0043* +X-0025Y00429* +X-00251Y00428* +X-00252Y00428* +X-00252Y00427* +X-00253Y00426* +X-00254Y00425* +X-00256Y00424* +X-00257Y00422* +X-00258Y0042* +X-00259Y00418* +Y00418* +X-00259Y00418* +X-0026Y00417* +X-0026Y00417* +X-0026Y00416* +X-0026Y00415* +X-00261Y00414* +X-00261Y00413* +X-00262Y00412* +X-00262Y0041* +X-00262Y00409* +X-00263Y00407* +X-00263Y00405* +X-00264Y00403* +X-00264Y00401* +X-00265Y00398* +X-00269Y00377* +X-00288* +X-00274Y00446* +X-00256* +X-00259Y00433* +X-00259Y00433* +X-00258Y00433* +X-00258Y00434* +X-00257Y00435* +X-00256Y00436* +X-00255Y00438* +X-00254Y00439* +X-00253Y0044* +X-00251Y00442* +X-00249Y00443* +X-00248Y00444* +X-00246Y00446* +X-00244Y00447* +X-00242Y00447* +X-0024Y00448* +X-00238Y00448* +X-00237* +X-00236Y00448* +G37* +G36* +X-00125Y0037D02* +Y0037D01* +X-00126Y00369* +X-00126Y00369* +X-00126Y00368* +X-00127Y00367* +X-00127Y00367* +X-00128Y00365* +X-0013Y00362* +X-00131Y0036* +X-00133Y00358* +X-00133Y00357* +X-00134Y00357* +X-00134Y00356* +X-00134Y00356* +X-00135Y00355* +X-00136Y00354* +X-00137Y00353* +X-00138Y00352* +X-0014Y00351* +X-00141Y00351* +X-00141Y0035* +X-00142Y0035* +X-00143Y0035* +X-00144Y00349* +X-00146Y00349* +X-00147Y00349* +X-00149Y00348* +X-00151Y00348* +X-00152* +X-00154Y00348* +X-00155Y00349* +X-00157Y00349* +X-0016Y00349* +X-00162Y0035* +X-00165Y0035* +X-00163Y00364* +X-00163* +X-00163Y00364* +X-00162Y00364* +X-00161Y00364* +X-0016Y00364* +X-00159Y00364* +X-00157Y00363* +X-00156* +X-00156Y00364* +X-00155Y00364* +X-00154Y00364* +X-00154Y00364* +X-00153Y00365* +X-00152Y00365* +X-0015Y00366* +X-00149Y00367* +X-00148Y00368* +X-00147Y00369* +X-00146Y0037* +X-00145Y00372* +X-00143Y00374* +X-00142Y00377* +X-00154Y00446* +X-00136* +X-00131Y00411* +Y00411* +X-00131Y00411* +Y0041* +X-00131Y00409* +X-00131Y00408* +X-0013Y00407* +X-0013Y00404* +X-0013Y00401* +X-00129Y00398* +X-00129Y00396* +X-00129Y00395* +X-00129Y00394* +Y00393* +X-00129Y00393* +X-00129Y00394* +X-00128Y00395* +X-00128Y00396* +X-00128Y00397* +X-00127Y00398* +X-00126Y004* +X-00126Y00401* +X-00125Y00403* +X-00123Y00407* +X-00121Y00411* +X-00119Y00415* +X-00102Y00446* +X-00082* +X-00125Y0037* +G37* +G36* +X-0039Y00448D02* +X-00389Y00448D01* +X-00388Y00448* +X-00386Y00447* +X-00383Y00446* +X-00382Y00445* +X-0038Y00445* +X-00379Y00444* +X-00377Y00443* +X-00376Y00442* +X-00375Y0044* +X-00375Y0044* +X-00374Y0044* +X-00374Y0044* +X-00374Y00439* +X-00373Y00438* +X-00373Y00437* +X-00372Y00436* +X-00371Y00435* +X-00371Y00433* +X-0037Y00432* +X-00369Y0043* +X-00369Y00428* +X-00369Y00425* +X-00368Y00423* +X-00368Y00421* +X-00368Y00418* +Y00418* +Y00417* +X-00368Y00416* +Y00415* +X-00368Y00413* +X-00369Y00411* +X-00369Y00409* +X-00369Y00407* +X-0037Y00404* +X-00371Y00402* +X-00372Y00399* +X-00373Y00396* +X-00374Y00394* +X-00376Y00391* +X-00377Y00388* +X-00379Y00386* +X-0038Y00386* +X-0038Y00385* +X-0038Y00385* +X-00381Y00384* +X-00382Y00383* +X-00383Y00382* +X-00385Y00381* +X-00386Y0038* +X-00388Y00379* +X-00389Y00378* +X-00391Y00377* +X-00393Y00377* +X-00396Y00376* +X-00398Y00375* +X-004Y00375* +X-00403Y00375* +X-00403* +X-00404Y00375* +X-00405* +X-00406Y00375* +X-00408Y00375* +X-00409Y00376* +X-00411Y00376* +X-00412Y00377* +X-00414Y00378* +X-00416Y00378* +X-00417Y0038* +X-00419Y00381* +X-00421Y00382* +X-00422Y00384* +X-00424Y00386* +X-00431Y0035* +X-0045* +X-0043Y00446* +X-00412* +X-00414Y00439* +X-00413* +X-00413Y00439* +X-00413Y0044* +X-00411Y00441* +X-0041Y00442* +X-00408Y00443* +X-00407Y00444* +X-00405Y00445* +X-00403Y00446* +X-00403Y00446* +X-00402Y00446* +X-00401Y00446* +X-004Y00447* +X-00398Y00447* +X-00396Y00448* +X-00394Y00448* +X-00392Y00448* +X-00391* +X-0039Y00448* +G37* +G36* +X00127Y00474D02* +X00128D01* +X00129Y00474* +X0013Y00474* +X00133Y00474* +X00136Y00473* +X00139Y00472* +X00143Y00471* +X00139Y00458* +X00139* +X00139Y00458* +X00138Y00458* +X00138Y00458* +X00137Y00459* +X00135Y00459* +X00133Y0046* +X00132Y0046* +X0013Y0046* +X00128Y0046* +X00128* +X00127Y0046* +X00126Y0046* +X00125Y0046* +X00125Y00459* +X00124Y00459* +X00123Y00458* +Y00458* +X00123Y00458* +X00123Y00457* +X00123Y00457* +X00122Y00456* +X00122Y00455* +X00121Y00453* +X00121Y00451* +X0012Y00446* +X00134* +X00131Y00432* +X00117* +X00106Y00377* +X00087* +X00098Y00432* +X00088* +X00091Y00446* +X00101* +X00103Y00453* +Y00453* +X00103Y00454* +X00103Y00454* +X00103Y00455* +X00103Y00456* +X00104Y00458* +X00104Y0046* +X00105Y00462* +X00106Y00464* +X00106Y00465* +X00106Y00465* +X00106Y00465* +X00107Y00466* +X00107Y00467* +X00108Y00468* +X00109Y00469* +X0011Y0047* +X00111Y00471* +X00113Y00472* +X00113Y00472* +X00114Y00472* +X00115Y00473* +X00116Y00473* +X00118Y00474* +X0012Y00474* +X00122Y00474* +X00124Y00474* +X00126* +X00127Y00474* +G37* +G36* +X-00034D02* +X-00033Y00474D01* +X-00031Y00474* +X-00029Y00474* +X-00027Y00473* +X-00023Y00472* +X-00021Y00472* +X-00019Y00471* +X-00016Y0047* +X-00014Y00469* +X-00012Y00468* +X-00011Y00466* +X-0001Y00466* +X-0001Y00466* +X-0001Y00466* +X-00009Y00465* +X-00008Y00464* +X-00008Y00463* +X-00007Y00462* +X-00006Y00461* +X-00005Y00459* +X-00004Y00458* +X-00003Y00456* +X-00002Y00454* +X-00002Y00452* +X-00001Y0045* +X-00001Y00448* +X0Y00445* +X-00019Y00445* +Y00445* +Y00445* +X-00019Y00445* +Y00446* +X-0002Y00447* +X-0002Y00448* +X-00021Y0045* +X-00022Y00452* +X-00023Y00454* +X-00024Y00455* +X-00025Y00455* +X-00025Y00456* +X-00026Y00456* +X-00027Y00457* +X-00029Y00458* +X-00031Y00458* +X-00034Y00459* +X-00037Y00459* +X-00038* +X-0004Y00459* +X-00041Y00458* +X-00043Y00458* +X-00045Y00458* +X-00047Y00457* +X-00049Y00456* +X-00049Y00456* +X-00049Y00455* +X-0005Y00455* +X-0005Y00454* +X-00051Y00453* +X-00052Y00452* +X-00052Y0045* +X-00052Y00449* +Y00448* +Y00448* +X-00052Y00447* +X-00052Y00446* +X-00051Y00445* +X-00051Y00444* +X-0005Y00443* +X-00049Y00442* +X-00049Y00442* +X-00048Y00441* +X-00047Y00441* +X-00047Y0044* +X-00046Y0044* +X-00045Y00439* +X-00044Y00439* +X-00043Y00438* +X-00042Y00437* +X-0004Y00437* +X-00038Y00436* +X-00037Y00435* +X-00035Y00434* +X-00034Y00434* +X-00034Y00434* +X-00033Y00433* +X-00032Y00433* +X-00031Y00432* +X-00029Y00432* +X-00028Y00431* +X-00026Y0043* +X-00022Y00428* +X-00019Y00426* +X-00017Y00425* +X-00016Y00424* +X-00015Y00423* +X-00014Y00423* +X-00013Y00422* +X-00013Y00422* +X-00013Y00422* +X-00012Y00421* +X-00012Y00421* +X-00011Y0042* +X-00011Y00419* +X-0001Y00418* +X-00009Y00416* +X-00008Y00413* +X-00007Y00409* +X-00007Y00407* +X-00007Y00406* +Y00405* +Y00405* +X-00007Y00404* +Y00403* +X-00007Y00402* +X-00007Y00401* +X-00008Y004* +X-00008Y00398* +X-00008Y00396* +X-00009Y00395* +X-0001Y00393* +X-00011Y00391* +X-00012Y00389* +X-00013Y00387* +X-00015Y00386* +X-00017Y00384* +X-00017Y00384* +X-00017Y00383* +X-00018Y00383* +X-00019Y00382* +X-0002Y00382* +X-00021Y00381* +X-00022Y0038* +X-00024Y00379* +X-00026Y00378* +X-00028Y00378* +X-0003Y00377* +X-00033Y00376* +X-00036Y00376* +X-00038Y00375* +X-00042Y00375* +X-00045Y00375* +X-00046* +X-00047Y00375* +X-00048* +X-00049Y00375* +X-00051Y00375* +X-00052Y00375* +X-00055Y00376* +X-00059Y00377* +X-00063Y00378* +X-00066Y00379* +X-00066* +X-00067Y00379* +X-00067Y00379* +X-00068Y0038* +X-00069Y0038* +X-00069Y00381* +X-00071Y00382* +X-00073Y00384* +X-00076Y00386* +X-00078Y00388* +X-00078Y00389* +X-00079Y0039* +Y00391* +X-00079Y00391* +X-0008Y00391* +X-0008Y00392* +X-0008Y00392* +X-0008Y00393* +X-00081Y00394* +X-00081Y00395* +X-00082Y00398* +X-00082Y00401* +X-00083Y00404* +Y00408* +X-00064Y00409* +Y00408* +Y00408* +Y00408* +X-00064Y00407* +X-00063Y00406* +X-00063Y00404* +X-00063Y00402* +X-00062Y004* +X-00062Y00398* +X-00061Y00397* +X-00061Y00396* +X-0006Y00396* +X-0006Y00396* +X-00059Y00395* +X-00059Y00395* +X-00058Y00394* +X-00057Y00394* +X-00056Y00393* +X-00055Y00393* +X-00054Y00392* +X-00052Y00392* +X-0005Y00392* +X-00049Y00392* +X-00047Y00391* +X-00043* +X-00042Y00391* +X-00041* +X-00039Y00392* +X-00037Y00392* +X-00035Y00393* +X-00032Y00394* +X-00031Y00394* +X-00031Y00395* +X-0003Y00395* +X-0003Y00395* +X-00029Y00396* +X-00028Y00397* +X-00028Y00398* +X-00027Y004* +X-00026Y00401* +X-00026Y00403* +Y00403* +Y00404* +X-00026Y00405* +X-00027Y00406* +X-00027Y00407* +X-00028Y00408* +X-00029Y00409* +X-0003Y0041* +X-0003Y00411* +X-0003Y00411* +X-00031Y00411* +X-00032Y00412* +X-00032Y00412* +X-00033Y00413* +X-00034Y00413* +X-00035Y00414* +X-00037Y00414* +X-00038Y00415* +X-0004Y00416* +X-00042Y00417* +X-00044Y00417* +X-00044* +X-00044Y00418* +X-00045Y00418* +X-00045Y00418* +X-00046Y00419* +X-00047Y00419* +X-0005Y0042* +X-00052Y00422* +X-00055Y00423* +X-00058Y00424* +X-00059Y00425* +X-0006Y00426* +X-0006Y00426* +X-00061Y00426* +X-00062Y00427* +X-00063Y00428* +X-00064Y00429* +X-00066Y0043* +X-00067Y00432* +X-00068Y00434* +X-00068Y00434* +X-00069Y00435* +X-00069Y00436* +X-00069Y00437* +X-0007Y00439* +X-0007Y00441* +X-00071Y00444* +X-00071Y00446* +Y00446* +Y00447* +Y00447* +X-00071Y00448* +X-00071Y00449* +X-0007Y0045* +X-0007Y00452* +X-0007Y00453* +X-00069Y00455* +X-00069Y00456* +X-00068Y00458* +X-00067Y0046* +X-00066Y00461* +X-00065Y00463* +X-00064Y00465* +X-00062Y00466* +X-00062Y00466* +X-00062Y00467* +X-00061Y00467* +X-00061Y00468* +X-0006Y00468* +X-00059Y00469* +X-00057Y0047* +X-00056Y0047* +X-00054Y00471* +X-00052Y00472* +X-0005Y00473* +X-00048Y00473* +X-00045Y00474* +X-00043Y00474* +X-0004Y00474* +X-00037Y00474* +X-00035* +X-00034Y00474* +G37* +G36* +X-00482D02* +X-0048Y00474D01* +X-00479Y00474* +X-00477Y00474* +X-00475Y00473* +X-00471Y00472* +X-00468Y00472* +X-00466Y00471* +X-00464Y0047* +X-00462Y00469* +X-0046Y00468* +X-00458Y00466* +X-00458Y00466* +X-00458Y00466* +X-00457Y00466* +X-00457Y00465* +X-00456Y00464* +X-00455Y00463* +X-00454Y00462* +X-00453Y00461* +X-00453Y00459* +X-00452Y00458* +X-00451Y00456* +X-0045Y00454* +X-00449Y00452* +X-00449Y0045* +X-00448Y00448* +X-00448Y00445* +X-00467Y00445* +Y00445* +Y00445* +X-00467Y00445* +Y00446* +X-00467Y00447* +X-00468Y00448* +X-00468Y0045* +X-00469Y00452* +X-0047Y00454* +X-00472Y00455* +X-00472Y00455* +X-00473Y00456* +X-00474Y00456* +X-00475Y00457* +X-00477Y00458* +X-00479Y00458* +X-00482Y00459* +X-00485Y00459* +X-00486* +X-00487Y00459* +X-00489Y00458* +X-00491Y00458* +X-00493Y00458* +X-00495Y00457* +X-00496Y00456* +X-00496Y00456* +X-00497Y00455* +X-00497Y00455* +X-00498Y00454* +X-00499Y00453* +X-00499Y00452* +X-005Y0045* +X-005Y00449* +Y00448* +Y00448* +X-005Y00447* +X-00499Y00446* +X-00499Y00445* +X-00498Y00444* +X-00498Y00443* +X-00497Y00442* +X-00496Y00442* +X-00496Y00441* +X-00495Y00441* +X-00494Y0044* +X-00494Y0044* +X-00493Y00439* +X-00492Y00439* +X-0049Y00438* +X-00489Y00437* +X-00488Y00437* +X-00486Y00436* +X-00484Y00435* +X-00482Y00434* +X-00482Y00434* +X-00482Y00434* +X-00481Y00433* +X-0048Y00433* +X-00478Y00432* +X-00477Y00432* +X-00475Y00431* +X-00473Y0043* +X-0047Y00428* +X-00466Y00426* +X-00465Y00425* +X-00463Y00424* +X-00462Y00423* +X-00461Y00423* +X-00461Y00422* +X-00461Y00422* +X-00461Y00422* +X-0046Y00421* +X-0046Y00421* +X-00459Y0042* +X-00458Y00419* +X-00458Y00418* +X-00456Y00416* +X-00455Y00413* +X-00455Y00409* +X-00454Y00407* +X-00454Y00406* +Y00405* +Y00405* +X-00454Y00404* +Y00403* +X-00455Y00402* +X-00455Y00401* +X-00455Y004* +X-00456Y00398* +X-00456Y00396* +X-00457Y00395* +X-00458Y00393* +X-00459Y00391* +X-0046Y00389* +X-00461Y00387* +X-00463Y00386* +X-00464Y00384* +X-00465Y00384* +X-00465Y00383* +X-00465Y00383* +X-00466Y00382* +X-00467Y00382* +X-00469Y00381* +X-0047Y0038* +X-00472Y00379* +X-00474Y00378* +X-00476Y00378* +X-00478Y00377* +X-00481Y00376* +X-00483Y00376* +X-00486Y00375* +X-00489Y00375* +X-00492Y00375* +X-00494* +X-00495Y00375* +X-00496* +X-00497Y00375* +X-00498Y00375* +X-005Y00375* +X-00503Y00376* +X-00507Y00377* +X-0051Y00378* +X-00514Y00379* +X-00514* +X-00514Y00379* +X-00515Y00379* +X-00515Y0038* +X-00516Y0038* +X-00517Y00381* +X-00519Y00382* +X-00521Y00384* +X-00523Y00386* +X-00525Y00388* +X-00526Y00389* +X-00527Y0039* +Y00391* +X-00527Y00391* +X-00527Y00391* +X-00527Y00392* +X-00528Y00392* +X-00528Y00393* +X-00528Y00394* +X-00529Y00395* +X-00529Y00398* +X-0053Y00401* +X-0053Y00404* +Y00408* +X-00511Y00409* +Y00408* +Y00408* +Y00408* +X-00511Y00407* +X-00511Y00406* +X-00511Y00404* +X-0051Y00402* +X-0051Y004* +X-00509Y00398* +X-00509Y00397* +X-00508Y00396* +X-00508Y00396* +X-00507Y00396* +X-00507Y00395* +X-00506Y00395* +X-00506Y00394* +X-00505Y00394* +X-00504Y00393* +X-00502Y00393* +X-00501Y00392* +X-005Y00392* +X-00498Y00392* +X-00496Y00392* +X-00494Y00391* +X-00491* +X-0049Y00391* +X-00489* +X-00487Y00392* +X-00485Y00392* +X-00482Y00393* +X-0048Y00394* +X-00479Y00394* +X-00478Y00395* +X-00478Y00395* +X-00477Y00395* +X-00477Y00396* +X-00476Y00397* +X-00475Y00398* +X-00474Y004* +X-00474Y00401* +X-00474Y00403* +Y00403* +Y00404* +X-00474Y00405* +X-00474Y00406* +X-00475Y00407* +X-00475Y00408* +X-00476Y00409* +X-00477Y0041* +X-00478Y00411* +X-00478Y00411* +X-00479Y00411* +X-00479Y00412* +X-0048Y00412* +X-00481Y00413* +X-00482Y00413* +X-00483Y00414* +X-00484Y00414* +X-00486Y00415* +X-00487Y00416* +X-00489Y00417* +X-00491Y00417* +X-00491* +X-00492Y00418* +X-00492Y00418* +X-00493Y00418* +X-00494Y00419* +X-00495Y00419* +X-00497Y0042* +X-005Y00422* +X-00503Y00423* +X-00505Y00424* +X-00507Y00425* +X-00508Y00426* +X-00508Y00426* +X-00508Y00426* +X-00509Y00427* +X-0051Y00428* +X-00512Y00429* +X-00513Y0043* +X-00514Y00432* +X-00516Y00434* +X-00516Y00434* +X-00516Y00435* +X-00517Y00436* +X-00517Y00437* +X-00518Y00439* +X-00518Y00441* +X-00518Y00444* +X-00519Y00446* +Y00446* +Y00447* +Y00447* +X-00518Y00448* +X-00518Y00449* +X-00518Y0045* +X-00518Y00452* +X-00517Y00453* +X-00517Y00455* +X-00516Y00456* +X-00516Y00458* +X-00515Y0046* +X-00514Y00461* +X-00513Y00463* +X-00511Y00465* +X-0051Y00466* +X-0051Y00466* +X-00509Y00467* +X-00509Y00467* +X-00508Y00468* +X-00507Y00468* +X-00506Y00469* +X-00505Y0047* +X-00503Y0047* +X-00502Y00471* +X-005Y00472* +X-00498Y00473* +X-00495Y00473* +X-00493Y00474* +X-0049Y00474* +X-00487Y00474* +X-00484Y00474* +X-00483* +X-00482Y00474* +G37* +G36* +X0044Y00377D02* +X00421D01* +X00425Y00395* +X00443* +X0044Y00377* +G37* +G36* +X00235Y00393D02* +X00284D01* +X00281Y00377* +X00212* +X00232Y00473* +X00252* +X00235Y00393* +G37* +G36* +X-00207Y00422D02* +X-00182Y00446D01* +X-00158* +X-00186Y00421* +X-00171Y00377* +X-0019* +X-00199Y00409* +X-00212Y00397* +X-00217Y00377* +X-00235* +X-00215Y00473* +X-00196* +X-00207Y00422* +G37* +%LNunisolder52_front-2*% +%LPC*% +G36* +X01408Y-01093D02* +X01408D01* +X01407Y-01093* +X01407Y-01093* +X01406Y-01093* +X01405Y-01094* +X01404Y-01094* +X01403Y-01094* +X01403Y-01095* +X01402Y-01095* +X01401Y-01096* +X014Y-01097* +X014Y-01098* +X01399Y-01099* +Y-01099* +X01399Y-01099* +X01399Y-011* +X01398Y-011* +X01398Y-01101* +X01398Y-01101* +X01398Y-01102* +X01397Y-01103* +X01397Y-01104* +X01397Y-01105* +X01396Y-01107* +X01396Y-0111* +X01395Y-01111* +X01395Y-01112* +Y-01112* +Y-01113* +Y-01113* +X01395Y-01113* +X01396Y-01114* +X01396Y-01115* +X01396Y-01116* +X01396Y-01118* +X01397Y-01119* +X01398Y-0112* +X01398Y-0112* +X01398Y-01121* +X01399Y-01121* +X014Y-01121* +X01401Y-01122* +X01402Y-01122* +X01403Y-01123* +X01404Y-01123* +X01405* +X01405Y-01123* +X01406Y-01123* +X01407Y-01122* +X01408Y-01122* +X01409Y-01121* +X01411Y-01121* +X01411Y-0112* +X01411Y-0112* +X01412Y-0112* +X01412Y-01119* +X01413Y-01118* +X01414Y-01117* +X01415Y-01115* +X01415Y-01113* +Y-01113* +X01415Y-01113* +X01416Y-01113* +X01416Y-01113* +X01416Y-01112* +X01416Y-0111* +X01417Y-01109* +X01417Y-01107* +X01417Y-01106* +X01417Y-01104* +Y-01104* +Y-01104* +Y-01104* +Y-01103* +X01417Y-01102* +X01417Y-01101* +X01417Y-011* +X01416Y-01099* +X01415Y-01097* +X01414Y-01096* +X01414Y-01096* +X01414Y-01095* +X01413Y-01095* +X01413Y-01094* +X01412Y-01094* +X01411Y-01093* +X01409Y-01093* +X01408Y-01093* +G37* +G36* +X-004Y00434D02* +X-004D01* +X-00401Y00434* +X-00403Y00434* +X-00404Y00433* +X-00406Y00433* +X-00408Y00432* +X-00409Y00431* +X-0041Y0043* +X-0041Y0043* +X-00411Y00429* +X-00412Y00428* +X-00413Y00426* +X-00414Y00424* +X-00415Y00422* +X-00416Y00419* +Y00419* +X-00416Y00419* +X-00417Y00418* +X-00417Y00418* +X-00417Y00417* +X-00417Y00415* +X-00418Y00413* +X-00418Y00411* +X-00419Y00408* +X-00419Y00406* +Y00406* +Y00406* +Y00405* +X-00419Y00405* +X-00418Y00403* +X-00418Y00402* +X-00418Y00399* +X-00417Y00397* +X-00416Y00395* +X-00415Y00393* +X-00415Y00393* +X-00414Y00393* +X-00413Y00392* +X-00412Y00391* +X-00411Y0039* +X-00409Y0039* +X-00407Y00389* +X-00405Y00389* +X-00405* +X-00404Y00389* +X-00402Y00389* +X-00401Y0039* +X-004Y0039* +X-00398Y00391* +X-00396Y00392* +X-00396Y00392* +X-00396Y00393* +X-00395Y00394* +X-00394Y00395* +X-00393Y00397* +X-00391Y00398* +X-0039Y00401* +X-00389Y00404* +Y00404* +X-00389Y00404* +X-00389Y00404* +X-00389Y00405* +X-00388Y00406* +X-00388Y00406* +X-00388Y00408* +X-00387Y00411* +X-00387Y00413* +X-00386Y00416* +X-00386Y00418* +Y00418* +Y00419* +Y00419* +Y00419* +X-00386Y00421* +X-00387Y00423* +X-00387Y00425* +X-00388Y00427* +X-00389Y00428* +X-0039Y0043* +X-0039Y0043* +X-00391Y00431* +X-00391Y00432* +X-00393Y00432* +X-00394Y00433* +X-00396Y00434* +X-00397Y00434* +X-004Y00434* +G37* +G36* +X00378Y00434D02* +X00378D01* +X00377Y00434* +X00376Y00434* +X00375Y00434* +X00373Y00433* +X00372Y00432* +X00371Y00432* +X0037Y00431* +X00369Y0043* +X00368Y00429* +X00367Y00428* +X00366Y00426* +X00365Y00425* +Y00425* +X00364Y00424* +X00364Y00424* +X00364Y00423* +X00363Y00422* +X00363Y00421* +X00362Y0042* +X00362Y00419* +X00361Y00417* +X00361Y00416* +X0036Y00412* +X00359Y00409* +X00359Y00407* +X00359Y00405* +Y00405* +Y00404* +Y00404* +X00359Y00404* +X00359Y00402* +X0036Y00401* +X0036Y00399* +X00361Y00397* +X00362Y00395* +X00363Y00393* +X00363Y00393* +X00364Y00392* +X00364Y00392* +X00366Y00391* +X00367Y0039* +X00369Y0039* +X0037Y00389* +X00372Y00389* +X00373* +X00374Y00389* +X00376Y00389* +X00377Y0039* +X00379Y0039* +X0038Y00391* +X00382Y00392* +X00382Y00393* +X00383Y00393* +X00384Y00394* +X00385Y00395* +X00386Y00397* +X00387Y00398* +X00388Y00401* +X00389Y00403* +Y00403* +X00389Y00404* +X00389Y00404* +X0039Y00404* +X0039Y00406* +X00391Y00408* +X00391Y0041* +X00392Y00412* +X00392Y00415* +X00392Y00417* +Y00417* +Y00417* +Y00418* +Y00418* +X00392Y0042* +X00391Y00421* +X00391Y00423* +X0039Y00425* +X00389Y00427* +X00388Y00429* +X00388Y0043* +X00387Y0043* +X00386Y00431* +X00385Y00432* +X00384Y00433* +X00382Y00433* +X0038Y00434* +X00378Y00434* +G37* +G36* +X00045Y00434D02* +X00044D01* +X00043Y00434* +X00042Y00433* +X0004Y00433* +X00038Y00432* +X00036Y00431* +X00034Y0043* +X00034Y0043* +X00034Y00429* +X00033Y00428* +X00032Y00427* +X00031Y00426* +X00029Y00424* +X00028Y00421* +X00027Y00419* +Y00419* +X00027Y00419* +X00027Y00418* +X00027Y00418* +X00026Y00416* +X00026Y00415* +X00025Y00412* +X00025Y0041* +X00025Y00408* +X00025Y00406* +Y00405* +Y00405* +Y00405* +X00025Y00404* +X00025Y00403* +X00025Y00401* +X00026Y00399* +X00026Y00397* +X00027Y00395* +X00029Y00394* +X00029Y00394* +X00029Y00393* +X0003Y00392* +X00031Y00392* +X00033Y00391* +X00035Y0039* +X00037Y0039* +X00039Y00389* +X0004* +X0004Y00389* +X00042Y0039* +X00043Y0039* +X00045Y00391* +X00048Y00392* +X00049Y00393* +X0005Y00394* +X00051Y00395* +X00052Y00396* +X00052Y00396* +X00052Y00396* +X00053Y00397* +X00053Y00398* +X00054Y00399* +X00054Y004* +X00055Y00401* +X00056Y00402* +X00056Y00404* +X00057Y00406* +X00058Y00408* +X00058Y0041* +X00059Y00412* +X00059Y00414* +X00059Y00416* +X00059Y00419* +Y00419* +Y00419* +Y0042* +Y0042* +X00059Y00421* +X00059Y00423* +X00058Y00425* +X00058Y00426* +X00057Y00428* +X00055Y0043* +X00055Y0043* +X00055Y0043* +X00054Y00431* +X00053Y00432* +X00051Y00433* +X00049Y00433* +X00048Y00434* +X00045Y00434* +G37* +G36* +X01462Y-01093D02* +X01462D01* +X01462Y-01093* +X01461Y-01093* +X0146Y-01093* +X01459Y-01093* +X01458Y-01094* +X01456Y-01095* +X01455Y-01096* +X01455Y-01096* +X01455Y-01096* +X01454Y-01097* +X01454Y-01098* +X01453Y-01099* +X01452Y-011* +X01452Y-01102* +X01451Y-01104* +X01471* +Y-01104* +Y-01104* +Y-01103* +Y-01103* +Y-01103* +Y-01103* +Y-01102* +Y-01102* +X01471Y-01101* +X01471Y-011* +X0147Y-01099* +X0147Y-01097* +X01469Y-01096* +X01468Y-01095* +X01468Y-01095* +X01468Y-01095* +X01468Y-01094* +X01467Y-01094* +X01466Y-01093* +X01465Y-01093* +X01464Y-01093* +X01462Y-01093* +G37* +G36* +X0133Y-01093D02* +X0133D01* +X01329Y-01093* +X01328Y-01093* +X01327Y-01094* +X01326Y-01094* +X01324Y-01095* +X01323Y-01096* +X01323Y-01096* +X01323Y-01096* +X01322Y-01097* +X01321Y-01097* +X0132Y-01098* +X0132Y-011* +X01319Y-01101* +X01318Y-01103* +Y-01103* +X01318Y-01103* +X01318Y-01103* +X01318Y-01104* +X01318Y-01105* +X01317Y-01106* +X01317Y-01107* +X01317Y-01109* +X01317Y-0111* +X01316Y-01112* +Y-01112* +Y-01112* +Y-01112* +X01317Y-01113* +X01317Y-01114* +X01317Y-01115* +X01317Y-01116* +X01318Y-01117* +X01318Y-01119* +X01319Y-0112* +X01319Y-0112* +X0132Y-0112* +X0132Y-01121* +X01321Y-01121* +X01322Y-01122* +X01323Y-01122* +X01324Y-01122* +X01326Y-01123* +X01326* +X01327Y-01123* +X01328Y-01122* +X01329Y-01122* +X0133Y-01122* +X01332Y-01121* +X01333Y-0112* +X01333Y-0112* +X01334Y-01119* +X01335Y-01118* +X01335Y-01118* +X01335Y-01118* +X01335Y-01118* +X01335Y-01117* +X01336Y-01116* +X01336Y-01116* +X01337Y-01115* +X01337Y-01114* +X01338Y-01113* +X01338Y-01112* +X01338Y-0111* +X01339Y-01109* +X01339Y-01108* +X01339Y-01106* +X0134Y-01105* +X0134Y-01103* +Y-01103* +Y-01103* +Y-01102* +Y-01102* +X01339Y-01101* +X01339Y-011* +X01339Y-01099* +X01339Y-01098* +X01338Y-01097* +X01337Y-01096* +X01337Y-01096* +X01336Y-01095* +X01336Y-01095* +X01335Y-01094* +X01334Y-01094* +X01333Y-01093* +X01332Y-01093* +X0133Y-01093* +G37* +G36* +X-00317Y00409D02* +X-00318D01* +X-00318Y00409* +X-00318* +X-00319Y00409* +X-00319Y00409* +X-0032Y00409* +X-00322Y00408* +X-00322* +X-00323Y00408* +X-00323* +X-00324Y00408* +X-00325Y00408* +X-00327Y00408* +X-0033Y00407* +X-00333Y00406* +X-00336Y00405* +X-00337Y00405* +X-00338Y00404* +X-0034Y00404* +X-0034Y00403* +X-00341Y00403* +X-00341Y00403* +X-00341Y00402* +X-00342Y00402* +X-00342Y00401* +X-00343Y004* +X-00343Y00398* +X-00343Y00397* +Y00397* +Y00396* +X-00343Y00396* +X-00343Y00395* +X-00343Y00394* +X-00342Y00393* +X-00342Y00392* +X-00341Y00391* +X-00341Y00391* +X-00341Y00391* +X-0034Y0039* +X-0034Y0039* +X-00339Y0039* +X-00338Y00389* +X-00336Y00389* +X-00335Y00389* +X-00334* +X-00333Y00389* +X-00332Y00389* +X-00331Y00389* +X-0033Y0039* +X-00328Y0039* +X-00327Y00391* +X-00327Y00391* +X-00326Y00391* +X-00326Y00392* +X-00325Y00392* +X-00324Y00393* +X-00323Y00394* +X-00322Y00395* +X-00321Y00396* +X-00321Y00396* +X-00321Y00397* +X-00321Y00398* +X-0032Y00399* +X-0032Y004* +X-00319Y00402* +X-00319Y00404* +X-00318Y00407* +X-00317Y00409* +G37* +%LNunisolder52_front-3*% +%LPD*% +G54D37* +X00665Y-00679D02* +Y-00619D01* +X00405Y-00679D02* +Y-00619D01* +X00455Y-00519D02* +X00615D01* +X00455Y-00779D02* +X00615D01* +X-00405Y-00679D02* +Y-00619D01* +X-00665Y-00679D02* +Y-00619D01* +X-00615Y-00519D02* +X-00455D01* +X-00615Y-00779D02* +X-00455D01* +X0013Y-00679D02* +Y-00619D01* +X-0013Y-00679D02* +Y-00619D01* +X-0008Y-00519D02* +X0008D01* +X-0008Y-00779D02* +X0008D01* +X01098Y-01147D02* +X0153D01* +X00236Y-01555D02* +Y-0148D01* +X00161Y-01555D02* +X00236D01* +X-00236D02* +X-00161D01* +X-00236D02* +Y-0148D01* +X-01574Y-01299D02* +X-01499D01* +X-01574D02* +Y-01224D01* +X01574Y-01299D02* +Y-01224D01* +X01499Y-01299D02* +X01574D01* +X01499Y01D02* +X01574D01* +Y00925D02* +Y01D01* +X-01574D02* +X-01499D01* +X-01574Y00925D02* +Y01D01* +X00236Y-01452D02* +Y-01377D01* +X00314Y-01299* +X00389* +X-00236Y-01452D02* +Y-01377D01* +X-00314Y-01299D02* +X-00236Y-01377D01* +X-00389Y-01299D02* +X-00314D01* +G54D45* +X-01009Y-00887D02* +D01* +X-01019Y-009* +X-01027Y-00914* +X-01035Y-00929* +X-01041Y-00944* +X-01046Y-0096* +X-01051Y-00976* +X-01054Y-00992* +X-01056Y-01008* +X-01057Y-01025* +X-01056Y-01041* +X-01055Y-01058* +X-01052Y-01074* +X-01049Y-0109* +X-01044Y-01106* +X-01038Y-01121* +X-01031Y-01136* +X-01023Y-01151* +X-01014Y-01164* +X-01004Y-01178* +X-00993Y-0119* +X-00982Y-01202* +X-00969Y-01213* +X-00956Y-01222* +X-00942Y-01231* +X-00928Y-01239* +X-00913Y-01246* +X-00897Y-01252* +X-00882Y-01257* +X-00866Y-01261* +X-00849Y-01263* +X-00833Y-01265* +X-00816Y-01265* +X-008Y-01264* +X-00784Y-01262* +X-00767Y-01259* +X-00751Y-01255* +X-00736Y-0125* +X-00721Y-01243* +X-00706Y-01236* +X-00692Y-01227* +X-00678Y-01218* +X-00666Y-01207* +X-00654Y-01196* +X-00642Y-01184* +X-00632Y-01171* +X-00622Y-01158* +X-00614Y-01144* +X-00606Y-01129* +X-00592Y-01089D02* +D01* +X-00589Y-01073* +X-00586Y-01057* +X-00585Y-01041* +X-00584Y-01024* +X-00585Y-01008* +X-00587Y-00991* +X-0059Y-00975* +X-00595Y-00959* +X-006Y-00944* +X-00606Y-00928* +X-00614Y-00914* +X-00622Y-009* +X-00632Y-00886* +X-00642Y-00873* +X-00653Y-00861* +X-00665Y-0085* +X-00678Y-0084* +X-00692Y-0083* +X-00706Y-00822* +X-00721Y-00814* +X-00736Y-00808* +X-00751Y-00802* +X-00759Y-008* +X-0082Y00619D02* +Y0062D01* +X01524Y-00375D02* +Y00016D01* +X01497Y-00375D02* +X01524D01* +X01188Y-00376D02* +X01203D01* +X01115Y-00294D02* +Y00016D01* +X01524* +G54D70* +X01387Y00425D02* +D01* +X01387Y00425* +X01387Y00425* +X01387Y00426* +X01387Y00426* +X01387Y00426* +X01387Y00427* +X01387Y00427* +X01387Y00427* +X01386Y00427* +X01386Y00428* +X01386Y00428* +X01386Y00428* +X01386Y00428* +X01385Y00429* +X01385Y00429* +X01385Y00429* +X01384Y00429* +X01384Y00429* +X01384Y00429* +X01383Y00429* +X01383Y00429* +X01383Y00429* +X01382* +X01382Y00429* +X01382Y00429* +X01381Y00429* +X01381Y00429* +X01381Y00429* +X0138Y00429* +X0138Y00429* +X0138Y00429* +X01379Y00428* +X01379Y00428* +X01379Y00428* +X01379Y00428* +X01379Y00427* +X01378Y00427* +X01378Y00427* +X01378Y00427* +X01378Y00426* +X01378Y00426* +X01378Y00426* +X01378Y00425* +X01378Y00425* +X01378Y00425* +X01378Y00424* +X01378Y00424* +X01378Y00423* +X01378Y00423* +X01378Y00423* +X01378Y00422* +X01378Y00422* +X01378Y00422* +X01379Y00422* +X01379Y00421* +X01379Y00421* +X01379Y00421* +X01379Y00421* +X0138Y0042* +X0138Y0042* +X0138Y0042* +X01381Y0042* +X01381Y0042* +X01381Y0042* +X01382Y0042* +X01382Y0042* +X01382Y0042* +X01383* +X01383Y0042* +X01383Y0042* +X01384Y0042* +X01384Y0042* +X01384Y0042* +X01385Y0042* +X01385Y0042* +X01385Y0042* +X01386Y00421* +X01386Y00421* +X01386Y00421* +X01386Y00421* +X01386Y00422* +X01387Y00422* +X01387Y00422* +X01387Y00422* +X01387Y00423* +X01387Y00423* +X01387Y00423* +X01387Y00424* +X01387Y00424* +X01387Y00425* +X00412Y-00804D02* +D01* +X00411Y-00803* +X00411Y-00803* +X00411Y-00802* +X00411Y-00802* +X00411Y-00802* +X00411Y-00801* +X00411Y-00801* +X00411Y-00801* +X00411Y-00801* +X0041Y-008* +X0041Y-008* +X0041Y-008* +X0041Y-008* +X00409Y-00799* +X00409Y-00799* +X00409Y-00799* +X00408Y-00799* +X00408Y-00799* +X00408Y-00799* +X00407Y-00799* +X00407Y-00799* +X00407Y-00799* +X00406* +X00406Y-00799* +X00406Y-00799* +X00405Y-00799* +X00405Y-00799* +X00405Y-00799* +X00404Y-00799* +X00404Y-00799* +X00404Y-00799* +X00404Y-008* +X00403Y-008* +X00403Y-008* +X00403Y-008* +X00403Y-00801* +X00402Y-00801* +X00402Y-00801* +X00402Y-00801* +X00402Y-00802* +X00402Y-00802* +X00402Y-00802* +X00402Y-00803* +X00402Y-00803* +X00402Y-00804* +X00402Y-00804* +X00402Y-00804* +X00402Y-00805* +X00402Y-00805* +X00402Y-00805* +X00402Y-00806* +X00402Y-00806* +X00402Y-00806* +X00403Y-00806* +X00403Y-00807* +X00403Y-00807* +X00403Y-00807* +X00404Y-00807* +X00404Y-00808* +X00404Y-00808* +X00404Y-00808* +X00405Y-00808* +X00405Y-00808* +X00405Y-00808* +X00406Y-00808* +X00406Y-00808* +X00406Y-00808* +X00407* +X00407Y-00808* +X00407Y-00808* +X00408Y-00808* +X00408Y-00808* +X00408Y-00808* +X00409Y-00808* +X00409Y-00808* +X00409Y-00808* +X0041Y-00807* +X0041Y-00807* +X0041Y-00807* +X0041Y-00807* +X00411Y-00806* +X00411Y-00806* +X00411Y-00806* +X00411Y-00806* +X00411Y-00805* +X00411Y-00805* +X00411Y-00805* +X00411Y-00804* +X00411Y-00804* +X00412Y-00804* +X-01216Y00104D02* +D01* +X-01216Y00104* +X-01216Y00105* +X-01216Y00105* +X-01217Y00105* +X-01217Y00106* +X-01217Y00106* +X-01217Y00106* +X-01217Y00107* +X-01217Y00107* +X-01217Y00107* +X-01218Y00107* +X-01218Y00108* +X-01218Y00108* +X-01218Y00108* +X-01219Y00108* +X-01219Y00108* +X-01219Y00109* +X-0122Y00109* +X-0122Y00109* +X-0122Y00109* +X-01221Y00109* +X-01221Y00109* +X-01221* +X-01222Y00109* +X-01222Y00109* +X-01222Y00109* +X-01223Y00109* +X-01223Y00109* +X-01223Y00108* +X-01224Y00108* +X-01224Y00108* +X-01224Y00108* +X-01225Y00108* +X-01225Y00107* +X-01225Y00107* +X-01225Y00107* +X-01225Y00107* +X-01226Y00106* +X-01226Y00106* +X-01226Y00106* +X-01226Y00105* +X-01226Y00105* +X-01226Y00105* +X-01226Y00104* +X-01226Y00104* +X-01226Y00104* +X-01226Y00103* +X-01226Y00103* +X-01226Y00103* +X-01226Y00102* +X-01226Y00102* +X-01226Y00102* +X-01225Y00101* +X-01225Y00101* +X-01225Y00101* +X-01225Y00101* +X-01225Y001* +X-01224Y001* +X-01224Y001* +X-01224Y001* +X-01223Y001* +X-01223Y00099* +X-01223Y00099* +X-01222Y00099* +X-01222Y00099* +X-01222Y00099* +X-01221Y00099* +X-01221* +X-01221Y00099* +X-0122Y00099* +X-0122Y00099* +X-0122Y00099* +X-01219Y00099* +X-01219Y001* +X-01219Y001* +X-01218Y001* +X-01218Y001* +X-01218Y001* +X-01218Y00101* +X-01217Y00101* +X-01217Y00101* +X-01217Y00101* +X-01217Y00102* +X-01217Y00102* +X-01217Y00102* +X-01217Y00103* +X-01216Y00103* +X-01216Y00103* +X-01216Y00104* +X-01216Y00104* +X00013Y-0127D02* +D01* +X00013Y-0127* +X00013Y-01269* +X00013Y-01269* +X00013Y-01269* +X00013Y-01268* +X00013Y-01268* +X00013Y-01268* +X00013Y-01267* +X00013Y-01267* +X00012Y-01267* +X00012Y-01267* +X00012Y-01266* +X00012Y-01266* +X00011Y-01266* +X00011Y-01266* +X00011Y-01266* +X0001Y-01265* +X0001Y-01265* +X0001Y-01265* +X00009Y-01265* +X00009Y-01265* +X00009Y-01265* +X00008* +X00008Y-01265* +X00008Y-01265* +X00007Y-01265* +X00007Y-01265* +X00007Y-01265* +X00006Y-01266* +X00006Y-01266* +X00006Y-01266* +X00006Y-01266* +X00005Y-01266* +X00005Y-01267* +X00005Y-01267* +X00005Y-01267* +X00004Y-01267* +X00004Y-01268* +X00004Y-01268* +X00004Y-01268* +X00004Y-01269* +X00004Y-01269* +X00004Y-01269* +X00004Y-0127* +X00004Y-0127* +X00004Y-0127* +X00004Y-01271* +X00004Y-01271* +X00004Y-01271* +X00004Y-01272* +X00004Y-01272* +X00004Y-01272* +X00004Y-01273* +X00005Y-01273* +X00005Y-01273* +X00005Y-01273* +X00005Y-01274* +X00006Y-01274* +X00006Y-01274* +X00006Y-01274* +X00006Y-01274* +X00007Y-01275* +X00007Y-01275* +X00007Y-01275* +X00008Y-01275* +X00008Y-01275* +X00008Y-01275* +X00009* +X00009Y-01275* +X00009Y-01275* +X0001Y-01275* +X0001Y-01275* +X0001Y-01275* +X00011Y-01274* +X00011Y-01274* +X00011Y-01274* +X00012Y-01274* +X00012Y-01274* +X00012Y-01273* +X00012Y-01273* +X00013Y-01273* +X00013Y-01273* +X00013Y-01272* +X00013Y-01272* +X00013Y-01272* +X00013Y-01271* +X00013Y-01271* +X00013Y-01271* +X00013Y-0127* +X00013Y-0127* +X-00852Y0024D02* +D01* +X-00852Y0024* +X-00852Y00241* +X-00852Y00241* +X-00852Y00241* +X-00852Y00242* +X-00853Y00242* +X-00853Y00242* +X-00853Y00243* +X-00853Y00243* +X-00853Y00243* +X-00854Y00243* +X-00854Y00244* +X-00854Y00244* +X-00854Y00244* +X-00855Y00244* +X-00855Y00244* +X-00855Y00245* +X-00856Y00245* +X-00856Y00245* +X-00856Y00245* +X-00857Y00245* +X-00857Y00245* +X-00857* +X-00858Y00245* +X-00858Y00245* +X-00858Y00245* +X-00859Y00245* +X-00859Y00245* +X-00859Y00244* +X-0086Y00244* +X-0086Y00244* +X-0086Y00244* +X-0086Y00244* +X-00861Y00243* +X-00861Y00243* +X-00861Y00243* +X-00861Y00243* +X-00861Y00242* +X-00862Y00242* +X-00862Y00242* +X-00862Y00241* +X-00862Y00241* +X-00862Y00241* +X-00862Y0024* +X-00862Y0024* +X-00862Y0024* +X-00862Y00239* +X-00862Y00239* +X-00862Y00239* +X-00862Y00238* +X-00862Y00238* +X-00861Y00238* +X-00861Y00237* +X-00861Y00237* +X-00861Y00237* +X-00861Y00237* +X-0086Y00236* +X-0086Y00236* +X-0086Y00236* +X-0086Y00236* +X-00859Y00236* +X-00859Y00235* +X-00859Y00235* +X-00858Y00235* +X-00858Y00235* +X-00858Y00235* +X-00857Y00235* +X-00857* +X-00857Y00235* +X-00856Y00235* +X-00856Y00235* +X-00856Y00235* +X-00855Y00235* +X-00855Y00236* +X-00855Y00236* +X-00854Y00236* +X-00854Y00236* +X-00854Y00236* +X-00854Y00237* +X-00853Y00237* +X-00853Y00237* +X-00853Y00237* +X-00853Y00238* +X-00853Y00238* +X-00852Y00238* +X-00852Y00239* +X-00852Y00239* +X-00852Y00239* +X-00852Y0024* +X-00852Y0024* +X01081Y00429D02* +D01* +X01081Y0043* +X01081Y0043* +X01081Y0043* +X01081Y00431* +X01081Y00431* +X01081Y00431* +X01081Y00432* +X01081Y00432* +X0108Y00432* +X0108Y00433* +X0108Y00433* +X0108Y00433* +X0108Y00433* +X01079Y00433* +X01079Y00434* +X01079Y00434* +X01078Y00434* +X01078Y00434* +X01078Y00434* +X01077Y00434* +X01077Y00434* +X01077Y00434* +X01076* +X01076Y00434* +X01076Y00434* +X01075Y00434* +X01075Y00434* +X01075Y00434* +X01074Y00434* +X01074Y00434* +X01074Y00433* +X01073Y00433* +X01073Y00433* +X01073Y00433* +X01073Y00433* +X01073Y00432* +X01072Y00432* +X01072Y00432* +X01072Y00431* +X01072Y00431* +X01072Y00431* +X01072Y0043* +X01072Y0043* +X01072Y0043* +X01072Y00429* +X01072Y00429* +X01072Y00429* +X01072Y00428* +X01072Y00428* +X01072Y00428* +X01072Y00427* +X01072Y00427* +X01072Y00427* +X01073Y00427* +X01073Y00426* +X01073Y00426* +X01073Y00426* +X01073Y00426* +X01074Y00425* +X01074Y00425* +X01074Y00425* +X01075Y00425* +X01075Y00425* +X01075Y00425* +X01076Y00425* +X01076Y00425* +X01076Y00425* +X01077* +X01077Y00425* +X01077Y00425* +X01078Y00425* +X01078Y00425* +X01078Y00425* +X01079Y00425* +X01079Y00425* +X01079Y00425* +X0108Y00426* +X0108Y00426* +X0108Y00426* +X0108Y00426* +X0108Y00427* +X01081Y00427* +X01081Y00427* +X01081Y00427* +X01081Y00428* +X01081Y00428* +X01081Y00428* +X01081Y00429* +X01081Y00429* +X01081Y00429* +X00181Y00316D02* +D01* +X0018Y00316* +X0018Y00316* +X0018Y00317* +X0018Y00317* +X0018Y00317* +X0018Y00318* +X0018Y00318* +X0018Y00318* +X0018Y00318* +X00179Y00319* +X00179Y00319* +X00179Y00319* +X00179Y00319* +X00178Y0032* +X00178Y0032* +X00178Y0032* +X00177Y0032* +X00177Y0032* +X00177Y0032* +X00176Y0032* +X00176Y0032* +X00176Y0032* +X00175* +X00175Y0032* +X00175Y0032* +X00174Y0032* +X00174Y0032* +X00174Y0032* +X00173Y0032* +X00173Y0032* +X00173Y0032* +X00173Y00319* +X00172Y00319* +X00172Y00319* +X00172Y00319* +X00172Y00318* +X00171Y00318* +X00171Y00318* +X00171Y00318* +X00171Y00317* +X00171Y00317* +X00171Y00317* +X00171Y00316* +X00171Y00316* +X00171Y00316* +X00171Y00315* +X00171Y00315* +X00171Y00314* +X00171Y00314* +X00171Y00314* +X00171Y00313* +X00171Y00313* +X00171Y00313* +X00172Y00313* +X00172Y00312* +X00172Y00312* +X00172Y00312* +X00173Y00312* +X00173Y00311* +X00173Y00311* +X00173Y00311* +X00174Y00311* +X00174Y00311* +X00174Y00311* +X00175Y00311* +X00175Y00311* +X00175Y00311* +X00176* +X00176Y00311* +X00176Y00311* +X00177Y00311* +X00177Y00311* +X00177Y00311* +X00178Y00311* +X00178Y00311* +X00178Y00311* +X00179Y00312* +X00179Y00312* +X00179Y00312* +X00179Y00312* +X0018Y00313* +X0018Y00313* +X0018Y00313* +X0018Y00313* +X0018Y00314* +X0018Y00314* +X0018Y00314* +X0018Y00315* +X0018Y00315* +X00181Y00316* +X00132Y-00477D02* +D01* +X00132Y-00476* +X00132Y-00476* +X00132Y-00475* +X00132Y-00475* +X00132Y-00475* +X00132Y-00474* +X00132Y-00474* +X00132Y-00474* +X00131Y-00474* +X00131Y-00473* +X00131Y-00473* +X00131Y-00473* +X0013Y-00473* +X0013Y-00472* +X0013Y-00472* +X0013Y-00472* +X00129Y-00472* +X00129Y-00472* +X00129Y-00472* +X00128Y-00472* +X00128Y-00472* +X00128Y-00472* +X00127* +X00127Y-00472* +X00127Y-00472* +X00126Y-00472* +X00126Y-00472* +X00126Y-00472* +X00125Y-00472* +X00125Y-00472* +X00125Y-00472* +X00124Y-00473* +X00124Y-00473* +X00124Y-00473* +X00124Y-00473* +X00123Y-00474* +X00123Y-00474* +X00123Y-00474* +X00123Y-00474* +X00123Y-00475* +X00123Y-00475* +X00123Y-00475* +X00123Y-00476* +X00123Y-00476* +X00123Y-00477* +X00123Y-00477* +X00123Y-00477* +X00123Y-00478* +X00123Y-00478* +X00123Y-00478* +X00123Y-00479* +X00123Y-00479* +X00123Y-00479* +X00123Y-00479* +X00124Y-0048* +X00124Y-0048* +X00124Y-0048* +X00124Y-0048* +X00125Y-00481* +X00125Y-00481* +X00125Y-00481* +X00126Y-00481* +X00126Y-00481* +X00126Y-00481* +X00127Y-00481* +X00127Y-00481* +X00127Y-00481* +X00128* +X00128Y-00481* +X00128Y-00481* +X00129Y-00481* +X00129Y-00481* +X00129Y-00481* +X0013Y-00481* +X0013Y-00481* +X0013Y-00481* +X0013Y-0048* +X00131Y-0048* +X00131Y-0048* +X00131Y-0048* +X00131Y-00479* +X00132Y-00479* +X00132Y-00479* +X00132Y-00479* +X00132Y-00478* +X00132Y-00478* +X00132Y-00478* +X00132Y-00477* +X00132Y-00477* +X00132Y-00477* +X-00441Y00316D02* +D01* +X-00441Y00316* +X-00441Y00316* +X-00441Y00317* +X-00441Y00317* +X-00441Y00317* +X-00441Y00318* +X-00441Y00318* +X-00441Y00318* +X-00441Y00318* +X-00442Y00319* +X-00442Y00319* +X-00442Y00319* +X-00442Y00319* +X-00443Y0032* +X-00443Y0032* +X-00443Y0032* +X-00444Y0032* +X-00444Y0032* +X-00444Y0032* +X-00445Y0032* +X-00445Y0032* +X-00445Y0032* +X-00446* +X-00446Y0032* +X-00446Y0032* +X-00447Y0032* +X-00447Y0032* +X-00447Y0032* +X-00448Y0032* +X-00448Y0032* +X-00448Y0032* +X-00448Y00319* +X-00449Y00319* +X-00449Y00319* +X-00449Y00319* +X-00449Y00318* +X-0045Y00318* +X-0045Y00318* +X-0045Y00318* +X-0045Y00317* +X-0045Y00317* +X-0045Y00317* +X-0045Y00316* +X-0045Y00316* +X-0045Y00316* +X-0045Y00315* +X-0045Y00315* +X-0045Y00314* +X-0045Y00314* +X-0045Y00314* +X-0045Y00313* +X-0045Y00313* +X-0045Y00313* +X-00449Y00313* +X-00449Y00312* +X-00449Y00312* +X-00449Y00312* +X-00448Y00312* +X-00448Y00311* +X-00448Y00311* +X-00448Y00311* +X-00447Y00311* +X-00447Y00311* +X-00447Y00311* +X-00446Y00311* +X-00446Y00311* +X-00446Y00311* +X-00445* +X-00445Y00311* +X-00445Y00311* +X-00444Y00311* +X-00444Y00311* +X-00444Y00311* +X-00443Y00311* +X-00443Y00311* +X-00443Y00311* +X-00442Y00312* +X-00442Y00312* +X-00442Y00312* +X-00442Y00312* +X-00441Y00313* +X-00441Y00313* +X-00441Y00313* +X-00441Y00313* +X-00441Y00314* +X-00441Y00314* +X-00441Y00314* +X-00441Y00315* +X-00441Y00315* +X-00441Y00316* +X-0013D02* +D01* +X-0013Y00316* +X-0013Y00316* +X-0013Y00317* +X-0013Y00317* +X-0013Y00317* +X-0013Y00318* +X-0013Y00318* +X-0013Y00318* +X-0013Y00318* +X-00131Y00319* +X-00131Y00319* +X-00131Y00319* +X-00131Y00319* +X-00132Y0032* +X-00132Y0032* +X-00132Y0032* +X-00133Y0032* +X-00133Y0032* +X-00133Y0032* +X-00134Y0032* +X-00134Y0032* +X-00134Y0032* +X-00135* +X-00135Y0032* +X-00135Y0032* +X-00136Y0032* +X-00136Y0032* +X-00136Y0032* +X-00137Y0032* +X-00137Y0032* +X-00137Y0032* +X-00137Y00319* +X-00138Y00319* +X-00138Y00319* +X-00138Y00319* +X-00138Y00318* +X-00139Y00318* +X-00139Y00318* +X-00139Y00318* +X-00139Y00317* +X-00139Y00317* +X-00139Y00317* +X-00139Y00316* +X-00139Y00316* +X-00139Y00316* +X-00139Y00315* +X-00139Y00315* +X-00139Y00314* +X-00139Y00314* +X-00139Y00314* +X-00139Y00313* +X-00139Y00313* +X-00139Y00313* +X-00138Y00313* +X-00138Y00312* +X-00138Y00312* +X-00138Y00312* +X-00137Y00312* +X-00137Y00311* +X-00137Y00311* +X-00137Y00311* +X-00136Y00311* +X-00136Y00311* +X-00136Y00311* +X-00135Y00311* +X-00135Y00311* +X-00135Y00311* +X-00134* +X-00134Y00311* +X-00134Y00311* +X-00133Y00311* +X-00133Y00311* +X-00133Y00311* +X-00132Y00311* +X-00132Y00311* +X-00132Y00311* +X-00131Y00312* +X-00131Y00312* +X-00131Y00312* +X-00131Y00312* +X-0013Y00313* +X-0013Y00313* +X-0013Y00313* +X-0013Y00313* +X-0013Y00314* +X-0013Y00314* +X-0013Y00314* +X-0013Y00315* +X-0013Y00315* +X-0013Y00316* +G54D71* +X-0119Y-00003D02* +D01* +X-0119Y-00002* +X-0119Y-00001* +X-0119Y0* +X-0119Y0* +X-0119Y0* +X-01191Y00001* +X-01191Y00002* +X-01191Y00003* +X-01192Y00003* +X-01192Y00004* +X-01193Y00005* +X-01194Y00005* +X-01194Y00006* +X-01195Y00006* +X-01196Y00007* +X-01196Y00007* +X-01197Y00007* +X-01198Y00008* +X-01199Y00008* +X-01199Y00008* +X-012Y00008* +X-01201Y00008* +X-01202* +X-01203Y00008* +X-01204Y00008* +X-01204Y00008* +X-01205Y00008* +X-01206Y00007* +X-01207Y00007* +X-01207Y00007* +X-01208Y00006* +X-01209Y00006* +X-01209Y00005* +X-0121Y00005* +X-01211Y00004* +X-01211Y00003* +X-01212Y00003* +X-01212Y00002* +X-01212Y00001* +X-01213Y0* +X-01213Y0* +X-01213Y0* +X-01213Y-00001* +X-01213Y-00002* +X-01213Y-00003* +X-01213Y-00003* +X-01213Y-00004* +X-01213Y-00005* +X-01213Y-00006* +X-01213Y-00007* +X-01212Y-00007* +X-01212Y-00008* +X-01212Y-00009* +X-01211Y-00009* +X-01211Y-0001* +X-0121Y-00011* +X-01209Y-00011* +X-01209Y-00012* +X-01208Y-00012* +X-01207Y-00013* +X-01207Y-00013* +X-01206Y-00014* +X-01205Y-00014* +X-01204Y-00014* +X-01204Y-00014* +X-01203Y-00014* +X-01202Y-00014* +X-01201* +X-012Y-00014* +X-01199Y-00014* +X-01199Y-00014* +X-01198Y-00014* +X-01197Y-00014* +X-01196Y-00013* +X-01196Y-00013* +X-01195Y-00012* +X-01194Y-00012* +X-01194Y-00011* +X-01193Y-00011* +X-01192Y-0001* +X-01192Y-00009* +X-01191Y-00009* +X-01191Y-00008* +X-01191Y-00007* +X-0119Y-00007* +X-0119Y-00006* +X-0119Y-00005* +X-0119Y-00004* +X-0119Y-00003* +X-0119Y-00003* +G54D72* +X-00959Y-00671D02* +D01* +X-00959Y-00671* +X-00959Y-00671* +X-00959Y-00671* +X-00959Y-0067* +X-00959Y-0067* +X-0096Y-0067* +X-0096Y-0067* +X-0096Y-0067* +X-0096Y-0067* +X-0096Y-0067* +X-0096Y-0067* +X-0096Y-00669* +X-0096Y-00669* +X-0096Y-00669* +X-0096Y-00669* +X-0096Y-00669* +X-00961Y-00669* +X-00961Y-00669* +X-00961Y-00669* +X-00961Y-00669* +X-00961Y-00669* +X-00961Y-00669* +X-00961* +X-00962Y-00669* +X-00962Y-00669* +X-00962Y-00669* +X-00962Y-00669* +X-00962Y-00669* +X-00962Y-00669* +X-00962Y-00669* +X-00962Y-00669* +X-00963Y-00669* +X-00963Y-00669* +X-00963Y-0067* +X-00963Y-0067* +X-00963Y-0067* +X-00963Y-0067* +X-00963Y-0067* +X-00963Y-0067* +X-00963Y-0067* +X-00963Y-0067* +X-00963Y-00671* +X-00963Y-00671* +X-00963Y-00671* +X-00963Y-00671* +X-00963Y-00671* +X-00963Y-00671* +X-00963Y-00671* +X-00963Y-00672* +X-00963Y-00672* +X-00963Y-00672* +X-00963Y-00672* +X-00963Y-00672* +X-00963Y-00672* +X-00963Y-00672* +X-00963Y-00672* +X-00963Y-00672* +X-00963Y-00673* +X-00962Y-00673* +X-00962Y-00673* +X-00962Y-00673* +X-00962Y-00673* +X-00962Y-00673* +X-00962Y-00673* +X-00962Y-00673* +X-00962Y-00673* +X-00961Y-00673* +X-00961* +X-00961Y-00673* +X-00961Y-00673* +X-00961Y-00673* +X-00961Y-00673* +X-00961Y-00673* +X-0096Y-00673* +X-0096Y-00673* +X-0096Y-00673* +X-0096Y-00673* +X-0096Y-00672* +X-0096Y-00672* +X-0096Y-00672* +X-0096Y-00672* +X-0096Y-00672* +X-0096Y-00672* +X-0096Y-00672* +X-00959Y-00672* +X-00959Y-00672* +X-00959Y-00671* +X-00959Y-00671* +X-00959Y-00671* +X-00959Y-00671* +X-00405Y00646D02* +D01* +X-00405Y00646* +X-00405Y00646* +X-00406Y00647* +X-00406Y00647* +X-00406Y00647* +X-00406Y00647* +X-00406Y00647* +X-00406Y00648* +X-00406Y00648* +X-00406Y00648* +X-00406Y00648* +X-00406Y00648* +X-00407Y00648* +X-00407Y00648* +X-00407Y00649* +X-00407Y00649* +X-00407Y00649* +X-00408Y00649* +X-00408Y00649* +X-00408Y00649* +X-00408Y00649* +X-00408Y00649* +X-00409* +X-00409Y00649* +X-00409Y00649* +X-00409Y00649* +X-00409Y00649* +X-0041Y00649* +X-0041Y00649* +X-0041Y00649* +X-0041Y00648* +X-0041Y00648* +X-0041Y00648* +X-00411Y00648* +X-00411Y00648* +X-00411Y00648* +X-00411Y00648* +X-00411Y00647* +X-00411Y00647* +X-00411Y00647* +X-00411Y00647* +X-00411Y00647* +X-00411Y00646* +X-00411Y00646* +X-00411Y00646* +X-00411Y00646* +X-00411Y00646* +X-00411Y00645* +X-00411Y00645* +X-00411Y00645* +X-00411Y00645* +X-00411Y00645* +X-00411Y00644* +X-00411Y00644* +X-00411Y00644* +X-00411Y00644* +X-0041Y00644* +X-0041Y00644* +X-0041Y00644* +X-0041Y00643* +X-0041Y00643* +X-0041Y00643* +X-00409Y00643* +X-00409Y00643* +X-00409Y00643* +X-00409Y00643* +X-00409Y00643* +X-00408* +X-00408Y00643* +X-00408Y00643* +X-00408Y00643* +X-00408Y00643* +X-00407Y00643* +X-00407Y00643* +X-00407Y00643* +X-00407Y00644* +X-00407Y00644* +X-00406Y00644* +X-00406Y00644* +X-00406Y00644* +X-00406Y00644* +X-00406Y00644* +X-00406Y00645* +X-00406Y00645* +X-00406Y00645* +X-00406Y00645* +X-00406Y00645* +X-00405Y00646* +X-00405Y00646* +X-00405Y00646* +X01352Y-00387D02* +D01* +X01351Y-00386* +X01351Y-00386* +X01351Y-00386* +X01351Y-00386* +X01351Y-00386* +X01351Y-00386* +X01351Y-00386* +X01351Y-00385* +X01351Y-00385* +X01351Y-00385* +X01351Y-00385* +X01351Y-00385* +X01351Y-00385* +X01351Y-00385* +X01351Y-00385* +X0135Y-00385* +X0135Y-00385* +X0135Y-00385* +X0135Y-00385* +X0135Y-00385* +X0135Y-00385* +X0135Y-00385* +X01349* +X01349Y-00385* +X01349Y-00385* +X01349Y-00385* +X01349Y-00385* +X01349Y-00385* +X01349Y-00385* +X01349Y-00385* +X01348Y-00385* +X01348Y-00385* +X01348Y-00385* +X01348Y-00385* +X01348Y-00385* +X01348Y-00385* +X01348Y-00385* +X01348Y-00386* +X01348Y-00386* +X01348Y-00386* +X01348Y-00386* +X01348Y-00386* +X01348Y-00386* +X01348Y-00386* +X01348Y-00387* +X01348Y-00387* +X01348Y-00387* +X01348Y-00387* +X01348Y-00387* +X01348Y-00387* +X01348Y-00387* +X01348Y-00387* +X01348Y-00388* +X01348Y-00388* +X01348Y-00388* +X01348Y-00388* +X01348Y-00388* +X01348Y-00388* +X01348Y-00388* +X01349Y-00388* +X01349Y-00388* +X01349Y-00388* +X01349Y-00388* +X01349Y-00388* +X01349Y-00388* +X01349Y-00388* +X01349Y-00388* +X0135* +X0135Y-00388* +X0135Y-00388* +X0135Y-00388* +X0135Y-00388* +X0135Y-00388* +X0135Y-00388* +X01351Y-00388* +X01351Y-00388* +X01351Y-00388* +X01351Y-00388* +X01351Y-00388* +X01351Y-00388* +X01351Y-00388* +X01351Y-00388* +X01351Y-00387* +X01351Y-00387* +X01351Y-00387* +X01351Y-00387* +X01351Y-00387* +X01351Y-00387* +X01351Y-00387* +X01352Y-00387* +X-00597Y-00482D02* +D01* +X-00591Y-00481* +X-00585Y-00481* +X-00579Y-0048* +X-00573Y-00478* +X-00567Y-00476* +X-00561Y-00474* +X-00555Y-00471* +X-0055Y-00468* +X-00545Y-00465* +X-0054Y-00461* +X-00535Y-00457* +X-00531Y-00452* +X-00527Y-00447* +X-00523Y-00442* +X-0052Y-00437* +X-00517Y-00432* +X-00515Y-00426* +X-00512Y-0042* +X-00511Y-00414* +X-00509Y-00408* +X-00509Y-00402* +X-00508Y-00396* +Y-00389* +X-00509Y-00383* +X-00509Y-00377* +X-00511Y-00371* +X-00512Y-00365* +X-00515Y-00359* +X-00517Y-00353* +X-0052Y-00348* +X-00523Y-00343* +X-00527Y-00338* +X-00531Y-00333* +X-00535Y-00328* +X-0054Y-00324* +X-00545Y-00321* +X-0055Y-00317* +X-00555Y-00314* +X-00561Y-00311* +X-00567Y-00309* +X-00573Y-00307* +X-00579Y-00305* +X-00585Y-00304* +X-00591Y-00304* +X-00597Y-00304* +X-00892Y-0047D02* +D01* +X-00886Y-00473* +X-0088Y-00475* +X-00875Y-00477* +X-00869Y-00479* +X-00863Y-0048* +X-00856Y-00481* +X-0085Y-00481* +X-00847Y-00482* +Y-00304D02* +D01* +X-00853Y-00304* +X-00859Y-00304* +X-00866Y-00305* +X-00872Y-00307* +X-00877Y-00309* +X-00883Y-00311* +X-00889Y-00314* +X-00894Y-00317* +X-00899Y-00321* +X-00904Y-00324* +X-00909Y-00328* +X-00913Y-00333* +X-00917Y-00338* +X-00921Y-00343* +X-00924Y-00348* +X-00927Y-00353* +X-0093Y-00359* +X-00932Y-00365* +X-00933Y-00371* +X-00935Y-00377* +X-00936Y-00383* +X-00936Y-00389* +Y-00396* +X-00936Y-00402* +X-00935Y-00408* +X-00933Y-00414* +X-00932Y-0042* +X-00931Y-00423* +X01071Y-00156D02* +Y-00149D01* +X0089Y-0005D02* +X01071D01* +X0089Y-00255D02* +X01071D01* +X0089Y-00097D02* +Y-0005D01* +Y-00255D02* +Y-00208D01* +X01071Y-00255D02* +Y-00239D01* +Y-00066D02* +Y-0005D01* +X-01503Y00644D02* +X-01488Y0069D01* +X00726Y00076D02* +X00745Y00094D01* +Y00147D02* +X00751Y00154D01* +X00745Y00094D02* +Y00147D01* +X-00715Y0047D02* +Y00508D01* +Y00549* +X-00728Y00562D02* +X-00715Y00549D01* +X-00847Y-00304D02* +X-00765D01* +X-00846Y-00482D02* +X-00597D01* +X-00645Y-00304D02* +X-00597D01* +X01431Y00396D02* +Y00363D01* +X01437Y00357* +X0145* +X01457Y00363* +Y00396* +X0147Y00357D02* +X01484D01* +X01477* +Y00396* +X0147Y0039* +X0153Y00396D02* +X01517Y0039D01* +X01504Y00376* +Y00363* +X0151Y00357* +X01524* +X0153Y00363* +Y0037* +X01524Y00376* +X01504* +X00478Y-01025D02* +Y-01057D01* +X00484Y-01063* +X00497* +X00503Y-01057* +Y-01025* +X00516Y-01063D02* +X00529D01* +X00522* +Y-01025* +X00516Y-01032* +X00547D02* +X00554Y-01025D01* +X00566* +X00573Y-01032* +Y-01057* +X00566Y-01063* +X00554* +X00547Y-01057* +Y-01032* +X00887Y-00032D02* +Y00007D01* +X00907* +X00914Y0* +Y-00012* +X00907Y-00019* +X00887* +X00901D02* +X00914Y-00032D01* +X00954Y-00005D02* +X00934D01* +X00927Y-00012* +Y-00025* +X00934Y-00032* +X00954* +X00994D02* +X00967D01* +X00994Y-00005* +Y0* +X00987Y00007* +X00974* +X00967Y0* +X-01233Y00167D02* +Y00134D01* +X-01226Y00128* +X-01213* +X-01206Y00134* +Y00167* +X-01166D02* +X-01193D01* +Y00147* +X-01179Y00154* +X-01173* +X-01166Y00147* +Y00134* +X-01173Y00128* +X-01186* +X-01193Y00134* +X-00791Y-00646D02* +X-00798Y-0064D01* +X-00811* +X-00818Y-00646* +Y-00673* +X-00811Y-0068* +X-00798* +X-00791Y-00673* +X-00751Y-0068D02* +X-00778D01* +X-00751Y-00653* +Y-00646* +X-00758Y-0064* +X-00771* +X-00778Y-00646* +X-00738D02* +X-00731Y-0064D01* +X-00718* +X-00711Y-00646* +Y-00653* +X-00718Y-0066* +X-00724* +X-00718* +X-00711Y-00666* +Y-00673* +X-00718Y-0068* +X-00731* +X-00738Y-00673* +X00317Y-0054D02* +X0031Y-00533D01* +X00297* +X0029Y-0054* +Y-00547* +X00297Y-00553* +X0031* +X00317Y-0056* +Y-00567* +X0031Y-00573* +X00297* +X0029Y-00567* +X00357Y-00573D02* +X0033D01* +X00357Y-00547* +Y-0054* +X0035Y-00533* +X00337* +X0033Y-0054* +X-00937Y00445D02* +Y00412D01* +X-00931Y00405* +X-00918* +X-00911Y00412* +Y00445* +X-00898Y00405D02* +X-00884D01* +X-00891* +Y00445* +X-00898Y00438* +X-00864Y00405D02* +X-00851D01* +X-00858* +Y00445* +X-00864Y00438* +X-00794Y-01134D02* +Y-01174D01* +X-00774* +X-00767Y-01167* +Y-0114* +X-00774Y-01134* +X-00794* +X-00754Y-01174D02* +X-0074D01* +X-00747* +Y-01134* +X-00754Y-0114* +X-0072Y-01134D02* +X-00694D01* +Y-0114* +X-0072Y-01167* +Y-01174* +X-00309Y-00798D02* +Y-00831D01* +X-00302Y-00838* +X-00289* +X-00282Y-00831* +Y-00798* +X-00269D02* +X-00242D01* +Y-00805* +X-00269Y-00831* +Y-00838* +X-00795Y00285D02* +Y00252D01* +X-00788Y00246* +X-00775* +X-00768Y00252* +Y00285* +X-00755Y00252D02* +X-00748Y00246D01* +X-00735* +X-00728Y00252* +Y00279* +X-00735Y00285* +X-00748* +X-00755Y00279* +Y00272* +X-00748Y00265* +X-00728* +X-00624Y00499D02* +Y00466D01* +X-00617Y00459* +X-00604* +X-00597Y00466* +Y00499* +X-00584Y00459D02* +X-0057D01* +X-00577* +Y00499* +X-00584Y00492* +X-0055Y00499D02* +X-00524D01* +Y00492* +X-0055Y00466* +Y00459* +X01117Y00551D02* +X01084D01* +X01077Y00544* +Y00531* +X01084Y00524* +X01117* +X01077Y00511D02* +Y00497D01* +Y00504* +X01117* +X01111Y00511* +Y00477D02* +X01117Y00471D01* +Y00457* +X01111Y00451* +X01104* +X01097Y00457* +X01091Y00451* +X01084* +X01077Y00457* +Y00471* +X01084Y00477* +X01091* +X01097Y00471* +X01104Y00477* +X01111* +X01097Y00471D02* +Y00457D01* +X-01459Y00978D02* +X-01432D01* +Y00972* +X-01459Y00945* +Y00938* +X-01432* +X-01419Y00978D02* +Y00938D01* +X-01399* +X-01393Y00945* +Y00972* +X-01399Y00978* +X-01419* +X-01359Y00938D02* +Y00978D01* +X-01379Y00958* +X-01353* +X00193Y-00231D02* +Y-00271D01* +X00212* +X00219Y-00264* +Y-00237* +X00212Y-00231* +X00193* +X00259Y-00237D02* +X00252Y-00231D01* +X00239* +X00232Y-00237* +Y-00244* +X00239Y-00251* +X00252* +X00259Y-00257* +Y-00264* +X00252Y-00271* +X00239* +X00232Y-00264* +X00272Y-00237D02* +X00279Y-00231D01* +X00292* +X00299Y-00237* +Y-00244* +X00292Y-00251* +X00286* +X00292* +X00299Y-00257* +Y-00264* +X00292Y-00271* +X00279* +X00272Y-00264* +X-00285Y00801D02* +Y00768D01* +X-00279Y00762* +X-00265* +X-00259Y00768* +Y00801* +X-00245Y00762D02* +X-00232D01* +X-00239* +Y00801* +X-00245Y00795* +X-00185Y00801D02* +X-00212D01* +Y00781* +X-00199Y00788* +X-00192* +X-00185Y00781* +Y00768* +X-00192Y00762* +X-00205* +X-00212Y00768* +X01261Y-00197D02* +Y-00157D01* +X01281* +X01288Y-00164* +Y-00177* +X01281Y-00184* +X01261* +X01301Y-00157D02* +Y-00197D01* +X01315Y-00184* +X01328Y-00197* +Y-00157* +X01341Y-00197D02* +Y-00157D01* +X01361* +X01368Y-00164* +Y-00177* +X01361Y-00184* +X01341* +X01355D02* +X01368Y-00197D01* +X01176Y-00156D02* +X01162D01* +X01169* +Y-0019* +X01162Y-00196* +X01156* +X01149Y-0019* +X01189D02* +X01196Y-00196D01* +X01209* +X01216Y-0019* +Y-00163* +X01209Y-00156* +X01196* +X01189Y-00163* +Y-0017* +X01196Y-00176* +X01216* +X-01454Y-00814D02* +X-01414D01* +Y-00834* +X-01421Y-00841* +X-01434* +X-01441Y-00834* +Y-00814* +X-01414Y-00854D02* +X-01454D01* +Y-00874* +X-01448Y-00881* +X-01421* +X-01414Y-00874* +Y-00854* +X-01454Y-00894D02* +Y-00908D01* +Y-00901* +X-01414* +X-01421Y-00894* +X-00912Y-00377D02* +Y-00383D01* +X-00898Y-00397* +X-00885Y-00383* +Y-00377* +X-00898Y-00397D02* +Y-00417D01* +X-00872D02* +X-00858D01* +X-00865* +Y-00377* +X-00872Y-00383* +X-00863Y-01199D02* +X-0087Y-01193D01* +X-00883* +X-0089Y-01199* +Y-01206* +X-00883Y-01213* +X-0087* +X-00863Y-01219* +Y-01226* +X-0087Y-01233* +X-00883* +X-0089Y-01226* +X-0085Y-01233D02* +Y-01193D01* +X-0083* +X-00823Y-01199* +Y-01213* +X-0083Y-01219* +X-0085* +X-0081Y-01193D02* +Y-01233D01* +Y-01219* +X-00783Y-01193* +X-00803Y-01213* +X-00783Y-01233* +X-0077D02* +X-00756D01* +X-00763* +Y-01193* +X-0077Y-01199* +X00296Y-01113D02* +Y-01073D01* +X00316* +X00322Y-01079* +Y-01093* +X00316Y-01099* +X00296* +X00309D02* +X00322Y-01113D01* +X00349Y-01126D02* +X00356D01* +X00362Y-01119* +Y-01086* +X00342* +X00336Y-01093* +Y-01106* +X00342Y-01113* +X00362* +X00376D02* +Y-01086D01* +X00396* +X00402Y-01093* +Y-01113* +X00442Y-01073D02* +Y-01113D01* +X00422* +X00416Y-01106* +Y-01093* +X00422Y-01086* +X00442* +X00456Y-01113D02* +X00469D01* +X00462* +Y-01073* +X00456Y-01079* +X-00739Y00944D02* +X-00732Y00951D01* +Y00964* +X-00739Y00971* +X-00765* +X-00772Y00964* +Y00951* +X-00765Y00944* +X-00732Y00904D02* +X-00739Y00918D01* +X-00752Y00931* +X-00765* +X-00772Y00924* +Y00911* +X-00765Y00904* +X-00759* +X-00752Y00911* +Y00931* +X-00732Y00864D02* +X-00739Y00878D01* +X-00752Y00891* +X-00765* +X-00772Y00884* +Y00871* +X-00765Y00864* +X-00759* +X-00752Y00871* +Y00891* +X-00686Y00288D02* +Y00327D01* +X-00666* +X-00659Y00321* +Y00307* +X-00666Y00301* +X-00686* +X-00672D02* +X-00659Y00288D01* +X-00639Y00314D02* +X-00626D01* +X-00619Y00307* +Y00288* +X-00639* +X-00646Y00294* +X-00639Y00301* +X-00619* +X00224Y00666D02* +Y00706D01* +X00244* +X00251Y00699* +Y00686* +X00244Y00679* +X00224* +X00237D02* +X00251Y00666D01* +X00291D02* +X00264D01* +X00291Y00693* +Y00699* +X00284Y00706* +X00271* +X00264Y00699* +X00324Y00666D02* +Y00706D01* +X00304Y00686* +X00331* +X01404Y00779D02* +X01397Y00786D01* +X01384* +X01377Y00779* +Y00752* +X01384Y00746* +X01397* +X01404Y00752* +X01444Y00786D02* +X01431Y00779D01* +X01417Y00766* +Y00752* +X01424Y00746* +X01437* +X01444Y00752* +Y00759* +X01437Y00766* +X01417* +X01457Y00779D02* +X01464Y00786D01* +X01477* +X01484Y00779* +Y00772* +X01477Y00766* +X01471* +X01477* +X01484Y00759* +Y00752* +X01477Y00746* +X01464* +X01457Y00752* +X00356Y-00475D02* +X00349Y-00468D01* +X00336* +X00329Y-00475* +Y-00502* +X00336Y-00508* +X00349* +X00356Y-00502* +X00369Y-00475D02* +X00376Y-00468D01* +X00389* +X00396Y-00475* +Y-00482* +X00389Y-00488* +X00383* +X00389* +X00396Y-00495* +Y-00502* +X00389Y-00508* +X00376* +X00369Y-00502* +X00436Y-00468D02* +X00409D01* +Y-00488* +X00423Y-00482* +X00429* +X00436Y-00488* +Y-00502* +X00429Y-00508* +X00416* +X00409Y-00502* +X-00162Y00625D02* +X-00155Y00632D01* +Y00645* +X-00162Y00652* +X-00189* +X-00195Y00645* +Y00632* +X-00189Y00625* +X-00155Y00585D02* +X-00162Y00599D01* +X-00175Y00612* +X-00189* +X-00195Y00605* +Y00592* +X-00189Y00585* +X-00182* +X-00175Y00592* +Y00612* +X-00155Y00545D02* +Y00572D01* +X-00175* +X-00169Y00559* +Y00552* +X-00175Y00545* +X-00189* +X-00195Y00552* +Y00565* +X-00189Y00572* +X01185Y00121D02* +X01192Y00128D01* +Y00141* +X01185Y00148* +X01159* +X01152Y00141* +Y00128* +X01159Y00121* +X01185Y00108D02* +X01192Y00101D01* +Y00088* +X01185Y00081* +X01179* +X01172Y00088* +Y00095* +Y00088* +X01165Y00081* +X01159* +X01152Y00088* +Y00101* +X01159Y00108* +X01192Y00041D02* +X01185Y00055D01* +X01172Y00068* +X01159* +X01152Y00061* +Y00048* +X01159Y00041* +X01165* +X01172Y00048* +Y00068* +X-01339Y-01026D02* +X-01346Y-0102D01* +X-01359* +X-01366Y-01026* +Y-01053* +X-01359Y-0106* +X-01346* +X-01339Y-01053* +X-01299Y-0102D02* +X-01326D01* +Y-0104* +X-01312Y-01033* +X-01306* +X-01299Y-0104* +Y-01053* +X-01306Y-0106* +X-01319* +X-01326Y-01053* +X-01286Y-0102D02* +X-01259D01* +Y-01026* +X-01286Y-01053* +Y-0106* +X-01341Y00516D02* +X-01301D01* +Y00496* +X-01308Y0049* +X-01321* +X-01328Y00496* +Y00516* +Y00503D02* +X-01341Y0049D01* +Y00456D02* +X-01301D01* +X-01321Y00476* +Y0045* +X-01301Y0041D02* +Y00436D01* +X-01321* +X-01314Y00423* +Y00416* +X-01321Y0041* +X-01334* +X-01341Y00416* +Y0043* +X-01334Y00436* +X-01509Y00433D02* +X-01503Y0044D01* +Y00453* +X-01509Y0046* +X-01536* +X-01543Y00453* +Y0044* +X-01536Y00433* +X-01503Y00393D02* +Y0042D01* +X-01523* +X-01516Y00407* +Y004* +X-01523Y00393* +X-01536* +X-01543Y004* +Y00413* +X-01536Y0042* +Y0038D02* +X-01543Y00373D01* +Y0036* +X-01536Y00354* +X-01509* +X-01503Y0036* +Y00373* +X-01509Y0038* +X-01516* +X-01523Y00373* +Y00354* +X01092Y00235D02* +X01132D01* +Y00215* +X01125Y00208* +X01112* +X01105Y00215* +Y00235* +Y00221D02* +X01092Y00208D01* +X01132Y00168D02* +Y00195D01* +X01112* +X01119Y00181* +Y00175* +X01112Y00168* +X01099* +X01092Y00175* +Y00188* +X01099Y00195* +X01092Y00135D02* +X01132D01* +X01112Y00155* +Y00128* +X01427Y0018D02* +X0142Y00187D01* +X01407* +X014Y0018* +Y00154* +X01407Y00147* +X0142* +X01427Y00154* +X0144Y0018D02* +X01447Y00187D01* +X0146* +X01467Y0018* +Y00174* +X0146Y00167* +X01453* +X0146* +X01467Y0016* +Y00154* +X0146Y00147* +X01447* +X0144Y00154* +X0148Y0018D02* +X01487Y00187D01* +X015* +X01507Y0018* +Y00174* +X015Y00167* +X01493* +X015* +X01507Y0016* +Y00154* +X015Y00147* +X01487* +X0148Y00154* +X-00007Y00553D02* +Y00593D01* +X00012* +X00018Y00586* +Y00573* +X00012Y00566* +X-00007* +X00005D02* +X00018Y00553D01* +X00058Y00593D02* +X00032D01* +Y00573* +X00045Y00579* +X00052* +X00058Y00573* +Y00559* +X00052Y00553* +X00038* +X00032Y00559* +X00098Y00593D02* +X00085Y00586D01* +X00072Y00573* +Y00559* +X00078Y00553* +X00092* +X00098Y00559* +Y00566* +X00092Y00573* +X00072* +X00732Y-00178D02* +X00772D01* +Y-00197* +X00765Y-00204* +X00752* +X00745Y-00197* +Y-00178* +Y-00191D02* +X00732Y-00204D01* +X00772Y-00244D02* +Y-00217D01* +X00752* +X00759Y-00231* +Y-00237* +X00752Y-00244* +X00739* +X00732Y-00237* +Y-00224* +X00739Y-00217* +Y-00257D02* +X00732Y-00264D01* +Y-00277* +X00739Y-00284* +X00765* +X00772Y-00277* +Y-00264* +X00765Y-00257* +X00759* +X00752Y-00264* +Y-00284* +X-01504Y-00025D02* +X-01498Y-00018D01* +Y-00005* +X-01504Y00001* +X-01531* +X-01538Y-00005* +Y-00018* +X-01531Y-00025* +X-01538Y-00058D02* +X-01498D01* +X-01518Y-00038* +Y-00065* +X-01538Y-00098D02* +X-01498D01* +X-01518Y-00078* +Y-00105* +X-01522Y-00275D02* +X-01516Y-00268D01* +Y-00255* +X-01522Y-00249* +X-01549* +X-01556Y-00255* +Y-00268* +X-01549Y-00275* +X-01516Y-00315D02* +Y-00288D01* +X-01536* +X-01529Y-00302* +Y-00308* +X-01536Y-00315* +X-01549* +X-01556Y-00308* +Y-00295* +X-01549Y-00288* +X-01556Y-00355D02* +Y-00328D01* +X-01529Y-00355* +X-01522* +X-01516Y-00348* +Y-00335* +X-01522Y-00328* +X-01388Y-00535D02* +X-01395Y-00528D01* +X-01408* +X-01415Y-00535* +Y-00562* +X-01408Y-00568* +X-01395* +X-01388Y-00562* +X-01348Y-00528D02* +X-01375D01* +Y-00548* +X-01362Y-00542* +X-01355* +X-01348Y-00548* +Y-00562* +X-01355Y-00568* +X-01368* +X-01375Y-00562* +X-01335Y-00568D02* +X-01322D01* +X-01328* +Y-00528* +X-01335Y-00535* +X-0098Y-00493D02* +X-00986Y-00486D01* +X-01* +X-01006Y-00493* +Y-00519* +X-01Y-00526* +X-00986* +X-0098Y-00519* +X-0094Y-00486D02* +X-00966D01* +Y-00506* +X-00953Y-00499* +X-00946* +X-0094Y-00506* +Y-00519* +X-00946Y-00526* +X-0096* +X-00966Y-00519* +X-00926Y-00493D02* +X-0092Y-00486D01* +X-00906* +X-009Y-00493* +Y-00519* +X-00906Y-00526* +X-0092* +X-00926Y-00519* +Y-00493* +X-01375Y006D02* +X-01382Y00606D01* +X-01395* +X-01402Y006* +Y00573* +X-01395Y00566* +X-01382* +X-01375Y00573* +X-01335Y00606D02* +X-01349Y006D01* +X-01362Y00586* +Y00573* +X-01355Y00566* +X-01342* +X-01335Y00573* +Y0058* +X-01342Y00586* +X-01362* +X-01322Y00566D02* +X-01309D01* +X-01315* +Y00606* +X-01322Y006* +X01196Y00667D02* +X0119Y00673D01* +X01176* +X0117Y00667* +Y0064* +X01176Y00633* +X0119* +X01196Y0064* +X01236Y00673D02* +X01223Y00667D01* +X0121Y00653* +Y0064* +X01216Y00633* +X0123* +X01236Y0064* +Y00647* +X0123Y00653* +X0121* +X0127Y00633D02* +Y00673D01* +X0125Y00653* +X01276* +X-01373Y00255D02* +X-0138Y00262D01* +X-01393* +X-014Y00255* +Y00229* +X-01393Y00222* +X-0138* +X-01373Y00229* +X-01333Y00262D02* +X-01347Y00255D01* +X-0136Y00242* +Y00229* +X-01353Y00222* +X-0134* +X-01333Y00229* +Y00235* +X-0134Y00242* +X-0136* +X-01293Y00222D02* +X-0132D01* +X-01293Y00249* +Y00255* +X-013Y00262* +X-01313* +X-0132Y00255* +X00656Y-00362D02* +X00663Y-00355D01* +Y-00342* +X00656Y-00335* +X00629* +X00623Y-00342* +Y-00355* +X00629Y-00362* +X00656Y-00375D02* +X00663Y-00382D01* +Y-00395* +X00656Y-00402* +X00649* +X00643Y-00395* +Y-00388* +Y-00395* +X00636Y-00402* +X00629* +X00623Y-00395* +Y-00382* +X00629Y-00375* +X00623Y-00442D02* +Y-00415D01* +X00649Y-00442* +X00656* +X00663Y-00435* +Y-00422* +X00656Y-00415* +X00692Y-00816D02* +X00699Y-00809D01* +Y-00796* +X00692Y-00789* +X00666* +X00659Y-00796* +Y-00809* +X00666Y-00816* +X00699Y-00856D02* +Y-00829D01* +X00679* +X00686Y-00842* +Y-00849* +X00679Y-00856* +X00666* +X00659Y-00849* +Y-00836* +X00666Y-00829* +X00692Y-00869D02* +X00699Y-00876D01* +Y-00889* +X00692Y-00896* +X00686* +X00679Y-00889* +X00672Y-00896* +X00666* +X00659Y-00889* +Y-00876* +X00666Y-00869* +X00672* +X00679Y-00876* +X00686Y-00869* +X00692* +X00679Y-00876D02* +Y-00889D01* +X-0014Y-00384D02* +X-00134Y-00377D01* +Y-00364* +X-0014Y-00358* +X-00167* +X-00174Y-00364* +Y-00377* +X-00167Y-00384* +X-0014Y-00397D02* +X-00134Y-00404D01* +Y-00417* +X-0014Y-00424* +X-00147* +X-00154Y-00417* +Y-00411* +Y-00417* +X-0016Y-00424* +X-00167* +X-00174Y-00417* +Y-00404* +X-00167Y-00397* +X-00174Y-00437D02* +Y-00451D01* +Y-00444* +X-00134* +X-0014Y-00437* +X00245Y-0032D02* +X00212D01* +X00205Y-00327* +Y-0034* +X00212Y-00347* +X00245* +X00239Y-0036D02* +X00245Y-00367D01* +Y-0038* +X00239Y-00387* +X00232* +X00225Y-0038* +X00219Y-00387* +X00212* +X00205Y-0038* +Y-00367* +X00212Y-0036* +X00219* +X00225Y-00367* +X00232Y-0036* +X00239* +X00225Y-00367D02* +Y-0038D01* +X00331Y-00631D02* +X00338Y-00625D01* +Y-00611* +X00331Y-00605* +X00304* +X00298Y-00611* +Y-00625* +X00304Y-00631* +X00298Y-00671D02* +Y-00645D01* +X00324Y-00671* +X00331* +X00338Y-00665* +Y-00651* +X00331Y-00645* +X00304Y-00685D02* +X00298Y-00691D01* +Y-00705* +X00304Y-00711* +X00331* +X00338Y-00705* +Y-00691* +X00331Y-00685* +X00324* +X00318Y-00691* +Y-00711* +X00878Y-01121D02* +Y-01154D01* +X00885Y-01161* +X00898* +X00905Y-01154* +Y-01121* +X00918Y-01161D02* +X00932D01* +X00925* +Y-01121* +X00918Y-01128* +X00978Y-01161D02* +X00952D01* +X00978Y-01134* +Y-01128* +X00972Y-01121* +X00958* +X00952Y-01128* +X00779Y-01023D02* +X00745D01* +X00739Y-0103* +Y-01043* +X00745Y-0105* +X00779* +X00739Y-01063D02* +Y-01076D01* +Y-0107* +X00779* +X00772Y-01063* +X00739Y-01116D02* +X00779D01* +X00759Y-01096* +Y-01123* +X00669Y-01153D02* +X00709D01* +Y-01173* +X00702Y-0118* +X00689* +X00682Y-01173* +Y-01153* +Y-01166D02* +X00669Y-0118D01* +X00702Y-01193D02* +X00709Y-012D01* +Y-01213* +X00702Y-0122* +X00695* +X00689Y-01213* +Y-01206* +Y-01213* +X00682Y-0122* +X00675* +X00669Y-01213* +Y-012* +X00675Y-01193* +X00669Y-01253D02* +X00709D01* +X00689Y-01233* +Y-0126* +X00901Y-00317D02* +Y-00277D01* +X00921* +X00928Y-00284* +Y-00297* +X00921Y-00304* +X00901* +X00914D02* +X00928Y-00317D01* +X00941Y-00284D02* +X00948Y-00277D01* +X00961* +X00968Y-00284* +Y-00291* +X00961Y-00297* +X00954* +X00961* +X00968Y-00304* +Y-00311* +X00961Y-00317* +X00948* +X00941Y-00311* +X00981D02* +X00988Y-00317D01* +X01001* +X01008Y-00311* +Y-00284* +X01001Y-00277* +X00988* +X00981Y-00284* +Y-00291* +X00988Y-00297* +X01008* +X00868Y-00726D02* +Y-00686D01* +X00888* +X00894Y-00693* +Y-00706* +X00888Y-00713* +X00868* +X00881D02* +X00894Y-00726D01* +X00908Y-00693D02* +X00914Y-00686D01* +X00928* +X00934Y-00693* +Y-00699* +X00928Y-00706* +X00921* +X00928* +X00934Y-00713* +Y-00719* +X00928Y-00726* +X00914* +X00908Y-00719* +X00948Y-00726D02* +X00961D01* +X00954* +Y-00686* +X00948Y-00693* +X00875Y-00521D02* +Y-00481D01* +X00894* +X00901Y-00488* +Y-00501* +X00894Y-00508* +X00875* +X00888D02* +X00901Y-00521D01* +X00914Y-00488D02* +X00921Y-00481D01* +X00934* +X00941Y-00488* +Y-00494* +X00934Y-00501* +X00928* +X00934* +X00941Y-00508* +Y-00514* +X00934Y-00521* +X00921* +X00914Y-00514* +X00981Y-00481D02* +X00954D01* +Y-00501* +X00968Y-00494* +X00974* +X00981Y-00501* +Y-00514* +X00974Y-00521* +X00961* +X00954Y-00514* +X0103Y-00557D02* +Y-00517D01* +X0105* +X01057Y-00523* +Y-00537* +X0105Y-00543* +X0103* +X01043D02* +X01057Y-00557D01* +X0107Y-00523D02* +X01077Y-00517D01* +X0109* +X01097Y-00523* +Y-0053* +X0109Y-00537* +X01083* +X0109* +X01097Y-00543* +Y-0055* +X0109Y-00557* +X01077* +X0107Y-0055* +X0111Y-00523D02* +X01117Y-00517D01* +X0113* +X01137Y-00523* +Y-0055* +X0113Y-00557* +X01117* +X0111Y-0055* +Y-00523* +X01098Y-00344D02* +Y-00318D01* +X01091Y-00311* +X01078* +X01071Y-00318* +Y-00344* +X01078Y-00351* +X01091* +X01085Y-00338D02* +X01098Y-00351D01* +X01091D02* +X01098Y-00344D01* +X01138Y-00351D02* +X01111D01* +X01138Y-00324* +Y-00318* +X01131Y-00311* +X01118* +X01111Y-00318* +X01178Y-00351D02* +X01151D01* +X01178Y-00324* +Y-00318* +X01171Y-00311* +X01158* +X01151Y-00318* +X0108Y-0075D02* +Y-00723D01* +X01074Y-00716* +X0106* +X01054Y-00723* +Y-0075* +X0106Y-00756* +X01074* +X01067Y-00743D02* +X0108Y-00756D01* +X01074D02* +X0108Y-0075D01* +X01094Y-00756D02* +X01107D01* +X011* +Y-00716* +X01094Y-00723* +X01127Y-0075D02* +X01134Y-00756D01* +X01147* +X01154Y-0075* +Y-00723* +X01147Y-00716* +X01134* +X01127Y-00723* +Y-0073* +X01134Y-00736* +X01154* +X008Y-00345D02* +Y-00319D01* +X00793Y-00312* +X0078* +X00773Y-00319* +Y-00345* +X0078Y-00352* +X00793* +X00786Y-00339D02* +X008Y-00352D01* +X00793D02* +X008Y-00345D01* +X0084Y-00352D02* +X00813D01* +X0084Y-00325* +Y-00319* +X00833Y-00312* +X0082* +X00813Y-00319* +X00853Y-00352D02* +X00866D01* +X0086* +Y-00312* +X00853Y-00319* +X00719Y-00683D02* +Y-00657D01* +X00713Y-0065* +X00699* +X00693Y-00657* +Y-00683* +X00699Y-0069* +X00713* +X00706Y-00677D02* +X00719Y-0069D01* +X00713D02* +X00719Y-00683D01* +X00733Y-0069D02* +X00746D01* +X00739* +Y-0065* +X00733Y-00657* +X00766D02* +X00773Y-0065D01* +X00786* +X00793Y-00657* +Y-00663* +X00786Y-0067* +X00793Y-00677* +Y-00683* +X00786Y-0069* +X00773* +X00766Y-00683* +Y-00677* +X00773Y-0067* +X00766Y-00663* +Y-00657* +X00773Y-0067D02* +X00786D01* +X-01141Y00578D02* +X-01101D01* +Y00558* +X-01108Y00552* +X-01121* +X-01128Y00558* +Y00578* +Y00565D02* +X-01141Y00552D01* +Y00512D02* +Y00538D01* +X-01115Y00512* +X-01108* +X-01101Y00518* +Y00532* +X-01108Y00538* +X-01101Y00498D02* +Y00472D01* +X-01108* +X-01135Y00498* +X-01141* +X-01072Y0041D02* +X-01032D01* +Y0039* +X-01039Y00383* +X-01052* +X-01059Y0039* +Y0041* +Y00397D02* +X-01072Y00383D01* +Y00343D02* +Y0037D01* +X-01046Y00343* +X-01039* +X-01032Y0035* +Y00363* +X-01039Y0037* +Y0033D02* +X-01032Y00323D01* +Y0031* +X-01039Y00303* +X-01046* +X-01052Y0031* +X-01059Y00303* +X-01066* +X-01072Y0031* +Y00323* +X-01066Y0033* +X-01059* +X-01052Y00323* +X-01046Y0033* +X-01039* +X-01052Y00323D02* +Y0031D01* +X-00919Y00155D02* +X-00912Y00162D01* +Y00175* +X-00919Y00182* +X-00945* +X-00952Y00175* +Y00162* +X-00945Y00155* +X-00952Y00122D02* +X-00912D01* +X-00932Y00142* +Y00115* +X-00919Y00102D02* +X-00912Y00095D01* +Y00082* +X-00919Y00075* +X-00945* +X-00952Y00082* +Y00095* +X-00945Y00102* +X-00919* +X-01324Y00721D02* +X-01284D01* +Y00701* +X-01291Y00694* +X-01304* +X-01311Y00701* +Y00721* +Y00708D02* +X-01324Y00694D01* +X-01284Y00654D02* +Y00681D01* +X-01304* +X-01298Y00668* +Y00661* +X-01304Y00654* +X-01318* +X-01324Y00661* +Y00674* +X-01318Y00681* +X-01324Y00641D02* +Y00628D01* +Y00634* +X-01284* +X-01291Y00641* +X-01266Y0081D02* +Y0085D01* +X-01246* +X-0124Y00843* +Y0083* +X-01246Y00823* +X-01266* +X-01253D02* +X-0124Y0081D01* +X-01206D02* +Y0085D01* +X-01226Y0083* +X-012* +X-01186Y0085D02* +X-0116D01* +Y00843* +X-01186Y00816* +Y0081* +X-01529Y-01093D02* +Y-01067D01* +X-01536Y-0106* +X-01549* +X-01556Y-01067* +Y-01093* +X-01549Y-011* +X-01536* +X-01542Y-01087D02* +X-01529Y-011D01* +X-01536D02* +X-01529Y-01093D01* +X-01489Y-011D02* +X-01516D01* +X-01489Y-01073* +Y-01067* +X-01496Y-0106* +X-01509* +X-01516Y-01067* +X-01476D02* +X-01469Y-0106D01* +X-01456* +X-01449Y-01067* +Y-01093* +X-01456Y-011* +X-01469* +X-01476Y-01093* +Y-01067* +X00489Y-00437D02* +Y-0041D01* +X00482Y-00403* +X00469* +X00462Y-0041* +Y-00437* +X00469Y-00443* +X00482* +X00475Y-0043D02* +X00489Y-00443D01* +X00482D02* +X00489Y-00437D01* +X00502Y-00443D02* +X00515D01* +X00509* +Y-00403* +X00502Y-0041* +X00562Y-00403D02* +X00549Y-0041D01* +X00535Y-00423* +Y-00437* +X00542Y-00443* +X00555* +X00562Y-00437* +Y-0043* +X00555Y-00423* +X00535* +X00555Y00417D02* +X00522D01* +X00515Y0041* +Y00397* +X00522Y0039* +X00555* +X00515Y00377D02* +Y00364D01* +Y0037* +X00555* +X00549Y00377* +Y00344D02* +X00555Y00337D01* +Y00324* +X00549Y00317* +X00542* +X00535Y00324* +Y0033* +Y00324* +X00529Y00317* +X00522* +X00515Y00324* +Y00337* +X00522Y00344* +X01084Y00091D02* +X01091Y00098D01* +Y00111* +X01084Y00118* +X01057* +X01051Y00111* +Y00098* +X01057Y00091* +X01051Y00051D02* +Y00078D01* +X01077Y00051* +X01084* +X01091Y00058* +Y00071* +X01084Y00078* +X01091Y00011D02* +Y00038D01* +X01071* +X01077Y00024* +Y00018* +X01071Y00011* +X01057* +X01051Y00018* +Y00031* +X01057Y00038* +X-01379Y-00691D02* +Y-00651D01* +X-01359* +X-01352Y-00657* +Y-00671* +X-01359Y-00677* +X-01379* +X-01365D02* +X-01352Y-00691D01* +X-01339D02* +X-01325D01* +X-01332* +Y-00651* +X-01339Y-00657* +X-01305Y-00691D02* +X-01292D01* +X-01299* +Y-00651* +X-01305Y-00657* +X-01325Y-01262D02* +Y-01222D01* +X-01305* +X-01298Y-01228* +Y-01242* +X-01305Y-01248* +X-01325* +X-01311D02* +X-01298Y-01262D01* +X-01285Y-01228D02* +X-01278Y-01222D01* +X-01265* +X-01258Y-01228* +Y-01235* +X-01265Y-01242* +X-01271* +X-01265* +X-01258Y-01248* +Y-01255* +X-01265Y-01262* +X-01278* +X-01285Y-01255* +X-01218Y-01262D02* +X-01245D01* +X-01218Y-01235* +Y-01228* +X-01225Y-01222* +X-01238* +X-01245Y-01228* +X00207Y-00496D02* +X00247D01* +Y-00516* +X00241Y-00522* +X00227* +X00221Y-00516* +Y-00496* +Y-00509D02* +X00207Y-00522D01* +Y-00556D02* +X00247D01* +X00227Y-00536* +Y-00562* +X00241Y-00576D02* +X00247Y-00582D01* +Y-00596* +X00241Y-00602* +X00214* +X00207Y-00596* +Y-00582* +X00214Y-00576* +X00241* +X-00245Y-00529D02* +X-00205D01* +Y-00549* +X-00211Y-00556* +X-00225* +X-00231Y-00549* +Y-00529* +Y-00542D02* +X-00245Y-00556D01* +Y-00589D02* +X-00205D01* +X-00225Y-00569* +Y-00596* +X-00245Y-00609D02* +Y-00622D01* +Y-00616* +X-00205* +X-00211Y-00609* +X-00334Y-00536D02* +X-00294D01* +Y-00556* +X-00301Y-00563* +X-00314* +X-00321Y-00556* +Y-00536* +Y-00549D02* +X-00334Y-00563D01* +X-00301Y-00576D02* +X-00294Y-00583D01* +Y-00596* +X-00301Y-00603* +X-00307* +X-00314Y-00596* +Y-00589* +Y-00596* +X-00321Y-00603* +X-00327* +X-00334Y-00596* +Y-00583* +X-00327Y-00576* +X-00294Y-00643D02* +X-00301Y-00629D01* +X-00314Y-00616* +X-00327* +X-00334Y-00623* +Y-00636* +X-00327Y-00643* +X-00321* +X-00314Y-00636* +Y-00616* +X-01554Y0063D02* +X-01514D01* +Y0061* +X-0152Y00604* +X-01534* +X-0154Y0061* +Y0063* +Y00617D02* +X-01554Y00604D01* +Y0057D02* +X-01514D01* +X-01534Y0059* +Y00564* +X-01514Y00524D02* +X-0152Y00537D01* +X-01534Y0055* +X-01547* +X-01554Y00544* +Y0053* +X-01547Y00524* +X-0154* +X-01534Y0053* +Y0055* +X0092Y00585D02* +Y00624D01* +X00939* +X00946Y00618* +Y00604* +X00939Y00598* +X0092* +X00933D02* +X00946Y00585D01* +X00986Y00624D02* +X00959D01* +Y00604* +X00973Y00611* +X00979* +X00986Y00604* +Y00591* +X00979Y00585* +X00966* +X00959Y00591* +X01026Y00585D02* +X00999D01* +X01026Y00611* +Y00618* +X01019Y00624* +X01006* +X00999Y00618* +X00925Y00038D02* +Y00078D01* +X00945* +X00951Y00071* +Y00058* +X00945Y00051* +X00925* +X00938D02* +X00951Y00038D01* +X00991Y00078D02* +X00978Y00071D01* +X00965Y00058* +Y00045* +X00971Y00038* +X00985* +X00991Y00045* +Y00051* +X00985Y00058* +X00965* +X01031Y00038D02* +X01005D01* +X01031Y00065* +Y00071* +X01025Y00078* +X01011* +X01005Y00071* +X-01318Y00938D02* +Y00978D01* +X-01298* +X-01292Y00972* +Y00958* +X-01298Y00952* +X-01318* +X-01305D02* +X-01292Y00938D01* +X-01258D02* +Y00978D01* +X-01278Y00958* +X-01252* +X-01238Y00972D02* +X-01232Y00978D01* +X-01218* +X-01212Y00972* +Y00965* +X-01218Y00958* +X-01225* +X-01218* +X-01212Y00952* +Y00945* +X-01218Y00938* +X-01232* +X-01238Y00945* +X00912Y00668D02* +Y00708D01* +X00932* +X00939Y00701* +Y00688* +X00932Y00681* +X00912* +X00925D02* +X00939Y00668D01* +X00979Y00708D02* +X00965Y00701D01* +X00952Y00688* +Y00674* +X00959Y00668* +X00972* +X00979Y00674* +Y00681* +X00972Y00688* +X00952* +X01012Y00668D02* +Y00708D01* +X00992Y00688* +X01019* +X01046Y00929D02* +Y00968D01* +X01066* +X01073Y00962* +Y00948* +X01066Y00942* +X01046* +X01059D02* +X01073Y00929D01* +X01113Y00968D02* +X01099Y00962D01* +X01086Y00948* +Y00935* +X01093Y00929* +X01106* +X01113Y00935* +Y00942* +X01106Y00948* +X01086* +X01126Y00929D02* +X01139D01* +X01133* +Y00968* +X01126Y00962* +X-01247Y00592D02* +X-01275Y0062D01* +X-01261Y00634* +X-01251* +X-01242Y00625* +Y00615* +X-01256Y00601* +X-01247Y0061D02* +X-01228D01* +X-012Y00639D02* +X-01218Y0062D01* +Y00658* +X-01223Y00662* +X-01233* +X-01242Y00653* +Y00643* +X-01214Y00672D02* +Y00681D01* +X-01204Y00691* +X-01195* +X-0119Y00686* +Y00676* +X-01195Y00672* +X-0119Y00676* +X-01181* +X-01176Y00672* +Y00662* +X-01185Y00653* +X-01195* +X00327Y0093D02* +Y0097D01* +X00347* +X00354Y00963* +Y0095* +X00347Y00943* +X00327* +X00341D02* +X00354Y0093D01* +X00367D02* +X00381D01* +X00374* +Y0097* +X00367Y00963* +X00427Y0093D02* +X00401D01* +X00427Y00956* +Y00963* +X00421Y0097* +X00407* +X00401Y00963* +X00483Y00015D02* +Y00055D01* +X00503* +X00509Y00049* +Y00035* +X00503Y00029* +X00483* +X00496D02* +X00509Y00015D01* +X00549D02* +X00523D01* +X00549Y00042* +Y00049* +X00543Y00055* +X00529* +X00523Y00049* +X00563Y00022D02* +X00569Y00015D01* +X00583* +X00589Y00022* +Y00049* +X00583Y00055* +X00569* +X00563Y00049* +Y00042* +X00569Y00035* +X00589* +X-00602Y-00248D02* +Y-00208D01* +X-00582* +X-00575Y-00214* +Y-00228* +X-00582Y-00234* +X-00602* +X-00589D02* +X-00575Y-00248D01* +X-00535Y-00208D02* +Y-00248D01* +X-00555* +X-00562Y-00241* +Y-00228* +X-00555Y-00221* +X-00535* +X00279Y-004D02* +X00305D01* +X00312Y-00394* +Y-0038* +X00305Y-00374* +X00279* +X00272Y-0038* +Y-00394* +X00285Y-00387D02* +X00272Y-004D01* +Y-00394D02* +X00279Y-004D01* +X00272Y-00414D02* +Y-00427D01* +Y-0042* +X00312* +X00305Y-00414* +X00312Y-00473D02* +Y-00447D01* +X00292* +X00299Y-0046* +Y-00467* +X00292Y-00473* +X00279* +X00272Y-00467* +Y-00453* +X00279Y-00447* +X-00416Y-0041D02* +Y-00384D01* +X-00422Y-00377* +X-00436* +X-00442Y-00384* +Y-0041* +X-00436Y-00417* +X-00422* +X-00429Y-00403D02* +X-00416Y-00417D01* +X-00422D02* +X-00416Y-0041D01* +X-00402Y-00417D02* +X-00389D01* +X-00396* +Y-00377* +X-00402Y-00384* +X-00349Y-00417D02* +Y-00377D01* +X-00369Y-00397* +X-00342* +X01038Y007D02* +Y0066D01* +X01058* +X01065Y00667* +Y00693* +X01058Y007* +X01038* +X01105Y0066D02* +X01078D01* +X01105Y00687* +Y00693* +X01098Y007* +X01085* +X01078Y00693* +X01118Y0066D02* +X01131D01* +X01125* +Y007* +X01118Y00693* +X00149Y00937D02* +Y00897D01* +X00169* +X00176Y00904* +Y0093* +X00169Y00937* +X00149* +X00189Y00897D02* +X00202D01* +X00196* +Y00937* +X00189Y0093* +X00249Y00937D02* +X00236Y0093D01* +X00222Y00917* +Y00904* +X00229Y00897* +X00242* +X00249Y00904* +Y0091* +X00242Y00917* +X00222* +X-0152Y00925D02* +X-01514Y00931D01* +Y00945* +X-0152Y00951* +X-01547* +X-01554Y00945* +Y00931* +X-01547Y00925* +X-01514Y00885D02* +X-0152Y00898D01* +X-01534Y00911* +X-01547* +X-01554Y00905* +Y00891* +X-01547Y00885* +X-0154* +X-01534Y00891* +Y00911* +X-0152Y00871D02* +X-01514Y00865D01* +Y00851* +X-0152Y00845* +X-01547* +X-01554Y00851* +Y00865* +X-01547Y00871* +X-0152* +X-01221Y00421D02* +X-01228Y00427D01* +X-01241* +X-01248Y00421* +Y00394* +X-01241Y00387* +X-01228* +X-01221Y00394* +X-01188Y00387D02* +Y00427D01* +X-01208Y00407* +X-01181* +X-01141Y00427D02* +X-01168D01* +Y00407* +X-01154Y00414* +X-01148* +X-01141Y00407* +Y00394* +X-01148Y00387* +X-01161* +X-01168Y00394* +X01412Y-00782D02* +X01405Y-00775D01* +X01392* +X01385Y-00782* +Y-00809* +X01392Y-00815* +X01405* +X01412Y-00809* +X01445Y-00815D02* +Y-00775D01* +X01425Y-00795* +X01452* +X01465Y-00775D02* +X01492D01* +Y-00782* +X01465Y-00809* +Y-00815* +X00531Y00194D02* +X00524Y002D01* +X00511* +X00505Y00194* +Y00167* +X00511Y00161* +X00524* +X00531Y00167* +X00571Y00161D02* +X00544D01* +X00571Y00187* +Y00194* +X00564Y002* +X00551* +X00544Y00194* +X00604Y00161D02* +Y002D01* +X00584Y0018* +X00611* +X-01098Y00193D02* +X-01091Y002D01* +Y00213* +X-01098Y0022* +X-01125* +X-01131Y00213* +Y002* +X-01125Y00193* +X-01131Y0016D02* +X-01091D01* +X-01111Y0018* +Y00153* +X-01125Y0014D02* +X-01131Y00133D01* +Y0012* +X-01125Y00113* +X-01098* +X-01091Y0012* +Y00133* +X-01098Y0014* +X-01105* +X-01111Y00133* +Y00113* +X-01446Y00088D02* +X-0144Y00095D01* +Y00108* +X-01446Y00115* +X-01473* +X-0148Y00108* +Y00095* +X-01473Y00088* +X-0148Y00055D02* +X-0144D01* +X-0146Y00075* +Y00048* +X-01446Y00035D02* +X-0144Y00028D01* +Y00015* +X-01446Y00008* +X-01453* +X-0146Y00015* +X-01466Y00008* +X-01473* +X-0148Y00015* +Y00028* +X-01473Y00035* +X-01466* +X-0146Y00028* +X-01453Y00035* +X-01446* +X-0146Y00028D02* +Y00015D01* +X-00503Y-00232D02* +Y-00272D01* +X-00483* +X-00476Y-00265* +Y-00238* +X-00483Y-00232* +X-00503* +X-00436Y-00238D02* +X-00443Y-00232D01* +X-00456* +X-00463Y-00238* +Y-00245* +X-00456Y-00252* +X-00443* +X-00436Y-00258* +Y-00265* +X-00443Y-00272* +X-00456* +X-00463Y-00265* +X-00423Y-00272D02* +X-00409D01* +X-00416* +Y-00232* +X-00423Y-00238* +X-00174Y-00231D02* +Y-00271D01* +X-00154* +X-00147Y-00264* +Y-00237* +X-00154Y-00231* +X-00174* +X-00107Y-00237D02* +X-00114Y-00231D01* +X-00127* +X-00134Y-00237* +Y-00244* +X-00127Y-00251* +X-00114* +X-00107Y-00257* +Y-00264* +X-00114Y-00271* +X-00127* +X-00134Y-00264* +X-00067Y-00271D02* +X-00094D01* +X-00067Y-00244* +Y-00237* +X-00074Y-00231* +X-00087* +X-00094Y-00237* +X-00535Y-00804D02* +X-00542Y-00797D01* +X-00555* +X-00562Y-00804* +Y-0081* +X-00555Y-00817* +X-00542* +X-00535Y-00824* +Y-0083* +X-00542Y-00837* +X-00555* +X-00562Y-0083* +X-00522Y-00837D02* +X-00508D01* +X-00515* +Y-00797* +X-00522Y-00804* +X00002Y-00804D02* +X-00004Y-00798D01* +X-00017* +X-00024Y-00804* +Y-00811* +X-00017Y-00818* +X-00004* +X00002Y-00824* +Y-00831* +X-00004Y-00838* +X-00017* +X-00024Y-00831* +X00015Y-00804D02* +X00022Y-00798D01* +X00035* +X00042Y-00804* +Y-00811* +X00035Y-00818* +X00029* +X00035* +X00042Y-00824* +Y-00831* +X00035Y-00838* +X00022* +X00015Y-00831* +X01176Y00973D02* +Y00933D01* +X01196* +X01202Y00939* +Y00966* +X01196Y00973* +X01176* +X01242Y00933D02* +X01216D01* +X01242Y00959* +Y00966* +X01236Y00973* +X01222* +X01216Y00966* +X01256D02* +X01262Y00973D01* +X01276* +X01282Y00966* +Y00939* +X01276Y00933* +X01262* +X01256Y00939* +Y00966* +X00777Y-00754D02* +X00784Y-00747D01* +Y-00734* +X00777Y-00727* +X0075* +X00744Y-00734* +Y-00747* +X0075Y-00754* +X00744Y-00794D02* +Y-00767D01* +X0077Y-00794* +X00777* +X00784Y-00787* +Y-00774* +X00777Y-00767* +X00784Y-00833D02* +X00777Y-0082D01* +X00764Y-00807* +X0075* +X00744Y-00814* +Y-00827* +X0075Y-00833* +X00757* +X00764Y-00827* +Y-00807* +X00596Y-0012D02* +Y-00093D01* +X00589Y-00087* +X00576* +X0057Y-00093* +Y-0012* +X00576Y-00127* +X00589* +X00583Y-00113D02* +X00596Y-00127D01* +X00589D02* +X00596Y-0012D01* +X00609Y-00127D02* +X00623D01* +X00616* +Y-00087* +X00609Y-00093* +X00643Y-00087D02* +X00669D01* +Y-00093* +X00643Y-0012* +Y-00127* +X-01053Y-0079D02* +X-01046Y-00783D01* +Y-0077* +X-01053Y-00763* +X-01079* +X-01086Y-0077* +Y-00783* +X-01079Y-0079* +X-01086Y-00823D02* +X-01046D01* +X-01066Y-00803* +Y-0083* +X-01086Y-00843D02* +Y-00857D01* +Y-0085* +X-01046* +X-01053Y-00843* +X-01217Y-00537D02* +X-01224Y-0053D01* +X-01237* +X-01244Y-00537* +Y-00564* +X-01237Y-0057* +X-01224* +X-01217Y-00564* +X-01184Y-0057D02* +Y-0053D01* +X-01204Y-0055* +X-01177* +X-01137Y-0057D02* +X-01164D01* +X-01137Y-00544* +Y-00537* +X-01144Y-0053* +X-01157* +X-01164Y-00537* +X-01066Y-00543D02* +Y-00577D01* +X-0106Y-00583* +X-01046* +X-0104Y-00577* +Y-00543* +X-01D02* +X-01013Y-0055D01* +X-01026Y-00563* +Y-00577* +X-0102Y-00583* +X-01006* +X-01Y-00577* +Y-0057* +X-01006Y-00563* +X-01026* +X-00738Y00453D02* +X-00698D01* +Y00433* +X-00704Y00427* +X-00718* +X-00724Y00433* +Y00453* +Y0044D02* +X-00738Y00427D01* +Y00393D02* +X-00698D01* +X-00718Y00413* +Y00387* +X-00731Y00373D02* +X-00738Y00367D01* +Y00353* +X-00731Y00347* +X-00704* +X-00698Y00353* +Y00367* +X-00704Y00373* +X-00711* +X-00718Y00367* +Y00347* +X-00706Y00913D02* +X-00666D01* +Y00893* +X-00673Y00886* +X-00686* +X-00693Y00893* +Y00913* +Y00899D02* +X-00706Y00886D01* +X-00666Y00846D02* +Y00873D01* +X-00686* +X-0068Y00859* +Y00853* +X-00686Y00846* +X-007* +X-00706Y00853* +Y00866* +X-007Y00873* +X-00673Y00833D02* +X-00666Y00826D01* +Y00813* +X-00673Y00806* +X-007* +X-00706Y00813* +Y00826* +X-007Y00833* +X-00673* +X-0113Y00734D02* +X-0109D01* +Y00714* +X-01097Y00707* +X-0111* +X-01117Y00714* +Y00734* +Y0072D02* +X-0113Y00707D01* +X-0109Y00667D02* +Y00694D01* +X-0111* +X-01103Y0068* +Y00674* +X-0111Y00667* +X-01123* +X-0113Y00674* +Y00687* +X-01123Y00694* +X-0109Y00627D02* +Y00654D01* +X-0111* +X-01103Y0064* +Y00634* +X-0111Y00627* +X-01123* +X-0113Y00634* +Y00647* +X-01123Y00654* +X-00681Y0051D02* +X-00641D01* +Y0049* +X-00647Y00484* +X-00661* +X-00667Y0049* +Y0051* +Y00497D02* +X-00681Y00484D01* +X-00641Y00444D02* +X-00647Y00457D01* +X-00661Y0047* +X-00674* +X-00681Y00464* +Y0045* +X-00674Y00444* +X-00667* +X-00661Y0045* +Y0047* +X-00647Y0043D02* +X-00641Y00424D01* +Y0041* +X-00647Y00404* +X-00674* +X-00681Y0041* +Y00424* +X-00674Y0043* +X-00647* +X-00972Y007D02* +X-00965Y00707D01* +Y0072* +X-00972Y00727* +X-00999* +X-01005Y0072* +Y00707* +X-00999Y007* +X-01005Y0066D02* +Y00687D01* +X-00979Y0066* +X-00972* +X-00965Y00667* +Y0068* +X-00972Y00687* +X-00965Y00647D02* +Y0062D01* +X-00972* +X-00999Y00647* +X-01005* +X-00584Y00873D02* +X-00591Y0088D01* +X-00604* +X-00611Y00873* +Y00847* +X-00604Y0084* +X-00591* +X-00584Y00847* +X-00544Y0084D02* +X-00571D01* +X-00544Y00867* +Y00873* +X-00551Y0088* +X-00564* +X-00571Y00873* +X-00531D02* +X-00524Y0088D01* +X-00511* +X-00504Y00873* +Y00867* +X-00511Y0086* +X-00504Y00853* +Y00847* +X-00511Y0084* +X-00524* +X-00531Y00847* +Y00853* +X-00524Y0086* +X-00531Y00867* +Y00873* +X-00524Y0086D02* +X-00511D01* +X-00796Y00427D02* +X-00789Y00433D01* +Y00447* +X-00796Y00453* +X-00823* +X-00829Y00447* +Y00433* +X-00823Y00427* +X-00829Y00393D02* +X-00789D01* +X-00809Y00413* +Y00387* +X-00796Y00373D02* +X-00789Y00367D01* +Y00353* +X-00796Y00347* +X-00803* +X-00809Y00353* +Y0036* +Y00353* +X-00816Y00347* +X-00823* +X-00829Y00353* +Y00367* +X-00823Y00373* +X01207Y-0064D02* +Y-0068D01* +X01227* +X01234Y-00673* +Y-00646* +X01227Y-0064* +X01207* +X01247Y-0068D02* +X0126D01* +X01254* +Y-0064* +X01247Y-00646* +X0128D02* +X01287Y-0064D01* +X013* +X01307Y-00646* +Y-00653* +X013Y-0066* +X01307Y-00666* +Y-00673* +X013Y-0068* +X01287* +X0128Y-00673* +Y-00666* +X01287Y-0066* +X0128Y-00653* +Y-00646* +X01287Y-0066D02* +X013D01* +X01294Y-00362D02* +X01334D01* +Y-00342* +X01327Y-00335* +X01301* +X01294Y-00342* +Y-00362* +X01334Y-00322D02* +Y-00308D01* +Y-00315* +X01294* +X01301Y-00322* +X01327Y-00288D02* +X01334Y-00282D01* +Y-00268* +X01327Y-00262* +X01301* +X01294Y-00268* +Y-00282* +X01301Y-00288* +X01307* +X01314Y-00282* +Y-00262* +X-00533Y-0089D02* +X-00526Y-00884D01* +Y-0087* +X-00533Y-00864* +X-0056* +X-00566Y-0087* +Y-00884* +X-0056Y-0089* +X-00533Y-00904D02* +X-00526Y-0091D01* +Y-00924* +X-00533Y-0093* +X-0054* +X-00546Y-00924* +Y-00917* +Y-00924* +X-00553Y-0093* +X-0056* +X-00566Y-00924* +Y-0091* +X-0056Y-00904* +X-00533Y-00944D02* +X-00526Y-0095D01* +Y-00964* +X-00533Y-0097* +X-0056* +X-00566Y-00964* +Y-0095* +X-0056Y-00944* +X-00533* +X-00629Y-0123D02* +Y-01264D01* +X-00623Y-0127* +X-00609* +X-00603Y-01264* +Y-0123* +X-00569Y-0127D02* +Y-0123D01* +X-00589Y-0125* +X-00563* +X-00716Y-00249D02* +X-0071Y-00242D01* +Y-00229* +X-00716Y-00222* +X-00743* +X-0075Y-00229* +Y-00242* +X-00743Y-00249* +X-0071Y-00289D02* +Y-00262D01* +X-0073* +X-00723Y-00275* +Y-00282* +X-0073Y-00289* +X-00743* +X-0075Y-00282* +Y-00269* +X-00743Y-00262* +X-0071Y-00329D02* +Y-00302D01* +X-0073* +X-00723Y-00315* +Y-00322* +X-0073Y-00329* +X-00743* +X-0075Y-00322* +Y-00309* +X-00743Y-00302* +X-00659Y-00249D02* +X-00652Y-00242D01* +Y-00229* +X-00659Y-00222* +X-00686* +X-00692Y-00229* +Y-00242* +X-00686Y-00249* +X-00652Y-00289D02* +Y-00262D01* +X-00672* +X-00666Y-00275* +Y-00282* +X-00672Y-00289* +X-00686* +X-00692Y-00282* +Y-00269* +X-00686Y-00262* +X-00652Y-00329D02* +X-00659Y-00315D01* +X-00672Y-00302* +X-00686* +X-00692Y-00309* +Y-00322* +X-00686Y-00329* +X-00679* +X-00672Y-00322* +Y-00302* +X00732Y-00015D02* +X00772D01* +Y-00035* +X00765Y-00042* +X00752* +X00745Y-00035* +Y-00015* +Y-00029D02* +X00732Y-00042D01* +X00772Y-00082D02* +Y-00055D01* +X00752* +X00758Y-00069* +Y-00075* +X00752Y-00082* +X00738* +X00732Y-00075* +Y-00062* +X00738Y-00055* +X00772Y-00095D02* +Y-00122D01* +X00765* +X00738Y-00095* +X00732* +X-00911Y00852D02* +X-00871D01* +Y00832* +X-00878Y00825* +X-00891* +X-00898Y00832* +Y00852* +Y00839D02* +X-00911Y00825D01* +X-00871Y00785D02* +Y00812D01* +X-00891* +X-00884Y00799* +Y00792* +X-00891Y00785* +X-00904* +X-00911Y00792* +Y00805* +X-00904Y00812* +X-00878Y00772D02* +X-00871Y00765D01* +Y00752* +X-00878Y00745* +X-00884* +X-00891Y00752* +X-00898Y00745* +X-00904* +X-00911Y00752* +Y00765* +X-00904Y00772* +X-00898* +X-00891Y00765* +X-00884Y00772* +X-00878* +X-00891Y00765D02* +Y00752D01* +X01388Y00115D02* +X01395Y00121D01* +Y00135* +X01388Y00141* +X01361* +X01355Y00135* +Y00121* +X01361Y00115* +X01388Y00101D02* +X01395Y00095D01* +Y00081* +X01388Y00075* +X01381* +X01375Y00081* +Y00088* +Y00081* +X01368Y00075* +X01361* +X01355Y00081* +Y00095* +X01361Y00101* +X01395Y00061D02* +Y00035D01* +X01388* +X01361Y00061* +X01355* +X00799Y00571D02* +X00792Y00578D01* +X00779* +X00772Y00571* +Y00545* +X00779Y00538* +X00792* +X00799Y00545* +X00812Y00571D02* +X00819Y00578D01* +X00832* +X00839Y00571* +Y00565* +X00832Y00558* +X00825* +X00832* +X00839Y00551* +Y00545* +X00832Y00538* +X00819* +X00812Y00545* +X00852Y00571D02* +X00859Y00578D01* +X00872* +X00879Y00571* +Y00565* +X00872Y00558* +X00879Y00551* +Y00545* +X00872Y00538* +X00859* +X00852Y00545* +Y00551* +X00859Y00558* +X00852Y00565* +Y00571* +X00859Y00558D02* +X00872D01* +X01367Y00621D02* +X01374Y00628D01* +Y00641* +X01367Y00648* +X01341* +X01334Y00641* +Y00628* +X01341Y00621* +X01367Y00608D02* +X01374Y00601D01* +Y00588* +X01367Y00581* +X01361* +X01354Y00588* +Y00595* +Y00588* +X01347Y00581* +X01341* +X01334Y00588* +Y00601* +X01341Y00608* +Y00568D02* +X01334Y00561D01* +Y00548* +X01341Y00541* +X01367* +X01374Y00548* +Y00561* +X01367Y00568* +X01361* +X01354Y00561* +Y00541* +X00552Y00083D02* +Y00123D01* +X00572* +X00579Y00117* +Y00103* +X00572Y00097* +X00552* +X00566D02* +X00579Y00083D01* +X00619Y00123D02* +X00592D01* +Y00103* +X00606Y0011* +X00612* +X00619Y00103* +Y0009* +X00612Y00083* +X00599* +X00592Y0009* +X00632Y00117D02* +X00639Y00123D01* +X00652* +X00659Y00117* +Y0011* +X00652Y00103* +X00646* +X00652* +X00659Y00097* +Y0009* +X00652Y00083* +X00639* +X00632Y0009* +X00643Y00018D02* +Y00058D01* +X00663* +X0067Y00052* +Y00038* +X00663Y00032* +X00643* +X00657D02* +X0067Y00018D01* +X0071Y00058D02* +X00697Y00052D01* +X00683Y00038* +Y00025* +X0069Y00018* +X00703* +X0071Y00025* +Y00032* +X00703Y00038* +X00683* +X0075Y00058D02* +X00723D01* +Y00038* +X00737Y00045* +X00743* +X0075Y00038* +Y00025* +X00743Y00018* +X0073* +X00723Y00025* +X00801Y00026D02* +Y00066D01* +X00821* +X00827Y00059* +Y00046* +X00821Y00039* +X00801* +X00814D02* +X00827Y00026D01* +X00867Y00066D02* +X00854Y00059D01* +X00841Y00046* +Y00033* +X00847Y00026* +X00861* +X00867Y00033* +Y00039* +X00861Y00046* +X00841* +X00881Y00059D02* +X00887Y00066D01* +X00901* +X00907Y00059* +Y00053* +X00901Y00046* +X00894* +X00901* +X00907Y00039* +Y00033* +X00901Y00026* +X00887* +X00881Y00033* +X-00437Y-0089D02* +X-00431Y-00883D01* +Y-0087* +X-00437Y-00863* +X-00464* +X-00471Y-0087* +Y-00883* +X-00464Y-0089* +X-00471Y-00923D02* +X-00431D01* +X-00451Y-00903* +Y-0093* +X-00431Y-0097D02* +X-00437Y-00957D01* +X-00451Y-00943* +X-00464* +X-00471Y-0095* +Y-00963* +X-00464Y-0097* +X-00457* +X-00451Y-00963* +Y-00943* +X00089Y-01251D02* +X00082Y-01244D01* +X00069* +X00062Y-01251* +Y-01277* +X00069Y-01284* +X00082* +X00089Y-01277* +X00129Y-01244D02* +X00102D01* +Y-01264* +X00116Y-01257* +X00122* +X00129Y-01264* +Y-01277* +X00122Y-01284* +X00109* +X00102Y-01277* +X00142Y-01251D02* +X00149Y-01244D01* +X00162* +X00169Y-01251* +Y-01257* +X00162Y-01264* +X00156* +X00162* +X00169Y-01271* +Y-01277* +X00162Y-01284* +X00149* +X00142Y-01277* +X00191Y-01094D02* +X00184Y-01088D01* +X00171* +X00165Y-01094* +Y-01121* +X00171Y-01128* +X00184* +X00191Y-01121* +X00231Y-01088D02* +X00204D01* +Y-01108* +X00218Y-01101* +X00224* +X00231Y-01108* +Y-01121* +X00224Y-01128* +X00211* +X00204Y-01121* +X00264Y-01128D02* +Y-01088D01* +X00244Y-01108* +X00271* +X00206Y-01056D02* +Y-01016D01* +X00225* +X00232Y-01022* +Y-01036* +X00225Y-01042* +X00206* +X00219D02* +X00232Y-01056D01* +X00272D02* +X00245D01* +X00272Y-01029* +Y-01022* +X00265Y-01016* +X00252* +X00245Y-01022* +X00312Y-01016D02* +X00285D01* +Y-01036* +X00299Y-01029* +X00305* +X00312Y-01036* +Y-01049* +X00305Y-01056* +X00292* +X00285Y-01049* +X00078Y-00915D02* +Y-00875D01* +X00098* +X00105Y-00881* +Y-00895* +X00098Y-00901* +X00078* +X00092D02* +X00105Y-00915D01* +X00145D02* +X00118D01* +X00145Y-00888* +Y-00881* +X00138Y-00875* +X00125* +X00118Y-00881* +X00185Y-00875D02* +X00172Y-00881D01* +X00158Y-00895* +Y-00908* +X00165Y-00915* +X00178* +X00185Y-00908* +Y-00901* +X00178Y-00895* +X00158* +X0099Y-00731D02* +X0103D01* +Y-00751* +X01023Y-00757* +X0101* +X01003Y-00751* +Y-00731* +Y-00744D02* +X0099Y-00757D01* +X01023Y-00771D02* +X0103Y-00777D01* +Y-00791* +X01023Y-00797* +X01016* +X0101Y-00791* +Y-00784* +Y-00791* +X01003Y-00797* +X00996* +X0099Y-00791* +Y-00777* +X00996Y-00771* +X01023Y-00811D02* +X0103Y-00817D01* +Y-00831* +X01023Y-00837* +X01016* +X0101Y-00831* +Y-00824* +Y-00831* +X01003Y-00837* +X00996* +X0099Y-00831* +Y-00817* +X00996Y-00811* +X00805Y-01128D02* +X00845D01* +Y-01148* +X00838Y-01155* +X00825* +X00818Y-01148* +Y-01128* +Y-01142D02* +X00805Y-01155D01* +Y-01188D02* +X00845D01* +X00825Y-01168* +Y-01195* +X00805Y-01228D02* +X00845D01* +X00825Y-01208* +Y-01235* +X00866Y00915D02* +Y00954D01* +X00885* +X00892Y00948* +Y00934* +X00885Y00928* +X00866* +X00879D02* +X00892Y00915D01* +X00905Y00948D02* +X00912Y00954D01* +X00925* +X00932Y00948* +Y00941* +X00925Y00934* +X00919* +X00925* +X00932Y00928* +Y00921* +X00925Y00915* +X00912* +X00905Y00921* +X00945Y00954D02* +X00972D01* +Y00948* +X00945Y00921* +Y00915* +X00664Y00625D02* +Y00665D01* +X00684* +X00691Y00659* +Y00645* +X00684Y00639* +X00664* +X00677D02* +X00691Y00625D01* +X00704Y00659D02* +X00711Y00665D01* +X00724* +X00731Y00659* +Y00652* +X00724Y00645* +X00717* +X00724* +X00731Y00639* +Y00632* +X00724Y00625* +X00711* +X00704Y00632* +X00744Y00659D02* +X00751Y00665D01* +X00764* +X00771Y00659* +Y00652* +X00764Y00645* +X00771Y00639* +Y00632* +X00764Y00625* +X00751* +X00744Y00632* +Y00639* +X00751Y00645* +X00744Y00652* +Y00659* +X00751Y00645D02* +X00764D01* +X00461Y00893D02* +Y00933D01* +X00481* +X00488Y00927* +Y00913* +X00481Y00907* +X00461* +X00474D02* +X00488Y00893D01* +X00521D02* +Y00933D01* +X00501Y00913* +X00528* +X00568Y00893D02* +X00541D01* +X00568Y0092* +Y00927* +X00561Y00933* +X00548* +X00541Y00927* +X0049Y00576D02* +Y00616D01* +X0051* +X00516Y0061* +Y00596* +X0051Y0059* +X0049* +X00503D02* +X00516Y00576D01* +X0055D02* +Y00616D01* +X0053Y00596* +X00556* +X0057Y0061D02* +X00576Y00616D01* +X0059* +X00596Y0061* +Y00603* +X0059Y00596* +X00596Y0059* +Y00583* +X0059Y00576* +X00576* +X0057Y00583* +Y0059* +X00576Y00596* +X0057Y00603* +Y0061* +X00576Y00596D02* +X0059D01* +X-003Y-00446D02* +X-00306Y-0044D01* +X-0032* +X-00326Y-00446* +Y-00473* +X-0032Y-0048* +X-00306* +X-003Y-00473* +X-00286Y-00446D02* +X-0028Y-0044D01* +X-00266* +X-0026Y-00446* +Y-00453* +X-00266Y-0046* +X-00273* +X-00266* +X-0026Y-00466* +Y-00473* +X-00266Y-0048* +X-0028* +X-00286Y-00473* +X-00226Y-0048D02* +Y-0044D01* +X-00246Y-0046* +X-0022* +X01282Y-01167D02* +X01255D01* +Y-01187* +X01269Y-0118* +X01275* +X01282Y-01187* +Y-012* +X01275Y-01207* +X01262* +X01255Y-012* +X01295Y-01207D02* +Y-012D01* +X01302* +Y-01207* +X01295* +X01355D02* +X01329D01* +X01355Y-0118* +Y-01174* +X01349Y-01167* +X01335* +X01329Y-01174* +G54D73* +X-00095Y-01504D02* +X00095D01* +X-00105Y-01308D02* +X00105D01* +X01406Y00321D02* +Y00351D01* +X01397Y0036D02* +X01406Y00351D01* +Y00416D02* +Y00446D01* +X01397Y00407D02* +X01406Y00416D01* +X01152Y00321D02* +Y00446D01* +X01397Y0036D02* +Y00407D01* +X01152Y00321D02* +X01406D01* +X01152Y00446D02* +X01406D01* +X00524Y-00808D02* +X00555D01* +X00509Y-00824D02* +X00524Y-00808D01* +X0043D02* +X00461D01* +X00476Y-00824* +X0043Y-01009D02* +X00555D01* +X00476Y-00824D02* +X00509D01* +X00555Y-01009D02* +Y-00808D01* +X0043Y-01009D02* +Y-00808D01* +X-01438Y-00184D02* +X-01202Y00052D01* +Y-0042D02* +X-00965Y-00184D01* +X-01202Y00052D02* +X-00965Y-00184D01* +X-01438D02* +X-01202Y-0042D01* +X-00983Y-00996D02* +Y-00696D01* +X-00783Y-00996D02* +Y-00696D01* +X-00813Y-00996D02* +X-00783D01* +X-00983D02* +X-00953D01* +X-00963Y-00786D02* +X-00803D01* +X-00813Y-00696D02* +X-00783D01* +X-00983D02* +X-00953D01* +X-00819Y00535D02* +Y00549D01* +X-00825Y00555D02* +X-00819Y00549D01* +Y00576D02* +Y0059D01* +X-00825Y0057D02* +X-00819Y00576D01* +X-00949Y00535D02* +Y0059D01* +X-00825Y00555D02* +Y0057D01* +X-00711Y-01117D02* +X-00683D01* +X-00711D02* +Y-01085D01* +Y-00999D02* +X-00683D01* +X-00711Y-0103D02* +Y-00999D01* +X-00305Y-01268D02* +X-0024D01* +X-00211Y-01239* +X-00111Y-01268D02* +X-00046D01* +X-0014Y-01239D02* +X-00111Y-01268D01* +X-00046D02* +Y-00855D01* +X-00305Y-01268D02* +Y-00855D01* +X-00211Y-01239D02* +X-0014D01* +X-00305Y-00855D02* +X-00046D01* +X-00801Y-00164D02* +Y00228D01* +X-00725Y-00164D02* +Y00228D01* +X-00777Y00223D02* +X-00748D01* +X-00801Y-00164D02* +X-00725D01* +X-00783Y00228D02* +X-00777Y00223D01* +X-00801Y00228D02* +X-00783D01* +X-00748Y00223D02* +X-00743Y00228D01* +X-00725* +X-00623Y00663D02* +Y00682D01* +Y00663D02* +X-00615Y00654D01* +X-00623Y00604D02* +Y00623D01* +X-00615Y00632* +X-00623Y00604D02* +X-00426D01* +X-00623Y00682D02* +X-00426D01* +X-00615Y00632D02* +Y00654D01* +X-00426Y00604D02* +Y00682D01* +X01065Y00325D02* +Y00345D01* +X01057Y00353D02* +X01065Y00345D01* +Y00384D02* +Y00404D01* +X01057Y00376D02* +X01065Y00384D01* +X00868Y00404D02* +X01065D01* +X00868Y00325D02* +X01065D01* +X01057Y00353D02* +Y00376D01* +X00868Y00325D02* +Y00404D01* +X-01379Y00862D02* +Y00921D01* +X-01375Y00862D02* +Y00922D01* +X-01435Y00862D02* +X-01375D01* +X-01435Y00922D02* +X-01375D01* +X00466Y-00214D02* +Y00336D01* +X00155Y-00214D02* +X00466D01* +X00155D02* +Y00336D01* +X00466* +X-00405Y00711D02* +Y00727D01* +Y00711D02* +X-00396Y00702D01* +X-00405Y00661D02* +Y00677D01* +X-00396Y00686* +X-00405Y00661D02* +X-00283D01* +X-00405Y00727D02* +X-00283D01* +X-00396Y00686D02* +Y00702D01* +X-00283Y00661D02* +Y00727D01* +X003Y-01273D02* +X0042D01* +X003Y-01143D02* +X0042D01* +X00023Y-00268D02* +X00102D01* +X00051Y-00457D02* +X00074D01* +X00023Y-00465D02* +Y-00268D01* +X00102Y-00465D02* +Y-00268D01* +X00074Y-00457D02* +X00082Y-00465D01* +X00102* +X00043D02* +X00051Y-00457D01* +X00023Y-00465D02* +X00043D01* +X00865Y-00959D02* +Y-00939D01* +Y-00959D02* +X00874Y-00967D01* +X00865Y-01018D02* +Y-00998D01* +X00874Y-0099* +X00865Y-01018D02* +X01062D01* +X00865Y-00939D02* +X01062D01* +X00874Y-0099D02* +Y-00967D01* +X01062Y-01018D02* +Y-00939D01* +X00809Y-00978D02* +Y-00946D01* +X00782Y-00978D02* +X00809D01* +Y-00891D02* +Y-0086D01* +X00782D02* +X00809D01* +X01075Y-00399D02* +Y-00367D01* +X01103* +X01075Y-00486D02* +Y-00454D01* +Y-00486D02* +X01103D01* +X01131Y-00609D02* +X01163D01* +Y-00636D02* +Y-00609D01* +X01045D02* +X01076D01* +X01045Y-00636D02* +Y-00609D01* +X00834Y-00487D02* +Y-00455D01* +X00807Y-00487D02* +X00834D01* +Y-004D02* +Y-00368D01* +X00807D02* +X00834D01* +Y-00647D02* +Y-00615D01* +X00807Y-00647D02* +X00834D01* +Y-0056D02* +Y-00528D01* +X00807D02* +X00834D01* +X-01395Y-01221D02* +Y-01189D01* +X-01423Y-01221D02* +X-01395D01* +Y-01134D02* +Y-01102D01* +X-01423D02* +X-01395D01* +X00541Y-00296D02* +X00573D01* +Y-00324D02* +Y-00296D01* +X00454D02* +X00486D01* +X00454Y-00324D02* +Y-00296D01* +X00656Y0043D02* +X00735D01* +X00684Y00242D02* +X00707D01* +X00656Y00233D02* +Y0043D01* +X00735Y00233D02* +Y0043D01* +X00707Y00242D02* +X00715Y00233D01* +X00735* +X00676D02* +X00684Y00242D01* +X00656Y00233D02* +X00676D01* +X00403Y-00296D02* +X00435D01* +Y-00324D02* +Y-00296D01* +X00316D02* +X00348D01* +X00316Y-00324D02* +Y-00296D01* +X-00395Y-00306D02* +Y-00279D01* +X-00363* +X-00276Y-00306D02* +Y-00279D01* +X-00308D02* +X-00276D01* +X01097Y00835D02* +X01125D01* +Y00804D02* +Y00835D01* +X01097Y00717D02* +X01125D01* +Y00749* +X00301Y0088D02* +X00333D01* +Y00853D02* +Y0088D01* +X00214D02* +X00246D01* +X00214Y00853D02* +Y0088D01* +X01328Y-00412D02* +X01358D01* +X01498D02* +X01528D01* +X01348Y-00502D02* +X01508D01* +X01328Y-00712D02* +X01358D01* +X01498D02* +X01528D01* +Y-00412* +X01328Y-00712D02* +Y-00412D01* +X-00155Y-00214D02* +Y00336D01* +X-00466Y-00214D02* +X-00155D01* +X-00466D02* +Y00336D01* +X-00155* +X-00155D02* +X00155D01* +X-00155Y-00214D02* +Y00336D01* +Y-00214D02* +X00155D01* +Y00336* +X01166Y00825D02* +X01197D01* +X01166D02* +Y00853D01* +X01252Y00825D02* +X01284D01* +Y00853* +X00526Y-00234D02* +X00558D01* +X00526D02* +Y-00207D01* +X00613Y-00234D02* +X00645D01* +Y-00207* +X-01106Y-00621D02* +Y-00589D01* +X-01078* +X-01106Y-00708D02* +Y-00676D01* +Y-00708D02* +X-01078D01* +X0122Y-00536D02* +Y-00504D01* +X01248* +X0122Y-00623D02* +Y-00591D01* +Y-00623D02* +X01248D01* +X0122Y-00396D02* +Y-00365D01* +X01248* +X0122Y-00483D02* +Y-00451D01* +Y-00483D02* +X01248D01* +X-00597Y-01214D02* +X-00565D01* +X-00597D02* +Y-01186D01* +X-0051Y-01214D02* +X-00479D01* +Y-01186* +M02* \ No newline at end of file diff --git a/hardware/gerber/unisolder52_front.gts b/hardware/gerber/unisolder52_front.gts new file mode 100644 index 0000000..a187b1e --- /dev/null +++ b/hardware/gerber/unisolder52_front.gts @@ -0,0 +1,795 @@ +%FSTAX23Y23*% +%MOIN*% +%SFA1B1*% + +%IPPOS*% +%AMD79* +4,1,8,0.043400,-0.020500,0.043400,0.020500,0.034200,0.029600,-0.034200,0.029600,-0.043400,0.020500,-0.043400,-0.020500,-0.034200,-0.029600,0.034200,-0.029600,0.043400,-0.020500,0.0* +1,1,0.018240,0.034200,-0.020500* +1,1,0.018240,0.034200,0.020500* +1,1,0.018240,-0.034200,0.020500* +1,1,0.018240,-0.034200,-0.020500* +% +%AMD80* +4,1,8,0.043400,-0.031500,0.043400,0.031500,0.031500,0.043400,-0.031500,0.043400,-0.043400,0.031500,-0.043400,-0.031500,-0.031500,-0.043400,0.031500,-0.043400,0.043400,-0.031500,0.0* +1,1,0.023740,0.031500,-0.031500* +1,1,0.023740,0.031500,0.031500* +1,1,0.023740,-0.031500,0.031500* +1,1,0.023740,-0.031500,-0.031500* +% +%AMD81* +4,1,4,-0.013600,0.028400,-0.028400,0.013600,0.013600,-0.028400,0.028400,-0.013600,-0.013600,0.028400,0.0* +1,1,0.020870,-0.021000,0.021000* +1,1,0.020870,0.021000,-0.021000* +% +%AMD82* +4,1,4,0.028400,0.013600,0.013600,0.028400,-0.028400,-0.013600,-0.013600,-0.028400,0.028400,0.013600,0.0* +1,1,0.020870,0.021000,0.021000* +1,1,0.020870,-0.021000,-0.021000* +% +%AMD83* +4,1,8,0.057100,-0.048400,0.057100,0.048400,0.042500,0.063100,-0.042500,0.063100,-0.057100,0.048400,-0.057100,-0.048400,-0.042500,-0.063100,0.042500,-0.063100,0.057100,-0.048400,0.0* +1,1,0.029260,0.042500,-0.048400* +1,1,0.029260,0.042500,0.048400* +1,1,0.029260,-0.042500,0.048400* +1,1,0.029260,-0.042500,-0.048400* +% +%AMD84* +4,1,8,0.010200,0.025700,-0.010200,0.025700,-0.016800,0.019100,-0.016800,-0.019100,-0.010200,-0.025700,0.010200,-0.025700,0.016800,-0.019100,0.016800,0.019100,0.010200,0.025700,0.0* +1,1,0.013120,0.010200,0.019100* +1,1,0.013120,-0.010200,0.019100* +1,1,0.013120,-0.010200,-0.019100* +1,1,0.013120,0.010200,-0.019100* +% +%AMD85* +4,1,8,0.029600,-0.008300,0.029600,0.008300,0.022000,0.015800,-0.022000,0.015800,-0.029600,0.008300,-0.029600,-0.008300,-0.022000,-0.015800,0.022000,-0.015800,0.029600,-0.008300,0.0* +1,1,0.015080,0.022000,-0.008300* +1,1,0.015080,0.022000,0.008300* +1,1,0.015080,-0.022000,0.008300* +1,1,0.015080,-0.022000,-0.008300* +% +%AMD88* +4,1,8,-0.008300,-0.041400,0.008300,-0.041400,0.015800,-0.033900,0.015800,0.033900,0.008300,0.041400,-0.008300,0.041400,-0.015800,0.033900,-0.015800,-0.033900,-0.008300,-0.041400,0.0* +1,1,0.015080,-0.008300,-0.033900* +1,1,0.015080,0.008300,-0.033900* +1,1,0.015080,0.008300,0.033900* +1,1,0.015080,-0.008300,0.033900* +% +%AMD90* +4,1,8,-0.028600,0.026100,-0.028600,-0.026100,-0.017200,-0.037500,0.017200,-0.037500,0.028600,-0.026100,0.028600,0.026100,0.017200,0.037500,-0.017200,0.037500,-0.028600,0.026100,0.0* +1,1,0.022760,-0.017200,0.026100* +1,1,0.022760,-0.017200,-0.026100* +1,1,0.022760,0.017200,-0.026100* +1,1,0.022760,0.017200,0.026100* +% +%AMD92* +4,1,8,-0.039400,0.056300,-0.039400,-0.056300,-0.024800,-0.070900,0.024800,-0.070900,0.039400,-0.056300,0.039400,0.056300,0.024800,0.070900,-0.024800,0.070900,-0.039400,0.056300,0.0* +1,1,0.029260,-0.024800,0.056300* +1,1,0.029260,-0.024800,-0.056300* +1,1,0.029260,0.024800,-0.056300* +1,1,0.029260,0.024800,0.056300* +% +%AMD93* +4,1,8,0.021800,0.029600,-0.021800,0.029600,-0.033500,0.017900,-0.033500,-0.017900,-0.021800,-0.029600,0.021800,-0.029600,0.033500,-0.017900,0.033500,0.017900,0.021800,0.029600,0.0* +1,1,0.023360,0.021800,0.017900* +1,1,0.023360,-0.021800,0.017900* +1,1,0.023360,-0.021800,-0.017900* +1,1,0.023360,0.021800,-0.017900* +% +%AMD94* +4,1,8,-0.033100,0.020800,-0.033100,-0.020800,-0.020400,-0.033500,0.020400,-0.033500,0.033100,-0.020800,0.033100,0.020800,0.020400,0.033500,-0.020400,0.033500,-0.033100,0.020800,0.0* +1,1,0.025480,-0.020400,0.020800* +1,1,0.025480,-0.020400,-0.020800* +1,1,0.025480,0.020400,-0.020800* +1,1,0.025480,0.020400,0.020800* +% +%AMD95* +4,1,8,-0.029600,0.021800,-0.029600,-0.021800,-0.017900,-0.033500,0.017900,-0.033500,0.029600,-0.021800,0.029600,0.021800,0.017900,0.033500,-0.017900,0.033500,-0.029600,0.021800,0.0* +1,1,0.023360,-0.017900,0.021800* +1,1,0.023360,-0.017900,-0.021800* +1,1,0.023360,0.017900,-0.021800* +1,1,0.023360,0.017900,0.021800* +% +%AMD96* +4,1,8,-0.021100,0.012600,-0.021100,-0.012600,-0.012000,-0.021700,0.012000,-0.021700,0.021100,-0.012600,0.021100,0.012600,0.012000,0.021700,-0.012000,0.021700,-0.021100,0.012600,0.0* +1,1,0.018280,-0.012000,0.012600* +1,1,0.018280,-0.012000,-0.012600* +1,1,0.018280,0.012000,-0.012600* +1,1,0.018280,0.012000,0.012600* +% +%AMD97* +4,1,8,-0.013000,0.016100,-0.013000,-0.016100,-0.008100,-0.021000,0.008100,-0.021000,0.013000,-0.016100,0.013000,0.016100,0.008100,0.021000,-0.008100,0.021000,-0.013000,0.016100,0.0* +1,1,0.009800,-0.008100,0.016100* +1,1,0.009800,-0.008100,-0.016100* +1,1,0.009800,0.008100,-0.016100* +1,1,0.009800,0.008100,0.016100* +% +%AMD98* +4,1,8,-0.012600,-0.021100,0.012600,-0.021100,0.021700,-0.012000,0.021700,0.012000,0.012600,0.021100,-0.012600,0.021100,-0.021700,0.012000,-0.021700,-0.012000,-0.012600,-0.021100,0.0* +1,1,0.018280,-0.012600,-0.012000* +1,1,0.018280,0.012600,-0.012000* +1,1,0.018280,0.012600,0.012000* +1,1,0.018280,-0.012600,0.012000* +% +%AMD99* +4,1,8,0.006000,-0.023800,0.023800,-0.006000,0.023800,0.006900,0.006900,0.023800,-0.006000,0.023800,-0.023800,0.006000,-0.023800,-0.006900,-0.006900,-0.023800,0.006000,-0.023800,0.0* +1,1,0.018280,-0.000400,-0.017400* +1,1,0.018280,0.017400,0.000400* +1,1,0.018280,0.000400,0.017400* +1,1,0.018280,-0.017400,-0.000400* +% +%AMD101* +4,1,8,-0.008300,-0.029600,0.008300,-0.029600,0.015800,-0.022000,0.015800,0.022000,0.008300,0.029600,-0.008300,0.029600,-0.015800,0.022000,-0.015800,-0.022000,-0.008300,-0.029600,0.0* +1,1,0.015080,-0.008300,-0.022000* +1,1,0.015080,0.008300,-0.022000* +1,1,0.015080,0.008300,0.022000* +1,1,0.015080,-0.008300,0.022000* +% +%AMD102* +4,1,8,0.041400,-0.008300,0.041400,0.008300,0.033900,0.015800,-0.033900,0.015800,-0.041400,0.008300,-0.041400,-0.008300,-0.033900,-0.015800,0.033900,-0.015800,0.041400,-0.008300,0.0* +1,1,0.015080,0.033900,-0.008300* +1,1,0.015080,0.033900,0.008300* +1,1,0.015080,-0.033900,0.008300* +1,1,0.015080,-0.033900,-0.008300* +% +%AMD103* +4,1,8,0.036300,0.005500,0.005500,0.036300,-0.011000,0.036300,-0.036300,0.011000,-0.036300,-0.005500,-0.005500,-0.036300,0.011000,-0.036300,0.036300,-0.011000,0.036300,0.005500,0.0* +1,1,0.023360,0.028100,-0.002800* +1,1,0.023360,-0.002800,0.028100* +1,1,0.023360,-0.028100,0.002800* +1,1,0.023360,0.002800,-0.028100* +% +%AMD112* +4,1,8,-0.010300,0.045400,-0.045400,0.010300,-0.045400,-0.010300,-0.010300,-0.045400,0.010300,-0.045400,0.045400,-0.010300,0.045400,0.010300,0.010300,0.045400,-0.010300,0.045400,0.0* +1,1,0.029260,0.000000,0.035100* +1,1,0.029260,-0.035100,0.000000* +1,1,0.029260,0.000000,-0.035100* +1,1,0.029260,0.035100,0.000000* +% +%ADD74R,0.028000X0.066000*% +%ADD75R,0.022000X0.042000*% +%ADD76R,0.104000X0.046000*% +%ADD77O,0.025780X0.078930*% +%ADD78O,0.078930X0.025780*% +G04~CAMADD=79~8~0.0~0.0~591.8~867.4~91.2~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~868.0~592.0* +%ADD79D79*% +G04~CAMADD=80~8~0.0~0.0~867.4~867.4~118.7~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~868.0~868.0* +%ADD80D80*% +G04~CAMADD=81~3~0.0~0.0~208.7~803.2~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~45.0~628.0~628.0* +%ADD81D81*% +G04~CAMADD=82~3~0.0~0.0~208.7~803.2~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~315.0~628.0~628.0* +%ADD82D82*% +G04~CAMADD=83~8~0.0~0.0~1261.1~1143.0~146.3~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~1144.0~1261.0* +%ADD83D83*% +G04~CAMADD=84~8~0.0~0.0~335.9~513.1~65.6~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~335.9~513.1* +%ADD84D84*% +G04~CAMADD=85~8~0.0~0.0~316.2~591.8~75.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~592.0~316.0* +%ADD85D85*% +%ADD86O,0.086740X0.031620*% +%ADD87O,0.094610X0.031620*% +G04~CAMADD=88~8~0.0~0.0~316.2~828.0~75.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~316.0~828.0* +%ADD88D88*% +%ADD89O,0.031620X0.082800*% +G04~CAMADD=90~8~0.0~0.0~749.3~572.1~113.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~572.0~750.0* +%ADD90D90*% +%ADD91O,0.026240X0.077170*% +G04~CAMADD=92~8~0.0~0.0~1418.6~788.7~146.3~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~788.0~1418.0* +%ADD92D92*% +G04~CAMADD=93~8~0.0~0.0~670.6~591.8~116.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~670.6~591.8* +%ADD93D93*% +G04~CAMADD=94~8~0.0~0.0~670.6~662.7~127.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~662.0~670.0* +%ADD94D94*% +G04~CAMADD=95~8~0.0~0.0~670.6~591.8~116.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~592.0~671.0* +%ADD95D95*% +G04~CAMADD=96~8~0.0~0.0~434.3~422.5~91.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~423.0~434.0* +%ADD96D96*% +G04~CAMADD=97~8~0.0~0.0~420.0~260.0~49.0~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~260.0~420.0* +%ADD97D97*% +G04~CAMADD=98~8~0.0~0.0~434.3~422.5~91.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~434.0~422.0* +%ADD98D98*% +G04~CAMADD=99~8~0.0~0.0~434.3~422.5~91.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~225.0~529.0~528.0* +%ADD99D99*% +%ADD100O,0.082800X0.031620*% +G04~CAMADD=101~8~0.0~0.0~316.2~591.8~75.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~316.0~592.0* +%ADD101D101*% +G04~CAMADD=102~8~0.0~0.0~316.2~828.0~75.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~828.0~316.0* +%ADD102D102*% +G04~CAMADD=103~8~0.0~0.0~670.6~591.8~116.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~315.0~796.0~796.0* +%ADD103D103*% +%ADD104O,0.051310X0.059180*% +%ADD105O,0.114330X0.206850*% +%ADD106C,0.086740*% +%ADD107C,0.067060*% +%ADD108O,0.086740X0.126110*% +%ADD109R,0.067060X0.067060*% +%ADD110C,0.063120*% +%ADD111R,0.067060X0.067060*% +G04~CAMADD=112~8~0.0~0.0~788.7~788.7~146.3~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~45.0~992.0~991.0* +%ADD112D112*% +%ADD113C,0.078870*% +%ADD114C,0.263900*% +%ADD115C,0.244220*% +%LNunisolder52_front-1*% +%LPD*% +G54D74* +X-00542Y00301D03* +Y-0001D03* +Y00068D03* +Y-00088D03* +X-00541Y-00165D03* +X-00542Y00145D03* +Y00223D03* +G54D75* +X-00763Y00182D03* +X-00763Y00129D03* +Y00077D03* +Y-00078D03* +Y-00026D03* +Y00025D03* +G54D76* +X-00884Y0061D03* +Y00516D03* +G54D77* +X01394Y00271D03* +X01368D03* +X01342D03* +X01317D03* +X01189Y00496D03* +X01163D03* +Y00271D03* +X01189D03* +X01215D03* +X0124D03* +X01266D03* +X01291D03* +X01215Y00496D03* +X0124D03* +X01266D03* +X01291D03* +X01317D03* +X01342D03* +X01368D03* +X01394D03* +G54D78* +X00605Y-00985D03* +Y-0096D03* +Y-00934D03* +Y-00909D03* +Y-00883D03* +Y-00857D03* +Y-00832D03* +X0038Y-00985D03* +Y-0096D03* +Y-00934D03* +Y-00909D03* +Y-00883D03* +Y-00857D03* +Y-00832D03* +G54D79* +X01059Y-00198D03* +Y-00107D03* +G54D80* +X00902Y-00153D03* +G54D81* +X-01252Y00074D03* +X-01266Y0006D03* +X-01279Y00047D03* +X-01293Y00033D03* +X-01307Y00019D03* +X-01321Y00005D03* +X-01335Y-00008D03* +X-01349Y-00022D03* +X-01363Y-00036D03* +X-01377Y-0005D03* +X-01391Y-00064D03* +X-01405Y-00078D03* +X-01419Y-00092D03* +X-01433Y-00106D03* +X-01446Y-00119D03* +X-0146Y-00133D03* +X-01151Y-00442D03* +X-01137Y-00428D03* +X-01124Y-00415D03* +X-0111Y-00401D03* +X-01096Y-00387D03* +X-01082Y-00373D03* +X-01068Y-00359D03* +X-01054Y-00345D03* +X-0104Y-00331D03* +X-01026Y-00317D03* +X-01012Y-00303D03* +X-00998Y-00289D03* +X-00984Y-00275D03* +X-0097Y-00261D03* +X-00957Y-00248D03* +X-00943Y-00234D03* +G54D82* +X-0146Y-00234D03* +X-01446Y-00248D03* +X-01433Y-00261D03* +X-01419Y-00275D03* +X-01405Y-00289D03* +X-01391Y-00303D03* +X-01377Y-00317D03* +X-01363Y-00331D03* +X-01349Y-00345D03* +X-01335Y-00359D03* +X-01321Y-00373D03* +X-01307Y-00387D03* +X-01293Y-00401D03* +X-01279Y-00415D03* +X-01266Y-00428D03* +X-01252Y-00442D03* +X-00943Y-00133D03* +X-00957Y-00119D03* +X-0097Y-00106D03* +X-00984Y-00092D03* +X-00998Y-00078D03* +X-01012Y-00064D03* +X-01026Y-0005D03* +X-0104Y-00036D03* +X-01054Y-00022D03* +X-01068Y-00008D03* +X-01082Y00005D03* +X-01096Y00019D03* +X-0111Y00033D03* +X-01124Y00047D03* +X-01137Y0006D03* +X-01151Y00074D03* +G54D83* +X-00883Y-00988D03* +Y-00704D03* +X01428Y-0042D03* +Y-00703D03* +G54D84* +X-00846Y00515D03* +X-00884D03* +X-00921D03* +Y0061D03* +X-00884D03* +X-00846D03* +G54D85* +X-00642Y-01095D03* +Y-0102D03* +X-00725Y-01058D03* +X00823Y-00919D03* +X0074Y-00956D03* +Y-00881D03* +X01061Y-00427D03* +X01144Y-00389D03* +Y-00464D03* +X00848Y-00428D03* +X00765Y-00465D03* +Y-0039D03* +X00848Y-00588D03* +X00765Y-00625D03* +Y-0055D03* +X-01381Y-01162D03* +X-01464Y-01199D03* +Y-01124D03* +X01056Y00813D03* +Y00739D03* +X01138Y00776D03* +X-0112Y-00648D03* +X-01037Y-00611D03* +Y-00686D03* +X01206Y-00563D03* +X01289Y-00526D03* +Y-00601D03* +X01206Y-00424D03* +X01289Y-00386D03* +Y-00461D03* +G54D86* +X00009Y-01237D03* +Y-01187D03* +Y-01137D03* +Y-01087D03* +Y-01037D03* +Y-00987D03* +Y-00937D03* +Y-00887D03* +X-00361Y-01237D03* +Y-01187D03* +Y-01137D03* +Y-01087D03* +Y-01037D03* +Y-00987D03* +Y-00937D03* +Y-00887D03* +G54D87* +X-00857Y00207D03* +Y00157D03* +Y00107D03* +Y00057D03* +Y00007D03* +Y-00043D03* +Y-00093D03* +Y-00143D03* +X-00668Y00207D03* +Y00157D03* +Y00107D03* +Y00057D03* +Y00007D03* +Y-00043D03* +Y-00093D03* +Y-00143D03* +G54D88* +X-006Y0055D03* +X00889Y-01071D03* +G54D89* +X-0055Y0055D03* +X-005D03* +X-0045D03* +X-006Y00736D03* +X-0055D03* +X-005D03* +X-0045D03* +X01042Y00457D03* +X00992D03* +X00942D03* +X00892D03* +X01042Y00272D03* +X00992D03* +X00942D03* +X00892D03* +X00939Y-01071D03* +X00989D03* +X01039D03* +X00889Y-00886D03* +X00939D03* +X00989D03* +X01039D03* +G54D90* +X-01335Y00892D03* +X-01475D03* +G54D91* +X-00383Y00611D03* +X-00357D03* +X-00332D03* +X-00306D03* +X-00383Y00777D03* +X-00357D03* +X-00332D03* +X-00306D03* +G54D92* +X0048Y-01208D03* +X0024D03* +G54D93* +X-0075Y00826D03* +Y00751D03* +X01335Y00687D03* +Y00761D03* +X-00238Y0056D03* +Y00634D03* +X01235Y00056D03* +Y0013D03* +X-01383Y0043D03* +Y00505D03* +X-01461Y00446D03* +Y00371D03* +X01107Y00273D03* +Y00348D03* +X00814Y-00273D03* +Y-00198D03* +X-01445Y00572D03* +Y00647D03* +X00689Y-01039D03* +Y-01114D03* +X-00995Y00163D03* +Y00088D03* +X-01367Y00734D03* +Y00659D03* +X-01422Y-00721D03* +Y-00646D03* +X00228Y-00641D03* +Y-00716D03* +X-00224Y-00661D03* +Y-00736D03* +X-00312Y-00681D03* +Y-00756D03* +X00948Y00116D03* +Y00191D03* +X00983Y00779D03* +Y00854D03* +X00375Y00816D03* +Y00891D03* +X0051Y-00097D03* +Y-00022D03* +X-0075Y006D03* +Y00675D03* +X-00673Y00693D03* +Y00767D03* +X-01048Y00719D03* +Y00644D03* +X-00673Y00549D03* +Y00623D03* +X00814Y-00129D03* +Y-00054D03* +X-00828Y00809D03* +Y00734D03* +X01312Y00056D03* +Y0013D03* +X00702Y0012D03* +Y00195D03* +X00824Y-01015D03* +Y-0109D03* +X00705Y00468D03* +Y00543D03* +X00601Y00462D03* +Y00537D03* +G54D94* +X-00508Y00301D03* +X-00575D03* +X-00508Y-0001D03* +X-00575D03* +X-00508Y00068D03* +X-00575D03* +X-00508Y-00088D03* +X-00575D03* +X-00507Y-00165D03* +X-00575D03* +X-00508Y00145D03* +X-00575D03* +X-00508Y00223D03* +X-00575D03* +G54D95* +X00357Y00743D03* +X00432D03* +X-01279Y-01102D03* +X-01354D03* +X00005Y0051D03* +X0008D03* +X01238Y00716D03* +X01163D03* +X-01307Y00305D03* +X-01382D03* +X00917Y-0036D03* +X00992D03* +X00917Y-00644D03* +X00992D03* +X00917Y-00439D03* +X00992D03* +X00917Y-00565D03* +X00992D03* +X-01063Y0053D03* +X-00988D03* +X-01062Y00452D03* +X-00987D03* +X-01305Y00808D03* +X-01379D03* +X-01311Y-0118D03* +X-01236D03* +X-0145Y0072D03* +X-01525D03* +X00924Y00543D03* +X00999D03* +X-01191Y00895D03* +X-01266D03* +X01131Y00887D03* +X01056D03* +X-01524Y00803D03* +X-0145D03* +X00787Y00187D03* +X00862D03* +Y00109D03* +X00787D03* +X00092Y-01043D03* +X00167D03* +X00092Y-00965D03* +X00167D03* +X00876Y-00786D03* +X00951D03* +X00752Y00937D03* +X00827D03* +X00606D03* +X00681D03* +G54D96* +X00413Y-00437D03* +X00361D03* +X01306Y00196D03* +X01359D03* +X-0098Y-00456D03* +X-00927D03* +X00642Y-00472D03* +X00694D03* +X-01219Y00458D03* +X-01271D03* +X-01196Y-006D03* +X-01144D03* +X-00935Y00668D03* +X-00883D03* +X-00593Y0081D03* +X-0054D03* +X-00797Y00484D03* +X-00745D03* +X01252Y00572D03* +X01305D03* +X00083Y-01214D03* +X00136D03* +X00135Y-01109D03* +X00082D03* +X-00297Y-00409D03* +X-00245D03* +G54D97* +X-0075Y00182D03* +X-00776D03* +X-00776Y00129D03* +X-0075D03* +Y00077D03* +X-00776D03* +Y-00078D03* +X-0075D03* +Y-00026D03* +X-00776D03* +Y00025D03* +X-0075D03* +G54D98* +X-01521Y-00198D03* +Y-00145D03* +X-01388Y-00499D03* +Y-00446D03* +X00677Y-00925D03* +Y-00978D03* +X-00103Y-00387D03* +Y-0044D03* +X0032Y-00794D03* +Y-00741D03* +X01062Y00147D03* +Y002D03* +X00636Y00206D03* +Y00153D03* +X-01061Y00146D03* +Y00093D03* +X-0141Y00038D03* +Y00091D03* +X00814Y-00758D03* +Y-0081D03* +X-01016Y-00733D03* +Y-00786D03* +X-00525Y-01001D03* +Y-01053D03* +X-00755Y-00411D03* +Y-00358D03* +X-00691D03* +Y-00411D03* +X00844Y00455D03* +Y00508D03* +X-00448Y-01D03* +Y-01053D03* +G54D99* +X-01482Y-00323D03* +X-01445Y-0036D03* +G54D100* +X-00029Y-00292D03* +Y-00342D03* +Y-00392D03* +Y-00442D03* +X00155Y-00292D03* +Y-00342D03* +Y-00392D03* +Y-00442D03* +X00603Y00407D03* +Y00357D03* +Y00307D03* +Y00257D03* +X00788Y00407D03* +Y00357D03* +Y00307D03* +G54D101* +X01104Y-00595D03* +X01141Y-00678D03* +X01066D03* +X00514Y-00282D03* +X00551Y-00365D03* +X00476D03* +X00376Y-00282D03* +X00413Y-00365D03* +X00338D03* +X-00373Y-00348D03* +X-00298D03* +X-00336Y-00265D03* +X00274Y00894D03* +X00311Y00811D03* +X00236D03* +X01225D03* +X01187Y00894D03* +X01262D03* +X00586Y-00248D03* +X00548Y-00165D03* +X00623D03* +X-00538Y-01228D03* +X-00575Y-01145D03* +X-00501D03* +G54D102* +X00788Y00257D03* +G54D103* +X-01186Y00592D03* +X-01239Y00539D03* +G54D104* +X-00031Y-01365D03* +X-00062Y-01451D03* +X00031Y-01365D03* +X00062Y-01451D03* +X0D03* +G54D105* +X00163Y-01408D03* +X-00163D03* +G54D106* +X00662Y-00737D03* +Y-0056D03* +X00407D03* +Y-00737D03* +X-00407D03* +Y-0056D03* +X-00662D03* +Y-00737D03* +X00127D03* +Y-0056D03* +X-00127D03* +Y-00737D03* +G54D107* +X00211Y00261D03* +Y00161D03* +Y00061D03* +Y-00039D03* +Y-00139D03* +X00411Y00261D03* +Y00161D03* +Y00061D03* +Y-00039D03* +Y-00139D03* +X-015Y-00716D03* +Y-00616D03* +Y-00516D03* +Y-00416D03* +X00506Y00751D03* +X00606Y00851D03* +Y00751D03* +X00706Y00851D03* +Y00751D03* +X00806Y00851D03* +Y00751D03* +X00906Y00851D03* +Y00751D03* +X-00411Y00261D03* +Y00161D03* +Y00061D03* +Y-00039D03* +Y-00139D03* +X-00211Y00261D03* +Y00161D03* +Y00061D03* +Y-00039D03* +Y-00139D03* +X001D03* +Y-00039D03* +Y00061D03* +Y00161D03* +Y00261D03* +X-001Y-00139D03* +Y-00039D03* +Y00061D03* +Y00161D03* +Y00261D03* +G54D108* +X014Y-00283D03* +Y-00066D03* +X01235D03* +Y-00283D03* +G54D109* +X-015Y-00816D03* +G54D110* +X-00626Y-00393D03* +X-00818D03* +G54D111* +X00506Y00851D03* +G54D112* +X-00725Y-00945D03* +G54D113* +X-00906Y-01126D03* +G54D114* +X-01245Y-00875D03* +X01245D03* +G54D115* +X0Y00875D03* +M02* \ No newline at end of file diff --git a/hardware/gerber/unisolder52_front.txt b/hardware/gerber/unisolder52_front.txt new file mode 100644 index 0000000..ce7af2c --- /dev/null +++ b/hardware/gerber/unisolder52_front.txt @@ -0,0 +1,369 @@ +%FSTAX23Y23*% +%MOIN*% +%SFA1B1*% + +%IPPOS*% +%ADD9500C,0.027990*% +%ADD9501C,0.031500*% +%ADD9502C,0.035430*% +%ADD9503C,0.039370*% +%ADD9504C,0.055120*% +%ADD9505C,0.090550*% +%ADD9506C,0.137800*% +%LNunisolder52_front-1*% +%LPD*% +G54D9500* +X-00062Y-01451D03* +X0D03* +X00062D03* +X00031Y-01365D03* +X-00031D03* +X-01525Y-0116D03* +X-01421Y-01079D03* +X-01409Y-00976D03* +X-01484Y-00988D03* +X-015Y-00901D03* +X-01358Y-00717D03* +X-01359Y-00609D03* +X-01275Y-0057D03* +X-01094Y-00602D03* +X-01079Y-00733D03* +X-01027Y-00866D03* +X-01119Y-01014D03* +X-01075Y-01063D03* +X-01029Y-01119D03* +X-0121Y-01112D03* +X-01166Y-01237D03* +X-01421Y-01248D03* +X-00933Y-0124D03* +X-00704Y-01244D03* +X-00669Y-01146D03* +X-00736Y-01102D03* +X-00728Y-00831D03* +X-00759Y-00731D03* +X-00884Y-00803D03* +X-00887Y-00879D03* +X-01008Y-00997D03* +X-0097Y-00661D03* +X-00925Y-00563D03* +X-00869Y-00589D03* +X-00583Y-00621D03* +X-00508Y-00696D03* +X-00604Y-00797D03* +X-00639Y-00909D03* +X-00499Y-00926D03* +X-00432Y-00824D03* +X-00206Y-00807D03* +X-00049Y-00757D03* +X00039D03* +X00063Y-00663D03* +X-00064Y-00664D03* +X00201Y-00789D03* +X00268Y-0081D03* +X00315Y-00846D03* +X00314Y-00926D03* +X00502Y-00918D03* +X00461Y-01002D03* +X00403Y-01053D03* +X00393Y-012D03* +X00243Y-01104D03* +X00129Y-01162D03* +X00075D03* +X-00068Y-01151D03* +X-00108Y-01259D03* +X00032Y-01284D03* +X00231Y-01308D03* +X00091Y-01507D03* +X-00092D03* +X-00254Y-01157D03* +X-00251Y-00976D03* +X-00455Y-01123D03* +X-00471Y-01249D03* +X00363Y-00674D03* +X00461Y-00677D03* +X00474Y-00784D03* +X006Y-00782D03* +X00618Y-00621D03* +X00815Y-00679D03* +X00996Y-00707D03* +X01056Y-00595D03* +X0119Y-00694D03* +X01332Y-00689D03* +X01525Y-00587D03* +X01501Y-00829D03* +X01429Y-00945D03* +X0141Y-01234D03* +X01181Y-0123D03* +X00981Y-01251D03* +X01003Y-01159D03* +X00967Y-01002D03* +X00888Y-01001D03* +X00927Y-00956D03* +X00753Y-01006D03* +X00756Y-01141D03* +X00778Y-01251D03* +X00562Y-01234D03* +X00622Y-01088D03* +X00624Y-01027D03* +X01112Y-01012D03* +X01066Y-00819D03* +X01082Y-00473D03* +X01063Y-0038D03* +X01045Y-00288D03* +X00984Y-00155D03* +X0089Y-0007D03* +X00877Y-00231D03* +X00732Y-00141D03* +X00638Y-00232D03* +X0063Y-0005D03* +X00614Y00056D03* +X00585Y00156D03* +X00588Y00215D03* +X00689Y0032D03* +X00901Y00338D03* +X00856Y00408D03* +X00792Y00454D03* +X00845Y00596D03* +X00744Y00603D03* +X00685D03* +X00623Y00599D03* +X00666Y00801D03* +X00746D03* +X00961Y00718D03* +X01071Y00617D03* +X0106Y00558D03* +X01094Y00411D03* +X01179Y00425D03* +X01262Y00407D03* +X01354Y00418D03* +Y00358D03* +X01216Y00337D03* +X01194Y00204D03* +X01258D03* +X01417Y00209D03* +X01424Y00048D03* +X01406Y-00176D03* +X01511Y-00167D03* +X01475Y-00321D03* +X01339Y-00423D03* +X01427Y-0053D03* +X01305Y-00122D03* +X01171Y-00126D03* +X01169Y00002D03* +X01045Y-00018D03* +X01017Y00101D03* +X01014Y00203D03* +X00969Y00392D03* +X01149Y00653D03* +X0125Y00621D03* +X01309D03* +X01417Y00636D03* +X0141Y00577D03* +X01457Y00508D03* +X0142Y00707D03* +X01447Y0088D03* +X01351Y00862D03* +X01271Y00834D03* +X01177Y00827D03* +X01116Y00822D03* +X00986Y00956D03* +X00776Y00038D03* +X0074Y-00329D03* +X00692Y-00419D03* +X00585Y-00487D03* +X00822Y-00541D03* +X00462Y-00492D03* +X00292Y-00499D03* +X0018D03* +X00059Y-00417D03* +X00032Y-00321D03* +X00081Y-00277D03* +X-00034Y-00245D03* +X-00091Y-00313D03* +X-00162Y-00298D03* +X-00244Y-00352D03* +X-00292Y-0027D03* +X-00389Y-00247D03* +X-00465Y-00294D03* +X-00442Y-00495D03* +X-00384Y-00449D03* +X-00243Y-00496D03* +X-00052Y-00495D03* +X-00047Y-00089D03* +X-00358Y-0009D03* +X-00763Y-0013D03* +X-00777Y-0031D03* +X-00762Y-00503D03* +X-00872Y-00462D03* +X-00566Y-00458D03* +X-00924Y-00183D03* +X-00937Y00201D03* +X-00899Y00384D03* +X-01002D03* +X-00924Y00462D03* +X-00865Y00461D03* +X-00803Y00533D03* +X-00745Y00539D03* +X-0077Y00381D03* +X-00821Y00666D03* +X-00924Y00726D03* +X-00981Y00744D03* +X-00968Y00828D03* +X-00977Y00595D03* +X-00609Y00623D03* +X-00515Y00651D03* +X-00427Y00618D03* +X-00406Y00508D03* +X-00326Y00522D03* +X-0027Y00501D03* +X-00186Y00508D03* +X-00128Y00576D03* +X-00055Y00495D03* +X00141Y00496D03* +X00194Y00529D03* +X00226Y00588D03* +X00279D03* +X00339Y00645D03* +X00405Y00665D03* +X00297Y00739D03* +X00197Y00681D03* +X00226Y00876D03* +X00155Y00958D03* +X-00161D03* +X-00256Y00873D03* +X-00417Y00827D03* +X-00475Y00802D03* +X-00645Y00827D03* +X-00319Y00692D03* +X00282Y00436D03* +X00405Y00369D03* +X00347Y00285D03* +X00355Y00191D03* +Y00091D03* +X00358Y-00002D03* +X00306Y-00132D03* +X00328Y-00227D03* +X00327Y-00292D03* +X00285Y-00353D03* +X00477Y-00243D03* +X005Y-00166D03* +X00539Y00282D03* +X00537Y00456D03* +X00536Y00517D03* +X00522Y00958D03* +X00439Y00886D03* +X-01058Y00914D03* +X-01083Y00826D03* +X-01176Y00791D03* +X-01303Y00744D03* +X-0141Y00917D03* +X-01187Y0096D03* +X-01134Y00625D03* +X-01171Y00517D03* +X-01116Y00448D03* +X-01177Y00333D03* +X-01274Y00406D03* +X-01397Y0037D03* +X-01445Y00312D03* +X-01403Y00192D03* +X-0117Y00113D03* +X-01054Y00201D03* +X-01108Y-00096D03* +X-01133Y-00164D03* +X-01036Y-0018D03* +X-01089Y-00277D03* +X-01205Y-00251D03* +X-01232Y-00329D03* +X-01279Y-00293D03* +X-01276Y-00202D03* +X-01349Y-00249D03* +X-01353Y-00125D03* +X-01288Y-00076D03* +X-01254Y-00026D03* +X-01194Y-00087D03* +X-01202Y-00394D03* +X-01407Y-00395D03* +X-01437Y-0054D03* +X-0131Y-00513D03* +X-01112Y-00523D03* +X-01469Y-00184D03* +X-01524Y-00088D03* +X-01455Y00511D03* +X-0153Y00657D03* +G54D9501* +X-00818Y-00393D03* +X-00626D03* +G54D9502* +X-015Y-00816D03* +Y-00716D03* +Y-00616D03* +X-00725Y-00945D03* +X-00906Y-01126D03* +X00606Y00751D03* +Y00851D03* +X00706D03* +Y00751D03* +X00806D03* +Y00851D03* +X00906D03* +Y00751D03* +X00506D03* +Y00851D03* +X00411Y00261D03* +Y00161D03* +Y00061D03* +Y-00039D03* +Y-00139D03* +X00211D03* +Y-00039D03* +Y00061D03* +Y00161D03* +Y00261D03* +X001D03* +Y00161D03* +Y00061D03* +Y-00039D03* +Y-00139D03* +X-001D03* +Y-00039D03* +Y00061D03* +Y00161D03* +Y00261D03* +X-00211D03* +Y00161D03* +Y00061D03* +Y-00039D03* +Y-00139D03* +X-00411D03* +Y-00039D03* +Y00061D03* +Y00161D03* +Y00261D03* +X-015Y-00416D03* +Y-00516D03* +G54D9503* +X-00662Y-00737D03* +X-00407D03* +X-00127D03* +X00127D03* +X00407D03* +X00662D03* +Y-0056D03* +X00407D03* +X00127D03* +X-00127D03* +X-00407D03* +X-00662D03* +G54D9504* +X01235Y-00283D03* +X014D03* +Y-00066D03* +X01235D03* +G54D9505* +X-00163Y-01408D03* +X00163D03* +G54D9506* +X-01245Y-00875D03* +X01245D03* +X0Y00875D03* +M02* \ No newline at end of file diff --git a/hardware/gerber/unisolder52_full.gbl b/hardware/gerber/unisolder52_full.gbl new file mode 100644 index 0000000..3d7a94b --- /dev/null +++ b/hardware/gerber/unisolder52_full.gbl @@ -0,0 +1,9357 @@ +%FSTAX25Y25*% +%MOIN*% +%SFA1B1*% + +%IPPOS*% +%AMD88* +4,1,8,-0.029500,0.020700,-0.029500,-0.020700,-0.020700,-0.029500,0.020700,-0.029500,0.029500,-0.020700,0.029500,0.020700,0.020700,0.029500,-0.020700,0.029500,-0.029500,0.020700,0.0* +1,1,0.017720,-0.020700,0.020700* +1,1,0.017720,-0.020700,-0.020700* +1,1,0.017720,0.020700,-0.020700* +1,1,0.017720,0.020700,0.020700* +% +%AMD93* +4,1,8,0.042600,0.007500,0.007500,0.042600,-0.007500,0.042600,-0.042600,0.007500,-0.042600,-0.007500,-0.007500,-0.042600,0.007500,-0.042600,0.042600,-0.007500,0.042600,0.007500,0.0* +1,1,0.021260,0.035100,0.000000* +1,1,0.021260,0.000000,0.035100* +1,1,0.021260,-0.035100,0.000000* +1,1,0.021260,0.000000,-0.035100* +% +%AMD101* +4,1,8,0.025500,0.036400,-0.025500,0.036400,-0.036400,0.025500,-0.036400,-0.025500,-0.025500,-0.036400,0.025500,-0.036400,0.036400,-0.025500,0.036400,0.025500,0.025500,0.036400,0.0* +1,1,0.021860,0.025500,0.025500* +1,1,0.021860,-0.025500,0.025500* +1,1,0.021860,-0.025500,-0.025500* +1,1,0.021860,0.025500,-0.025500* +% +%AMD102* +4,1,8,-0.017500,-0.035000,0.017500,-0.035000,0.035000,-0.017500,0.035000,0.017500,0.017500,0.035000,-0.017500,0.035000,-0.035000,0.017500,-0.035000,-0.017500,-0.017500,-0.035000,0.0* +1,1,0.035000,-0.017500,-0.017500* +1,1,0.035000,0.017500,-0.017500* +1,1,0.035000,0.017500,0.017500* +1,1,0.035000,-0.017500,0.017500* +% +%AMD104* +4,1,8,0.055100,-0.038600,0.055100,0.038600,0.038600,0.055100,-0.038600,0.055100,-0.055100,0.038600,-0.055100,-0.038600,-0.038600,-0.055100,0.038600,-0.055100,0.055100,-0.038600,0.0* +1,1,0.033080,0.038600,-0.038600* +1,1,0.033080,0.038600,0.038600* +1,1,0.033080,-0.038600,0.038600* +1,1,0.033080,-0.038600,-0.038600* +% +%AMD108* +4,1,8,0.043800,0.007700,0.007700,0.043800,-0.007700,0.043800,-0.043800,0.007700,-0.043800,-0.007700,-0.007700,-0.043800,0.007700,-0.043800,0.043800,-0.007700,0.043800,0.007700,0.0* +1,1,0.021860,0.036100,0.000000* +1,1,0.021860,0.000000,0.036100* +1,1,0.021860,-0.036100,0.000000* +1,1,0.021860,0.000000,-0.036100* +% +%AMD109* +4,1,8,-0.068900,0.055100,-0.068900,-0.055100,-0.055100,-0.068900,0.055100,-0.068900,0.068900,-0.055100,0.068900,0.055100,0.055100,0.068900,-0.055100,0.068900,-0.068900,0.055100,0.0* +1,1,0.027560,-0.055100,0.055100* +1,1,0.027560,-0.055100,-0.055100* +1,1,0.027560,0.055100,-0.055100* +1,1,0.027560,0.055100,0.055100* +% +%AMD113* +4,1,8,0.050000,-0.021000,0.050000,0.021000,0.041000,0.030000,-0.041000,0.030000,-0.050000,0.021000,-0.050000,-0.021000,-0.041000,-0.030000,0.041000,-0.030000,0.050000,-0.021000,0.0* +1,1,0.018000,0.041000,-0.021000* +1,1,0.018000,0.041000,0.021000* +1,1,0.018000,-0.041000,0.021000* +1,1,0.018000,-0.041000,-0.021000* +% +%ADD56C,0.025000*% +%ADD57C,0.020000*% +%ADD58C,0.012000*% +%ADD59C,0.050000*% +%ADD62C,0.022000*% +%ADD66C,0.052000*% +%ADD75C,0.100000*% +%ADD76C,0.110240*% +%ADD78C,0.200000*% +%ADD81C,0.160000*% +%ADD82R,0.246060X0.167320*% +%ADD87C,0.059060*% +G04~CAMADD=88~8~0.0~0.0~590.6~590.6~88.6~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~590.0~590.0* +%ADD88D88*% +%ADD89O,0.051180X0.043310*% +%ADD90O,0.196850X0.104330*% +%ADD91C,0.255900*% +%ADD92C,0.236220*% +G04~CAMADD=93~8~0.0~0.0~708.7~708.7~106.3~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~315.0~914.0~913.0* +%ADD93D93*% +%ADD94C,0.070870*% +%ADD95R,0.059060X0.059060*% +%ADD96O,0.118110X0.078740*% +%ADD97R,0.059060X0.059060*% +%ADD98C,0.078740*% +%ADD99C,0.055120*% +%ADD100C,0.072840*% +G04~CAMADD=101~8~0.0~0.0~728.4~728.4~109.3~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~728.4~728.4* +%ADD101D101*% +G04~CAMADD=102~8~0.0~0.0~700.0~700.0~175.0~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~700.0~700.0* +%ADD102D102*% +%ADD103C,0.070000*% +G04~CAMADD=104~8~0.0~0.0~1102.4~1102.4~165.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~1102.0~1102.0* +%ADD104D104*% +%ADD105C,0.110240*% +%ADD106C,0.059060*% +%ADD107C,0.314000*% +G04~CAMADD=108~8~0.0~0.0~728.4~728.4~109.3~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~315.0~940.0~939.0* +%ADD108D108*% +G04~CAMADD=109~8~0.0~0.0~1378.0~1378.0~137.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~1378.0~1378.0* +%ADD109D109*% +%ADD110O,0.078740X0.118110*% +%ADD111C,0.125200*% +%ADD112C,0.050000*% +G04~CAMADD=113~8~0.0~0.0~600.0~1000.0~90.0~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~1000.0~600.0* +%ADD113D113*% +%ADD114C,0.196850*% +%LNunisolder52_full-1*% +%LPD*% +G36* +X067815Y0331693D02* +X0663386Y0316929D01* +Y0301853* +X0661979Y0300619* +X0660367Y0298781* +X0659008Y0296748* +X0657927Y0294555* +X0657141Y029224* +X0656664Y0289841* +X0656504Y0287402* +X0656664Y0284962* +X0657141Y0282563* +X0657927Y0280248* +X0658668Y0278746* +X0651575Y0271654* +X0620079* +X0616142Y027559* +Y0287402* +X0622047Y0293307* +X0622248* +X0623784Y0292671* +X0625465Y0292267* +X0627189Y0292131* +X0628913Y0292267* +X0630594Y0292671* +X0632191Y0293332* +X0633665Y0294236* +X063498Y0295358* +X0636103Y0296673* +X0637006Y0298147* +X0637281Y0298811* +X0637781* +X0637827Y0298699* +X0638616Y0297671* +X0639644Y0296882* +X0640841Y0296387* +X0642126Y0296217* +X0643411Y0296387* +X0644608Y0296882* +X0645636Y0297671* +X0646425Y0298699* +X0646921Y0299896* +X064709Y0301181* +Y0305118* +X0646921Y0306403* +X0646425Y03076* +X0645669Y0308584* +Y0314203* +X0665862Y0334396* +X0666985Y0335711* +X066788Y0337171* +X0670276Y0339567* +X067815Y0331693* +G37* +G36* +X0132544Y0448319D02* +X0131973Y044785D01* +X0131209Y0446918* +X0130641Y0445856* +X0130291Y0444703* +X0130173Y0443504* +X0130291Y0442305* +X0130641Y0441152* +X0131209Y0440089* +X0131973Y0439158* +X0132904Y0438394* +X0133967Y0437826* +X013512Y0437476* +X0136319Y0437358* +X0145571* +X014677Y0437476* +X0147923Y0437826* +X0148986Y0438394* +X0149917Y0439158* +X0150681Y0440089* +X0151249Y0441152* +X0151599Y0442305* +X0151717Y0443504* +X0151599Y0444703* +X0151249Y0445856* +X0150681Y0446918* +X0149917Y044785* +X0149534Y0448164* +X0149683Y0448689* +X0149991Y0448729* +X0161713Y0437008* +X0167618* +X0174508Y0430118* +Y0401575* +X0172539Y0399606* +X015187* +X01471Y0404376* +X0147242Y0404942* +X0147923Y0405149* +X0148986Y0405717* +X0149917Y0406481* +X0150681Y0407412* +X0151249Y0408475* +X0151599Y0409628* +X0151717Y0410827* +X0151599Y0412026* +X0151249Y0413179* +X0150681Y0414241* +X0149917Y0415173* +X0148986Y0415937* +X0147923Y0416505* +X014677Y0416855* +X0145571Y0416973* +X0136319* +X013512Y0416855* +X0133967Y0416505* +X0132904Y0415937* +X0131973Y0415173* +X0131209Y0414241* +X0130641Y0413179* +X0130291Y0412026* +X0130173Y0410827* +X0130291Y0409628* +X0130641Y0408475* +X0131209Y0407412* +X0131973Y0406481* +X0132544Y0406012* +X0132366Y0405512* +X0130217* +X0128248Y040748* +Y044685* +X0130217Y0448819* +X0132366* +X0132544Y0448319* +G37* +G36* +X020659Y0582677D02* +X0206781Y0582215D01* +X0204506Y057994* +X0204044Y0580131* +Y0581018* +X0196339* +Y0573313* +X0204044* +Y0575666* +X0204479Y0575752* +X0204976Y0576084* +X0205831Y0576939* +X0206359Y057676* +X0206438Y057616* +X0206826Y0575222* +X0207443Y0574417* +X0208248Y05738* +X0209186Y0573412* +X0210191Y0573279* +X0211197Y0573412* +X0212134Y05738* +X0212939Y0574417* +X0213557Y0575222* +X0213945Y057616* +X0214077Y0577165* +X0213945Y0578171* +X0213557Y0579108* +X0213188Y0579589* +X0213435Y0580089* +X0216948* +X0217195Y0579589* +X0216826Y0579108* +X0216438Y0578171* +X0216404Y0577915* +X0223979* +X0223945Y0578171* +X0223557Y0579108* +X0223188Y0579589* +X0223435Y0580089* +X0226948* +X0227194Y0579589* +X0226826Y0579108* +X0226438Y0578171* +X0226305Y0577165* +X0226438Y057616* +X0226826Y0575222* +X0227444Y0574417* +X0228248Y05738* +X0229186Y0573412* +X0230191Y0573279* +X0231197Y0573412* +X0232134Y05738* +X0232939Y0574417* +X0233557Y0575222* +X0233709Y0575591* +X0234209Y0575491* +Y0575321* +X0234326Y0574736* +X0234657Y0574239* +X0236562Y0572335* +Y0566465* +X0236678Y056588* +X023701Y0565384* +X0239511Y0562883* +X0240007Y0562552* +X0240592Y0562435* +X0248659* +X0255298Y0555796* +Y0553873* +X0255414Y0553288* +X0255746Y0552792* +X0257006Y0551531* +X0256785Y0551082* +X0256691Y0551095* +X0255804Y0550978* +X0254977Y0550635* +X0254273Y0550096* +X0253635* +X0252775Y0549982* +X0252595Y0550053* +X0252309Y0550273* +X0252321Y0550365* +X0252204Y0551253* +X0251861Y055208* +X0251316Y055279* +X0250606Y0553335* +X0249779Y0553678* +X0248891Y0553795* +X0248004Y0553678* +X0247177Y0553335* +X0246898Y0553122* +X0232373Y0567647* +X0231877Y0567978* +X0231291Y0568095* +X0225925* +X0223073Y0570947* +X0222577Y0571278* +X0221991Y0571395* +X0189325* +X0186227Y0574493* +X0186304Y0574678* +X0186421Y0575565* +X0186304Y0576453* +X0185961Y057728* +X0185416Y057799* +X0184706Y0578535* +X0183879Y0578878* +X0182991Y0578995* +X0182104Y0578878* +X0181277Y0578535* +X0180566Y057799* +X0180021Y057728* +X0179679Y0576453* +X0179562Y0575565* +X0179679Y0574678* +X0180021Y0573851* +X0180566Y057314* +X0181277Y0572596* +X0182104Y0572253* +X0182991Y0572136* +X0183879Y0572253* +X0184064Y057233* +X018761Y0568784* +X0188106Y0568452* +X0188691Y0568336* +X0221358* +X022421Y0565484* +X0224706Y0565152* +X0225291Y0565036* +X0230658* +X0245482Y0550212* +X0245549Y0549708* +X0245075Y0549474* +X0245005Y0549544* +X0244816Y054979* +X024457Y0549979* +X0243388Y0551162* +X0242656Y0551723* +X0241805Y0552075* +X0240891Y0552196* +X0240125Y0552095* +X0225291* +X0224404Y0551978* +X0223577Y0551635* +X0222866Y055109* +X0213266Y054149* +X0212721Y054078* +X0212379Y0539953* +X0212262Y0539065* +Y052441* +X0212236Y0524213* +X0212353Y0523325* +X0212372Y052328* +X0212379Y0523225* +X0212721Y0522398* +X0213266Y0521688* +X0213562Y0521392* +Y051918* +X0201476* +X0200563Y051906* +X0199711Y0518707* +X019898Y0518146* +X0198419Y0517415* +X0198066Y0516563* +X0197989Y0515974* +X0187211Y0505196* +X0187197Y0505199* +X0186431Y0505047* +X0185782Y0504613* +X0182274Y0501105* +X018184Y0500456* +X0181688Y049969* +X018184Y0498924* +X0182274Y0498275* +X0185782Y0494767* +X0186431Y0494333* +X0187197Y0494181* +X0187963Y0494333* +X0188612Y0494767* +X019212Y0498275* +X0192554Y0498924* +X0192706Y049969* +X0192554Y0500456* +X0192515Y0500515* +X0203973Y0511973* +X0204085Y0512119* +X0213562* +Y0502351* +X0213679Y0501463* +X0214021Y0500636* +X0214566Y0499926* +X0220889Y0493603* +X0220871Y0493461* +X0221037Y0492198* +X0221525Y0491021* +X0222219Y0490116* +Y0471215* +X0221525Y0470309* +X0221037Y0469133* +X0220871Y046787* +X0221037Y0466607* +X0221525Y0465431* +X02223Y046442* +X022331Y0463645* +X0224487Y0463158* +X022575Y0462991* +X0227012Y0463158* +X0228189Y0463645* +X0229199Y046442* +X0229975Y0465431* +X0230462Y0466607* +X0230624Y0467835* +X0230641Y0467879* +X0231092Y0468182* +X0231404Y0468053* +X0232291Y0467936* +X0233179Y0468053* +X0234006Y0468396* +X0234716Y046894* +X0235261Y0469651* +X0235604Y0470478* +X0235721Y0471365* +X0235604Y0472253* +X0235261Y047308* +X0234716Y047379* +X0234006Y0474335* +X0233179Y0474678* +X0232291Y0474795* +X0231779Y0474727* +X0231279Y0475139* +Y0489138* +X0232268Y0490127* +X02326Y0490623* +X0232716Y0491209* +Y0495713* +X02326Y0496298* +X0232268Y0496794* +X0229083Y0499979* +X0228587Y0500311* +X0228002Y0500427* +X0226735* +X0222421Y0504741* +Y0510319* +X0222797Y0510648* +X0222891Y0510636* +X0223779Y0510753* +X0224606Y0511096* +X0225316Y051164* +X0225861Y0512351* +X0226204Y0513178* +X0226321Y0514065* +X0226204Y0514953* +X0225861Y051578* +X0225316Y051649* +X0224606Y0517035* +X0223779Y0517378* +X0222891Y0517495* +X0222004Y0517378* +X0221177Y0517035* +X0220921Y0516839* +X0220421Y0517085* +Y0522813* +X0220304Y05237* +X0219961Y0524527* +X0219416Y0525238* +X0219121Y0525533* +Y0533545* +X0219621Y0533792* +X0219877Y0533596* +X0220704Y0533253* +X0221591Y0533136* +X0222479Y0533253* +X0223306Y0533596* +X0224016Y053414* +X0224561Y0534851* +X0224904Y0535678* +X0225021Y0536565* +X0224904Y0537453* +X0224561Y053828* +X0224016Y053899* +X0223909Y0539073* +X0223876Y0539572* +X022744Y0543136* +X0238458* +X024261Y0538984* +X0243106Y0538652* +X0243691Y0538536* +X0252791* +X0253377Y0538652* +X0253873Y0538984* +X0255925Y0541036* +X0261658* +X0261988Y054066* +X0261962Y0540465* +X0262079Y0539578* +X0262421Y0538751* +X0262966Y053804* +X0263677Y0537496* +X0264504Y0537153* +X0265391Y0537036* +X0266279Y0537153* +X0267106Y0537496* +X0267816Y053804* +X0268361Y0538751* +X0268704Y0539578* +X0268821Y0540465* +X0268795Y054066* +X0269125Y0541036* +X0285748* +X0286333Y0541152* +X028683Y0541484* +X0291982Y0546636* +X0294201* +X0307072Y0533765* +X0307568Y0533433* +X0308153Y0533317* +X032439* +X0334462Y0523245* +Y0510907* +X0334208Y0510873* +X0333381Y0510531* +X0332671Y0509986* +X0332126Y0509275* +X0331784Y0508448* +X0331667Y0507561* +X0331784Y0506673* +X0332126Y0505846* +X0332671Y0505136* +X0333381Y0504591* +X0334208Y0504248* +X0335096Y0504131* +X0335984Y0504248* +X0336811Y0504591* +X0337521Y0505136* +X0338066Y0505846* +X0338408Y0506673* +X0338525Y0507561* +X0338408Y0508448* +X0338066Y0509275* +X0337521Y0509986* +Y0523879* +X0337404Y0524464* +X0337073Y052496* +X0327112Y0534921* +X0327273Y0535394* +X0327594Y0535436* +X0328445Y0535789* +X0329176Y053635* +X0329738Y0537081* +X033009Y0537933* +X033021Y0538846* +X033009Y053976* +X0329738Y0540612* +X0329176Y0541343* +X0328445Y0541904* +X0327594Y0542256* +X032668Y0542377* +X0311273* +X0298988Y0554662* +X0298256Y0555223* +X0297405Y0555575* +X0296491Y0555696* +X0289691* +X0288778Y0555575* +X0287926Y0555223* +X0287195Y0554662* +X0282672Y0550139* +X028218Y0550186* +X0281978Y0550612* +X0282161Y0550851* +X0282504Y0551678* +X0282621Y0552565* +X0282504Y0553453* +X0282161Y055428* +X0281616Y055499* +X0280906Y0555535* +X0280079Y0555878* +X0279191Y0555995* +X0278304Y0555878* +X0277477Y0555535* +X0276766Y055499* +X0276221Y055428* +X0275879Y0553453* +X0275762Y0552565* +X027577Y0552507* +X0275395Y0552095* +X0260768* +X0258356Y0554506* +Y055643* +X025824Y0557015* +X0257908Y0557511* +X0250374Y0565046* +X0249877Y0565378* +X0249292Y0565494* +X0241226* +X0239621Y0567099* +Y057285* +X023998Y0573307* +X0240191Y0573279* +X0241197Y0573412* +X0242134Y05738* +X0242939Y0574417* +X0243557Y0575222* +X0243945Y057616* +X0244077Y0577165* +X0243945Y0578171* +X0243557Y0579108* +X0242939Y0579913* +X0242134Y0580531* +X0241197Y0580919* +X0240191Y0581051* +X0239186Y0580919* +X0238248Y0580531* +X0237443Y0579913* +X0237082Y0579442* +X0236424Y0579393* +X0233601Y0582215* +X0233793Y0582677* +X036939* +X0380217Y057185* +Y0437864* +X0379716Y0437739* +X0378024Y0439185* +X0376036Y0440403* +X0373882Y0441295* +X0371616Y0441839* +X0369291Y0442022* +X0366967Y0441839* +X03647Y0441295* +X0362546Y0440403* +X0360559Y0439185* +X0358786Y0437671* +X0357272Y0435898* +X0356054Y043391* +X0355162Y0431756* +X0354617Y042949* +X0354434Y0427165* +X0354617Y0424841* +X0355162Y0422574* +X0356054Y0420421* +X0357272Y0418433* +X0358786Y041666* +X0360559Y0415146* +X0362546Y0413928* +X03647Y0413036* +X0366967Y0412492* +X0369291Y0412309* +X0371616Y0412492* +X0373882Y0413036* +X0376036Y0413928* +X0378024Y0415146* +X0379716Y0416592* +X0380217Y0416467* +Y028248* +X036939Y0271654* +X0164665* +X0153839Y028248* +Y0387795* +X0157776Y0391732* +X0176476* +X0182382Y0397638* +Y0434055* +X0171555Y0444882* +X0164665* +X0153839Y0455709* +Y0572835* +X0163681Y0582677* +X020659* +G37* +G36* +X0668116Y0355123D02* +X0665354Y0352362D01* +X0649606* +X0638779Y0363189* +Y0394685* +X0640748Y0396654* +X0668116* +Y0355123* +G37* +G36* +X0517717Y0578346D02* +Y0509055D01* +X0513023Y0504361* +X0512554Y0504599* +X0512455Y050535* +X0512112Y0506178* +X0511567Y0506888* +X0510857Y0507433* +X051003Y0507775* +X0509142Y0507892* +X0490319* +X0479223Y0518988* +X0478513Y0519533* +X0477686Y0519875* +X0476798Y0519992* +X0439119* +X0425686Y0533425* +Y053453* +X0425548Y0535227* +X0425153Y0535817* +X0424562Y0536212* +X0423865Y0536351* +X0419732* +X0419035Y0536212* +X0418444Y0535817* +X0418049Y0535227* +X0417911Y053453* +Y0530396* +X0418049Y0529699* +X0418444Y0529108* +X0419035Y0528714* +X0419732Y0528575* +X0420836* +X0435274Y0514138* +X0435984Y0513593* +X0436811Y051325* +X0437698Y0513134* +X0475378* +X0486043Y0502468* +X0485836Y0501968* +X0414173* +X040748Y0508661* +Y0578346* +X0414567Y0585433* +X051063* +X0517717Y0578346* +G37* +G36* +X0688976Y0412401D02* +X0687992Y0411417D01* +X0669291* +X0658464Y0422244* +Y045374* +X0660433Y0455709* +X0688976* +Y0412401* +G37* +G36* +X0661979Y0605737D02* +D01* +X0660367Y0603899* +X0659008Y0601866* +X0657927Y0599673* +X0657475Y0598341* +X0656938Y0598314* +X0656386Y0599345* +X0655519Y0600401* +X0654463Y0601268* +X0653623Y0601717* +X0653088Y0602156* +X0651698Y0602899* +X065019Y0603357* +X0648622Y0603511* +X0647054Y0603357* +X0645546Y0602899* +X0644156Y0602156* +X0643621Y0601717* +X0642781Y0601268* +X0641725Y0600401* +X0640858Y0599345* +X0640549Y0598768* +X0638804Y0597023* +X0637804Y0595805* +X0637061Y0594415* +X0636604Y0592907* +X0636449Y0591338* +Y0578503* +X0634737Y057679* +X0634331Y0577091* +X063487Y0578101* +X0635357Y0579705* +X0635522Y0581374* +Y0593281* +X0635774Y0594112* +X0635908Y0595472* +X0635774Y0596832* +X0635377Y059814* +X0634733Y0599345* +X0634208Y0599984* +X063408Y0600224* +X0633016Y060152* +X063172Y0602584* +X0630242Y0603374* +X0628637Y0603861* +X0626968Y0604025* +X0598425* +X0596757Y0603861* +X0595152Y0603374* +X0593673Y0602584* +X0592377Y060152* +X0591196Y0600339* +X0590133Y0599043* +X0589342Y0597564* +X0588855Y059596* +X0588691Y0594291* +Y0575083* +X0588692Y0575072* +Y0572034* +X058823Y0571843* +X0582174Y0577899* +Y0578941* +X0582014Y0580156* +X0581545Y0581288* +X0580799Y058226* +X0579827Y0583006* +X0578695Y0583475* +X057748Y0583635* +X0569764* +X0568549Y0583475* +X0567417Y0583006* +X0566445Y058226* +X0565699Y0581288* +X056523Y0580156* +X056507Y0578941* +Y0571224* +X056523Y057001* +X0565699Y0568878* +X0566445Y0567905* +X0567417Y056716* +X0568549Y0566691* +X0569764Y0566531* +X0570806* +X058145Y0555887* +X0582668Y0554887* +X0584058Y0554144* +X0585566Y0553687* +X0587134Y0553532* +X0630886* +X0632454Y0553687* +X0633962Y0554144* +X0635352Y0554887* +X063657Y0555887* +X0648177Y0567493* +X064924Y0568062* +X0650536Y0569125* +X06516Y0570421* +X065239Y05719* +X0652877Y0573504* +X0653041Y0575173* +X0652877Y0576842* +X0652527Y0577995* +Y0588009* +X0653886Y0589368* +X0654463Y0589677* +X0655519Y0590544* +X0656087Y0591235* +X0656599Y0591071* +X0656664Y059008* +X0657141Y0587682* +X0657927Y0585366* +X0659008Y0583173* +X0660367Y058114* +X0661979Y0579302* +X0663817Y057769* +X066585Y0576331* +X0668043Y057525* +X0670359Y0574464* +X0671935Y057415* +X0671941Y0574122* +X0671894Y0573649* +X0671654* +X0670732Y0573465* +X066995Y0572943* +X0669428Y0572162* +X0669323Y0571633* +X0668251Y0570378* +X0667348Y0568904* +X0666686Y0567306* +X0666283Y0565625* +X0666147Y0563902* +Y0548254* +X0629852Y0511959* +X0620866* +X0619167Y0511825* +X061751Y0511427* +X0615936Y0510775* +X0614483Y0509885* +X0613187Y0508778* +X061208Y0507482* +X061119Y0506029* +X0610537Y0504454* +X061014Y0502797* +X0610006Y0501098* +X061014Y0499399* +X0610537Y0497742* +X061119Y0496168* +X061208Y0494715* +X0613187Y0493419* +X0614483Y0492312* +X0615936Y0491422* +X061751Y049077* +X0619167Y0490372* +X0620866Y0490238* +X064439* +X0646089Y0490372* +X0647746Y049077* +X064932Y0491422* +X0650773Y0492312* +X0652069Y0493419* +X0653176Y0494715* +X0654066Y0496168* +X0654718Y0497742* +X0655116Y0499399* +X065525Y0501098* +X0655116Y0502797* +X0654718Y0504454* +X0654234Y0505623* +X0679805Y0531194* +X0682677* +X0683599Y0531377* +X068438Y0531899* +X0684902Y0532681* +X0685086Y0533602* +Y0536516* +X0685952Y053753* +X0686842Y0538983* +X0687494Y0540557* +X0687892Y0542214* +X0687905Y0542382* +X0688048Y0542977* +X0688184Y0544701* +Y0563902* +X0688048Y0565625* +X0687644Y0567306* +X0686983Y0568904* +X0686079Y0570378* +X0685007Y0571633* +X0684902Y0572162* +X068438Y0572943* +X0683599Y0573465* +X0682677Y0573649* +X0682282* +X0682167Y0573719* +X0680919Y0574236* +X0680937Y057477* +X068235Y057525* +X0684543Y0576331* +X0686576Y057769* +X0688415Y0579302* +X0688976Y057874* +Y0456712* +X0660433* +X0660049Y0456636* +X0659723Y0456418* +X0657755Y045445* +X0657537Y0454124* +X0657461Y045374* +Y0422244* +X0657537Y042186* +X0657755Y0421534* +X0668116Y0411174* +Y0397657* +X0640748* +X0640364Y0397581* +X0640038Y0397363* +X063807Y0395395* +X0637852Y0395069* +X0637776Y0394685* +Y0363189* +X0637852Y0362805* +X063807Y0362479* +X0647053Y0353497* +Y0346751* +X0619398Y0319096* +X0618275Y0317781* +X0617372Y0316307* +X061671Y031471* +X0616306Y0313029* +X0616171Y0311305* +Y030315* +X0616306Y0301426* +X061671Y0299745* +X0617372Y0298147* +X0618275Y0296673* +X0619398Y0295358* +X0620713Y0294236* +X0620892Y0294126* +X062095Y0293629* +X0615432Y0288111* +X0615215Y0287786* +X0615138Y0287402* +Y027559* +X0615215Y0275206* +X0615432Y0274881* +X0618198Y0272115* +X0618006Y0271654* +X0427165* +X0424635Y0274184* +X0426247Y0276022* +X0427606Y0278055* +X0428687Y0280248* +X0429473Y0282563* +X042995Y0284962* +X043011Y0287402* +X042995Y0289841* +X0429473Y029224* +X0428687Y0294555* +X0427606Y0296748* +X0426247Y0298781* +X0424635Y0300619* +X0422797Y0302232* +X0420764Y030359* +X0418571Y0304671* +X0416255Y0305457* +X0413857Y0305934* +X0411417Y0306094* +X0408977Y0305934* +X0406579Y0305457* +X0404264Y0304671* +X0402071Y030359* +X0400038Y0302232* +X03982Y0300619* +X0395669Y030315* +Y0454724* +X03982Y0457255* +X0400038Y0455642* +X0402071Y0454284* +X0404264Y0453202* +X0406579Y0452417* +X0408977Y0451939* +X0411417Y045178* +X0413857Y0451939* +X0416255Y0452417* +X0418571Y0453202* +X0420764Y0454284* +X0422797Y0455642* +X0424635Y0457255* +X0426247Y0459093* +X0427606Y0461126* +X0428687Y0463319* +X0429473Y0465634* +X042995Y0468033* +X043011Y0470472* +X042995Y0472912* +X0429473Y047531* +X0428687Y0477626* +X0427606Y0479819* +X0426247Y0481852* +X0424635Y048369* +X0427165Y048622* +X0526575* +X0533464Y049311* +Y0599409* +X0542323Y0608268* +X0659449* +X0661979Y0605737* +G37* +%LNunisolder52_full-2*% +%LPC*% +G36* +X0478331Y0354353D02* +X0478119Y0354325D01* +X047699Y0353858* +X047602Y0353114* +X0475276Y0352144* +X0474808Y0351015* +X0474781Y0350803* +X0478331* +Y0354353* +G37* +G36* +X0356891Y0340451D02* +X0355886Y0340319D01* +X0354948Y0339931* +X0354144Y0339313* +X0353526Y0338508* +X0353138Y0337571* +X0353005Y0336565* +X0353138Y033556* +X0353526Y0334622* +X0354144Y0333818* +X0354948Y03332* +X0355886Y0332812* +X0356891Y0332679* +X0357897Y0332812* +X0358834Y03332* +X0359639Y0333818* +X0360257Y0334622* +X0360645Y033556* +X0360777Y0336565* +X0360645Y0337571* +X0360257Y0338508* +X0359639Y0339313* +X0358834Y0339931* +X0357897Y0340319* +X0356891Y0340451* +G37* +G36* +X0407642Y0349706D02* +X0406673D01* +Y0345727* +X041249* +X0412452Y0346016* +X0411954Y0347217* +X0411163Y0348248* +X0410132Y0349039* +X040893Y0349537* +X0407642Y0349706* +G37* +G36* +X0480331Y0354353D02* +Y0350803D01* +X0483881* +X0483853Y0351015* +X0483385Y0352144* +X0482641Y0353114* +X0481672Y0353858* +X0480542Y0354325* +X0480331Y0354353* +G37* +G36* +X0626968Y0383436D02* +X0626059Y0383316D01* +X0625211Y0382965* +X0624483Y0382406* +X0623925Y0381678* +X0623574Y0380831* +X0623454Y0379921* +X0623574Y0379012* +X0623925Y0378164* +X0624483Y0377436* +X0624945Y0377082* +Y0356299* +X0625099Y0355525* +X0625501Y0354924* +X0625423Y0354331* +X0625542Y0353421* +X0625893Y0352573* +X0626452Y0351846* +X062718Y0351287* +X0628027Y0350936* +X0628937Y0350816* +X0629847Y0350936* +X0630694Y0351287* +X0631422Y0351846* +X0631981Y0352573* +X0632332Y0353421* +X0632451Y0354331* +X0632332Y035524* +X0631981Y0356088* +X0631422Y0356816* +X0630694Y0357374* +X0629847Y0357725* +X0628992Y0357838* +Y0377082* +X0629454Y0377436* +X0630012Y0378164* +X0630363Y0379012* +X0630483Y0379921* +X0630363Y0380831* +X0630012Y0381678* +X0629454Y0382406* +X0628726Y0382965* +X0627878Y0383316* +X0626968Y0383436* +G37* +G36* +X04945Y0329291D02* +Y0323095D01* +X0500697* +X0500655Y0323518* +X050024Y0324886* +X0499566Y0326147* +X0498658Y0327253* +X0497553Y032816* +X0496292Y0328834* +X0494923Y0329249* +X04945Y0329291* +G37* +G36* +X0322591Y0344995D02* +X0321704Y0344878D01* +X0320877Y0344535* +X0320166Y034399* +X0319621Y034328* +X0319279Y0342453* +X0319162Y0341565* +X0319279Y0340678* +X0319621Y0339851* +X0320166Y0339141* +X0327562Y0331745* +Y0328211* +X03271Y0328019* +X0324355Y0330765* +X0324304Y0331153* +X0323961Y033198* +X0323416Y033269* +X0322706Y0333235* +X0321879Y0333578* +X0320991Y0333695* +X0320104Y0333578* +X0319277Y0333235* +X0318566Y033269* +X0318021Y033198* +X0317679Y0331153* +X0317562Y0330265* +X0317679Y0329378* +X0318021Y0328551* +X0318566Y032784* +X0319277Y0327295* +X0320104Y0326953* +X0320991Y0326836* +X0321879Y0326953* +X0322706Y0327295* +X0323154Y032764* +X0325562Y0325232* +Y0316708* +X0325678Y0316123* +X032601Y0315626* +X0329511Y0312125* +Y0296934* +X0326611Y0294033* +X0326112Y0294066* +X0326016Y029419* +X0325306Y0294735* +X0324479Y0295078* +X0323856Y029516* +X0323677Y0295688* +X0324173Y0296184* +X0324504Y029668* +X0324621Y0297265* +Y0298314* +X0324916Y029854* +X0325461Y0299251* +X0325804Y0300078* +X0325921Y0300965* +X0325804Y0301853* +X0325461Y030268* +X0324916Y030339* +X0324621Y0303617* +Y0305879* +X0325179Y0305953* +X0326006Y0306295* +X0326716Y030684* +X0327261Y0307551* +X0327604Y0308378* +X0327721Y0309265* +X0327604Y0310153* +X0327261Y031098* +X0326716Y031169* +X0326006Y0312235* +X0325179Y0312578* +X0324291Y0312695* +X0323404Y0312578* +X0322577Y0312235* +X0321866Y031169* +X0321321Y031098* +X0320979Y0310153* +X0320862Y0309265* +X0320979Y0308378* +X0321321Y0307551* +X0321562Y0307237* +Y030426* +X0320777Y0303935* +X0320066Y030339* +X0319521Y030268* +X0319179Y0301853* +X0319062Y0300965* +X0319179Y0300078* +X0319521Y0299251* +X0320066Y029854* +X0320777Y0297995* +X0320985Y0297909* +X0321082Y0297419* +X0318664Y0295001* +X0318479Y0295078* +X0317591Y0295195* +X0316704Y0295078* +X0315877Y0294735* +X0315166Y029419* +X0314621Y029348* +X0314279Y0292653* +X0314162Y0291765* +X0314279Y0290878* +X0314621Y0290051* +X0315166Y028934* +X0315877Y0288795* +X0316704Y0288453* +X0317591Y0288336* +X0318479Y0288453* +X0319306Y0288795* +X0320016Y028934* +X0320276Y0289679* +X0320906* +X0321166Y028934* +X0321877Y0288795* +X0322704Y0288453* +X03231Y0288401* +X0323279Y0287873* +X0318401Y0282995* +X0301612* +X028185Y0302757* +X0281965Y0303633* +X0281799Y0304896* +X0281312Y0306072* +X0280536Y0307083* +X0279526Y0307858* +X0278349Y0308346* +X0277087Y0308512* +X027315* +X0271887Y0308346* +X027071Y0307858* +X02697Y0307083* +X0268924Y0306072* +X0268437Y0304896* +X0268271Y0303633* +X0268437Y030237* +X0268924Y0301194* +X02697Y0300183* +X027071Y0299408* +X0271887Y0298921* +X027315Y0298754* +X0276152* +X0297766Y027714* +X0298477Y0276595* +X0299304Y0276253* +X0300191Y0276136* +X0319821* +X0320709Y0276253* +X0321536Y0276595* +X0322246Y027714* +X0337942Y0292836* +X0343891* +X0344779Y0292953* +X0345606Y0293296* +X0346316Y0293841* +X0346861Y0294551* +X0347204Y0295378* +X0347321Y0296265* +X0347204Y0297153* +X0346861Y029798* +X0346316Y029869* +X0345606Y0299235* +X0344779Y0299578* +X0343891Y0299695* +X033837* +Y0314374* +X0338253Y0315261* +X0337911Y0316088* +X0337366Y0316799* +X0334421Y0319744* +Y0333165* +X0334304Y0334053* +X0333961Y033488* +X0333416Y033559* +X0325016Y034399* +X0324306Y0344535* +X0323479Y0344878* +X0322591Y0344995* +G37* +G36* +X0404673Y0349706D02* +X0403705D01* +X0402416Y0349537* +X0401215Y0349039* +X0400184Y0348248* +X0399392Y0347217* +X0398895Y0346016* +X0398857Y0345727* +X0404673* +Y0349706* +G37* +G36* +X021301Y0342604D02* +X0183878D01* +X0183098Y0342449* +X0182436Y0342007* +X018216Y0341731* +X0181678Y0341795* +X0180791Y0341678* +X0179964Y0341335* +X0179253Y034079* +X0178708Y034008* +X0178366Y0339253* +X0178249Y0338365* +X0178366Y0337478* +X0178708Y0336651* +X0179253Y0335941* +X0179964Y0335396* +X0180791Y0335053* +X0181678Y0334936* +X0182566Y0335053* +X0183393Y0335396* +X0184103Y0335941* +X0184648Y0336651* +X0184991Y0337478* +X0185108Y0338365* +X0185248Y0338526* +X0212165* +X0231142Y031955* +X0231056Y0318894* +X0231173Y0318006* +X0231515Y0317179* +X023206Y0316469* +X023277Y0315924* +X0233597Y0315581* +X0234485Y0315464* +X0235373Y0315581* +X02362Y0315924* +X023691Y0316469* +X0237455Y0317179* +X0237797Y0318006* +X0237914Y0318894* +X0237797Y0319781* +X0237455Y0320608* +X023691Y0321319* +X02362Y0321864* +X0235373Y0322206* +X0234485Y0322323* +X0234177Y0322282* +X0214452Y0342007* +X021379Y0342449* +X021301Y0342604* +G37* +G36* +X0501565Y035447D02* +X0496466D01* +X0495656Y0354309* +X0494969Y035385* +X049451Y0353163* +X0494349Y0352352* +Y0347254* +X049451Y0346444* +X0494969Y0345757* +X0495656Y0345298* +X0496466Y0345136* +X0501565* +X0502375Y0345298* +X0503062Y0345757* +X0503521Y0346444* +X0503682Y0347254* +Y0352352* +X0503521Y0353163* +X0503062Y035385* +X0502375Y0354309* +X0501565Y035447* +G37* +G36* +X041249Y0343727D02* +X0406673D01* +Y0339747* +X0407642* +X040893Y0339917* +X0410132Y0340414* +X0411163Y0341206* +X0411954Y0342237* +X0412452Y0343438* +X041249Y0343727* +G37* +G36* +X0429295Y0349691D02* +X0425358D01* +X0424074Y0349521* +X0422876Y0349026* +X0421848Y0348237* +X042106Y0347209* +X0420564Y0346011* +X0420395Y0344727* +X0420564Y0343442* +X042106Y0342245* +X0421848Y0341217* +X0422876Y0340428* +X0424074Y0339932* +X0425358Y0339763* +X0429295* +X043058Y0339932* +X0431777Y0340428* +X0432805Y0341217* +X0433594Y0342245* +X043409Y0343442* +X0434259Y0344727* +X043409Y0346011* +X0433594Y0347209* +X0432805Y0348237* +X0431777Y0349026* +X043058Y0349521* +X0429295Y0349691* +G37* +G36* +X0478331Y0348803D02* +X0474781D01* +X0474808Y0348591* +X0475276Y0347462* +X047602Y0346493* +X047699Y0345749* +X0478119Y0345281* +X0478331Y0345253* +Y0348803* +G37* +G36* +X0483881D02* +X0480331D01* +Y0345253* +X0480542Y0345281* +X0481672Y0345749* +X0482641Y0346493* +X0483385Y0347462* +X0483853Y0348591* +X0483881Y0348803* +G37* +G36* +X0404673Y0343727D02* +X0398857D01* +X0398895Y0343438* +X0399392Y0342237* +X0400184Y0341206* +X0401215Y0340414* +X0402416Y0339917* +X0403705Y0339747* +X0404673* +Y0343727* +G37* +G36* +X0315591Y0340495D02* +X0314704Y0340378D01* +X0313877Y0340035* +X0313166Y033949* +X0312621Y033878* +X0312279Y0337953* +X0312162Y0337065* +X0312279Y0336178* +X0312388Y0335914* +X0312078Y0335451* +X0311962Y0334865* +Y0306765* +X0312078Y030618* +X0312132Y0306099* +X0312062Y0305565* +X0312179Y0304678* +X0312521Y0303851* +X0313066Y030314* +X0313777Y0302595* +X0314604Y0302253* +X0315491Y0302136* +X0316379Y0302253* +X0317206Y0302595* +X0317916Y030314* +X0318461Y0303851* +X0318804Y0304678* +X0318921Y0305565* +X0318804Y0306453* +X0318461Y030728* +X0317916Y030799* +X0317206Y0308535* +X0316379Y0308878* +X0315491Y0308995* +X0315397Y0308982* +X0315021Y0309312* +Y0333332* +X0315397Y0333662* +X0315591Y0333636* +X0316479Y0333753* +X0317306Y0334096* +X0318016Y0334641* +X0318561Y0335351* +X0318904Y0336178* +X0319021Y0337065* +X0318904Y0337953* +X0318561Y033878* +X0318016Y033949* +X0317306Y0340035* +X0316479Y0340378* +X0315591Y0340495* +G37* +G36* +X0366891Y0370451D02* +X0365886Y0370319D01* +X0364948Y0369931* +X0364143Y0369313* +X0363526Y0368508* +X0363138Y0367571* +X0363005Y0366565* +X0363138Y036556* +X0363526Y0364622* +X0364143Y0363818* +X0364948Y03632* +X0365886Y0362812* +X0366891Y0362679* +X0367897Y0362812* +X0368834Y03632* +X0369639Y0363818* +X0370257Y0364622* +X0370645Y036556* +X0370777Y0366565* +X0370645Y0367571* +X0370257Y0368508* +X0369639Y0369313* +X0368834Y0369931* +X0367897Y0370319* +X0366891Y0370451* +G37* +G36* +X0356891Y0380451D02* +X0355886Y0380319D01* +X0354948Y0379931* +X0354144Y0379313* +X0353526Y0378508* +X0353138Y0377571* +X0353005Y0376565* +X0353138Y037556* +X0353526Y0374622* +X0354144Y0373817* +X0354948Y03732* +X0355886Y0372812* +X0356891Y0372679* +X0357897Y0372812* +X0358834Y03732* +X0359639Y0373817* +X0360257Y0374622* +X0360645Y037556* +X0360777Y0376565* +X0360645Y0377571* +X0360257Y0378508* +X0359639Y0379313* +X0358834Y0379931* +X0357897Y0380319* +X0356891Y0380451* +G37* +G36* +X0429295Y0366242D02* +X0428327D01* +Y0362262* +X0434143* +X0434105Y0362551* +X0433608Y0363752* +X0432816Y0364783* +X0431785Y0365575* +X0430584Y0366072* +X0429295Y0366242* +G37* +G36* +X0181591Y0384495D02* +X0180704Y0384378D01* +X0179877Y0384035* +X0179166Y038349* +X0178621Y038278* +X0178279Y0381953* +X0178162Y0381065* +X0178258Y038034* +X0178102Y0380107* +X0177954Y0379365* +Y0370268* +X0177722Y0370035* +X0177302Y0369407* +X0177154Y0368665* +Y0367565* +X0176666Y036719* +X0176121Y036648* +X0175779Y0365653* +X0175662Y0364765* +X0175779Y0363878* +X0176121Y0363051* +X0176666Y036234* +X0177377Y0361795* +X0178204Y0361453* +X0179091Y0361336* +X0179979Y0361453* +X0180806Y0361795* +X0181516Y036234* +X0182061Y0363051* +X0182404Y0363878* +X0182521Y0364765* +X0182404Y0365653* +X0182061Y036648* +X0181516Y036719* +X0181199Y0367434* +X018117Y0368005* +X0181261Y0368095* +X0181681Y0368724* +X0181828Y0369465* +Y0377667* +X0182479Y0377753* +X0183306Y0378096* +X0184016Y0378641* +X0184561Y0379351* +X0184904Y0380178* +X0185021Y0381065* +X0184904Y0381953* +X0184561Y038278* +X0184016Y038349* +X0183306Y0384035* +X0182479Y0384378* +X0181591Y0384495* +G37* +G36* +X0426327Y0366242D02* +X0425358D01* +X0424069Y0366072* +X0422868Y0365575* +X0421837Y0364783* +X0421046Y0363752* +X0420548Y0362551* +X042051Y0362262* +X0426327* +Y0366242* +G37* +G36* +X022575Y0391339D02* +X0224487Y0391173D01* +X022331Y0390686* +X02223Y038991* +X0221525Y03889* +X0221037Y0387723* +X0220871Y0386461* +X0221037Y0385198* +X0221525Y0384021* +X02223Y0383011* +X022331Y0382236* +X0224487Y0381748* +X022575Y0381582* +X0227012Y0381748* +X0228189Y0382236* +X0229199Y0383011* +X0229975Y0384021* +X0230462Y0385198* +X0230628Y0386461* +X0230462Y0387723* +X0229975Y03889* +X0229199Y038991* +X0228189Y0390686* +X0227012Y0391173* +X022575Y0391339* +G37* +G36* +X0287891Y0389951D02* +X0286886Y0389819D01* +X0285948Y0389431* +X0285143Y0388813* +X0284526Y0388008* +X0284138Y0387071* +X0284005Y0386065* +X0284138Y038506* +X0284526Y0384122* +X0285143Y0383317* +X0285948Y03827* +X0286886Y0382312* +X0287891Y0382179* +X0288897Y0382312* +X0289834Y03827* +X0290639Y0383317* +X0291257Y0384122* +X0291645Y038506* +X0291777Y0386065* +X0291645Y0387071* +X0291257Y0388008* +X0290639Y0388813* +X0289834Y0389431* +X0288897Y0389819* +X0287891Y0389951* +G37* +G36* +X0208033Y0391339D02* +X020677Y0391173D01* +X0205594Y0390686* +X0204583Y038991* +X0203808Y03889* +X0203321Y0387723* +X0203154Y0386461* +X0203321Y0385198* +X0203808Y0384021* +X0204583Y0383011* +X0205594Y0382236* +X020677Y0381748* +X0208033Y0381582* +X0209296Y0381748* +X0210472Y0382236* +X0211483Y0383011* +X0212258Y0384021* +X0212746Y0385198* +X0212912Y0386461* +X0212746Y0387723* +X0212258Y03889* +X0211483Y038991* +X0210472Y0390686* +X0209296Y0391173* +X0208033Y0391339* +G37* +G36* +X0370744Y0380418D02* +X0363039D01* +Y0372713* +X0370744* +Y0380418* +G37* +G36* +X0564885Y0391027D02* +X0555785D01* +X0555812Y0390816* +X055628Y0389687* +X0556841Y0388955* +X0556595Y0388455* +X055187* +X055096Y0388335* +X0550113Y0387984* +X0549385Y0387426* +X0541458Y0379499* +X0528047* +X0527138Y0379379* +X052629Y0379028* +X0525562Y0378469* +X0516117Y0369024* +X0515559Y0368297* +X0515208Y0367449* +X0515088Y0366539* +Y036267* +X0514556Y0362314* +X0514097Y0361627* +X0513936Y0360817* +Y0355718* +X0514097Y0354908* +X0514556Y0354221* +X0515243Y0353762* +X0516053Y0353601* +X0521152* +X0521962Y0353762* +X0522649Y0354221* +X0523108Y0354908* +X0523269Y0355718* +Y0360817* +X0523108Y0361627* +X0522649Y0362314* +X0522117Y036267* +Y0365084* +X0529503Y037247* +X0542913* +X0543823Y037259* +X054467Y0372941* +X0545398Y0373499* +X0553326Y0381427* +X0557084* +X0557383Y0381387* +X0573484* +X0574394Y0381507* +X0575242Y0381858* +X0575969Y0382417* +X0577583Y0384031* +X0578142Y0384758* +X0578493Y0385606* +X0578613Y0386516* +X0578493Y0387425* +X0578142Y0388273* +X0577583Y0389001* +X0576856Y0389559* +X0576008Y038991* +X0575098Y039003* +X0574189Y038991* +X0573341Y0389559* +X0572613Y0389001* +X0572029Y0388416* +X0564044* +X0563798Y0388916* +X0564389Y0389687* +X0564857Y0390816* +X0564885Y0391027* +G37* +G36* +X0219691Y0368795D02* +X0218804Y0368678D01* +X0217977Y0368335* +X0217266Y036779* +X0216721Y036708* +X0216379Y0366253* +X0216262Y0365365* +X0216379Y0364478* +X0216721Y0363651* +X0217266Y0362941* +X0217977Y0362396* +X0218162Y0362319* +Y0352892* +X0218278Y0352307* +X021861Y0351811* +X0224412Y0346008* +X0224336Y0345823* +X0224219Y0344935* +X0224336Y0344048* +X0224678Y0343221* +X0225223Y0342511* +X0225933Y0341966* +X022676Y0341623* +X0227648Y0341506* +X0228536Y0341623* +X0229363Y0341966* +X0230073Y0342511* +X0230618Y0343221* +X023096Y0344048* +X0231077Y0344935* +X023096Y0345823* +X0230618Y034665* +X0230073Y034736* +X0229363Y0347905* +X0228536Y0348248* +X0227648Y0348365* +X022676Y0348248* +X0226575Y0348171* +X0221221Y0353526* +Y0358005* +X0221721Y0358175* +X02223Y035742* +X022331Y0356645* +X0224487Y0356158* +X022575Y0355991* +X0227012Y0356158* +X0228189Y0356645* +X0229199Y035742* +X0229975Y0358431* +X0230462Y0359607* +X0230628Y036087* +X0230462Y0362133* +X0229975Y036331* +X0229199Y036432* +X0228189Y0365095* +X0227012Y0365583* +X022575Y0365749* +X0224487Y0365583* +X0223605Y0365217* +X0223469Y0365259* +X0223098Y0365536* +X0223004Y0366253* +X0222661Y036708* +X0222116Y036779* +X0221406Y0368335* +X0220579Y0368678* +X0219691Y0368795* +G37* +G36* +X0426327Y0360262D02* +X042051D01* +X0420548Y0359973* +X0421046Y0358772* +X0421837Y0357741* +X0422868Y035695* +X0424069Y0356452* +X0425358Y0356283* +X0426327* +Y0360262* +G37* +G36* +X0208033Y0365749D02* +X020677Y0365583D01* +X0205594Y0365095* +X0204583Y036432* +X0203808Y036331* +X0203321Y0362133* +X0203154Y036087* +X0203321Y0359607* +X0203808Y0358431* +X0204583Y035742* +X0205594Y0356645* +X020677Y0356158* +X0208033Y0355991* +X0209296Y0356158* +X0210472Y0356645* +X0211483Y035742* +X0212258Y0358431* +X0212746Y0359607* +X0212912Y036087* +X0212746Y0362133* +X0212258Y036331* +X0211483Y036432* +X0210472Y0365095* +X0209296Y0365583* +X0208033Y0365749* +G37* +G36* +X0537287Y0357268D02* +X0533737D01* +X0533765Y0357056* +X0534233Y0355927* +X0534977Y0354957* +X0535947Y0354213* +X0537076Y0353745* +X0537287Y0353717* +Y0357268* +G37* +G36* +X054855Y0362784D02* +X0547641Y0362664D01* +X0546793Y0362313* +X0546065Y0361754* +X0545507Y0361027* +X0545156Y0360179* +X0545036Y0359269* +X0545156Y035836* +X0545194Y0358268* +X0542905Y035598* +X0542481Y0356263* +X054281Y0357056* +X0542837Y0357268* +X0539287* +Y0353717* +X0539499Y0353745* +X0540292Y0354074* +X0540575Y035365* +X0511365Y0324439* +X0510926Y0323783* +X0510772Y0323009* +Y029122* +X0510926Y0290446* +X0511365Y028979* +X0515335Y028582* +Y0280807* +X0523209* +Y0288681* +X0518196* +X0514818Y0292058* +Y0294577* +X0515318Y0294609* +X0515346Y02944* +X0515436Y0293716* +X0515833Y0292759* +X0516464Y0291936* +X0517286Y0291305* +X0518244Y0290908* +X0519272Y0290773* +X0520299Y0290908* +X0521257Y0291305* +X052208Y0291936* +X0522711Y0292759* +X0523107Y0293716* +X0523243Y0294744* +X0523107Y0295772* +X0522711Y0296729* +X052208Y0297552* +X0521257Y0298183* +X0520299Y029858* +X0519272Y0298715* +X0518244Y029858* +X0517286Y0298183* +X0516464Y0297552* +X0515833Y0296729* +X0515436Y0295772* +X0515346Y0295088* +X0515318Y0294879* +X0514818Y0294911* +Y0322171* +X054842Y0355772* +X054855Y0355755* +X054946Y0355875* +X0550308Y0356226* +X0551035Y0356785* +X0551594Y0357512* +X0551945Y035836* +X0552065Y0359269* +X0551945Y0360179* +X0551594Y0361027* +X0551035Y0361754* +X0550308Y0362313* +X054946Y0362664* +X054855Y0362784* +G37* +G36* +X0537287Y0362818D02* +X0537076Y036279D01* +X0535947Y0362322* +X0534977Y0361578* +X0534233Y0360609* +X0533765Y0359479* +X0533737Y0359268* +X0537287* +Y0362818* +G37* +G36* +X0539287D02* +Y0359268D01* +X0542837* +X054281Y0359479* +X0542342Y0360609* +X0541598Y0361578* +X0540628Y0362322* +X0539499Y036279* +X0539287Y0362818* +G37* +G36* +X0356891Y0370451D02* +X0355886Y0370319D01* +X0354948Y0369931* +X0354144Y0369313* +X0353526Y0368508* +X0353138Y0367571* +X0353005Y0366565* +X0353138Y036556* +X0353526Y0364622* +X0354144Y0363818* +X0354948Y03632* +X0355316Y0363048* +X0355217Y0362547* +X0355047* +X0354462Y0362431* +X0353965Y03621* +X0350961Y0359095* +X0345464* +X0345404Y0359553* +X0345061Y036038* +X0344516Y036109* +X0343806Y0361635* +X0342979Y0361978* +X0342091Y0362095* +X0341204Y0361978* +X0340377Y0361635* +X0339666Y036109* +X0339121Y036038* +X0338779Y0359553* +X0338662Y0358665* +X0338779Y0357778* +X0339121Y0356951* +X0339666Y0356241* +X0340025Y0355965* +Y0355465* +X0339666Y035519* +X0339121Y035448* +X0338779Y0353653* +X0338662Y0352765* +X0338779Y0351878* +X0339121Y0351051* +X0339666Y0350341* +X0340377Y0349796* +X0341204Y0349453* +X0342091Y0349336* +X0342979Y0349453* +X0343806Y0349796* +X0344516Y0350341* +X0345061Y0351051* +X0345404Y0351878* +X0345521Y0352765* +X0345413Y0353582* +X0345578Y0353829* +X0345783Y0354036* +X0350961* +X0353965Y0351031* +X0354462Y03507* +X0355047Y0350583* +X0355217* +X0355316Y0350083* +X0354948Y0349931* +X0354144Y0349313* +X0353526Y0348508* +X0353138Y0347571* +X0353005Y0346565* +X0353138Y034556* +X0353526Y0344622* +X0354144Y0343817* +X0354948Y03432* +X0355886Y0342812* +X0356891Y0342679* +X0357897Y0342812* +X0358834Y03432* +X0359639Y0343817* +X0360257Y0344622* +X0360645Y034556* +X0360777Y0346565* +X0360645Y0347571* +X0360257Y0348508* +X0359639Y0349313* +X0358834Y0349931* +X0358466Y0350083* +X0358566Y0350583* +X0359127* +X0359466Y0350141* +X0360177Y0349595* +X0361004Y0349253* +X0361891Y0349136* +X0362779Y0349253* +X0363606Y0349595* +X0364316Y0350141* +X0364861Y0350851* +X0365204Y0351678* +X0365313Y0352508* +X036546Y0352686* +X0365716Y0352882* +X0365886Y0352812* +X0366891Y0352679* +X0367897Y0352812* +X0368834Y03532* +X0369639Y0353818* +X0370257Y0354622* +X0370645Y035556* +X0370777Y0356565* +X0370645Y0357571* +X0370257Y0358508* +X0369639Y0359313* +X0368834Y0359931* +X0367897Y0360319* +X0366891Y0360451* +X0365886Y0360319* +X0365716Y0360249* +X036546Y0360445* +X0365313Y0360623* +X0365204Y0361453* +X0364861Y036228* +X0364316Y036299* +X0363606Y0363535* +X0362779Y0363878* +X0361891Y0363995* +X0361004Y0363878* +X0360177Y0363535* +X0359466Y036299* +X0359127Y0362547* +X0358566* +X0358466Y0363048* +X0358834Y03632* +X0359639Y0363818* +X0360257Y0364622* +X0360645Y036556* +X0360777Y0366565* +X0360645Y0367571* +X0360257Y0368508* +X0359639Y0369313* +X0358834Y0369931* +X0357897Y0370319* +X0356891Y0370451* +G37* +G36* +X0434143Y0360262D02* +X0428327D01* +Y0356283* +X0429295* +X0430584Y0356452* +X0431785Y035695* +X0432816Y0357741* +X0433608Y0358772* +X0434105Y0359973* +X0434143Y0360262* +G37* +G36* +X0407642Y0366226D02* +X0403705D01* +X040242Y0366057* +X0401223Y0365561* +X0400195Y0364772* +X0399406Y0363744* +X039891Y0362547* +X0398741Y0361262* +X039891Y0359978* +X0399406Y035878* +X0400195Y0357752* +X0401223Y0356963* +X040242Y0356468* +X0403705Y0356298* +X0407642* +X0408926Y0356468* +X0410124Y0356963* +X0411152Y0357752* +X041194Y035878* +X0412436Y0359978* +X0412605Y0361262* +X0412436Y0362547* +X041194Y0363744* +X0411152Y0364772* +X0410124Y0365561* +X0408926Y0366057* +X0407642Y0366226* +G37* +G36* +X04925Y0329291D02* +X0492077Y0329249D01* +X0490708Y0328834* +X0489447Y032816* +X0488342Y0327253* +X0487434Y0326147* +X048676Y0324886* +X0486345Y0323518* +X0486304Y0323095* +X04925* +Y0329291* +G37* +G36* +X0475407Y0286094D02* +X0472D01* +Y0282687* +X0472175Y028271* +X0473269Y0283164* +X0474209Y0283885* +X0474931Y0284825* +X0475384Y028592* +X0475407Y0286094* +G37* +G36* +X0194291Y031851D02* +X0191813Y0318314D01* +X0189395Y0317734* +X0187098Y0316782* +X0184978Y0315483* +X0183088Y0313869* +X0181473Y0311978* +X0180174Y0309858* +X0179223Y0307561* +X0178642Y0305144* +X0178447Y0302665* +X0178642Y0300187* +X0179223Y0297769* +X0180174Y0295472* +X0181473Y0293352* +X0183088Y0291462* +X0184978Y0289847* +X0187098Y0288548* +X0189395Y0287597* +X0191813Y0287016* +X0194291Y0286821* +X019677Y0287016* +X0199187Y0287597* +X0201484Y0288548* +X0203604Y0289847* +X0205495Y0291462* +X0207109Y0293352* +X0208408Y0295472* +X020936Y0297769* +X020994Y0300187* +X0210135Y0302665* +X020994Y0305144* +X020936Y0307561* +X0208408Y0309858* +X0207109Y0311978* +X0205495Y0313869* +X0203604Y0315483* +X0201484Y0316782* +X0199187Y0317734* +X019677Y0318314* +X0194291Y031851* +G37* +G36* +X047Y0286094D02* +X0466593D01* +X0466616Y028592* +X0467069Y0284825* +X0467791Y0283885* +X0468731Y0283164* +X0469825Y028271* +X047Y0282687* +Y0286094* +G37* +G36* +X0461Y0291617D02* +X0459829Y0291463D01* +X0458739Y0291011* +X0457802Y0290293* +X0457083Y0289356* +X0456631Y0288265* +X0456477Y0287094* +X0456631Y0285924* +X0457083Y0284833* +X0457802Y0283896* +X0458739Y0283177* +X0459829Y0282726* +X0461Y0282572* +X0462171Y0282726* +X0463261Y0283177* +X0464198Y0283896* +X0464917Y0284833* +X0465369Y0285924* +X0465523Y0287094* +X0465369Y0288265* +X0464917Y0289356* +X0464198Y0290293* +X0463261Y0291011* +X0462171Y0291463* +X0461Y0291617* +G37* +G36* +X0481D02* +X0479829Y0291463D01* +X0478738Y0291011* +X0477802Y0290293* +X0477083Y0289356* +X0476631Y0288265* +X0476477Y0287094* +X0476631Y0285924* +X0477083Y0284833* +X0477802Y0283896* +X0478738Y0283177* +X0479829Y0282726* +X0481Y0282572* +X0482171Y0282726* +X0483261Y0283177* +X0484198Y0283896* +X0484917Y0284833* +X0485369Y0285924* +X0485523Y0287094* +X0485369Y0288265* +X0484917Y0289356* +X0484198Y0290293* +X0483261Y0291011* +X0482171Y0291463* +X0481Y0291617* +G37* +G36* +X0472Y0291502D02* +Y0288094D01* +X0475407* +X0475384Y0288269* +X0474931Y0289364* +X0474209Y0290304* +X0473269Y0291025* +X0472175Y0291479* +X0472Y0291502* +G37* +G36* +X0343491Y0323495D02* +X0342604Y0323378D01* +X0341777Y0323035* +X0341066Y032249* +X0340521Y032178* +X0340179Y0320953* +X0340062Y0320065* +X0340179Y0319178* +X0340521Y0318351* +X0341066Y031764* +X0341777Y0317095* +X0342604Y0316753* +X0343491Y0316636* +X0344379Y0316753* +X0345206Y0317095* +X0345517Y0317334* +X0346703Y0316148* +X0346524Y031562* +X0346204Y0315578* +X0345377Y0315235* +X0344666Y031469* +X0344121Y031398* +X0343779Y0313153* +X0343662Y0312265* +X0343779Y0311378* +X0344121Y0310551* +X0344666Y030984* +X0345377Y0309296* +X0346204Y0308953* +X0347091Y0308836* +X0347415Y0308879* +X0349662Y0306632* +Y0292999* +X0347661Y0290998* +X0343738* +X0343152Y0290881* +X0342656Y029055* +X0341226Y028912* +X0341206Y0289135* +X0340379Y0289478* +X0339491Y0289595* +X0338604Y0289478* +X0337777Y0289135* +X0337066Y028859* +X0336521Y028788* +X0336179Y0287053* +X0336062Y0286165* +X0336179Y0285278* +X0336521Y0284451* +X0337066Y028374* +X0337777Y0283195* +X0338604Y0282853* +X0339491Y0282736* +X0340379Y0282853* +X0341206Y0283195* +X0341892Y0283722* +X0341971Y0283763* +X0342488Y0283664* +X0342966Y028304* +X0343677Y0282495* +X0344504Y0282153* +X0345391Y0282036* +X0346279Y0282153* +X0347106Y0282495* +X0347816Y028304* +X0348361Y0283751* +X0348704Y0284578* +X0348751Y0284933* +X0354273Y0290456* +X0354604Y0290952* +X0354721Y0291537* +Y0308094* +X0354604Y0308679* +X0354273Y0309175* +X0352621Y0310827* +Y0313922* +X0352504Y0314508* +X0352173Y0315004* +X0346892Y0320285* +X0346804Y0320953* +X0346461Y032178* +X0345916Y032249* +X0345206Y0323035* +X0344379Y0323378* +X0343491Y0323495* +G37* +G36* +X047Y0291502D02* +X0469825Y0291479D01* +X0468731Y0291025* +X0467791Y0290304* +X0467069Y0289364* +X0466616Y0288269* +X0466593Y0288094* +X047* +Y0291502* +G37* +G36* +X0277087Y0291976D02* +X0275868D01* +Y0287848* +X0281867* +X0281799Y028836* +X0281312Y0289537* +X0280536Y0290547* +X0279526Y0291323* +X0278349Y029181* +X0277087Y0291976* +G37* +G36* +X0274368D02* +X027315D01* +X0271887Y029181* +X027071Y0291323* +X02697Y0290547* +X0268924Y0289537* +X0268437Y028836* +X026837Y0287848* +X0274368* +Y0291976* +G37* +G36* +X0607813Y0289646D02* +X0604313D01* +X0603599Y0289552* +X0602934Y0289276* +X0602363Y0288838* +X0601925Y0288267* +X0601649Y0287601* +X0601555Y0286888* +Y0283388* +X0601649Y0282674* +X0601925Y0282009* +X0602363Y0281438* +X0602934Y0280999* +X0603599Y0280724* +X0604313Y028063* +X0607813* +X0608527Y0280724* +X0609192Y0280999* +X0609763Y0281438* +X0610201Y0282009* +X0610477Y0282674* +X0610571Y0283388* +Y0286888* +X0610477Y0287601* +X0610201Y0288267* +X0609763Y0288838* +X0609192Y0289276* +X0608527Y0289552* +X0607813Y0289646* +G37* +G36* +X0529272Y0288715D02* +X0528244Y028858D01* +X0527286Y0288183* +X0526464Y0287552* +X0525833Y028673* +X0525436Y0285772* +X0525301Y0284744* +X0525436Y0283716* +X0525833Y0282759* +X0526464Y0281936* +X0527286Y0281305* +X0528244Y0280908* +X0529272Y0280773* +X0530299Y0280908* +X0531257Y0281305* +X053208Y0281936* +X0532711Y0282759* +X0533107Y0283716* +X0533243Y0284744* +X0533107Y0285772* +X0532711Y028673* +X053208Y0287552* +X0531257Y0288183* +X0530299Y028858* +X0529272Y0288715* +G37* +G36* +X0596063Y0289661D02* +X0594892Y0289507D01* +X0593801Y0289055* +X0592865Y0288336* +X0592146Y0287399* +X0591694Y0286308* +X059154Y0285138* +X0591694Y0283967* +X0592146Y0282876* +X0592865Y028194* +X0593801Y0281221* +X0594892Y0280769* +X0596063Y0280615* +X0597234Y0280769* +X0598324Y0281221* +X0599261Y028194* +X059998Y0282876* +X0600432Y0283967* +X0600586Y0285138* +X0600432Y0286308* +X059998Y0287399* +X0599261Y0288336* +X0598324Y0289055* +X0597234Y0289507* +X0596063Y0289661* +G37* +G36* +X0642126Y0288428D02* +X0640841Y0288259D01* +X0639644Y0287763* +X0638616Y0286974* +X0637827Y0285946* +X0637331Y0284749* +X0637162Y0283465* +Y0279527* +X0637331Y0278243* +X0637827Y0277046* +X0638616Y0276018* +X0639644Y0275229* +X0640841Y0274733* +X0642126Y0274564* +X0643411Y0274733* +X0644608Y0275229* +X0645636Y0276018* +X0646425Y0277046* +X0646921Y0278243* +X064709Y0279527* +Y0283465* +X0646921Y0284749* +X0646425Y0285946* +X0645636Y0286974* +X0644608Y0287763* +X0643411Y0288259* +X0642126Y0288428* +G37* +G36* +X0586063Y0289661D02* +X0584892Y0289507D01* +X0583802Y0289055* +X0582865Y0288336* +X0582146Y0287399* +X0581694Y0286308* +X058154Y0285138* +X0581694Y0283967* +X0582146Y0282876* +X0582865Y028194* +X0583802Y0281221* +X0584892Y0280769* +X0586063Y0280615* +X0587234Y0280769* +X0588324Y0281221* +X0589261Y028194* +X058998Y0282876* +X0590432Y0283967* +X0590586Y0285138* +X0590432Y0286308* +X058998Y0287399* +X0589261Y0288336* +X0588324Y0289055* +X0587234Y0289507* +X0586063Y0289661* +G37* +G36* +X0274368Y0286348D02* +X026837D01* +X0268437Y0285835* +X0268924Y0284658* +X02697Y0283648* +X027071Y0282873* +X0271887Y0282385* +X027315Y0282219* +X0274368* +Y0286348* +G37* +G36* +X0275868D02* +Y0282219D01* +X0277087* +X0278349Y0282385* +X0279526Y0282873* +X0280536Y0283648* +X0281312Y0284658* +X0281799Y0285835* +X0281867Y0286348* +X0275868* +G37* +G36* +X0559272Y0288715D02* +X0558244Y028858D01* +X0557286Y0288183* +X0556464Y0287552* +X0555833Y028673* +X0555436Y0285772* +X0555301Y0284744* +X0555436Y0283716* +X0555833Y0282759* +X0556464Y0281936* +X0557286Y0281305* +X0558244Y0280908* +X0559272Y0280773* +X0560299Y0280908* +X0561257Y0281305* +X0562079Y0281936* +X0562711Y0282759* +X0563107Y0283716* +X0563243Y0284744* +X0563107Y0285772* +X0562711Y028673* +X0562079Y0287552* +X0561257Y0288183* +X0560299Y028858* +X0559272Y0288715* +G37* +G36* +X0539272D02* +X0538244Y028858D01* +X0537286Y0288183* +X0536464Y0287552* +X0535833Y028673* +X0535436Y0285772* +X0535301Y0284744* +X0535436Y0283716* +X0535833Y0282759* +X0536464Y0281936* +X0537286Y0281305* +X0538244Y0280908* +X0539272Y0280773* +X0540299Y0280908* +X0541257Y0281305* +X0542079Y0281936* +X0542711Y0282759* +X0543107Y0283716* +X0543243Y0284744* +X0543107Y0285772* +X0542711Y028673* +X0542079Y0287552* +X0541257Y0288183* +X0540299Y028858* +X0539272Y0288715* +G37* +G36* +X0549272D02* +X0548244Y028858D01* +X0547286Y0288183* +X0546464Y0287552* +X0545833Y028673* +X0545436Y0285772* +X0545301Y0284744* +X0545436Y0283716* +X0545833Y0282759* +X0546464Y0281936* +X0547286Y0281305* +X0548244Y0280908* +X0549272Y0280773* +X0550299Y0280908* +X0551257Y0281305* +X0552079Y0281936* +X0552711Y0282759* +X0553107Y0283716* +X0553243Y0284744* +X0553107Y0285772* +X0552711Y028673* +X0552079Y0287552* +X0551257Y0288183* +X0550299Y028858* +X0549272Y0288715* +G37* +G36* +X04525Y0321094D02* +X0446304D01* +X0446345Y0320671* +X044676Y0319303* +X0447434Y0318042* +X0448342Y0316936* +X0449447Y0316029* +X0450708Y0315355* +X0452077Y031494* +X04525Y0314898* +Y0321094* +G37* +G36* +X0460697D02* +X04545D01* +Y0314898* +X0454923Y031494* +X0456292Y0315355* +X0457553Y0316029* +X0458658Y0316936* +X0459565Y0318042* +X046024Y0319303* +X0460655Y0320671* +X0460697Y0321094* +G37* +G36* +X0181557Y0333895D02* +X018067Y0333778D01* +X0179843Y0333435* +X0179132Y033289* +X0178587Y033218* +X0178245Y0331353* +X0178128Y0330465* +X0178245Y0329578* +X0178587Y0328751* +X0179132Y0328041* +X0179843Y0327496* +X018067Y0327153* +X0181557Y0327036* +X0182049Y0327101* +X0182677Y0326681* +X0183457Y0326526* +X0202383* +X0221296Y0307613* +X0221957Y0307171* +X0222738Y0307016* +X0239075* +X0239855Y0307171* +X0240517Y0307613* +X0245141Y0312237* +X0245583Y0312899* +X0245738Y0313679* +Y031814* +X0246124Y0318436* +X0246669Y0319146* +X0247011Y0319973* +X0247128Y0320861* +X0247011Y0321748* +X0246669Y0322576* +X0246124Y0323286* +X0245414Y0323831* +X0244586Y0324173* +X0243699Y032429* +X0242811Y0324173* +X0241984Y0323831* +X0241274Y0323286* +X0240729Y0322576* +X0240386Y0321748* +X024027Y0320861* +X0240386Y0319973* +X0240729Y0319146* +X0241274Y0318436* +X024166Y031814* +Y0314524* +X023823Y0311094* +X0223582* +X0204669Y0330007* +X0204008Y0330449* +X0203227Y0330605* +X0184968* +X018487Y0331353* +X0184527Y033218* +X0183982Y033289* +X0183272Y0333435* +X0182445Y0333778* +X0181557Y0333895* +G37* +G36* +X054124Y0307943D02* +X0540331Y0307824D01* +X0539483Y0307473* +X0538755Y0306914* +X0538197Y0306186* +X0537846Y0305339* +X0537726Y0304429* +X0537802Y0303852* +X0531753Y0297803* +X0531257Y0298183* +X0530299Y029858* +X0529272Y0298715* +X0528244Y029858* +X0527286Y0298183* +X0526464Y0297552* +X0525833Y0296729* +X0525436Y0295772* +X0525301Y0294744* +X0525436Y0293716* +X0525833Y0292759* +X0526464Y0291936* +X0527286Y0291305* +X0528244Y0290908* +X0529272Y0290773* +X0530299Y0290908* +X0531257Y0291305* +X053208Y0291936* +X0532711Y0292759* +X0532923Y0293272* +X0532986Y0293314* +X0534885Y0295213* +X0535333Y0294991* +X0535301Y0294744* +X0535436Y0293716* +X0535833Y0292759* +X0536464Y0291936* +X0537286Y0291305* +X0538244Y0290908* +X0539272Y0290773* +X0540299Y0290908* +X0541257Y0291305* +X0542079Y0291936* +X0542711Y0292759* +X0543107Y0293716* +X0543243Y0294744* +X0543107Y0295772* +X0542711Y0296729* +X0542079Y0297552* +X0541257Y0298183* +X0540299Y029858* +X0539272Y0298715* +X0539024Y0298682* +X0538803Y0299131* +X0540663Y0300991* +X054124Y0300915* +X054215Y0301034* +X0542997Y0301386* +X0543725Y0301944* +X0544284Y0302672* +X0544635Y030352* +X0544755Y0304429* +X0544635Y0305339* +X0544284Y0306186* +X0543725Y0306914* +X0542997Y0307473* +X054215Y0307824* +X054124Y0307943* +G37* +G36* +X0252715Y0308512D02* +X0251496D01* +X0250233Y0308346* +X0249057Y0307858* +X0248046Y0307083* +X0247271Y0306072* +X0246784Y0304896* +X0246716Y0304383* +X0252715* +Y0308512* +G37* +G36* +X04525Y0329291D02* +X0452077Y0329249D01* +X0450708Y0328834* +X0449447Y032816* +X0448342Y0327253* +X0447434Y0326147* +X044676Y0324886* +X0446345Y0323518* +X0446304Y0323095* +X04525* +Y0329291* +G37* +G36* +X04545D02* +Y0323095D01* +X0460697* +X0460655Y0323518* +X046024Y0324886* +X0459565Y0326147* +X0458658Y0327253* +X0457553Y032816* +X0456292Y0328834* +X0454923Y0329249* +X04545Y0329291* +G37* +G36* +X0531102Y0327825D02* +X0530193Y0327706D01* +X0529345Y0327355* +X0528617Y0326796* +X0528059Y0326068* +X0527708Y0325221* +X0527588Y0324311* +X0527708Y0323401* +X0528059Y0322554* +X0528617Y0321826* +X0529345Y0321268* +X0530193Y0320916* +X0531102Y0320797* +X0532012Y0320916* +X053286Y0321268* +X0533548Y0321796* +X0535481* +X0536337Y032094* +X0536249Y0320276* +X0536369Y0319366* +X053672Y0318518* +X0537279Y0317791* +X0538006Y0317232* +X0538854Y0316881* +X0539764Y0316761* +X0540673Y0316881* +X0541521Y0317232* +X0542249Y0317791* +X0542807Y0318518* +X0543158Y0319366* +X0543278Y0320276* +X0543158Y0321185* +X0542807Y0322033* +X0542249Y0322761* +X0541521Y0323319* +X0540673Y032367* +X0539764Y032379* +X0539274Y0323725* +X0537749Y0325249* +X0537093Y0325688* +X0536319Y0325842* +X0534239* +X0534146Y0326068* +X0533587Y0326796* +X053286Y0327355* +X0532012Y0327706* +X0531102Y0327825* +G37* +G36* +X04925Y0321094D02* +X0486304D01* +X0486345Y0320671* +X048676Y0319303* +X0487434Y0318042* +X0488342Y0316936* +X0489447Y0316029* +X0490708Y0315355* +X0492077Y031494* +X04925Y0314898* +Y0321094* +G37* +G36* +X0500697D02* +X04945D01* +Y0314898* +X0494923Y031494* +X0496292Y0315355* +X0497553Y0316029* +X0498658Y0316936* +X0499566Y0318042* +X050024Y0319303* +X0500655Y0320671* +X0500697Y0321094* +G37* +G36* +X0486Y0301617D02* +X0484829Y0301463D01* +X0483739Y0301011* +X0482802Y0300293* +X0482083Y0299356* +X0481631Y0298265* +X0481477Y0297094* +X0481631Y0295924* +X0482083Y0294833* +X0482802Y0293896* +X0483739Y0293178* +X0484829Y0292726* +X0486Y0292571* +X0487171Y0292726* +X0488261Y0293178* +X0489198Y0293896* +X0489917Y0294833* +X0490369Y0295924* +X0490523Y0297094* +X0490369Y0298265* +X0489917Y0299356* +X0489198Y0300293* +X0488261Y0301011* +X0487171Y0301463* +X0486Y0301617* +G37* +G36* +X0475Y0296094D02* +X0471593D01* +X0471616Y029592* +X0472069Y0294825* +X047279Y0293885* +X0473731Y0293164* +X0474825Y029271* +X0475Y0292687* +Y0296094* +G37* +G36* +X0466Y0301617D02* +X0464829Y0301463D01* +X0463738Y0301011* +X0462802Y0300293* +X0462083Y0299356* +X0461631Y0298265* +X0461477Y0297094* +X0461631Y0295924* +X0462083Y0294833* +X0462802Y0293896* +X0463738Y0293178* +X0464829Y0292726* +X0466Y0292571* +X0467171Y0292726* +X0468261Y0293178* +X0469198Y0293896* +X0469917Y0294833* +X0470369Y0295924* +X0470523Y0297094* +X0470369Y0298265* +X0469917Y0299356* +X0469198Y0300293* +X0468261Y0301011* +X0467171Y0301463* +X0466Y0301617* +G37* +G36* +X0549272Y0298715D02* +X0548244Y029858D01* +X0547286Y0298183* +X0546464Y0297552* +X0545833Y0296729* +X0545436Y0295772* +X0545301Y0294744* +X0545436Y0293716* +X0545833Y0292759* +X0546464Y0291936* +X0547286Y0291305* +X0548244Y0290908* +X0549272Y0290773* +X0550299Y0290908* +X0551257Y0291305* +X0552079Y0291936* +X0552711Y0292759* +X0553107Y0293716* +X0553243Y0294744* +X0553107Y0295772* +X0552711Y0296729* +X0552079Y0297552* +X0551257Y0298183* +X0550299Y029858* +X0549272Y0298715* +G37* +G36* +X0559272D02* +X0558244Y029858D01* +X0557286Y0298183* +X0556464Y0297552* +X0555833Y0296729* +X0555436Y0295772* +X0555301Y0294744* +X0555436Y0293716* +X0555833Y0292759* +X0556464Y0291936* +X0557286Y0291305* +X0558244Y0290908* +X0559272Y0290773* +X0560299Y0290908* +X0561257Y0291305* +X0562079Y0291936* +X0562711Y0292759* +X0563107Y0293716* +X0563243Y0294744* +X0563107Y0295772* +X0562711Y0296729* +X0562079Y0297552* +X0561257Y0298183* +X0560299Y029858* +X0559272Y0298715* +G37* +G36* +X0477Y0301502D02* +Y0298095D01* +X0480407* +X0480384Y0298269* +X0479931Y0299364* +X0479209Y0300304* +X0478269Y0301025* +X0477175Y0301479* +X0477Y0301502* +G37* +G36* +X0252715Y0302883D02* +X0246716D01* +X0246784Y030237* +X0247271Y0301194* +X0248046Y0300183* +X0249057Y0299408* +X0250233Y0298921* +X0251496Y0298754* +X0252715* +Y0302883* +G37* +G36* +X0475Y0301502D02* +X0474825Y0301479D01* +X0473731Y0301025* +X047279Y0300304* +X0472069Y0299364* +X0471616Y0298269* +X0471593Y0298095* +X0475* +Y0301502* +G37* +G36* +X0480407Y0296094D02* +X0477D01* +Y0292687* +X0477175Y029271* +X0478269Y0293164* +X0479209Y0293885* +X0479931Y0294825* +X0480384Y029592* +X0480407Y0296094* +G37* +G36* +X0366891Y0350451D02* +X0365886Y0350319D01* +X0364948Y0349931* +X0364143Y0349313* +X0363526Y0348508* +X0363138Y0347571* +X0363005Y0346565* +X0363138Y034556* +X0363526Y0344622* +X0363691Y0344408* +X0363921Y0343851* +X0364466Y0343141* +X0366679Y0340928* +X03665Y03404* +X0365886Y0340319* +X0364948Y0339931* +X0364143Y0339313* +X0363526Y0338508* +X0363138Y0337571* +X0363005Y0336565* +X0363138Y033556* +X0363526Y0334622* +X0364143Y0333818* +X0364948Y03332* +X0365886Y0332812* +X0366891Y0332679* +X0366955Y0332688* +X036726Y0332291* +X036716Y033205* +X0367043Y0331162* +Y0306637* +X0362831Y0302425* +X0362286Y0301715* +X0361944Y0300888* +X0361827Y03* +X0361944Y0299112* +X0362286Y0298285* +X0362831Y0297575* +X0363541Y029703* +X0364368Y0296688* +X0365256Y0296571* +X0366144Y0296688* +X0366971Y029703* +X0367681Y0297575* +X0372897Y0302792* +X0373442Y0303502* +X0373785Y0304329* +X0373902Y0305217* +Y0329742* +X0375669Y0331509* +X0376214Y0332219* +X0376557Y0333046* +X0376673Y0333934* +Y0339213* +X0376557Y03401* +X0376214Y0340927* +X0375669Y0341637* +X0370773Y0346533* +X0370777Y0346565* +X0370645Y0347571* +X0370257Y0348508* +X0369639Y0349313* +X0368834Y0349931* +X0367897Y0350319* +X0366891Y0350451* +G37* +G36* +X0297891Y0389951D02* +X0296886Y0389819D01* +X0295948Y0389431* +X0295144Y0388813* +X0294526Y0388008* +X0294138Y0387071* +X0294005Y0386065* +X0294138Y038506* +X0294526Y0384122* +X0295144Y0383317* +X0295948Y03827* +X0296886Y0382312* +X0297891Y0382179* +X0298897Y0382312* +X0299834Y03827* +X0300639Y0383317* +X0301257Y0384122* +X0301645Y038506* +X0301777Y0386065* +X0301645Y0387071* +X0301257Y0388008* +X0300639Y0388813* +X0299834Y0389431* +X0298897Y0389819* +X0297891Y0389951* +G37* +G36* +X0574622Y0507354D02* +Y0501909D01* +X0580067* +X058004Y0502186* +X0579667Y0503413* +X0579063Y0504545* +X0578249Y0505536* +X0577257Y050635* +X0576126Y0506955* +X0574898Y0507327* +X0574622Y0507354* +G37* +G36* +X0596244D02* +X0595967Y0507327D01* +X059474Y0506955* +X0593609Y050635* +X0592617Y0505536* +X0591804Y0504545* +X0591199Y0503413* +X0590827Y0502186* +X0590799Y0501909* +X0596244* +Y0507354* +G37* +G36* +X055376Y0514901D02* +X0546043D01* +X0545355Y051481* +X0544713Y0514544* +X0544162Y0514121* +X0543739Y051357* +X0543473Y0512929* +X0543383Y051224* +Y0504524* +X0543473Y0503835* +X0543739Y0503193* +X0544162Y0502642* +X0544713Y0502219* +X0545355Y0501954* +X0546043Y0501863* +X055376* +X0554449Y0501954* +X055509Y0502219* +X0555641Y0502642* +X0556064Y0503193* +X055633Y0503835* +X0556421Y0504524* +Y051224* +X055633Y0512929* +X0556064Y051357* +X0555641Y0514121* +X055509Y0514544* +X0554449Y051481* +X055376Y0514901* +G37* +G36* +X0572622Y0507354D02* +X0572345Y0507327D01* +X0571118Y0506955* +X0569987Y050635* +X0568995Y0505536* +X0568181Y0504545* +X0567577Y0503413* +X0567204Y0502186* +X0567177Y0501909* +X0572622* +Y0507354* +G37* +G36* +X0598244D02* +Y0501909D01* +X0603689* +X0603662Y0502186* +X0603289Y0503413* +X0602685Y0504545* +X0601871Y0505536* +X0600879Y050635* +X0599748Y0506955* +X0598521Y0507327* +X0598244Y0507354* +G37* +G36* +X0503498Y0545949D02* +X0502493Y0545817D01* +X0501555Y0545428* +X0500751Y0544811* +X0500133Y0544006* +X0499745Y0543069* +X0499612Y0542063* +X0499745Y0541057* +X0500133Y054012* +X0500751Y0539315* +X0501555Y0538698* +X0502493Y0538309* +X0503498Y0538177* +X0504504Y0538309* +X0505441Y0538698* +X0506246Y0539315* +X0506864Y054012* +X0507252Y0541057* +X0507384Y0542063* +X0507252Y0543069* +X0506864Y0544006* +X0506246Y0544811* +X0505441Y0545428* +X0504504Y0545817* +X0503498Y0545949* +G37* +G36* +X0421048Y0541713D02* +X0418011D01* +X0418045Y0541457* +X0418433Y054052* +X0419051Y0539715* +X0419855Y0539098* +X0420793Y0538709* +X0421048Y0538676* +Y0541713* +G37* +G36* +X024249Y0512714D02* +X0241536Y0512589D01* +X0240646Y051222* +X0239882Y0511634* +X0239297Y0510871* +X0238928Y0509981* +X0238803Y0509027* +X0238928Y0508073* +X0239297Y0507183* +X0239882Y050642* +X0240646Y0505834* +X0241536Y0505465* +X024249Y0505339* +X0243444Y0505465* +X0244334Y0505834* +X0245097Y050642* +X0245683Y0507183* +X0246052Y0508073* +X0246177Y0509027* +X0246052Y0509981* +X0245683Y0510871* +X0245097Y0511634* +X0244334Y051222* +X0243444Y0512589* +X024249Y0512714* +G37* +G36* +X0505565Y0535951D02* +X0501432D01* +X0500735Y0535812* +X0500144Y0535417* +X0499749Y0534827* +X0499611Y053413* +Y0529996* +X0499749Y0529299* +X0500144Y0528709* +X0500735Y0528314* +X0501432Y0528175* +X0505565* +X0506262Y0528314* +X0506853Y0528709* +X0507247Y0529299* +X0507386Y0529996* +Y053413* +X0507247Y0534827* +X0506853Y0535417* +X0506262Y0535812* +X0505565Y0535951* +G37* +G36* +X0229491Y0541795D02* +X0228604Y0541678D01* +X0227777Y0541335* +X0227066Y054079* +X0226521Y054008* +X0226179Y0539253* +X0226062Y0538365* +X0226179Y0537478* +X0226521Y0536651* +X0227066Y053594* +X0227777Y0535395* +X0228604Y0535053* +X0229491Y0534936* +X0230379Y0535053* +X0231206Y0535395* +X0231916Y053594* +X0232233Y0535961* +X0242839Y0525354* +X0243335Y0525023* +X0243921Y0524907* +X0303287* +X0309862Y0518332* +Y0512665* +X0309978Y051208* +X031031Y0511584* +X0316656Y0505238* +X0316579Y0505053* +X0316462Y0504165* +X0316579Y0503278* +X0316921Y0502451* +X0317466Y050174* +X0318177Y0501195* +X0319004Y0500853* +X0319891Y0500736* +X0320779Y0500853* +X0321606Y0501195* +X0322316Y050174* +X0322861Y0502451* +X0323204Y0503278* +X0323321Y0504165* +X0323204Y0505053* +X0322861Y050588* +X0322316Y050659* +X0321606Y0507135* +X0320779Y0507478* +X0319891Y0507595* +X0319004Y0507478* +X0318818Y0507401* +X0312921Y0513299* +Y0518965* +X0312804Y0519551* +X0312473Y0520047* +X0305002Y0527517* +X0304506Y0527849* +X0303921Y0527965* +X0244554* +X0233073Y0539447* +X023259Y053977* +X0232461Y054008* +X0231916Y054079* +X0231206Y0541335* +X0230379Y0541678* +X0229491Y0541795* +G37* +G36* +X0596244Y0499909D02* +X0590799D01* +X0590827Y0499633* +X0591199Y0498405* +X0591804Y0497274* +X0592617Y0496283* +X0593609Y0495469* +X059474Y0494864* +X0595967Y0494492* +X0596244Y0494465* +Y0499909* +G37* +G36* +X0603689D02* +X0598244D01* +Y0494465* +X0598521Y0494492* +X0599748Y0494864* +X0600879Y0495469* +X0601871Y0496283* +X0602685Y0497274* +X0603289Y0498405* +X0603662Y0499633* +X0603689Y0499909* +G37* +G36* +X0572622D02* +X0567177D01* +X0567204Y0499633* +X0567577Y0498405* +X0568181Y0497274* +X0568995Y0496283* +X0569987Y0495469* +X0571118Y0494864* +X0572345Y0494492* +X0572622Y0494465* +Y0499909* +G37* +G36* +X0580067D02* +X0574622D01* +Y0494465* +X0574898Y0494492* +X0576126Y0494864* +X0577257Y0495469* +X0578249Y0496283* +X0579063Y0497274* +X0579667Y0498405* +X058004Y0499633* +X0580067Y0499909* +G37* +G36* +X0256941Y0498915D02* +X0251756D01* +Y0497565* +X0251896Y0496863* +X0252294Y0496268* +X0252889Y049587* +X0253591Y049573* +X0256941* +Y0498915* +G37* +G36* +Y0503601D02* +X0253591D01* +X0252889Y0503461* +X0252294Y0503063* +X0251896Y0502468* +X0251756Y0501765* +Y0500415* +X0256941* +Y0503601* +G37* +G36* +X0261791D02* +X0258441D01* +Y0500415* +X0263627* +Y0501765* +X0263487Y0502468* +X0263089Y0503063* +X0262494Y0503461* +X0261791Y0503601* +G37* +G36* +X0263627Y0498915D02* +X0258441D01* +Y049573* +X0261791* +X0262494Y049587* +X0263089Y0496268* +X0263487Y0496863* +X0263627Y0497565* +Y0498915* +G37* +G36* +X0169102Y0522267D02* +X0167942Y0522114D01* +X0166861Y0521666* +X0165933Y0520954* +X0165221Y0520026* +X0164773Y0518945* +X016462Y0517785* +X0164773Y0516625* +X0165221Y0515545* +X0165933Y0514616* +X0166861Y0513904* +X0167063Y0513821* +Y0502555* +X0167218Y0501774* +X016766Y0501113* +X0168134Y0500638* +X0168232Y04999* +X0168574Y0499073* +X0169119Y0498362* +X0169829Y0497818* +X0170657Y0497475* +X0171544Y0497358* +X0172432Y0497475* +X0173259Y0497818* +X0173969Y0498362* +X0174514Y0499073* +X0174857Y04999* +X0174973Y0500787* +X0174857Y0501675* +X0174514Y0502502* +X0173969Y0503212* +X0173259Y0503757* +X0172432Y05041* +X0171544Y0504217* +X0171517Y0504213* +X0171141Y0504543* +Y0513821* +X0171343Y0513904* +X0172271Y0514616* +X0172983Y0515545* +X0173431Y0516625* +X0173584Y0517785* +X0173431Y0518945* +X0172983Y0520026* +X0172271Y0520954* +X0171343Y0521666* +X0170262Y0522114* +X0169102Y0522267* +G37* +G36* +X0421048Y054625D02* +X0420793Y0546216D01* +X0419855Y0545828* +X0419051Y0545211* +X0418433Y0544406* +X0418045Y0543469* +X0418011Y0543213* +X0421048* +Y054625* +G37* +G36* +X0556347Y0581555D02* +X0550902D01* +Y057611* +X0551178Y0576137* +X0552406Y057651* +X0553537Y0577114* +X0554529Y0577928* +X0555342Y057892* +X0555947Y0580051* +X0556319Y0581279* +X0556347Y0581555* +G37* +G36* +X0548902Y0589D02* +X0548625Y0588973D01* +X0547398Y05886* +X0546266Y0587996* +X0545275Y0587182* +X0544461Y058619* +X0543856Y0585059* +X0543484Y0583832* +X0543457Y0583555* +X0548902* +Y0589* +G37* +G36* +X0223979Y0576415D02* +X0220941D01* +Y0573378* +X0221197Y0573412* +X0222134Y05738* +X0222939Y0574417* +X0223557Y0575222* +X0223945Y057616* +X0223979Y0576415* +G37* +G36* +X0548902Y0581555D02* +X0543457D01* +X0543484Y0581279* +X0543856Y0580051* +X0544461Y057892* +X0545275Y0577928* +X0546266Y0577114* +X0547398Y057651* +X0548625Y0576137* +X0548902Y057611* +Y0581555* +G37* +G36* +X0550902Y0589D02* +Y0583555D01* +X0556347* +X0556319Y0583832* +X0555947Y0585059* +X0555342Y058619* +X0554529Y0587182* +X0553537Y0587996* +X0552406Y05886* +X0551178Y0588973* +X0550902Y0589* +G37* +G36* +X0575772Y0600452D02* +X0574803D01* +X0573514Y0600282* +X0572313Y0599785* +X0571282Y0598993* +X0570491Y0597962* +X0569993Y0596761* +X0569955Y0596472* +X0575772* +Y0600452* +G37* +G36* +X057874D02* +X0577772D01* +Y0596472* +X0583588* +X058355Y0596761* +X0583053Y0597962* +X0582261Y0598993* +X058123Y0599785* +X0580029Y0600282* +X057874Y0600452* +G37* +G36* +X0575772Y0594472D02* +X0569955D01* +X0569993Y0594184* +X0570491Y0592983* +X0571282Y0591951* +X0572313Y059116* +X0573514Y0590662* +X0574803Y0590493* +X0575772* +Y0594472* +G37* +G36* +X0583588D02* +X0577772D01* +Y0590493* +X057874* +X0580029Y0590662* +X058123Y059116* +X0582261Y0591951* +X0583053Y0592983* +X058355Y0594184* +X0583588Y0594472* +G37* +G36* +X0219441Y0576415D02* +X0216404D01* +X0216438Y057616* +X0216826Y0575222* +X0217443Y0574417* +X0218248Y05738* +X0219186Y0573412* +X0219441Y0573378* +Y0576415* +G37* +G36* +X0503498Y0555949D02* +X0502493Y0555817D01* +X0501555Y0555428* +X0500751Y0554811* +X0500133Y0554006* +X0499745Y0553069* +X0499612Y0552063* +X0499745Y0551057* +X0500133Y055012* +X0500751Y0549315* +X0501555Y0548698* +X0502493Y0548309* +X0503498Y0548177* +X0504504Y0548309* +X0505441Y0548698* +X0506246Y0549315* +X0506864Y055012* +X0507252Y0551057* +X0507384Y0552063* +X0507252Y0553069* +X0506864Y0554006* +X0506246Y0554811* +X0505441Y0555428* +X0504504Y0555817* +X0503498Y0555949* +G37* +G36* +X0421798Y0556349D02* +X0420793Y0556216D01* +X0419855Y0555828* +X0419051Y0555211* +X0418433Y0554406* +X0418045Y0553469* +X0417912Y0552463* +X0418045Y0551457* +X0418433Y055052* +X0419051Y0549715* +X0419855Y0549098* +X0420793Y0548709* +X0421798Y0548577* +X0422804Y0548709* +X0423741Y0549098* +X0424546Y0549715* +X0425164Y055052* +X0425552Y0551457* +X0425684Y0552463* +X0425552Y0553469* +X0425164Y0554406* +X0424546Y0555211* +X0423741Y0555828* +X0422804Y0556216* +X0421798Y0556349* +G37* +G36* +X0360891Y0548269D02* +X0360004Y0548152D01* +X0359177Y0547809* +X0358466Y0547264* +X0357921Y0546554* +X0357845Y0546369* +X0348565* +X034798Y0546252* +X0347484Y0545921* +X0345364Y0543801* +X0345179Y0543878* +X0344291Y0543995* +X0343404Y0543878* +X0342577Y0543535* +X0341866Y054299* +X0341321Y054228* +X0340979Y0541453* +X0340862Y0540565* +X0340979Y0539678* +X0341321Y0538851* +X0341866Y053814* +X0342577Y0537596* +X0343404Y0537253* +X0344291Y0537136* +X0345179Y0537253* +X0346006Y0537596* +X0346716Y053814* +X0347261Y0538851* +X0347604Y0539678* +X0347721Y0540565* +X0347604Y0541453* +X0347527Y0541638* +X0349199Y054331* +X0357845* +X0357921Y0543124* +X0358466Y0542414* +X0359177Y0541869* +X0360004Y0541527* +X0360891Y054141* +X0361779Y0541527* +X0362606Y0541869* +X0363316Y0542414* +X0363861Y0543124* +X0364204Y0543952* +X0364321Y0544839* +X0364204Y0545727* +X0363861Y0546554* +X0363316Y0547264* +X0362606Y0547809* +X0361779Y0548152* +X0360891Y0548269* +G37* +G36* +X0446162Y0561402D02* +X044609Y0561392D01* +X0442536* +X0441648Y0561275* +X0440821Y0560933* +X0440111Y0560388* +X0425726Y0546003* +X0425181Y0545293* +X0425128Y0545164* +X0424632Y0545099* +X0424546Y0545211* +X0423741Y0545828* +X0422804Y0546216* +X0422548Y054625* +Y0542463* +Y0538676* +X0422804Y0538709* +X0423741Y0539098* +X0424546Y0539715* +X0425164Y054052* +X0425329Y0540918* +X0425909Y0541013* +X0426437Y0540608* +X0427264Y0540266* +X0428151Y0540149* +X0429039Y0540266* +X0429866Y0540608* +X0430576Y0541153* +X0443956Y0554534* +X0446162* +X0447049Y055465* +X0447876Y0554993* +X0448586Y0555538* +X0449131Y0556248* +X0449474Y0557075* +X0449591Y0557963* +X044959Y0557968* +X0449591Y0557972* +X0449474Y055886* +X0449131Y0559687* +X0448586Y0560397* +X0447876Y0560942* +X0447049Y0561285* +X0446162Y0561402* +G37* +G36* +X0194291Y056751D02* +X0191813Y0567314D01* +X0189395Y0566734* +X0187098Y0565782* +X0184978Y0564483* +X0183088Y0562869* +X0181473Y0560978* +X0180174Y0558858* +X0179223Y0556561* +X0178642Y0554144* +X0178447Y0551665* +X0178642Y0549187* +X0179223Y0546769* +X0180174Y0544472* +X0181473Y0542352* +X0183088Y0540462* +X0184978Y0538847* +X0187098Y0537548* +X0188193Y0537095* +X0188093Y0536595* +X0178296* +X0177916Y053709* +X0177206Y0537635* +X0176379Y0537978* +X0175491Y0538095* +X0174604Y0537978* +X0173777Y0537635* +X0173066Y053709* +X0172521Y053638* +X0172179Y0535553* +X0172062Y0534665* +X0172179Y0533778* +X0172521Y0532951* +X0173066Y053224* +X0173777Y0531696* +X0174604Y0531353* +X0175491Y0531236* +X0176379Y0531353* +X0177206Y0531696* +X0177916Y053224* +X0178461Y0532951* +X0178704Y0533536* +X0200991* +X0201577Y0533652* +X0202073Y0533984* +X0210573Y0542484* +X0210904Y054298* +X0211021Y0543565* +Y0544932* +X0223325Y0557236* +X0227183* +X0227503Y0556463* +X0228048Y0555753* +X0228758Y0555208* +X0229585Y0554865* +X0230472Y0554749* +X023136Y0554865* +X0232187Y0555208* +X0232897Y0555753* +X0233442Y0556463* +X0233785Y055729* +X0233902Y0558178* +X0233785Y0559065* +X0233442Y0559893* +X0232897Y0560603* +X0232187Y0561148* +X023136Y056149* +X0230472Y0561607* +X0229585Y056149* +X0228758Y0561148* +X0228048Y0560603* +X0227811Y0560295* +X0222691* +X0222106Y0560178* +X022161Y0559847* +X0210273Y054851* +X0209836Y0548754* +X020994Y0549187* +X0210135Y0551665* +X020994Y0554144* +X020936Y0556561* +X0208408Y0558858* +X0207109Y0560978* +X0205495Y0562869* +X0203604Y0564483* +X0201484Y0565782* +X0199187Y0566734* +X019677Y0567314* +X0194291Y056751* +G37* +G36* +X0503498Y0575949D02* +X0502493Y0575816D01* +X0501555Y0575428* +X0500751Y0574811* +X0500133Y0574006* +X0499745Y0573069* +X0499612Y0572063* +X0499745Y0571057* +X0500133Y057012* +X0500751Y0569315* +X0501555Y0568698* +X0502493Y0568309* +X0503498Y0568177* +X0504504Y0568309* +X0505441Y0568698* +X0506246Y0569315* +X0506864Y057012* +X0507252Y0571057* +X0507384Y0572063* +X0507252Y0573069* +X0506864Y0574006* +X0506246Y0574811* +X0505441Y0575428* +X0504504Y0575816* +X0503498Y0575949* +G37* +G36* +X0421798Y0576349D02* +X0420793Y0576217D01* +X0419855Y0575828* +X0419051Y0575211* +X0418433Y0574406* +X0418045Y0573469* +X0417912Y0572463* +X0418045Y0571457* +X0418433Y057052* +X0419051Y0569715* +X0419855Y0569098* +X0420793Y0568709* +X0421798Y0568577* +X0422804Y0568709* +X0423741Y0569098* +X0424546Y0569715* +X0425164Y057052* +X0425552Y0571457* +X0425684Y0572463* +X0425552Y0573469* +X0425164Y0574406* +X0424546Y0575211* +X0423741Y0575828* +X0422804Y0576217* +X0421798Y0576349* +G37* +G36* +X0503498Y0565949D02* +X0502493Y0565816D01* +X0501555Y0565428* +X0500751Y0564811* +X0500133Y0564006* +X0499745Y0563069* +X0499612Y0562063* +X0499745Y0561057* +X0500133Y056012* +X0500751Y0559315* +X0501555Y0558698* +X0502493Y0558309* +X0503498Y0558177* +X0504504Y0558309* +X0505441Y0558698* +X0506246Y0559315* +X0506864Y056012* +X0507252Y0561057* +X0507384Y0562063* +X0507252Y0563069* +X0506864Y0564006* +X0506246Y0564811* +X0505441Y0565428* +X0504504Y0565816* +X0503498Y0565949* +G37* +G36* +X0421798Y0566349D02* +X0420793Y0566217D01* +X0419855Y0565828* +X0419051Y0565211* +X0418433Y0564406* +X0418045Y0563469* +X0417912Y0562463* +X0418045Y0561457* +X0418433Y056052* +X0419051Y0559715* +X0419855Y0559098* +X0420793Y0558709* +X0421798Y0558577* +X0422804Y0558709* +X0423741Y0559098* +X0424546Y0559715* +X0425164Y056052* +X0425552Y0561457* +X0425684Y0562463* +X0425552Y0563469* +X0425164Y0564406* +X0424546Y0565211* +X0423741Y0565828* +X0422804Y0566217* +X0421798Y0566349* +G37* +G36* +X024249Y0493502D02* +X0241536Y0493376D01* +X0240646Y0493008* +X0239882Y0492422* +X0239297Y0491658* +X0238928Y0490769* +X0238803Y0489814* +X0238928Y048886* +X0239297Y0487971* +X0239882Y0487207* +X0240646Y0486621* +X0241536Y0486253* +X024249Y0486127* +X0243444Y0486253* +X0244334Y0486621* +X0245097Y0487207* +X0245683Y0487971* +X0246052Y048886* +X0246177Y0489814* +X0246052Y0490769* +X0245683Y0491658* +X0245097Y0492422* +X0244334Y0493008* +X0243444Y0493376* +X024249Y0493502* +G37* +G36* +X0562156Y0416427D02* +X0494257D01* +Y0405061* +X0562156* +Y0416427* +G37* +G36* +X0307454Y0410033D02* +X030654Y0409912D01* +X0305689Y040956* +X0304958Y0408999* +X0302252Y0406293* +X0301724Y0406472* +X0301645Y0407071* +X0301257Y0408008* +X0300639Y0408813* +X0299834Y0409431* +X0298897Y0409819* +X0297891Y0409951* +X0296886Y0409819* +X0295948Y0409431* +X0295144Y0408813* +X0294526Y0408008* +X0294138Y0407071* +X0294005Y0406065* +X0294138Y040506* +X0294526Y0404122* +X0295144Y0403317* +X0295948Y04027* +X0296886Y0402312* +X0297485Y0402233* +X0297664Y0401705* +X0297225Y0401266* +X0279462* +X0278549Y0401146* +X0277697Y0400794* +X0276966Y0400233* +X0266329Y0389596* +X0264091* +X0263178Y0389475* +X0262326Y0389123* +X0261595Y0388562* +X0254995Y0381962* +X0254434Y038123* +X0254081Y0380379* +X0253961Y0379465* +X0254081Y0378552* +X0254434Y03777* +X0254995Y0376969* +X0255726Y0376408* +X0256578Y0376056* +X0257491Y0375935* +X0258405Y0376056* +X0259256Y0376408* +X0259988Y0376969* +X0265554Y0382535* +X0266346* +X0266886Y0382312* +X0267891Y0382179* +X0268897Y0382312* +X0269834Y03827* +X0270639Y0383317* +X0271257Y0384122* +X0271551Y0384832* +X027361Y0386891* +X0274083Y0386658* +X0274005Y0386065* +X0274138Y038506* +X0274526Y0384122* +X0275144Y0383317* +X0275948Y03827* +X0276886Y0382312* +X0277891Y0382179* +X0278897Y0382312* +X0279834Y03827* +X0280639Y0383317* +X0281257Y0384122* +X0281645Y038506* +X0281777Y0386065* +X0281645Y0387071* +X0281257Y0388008* +X0280639Y0388813* +X0279834Y0389431* +X0278897Y0389819* +X0277891Y0389951* +X0277299Y0389873* +X0277065Y0390347* +X0280925Y0394206* +X0298688* +X0299602Y0394326* +X0300453Y0394679* +X0301184Y039524* +X0308159Y0402214* +X0308897Y0402312* +X0309834Y04027* +X0310639Y0403317* +X0311257Y0404122* +X0311645Y040506* +X0311777Y0406065* +X0311645Y0407071* +X0311257Y0408008* +X0310639Y0408813* +X0309834Y0409431* +X0308897Y0409819* +X0308452Y0409877* +X0308368Y0409912* +X0307454Y0410033* +G37* +G36* +X0277891Y0409951D02* +X0276886Y0409819D01* +X0275948Y0409431* +X0275144Y0408813* +X0274526Y0408008* +X0274138Y0407071* +X0274005Y0406065* +X0274138Y040506* +X0274526Y0404122* +X0275144Y0403317* +X0275948Y04027* +X0276886Y0402312* +X0277891Y0402179* +X0278897Y0402312* +X0279834Y04027* +X0280639Y0403317* +X0281257Y0404122* +X0281645Y040506* +X0281777Y0406065* +X0281645Y0407071* +X0281257Y0408008* +X0280639Y0408813* +X0279834Y0409431* +X0278897Y0409819* +X0277891Y0409951* +G37* +G36* +X0287891D02* +X0286886Y0409819D01* +X0285948Y0409431* +X0285143Y0408813* +X0284526Y0408008* +X0284138Y0407071* +X0284005Y0406065* +X0284138Y040506* +X0284526Y0404122* +X0285143Y0403317* +X0285948Y04027* +X0286886Y0402312* +X0287891Y0402179* +X0288897Y0402312* +X0289834Y04027* +X0290639Y0403317* +X0291257Y0404122* +X0291645Y040506* +X0291777Y0406065* +X0291645Y0407071* +X0291257Y0408008* +X0290639Y0408813* +X0289834Y0409431* +X0288897Y0409819* +X0287891Y0409951* +G37* +G36* +X0626378Y0428514D02* +X0625468Y0428395D01* +X0624621Y0428043* +X0623893Y0427485* +X0623334Y0426757* +X0622983Y042591* +X0622864Y0425* +X0622983Y042409* +X0623334Y0423243* +X0623893Y0422515* +X0624621Y0421956* +X0625468Y0421605* +X0626378Y0421486* +X0627287Y0421605* +X0628135Y0421956* +X0628863Y0422515* +X0629217Y0422977* +X0635186* +X0645184Y0412979* +X0645108Y0412401* +X0645227Y0411492* +X0645578Y0410644* +X0646137Y0409916* +X0646865Y0409358* +X0647713Y0409007* +X0648622Y0408887* +X0649532Y0409007* +X0650379Y0409358* +X0651107Y0409916* +X0651665Y0410644* +X0652017Y0411492* +X0652136Y0412401* +X0652017Y0413311* +X0651665Y0414159* +X0651107Y0414887* +X0650379Y0415445* +X0649532Y0415796* +X0648622Y0415916* +X0648045Y041584* +X0637454Y0426431* +X0636798Y0426869* +X0636024Y0427023* +X0629217* +X0628863Y0427485* +X0628135Y0428043* +X0627287Y0428395* +X0626378Y0428514* +G37* +G36* +X0287891Y0421051D02* +X0286886Y0420919D01* +X0285948Y0420531* +X0285143Y0419913* +X0284526Y0419108* +X0284138Y0418171* +X0284005Y0417165* +X0284138Y041616* +X0284526Y0415222* +X0285143Y0414418* +X0285948Y04138* +X0286886Y0413412* +X0287891Y0413279* +X0288897Y0413412* +X0289834Y04138* +X0290639Y0414418* +X0291257Y0415222* +X0291645Y041616* +X0291777Y0417165* +X0291645Y0418171* +X0291257Y0419108* +X0290639Y0419913* +X0289834Y0420531* +X0288897Y0420919* +X0287891Y0421051* +G37* +G36* +X0297891D02* +X0296886Y0420919D01* +X0295948Y0420531* +X0295144Y0419913* +X0294526Y0419108* +X0294138Y0418171* +X0294005Y0417165* +X0294138Y041616* +X0294526Y0415222* +X0295144Y0414418* +X0295948Y04138* +X0296886Y0413412* +X0297891Y0413279* +X0298897Y0413412* +X0299834Y04138* +X0300639Y0414418* +X0301257Y0415222* +X0301645Y041616* +X0301777Y0417165* +X0301645Y0418171* +X0301257Y0419108* +X0300639Y0419913* +X0299834Y0420531* +X0298897Y0420919* +X0297891Y0421051* +G37* +G36* +X0208033Y0419249D02* +X020677Y0419083D01* +X0205594Y0418595* +X0204583Y041782* +X0203808Y041681* +X0203321Y0415633* +X0203154Y041437* +X0203321Y0413107* +X0203808Y0411931* +X0204583Y041092* +X0205594Y0410145* +X020677Y0409658* +X0208033Y0409491* +X0209296Y0409658* +X0210472Y0410145* +X0211483Y041092* +X0212258Y0411931* +X0212746Y0413107* +X0212912Y041437* +X0212746Y0415633* +X0212258Y041681* +X0211483Y041782* +X0210472Y0418595* +X0209296Y0419083* +X0208033Y0419249* +G37* +G36* +X022575D02* +X0224487Y0419083D01* +X022331Y0418595* +X02223Y041782* +X0221525Y041681* +X0221037Y0415633* +X0220871Y041437* +X0221037Y0413107* +X0221525Y0411931* +X02223Y041092* +X022331Y0410145* +X0224487Y0409658* +X022575Y0409491* +X0227012Y0409658* +X0228189Y0410145* +X0229199Y041092* +X0229975Y0411931* +X0230462Y0413107* +X0230628Y041437* +X0230462Y0415633* +X0229975Y041681* +X0229199Y041782* +X0228189Y0418595* +X0227012Y0419083* +X022575Y0419249* +G37* +G36* +X040884Y0407077D02* +X040803Y0406916D01* +X0407343Y0406457* +X0403738Y0402851* +X0403279Y0402165* +X0403118Y0401354* +X0403279Y0400544* +X0403738Y0399857* +X0407343Y0396252* +X040803Y0395793* +X040884Y0395632* +X0409651Y0395793* +X0410337Y0396252* +X0413943Y0399857* +X0414402Y0400544* +X0414563Y0401354* +X0414402Y0402165* +X0413943Y0402851* +X0410337Y0406457* +X0409651Y0406916* +X040884Y0407077* +G37* +G36* +X0426684Y0389945D02* +X0424174Y0387435D01* +X0426684Y0384924* +X0426814Y0385094* +X0427282Y0386223* +X0427442Y0387435* +X0427282Y0388647* +X0426814Y0389776* +X0426684Y0389945* +G37* +G36* +X0543199Y0396694D02* +X05381D01* +X053729Y0396533* +X0536603Y0396074* +X0536144Y0395387* +X0535983Y0394577* +Y0389478* +X0536144Y0388668* +X0536603Y0387981* +X053729Y0387522* +X05381Y0387361* +X0543199* +X0544009Y0387522* +X0544696Y0387981* +X0545155Y0388668* +X0545316Y0389478* +Y0394577* +X0545155Y0395387* +X0544696Y0396074* +X0544009Y0396533* +X0543199Y0396694* +G37* +G36* +X042276Y038602D02* +X0420249Y038351D01* +X0420419Y038338* +X0421548Y0382912* +X042276Y0382753* +X0423971Y0382912* +X0425101Y038338* +X042527Y038351* +X042276Y038602* +G37* +G36* +X0418835Y0389945D02* +X0418705Y0389776D01* +X0418237Y0388647* +X0418078Y0387435* +X0418237Y0386223* +X0418705Y0385094* +X0418835Y0384924* +X0421346Y0387435* +X0418835Y0389945* +G37* +G36* +X042276Y0392116D02* +X0421548Y0391957D01* +X0420419Y0391489* +X0420249Y0391359* +X042276Y0388849* +X042527Y0391359* +X0425101Y0391489* +X0423971Y0391957* +X042276Y0392116* +G37* +G36* +X0334691Y0411195D02* +X0333804Y0411078D01* +X0332977Y0410735* +X0332266Y041019* +X0331721Y040948* +X0331379Y0408653* +X0331262Y0407765* +X0331379Y0406878* +X0331721Y0406051* +X0332266Y040534* +X0332977Y0404796* +X0333804Y0404453* +X0334691Y0404336* +X0335062Y0404011* +Y0397214* +X0313242Y0375395* +X0312643* +X0312416Y037569* +X0311706Y0376235* +X0310879Y0376578* +X0309991Y0376695* +X0309104Y0376578* +X0308277Y0376235* +X0307566Y037569* +X0307021Y037498* +X0306679Y0374153* +X0306562Y0373265* +X0306679Y0372378* +X0307021Y0371551* +X0307566Y0370841* +X0308277Y0370296* +X0309104Y0369953* +X0309827Y0369858* +X031005Y0369373* +X0308591Y0367915* +X0305716Y037079* +X0305006Y0371335* +X0304179Y0371678* +X0303291Y0371795* +X0302404Y0371678* +X0301577Y0371335* +X0300866Y037079* +X0300321Y037008* +X0299979Y0369253* +X0299862Y0368365* +X0299979Y0367478* +X0300321Y0366651* +X0300866Y036594* +X0303742Y0363065* +X0299866Y035919* +X0299321Y035848* +X0298979Y0357653* +X0298862Y0356765* +Y0326854* +X0298779Y0326653* +X0298662Y0325765* +X0298671Y0325695* +X0293866Y032089* +X0293321Y032018* +X0293286Y0320095* +X0267447* +X026656Y0319978* +X0265733Y0319635* +X0265023Y031909* +X0260366Y0314434* +X0259821Y0313724* +X0259479Y0312897* +X0259362Y0312009* +Y0307236* +X0259039Y0307126* +X0258862Y0307099* +X0257872Y0307858* +X0256696Y0308346* +X0255433Y0308512* +X0254215* +Y0298754* +X0255433* +X0256696Y0298921* +X0257872Y0299408* +X0258862Y0300167* +X0259039Y030014* +X0259362Y030003* +Y0295686* +X0255627Y0291951* +X0255433Y0291976* +X0251496* +X0250233Y029181* +X0249057Y0291323* +X0248046Y0290547* +X0247271Y0289537* +X0246784Y028836* +X0246617Y0287098* +X0246784Y0285835* +X0247271Y0284658* +X0248046Y0283648* +X0249057Y0282873* +X0250233Y0282385* +X0251496Y0282219* +X0255433* +X0256696Y0282385* +X0257872Y0282873* +X0258883Y0283648* +X0259658Y0284658* +X0260146Y0285835* +X0260287Y0286912* +X0265216Y0291841* +X0265761Y0292551* +X0266104Y0293378* +X0266221Y0294265* +Y0310589* +X0268868Y0313236* +X0292862* +Y0305322* +X0292979Y0304434* +X0293321Y0303607* +X0293866Y0302897* +X0297823Y029894* +X0298533Y0298395* +X029936Y0298053* +X0300248Y0297936* +X0302291* +X0303179Y0298053* +X0304006Y0298395* +X0304716Y029894* +X0305261Y0299651* +X0305604Y0300478* +X0305721Y0301365* +X0305604Y0302253* +X0305261Y030308* +X0304716Y030379* +X0304006Y0304335* +X0303179Y0304678* +X0302291Y0304795* +X0301668* +X0299721Y0306742* +Y0316665* +X0299676Y0317001* +X0304716Y0322041* +X0305261Y0322751* +X0305604Y0323578* +X0305721Y0324465* +Y0355345* +X0323502Y0373127* +X032403Y0372947* +X0324079Y0372578* +X0324421Y0371751* +X0324966Y0371041* +X0325677Y0370496* +X0326504Y0370153* +X0327391Y0370036* +X0328279Y0370153* +X0329106Y0370496* +X0329816Y0371041* +X0330361Y0371751* +X0330704Y0372578* +X0330821Y0373465* +X0330704Y0374353* +X0330361Y037518* +X0329816Y037589* +X0329709Y0375973* +X0329676Y0376472* +X0343967Y0390763* +X0344577Y0390296* +X0345404Y0389953* +X0346291Y0389836* +X0347179Y0389953* +X0348006Y0390296* +X0348716Y0390841* +X0349261Y0391551* +X0349604Y0392378* +X0349721Y0393265* +X0349604Y0394153* +X0349261Y039498* +X0349031Y039528* +X0349278Y039578* +X0352709* +X0352721Y0395751* +X0353266Y039504* +X0353977Y0394496* +X0354804Y0394153* +X0355691Y0394036* +X0356579Y0394153* +X0357406Y0394496* +X0358116Y039504* +X0358661Y0395751* +X0359004Y0396578* +X0359121Y0397465* +Y0397665* +X0359004Y0398553* +X0358661Y039938* +X0358116Y040009* +X0356572Y0401634* +X0355862Y0402179* +X0355035Y0402522* +X0354148Y0402639* +X0344021* +Y0404565* +X0343904Y0405453* +X0343561Y040628* +X0343016Y040699* +X0342306Y0407535* +X0341479Y0407878* +X0340591Y0407995* +X0339704Y0407878* +X0338877Y0407535* +X0338621Y0407339* +X0338121Y0407585* +Y0407765* +Y0407766* +X0338004Y0408653* +X0337661Y040948* +X0337116Y041019* +X0336406Y0410735* +X0335579Y0411078* +X0334691Y0411195* +G37* +G36* +X0325391Y0402395D02* +X0324504Y0402278D01* +X0323677Y0401935* +X0322966Y040139* +X0322421Y040068* +X0322365Y0400545* +X0316841* +X0316256Y0400428* +X031576Y0400097* +X0311364Y0395701* +X0311179Y0395778* +X0310291Y0395895* +X0309404Y0395778* +X0308577Y0395435* +X0307866Y039489* +X0307321Y039418* +X0306979Y0393353* +X0306862Y0392465* +X0306979Y0391578* +X0307321Y0390751* +X0307579Y0390415* +X0307358Y0389881* +X0306886Y0389819* +X0305948Y0389431* +X0305143Y0388813* +X0304526Y0388008* +X0304138Y0387071* +X0304005Y0386065* +X0304138Y038506* +X0304526Y0384122* +X0305143Y0383317* +X0305948Y03827* +X0306886Y0382312* +X0307891Y0382179* +X0308897Y0382312* +X0309834Y03827* +X0310639Y0383317* +X0311257Y0384122* +X0311645Y038506* +X0311777Y0386065* +X0311645Y0387071* +X0311257Y0388008* +X0310803Y0388599* +X0311013Y0389131* +X0311179Y0389153* +X0312006Y0389495* +X0312716Y039004* +X0313261Y0390751* +X0313604Y0391578* +X0313721Y0392465* +X0313604Y0393353* +X0313527Y0393538* +X0317475Y0397486* +X0322324* +X0322421Y0397251* +X0322966Y039654* +X0323677Y0395995* +X0324504Y0395653* +X0325391Y0395536* +X0326279Y0395653* +X0327106Y0395995* +X0327816Y039654* +X0328361Y0397251* +X0328704Y0398078* +X0328821Y0398965* +X0328704Y0399853* +X0328361Y040068* +X0327816Y040139* +X0327106Y0401935* +X0326279Y0402278* +X0325391Y0402395* +G37* +G36* +X0559335Y0396578D02* +X0559123Y039655D01* +X0557994Y0396082* +X0557024Y0395338* +X055628Y0394368* +X0555812Y0393239* +X0555785Y0393027* +X0559335* +Y0396578* +G37* +G36* +X0561335D02* +Y0393027D01* +X0564885* +X0564857Y0393239* +X0564389Y0394368* +X0563645Y0395338* +X0562676Y0396082* +X0561546Y039655* +X0561335Y0396578* +G37* +G36* +X0307891Y0421051D02* +X0306886Y0420919D01* +X0305948Y0420531* +X0305143Y0419913* +X0304526Y0419108* +X0304138Y0418171* +X0304005Y0417165* +X0304138Y041616* +X0304526Y0415222* +X0305143Y0414418* +X0305948Y04138* +X0306886Y0413412* +X0307891Y0413279* +X0308897Y0413412* +X0309834Y04138* +X0310639Y0414418* +X0311257Y0415222* +X0311645Y041616* +X0311777Y0417165* +X0311645Y0418171* +X0311257Y0419108* +X0310639Y0419913* +X0309834Y0420531* +X0308897Y0420919* +X0307891Y0421051* +G37* +G36* +X0267891Y0472151D02* +X0266886Y0472019D01* +X0265948Y0471631* +X0265143Y0471013* +X0264526Y0470208* +X0264138Y0469271* +X0264005Y0468265* +X0264138Y046726* +X0264526Y0466322* +X0265143Y0465518* +X0265948Y04649* +X0266886Y0464512* +X0267891Y0464379* +X0268897Y0464512* +X0269834Y04649* +X0270639Y0465518* +X0271257Y0466322* +X0271645Y046726* +X0271777Y0468265* +X0271645Y0469271* +X0271257Y0470208* +X0270639Y0471013* +X0269834Y0471631* +X0268897Y0472019* +X0267891Y0472151* +G37* +G36* +X0277891D02* +X0276886Y0472019D01* +X0275948Y0471631* +X0275144Y0471013* +X0274526Y0470208* +X0274138Y0469271* +X0274005Y0468265* +X0274138Y046726* +X0274526Y0466322* +X0275144Y0465518* +X0275948Y04649* +X0276886Y0464512* +X0277891Y0464379* +X0278897Y0464512* +X0279834Y04649* +X0280639Y0465518* +X0281257Y0466322* +X0281645Y046726* +X0281777Y0468265* +X0281645Y0469271* +X0281257Y0470208* +X0280639Y0471013* +X0279834Y0471631* +X0278897Y0472019* +X0277891Y0472151* +G37* +G36* +X0521706Y0468291D02* +X0513996D01* +X0514Y0468259* +X0514398Y0467298* +X0515032Y0466472* +X051579Y0465891* +X0515787Y0465651* +X0515681Y0465371* +X0515055Y0465246* +X0514436Y0464832* +X0514023Y0464214* +X0513877Y0463484* +Y045935* +X0514023Y0458621* +X0514436Y0458002* +X0515055Y0457589* +X0515784Y0457444* +X0519918* +X0520648Y0457589* +X0521266Y0458002* +X052168Y0458621* +X0521825Y045935* +Y0463484* +X052168Y0464214* +X0521266Y0464832* +X0520648Y0465246* +X0520021Y0465371* +X0519915Y0465651* +X0519913Y0465891* +X052067Y0466472* +X0521304Y0467298* +X0521702Y0468259* +X0521706Y0468291* +G37* +G36* +X0208033Y0498339D02* +X020677Y0498173D01* +X0205594Y0497686* +X0204583Y049691* +X0203808Y04959* +X0203321Y0494723* +X0203154Y0493461* +X0203321Y0492198* +X0203808Y0491021* +X0204583Y0490011* +X0205594Y0489235* +X0206504Y0488859* +Y0472472* +X0205594Y0472095* +X0204583Y047132* +X0203808Y0470309* +X0203321Y0469133* +X0203154Y046787* +X0203321Y0466607* +X0203808Y0465431* +X0204583Y046442* +X0205594Y0463645* +X020677Y0463158* +X0208033Y0462991* +X0209296Y0463158* +X0210472Y0463645* +X0211483Y046442* +X0212258Y0465431* +X0212746Y0466607* +X0212912Y046787* +X0212746Y0469133* +X0212258Y0470309* +X0211483Y047132* +X0210472Y0472095* +X0209562Y0472472* +Y0488859* +X0210472Y0489235* +X0211483Y0490011* +X0212258Y0491021* +X0212746Y0492198* +X0212912Y0493461* +X0212746Y0494723* +X0212258Y04959* +X0211483Y049691* +X0210472Y0497686* +X0209296Y0498173* +X0208033Y0498339* +G37* +G36* +X0287891Y0472151D02* +X0286886Y0472019D01* +X0285948Y0471631* +X0285143Y0471013* +X0284526Y0470208* +X0284138Y0469271* +X0284005Y0468265* +X0284138Y046726* +X0284526Y0466322* +X0285143Y0465518* +X0285948Y04649* +X0286886Y0464512* +X0287891Y0464379* +X0288897Y0464512* +X0289834Y04649* +X0290639Y0465518* +X0291257Y0466322* +X0291645Y046726* +X0291777Y0468265* +X0291645Y0469271* +X0291257Y0470208* +X0290639Y0471013* +X0289834Y0471631* +X0288897Y0472019* +X0287891Y0472151* +G37* +G36* +X0518851Y0473147D02* +Y0470291D01* +X0521706* +X0521702Y0470323* +X0521304Y0471285* +X052067Y0472111* +X0519845Y0472744* +X0518883Y0473142* +X0518851Y0473147* +G37* +G36* +X0677165Y0517105D02* +X0675442Y0516969D01* +X0673761Y0516566* +X0672163Y0515904* +X0670689Y0515* +X0669374Y0513878* +X0668251Y0512563* +X0667348Y0511089* +X0666686Y0509491* +X0666283Y050781* +X0666147Y0506086* +Y0505693* +Y0483933* +X0666283Y0482209* +X0666686Y0480528* +X0667348Y0478931* +X0668251Y0477457* +X0669245Y0476293* +Y047502* +X0669428Y0474098* +X066995Y0473316* +X0670732Y0472794* +X0671654Y0472611* +X0682677* +X0683599Y0472794* +X068438Y0473316* +X0684902Y0474098* +X0685086Y047502* +Y0476293* +X0686079Y0477457* +X0686983Y0478931* +X0687644Y0480528* +X0688048Y0482209* +X0688184Y0483933* +Y0505693* +Y0506086* +X0688048Y050781* +X0687644Y0509491* +X0686983Y0511089* +X0686079Y0512563* +X0684956Y0513878* +X0683642Y0515* +X0682167Y0515904* +X068057Y0516566* +X0678889Y0516969* +X0677165Y0517105* +G37* +G36* +X0297891Y0472151D02* +X0296886Y0472019D01* +X0295948Y0471631* +X0295144Y0471013* +X0294526Y0470208* +X0294138Y0469271* +X0294005Y0468265* +X0294138Y046726* +X0294526Y0466322* +X0295144Y0465518* +X0295948Y04649* +X0296886Y0464512* +X0297891Y0464379* +X0298897Y0464512* +X0299834Y04649* +X0300639Y0465518* +X0301257Y0466322* +X0301645Y046726* +X0301777Y0468265* +X0301645Y0469271* +X0301257Y0470208* +X0300639Y0471013* +X0299834Y0471631* +X0298897Y0472019* +X0297891Y0472151* +G37* +G36* +X0516851Y0473147D02* +X0516819Y0473142D01* +X0515858Y0472744* +X0515032Y0472111* +X0514398Y0471285* +X0514Y0470323* +X0513996Y0470291* +X0516851* +Y0473147* +G37* +G36* +X0327991Y0522995D02* +X0327104Y0522878D01* +X0326277Y0522535* +X0325566Y052199* +X0325021Y052128* +X0324679Y0520453* +X0324562Y0519565* +X0324679Y0518678* +X0324756Y0518493* +X032281Y0516547* +X0322478Y0516051* +X0322362Y0515465* +Y0511965* +X0322478Y051138* +X032281Y0510884* +X0325162Y0508532* +Y0500765* +X0325278Y050018* +X032561Y0499684* +X0335062Y0490232* +Y0466742* +X0333615Y0465295* +X0332291* +X0331706Y0465178* +X033121Y0464847* +X032891Y0462547* +X0328578Y0462051* +X0328462Y0461465* +Y0456065* +X0328578Y045548* +X0328688Y0455316* +X0328579Y0455053* +X0328462Y0454165* +X0328488Y0453971* +X0328158Y0453595* +X0317991* +X0317406Y0453478* +X031691Y0453147* +X0312252Y0448489* +X0311724Y0448668* +X0311645Y0449271* +X0311257Y0450208* +X0310639Y0451013* +X0309834Y0451631* +X0308897Y0452019* +X0307891Y0452151* +X0306886Y0452019* +X0305948Y0451631* +X0305143Y0451013* +X0304526Y0450208* +X0304138Y0449271* +X0304005Y0448265* +X0304138Y044726* +X0304526Y0446322* +X0304931Y0445795* +X0304684Y0445295* +X0301098* +X0300852Y0445795* +X0301257Y0446322* +X0301645Y044726* +X0301777Y0448265* +X0301645Y0449271* +X0301257Y0450208* +X0300639Y0451013* +X0299834Y0451631* +X0298897Y0452019* +X0297891Y0452151* +X0296886Y0452019* +X0295948Y0451631* +X0295144Y0451013* +X0294526Y0450208* +X0294138Y0449271* +X0294005Y0448265* +X0294138Y044726* +X0294526Y0446322* +X0294931Y0445795* +X0294684Y0445295* +X0291098* +X0290852Y0445795* +X0291257Y0446322* +X0291645Y044726* +X0291777Y0448265* +X0291645Y0449271* +X0291257Y0450208* +X0290639Y0451013* +X0289834Y0451631* +X0288897Y0452019* +X0287891Y0452151* +X0286886Y0452019* +X0285948Y0451631* +X0285143Y0451013* +X0284526Y0450208* +X0284138Y0449271* +X0284005Y0448265* +X0284138Y044726* +X0284526Y0446322* +X0284931Y0445795* +X0284684Y0445295* +X0281098* +X0280852Y0445795* +X0281257Y0446322* +X0281645Y044726* +X0281777Y0448265* +X0281645Y0449271* +X0281257Y0450208* +X0280639Y0451013* +X0279834Y0451631* +X0278897Y0452019* +X0277891Y0452151* +X0277414Y0452088* +X0277181Y0452562* +X0279554Y0454935* +X0303491* +X0304405Y0455056* +X0305256Y0455408* +X0305988Y0455969* +X0310388Y0460369* +X0310949Y04611* +X0311301Y0461952* +X0311421Y0462865* +Y046672* +X0311645Y046726* +X0311777Y0468265* +X0311645Y0469271* +X0311257Y0470208* +X0310639Y0471013* +X0309834Y0471631* +X0308897Y0472019* +X0307891Y0472151* +X0306886Y0472019* +X0305948Y0471631* +X0305143Y0471013* +X0304526Y0470208* +X0304138Y0469271* +X0304005Y0468265* +X0304138Y046726* +X0304361Y046672* +Y0464328* +X0302029Y0461996* +X0278091* +X0277178Y0461875* +X0276326Y0461523* +X0275595Y0460962* +X0267741Y0453108* +X0261988Y0458862* +X0261256Y0459423* +X0260405Y0459775* +X0259491Y0459896* +X0254791* +X0253878Y0459775* +X0253026Y0459423* +X0252295Y0458862* +X0251734Y0458131* +X0251381Y0457279* +X0251261Y0456365* +X0251381Y0455452* +X0251734Y04546* +X0252295Y0453869* +X0253026Y0453308* +X0253878Y0452955* +X0254791Y0452835* +X0258029* +X0264515Y0446349* +X0264526Y0446322* +X0264931Y0445795* +X0264684Y0445295* +X0260891* +X0260306Y0445178* +X025981Y0444847* +X0253504Y0438541* +X0253006Y0438574* +X0252916Y043869* +X0252206Y0439235* +X0251379Y0439578* +X0250491Y0439695* +X0249604Y0439578* +X0248777Y0439235* +X0248066Y043869* +X0247521Y043798* +X0247179Y0437153* +X0247062Y0436265* +X0247179Y0435378* +X0247521Y0434551* +X0248066Y043384* +X0248183Y0433751* +X0248215Y0433252* +X024461Y0429647* +X0244278Y0429151* +X0244162Y0428565* +Y0417599* +X0232129Y0405565* +X0210562* +X0209977Y0405449* +X0209481Y0405117* +X0204705Y0400342* +X0204643Y0400345* +X0204198Y0400541* +X0204104Y0401253* +X0203761Y040208* +X0203216Y040279* +X0202506Y0403335* +X0201679Y0403678* +X0200791Y0403795* +X0199904Y0403678* +X0199077Y0403335* +X0198366Y040279* +X0197821Y040208* +X0197479Y0401253* +X0197362Y0400365* +X0197468Y0399563* +X0197319Y039931* +X0197101Y0399083* +X0196304Y0398978* +X0195477Y0398635* +X0194766Y039809* +X0194221Y039738* +X0193879Y0396553* +X0193762Y0395665* +X0193879Y0394778* +X0194221Y0393951* +X0194766Y039324* +X0195477Y0392695* +X0196304Y0392353* +X0197191Y0392236* +X0198079Y0392353* +X0198906Y0392695* +X0199616Y039324* +X0200161Y0393951* +X0200504Y0394778* +X0200512Y0394836* +X020572* +X0206305Y0394952* +X0206801Y0395284* +X0212024Y0400507* +X023359* +X0234176Y0400623* +X0234672Y0400954* +X0248773Y0415056* +X0249104Y0415552* +X0249221Y0416137* +Y0420219* +X0249597Y0420548* +X0249691Y0420536* +X0250579Y0420653* +X0251406Y0420996* +X0252116Y042154* +X0252661Y0422251* +X0253004Y0423078* +X0253121Y0423965* +X0253004Y0424853* +X0252661Y042568* +X0252116Y042639* +X0251406Y0426935* +X0250579Y0427278* +X0250158Y0427333* +X0249978Y0427861* +X0262353Y0440236* +X0264779* +X0265007Y0439736* +X0264526Y0439108* +X0264138Y0438171* +X0264005Y0437165* +X0264138Y043616* +X0264526Y0435222* +X0265143Y0434417* +X0265948Y04338* +X0266886Y0433412* +X0267891Y0433279* +X0268897Y0433412* +X0269834Y04338* +X0270639Y0434417* +X0271257Y0435222* +X0271645Y043616* +X0271777Y0437165* +X0271645Y0438171* +X0271257Y0439108* +X0270775Y0439736* +X0271004Y0440236* +X0274779* +X0275008Y0439736* +X0274526Y0439108* +X0274138Y0438171* +X0274005Y0437165* +X0274138Y043616* +X0274526Y0435222* +X0275144Y0434417* +X0275948Y04338* +X0276886Y0433412* +X0277891Y0433279* +X0278897Y0433412* +X0279834Y04338* +X0280639Y0434417* +X0281257Y0435222* +X0281645Y043616* +X0281777Y0437165* +X0281645Y0438171* +X0281257Y0439108* +X0280775Y0439736* +X0281004Y0440236* +X0284779* +X0285008Y0439736* +X0284526Y0439108* +X0284138Y0438171* +X0284005Y0437165* +X0284138Y043616* +X0284526Y0435222* +X0285143Y0434417* +X0285948Y04338* +X0286886Y0433412* +X0287891Y0433279* +X0288897Y0433412* +X0289834Y04338* +X0290639Y0434417* +X0291257Y0435222* +X0291645Y043616* +X0291777Y0437165* +X0291645Y0438171* +X0291257Y0439108* +X0290775Y0439736* +X0291004Y0440236* +X0294779* +X0295007Y0439736* +X0294526Y0439108* +X0294138Y0438171* +X0294005Y0437165* +X0294138Y043616* +X0294526Y0435222* +X0295144Y0434417* +X0295948Y04338* +X0296886Y0433412* +X0297891Y0433279* +X0298897Y0433412* +X0299834Y04338* +X0300639Y0434417* +X0301257Y0435222* +X0301645Y043616* +X0301777Y0437165* +X0301645Y0438171* +X0301257Y0439108* +X0300775Y0439736* +X0301004Y0440236* +X0304779* +X0305008Y0439736* +X0304526Y0439108* +X0304138Y0438171* +X0304005Y0437165* +X0304138Y043616* +X0304361Y043562* +Y043396* +X0300997Y0430596* +X0277891* +X0276978Y0430475* +X0276126Y0430123* +X0275395Y0429562* +X0266658Y0420825* +X0265948Y0420531* +X0265143Y0419913* +X0264526Y0419108* +X0264303Y0418569* +X0250095Y0404362* +X0249534Y040363* +X0249181Y0402779* +X0249061Y0401865* +Y0394465* +X0249181Y0393552* +X0249534Y03927* +X0250095Y0391969* +X0250826Y0391408* +X0251678Y0391055* +X0252591Y0390935* +X0253505Y0391055* +X0254356Y0391408* +X0255088Y0391969* +X0255649Y03927* +X0256001Y0393552* +X0256121Y0394465* +Y0400403* +X0264453Y0408734* +X026483Y0408404* +X0264526Y0408008* +X0264138Y0407071* +X0264005Y0406065* +X0264138Y040506* +X0264526Y0404122* +X0265143Y0403317* +X0265948Y04027* +X0266886Y0402312* +X0267891Y0402179* +X0268897Y0402312* +X0269834Y04027* +X0270639Y0403317* +X0271257Y0404122* +X0271645Y040506* +X0271777Y0406065* +X0271645Y0407071* +X0271257Y0408008* +X0270639Y0408813* +X0269834Y0409431* +X0268897Y0409819* +X0267891Y0409951* +X0266886Y0409819* +X0265948Y0409431* +X0265553Y0409127* +X0265222Y0409504* +X0269295Y0413577* +X0269834Y04138* +X0270639Y0414418* +X0271257Y0415222* +X0271409Y0415591* +X0273579Y0417761* +X0274053Y0417527* +X0274005Y0417165* +X0274138Y041616* +X0274526Y0415222* +X0275144Y0414418* +X0275948Y04138* +X0276886Y0413412* +X0277891Y0413279* +X0278897Y0413412* +X0279834Y04138* +X0280639Y0414418* +X0281257Y0415222* +X0281645Y041616* +X0281777Y0417165* +X0281645Y0418171* +X0281257Y0419108* +X0280639Y0419913* +X0279834Y0420531* +X0278897Y0420919* +X0277891Y0421051* +X0277529Y0421004* +X0277296Y0421477* +X0279354Y0423535* +X0302459* +X0303373Y0423656* +X0304224Y0424008* +X0304955Y0424569* +X0310388Y0430001* +X0310949Y0430732* +X0311301Y0431584* +X0311421Y0432498* +Y043562* +X0311645Y043616* +X0311777Y0437165* +X0311645Y0438171* +X0311257Y0439108* +X0310748Y0439772* +X0310857Y0440213* +X0310933Y0440318* +X0311105Y0440352* +X0311601Y0440684* +X0319424Y0448507* +X0333462* +X0334047Y0448623* +X0334543Y0448954* +X0336973Y0451384* +X0337304Y045188* +X0337421Y0452465* +Y0461947* +X0339673Y0464199* +X0340004Y0464695* +X0340121Y046528* +Y0491694* +X0340004Y0492279* +X0339673Y0492775* +X0330221Y0502227* +Y0511167* +X0330316Y051124* +X0330861Y0511951* +X0331204Y0512778* +X0331321Y0513665* +X0331204Y0514553* +X0330861Y051538* +X0330316Y051609* +X0330093Y0516262* +Y0516892* +X0330416Y051714* +X0330961Y0517851* +X0331304Y0518678* +X0331421Y0519565* +X0331304Y0520453* +X0330961Y052128* +X0330416Y052199* +X0329706Y0522535* +X0328879Y0522878* +X0327991Y0522995* +G37* +G36* +X0145669Y0433407D02* +X0144882D01* +X0144082Y0433301* +X0143336Y0432993* +X0142696Y0432501* +X0142204Y0431861* +X0141895Y0431115* +X014179Y0430315* +X0141895Y0429515* +X0142204Y0428769* +X0142696Y0428129* +X0143336Y0427637* +X0143822Y0427436* +Y0426895* +X0143336Y0426693* +X0142696Y0426202* +X0142204Y0425562* +X0141895Y0424816* +X014179Y0424016* +X0141895Y0423215* +X0142204Y042247* +X0142696Y042183* +X0143336Y0421338* +X0144082Y0421029* +X0144882Y0420924* +X0145669* +X0146469Y0421029* +X0147215Y0421338* +X0147855Y042183* +X0148347Y042247* +X0148656Y0423215* +X0148761Y0424016* +X0148656Y0424816* +X0148347Y0425562* +X0147855Y0426202* +X0147215Y0426693* +X0146729Y0426895* +Y0427436* +X0147215Y0427637* +X0147855Y0428129* +X0148347Y0428769* +X0148656Y0429515* +X0148761Y0430315* +X0148656Y0431115* +X0148347Y0431861* +X0147855Y0432501* +X0147215Y0432993* +X0146469Y0433301* +X0145669Y0433407* +G37* +G36* +X0137008Y0436556D02* +X0136221D01* +X013542Y0436451* +X0134675Y0436142* +X0134034Y0435651* +X0133543Y043501* +X0133234Y0434265* +X0133129Y0433465* +X0133234Y0432664* +X0133543Y0431919* +X0134034Y0431278* +X0134675Y0430787* +X0135161Y0430586* +Y0430044* +X0134675Y0429843* +X0134034Y0429352* +X0133543Y0428711* +X0133234Y0427966* +X0133129Y0427165* +X0133234Y0426365* +X0133543Y042562* +X0134034Y0424979* +X0134675Y0424488* +X0135161Y0424286* +Y0423745* +X0134675Y0423544* +X0134034Y0423052* +X0133543Y0422412* +X0133234Y0421666* +X0133227Y0421616* +X0140001* +X0139994Y0421666* +X0139685Y0422412* +X0139194Y0423052* +X0138554Y0423544* +X0138067Y0423745* +Y0424286* +X0138554Y0424488* +X0139194Y0424979* +X0139685Y042562* +X0139994Y0426365* +X01401Y0427165* +X0139994Y0427966* +X0139685Y0428711* +X0139194Y0429352* +X0138554Y0429843* +X0138067Y0430044* +Y0430586* +X0138554Y0430787* +X0139194Y0431278* +X0139685Y0431919* +X0139994Y0432664* +X01401Y0433465* +X0139994Y0434265* +X0139685Y043501* +X0139194Y0435651* +X0138554Y0436142* +X0137808Y0436451* +X0137008Y0436556* +G37* +G36* +X0135864Y0420116D02* +X0133227D01* +X0133234Y0420066* +X0133543Y041932* +X0134034Y041868* +X0134675Y0418189* +X013542Y041788* +X0135864Y0417821* +Y0420116* +G37* +G36* +X0140001D02* +X0137364D01* +Y0417821* +X0137808Y041788* +X0138554Y0418189* +X0139194Y041868* +X0139685Y041932* +X0139994Y0420066* +X0140001Y0420116* +G37* +G36* +X0575Y0451349D02* +X057409Y0451229D01* +X0573243Y0450878* +X0572515Y045032* +X0571956Y0449592* +X0571605Y0448744* +X0571486Y0447835* +X0571605Y0446925* +X0571956Y0446077* +X0572515Y044535* +X0572977Y0444995* +Y0438068* +X0572937Y0438038* +X0572378Y043731* +X0572027Y0436462* +X0571907Y0435553* +X0572027Y0434643* +X0572378Y0433795* +X0572937Y0433068* +X0573665Y0432509* +X0574512Y0432158* +X0575422Y0432038* +X0576331Y0432158* +X0577179Y0432509* +X0577907Y0433068* +X0578465Y0433795* +X0578816Y0434643* +X0578936Y0435553* +X0578816Y0436462* +X0578465Y043731* +X0577907Y0438038* +X0577179Y0438596* +X0577023Y0438661* +Y0444995* +X0577485Y044535* +X0578044Y0446077* +X0578395Y0446925* +X0578514Y0447835* +X0578395Y0448744* +X0578044Y0449592* +X0577485Y045032* +X0576757Y0450878* +X057591Y0451229* +X0575Y0451349* +G37* +G36* +X0354433Y0523021D02* +X0353545Y0522904D01* +X0352718Y0522561* +X0352008Y0522016* +X0351463Y0521306* +X035112Y0520479* +X0351003Y0519591* +Y0473027* +X0342666Y046469* +X0342121Y046398* +X0341779Y0463153* +X0341662Y0462265* +Y0449586* +X0336866Y044479* +X0336321Y044408* +X0335979Y0443253* +X0335862Y0442365* +Y0439965* +X0335979Y0439078* +X0336321Y0438251* +X0336866Y043754* +X0337577Y0436996* +X0338404Y0436653* +X0339291Y0436536* +X0339341Y0436543* +X0339391Y0436536* +X0340279Y0436653* +X0341106Y0436996* +X0341816Y043754* +X0342361Y0438251* +X0342704Y0439078* +X0342821Y0439965* +X0342721Y0440725* +Y0440945* +X0347516Y044574* +X0348061Y0446451* +X0348404Y0447278* +X0348521Y0448165* +Y0460845* +X035735Y0469674* +X0357895Y0470384* +X0358237Y0471211* +X0358241Y0471236* +X0361991* +X0362879Y0471353* +X0363706Y0471696* +X0364416Y047224* +X0364961Y0472951* +X0365304Y0473778* +X0365421Y0474665* +X0365304Y0475553* +X0364961Y047638* +X0364416Y047709* +X0363706Y0477635* +X0362879Y0477978* +X0361991Y0478095* +X0357862* +Y0519591* +X0357745Y0520479* +X0357403Y0521306* +X0356858Y0522016* +X0356147Y0522561* +X035532Y0522904* +X0354433Y0523021* +G37* +G36* +X0626378Y0461192D02* +X0625468Y0461072D01* +X0624621Y0460721* +X0623893Y0460163* +X0623334Y0459435* +X0622983Y0458587* +X0622864Y0457678* +X0622983Y0456768* +X0623334Y045592* +X0623893Y0455193* +X0624621Y0454634* +X0625468Y0454283* +X0626378Y0454163* +X0627287Y0454283* +X0628065Y0454605* +X0641188Y0441483* +X0641844Y0441044* +X0642619Y044089* +X0645783* +X0646137Y0440428* +X0646865Y043987* +X0647713Y0439519* +X0648622Y0439399* +X0649532Y0439519* +X0650379Y043987* +X0651107Y0440428* +X0651665Y0441156* +X0652017Y0442004* +X0652136Y0442913* +X0652017Y0443823* +X0651665Y044467* +X0651107Y0445398* +X0650379Y0445957* +X0649532Y0446308* +X0648622Y0446428* +X0647713Y0446308* +X0646865Y0445957* +X0646137Y0445398* +X0645783Y0444937* +X0643457* +X0629749Y0458644* +X0629421Y0459435* +X0628863Y0460163* +X0628135Y0460721* +X0627287Y0461072* +X0626378Y0461192* +G37* +G36* +X0208033Y0444839D02* +X020677Y0444673D01* +X0205594Y0444186* +X0204583Y044341* +X0203808Y04424* +X0203321Y0441223* +X0203154Y0439961* +X0203321Y0438698* +X0203808Y0437521* +X0204583Y0436511* +X0205594Y0435736* +X020677Y0435248* +X0208033Y0435082* +X0209296Y0435248* +X0210472Y0435736* +X0211483Y0436511* +X0212258Y0437521* +X0212746Y0438698* +X0212912Y0439961* +X0212746Y0441223* +X0212258Y04424* +X0211483Y044341* +X0210472Y0444186* +X0209296Y0444673* +X0208033Y0444839* +G37* +G36* +X022575D02* +X0224487Y0444673D01* +X022331Y0444186* +X02223Y044341* +X0221525Y04424* +X0221037Y0441223* +X0220871Y0439961* +X0221037Y0438698* +X0221525Y0437521* +X02223Y0436511* +X022331Y0435736* +X0224487Y0435248* +X022575Y0435082* +X0227012Y0435248* +X0228189Y0435736* +X0229199Y0436511* +X0229975Y0437521* +X0230462Y0438698* +X0230628Y0439961* +X0230462Y0441223* +X0229975Y04424* +X0229199Y044341* +X0228189Y0444186* +X0227012Y0444673* +X022575Y0444839* +G37* +%LNunisolder52_full-3*% +%LPD*% +G36* +X0511138Y0408433D02* +X0506556D01* +X0506331Y0409499* +X0509597* +X0508481Y0414839* +X0509805* +X0511138Y0408433* +G37* +G36* +X0497218D02* +X0495977D01* +X0495736Y0409641* +X0496977* +X0497218Y0408433* +G37* +G36* +X0541317Y0413181D02* +X0541459Y0413148D01* +X0541592Y0413098* +X0541717Y0413031* +X0541842Y0412956* +X0541967Y0412873* +X0542075Y0412781* +X0542175Y041269* +X0542267Y041259* +X054235Y0412498* +X0542425Y0412415* +X0542484Y041234* +X0542533Y0412273* +X0542567Y0412223* +X0542592Y041219* +X05426Y0412182* +X0542409Y0413073* +X0543583* +X0544549Y0408433* +X05433* +X0543Y0409882* +X0542967Y0410041* +X0542933Y0410191* +X05429Y0410332* +X0542867Y0410465* +X0542833Y0410582* +X05428Y0410682* +X0542775Y0410782* +X0542742Y0410865* +X0542717Y041094* +X0542692Y0411007* +X0542675Y0411057* +X0542658Y0411107* +X0542642Y041114* +X0542633Y0411165* +X0542625Y0411174* +Y0411182* +X054255Y0411332* +X0542458Y0411457* +X0542375Y0411573* +X0542292Y0411665* +X0542217Y041174* +X0542159Y0411798* +X0542117Y0411832* +X05421Y041184* +X0541975Y0411923* +X0541859Y0411982* +X0541742Y0412032* +X0541642Y0412057* +X0541559Y0412073* +X0541501Y041209* +X0541442* +X0541301Y0412082* +X0541242Y0412073* +X0541184Y0412057* +X0541142Y0412048* +X0541109Y0412032* +X0541084Y0412023* +X0541076* +X0540593Y0413048* +X0540709Y0413098* +X0540817Y0413131* +X0540917Y0413156* +X0541001Y0413173* +X0541076Y0413181* +X0541126Y041319* +X0541176* +X0541317Y0413181* +G37* +G36* +X051716Y0414947D02* +X051731Y041493D01* +X0517444Y0414905* +X0517552Y0414872* +X0517643Y0414839* +X051771Y0414814* +X0517743Y0414797* +X051776Y0414789* +X051786Y0414722* +X0517952Y0414647* +X0518027Y0414572* +X0518093Y0414506* +X0518135Y0414439* +X0518177Y0414389* +X0518193Y0414356* +X0518202Y0414339* +X0518218Y0414297* +X0518243Y0414247* +X0518285Y0414131* +X0518327Y0413998* +X051836Y0413872* +X0518393Y0413748* +X051841Y0413648* +X0518418Y0413606* +X0518427Y0413573* +X0518435Y0413556* +Y0413548* +X0518535Y0413073* +X0519235* +X0519426Y0412156* +X0518726* +X0519501Y0408433* +X0518252* +X0517477Y0412156* +X0516577* +X0516386Y0413073* +X0517285* +X0517219Y0413398* +X0517194Y0413531* +X051716Y0413631* +X0517135Y0413714* +X0517119Y0413781* +X0517094Y0413823* +X0517085Y0413856* +X0517069Y0413864* +Y0413872* +X0517027Y0413923* +X0516977Y0413956* +X0516927Y0413981* +X0516869Y0413998* +X0516827Y0414006* +X0516785Y0414014* +X0516752* +X0516636Y0414006* +X0516519Y0413989* +X0516394Y0413964* +X0516277Y0413939* +X0516177Y0413906* +X0516094Y0413881* +X0516061Y0413872* +X0516036Y0413864* +X0516027Y0413856* +X0516019* +X0515777Y0414747* +X0516011Y0414814* +X0516236Y0414864* +X0516444Y0414905* +X0516627Y041493* +X0516702Y0414939* +X0516777Y0414947* +X0516844* +X0516894Y0414955* +X0516994* +X051716Y0414947* +G37* +G36* +X0557827D02* +X0558019Y041493D01* +X0558194Y0414905* +X055836Y0414872* +X055851Y041483* +X0558652Y0414781* +X0558777Y0414739* +X0558885Y0414689* +X0558985Y0414631* +X0559077Y0414589* +X0559152Y0414539* +X055921Y0414497* +X055926Y0414464* +X0559294Y0414439* +X055931Y0414422* +X0559318Y0414414* +X0559418Y0414314* +X055951Y0414206* +X0559585Y0414089* +X0559652Y0413981* +X055971Y0413864* +X055976Y0413756* +X0559802Y0413648* +X0559827Y0413548* +X0559852Y0413448* +X0559868Y0413356* +X0559885Y0413273* +X0559893Y0413206* +X0559902Y0413148* +Y0413106* +Y0413081* +Y0413073* +X0559893Y0412906* +X0559868Y0412748* +X0559843Y0412606* +X0559802Y041249* +X0559768Y041239* +X0559743Y0412315* +X0559718Y0412273* +X055971Y0412256* +X0559627Y0412132* +X0559543Y0412023* +X0559452Y0411932* +X055936Y0411848* +X0559285Y0411782* +X0559227Y041174* +X0559185Y0411707* +X0559168Y0411698* +X0559102Y0411657* +X0559019Y0411615* +X0558852Y0411523* +X0558669Y0411432* +X0558494Y0411348* +X0558327Y0411273* +X055826Y041124* +X0558202Y0411215* +X0558144Y041119* +X0558111Y0411174* +X0558086Y0411157* +X0558077* +X0557944Y0411099* +X0557819Y041104* +X0557711Y041099* +X0557619Y0410949* +X0557536Y0410907* +X0557461Y0410865* +X0557394Y0410832* +X0557336Y0410799* +X0557294Y0410774* +X0557253Y0410749* +X0557194Y0410715* +X0557169Y0410699* +X0557161Y041069* +X0557078Y0410615* +X0557019Y0410532* +X0556978Y0410449* +X0556953Y0410374* +X0556928Y0410307* +X0556919Y0410257* +Y0410224* +Y0410207* +X0556928Y0410091* +X0556961Y0409982* +X0557011Y0409882* +X0557061Y0409799* +X0557119Y0409732* +X0557161Y0409683* +X0557194Y0409649* +X0557211Y0409641* +X0557269Y0409599* +X0557336Y0409566* +X0557478Y0409508* +X0557636Y0409474* +X0557794Y0409441* +X0557927Y0409424* +X0557994* +X0558044Y0409416* +X0558294* +X0558419Y0409433* +X0558535Y0409449* +X0558644Y0409466* +X0558744Y0409491* +X0558827Y0409524* +X055891Y0409549* +X0558977Y0409583* +X0559035Y0409616* +X0559085Y0409641* +X0559127Y0409674* +X055916Y0409699* +X0559202Y0409732* +X0559219Y0409749* +X0559252Y0409791* +X0559277Y0409849* +X0559327Y0409966* +X055936Y0410099* +X0559385Y0410241* +X0559402Y0410366* +X055941Y0410465* +X0559418Y0410507* +Y041054* +Y0410557* +Y0410566* +X0560676Y0410499* +Y0410266* +X0560651Y0410049* +X0560618Y0409857* +X0560576Y0409691* +X0560551Y0409616* +X0560526Y0409549* +X056051Y0409491* +X0560493Y0409449* +X0560476Y0409408* +X056046Y0409383* +X0560451Y0409366* +Y0409358* +X0560401Y0409266* +X0560343Y0409183* +X056021Y0409033* +X0560068Y0408899* +X0559927Y0408791* +X0559802Y0408708* +X0559743Y0408666* +X0559693Y0408641* +X0559652Y0408616* +X0559618Y0408608* +X0559602Y0408591* +X0559593* +X055936Y04085* +X055911Y0408433* +X0558869Y0408383* +X0558652Y040835* +X0558544Y0408341* +X0558452Y0408333* +X0558369Y0408325* +X0558302* +X0558244Y0408316* +X0558161* +X0557944Y0408325* +X0557736Y0408341* +X0557544Y0408375* +X0557369Y0408408* +X0557203Y0408458* +X0557044Y0408508* +X0556903Y0408558* +X0556778Y0408616* +X055667Y0408675* +X0556569Y0408725* +X0556486Y0408775* +X055642Y0408824* +X0556361Y0408858* +X0556328Y0408891* +X0556303Y0408908* +X0556295Y0408916* +X0556178Y0409033* +X055607Y0409149* +X0555978Y0409274* +X0555903Y0409399* +X0555836Y0409516* +X0555787Y0409641* +X0555736Y0409758* +X0555703Y0409866* +X0555678Y0409974* +X0555653Y0410066* +X0555637Y0410149* +X0555628Y0410224* +Y0410282* +X055562Y0410332* +Y0410357* +Y0410366* +X0555628Y0410491* +X0555637Y0410615* +X0555695Y0410832* +X0555761Y0411032* +X0555845Y041119* +X0555895Y0411265* +X0555936Y0411323* +X055597Y0411374* +X0556003Y0411415* +X0556036Y0411457* +X0556061Y0411482* +X055607Y041149* +X0556078Y0411498* +X0556145Y0411557* +X0556228Y0411615* +X055632Y0411682* +X0556428Y041174* +X0556653Y0411873* +X0556894Y0411998* +X0557011Y0412057* +X0557119Y0412107* +X0557219Y0412156* +X0557311Y041219* +X0557377Y0412223* +X0557436Y0412248* +X0557469Y0412265* +X0557486Y0412273* +X0557619Y0412331* +X0557736Y041239* +X0557844Y041244* +X0557944Y0412481* +X0558027Y0412531* +X0558111Y0412573* +X0558177Y0412606* +X0558236Y041264* +X0558286Y0412673* +X0558327Y0412698* +X0558394Y041274* +X0558427Y0412765* +X0558435Y0412773* +X0558502Y0412848* +X0558552Y0412923* +X0558594Y0412998* +X0558619Y0413073* +X0558635Y0413131* +X0558644Y041319* +Y0413223* +Y0413231* +X0558635Y0413339* +X055861Y0413431* +X0558569Y0413514* +X0558527Y0413581* +X0558485Y0413639* +X0558444Y0413681* +X0558419Y0413706* +X0558411Y0413714* +X0558311Y0413781* +X0558194Y0413831* +X0558061Y0413864* +X0557936Y0413889* +X0557819Y0413906* +X0557727Y0413914* +X0557636* +X0557436Y0413906* +X0557269Y0413872* +X0557128Y0413839* +X0557003Y0413789* +X0556911Y0413748* +X0556844Y0413706* +X0556811Y0413673* +X0556794Y0413664* +X0556695Y0413564* +X055662Y0413456* +X0556561Y0413339* +X055652Y0413223* +X0556495Y0413123* +X055647Y0413039* +Y0413006* +X0556461Y0412981* +Y0412973* +Y0412964* +X0555195Y0413015* +X0555212Y0413173* +X0555245Y0413331* +X0555287Y0413473* +X0555328Y0413606* +X0555387Y0413731* +X0555437Y0413847* +X0555503Y0413956* +X0555562Y0414047* +X055562Y0414139* +X0555678Y0414214* +X0555736Y0414272* +X0555778Y0414331* +X055582Y0414372* +X0555853Y0414397* +X055587Y0414414* +X0555878Y0414422* +X0556003Y0414514* +X0556128Y0414597* +X055627Y0414672* +X0556411Y0414731* +X0556553Y0414781* +X0556703Y0414822* +X0556986Y0414889* +X0557111Y0414914* +X0557236Y041493* +X0557344Y0414939* +X0557444Y0414947* +X0557519Y0414955* +X0557627* +X0557827Y0414947* +G37* +G36* +X0498826Y041244D02* +X0498918Y0412573D01* +X0499026Y041269* +X0499134Y041279* +X0499251Y0412873* +X0499367Y0412948* +X0499484Y0413006* +X0499601Y0413056* +X0499709Y0413098* +X0499817Y0413123* +X0499917Y0413148* +X0500009Y0413165* +X0500084Y0413181* +X050015* +X05002Y041319* +X0500242* +X0500434Y0413181* +X0500617Y0413148* +X0500783Y0413106* +X050095Y0413048* +X05011Y0412981* +X0501242Y0412906* +X0501367Y0412823* +X0501483Y041274* +X0501583Y0412648* +X0501675Y0412573* +X050175Y041249* +X0501816Y0412423* +X0501866Y0412365* +X05019Y0412323* +X0501925Y041229* +X0501933Y0412282* +X0502041Y0412115* +X0502141Y041194* +X0502225Y0411765* +X05023Y041159* +X0502358Y0411415* +X0502408Y0411249* +X050245Y041109* +X0502483Y041094* +X0502516Y0410799* +X0502533Y0410666* +X050255Y0410549* +X0502558Y0410457* +Y0410374* +X0502566Y0410316* +Y0410282* +Y0410266* +X0502558Y0410091* +X050255Y0409924* +X0502525Y0409774* +X0502499Y0409632* +X0502466Y0409499* +X0502424Y0409383* +X0502383Y0409274* +X0502341Y0409174* +X0502308Y0409091* +X0502266Y0409016* +X0502225Y040895* +X0502191Y0408899* +X0502166Y0408858* +X0502141Y0408833* +X0502133Y0408816* +X0502125Y0408808* +X0502033Y0408725* +X0501941Y040865* +X050185Y0408583* +X050175Y0408525* +X050165Y0408475* +X0501558Y0408433* +X0501367Y0408375* +X05012Y0408341* +X0501133Y0408333* +X0501067Y0408325* +X0501017Y0408316* +X050095* +X05008Y0408325* +X0500659Y0408341* +X0500534Y0408358* +X0500425Y0408391* +X0500334Y0408416* +X0500267Y0408433* +X0500225Y040845* +X0500209Y0408458* +X0500084Y0408516* +X0499959Y0408591* +X0499851Y0408666* +X0499742Y0408741* +X0499659Y0408816* +X0499592Y0408875* +X0499551Y0408908* +X0499534Y0408924* +X0499634Y0408433* +X0498443* +X0497043Y0414839* +X0498301* +X0498826Y041244* +G37* +G36* +X0551621Y0413181D02* +X0551755Y0413165D01* +X0551871Y0413148* +X055198Y0413123* +X0552071Y041309* +X0552138Y0413073* +X055218Y0413056* +X0552196Y0413048* +X0552321Y041299* +X0552446Y0412923* +X0552563Y0412848* +X0552671Y0412773* +X0552763Y0412698* +X0552838Y041264* +X0552888Y0412606* +X0552896Y041259* +X0552904* +X0552813Y0413073* +X0553996* +X0555328Y0406667* +X0554079* +X0553579Y0409058* +X0553487Y0408924* +X0553387Y0408816* +X0553279Y0408716* +X0553163Y0408633* +X0553046Y0408558* +X0552938Y04085* +X0552821Y040845* +X0552704Y0408408* +X0552604Y0408375* +X0552504Y0408358* +X0552413Y0408341* +X0552338Y0408325* +X055228* +X055223Y0408316* +X0552188* +X0552021Y0408325* +X0551863Y040835* +X0551713Y0408383* +X0551563Y0408433* +X055143Y0408483* +X0551297Y040855* +X055118Y0408616* +X0551072Y0408683* +X0550972Y040875* +X0550888Y0408816* +X0550813Y0408883* +X0550747Y0408933* +X0550697Y0408983* +X0550664Y0409016* +X0550639Y0409041* +X055063Y0409049* +X0550497Y0409216* +X055038Y0409391* +X0550272Y0409574* +X0550189Y0409749* +X0550114Y0409932* +X0550047Y0410107* +X0549997Y0410282* +X0549956Y041044* +X054993Y0410599* +X0549905Y041074* +X0549889Y0410865* +X0549872Y0410974* +Y0411057* +X0549864Y0411124* +Y0411165* +Y0411182* +X0549872Y0411365* +X0549881Y0411532* +X0549905Y041169* +X054993Y041184* +X0549964Y0411973* +X0550005Y0412098* +X0550047Y0412207* +X0550089Y0412306* +X0550131Y0412398* +X0550172Y0412473* +X0550205Y0412531* +X0550247Y041259* +X0550272Y0412631* +X0550297Y0412656* +X0550305Y0412673* +X0550314Y0412681* +X0550397Y0412773* +X0550489Y0412848* +X0550589Y0412915* +X055068Y0412973* +X055078Y0413023* +X055088Y0413064* +X0551063Y0413123* +X055123Y0413165* +X0551297Y0413173* +X0551363Y0413181* +X0551413Y041319* +X055148* +X0551621Y0413181* +G37* +G36* +X0527998Y0414947D02* +X0528189Y041493D01* +X0528364Y0414905* +X0528531Y0414872* +X0528681Y041483* +X0528822Y0414781* +X0528947Y0414739* +X0529056Y0414689* +X0529155Y0414631* +X0529247Y0414589* +X0529322Y0414539* +X052938Y0414497* +X052943Y0414464* +X0529464Y0414439* +X052948Y0414422* +X0529489Y0414414* +X0529589Y0414314* +X052968Y0414206* +X0529755Y0414089* +X0529822Y0413981* +X052988Y0413864* +X052993Y0413756* +X0529972Y0413648* +X0529997Y0413548* +X0530022Y0413448* +X0530038Y0413356* +X0530055Y0413273* +X0530063Y0413206* +X0530072Y0413148* +Y0413106* +Y0413081* +Y0413073* +X0530063Y0412906* +X0530038Y0412748* +X0530014Y0412606* +X0529972Y041249* +X0529939Y041239* +X0529914Y0412315* +X0529889Y0412273* +X052988Y0412256* +X0529797Y0412132* +X0529714Y0412023* +X0529622Y0411932* +X052953Y0411848* +X0529455Y0411782* +X0529397Y041174* +X0529355Y0411707* +X0529339Y0411698* +X0529272Y0411657* +X0529189Y0411615* +X0529022Y0411523* +X0528839Y0411432* +X0528664Y0411348* +X0528497Y0411273* +X0528431Y041124* +X0528372Y0411215* +X0528314Y041119* +X0528281Y0411174* +X0528256Y0411157* +X0528247* +X0528114Y0411099* +X0527989Y041104* +X0527881Y041099* +X0527789Y0410949* +X0527706Y0410907* +X0527631Y0410865* +X0527564Y0410832* +X0527506Y0410799* +X0527464Y0410774* +X0527423Y0410749* +X0527365Y0410715* +X052734Y0410699* +X0527331Y041069* +X0527248Y0410615* +X052719Y0410532* +X0527148Y0410449* +X0527123Y0410374* +X0527098Y0410307* +X052709Y0410257* +Y0410224* +Y0410207* +X0527098Y0410091* +X0527131Y0409982* +X0527181Y0409882* +X0527231Y0409799* +X052729Y0409732* +X0527331Y0409683* +X0527365Y0409649* +X0527381Y0409641* +X0527439Y0409599* +X0527506Y0409566* +X0527648Y0409508* +X0527806Y0409474* +X0527964Y0409441* +X0528098Y0409424* +X0528164* +X0528214Y0409416* +X0528464* +X0528589Y0409433* +X0528706Y0409449* +X0528814Y0409466* +X0528914Y0409491* +X0528997Y0409524* +X052908Y0409549* +X0529147Y0409583* +X0529206Y0409616* +X0529255Y0409641* +X0529297Y0409674* +X052933Y0409699* +X0529372Y0409732* +X0529389Y0409749* +X0529422Y0409791* +X0529447Y0409849* +X0529497Y0409966* +X052953Y0410099* +X0529555Y0410241* +X0529572Y0410366* +X052958Y0410465* +X0529589Y0410507* +Y041054* +Y0410557* +Y0410566* +X0530847Y0410499* +Y0410266* +X0530822Y0410049* +X0530788Y0409857* +X0530747Y0409691* +X0530722Y0409616* +X0530697Y0409549* +X053068Y0409491* +X0530663Y0409449* +X0530647Y0409408* +X053063Y0409383* +X0530622Y0409366* +Y0409358* +X0530572Y0409266* +X0530513Y0409183* +X053038Y0409033* +X0530238Y0408899* +X0530097Y0408791* +X0529972Y0408708* +X0529914Y0408666* +X0529864Y0408641* +X0529822Y0408616* +X0529789Y0408608* +X0529772Y0408591* +X0529764* +X052953Y04085* +X0529281Y0408433* +X0529039Y0408383* +X0528822Y040835* +X0528714Y0408341* +X0528622Y0408333* +X0528539Y0408325* +X0528473* +X0528414Y0408316* +X0528331* +X0528114Y0408325* +X0527906Y0408341* +X0527714Y0408375* +X0527539Y0408408* +X0527373Y0408458* +X0527215Y0408508* +X0527073Y0408558* +X0526948Y0408616* +X052684Y0408675* +X052674Y0408725* +X0526656Y0408775* +X052659Y0408824* +X0526532Y0408858* +X0526498Y0408891* +X0526473Y0408908* +X0526465Y0408916* +X0526348Y0409033* +X052624Y0409149* +X0526148Y0409274* +X0526073Y0409399* +X0526007Y0409516* +X0525957Y0409641* +X0525907Y0409758* +X0525874Y0409866* +X0525848Y0409974* +X0525823Y0410066* +X0525807Y0410149* +X0525799Y0410224* +Y0410282* +X052579Y0410332* +Y0410357* +Y0410366* +X0525799Y0410491* +X0525807Y0410615* +X0525865Y0410832* +X0525932Y0411032* +X0526015Y041119* +X0526065Y0411265* +X0526107Y0411323* +X052614Y0411374* +X0526173Y0411415* +X0526207Y0411457* +X0526232Y0411482* +X052624Y041149* +X0526248Y0411498* +X0526315Y0411557* +X0526398Y0411615* +X052649Y0411682* +X0526598Y041174* +X0526823Y0411873* +X0527065Y0411998* +X0527181Y0412057* +X052729Y0412107* +X0527389Y0412156* +X0527481Y041219* +X0527548Y0412223* +X0527606Y0412248* +X0527639Y0412265* +X0527656Y0412273* +X0527789Y0412331* +X0527906Y041239* +X0528014Y041244* +X0528114Y0412481* +X0528198Y0412531* +X0528281Y0412573* +X0528347Y0412606* +X0528406Y041264* +X0528456Y0412673* +X0528497Y0412698* +X0528564Y041274* +X0528597Y0412765* +X0528606Y0412773* +X0528672Y0412848* +X0528722Y0412923* +X0528764Y0412998* +X0528789Y0413073* +X0528806Y0413131* +X0528814Y041319* +Y0413223* +Y0413231* +X0528806Y0413339* +X0528781Y0413431* +X0528739Y0413514* +X0528697Y0413581* +X0528656Y0413639* +X0528614Y0413681* +X0528589Y0413706* +X0528581Y0413714* +X0528481Y0413781* +X0528364Y0413831* +X0528231Y0413864* +X0528106Y0413889* +X0527989Y0413906* +X0527898Y0413914* +X0527806* +X0527606Y0413906* +X0527439Y0413872* +X0527298Y0413839* +X0527173Y0413789* +X0527081Y0413748* +X0527015Y0413706* +X0526981Y0413673* +X0526965Y0413664* +X0526865Y0413564* +X052679Y0413456* +X0526731Y0413339* +X052669Y0413223* +X0526665Y0413123* +X052664Y0413039* +Y0413006* +X0526631Y0412981* +Y0412973* +Y0412964* +X0525365Y0413015* +X0525382Y0413173* +X0525415Y0413331* +X0525457Y0413473* +X0525499Y0413606* +X0525557Y0413731* +X0525607Y0413847* +X0525674Y0413956* +X0525732Y0414047* +X052579Y0414139* +X0525848Y0414214* +X0525907Y0414272* +X0525948Y0414331* +X052599Y0414372* +X0526023Y0414397* +X052604Y0414414* +X0526048Y0414422* +X0526173Y0414514* +X0526298Y0414597* +X052644Y0414672* +X0526581Y0414731* +X0526723Y0414781* +X0526873Y0414822* +X0527156Y0414889* +X0527281Y0414914* +X0527406Y041493* +X0527515Y0414939* +X0527614Y0414947* +X0527689Y0414955* +X0527798* +X0527998Y0414947* +G37* +G36* +X0522492Y0413181D02* +X05227Y0413156D01* +X0522891Y0413115* +X0523075Y0413073* +X0523241Y0413006* +X0523399Y0412948* +X0523541Y0412873* +X0523674Y0412806* +X0523791Y0412731* +X0523891Y0412656* +X0523974Y0412598* +X0524049Y041254* +X0524108Y041249* +X0524149Y0412448* +X0524174Y0412423* +X0524183Y0412415* +X0524307Y0412265* +X0524424Y0412107* +X0524516Y041194* +X0524599Y0411773* +X0524674Y0411598* +X0524732Y0411423* +X0524774Y0411257* +X0524816Y0411099* +X0524849Y0410949* +X0524866Y0410807* +X0524882Y0410682* +X0524899Y0410574* +Y0410482* +X0524907Y0410416* +Y0410374* +Y0410357* +X0524899Y0410149* +X0524866Y0409957* +X0524832Y0409783* +X0524782Y0409624* +X0524741Y0409499* +X0524724Y0409449* +X0524699Y0409399* +X0524691Y0409366* +X0524674Y0409341* +X0524666Y0409324* +Y0409316* +X0524557Y0409149* +X0524441Y0408999* +X0524316Y0408875* +X0524191Y0408766* +X0524083Y0408683* +X0523991Y0408625* +X0523958Y04086* +X0523933Y0408591* +X0523916Y0408575* +X0523908* +X0523708Y0408491* +X0523516Y0408425* +X0523316Y0408383* +X0523141Y040835* +X0522983Y0408333* +X0522916Y0408325* +X0522858* +X0522816Y0408316* +X052275* +X0522525Y0408325* +X0522317Y040835* +X0522117Y0408391* +X0521933Y0408441* +X0521759Y0408508* +X05216Y0408575* +X0521459Y040865* +X0521325Y0408725* +X0521209Y04088* +X0521109Y0408875* +X0521017Y0408941* +X0520951Y0409008* +X0520892Y0409058* +X0520851Y0409099* +X0520825Y0409124* +X0520817Y0409133* +X0520692Y0409291* +X0520576Y0409458* +X0520484Y0409616* +X0520401Y0409791* +X0520326Y0409949* +X0520267Y0410116* +X0520217Y0410274* +X0520184Y0410424* +X0520151Y0410557* +X0520134Y041069* +X0520118Y0410799* +X0520101Y0410899* +Y0410982* +X0520092Y041104* +Y0411074* +Y041109* +X0520101Y0411265* +X0520118Y0411432* +X0520143Y041159* +X0520184Y0411732* +X0520226Y0411865* +X0520276Y041199* +X0520326Y0412107* +X0520384Y0412215* +X0520434Y0412306* +X0520492Y0412381* +X0520542Y0412456* +X0520584Y0412515* +X0520626Y0412556* +X0520651Y041259* +X0520667Y0412606* +X0520676Y0412615* +X0520784Y0412715* +X0520909Y0412806* +X0521034Y0412881* +X0521167Y0412948* +X05213Y0413006* +X0521434Y0413048* +X0521567Y041309* +X0521692Y0413115* +X0521808Y0413139* +X0521917Y0413156* +X0522017Y0413173* +X0522108Y0413181* +X0522175Y041319* +X0522275* +X0522492Y0413181* +G37* +G36* +X0534828Y0408433D02* +X0534903Y0408283D01* +X0534978Y0408142* +X0535053Y0408025* +X0535136Y0407925* +X0535211Y0407842* +X0535295Y0407775* +X053537Y0407717* +X0535445Y0407667* +X0535511Y0407633* +X0535578Y0407608* +X0535636Y0407583* +X0535678Y0407575* +X0535719Y0407567* +X0535753Y0407558* +X0535778* +X0535936Y0407567* +X0536011Y0407583* +X0536078Y0407592* +X0536136Y0407608* +X0536178Y0407617* +X0536211Y0407625* +X0536219* +X0536328Y0406692* +X0536144Y0406642* +X0535978Y0406609* +X0535828Y0406584* +X0535695Y0406567* +X0535586Y0406559* +X0535503Y040655* +X0535436* +X0535295Y0406559* +X0535161Y0406575* +X0535045Y04066* +X0534945Y0406625* +X0534862Y040665* +X0534803Y0406675* +X053477Y0406692* +X0534753Y04067* +X0534645Y0406759* +X0534553Y0406825* +X053447Y0406892* +X0534395Y040695* +X0534337Y0407009* +X0534295Y0407059* +X053427Y0407092* +X0534262Y04071* +X053422Y040715* +X0534178Y0407208* +X0534087Y0407342* +X0533987Y0407483* +X0533904Y0407633* +X053382Y0407767* +X0533787Y0407825* +X0533754Y0407875* +X0533729Y0407917* +X0533712Y040795* +X0533695Y0407967* +Y0407975* +X0530838Y0413073* +X0532163* +X0533271Y0411007* +X0533421Y0410715* +X0533562Y041044* +X053367Y0410191* +X0533729Y0410074* +X053377Y0409966* +X0533812Y0409866* +X0533845Y0409783* +X0533879Y0409699* +X0533904Y0409641* +X053392Y0409583* +X0533937Y0409549* +X0533945Y0409524* +Y0409591* +X0533954Y0409666* +X0533962Y0409758* +X053397Y0409857* +X0533995Y0410066* +X0534012Y0410266* +X0534037Y0410457* +X0534045Y041054* +X0534054Y0410615* +X0534062Y0410674* +Y0410715* +X053407Y0410749* +Y0410757* +X0534395Y0413073* +X0535636* +X0534828Y0408433* +G37* +G36* +X0515369Y0413814D02* +X0515528Y0413073D01* +X0516136* +X0516327Y041214* +X0515711* +X0516111Y0410274* +X0516136Y0410132* +X0516161Y0410007* +X0516186Y0409899* +X0516202Y0409791* +X0516219Y0409699* +X0516227Y0409624* +X0516244Y0409549* +X0516252Y0409491* +Y0409433* +X0516261Y0409391* +X0516269Y0409333* +Y0409291* +Y0409283* +X0516252Y0409124* +X0516219Y0408975* +X0516177Y0408858* +X0516119Y040875* +X0516061Y0408675* +X0516019Y0408616* +X0515986Y0408575* +X0515969Y0408566* +X0515911Y0408525* +X0515844Y0408483* +X0515694Y0408425* +X0515536Y0408375* +X0515378Y040835* +X0515236Y0408333* +X0515169Y0408325* +X051512* +X0515069Y0408316* +X0514886* +X0514761Y0408325* +X0514653Y0408341* +X0514553Y040835* +X0514461Y0408366* +X0514403Y0408375* +X0514361Y0408383* +X0514345* +X0514145Y0409316* +X0514261Y0409308* +X0514353Y0409299* +X051442Y0409291* +X0514478* +X051452Y0409283* +X0514645* +X0514711Y0409291* +X051477Y0409308* +X051482Y0409324* +X0514853Y0409333* +X0514878Y0409349* +X0514886Y0409358* +X0514894* +X0514928Y0409391* +X0514945Y0409433* +X0514978Y0409508* +Y0409541* +X0514986Y0409566* +Y0409583* +Y0409591* +Y0409608* +X0514978Y0409632* +X0514969Y0409716* +X0514953Y0409807* +X0514928Y0409916* +X0514911Y0410016* +X0514894Y0410107* +X0514886Y0410141* +Y0410166* +X0514878Y0410182* +Y0410191* +X0514461Y041214* +X0513695* +X0513503Y0413073* +X051427* +X0513945Y041468* +X0515369Y0413814* +G37* +G36* +X0547107Y0413173D02* +X0547248Y0413156D01* +X0547381Y0413131* +X0547507Y0413106* +X0547623Y0413081* +X0547723Y0413048* +X0547815Y0413015* +X0547906Y0412981* +X0547981Y0412948* +X054804Y0412923* +X054809Y0412898* +X0548131Y0412873* +X0548165Y0412856* +X0548181Y0412848* +X054819Y041284* +X0548373Y0412698* +X0548523Y041254* +X0548648Y0412381* +X0548748Y0412223* +X0548823Y041209* +X0548848Y0412023* +X0548873Y0411973* +X0548889Y0411932* +X0548906Y0411898* +X0548914Y0411882* +Y0411873* +X054769Y0411773* +X0547656Y0411857* +X0547623Y0411932* +X0547581Y0411998* +X0547532Y0412048* +X0547498Y041209* +X0547465Y0412123* +X054744Y041214* +X0547432Y0412148* +X0547348Y0412198* +X0547265Y0412231* +X0547173Y0412256* +X054709Y0412273* +X0547015Y0412282* +X0546957Y041229* +X0546898* +X0546782Y0412282* +X0546682Y0412265* +X0546598Y0412248* +X0546532Y0412223* +X0546482Y041219* +X0546449Y0412173* +X0546424Y0412156* +X0546415Y0412148* +X0546357Y0412098* +X0546315Y041204* +X054629Y0411982* +X0546265Y0411932* +X0546257Y0411882* +X0546249Y0411848* +Y0411823* +Y0411815* +Y0411748* +X0546265Y0411682* +X054629Y0411548* +X0546307Y041149* +X0546315Y041144* +X0546332Y0411407* +Y0411399* +X0546399Y0411382* +X0546465Y0411357* +X0546557Y041134* +X0546649Y0411323* +X054684Y041129* +X054704Y0411265* +X0547232Y0411249* +X0547315Y041124* +X054739Y0411232* +X0547448Y0411224* +X054749Y0411215* +X0547532* +X0547723Y0411199* +X0547898Y0411174* +X0548056Y041114* +X0548206Y0411107* +X054834Y0411065* +X0548464Y0411024* +X0548573Y0410982* +X0548664Y041094* +X0548748Y0410899* +X0548814Y0410865* +X0548873Y0410824* +X0548923Y0410799* +X0548964Y0410774* +X0548989Y0410749* +X0548998Y041074* +X0549006Y0410732* +X0549081Y0410657* +X0549139Y0410574* +X0549197Y0410482* +X0549239Y0410399* +X0549314Y0410216* +X0549364Y0410049* +X0549389Y0409899* +X0549397Y0409832* +X0549406Y0409774* +X0549414Y0409732* +Y0409699* +Y0409674* +Y0409666* +X0549406Y0409558* +X0549397Y0409458* +X0549356Y0409266* +X0549298Y0409099* +X0549223Y0408958* +X0549156Y0408841* +X0549097Y0408758* +X0549073Y0408733* +X0549056Y0408708* +X0549039Y04087* +Y0408691* +X0548964Y0408625* +X0548889Y0408566* +X0548731Y0408475* +X0548573Y0408408* +X0548423Y0408366* +X0548289Y0408333* +X0548231Y0408325* +X0548181* +X0548148Y0408316* +X054809* +X0547956Y0408325* +X0547823Y0408341* +X0547706Y0408366* +X0547598Y04084* +X0547507Y0408433* +X0547432Y0408458* +X054739Y0408475* +X0547373Y0408483* +X054724Y040855* +X0547123Y0408625* +X0547015Y0408708* +X0546915Y0408783* +X054684Y0408849* +X0546782Y0408899* +X0546748Y0408933* +X0546732Y040895* +X0546707Y0408758* +X0546699Y0408666* +X0546682Y0408591* +X0546665Y0408525* +X0546649Y0408475* +X054664Y0408441* +Y0408433* +X0545424* +X0545457Y0408566* +X0545482Y0408691* +X0545499Y04088* +X0545507Y0408899* +X0545516Y0408975* +X0545524Y0409041* +Y0409074* +Y0409091* +Y0409158* +X0545516Y0409241* +X0545499Y0409416* +X0545466Y0409608* +X0545432Y0409799* +X0545399Y0409974* +X0545382Y0410057* +X0545366Y0410124* +X0545357Y0410182* +X0545349Y0410224* +X0545341Y0410249* +Y0410257* +X0545299Y0410432* +X0545266Y0410599* +X0545232Y041074* +X0545207Y0410874* +X0545182Y041099* +X0545157Y041109* +X0545141Y0411174* +X0545124Y0411249* +X0545116Y0411315* +X0545108Y0411365* +X0545099Y0411407* +X0545091Y041144* +Y0411465* +X0545083Y0411482* +Y041149* +X0545057Y0411665* +X0545049Y041174* +Y0411807* +X0545041Y0411865* +Y0411907* +Y0411932* +Y041194* +X0545049Y041204* +X0545057Y0412132* +X0545108Y0412298* +X0545174Y0412448* +X0545257Y0412581* +X0545341Y0412681* +X0545407Y0412756* +X0545457Y0412806* +X0545466Y0412823* +X0545474* +X0545557Y041289* +X0545649Y0412948* +X0545857Y0413031* +X0546082Y0413098* +X0546299Y0413148* +X0546399Y0413156* +X054649Y0413173* +X0546573Y0413181* +X0546649* +X0546715Y041319* +X0546957* +X0547107Y0413173* +G37* +G36* +X0541026Y0408433D02* +X0539776D01* +X0539493Y0409816* +X0538635Y0410574* +X0537994Y0408433* +X0536736* +X0537735Y041139* +X053587Y0413073* +X0537502* +X0539135Y041149* +X0538435Y0414839* +X0539693* +X0541026Y0408433* +G37* +G36* +X050444Y0413814D02* +X0504599Y0413073D01* +X0505207* +X0505398Y041214* +X0504782* +X0505182Y0410274* +X0505207Y0410132* +X0505232Y0410007* +X0505257Y0409899* +X0505273Y0409791* +X050529Y0409699* +X0505298Y0409624* +X0505315Y0409549* +X0505323Y0409491* +Y0409433* +X0505332Y0409391* +X050534Y0409333* +Y0409291* +Y0409283* +X0505323Y0409124* +X050529Y0408975* +X0505248Y0408858* +X050519Y040875* +X0505132Y0408675* +X050509Y0408616* +X0505057Y0408575* +X050504Y0408566* +X0504982Y0408525* +X0504915Y0408483* +X0504765Y0408425* +X0504607Y0408375* +X0504449Y040835* +X0504307Y0408333* +X0504241Y0408325* +X050419* +X0504141Y0408316* +X0503957* +X0503832Y0408325* +X0503724Y0408341* +X0503624Y040835* +X0503532Y0408366* +X0503474Y0408375* +X0503433Y0408383* +X0503416* +X0503216Y0409316* +X0503333Y0409308* +X0503424Y0409299* +X0503491Y0409291* +X0503549* +X0503591Y0409283* +X0503716* +X0503782Y0409291* +X0503841Y0409308* +X0503891Y0409324* +X0503924Y0409333* +X0503949Y0409349* +X0503957Y0409358* +X0503966* +X0503999Y0409391* +X0504016Y0409433* +X0504049Y0409508* +Y0409541* +X0504057Y0409566* +Y0409583* +Y0409591* +Y0409608* +X0504049Y0409632* +X0504041Y0409716* +X0504024Y0409807* +X0503999Y0409916* +X0503982Y0410016* +X0503966Y0410107* +X0503957Y0410141* +Y0410166* +X0503949Y0410182* +Y0410191* +X0503532Y041214* +X0502766* +X0502574Y0413073* +X0503341* +X0503016Y041468* +X050444Y0413814* +G37* +%LNunisolder52_full-4*% +%LPC*% +G36* +X0546507Y0410607D02* +X0546499D01* +X0546532Y0410432* +X0546573Y0410274* +X0546607Y0410132* +X0546649Y0410016* +X0546682Y0409916* +X0546715Y0409841* +X0546732Y0409791* +X0546748Y0409758* +X0546757Y0409749* +X0546807Y0409674* +X0546865Y0409599* +X0546932Y0409541* +X054699Y0409491* +X0547048Y0409449* +X054709Y0409416* +X0547123Y0409399* +X0547132Y0409391* +X0547223Y0409349* +X0547323Y0409316* +X0547406Y0409291* +X054749Y0409274* +X0547565Y0409266* +X0547615Y0409258* +X0547665* +X0547756Y0409266* +X054784Y0409283* +X0547906Y0409308* +X0547973Y0409333* +X0548015Y0409358* +X0548056Y0409383* +X0548073Y0409399* +X0548081Y0409408* +X0548131Y0409466* +X0548165Y0409533* +X0548198Y0409591* +X0548214Y0409649* +X0548223Y0409707* +X0548231Y0409749* +Y0409774* +Y0409783* +X0548223Y0409874* +X0548198Y0409966* +X0548165Y0410032* +X0548131Y0410099* +X0548098Y0410141* +X0548065Y0410182* +X054804Y0410199* +X0548031Y0410207* +X0547973Y0410249* +X0547898Y0410291* +X0547806Y0410324* +X0547715Y0410357* +X0547515Y0410416* +X0547307Y0410465* +X0547115Y0410499* +X0547023Y0410515* +X0546948Y0410524* +X054689Y041054* +X054684* +X0546807Y0410549* +X0546798* +X0546673Y0410566* +X0546624Y0410582* +X0546582Y0410591* +X0546549Y0410599* +X0546515* +X0546507Y0410607* +G37* +G36* +X0500126Y0412265D02* +X0500075D01* +X0499942Y0412248* +X0499826Y0412215* +X0499717Y0412165* +X0499626Y0412107* +X0499551Y0412048* +X0499492Y0411998* +X0499451Y0411965* +X0499442Y0411948* +X0499351Y0411823* +X0499284Y041169* +X0499234Y0411557* +X0499201Y0411423* +X0499184Y0411307* +X0499167Y0411215* +Y0411182* +Y0411157* +Y041114* +Y0411132* +X0499176Y0410965* +X0499192Y0410799* +X0499226Y0410649* +X0499259Y0410507* +X0499293Y0410382* +X0499326Y0410291* +X0499334Y0410257* +X0499342Y0410232* +X0499351Y0410216* +Y0410207* +X0499417Y0410041* +X0499501Y0409891* +X0499576Y0409766* +X0499651Y0409666* +X0499717Y0409591* +X0499776Y0409533* +X0499809Y0409499* +X0499826Y0409491* +X0499942Y0409416* +X050005Y0409358* +X0500159Y0409316* +X0500259Y0409291* +X050035Y0409274* +X0500417Y0409258* +X0500475* +X0500609Y0409266* +X0500725Y0409299* +X0500834Y0409341* +X0500925Y0409399* +X0501Y0409449* +X050105Y0409491* +X0501092Y0409524* +X05011Y0409533* +X0501183Y0409649* +X0501242Y0409774* +X0501292Y0409907* +X0501317Y0410032* +X0501333Y0410141* +X0501342Y0410232* +X050135Y0410266* +Y0410291* +Y0410307* +Y0410316* +X0501342Y0410449* +X0501333Y0410582* +X0501292Y0410824* +X0501233Y0411049* +X05012Y0411157* +X0501167Y0411249* +X0501133Y041134* +X0501108Y0411415* +X0501075Y0411482* +X050105Y041154* +X0501025Y041159* +X0501008Y0411623* +X0500992Y041164* +Y0411648* +X0500925Y0411757* +X050085Y0411848* +X0500775Y0411932* +X05007Y0412007* +X0500617Y0412065* +X0500542Y0412115* +X0500467Y0412156* +X05004Y041219* +X0500267Y0412231* +X0500217Y0412248* +X0500167Y0412256* +X0500126Y0412265* +G37* +G36* +X0522333Y0412248D02* +X0522267D01* +X0522117Y041224* +X0521992Y0412207* +X0521875Y0412165* +X0521783Y0412115* +X05217Y0412057* +X052165Y0412015* +X0521608Y0411982* +X05216Y0411973* +X0521509Y0411865* +X0521442Y0411748* +X05214Y0411632* +X0521367Y0411515* +X052135Y0411415* +X0521334Y0411332* +Y0411299* +Y0411273* +Y0411265* +Y0411257* +X0521342Y041109* +X0521359Y0410932* +X0521384Y0410782* +X0521409Y0410632* +X052145Y0410499* +X0521492Y0410374* +X0521534Y0410257* +X0521584Y0410149* +X0521633Y0410057* +X0521675Y0409974* +X0521717Y0409899* +X0521759Y0409832* +X0521783Y0409791* +X0521808Y0409749* +X0521825Y0409732* +X0521833Y0409724* +X05219Y0409649* +X0521967Y0409583* +X0522042Y0409516* +X0522117Y0409466* +X0522258Y0409391* +X05224Y0409341* +X0522516Y0409308* +X0522616Y0409291* +X052265Y0409283* +X05227* +X052285Y0409299* +X0522975Y0409333* +X0523091Y0409374* +X0523191Y0409433* +X0523275Y0409483* +X0523333Y0409533* +X0523366Y0409566* +X0523383Y0409574* +X0523474Y0409691* +X0523533Y0409824* +X0523583Y0409949* +X0523616Y0410082* +X0523633Y0410191* +X0523641Y0410282* +X0523649Y0410316* +Y0410341* +Y0410357* +Y0410366* +X0523641Y0410524* +X0523624Y0410674* +X0523599Y0410824* +X0523566Y0410965* +X0523533Y0411082* +X0523508Y0411174* +X0523499Y0411207* +X0523491Y0411232* +X0523483Y0411249* +Y0411257* +X0523408Y0411423* +X0523333Y0411573* +X0523249Y0411698* +X0523175Y0411807* +X05231Y0411882* +X0523041Y041194* +X0523008Y0411982* +X0522991Y041199* +X0522866Y0412073* +X0522741Y041214* +X0522625Y0412182* +X0522508Y0412215* +X0522408Y0412231* +X0522333Y0412248* +G37* +G36* +X055203Y041229D02* +X0551971D01* +X055183Y0412282* +X0551705Y0412248* +X0551596Y0412198* +X0551505Y0412148* +X055143Y0412098* +X0551372Y0412048* +X0551338Y0412015* +X055133Y0412007* +X0551247Y041189* +X0551188Y0411765* +X0551138Y0411632* +X0551113Y0411507* +X0551097Y041139* +X055108Y041129* +Y0411257* +Y0411232* +Y0411215* +Y0411207* +X0551088Y041104* +X0551113Y0410865* +X0551138Y0410699* +X0551172Y0410549* +X0551213Y0410424* +X055123Y0410366* +X0551238Y0410324* +X0551255Y0410282* +X0551263Y0410257* +X0551272Y0410241* +Y0410232* +X0551347Y0410049* +X055143Y0409891* +X0551505Y0409766* +X0551588Y0409657* +X0551655Y0409583* +X0551705Y0409524* +X0551738Y0409491* +X0551755Y0409483* +X0551863Y0409408* +X0551971Y0409349* +X0552071Y0409316* +X0552163Y0409283* +X0552238Y0409266* +X0552305Y0409258* +X0552355* +X0552488Y0409274* +X0552604Y0409308* +X0552713Y0409349* +X0552804Y0409408* +X0552879Y0409466* +X0552929Y0409508* +X0552971Y0409541* +X0552979Y0409558* +X0553071Y0409683* +X0553129Y0409816* +X0553179Y0409957* +X0553213Y0410099* +X0553229Y0410216* +X0553237Y0410316* +X0553246Y0410357* +Y0410382* +Y0410399* +Y0410407* +X0553237Y0410549* +X0553221Y0410699* +X0553196Y0410849* +X0553163Y0410982* +X0553138Y0411099* +X0553113Y041119* +X0553104Y0411224* +X0553096Y0411249* +X0553088Y0411265* +Y0411273* +X0553021Y0411448* +X0552946Y0411607* +X0552871Y0411732* +X0552796Y041184* +X0552729Y0411923* +X0552679Y0411982* +X0552646Y0412023* +X0552629Y0412032* +X0552513Y0412115* +X0552396Y0412182* +X0552288Y0412223* +X0552188Y0412256* +X0552096Y0412273* +X055203Y041229* +G37* +%LNunisolder52_full-5*% +%LPD*% +G54D56* +X0131392Y0420916D02* +X0141339D01* +G54D57* +X0179891Y0379365D02* +X0181591Y0381065D01* +X0179891Y0369465D02* +Y0379365D01* +X0215091Y0577165D02* +X0225339D01* +X0179091Y0368665D02* +X0179891Y0369465D01* +X0179091Y0364765D02* +Y0368665D01* +X0536319Y0323819D02* +X0539813Y0320325D01* +X0548582Y0359269D02* +X0548819Y0359033D01* +X054855Y0359269D02* +X0548582D01* +X0512795Y0323009D02* +X0548819Y0359033D01* +X0512795Y029122D02* +X0519272Y0284744D01* +X0531555Y0294744D02* +X054124Y0304429D01* +X0529272Y0294744D02* +X0531555D01* +X0481Y0287094D02* +X04814Y0286695D01* +X0626968Y0356299D02* +Y0379921D01* +Y0356299D02* +X0628937Y0354331D01* +X0575Y0436713D02* +X0575886Y0435827D01* +X0575Y0436713D02* +Y0447835D01* +X0627854Y0457678D02* +X0642619Y0442913D01* +X0648622* +X0512795Y029122D02* +Y0323009D01* +X0530905Y0323819D02* +X0536319D01* +X0626378Y0425D02* +X0636024D01* +X0648622Y0412401* +X0626378Y0457678D02* +X0627854D01* +G54D58* +X0310291Y0392465D02* +X0316841Y0399015D01* +X0348565Y0544839D02* +X0360891D01* +X0344291Y0540565D02* +X0348565Y0544839D01* +X0336591Y0396581D02* +Y0407765D01* +X031879Y0450036D02* +X0333462D01* +X0335891Y0452465* +Y046258* +X0334248Y0463765D02* +X0336591Y0466109D01* +X0332291Y0463765D02* +X0334248D01* +X0329991Y0461465D02* +X0332291Y0463765D01* +X0329991Y0456065D02* +Y0461465D01* +Y0456065D02* +X0331891Y0454165D01* +X0335891Y046258D02* +X0338591Y046528D01* +X0351594Y0357565D02* +X0355047Y0361018D01* +X0344063Y0357565D02* +X0351594D01* +X0343663Y0357165D02* +X0344063Y0357565D01* +X0343591Y0357165D02* +X0343663D01* +X0351594Y0355565D02* +X0355047Y0352113D01* +X0344891Y0355565D02* +X0351594D01* +X0342091Y0352765D02* +X0344891Y0355565D01* +X0342091Y0358665D02* +X0343591Y0357165D01* +X0361439Y0361018D02* +X0361891Y0360565D01* +X0355047Y0361018D02* +X0361439D01* +X0360691Y0360565D02* +X0361491Y0361365D01* +X0361439Y0352113D02* +X0361891Y0352565D01* +X0355047Y0352113D02* +X0361439D01* +X0323891Y0511965D02* +Y0515465D01* +X0327991Y0519565* +X0323891Y0511965D02* +X0326691Y0509165D01* +X0319591Y0504265D02* +Y0505465D01* +X0328691Y0501594D02* +Y0513165D01* +X0328191Y0513665D02* +X0328691Y0513165D01* +Y0501594D02* +X0338591Y0491694D01* +X0326691Y0500765D02* +X0336591Y0490865D01* +X0326691Y0500765D02* +Y0509165D01* +X0335991Y0509065D02* +Y0523879D01* +X0197091Y0396365D02* +X020572D01* +X0200691Y0400365D02* +X0202691Y0398365D01* +X0204891* +X0313491Y0307565D02* +Y0334865D01* +Y0306765D02* +Y0307565D01* +X0339448Y0286165D02* +X0339634D01* +X0276191Y0550565D02* +X0278541Y0552915D01* +X0351091Y0310194D02* +Y0313922D01* +X0345429Y0319584D02* +X0351091Y0313922D01* +X034712Y0285465D02* +X0353191Y0291537D01* +X0313491Y0307565D02* +X0315491Y0305565D01* +X0324448Y0308965D02* +X0324691D01* +X0200991Y0535065D02* +X0209491Y0543565D01* +Y0545565* +X0208033Y046787D02* +Y0493461D01* +X0200191Y0577165D02* +X0203894D01* +X0208347Y0581618* +X0232036* +X0182891Y0575665D02* +X0188691Y0569865D01* +X0221991* +X0175491Y0534665D02* +X0175891Y0535065D01* +X0200991* +X0204891Y0398365D02* +X0210562Y0404036D01* +X020572Y0396365D02* +X021139Y0402036D01* +X0210562Y0404036D02* +X0232762D01* +X021139Y0402036D02* +X023359D01* +X0260891Y0443765D02* +X0309691D01* +X026172Y0441765D02* +X031052D01* +X0232762Y0404036D02* +X0245691Y0416965D01* +Y0428565D02* +X0260891Y0443765D01* +X0245691Y0416965D02* +Y0428565D01* +X0247691Y0427737D02* +X026172Y0441765D01* +X0247691Y0416137D02* +Y0427737D01* +X023359Y0402036D02* +X0247691Y0416137D01* +X0219691Y0352892D02* +X0227648Y0344935D01* +X0219691Y0352892D02* +Y0365365D01* +X022975Y0473907D02* +X0232291Y0471365D01* +X022975Y0473907D02* +Y0489772D01* +X0231187Y0491209* +Y0495713* +X0228002Y0498898D02* +X0231187Y0495713D01* +X0226101Y0498898D02* +X0228002D01* +X0226807Y0544665D02* +X0239091D01* +X0221591Y053945D02* +X0226807Y0544665D01* +X0221591Y0535765D02* +Y053945D01* +X0229491Y0538365D02* +X0231991D01* +X0220891Y0511865D02* +X0222391Y0513365D01* +X0220891Y0504108D02* +Y0511865D01* +Y0504108D02* +X0226101Y0498898D01* +X0316841Y0399015D02* +X0325241D01* +X0325391Y0399165* +X0313491Y0334865D02* +X0315691Y0337065D01* +X0240592Y0563965D02* +X0249292D01* +X0256827Y0553873D02* +Y055643D01* +X0232036Y0581618D02* +X0235739Y0577915D01* +Y0575321D02* +Y0577915D01* +X0256827Y0553873D02* +X0260135Y0550565D01* +X0276191* +X0249292Y0563965D02* +X0256827Y055643D01* +X0252791Y0540065D02* +X0255291Y0542565D01* +X0239091Y0544665D02* +X0243691Y0540065D01* +X0252791* +X0209491Y0545565D02* +X0222691Y0558765D01* +X0229885* +X0247491Y0550365D02* +X0249191D01* +X0221991Y0569865D02* +X0225291Y0566565D01* +X0231291* +X0247491Y0550365* +X0235739Y0575321D02* +X0238091Y0572968D01* +Y0566465D02* +Y0572968D01* +Y0566465D02* +X0240592Y0563965D01* +X0323091Y0307609D02* +X0324448Y0308965D01* +X0323091Y0297265D02* +Y0307609D01* +X0317591Y0291765D02* +X0323091Y0297265D01* +X0321191Y0331765D02* +X0327091Y0325865D01* +X0285748Y0542565D02* +X0291348Y0548165D01* +X0255291Y0542565D02* +X0285748D01* +X0291348Y0548165D02* +X0294834D01* +X0308153Y0534846* +X0325024D02* +X0335991Y0523879D01* +X0343207Y0319584D02* +X0345429D01* +X0308153Y0534846D02* +X0325024D01* +X031052Y0441765D02* +X031879Y0450036D01* +X0309691Y0443765D02* +X0317991Y0452065D01* +X0329791* +X0331891Y0454165* +X0313876Y0373865D02* +X0336591Y0396581D01* +X0310591Y0373865D02* +X0313876D01* +X0344307Y0393265D02* +X0346291D01* +X0327391Y037635D02* +X0344307Y0393265D01* +X0327391Y0373465D02* +Y037635D01* +X0334691Y0407765D02* +X0336591D01* +X0338591Y046528D02* +Y0491694D01* +X0336591Y0466109D02* +Y0490865D01* +X0311391Y0512665D02* +X0319891Y0504165D01* +X0231991Y0538365D02* +X0243921Y0526436D01* +X0303921* +X0311391Y0518965* +Y0512665D02* +Y0518965D01* +X0309991Y0373265D02* +X0310591Y0373865D01* +X0334291Y0507365D02* +X0335991Y0509065D01* +X0229885Y0558765D02* +X0230472Y0558178D01* +X0348294Y0289469D02* +X0351191Y0292365D01* +X0323591Y0291765D02* +X0326506D01* +X0327091Y0316708D02* +Y0325865D01* +Y0316708D02* +X0331041Y0312758D01* +Y0296301D02* +Y0312758D01* +X0326506Y0291765D02* +X0331041Y0296301D01* +X0347091Y0311365D02* +X0351191Y0307265D01* +Y0292365D02* +Y0307265D01* +X0351091Y0310194D02* +X0353191Y0308094D01* +Y0291537D02* +Y0308094D01* +X0339634Y0285365D02* +X0343738Y0289469D01* +X0348294* +X0345391Y0285465D02* +X034712D01* +G54D59* +X0488898Y0504463D02* +X0509142D01* +X0476798Y0516563D02* +X0488898Y0504463D01* +X0437698Y0516563D02* +X0476798D01* +X0421798Y0532463D02* +X0437698Y0516563D01* +X0428151Y0543578D02* +X0442536Y0557963D01* +X0446162* +X0355691Y0474665D02* +X0361991D01* +X0345091Y0448165D02* +Y0462265D01* +X0339291Y0442365D02* +X0345091Y0448165D01* +X0366891Y0345565D02* +X0373244Y0339213D01* +X0366891Y0345565D02* +Y0346565D01* +X0262791Y0294265D02* +Y0312009D01* +X0267447Y0316665D02* +X0296291D01* +X0262791Y0312009D02* +X0267447Y0316665D01* +X0296291Y0305322D02* +Y0316665D01* +X0302191Y0301365D02* +X0302291D01* +X0300248D02* +X0302191D01* +X0255544Y0287018D02* +X0262791Y0294265D01* +X0302291Y0324465D02* +Y0325965D01* +X0296291Y0318465D02* +X0302291Y0324465D01* +X0296291Y0305322D02* +X0300248Y0301365D01* +X0225291Y0548665D02* +X0240891D01* +X0215691Y0539065D02* +X0225291Y0548665D01* +X0215691Y0524213D02* +Y0539065D01* +Y0524113D02* +X0216991Y0522813D01* +Y0502351D02* +X022575Y0493592D01* +X0216991Y0502351D02* +Y0522813D01* +X0340591Y0399209D02* +Y0404565D01* +X0275118Y0303633D02* +X0276124D01* +X0300191Y0279565* +X0302091Y0325765D02* +X0302291Y0325965D01* +X0322591Y0341565D02* +X0330991Y0333165D01* +X0303291Y0368365D02* +X0306169Y0365487D01* +X0340591Y0399209D02* +X0354148D01* +X0302291Y0325965D02* +Y0356765D01* +X0337084Y0391558D02* +D01* +X0302291Y0356765D02* +X0337084Y0391558D01* +X0340591Y0395065D02* +Y0399209D01* +X0337084Y0391558D02* +X0340591Y0395065D01* +X0339291Y0439965D02* +Y0442365D01* +X0354148Y0399209D02* +X0355691Y0397665D01* +Y0397465D02* +Y0397665D01* +X0345091Y0462265D02* +X0354925Y0472099D01* +X0354404Y0472619D02* +X0354925Y0472099D01* +X0354404Y0472619D02* +X0354433Y0472647D01* +Y0519591* +X0300191Y0279565D02* +X0319821D01* +X0330991Y0318323D02* +Y0333165D01* +Y0318323D02* +X0334941Y0314374D01* +Y0296265D02* +Y0314374D01* +X0319821Y0279565D02* +X0336521Y0296265D01* +X0343891* +X0370472Y0331162D02* +X0373244Y0333934D01* +Y0339213* +X0370472Y0305217D02* +Y0331162D01* +X0365256Y03D02* +X0370472Y0305217D01* +X0576772Y0587598D02* +Y0604453D01* +X0567791Y0595472D02* +X0586197D01* +X0597244Y0491484D02* +Y050989D01* +X0588264Y0500909D02* +X0606669D01* +X0573622Y0491484D02* +Y050989D01* +X0564642Y0500909D02* +X0583047D01* +X0540921Y0582555D02* +X0559327D01* +X0549902Y057313D02* +Y0591535D01* +X0542913Y0375984D02* +X055187Y0384941D01* +X0528047Y0375984D02* +X0542913D01* +X0518602Y0366539D02* +X0528047Y0375984D01* +X055187Y0384941D02* +X0557344D01* +X0518602Y0358268D02* +Y0366539D01* +X0573484Y0384901D02* +X0575098Y0386516D01* +X0557383Y0384901D02* +X0573484D01* +X0557344Y0384941D02* +X0557383Y0384901D01* +G54D62* +X0169102Y0502555D02* +X0170869Y0500787D01* +X0169102Y0502555D02* +Y0518285D01* +X0170869Y0500787D02* +X0172244D01* +X0183457Y0328565D02* +X0203227D01* +X0181557Y0330465D02* +X0183457Y0328565D01* +X0181678Y0338365D02* +X0183878Y0340565D01* +X021301* +X023419Y0319386* +X0243699Y0320768D02* +Y0320861D01* +X0203227Y0328565D02* +X0222738Y0309055D01* +X0243699Y0313679D02* +Y0320861D01* +X0239075Y0309055D02* +X0243699Y0313679D01* +X0222738Y0309055D02* +X0239075D01* +G54D66* +X0298688Y0397736D02* +X0307454Y0406503D01* +X0279462Y0397736D02* +X0298688D01* +X0267841Y0386115D02* +X0279462Y0397736D01* +X0187893Y0499494D02* +Y0500886D01* +X0201476Y0514469* +Y051565* +X0252591Y0401865D02* +X0267891Y0417165D01* +X0252591Y0394465D02* +Y0401865D01* +X0267891Y0417065D02* +X0277891Y0427065D01* +X022575Y036087D02* +X0226198Y0361319D01* +X0278091Y0458465D02* +X0303491D01* +X0201476Y051565D02* +X0215491D01* +X022575Y0386461D02* +Y0387361D01* +X0307891Y0462865D02* +Y0468265D01* +X0303491Y0458465D02* +X0307891Y0462865D01* +X0267791Y0448065D02* +Y0448165D01* +X0254791Y0456365D02* +X0259491D01* +X022575Y046787D02* +Y0493461D01* +Y0493592* +X0259491Y0456365D02* +X0267741Y0448115D01* +X0278091Y0458465* +X0245191Y0544365D02* +X0251434D01* +X0253635Y0546565* +X0284091D02* +X0289691Y0552165D01* +X0253635Y0546565D02* +X0284091D01* +X0289691Y0552165D02* +X0296491D01* +X030981Y0538846* +X032668* +X0257491Y0379465D02* +X0264091Y0386065D01* +X0267891* +X0240891Y0548665D02* +X0245191Y0544365D01* +X0307891Y0432498D02* +Y0437065D01* +X0302459Y0427065D02* +X0307891Y0432498D01* +X0277891Y0427065D02* +X0302459D01* +G54D75* +X0644488Y0591338D02* +X0648622Y0595472D01* +X0644488Y0575173D02* +Y0591338D01* +X0630886Y0561571D02* +X0644488Y0575173D01* +X0587134Y0561571D02* +X0630886D01* +X0573622Y0575083D02* +X0587134Y0561571D01* +G54D76* +X0598425Y0595472D02* +X0626968D01* +X0597244Y0575083D02* +Y0594291D01* +X0598425Y0595472* +X0626968Y0581374D02* +Y0595472D01* +X0620866Y0575272D02* +X0626968Y0581374D01* +X0597244Y0575083D02* +X0620677D01* +G54D78* +X0627189Y0311305D02* +X0658071Y0342187D01* +X0627189Y030315D02* +Y0311305D01* +X0658071Y0342187D02* +Y0385827D01* +X0679134Y0331926D02* +Y0435039D01* +X0656894Y0309687D02* +X0679134Y0331926D01* +X0677165Y0544701D02* +Y0563902D01* +Y0483933D02* +Y0505693D01* +Y0506086* +G54D81* +X04535Y0322094D02* +X04935D01* +G54D82* +X0611713Y0585138D03* +G54D87* +X0503498Y0562063D03* +Y0572063D03* +Y0552063D03* +Y0542063D03* +X0421798Y0542463D03* +Y0552463D03* +Y0572463D03* +Y0562463D03* +X0210191Y0577165D03* +X0220191D03* +X0230191D03* +X0240191D03* +X0356891Y0376565D03* +X0366891Y0366565D03* +X0356891D03* +X0366891Y0356565D03* +X0356891D03* +X0366891Y0346565D03* +X0356891D03* +X0366891Y0336565D03* +X0356891D03* +X0307891Y0468265D03* +X0297891D03* +X0287891D03* +X0277891D03* +X0267891D03* +X0307891Y0448265D03* +X0297891D03* +X0287891D03* +X0277891D03* +X0267891D03* +Y0417165D03* +X0277891D03* +X0287891D03* +X0297891D03* +X0307891D03* +X0267891Y0437165D03* +X0277891D03* +X0287891D03* +X0297891D03* +X0307891D03* +Y0406065D03* +X0297891D03* +X0287891D03* +X0277891D03* +X0267891D03* +X0307891Y0386065D03* +X0297891D03* +X0287891D03* +X0277891D03* +X0267891D03* +X0559272Y0294744D03* +Y0284744D03* +X0549272Y0294744D03* +Y0284744D03* +X0539272Y0294744D03* +Y0284744D03* +X0529272Y0294744D03* +Y0284744D03* +X0519272Y0294744D03* +G54D88* +X0503498Y0532063D03* +X0421798Y0532463D03* +X0517851Y0461417D03* +G54D89* +X0145276Y0430315D03* +X0136614Y0433465D03* +X0145276Y0424016D03* +X0136614Y0420866D03* +Y0427165D03* +G54D90* +X0140945Y0410827D03* +Y0443504D03* +G54D91* +X0194291Y0302665D03* +Y0551665D03* +G54D92* +X0369291Y0427165D03* +G54D93* +X0187197Y049969D03* +G54D94* +X0169102Y0517785D03* +G54D95* +X0200191Y0577165D03* +X0519272Y0284744D03* +G54D96* +X0253465Y0287098D03* +X0275118D03* +Y0303633D03* +X0253465D03* +X0626968Y0595472D03* +X0648622D03* +X0405673Y0344727D03* +X0427327D03* +Y0361262D03* +X0405673D03* +X0598425Y0595472D03* +X0576772D03* +G54D97* +X0366891Y0376565D03* +G54D98* +X0208033Y046787D03* +X022575D03* +Y0493461D03* +X0208033D03* +Y041437D03* +X022575D03* +Y0439961D03* +X0208033D03* +Y036087D03* +X022575D03* +Y0386461D03* +X0208033D03* +G54D99* +X024249Y0489814D03* +Y0509027D03* +G54D100* +X0560335Y0392027D03* +X042276Y0387435D03* +X0538287Y0358268D03* +X0479331Y0349803D03* +G54D101* +X054065Y0392027D03* +X0518602Y0358268D03* +X0499016Y0349803D03* +G54D102* +X0606063Y0285138D03* +G54D103* +X0596063Y0285138D03* +X0586063D03* +X0486Y0297094D03* +X0481Y0287094D03* +X0476Y0297094D03* +X0471Y0287094D03* +X0466Y0297094D03* +X0461Y0287094D03* +G54D104* +X0549902Y0508382D03* +X0597244Y0575083D03* +X0573622D03* +X0644488Y0501D03* +X0620866Y0501098D03* +G54D105* +X0549902Y0582555D03* +X0597244Y0500909D03* +X0573622D03* +X0644488Y0575173D03* +X0620866Y0575272D03* +G54D106* +X0517851Y0469291D03* +G54D107* +X0411417Y0287402D03* +Y0470472D03* +X0675197Y059252D03* +Y0287402D03* +G54D108* +X040884Y0401354D03* +G54D109* +X0677165Y0507146D03* +Y0480531D03* +Y0565728D03* +Y0539114D03* +G54D110* +X0625591Y0281496D03* +Y030315D03* +X0642126D03* +Y0281496D03* +G54D111* +X04935Y0322094D03* +X04535D03* +G54D112* +X0446162Y0557972D03* +X0445768Y0550984D03* +X0507087Y051122D03* +X0495866Y0538878D03* +X0515158Y0532382D03* +X048879Y0504572D03* +X0509142Y0504463D03* +X0422441Y0523327D03* +X0445177Y0565945D03* +X0432098Y0573763D03* +X0441898Y0582063D03* +X0421798Y0581863D03* +X0412298Y0567163D03* +X0412402Y0546358D03* +X0513583Y0557382D03* +X0513398Y0567363D03* +X0500689Y0582874D03* +X048688Y0562361D03* +X0480807Y0535138D03* +X0434941Y0561713D03* +X0459252Y0566831D03* +X0436417Y0504429D03* +X0459842D03* +X0443996Y052313D03* +X0470768Y0529232D03* +X0418198Y0513763D03* +X0471358Y0576279D03* +X0448228Y0504429D03* +X0413998Y0505563D03* +X046063Y0582972D03* +X0480709Y0548327D03* +X0484842Y0582972D03* +X0471358Y0563681D03* +X0496555Y0549311D03* +X046122Y052313D03* +X0479134Y0504528D03* +X0461122Y0554528D03* +X0453051Y0529626D03* +X0428151Y0543578D03* +X0435335Y0541142D03* +X0506988Y0518504D03* +X0310291Y0392465D03* +X0300891Y0391665D03* +X026624Y032874D03* +X0348425Y050935D03* +X0361991Y0474665D03* +X0364567Y0468898D03* +X0331371Y0432677D03* +X0333991Y0459765D03* +X0332591Y0467765D03* +X023189Y0409154D03* +X0131004Y0418012D03* +X0150984Y0404035D03* +X0171391Y0402865D03* +X0173891Y0569265D03* +X0342091Y0352765D03* +Y0358665D03* +X0377461Y0328543D03* +X0361891Y0360565D03* +Y0352565D03* +X0313791Y0358265D03* +X0200791Y0400365D03* +X0197191Y0395665D03* +X0344091Y0488065D03* +X0320191Y0517065D03* +X0327891Y0513665D03* +X0339391Y0439965D03* +X0269191Y0310065D03* +X0158366Y0286122D03* +X015876Y0309055D03* +X0161713Y0387795D03* +X0189991Y0376965D03* +X0181591Y0381065D03* +X0179091Y0364765D03* +X0181557Y0330465D03* +X0189191Y0395765D03* +X0322391Y0554565D03* +X0319891Y0504165D03* +X0293091Y0544165D03* +X0269291Y0562465D03* +X0274191Y0555965D03* +X0315491Y0305565D03* +X0324291Y0309265D03* +X0343891Y0302165D03* +X0322491Y0300965D03* +X0322891Y0317765D03* +X0291891Y0325465D03* +X0332591Y0281465D03* +X0323591Y0291765D03* +X0339491Y0286165D03* +X0343891Y0296265D03* +X0320991Y0330265D03* +X0315591Y0337065D03* +X0368012Y0292028D03* +X032668Y0538846D03* +X0202091Y0487565D03* +X0239862Y0357874D03* +X0215491Y0420865D03* +X0166091Y0452565D03* +X0184191Y0452265D03* +X0169407Y0472665D03* +X0219691Y0485465D03* +X0231491Y0503365D03* +X0208691Y0503065D03* +X0201083Y0447835D03* +X0206004Y0432087D03* +X0131004Y0436417D03* +X0166634Y0434055D03* +X0155807Y0437992D03* +X0165591Y0414265D03* +Y0419665D03* +X0153391Y0423965D03* +X0257283Y043061D03* +X0240091Y0421265D03* +X0250491Y0436265D03* +X0246491Y0398665D03* +X0259055Y0394291D03* +X0252591Y0394465D03* +X0257491Y0379465D03* +X0265191Y0377165D03* +X0258661Y033937D03* +X0265091Y0276065D03* +X0269591Y0296665D03* +X0279921Y0322638D03* +X0274705Y0338091D03* +X0268591Y0396565D03* +X0290891Y0391665D03* +X0264191Y0286565D03* +X0252953Y0322638D03* +X0286591Y0284765D03* +X0263391Y0574065D03* +X0232579Y0380906D03* +X0227648Y0344935D03* +X0341339Y0524902D03* +X0212191Y0477965D03* +X0268791Y0503465D03* +X0272791Y0462965D03* +X0258591Y0363365D03* +X0157382Y0497638D03* +X0182091Y0527965D03* +X0201476Y051565D03* +X0300991Y0567465D03* +X0257091Y0466065D03* +X0157776Y0520472D03* +X0195191Y0529865D03* +X0210091Y0562965D03* +X0235991Y0483765D03* +X0170591Y0548165D03* +X0169891Y0530065D03* +X0165791Y0579665D03* +X0156988Y0569291D03* +X0158071Y0543799D03* +X0184191Y0568065D03* +X0156891Y0474265D03* +X0156595Y0349311D03* +Y0329035D03* +X0158366Y0370866D03* +X0180591Y0315965D03* +X0214091Y0381065D03* +X0335728Y0501673D03* +X0373524Y0568209D03* +X0187205Y0284252D03* +X0176476Y0386811D03* +X0377658Y0374902D03* +X0203591Y0367165D03* +X0193799Y0515945D03* +X0272891Y0431865D03* +X023189Y0397933D03* +X0377591Y0411665D03* +X0254791Y0456365D03* +X0349891Y0407465D03* +X0281591Y0391365D03* +X0346891Y0478665D03* +X0181678Y0338365D03* +X0206004Y0423228D03* +X0203391Y0379765D03* +X0224791Y0554665D03* +X0215665Y0524213D03* +X0171544Y0500787D03* +X0167126Y0494095D03* +X0198691Y0499965D03* +X0190891Y0491065D03* +X0215391Y0433565D03* +X0236891Y0465565D03* +X0232191Y0451465D03* +X0246555Y0451575D03* +X0272991Y0579565D03* +X0312991Y0571665D03* +X0242249Y0567965D03* +X0252391Y0473665D03* +X0250791Y0504865D03* +X0263491Y0519565D03* +X0235591Y0514365D03* +X0189191Y0477065D03* +X0199391Y0470365D03* +X0265391Y0540465D03* +X0261591Y0554765D03* +X0279191Y0552565D03* +X0254091Y0536065D03* +X0256691Y0547665D03* +X0248891Y0550365D03* +X0242391Y0547365D03* +X0272191Y0537965D03* +X0263791Y0530765D03* +X0208465Y0535138D03* +X0175491Y0534665D03* +X0180391Y0539065D03* +X0220891Y0563065D03* +X0182991Y0575565D03* +X0191691Y0577165D03* +X0273091Y0546565D03* +X0239401Y0293265D03* +X0213878Y0345571D03* +X0212303Y0308071D03* +X0223091Y0274665D03* +X0198891Y0277065D03* +X0228791Y0284465D03* +X0249691Y0279665D03* +X0287402Y0365748D03* +X0267618Y0353937D03* +X0248819Y035315D03* +X021437Y0390846D03* +X0202891Y0407065D03* +X0251969Y0443405D03* +X0249691Y0423965D03* +X0254091Y0419065D03* +X0373228Y0532972D03* +X0327991Y0519565D03* +X0302191Y0307765D03* +X0302691Y0285465D03* +X0337598Y0321161D03* +X0341691Y0364865D03* +X0302191Y0301365D03* +X0232291Y0432365D03* +X0219691Y0365365D03* +X0232291Y0471365D03* +X0221591Y0536565D03* +X0229491Y0538365D03* +X0222891Y0514065D03* +X0225491Y0519665D03* +X0343602Y0469882D03* +X0348291Y0386665D03* +X0335096Y0507561D03* +X0256891Y0562065D03* +X0252491Y0555065D03* +X0227791Y0570865D03* +X0297391Y0368665D03* +X028563Y0349508D03* +X0369882Y0282382D03* +X0181102Y0351772D03* +X0317591Y0291765D03* +X0301891Y0520865D03* +Y0532565D03* +X0320191Y0527365D03* +X0347091Y0312265D03* +X0343491Y0320065D03* +X0322591Y0341565D03* +X0327191Y0347965D03* +X0318691Y0386665D03* +X0303291Y0368365D03* +X0302091Y0325765D03* +X0333491Y0373565D03* +X0341437Y0342618D03* +X0315091Y0544865D03* +X0318791Y0566865D03* +X0377591Y0443265D03* +X0332677Y0445768D03* +X0351083Y0459154D03* +X0347491Y0580165D03* +X0332891Y0572665D03* +X0356191Y0557465D03* +X0360891Y0544839D03* +X0377791Y0545865D03* +X0344291Y0540565D03* +X0369391Y0404565D03* +X0364469Y0535532D03* +X0364591Y0523965D03* +X0331891Y0454165D03* +X0340591Y0404565D03* +X0325391Y0398965D03* +X0340591Y0399209D03* +X0334691Y0407765D03* +X0327391Y0373465D03* +X0309991Y0373265D03* +X0346291Y0393265D03* +X0331391Y0413065D03* +X0369091Y0452765D03* +X0356201Y0525295D03* +X0333491Y0544265D03* +X0276772Y0364075D03* +X0353642Y0331004D03* +X0355691Y0397465D03* +X0199803Y0320472D03* +X0234485Y0318894D03* +X0222244Y0321555D03* +X0243699Y0320861D03* +X0211024Y0327559D03* +X0212795Y0293898D03* +X0165847Y0326772D03* +X0172933Y0364961D03* +X0186127Y0334442D03* +X0167618Y0351476D03* +X0370472Y0383169D03* +X0233071Y0368602D03* +X0354433Y0519591D03* +X0364567Y0491732D03* +X0282087Y0310236D03* +X0230472Y0558178D03* +X0364075Y0315551D03* +X0364567Y0309449D03* +X0365256Y03D03* +X0352559Y0285138D03* +X0345391Y0285465D03* +X0533071Y0434252D03* +X0452953Y0442126D03* +X0454035Y0462992D03* +X0536614Y0504429D03* +X0656496Y0604331D03* +X0637795D03* +X0683071Y0524606D03* +X0567913Y0474409D03* +X0625Y0487205D03* +X058563Y0488189D03* +X0564173Y0565748D03* +X0566535Y0598032D03* +X0584842Y0587008D03* +X0590551Y0605512D03* +X0574803D03* +X0559055Y0590551D03* +X0543307D03* +X0551181Y0598425D03* +X0559055Y0605512D03* +X0543307D03* +X053622Y0598425D03* +Y0582677D03* +Y0566929D03* +Y0519685D03* +Y0535433D03* +Y0551181D03* +X0543307Y0527559D03* +X0551181Y0535433D03* +X0543307Y0543307D03* +X0551181Y0551181D03* +X0543307Y0559055D03* +Y0574803D03* +X0559055D03* +X0551181Y0566929D03* +X0559055Y0559055D03* +X0574803D03* +X0566929Y0551181D03* +Y0535433D03* +X0582677Y0551181D03* +Y0535433D03* +X0598425Y0551181D03* +Y0535433D03* +X0559055Y0543307D03* +X0574803D03* +X0590551D03* +X0606299D03* +X0661417Y0566929D03* +Y0551181D03* +X0653543Y0543307D03* +Y0559055D03* +X0645669Y0551181D03* +Y0535433D03* +X0637795Y0543307D03* +X0629921Y0551181D03* +Y0535433D03* +X0622047Y0543307D03* +X0614173Y0535433D03* +Y0551181D03* +X0457283Y0378543D03* +X0479626Y0382283D03* +X0547244Y0305315D03* +X0539764Y0320276D03* +X0531102Y0324311D03* +X0557874Y0378838D03* +X054872Y0425098D03* +X0509842Y0338287D03* +X0528543Y0349016D03* +X054855Y0359269D03* +X0551083Y0353445D03* +X0562303Y0378838D03* +X0559842Y0402362D03* +X0577461Y0357874D03* +X0575098Y0386516D03* +X0540158Y0343307D03* +X0544291Y0280413D03* +X0555118Y0289665D03* +X0524311Y0290551D03* +X053435Y0289665D03* +X0525886Y0300886D03* +X0535138Y0305315D03* +X054124Y0304429D03* +X0576575Y028061D03* +X0615748Y0320079D03* +X0618996Y0325098D03* +X0584646Y0330709D03* +X0581693Y0325787D03* +X0584646Y0320866D03* +X0587598Y0325787D03* +X0607283Y0408957D03* +X052185Y048376D03* +X058061Y0415256D03* +X0590551Y0320866D03* +X0596457D03* +X0599409Y0325787D03* +X050689Y0299213D03* +X0599409Y0355315D03* +X0605315D03* +X061122D03* +X0523228Y0275787D03* +X0608464Y0395079D03* +X0565945Y0488189D03* +X0431791Y0376772D03* +X0399606Y0450787D03* +X0413386Y0442913D03* +X0433071Y0482283D03* +X0489961Y0482185D03* +X0452756Y0482283D03* +X0472441D03* +X0430315Y0274902D03* +X0607382Y0275787D03* +X0600394Y0291929D03* +X0576772Y0289862D03* +X0588583Y0308071D03* +X0593504Y0325787D03* +X0559252Y0364173D03* +X0525787Y0358957D03* +X0516732Y0350295D03* +X0520768Y0340453D03* +X0685532Y0468405D03* +X0606398Y0487205D03* +X0524016Y0323721D03* +X0495374Y0298524D03* +X0490748Y0287894D03* +X0504528Y0288484D03* +X0508071Y0312795D03* +X0517913Y0302559D03* +X0574016Y0342323D03* +X0558957Y0311516D03* +X0565846Y0443504D03* +X0566142Y0417717D03* +X0575422Y0435553D03* +X0567913Y0458661D03* +X0590551Y0330709D03* +X0587598Y0355315D03* +X0648622Y0412401D03* +Y0442913D03* +X0626378Y0457678D03* +X0685039Y0452756D03* +X0661417D03* +X0667323D03* +X0673228D03* +X0679134D03* +X0641732Y0393701D03* +X0665354D03* +X0659449D03* +X0653543D03* +X0647638D03* +X0641732Y0366142D03* +X0647638D03* +X0653543D03* +X0659449D03* +X0665354D03* +X0685039Y0425197D03* +X0679134D03* +X0673228D03* +X0667323D03* +X0661417D03* +X0442Y0379095D03* +X0480217Y0396752D03* +X0476378Y0400787D03* +X043248Y044498D03* +X0423228Y0452756D03* +X0439272Y0422933D03* +X0506398Y0353051D03* +X054872Y0456594D03* +X0511417Y0458169D03* +X0526968Y0460335D03* +X0490256Y0275098D03* +X0430512Y0336417D03* +X0452461Y0274902D03* +X04384Y0299095D03* +X0401575Y0312992D03* +X0418602Y031811D03* +X0404Y0331494D03* +X0398524Y0377657D03* +X03986Y0398294D03* +Y0418894D03* +X0482283Y0472441D03* +X0462598D03* +X0442913D03* +X0433071Y0462598D03* +X0472441D03* +X0462598Y0452756D03* +X0472441Y0442913D03* +X0464567Y0431102D03* +X0493209Y0453051D03* +X0484449Y0420669D03* +X0490059Y0436122D03* +X0499016Y0334744D03* +X04787Y0334295D03* +X04515Y0333794D03* +X0433071Y0393701D03* +X0449022Y041618D03* +X04806Y0323195D03* +X0453051Y029065D03* +X0467815Y0317027D03* +X0417323Y036998D03* +X044872Y0431693D03* +X0401575Y0435039D03* +X04327Y0414854D03* +X0422342Y0413484D03* +X0526772Y0450394D03* +X0447703Y0396465D03* +X0454303D03* +X0460803D03* +X0449022Y040948D03* +X04178Y0402394D03* +X0488091Y0344488D03* +X0474213Y035935D03* +X0625984Y0330709D03* +X0620079D03* +X0614173D03* +X0608268D03* +X0602362D03* +X0596457D03* +X0593504Y0355315D03* +X0626968Y0379921D03* +X0628937Y0354331D03* +X0575Y0447835D03* +X0592224Y0393701D03* +X0582874Y0386024D03* +X0610236Y0379921D03* +X0577362Y0372342D03* +X0561909Y034124D03* +X0578839Y045935D03* +X0583858Y0454134D03* +X0619587Y0447638D03* +X058376Y0422047D03* +X0634449Y0380807D03* +X0613091Y0325197D03* +X0611024Y0440256D03* +X0611417Y0473032D03* +X058563Y0503937D03* +X0449122Y040268D03* +X0669291Y0468504D03* +Y046063D03* +X0677165Y0468504D03* +Y046063D03* +X0685039D03* +X0484154Y0400492D03* +X0492126Y0400591D03* +X0488287Y0396654D03* +X0456693Y0431693D03* +X0432185Y0407874D03* +X0481988Y0369094D03* +X0492126Y0369291D03* +X0537795Y0473622D03* +X0534941Y0489665D03* +X0548032Y0489862D03* +X0499213Y0470177D03* +X0492618Y0426181D03* +X0626279Y0416831D03* +X0626378Y0425D03* +X0598917Y040876D03* +X0471654Y0375689D03* +X063061Y0395177D03* +G54D113* +X0257691Y0499665D03* +G54D114* +X0637189Y0503937D02* +X0677165Y0543913D01* +X0620866Y0501098D02* +X064439D01* +M02* \ No newline at end of file diff --git a/hardware/gerber/unisolder52_full.gbo b/hardware/gerber/unisolder52_full.gbo new file mode 100644 index 0000000..f40da1f --- /dev/null +++ b/hardware/gerber/unisolder52_full.gbo @@ -0,0 +1,218 @@ +%FSTAX25Y25*% +%MOIN*% +%SFA1B1*% + +%IPPOS*% +%ADD58C,0.012000*% +%ADD65C,0.010000*% +%ADD117C,0.008000*% +%ADD118C,0.007870*% +%LNunisolder52_full-1*% +%LPD*% +G54D58* +X015187Y0458661D02* +Y0466161D01* +X0143996Y0450787D02* +X015187Y0458661D01* +X0136496Y0450787D02* +X0143996D01* +X015187Y0388169D02* +Y0395669D01* +X0143996Y0403543D02* +X015187Y0395669D01* +X0136496Y0403543D02* +X0143996D01* +X038189Y0577146D02* +Y0584646D01* +X037439D02* +X038189D01* +Y0269685D02* +Y0277185D01* +X037439Y0269685D02* +X038189D01* +X015187D02* +X015937D01* +X015187D02* +Y0277185D01* +Y0577146D02* +Y0584646D01* +X015937* +X0126279Y0443287D02* +Y0450787D01* +X013378* +X0126279Y0403543D02* +X013378D01* +X0126279D02* +Y0411043D01* +G54D65* +X0244213Y0315641D02* +X0283583D01* +Y0274598D02* +Y0315641D01* +X0244213Y0274598D02* +X0283583D01* +X0244213D02* +Y0315641D01* +X05Y0327095D02* +Y0342094D01* +Y0281594D02* +Y0317094D01* +X0447Y0281594D02* +Y0317094D01* +Y0327095D02* +Y0342094D01* +X05* +X0447Y0281594D02* +X05D01* +G54D117* +X025139Y0511921D02* +D01* +X0251368Y0512541* +X0251303Y0513159* +X0251195Y0513771* +X0251045Y0514374* +X0250853Y0514964* +X025062Y051554* +X0250348Y0516099* +X0250037Y0516637* +X024969Y0517152* +X0249307Y0517641* +X0248892Y0518103* +X0248445Y0518534* +X0247969Y0518934* +X0247466Y0519299* +X024694Y0519628* +X0246391Y051992* +X0245823Y0520172* +X024524Y0520385* +X0244643Y0520556* +X0244035Y0520685* +X024342Y0520772* +X02428Y0520815* +X0242179* +X0241559Y0520772* +X0240944Y0520685* +X0240336Y0520556* +X0239739Y0520385* +X0239156Y0520172* +X0238588Y051992* +X023804Y0519628* +X0237513Y0519299* +X023701Y0518934* +X0236534Y0518534* +X0236087Y0518103* +X0235672Y0517641* +X0235289Y0517152* +X0234942Y0516637* +X0234631Y0516099* +X0234359Y051554* +X0234126Y0514964* +X0233934Y0514374* +X0233784Y0513771* +X0233676Y0513159* +X0233611Y0512541* +X023359Y0511921* +Y0486921D02* +D01* +X0233611Y04863* +X0233676Y0485682* +X0233784Y048507* +X0233934Y0484467* +X0234126Y0483877* +X0234359Y0483301* +X0234631Y0482742* +X0234942Y0482204* +X0235289Y0481689* +X0235672Y04812* +X0236087Y0480738* +X0236534Y0480307* +X023701Y0479907* +X0237513Y0479542* +X023804Y0479213* +X0238588Y0478921* +X0239156Y0478669* +X0239739Y0478456* +X0240336Y0478285* +X0240944Y0478156* +X0241559Y0478069* +X0242179Y0478026* +X02428* +X024342Y0478069* +X0244035Y0478156* +X0244643Y0478285* +X024524Y0478456* +X0245823Y0478669* +X0246391Y0478921* +X024694Y0479213* +X0247466Y0479542* +X0247969Y0479907* +X0248445Y0480307* +X0248892Y0480738* +X0249307Y04812* +X024969Y0481689* +X0250037Y0482204* +X0250348Y0482742* +X025062Y0483301* +X0250853Y0483877* +X0251045Y0484467* +X0251195Y048507* +X0251303Y0485682* +X0251368Y04863* +X025139Y0486921* +Y0511921* +X023359Y0486921D02* +Y0511921D01* +X0341524Y0383731D02* +X034219Y0383065D01* +Y0381732* +X0341524Y0381065* +X0338858* +X0338191Y0381732* +Y0383065* +X0338858Y0383731* +X0338191Y0385064D02* +X034219D01* +X0338191Y038773* +X034219* +Y0389063D02* +Y0391729D01* +Y0390396* +X0338191* +Y0393061D02* +X034219D01* +Y0395061* +X0341524Y0395727* +X0340191* +X0339524Y0395061* +Y0393061* +Y0394394D02* +X0338191Y0395727D01* +G54D118* +X0245191Y0572165D02* +Y0582165D01* +X0195191D02* +X0245191D01* +X0195191Y0572165D02* +X0245191D01* +X0195191D02* +Y0582165D01* +X0344191Y0316565D02* +X0379491D01* +X0344191Y0396565D02* +X0379491D01* +X0344191Y0316565D02* +Y0396565D01* +X0374491Y0348565D02* +Y0364565D01* +X0379491Y0316565D02* +Y0336765D01* +Y038154D02* +Y0396565D01* +Y0336765D02* +Y0348565D01* +X0374491D02* +X0379491D01* +X0374491Y0364565D02* +X0379491D01* +Y038154* +M02* \ No newline at end of file diff --git a/hardware/gerber/unisolder52_full.gbp b/hardware/gerber/unisolder52_full.gbp new file mode 100644 index 0000000..aeb6b91 --- /dev/null +++ b/hardware/gerber/unisolder52_full.gbp @@ -0,0 +1,91 @@ +%FSTAX25Y25*% +%MOIN*% +%SFA1B1*% + +%IPPOS*% +%AMD113* +4,1,8,0.050000,-0.021000,0.050000,0.021000,0.041000,0.030000,-0.041000,0.030000,-0.050000,0.021000,-0.050000,-0.021000,-0.041000,-0.030000,0.041000,-0.030000,0.050000,-0.021000,0.0* +1,1,0.018000,0.041000,-0.021000* +1,1,0.018000,0.041000,0.021000* +1,1,0.018000,-0.041000,0.021000* +1,1,0.018000,-0.041000,-0.021000* +% +G04~CAMADD=113~8~0.0~0.0~600.0~1000.0~90.0~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~1000.0~600.0* +%ADD113D113*% +%ADD117C,0.008000*% +%LNunisolder52_full-1*% +%LPD*% +G54D113* +X0257691Y0499665D03* +G54D117* +X015187Y0577067D02* +Y0584646D01* +X015935* +X0507407Y0488202D02* +X0525604D01* +X0531507Y0494105* +X0531496Y0494095D02* +Y0510991D01* +X0413386Y05D02* +X041811D01* +X0405512Y0507874D02* +X0413386Y05D01* +X0405512Y0507874D02* +Y0512303D01* +X0519685Y0507874D02* +Y0512598D01* +X0511811Y05D02* +X0519685Y0507874D01* +X0507382Y05D02* +X0511811D01* +X0507087Y0587402D02* +X0511811D01* +X0519685Y0579528* +Y0575098D02* +Y0579528D01* +X0413386Y0587402D02* +X0417815D01* +X0405512Y0579528D02* +X0413386Y0587402D01* +X0405512Y0574803D02* +Y0579528D01* +X0541338Y0610236D02* +X0555598D01* +X0531498Y0600396D02* +X0541338Y0610236D01* +X0531498Y0587436D02* +Y0600396D01* +X0692913Y0586134D02* +Y0600394D01* +X0683073Y0610234D02* +X0692913Y0600394D01* +X0670113Y0610234D02* +X0683073D01* +X0668811Y0269685D02* +X0683071D01* +X0692911Y0279525* +Y0292485* +X0403554Y0269674D02* +X0416514D01* +X0393714Y0279514D02* +X0403554Y0269674D01* +X0393714Y0279514D02* +Y0293774D01* +X038189Y0577165D02* +Y0584646D01* +X0374311D02* +X038189D01* +X037441Y0269685D02* +X038189D01* +Y0277264* +X015187Y0269685D02* +Y0277165D01* +Y0269685D02* +X0159449D01* +X0403519Y0488165D02* +X0417779D01* +X0393679Y0478325D02* +X0403519Y0488165D01* +X0393679Y0465365D02* +Y0478325D01* +M02* \ No newline at end of file diff --git a/hardware/gerber/unisolder52_full.gbs b/hardware/gerber/unisolder52_full.gbs new file mode 100644 index 0000000..caaff5e --- /dev/null +++ b/hardware/gerber/unisolder52_full.gbs @@ -0,0 +1,2032 @@ +%FSTAX25Y25*% +%MOIN*% +%SFA1B1*% + +%IPPOS*% +%AMD175* +4,1,8,-0.033500,0.020700,-0.033500,-0.020700,-0.020700,-0.033500,0.020700,-0.033500,0.033500,-0.020700,0.033500,0.020700,0.020700,0.033500,-0.020700,0.033500,-0.033500,0.020700,0.0* +1,1,0.025720,-0.020700,0.020700* +1,1,0.025720,-0.020700,-0.020700* +1,1,0.025720,0.020700,-0.020700* +1,1,0.025720,0.020700,0.020700* +% +%AMD180* +4,1,8,0.045400,0.010300,0.010300,0.045400,-0.010300,0.045400,-0.045400,0.010300,-0.045400,-0.010300,-0.010300,-0.045400,0.010300,-0.045400,0.045400,-0.010300,0.045400,0.010300,0.0* +1,1,0.029260,0.035100,0.000000* +1,1,0.029260,0.000000,0.035100* +1,1,0.029260,-0.035100,0.000000* +1,1,0.029260,0.000000,-0.035100* +% +%AMD188* +4,1,8,0.025500,0.040400,-0.025500,0.040400,-0.040400,0.025500,-0.040400,-0.025500,-0.025500,-0.040400,0.025500,-0.040400,0.040400,-0.025500,0.040400,0.025500,0.025500,0.040400,0.0* +1,1,0.029860,0.025500,0.025500* +1,1,0.029860,-0.025500,0.025500* +1,1,0.029860,-0.025500,-0.025500* +1,1,0.029860,0.025500,-0.025500* +% +%AMD189* +4,1,8,-0.017500,-0.039000,0.017500,-0.039000,0.039000,-0.017500,0.039000,0.017500,0.017500,0.039000,-0.017500,0.039000,-0.039000,0.017500,-0.039000,-0.017500,-0.017500,-0.039000,0.0* +1,1,0.043000,-0.017500,-0.017500* +1,1,0.043000,0.017500,-0.017500* +1,1,0.043000,0.017500,0.017500* +1,1,0.043000,-0.017500,0.017500* +% +%AMD191* +4,1,8,0.059100,-0.038600,0.059100,0.038600,0.038600,0.059100,-0.038600,0.059100,-0.059100,0.038600,-0.059100,-0.038600,-0.038600,-0.059100,0.038600,-0.059100,0.059100,-0.038600,0.0* +1,1,0.041080,0.038600,-0.038600* +1,1,0.041080,0.038600,0.038600* +1,1,0.041080,-0.038600,0.038600* +1,1,0.041080,-0.038600,-0.038600* +% +%AMD195* +4,1,8,0.046600,0.010500,0.010500,0.046600,-0.010500,0.046600,-0.046600,0.010500,-0.046600,-0.010500,-0.010500,-0.046600,0.010500,-0.046600,0.046600,-0.010500,0.046600,0.010500,0.0* +1,1,0.029860,0.036100,0.000000* +1,1,0.029860,0.000000,0.036100* +1,1,0.029860,-0.036100,0.000000* +1,1,0.029860,0.000000,-0.036100* +% +%AMD196* +4,1,8,-0.072900,0.055100,-0.072900,-0.055100,-0.055100,-0.072900,0.055100,-0.072900,0.072900,-0.055100,0.072900,0.055100,0.055100,0.072900,-0.055100,0.072900,-0.072900,0.055100,0.0* +1,1,0.035560,-0.055100,0.055100* +1,1,0.035560,-0.055100,-0.055100* +1,1,0.035560,0.055100,-0.055100* +1,1,0.035560,0.055100,0.055100* +% +%AMD201* +4,1,8,0.054000,-0.021000,0.054000,0.021000,0.041000,0.034000,-0.041000,0.034000,-0.054000,0.021000,-0.054000,-0.021000,-0.041000,-0.034000,0.041000,-0.034000,0.054000,-0.021000,0.0* +1,1,0.026000,0.041000,-0.021000* +1,1,0.026000,0.041000,0.021000* +1,1,0.026000,-0.041000,0.021000* +1,1,0.026000,-0.041000,-0.021000* +% +%ADD174C,0.067060*% +G04~CAMADD=175~8~0.0~0.0~670.6~670.6~128.6~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~670.0~670.0* +%ADD175D175*% +%ADD176O,0.059180X0.051310*% +%ADD177O,0.206850X0.114330*% +%ADD178C,0.263900*% +%ADD179C,0.244220*% +G04~CAMADD=180~8~0.0~0.0~788.7~788.7~146.3~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~315.0~992.0~991.0* +%ADD180D180*% +%ADD181C,0.078870*% +%ADD182R,0.067060X0.067060*% +%ADD183O,0.126110X0.086740*% +%ADD184R,0.067060X0.067060*% +%ADD185C,0.086740*% +%ADD186C,0.063120*% +%ADD187C,0.080830*% +G04~CAMADD=188~8~0.0~0.0~808.3~808.3~149.3~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~808.3~808.3* +%ADD188D188*% +G04~CAMADD=189~8~0.0~0.0~780.0~780.0~215.0~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~780.0~780.0* +%ADD189D189*% +%ADD190C,0.078000*% +G04~CAMADD=191~8~0.0~0.0~1182.4~1182.4~205.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~1182.0~1182.0* +%ADD191D191*% +%ADD192C,0.118240*% +%ADD193C,0.067060*% +%ADD194C,0.322000*% +G04~CAMADD=195~8~0.0~0.0~808.3~808.3~149.3~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~315.0~1018.0~1017.0* +%ADD195D195*% +G04~CAMADD=196~8~0.0~0.0~1457.9~1457.9~177.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~1458.0~1458.0* +%ADD196D196*% +%ADD197O,0.086740X0.126110*% +%ADD198R,0.066000X0.118000*% +%ADD199R,0.065940X0.063580*% +%ADD200R,0.065940X0.067300*% +G04~CAMADD=201~8~0.0~0.0~680.0~1080.0~130.0~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~1080.0~680.0* +%ADD201D201*% +%LNunisolder52_full-1*% +%LPD*% +G36* +X0511638Y0408933D02* +X0511534D01* +X0511638Y0408433* +X0511534* +X0511638Y0407933* +X0506056* +X0505831Y0408999* +X0505937* +X0505831Y0409499* +X0505937* +X0505831Y0409999* +X0508888* +X050798Y0414339* +X0508085* +X050798Y0414839* +X0508085* +X050798Y0415339* +X0510305* +X0511638Y0408933* +G37* +G36* +X0499184Y0413588D02* +X0499209Y0413598D01* +X0499317Y0413623* +X0499417Y0413648* +X0499509Y0413664* +X0499584Y0413681* +X049965* +X04997Y041369* +X0499742* +X0499934Y0413681* +X0500016Y0413666* +X0500084Y0413681* +X050015* +X05002Y041369* +X0500242* +X0500434Y0413681* +X0500516Y0413666* +X0500584Y0413681* +X0500651* +X05007Y041369* +X0500742* +X0500934Y0413681* +X0501117Y0413648* +X0501284Y0413606* +X050145Y0413548* +X05016Y0413481* +X0501742Y0413406* +X0501867Y0413323* +X0501983Y041324* +X0502083Y0413148* +X0502175Y0413073* +X0502177* +X0502074Y0413573* +X0502639* +X0502516Y0414181* +X0502631Y0414111* +X0502516Y041468* +X0502631Y041461* +X0502516Y041518* +X0503086Y0414834* +X0503016Y041518* +X0503586Y0414834* +X0503516Y041518* +X050494Y0414314* +X0505099Y0413573* +X0505707* +X0505898Y041264* +X0505796* +X0505898Y041214* +X0505796* +X0505898Y041164* +X0505496* +X0505682Y0410774* +X0505707Y0410632* +X0505732Y0410507* +X0505757Y0410399* +X0505773Y0410291* +X050579Y0410199* +X0505798Y0410124* +X0505815Y0410049* +X0505823Y0409991* +Y0409933* +X0505832Y0409891* +X050584Y0409833* +Y0409791* +Y0409783* +X0505823Y0409624* +X0505811Y0409568* +X0505815Y0409549* +X0505823Y0409491* +Y0409433* +X0505832Y0409391* +X050584Y0409333* +Y0409291* +Y0409283* +X0505823Y0409124* +X0505811Y0409068* +X0505815Y0409049* +X0505823Y0408991* +Y0408933* +X0505832Y0408891* +X050584Y0408833* +Y0408791* +Y0408783* +X0505823Y0408624* +X050579Y0408474* +X0505748Y0408358* +X050569Y040825* +X0505632Y0408175* +X050559Y0408116* +X0505557Y0408075* +X050554Y0408066* +X0505482Y0408025* +X0505415Y0407983* +X0505265Y0407925* +X0505107Y0407875* +X0504949Y040785* +X0504807Y0407833* +X050474Y0407825* +X0504691* +X050464Y0407816* +X0504457* +X0504332Y0407825* +X0504291Y0407831* +X0504241Y0407825* +X050419* +X0504141Y0407816* +X0503957* +X0503832Y0407825* +X0503791Y0407831* +X0503741Y0407825* +X050369* +X0503641Y0407816* +X0503457* +X0503332Y0407825* +X0503224Y0407841* +X0503124Y040785* +X0503032Y0407866* +X0502974Y0407875* +X0502933Y0407883* +X0502916* +X0502776Y0408534* +X0502766Y0408516* +X0502725Y040845* +X0502691Y0408399* +X0502666Y0408358* +X0502641Y0408333* +X0502633Y0408316* +X0502625Y0408308* +X0502533Y0408225* +X0502441Y040815* +X050235Y0408083* +X050225Y0408025* +X050215Y0407975* +X0502058Y0407933* +X0501867Y0407875* +X05017Y0407841* +X0501633Y0407833* +X0501567Y0407825* +X0501517Y0407816* +X050145* +X05013Y0407825* +X050118Y0407839* +X0501133Y0407833* +X0501067Y0407825* +X0501017Y0407816* +X050095* +X05008Y0407825* +X050068Y0407839* +X0500633Y0407833* +X0500567Y0407825* +X0500517Y0407816* +X050045* +X05003Y0407825* +X0500159Y0407841* +X0500034Y0407858* +X0499925Y0407891* +X0499834Y0407916* +X0499767Y0407933* +X0497943* +X0497653Y040926* +X0497718Y0408933* +X0497618* +X0497718Y0408433* +X0497618* +X0497718Y0407933* +X0495477* +X0495235Y0409141* +X0495335* +X0495235Y0409641* +X0495335* +X0495235Y0410141* +X0497461* +X0496543Y0414339* +X0496653* +X0496543Y0414839* +X0496653* +X0496543Y0415339* +X0498801* +X0499184Y0413588* +G37* +G36* +X0558327Y0415447D02* +X0558519Y041543D01* +X0558694Y0415405* +X055886Y0415372* +X055901Y0415331* +X0559152Y041528* +X0559277Y0415239* +X0559385Y0415189* +X0559485Y0415131* +X0559577Y0415089* +X0559652Y0415039* +X055971Y0414997* +X055976Y0414964* +X0559794Y0414939* +X055981Y0414922* +X0559818Y0414914* +X0559918Y0414814* +X056001Y0414706* +X0560085Y0414589* +X0560152Y0414481* +X056021Y0414364* +X056026Y0414256* +X0560302Y0414148* +X0560327Y0414048* +X0560352Y0413948* +X0560368Y0413856* +X0560385Y0413773* +X0560393Y0413706* +X0560401Y0413648* +Y0413606* +Y0413581* +Y0413573* +X0560393Y0413406* +X0560378Y0413308* +X0560385Y0413273* +X0560393Y0413206* +X0560401Y0413148* +Y0413106* +Y0413081* +Y0413073* +X0560393Y0412906* +X0560378Y0412808* +X0560385Y0412773* +X0560393Y0412706* +X0560401Y0412648* +Y0412606* +Y0412581* +Y0412573* +X0560393Y0412406* +X0560368Y0412248* +X0560343Y0412106* +X0560302Y041199* +X0560268Y041189* +X0560243Y0411815* +X0560218Y0411773* +X056021Y0411757* +X0560127Y0411631* +X0560043Y0411523* +X0559952Y0411432* +X055986Y0411348* +X0559785Y0411282* +X0559727Y041124* +X0559685Y0411207* +X0559668Y0411198* +X0559602Y0411157* +X0559519Y0411115* +X0559427Y0411065* +X0559918Y0411039* +Y041104* +Y0411057* +Y0411065* +X0561176Y0410999* +Y0410766* +X0561151Y0410549* +X0561143Y0410501* +X0561176Y0410499* +Y0410266* +X0561151Y0410049* +X0561143Y0410001* +X0561176Y0409999* +Y0409766* +X0561151Y0409549* +X0561118Y0409358* +X0561076Y0409191* +X0561051Y0409116* +X0561026Y0409049* +X056101Y0408991* +X0560993Y0408949* +X0560976Y0408908* +X056096Y0408883* +X0560951Y0408866* +Y0408858* +X0560901Y0408766* +X0560843Y0408683* +X056071Y0408533* +X0560568Y0408399* +X0560427Y0408291* +X0560302Y0408208* +X0560243Y0408166* +X0560193Y0408141* +X0560152Y0408116* +X0560118Y0408108* +X0560102Y0408091* +X0560093* +X055986Y0408* +X055961Y0407933* +X0559369Y0407883* +X0559152Y040785* +X0559044Y0407841* +X0558952Y0407833* +X0558869Y0407825* +X0558802* +X0558744Y0407816* +X0558661* +X0558444Y0407825* +X0558402Y0407828* +X0558369Y0407825* +X0558302* +X0558244Y0407816* +X0558161* +X0557944Y0407825* +X0557902Y0407828* +X0557869Y0407825* +X0557802* +X0557744Y0407816* +X0557661* +X0557444Y0407825* +X0557236Y0407841* +X0557044Y0407875* +X0556869Y0407908* +X0556703Y0407958* +X0556544Y0408008* +X0556403Y0408058* +X0556278Y0408116* +X055617Y0408175* +X055607Y0408225* +X0555986Y0408275* +X055592Y0408324* +X0555861Y0408358* +X0555828Y0408391* +X0555803Y0408408* +X0555795Y0408416* +X0555678Y0408533* +X055557Y0408649* +X05555Y0408744* +X0555828Y0407167* +X0555724* +X0555828Y0406667* +X0555724* +X0555828Y0406167* +X0553579* +X0553214Y0407911* +X0553204Y0407908* +X0553104Y0407875* +X0553005Y0407858* +X0552913Y0407841* +X0552838Y0407825* +X055278* +X055273Y0407816* +X0552688* +X0552521Y0407825* +X0552414Y0407842* +X0552413Y0407841* +X0552338Y0407825* +X055228* +X055223Y0407816* +X0552188* +X0552021Y0407825* +X0551914Y0407842* +X0551913Y0407841* +X0551838Y0407825* +X055178* +X055173Y0407816* +X0551688* +X0551521Y0407825* +X0551363Y040785* +X0551213Y0407883* +X0551063Y0407933* +X055093Y0407983* +X0550797Y040805* +X055068Y0408116* +X0550572Y0408183* +X0550472Y040825* +X0550388Y0408316* +X0550314Y0408383* +X0550247Y0408433* +X0550197Y0408483* +X0550164Y0408516* +X0550139Y0408541* +X055013Y0408549* +X0549997Y0408716* +X0549882Y0408888* +X0549856Y0408766* +X0549797Y0408599* +X0549722Y0408458* +X0549656Y0408341* +X0549598Y0408258* +X0549573Y0408233* +X0549556Y0408208* +X0549539Y04082* +Y0408191* +X0549464Y0408125* +X0549389Y0408066* +X0549231Y0407975* +X0549073Y0407908* +X0548923Y0407866* +X054879Y0407833* +X0548731Y0407825* +X0548681* +X0548648Y0407816* +X054859* +X0548456Y0407825* +X0548323Y0407841* +X0548289Y0407833* +X0548231Y0407825* +X0548181* +X0548148Y0407816* +X054809* +X0547956Y0407825* +X0547823Y0407841* +X0547789Y0407833* +X0547731Y0407825* +X0547681* +X0547648Y0407816* +X054759* +X0547456Y0407825* +X0547323Y0407841* +X0547206Y0407866* +X0547098Y04079* +X0547007Y0407933* +X05428* +X05425Y0409382* +X0542467Y0409541* +X0542433Y0409691* +X05424Y0409832* +X0542367Y0409966* +X0542333Y0410082* +X05423Y0410182* +X0542275Y0410282* +X0542242Y0410365* +X0542217Y041044* +X0542192Y0410507* +X0542175Y0410557* +X0542158Y0410607* +X0542142Y041064* +X0542133Y0410665* +X0542125Y0410674* +Y0410682* +X054205Y0410832* +X0541959Y0410957* +X0541875Y0411073* +X0541792Y0411165* +X0541717Y041124* +X0541659Y0411298* +X0541617Y0411332* +X05416Y041134* +X0541475Y0411423* +X0541359Y0411482* +X0541242Y0411532* +X0541161Y0411552* +X0541142Y0411548* +X0541109Y0411532* +X0541084Y0411523* +X0541076* +X0541051Y0411575* +X0541001Y041159* +X0540973* +X0541526Y0408933* +X0541422* +X0541526Y0408433* +X0541422* +X0541526Y0407933* +X0539276* +X0538993Y0409316* +X0538926Y0409375* +X0538494Y0407933* +X0536742* +X0536828Y0407192* +X0536771Y0407177* +X0536828Y0406692* +X0536771Y0406677* +X0536828Y0406192* +X0536644Y0406142* +X0536478Y0406109* +X0536328Y0406084* +X0536195Y0406067* +X0536086Y0406059* +X0536003Y040605* +X0535936* +X0535795Y0406059* +X0535711Y0406069* +X0535695Y0406067* +X0535586Y0406059* +X0535503Y040605* +X0535436* +X0535295Y0406059* +X0535211Y0406069* +X0535195Y0406067* +X0535086Y0406059* +X0535003Y040605* +X0534936* +X0534795Y0406059* +X0534661Y0406075* +X0534545Y04061* +X0534445Y0406125* +X0534362Y040615* +X0534303Y0406175* +X053427Y0406192* +X0534253Y04062* +X0534145Y0406259* +X0534053Y0406325* +X053397Y0406392* +X0533895Y040645* +X0533837Y0406509* +X0533795Y0406559* +X053377Y0406592* +X0533762Y04066* +X053372Y040665* +X0533678Y0406708* +X0533587Y0406842* +X0533487Y0406983* +X0533404Y0407133* +X053332Y0407267* +X0533287Y0407325* +X0533254Y0407375* +X0533229Y0407417* +X0533212Y040745* +X0533195Y0407467* +Y0407475* +X0531347Y0410774* +Y0410766* +X0531321Y0410549* +X0531313Y0410501* +X0531347Y0410499* +Y0410266* +X0531321Y0410049* +X0531313Y0410001* +X0531347Y0409999* +Y0409766* +X0531321Y0409549* +X0531288Y0409358* +X0531247Y0409191* +X0531222Y0409116* +X0531197Y0409049* +X053118Y0408991* +X0531163Y0408949* +X0531147Y0408908* +X053113Y0408883* +X0531122Y0408866* +Y0408858* +X0531072Y0408766* +X0531013Y0408683* +X053088Y0408533* +X0530738Y0408399* +X0530597Y0408291* +X0530472Y0408208* +X0530413Y0408166* +X0530364Y0408141* +X0530322Y0408116* +X0530289Y0408108* +X0530272Y0408091* +X0530264* +X053003Y0408* +X052978Y0407933* +X0529539Y0407883* +X0529322Y040785* +X0529214Y0407841* +X0529122Y0407833* +X0529039Y0407825* +X0528972* +X0528914Y0407816* +X0528831* +X0528614Y0407825* +X0528573Y0407828* +X0528539Y0407825* +X0528473* +X0528414Y0407816* +X0528331* +X0528114Y0407825* +X0528073Y0407828* +X0528039Y0407825* +X0527973* +X0527914Y0407816* +X0527831* +X0527614Y0407825* +X0527406Y0407841* +X0527214Y0407875* +X0527039Y0407908* +X0526873Y0407958* +X0526715Y0408008* +X0526573Y0408058* +X0526448Y0408116* +X052634Y0408175* +X052624Y0408225* +X0526157Y0408275* +X052609Y0408324* +X0526032Y0408358* +X0525998Y0408391* +X0525973Y0408408* +X0525965Y0408416* +X0525848Y0408533* +X052574Y0408649* +X0525648Y0408774* +X0525573Y0408899* +X0525507Y0409016* +X0525457Y0409141* +X0525407Y0409258* +X0525374Y0409366* +X052536Y0409426* +X0525332Y0409282* +X0525282Y0409124* +X0525241Y0408999* +X0525224Y0408949* +X0525199Y0408899* +X0525191Y0408866* +X0525174Y0408841* +X0525166Y0408824* +Y0408816* +X0525057Y0408649* +X0524941Y0408499* +X0524816Y0408375* +X0524691Y0408266* +X0524582Y0408183* +X0524491Y0408125* +X0524458Y04081* +X0524433Y0408091* +X0524416Y0408075* +X0524408* +X0524208Y0407991* +X0524016Y0407925* +X0523816Y0407883* +X0523641Y040785* +X0523483Y0407833* +X0523416Y0407825* +X0523358* +X0523316Y0407816* +X052325* +X0523025Y0407825* +X0522969Y0407831* +X0522916Y0407825* +X0522858* +X0522816Y0407816* +X052275* +X0522525Y0407825* +X052247Y0407831* +X0522416Y0407825* +X0522358* +X0522316Y0407816* +X052225* +X0522025Y0407825* +X0521817Y040785* +X0521617Y0407891* +X0521433Y0407941* +X0521258Y0408008* +X05211Y0408075* +X0520959Y040815* +X0520825Y0408225* +X0520709Y0408299* +X0520609Y0408375* +X0520517Y0408441* +X052045Y0408508* +X0520392Y0408558* +X0520351Y0408599* +X0520326Y0408624* +X0520317Y0408633* +X0520192Y0408791* +X0520076Y0408958* +X0519984Y0409116* +X0519947Y0409194* +X0520001Y0408933* +X0519897* +X0520001Y0408433* +X0519897* +X0520001Y0407933* +X0517752* +X0516977Y0411657* +X0516824* +X0516827Y041164* +X0516425* +X0516611Y0410774* +X0516636Y0410632* +X0516661Y0410507* +X0516686Y0410399* +X0516702Y0410291* +X0516719Y0410199* +X0516727Y0410124* +X0516744Y0410049* +X0516752Y0409991* +Y0409933* +X0516761Y0409891* +X0516769Y0409833* +Y0409791* +Y0409783* +X0516752Y0409624* +X051674Y0409568* +X0516744Y0409549* +X0516752Y0409491* +Y0409433* +X0516761Y0409391* +X0516769Y0409333* +Y0409291* +Y0409283* +X0516752Y0409124* +X051674Y0409068* +X0516744Y0409049* +X0516752Y0408991* +Y0408933* +X0516761Y0408891* +X0516769Y0408833* +Y0408791* +Y0408783* +X0516752Y0408624* +X0516719Y0408474* +X0516677Y0408358* +X0516619Y040825* +X0516561Y0408175* +X0516519Y0408116* +X0516486Y0408075* +X0516469Y0408066* +X0516411Y0408025* +X0516344Y0407983* +X0516194Y0407925* +X0516036Y0407875* +X0515878Y040785* +X0515736Y0407833* +X0515669Y0407825* +X051562* +X0515569Y0407816* +X0515386* +X0515261Y0407825* +X051522Y0407831* +X0515169Y0407825* +X051512* +X0515069Y0407816* +X0514886* +X0514761Y0407825* +X051472Y0407831* +X0514669Y0407825* +X0514619* +X051457Y0407816* +X0514386* +X0514261Y0407825* +X0514153Y0407841* +X0514053Y040785* +X0513961Y0407866* +X0513903Y0407875* +X0513861Y0407883* +X0513845* +X0513645Y0408816* +X0513754Y0408808* +X0513645Y0409316* +X0513754Y0409308* +X0513645Y0409816* +X0513762Y0409808* +X0513853Y0409799* +X051392Y0409791* +X0513978* +X051402Y0409783* +X0514145* +X0514152Y0409784* +X0514145Y0409816* +X0514261Y0409808* +X0514268Y0409807* +X051427Y0409808* +X051432Y0409824* +X0514348Y0409831* +X0513961Y041164* +X0513195* +X0513003Y0412573* +X0513106* +X0513003Y0413073* +X0513106* +X0513003Y0413573* +X0513568* +X0513445Y0414181* +X051356Y0414111* +X0513445Y041468* +X051356Y041461* +X0513445Y041518* +X0514015Y0414834* +X0513945Y041518* +X0514515Y0414834* +X0514445Y041518* +X0515301Y041466* +X0515277Y0414747* +X0515403Y0414783* +X0515277Y0415247* +X0515511Y0415314* +X0515736Y0415364* +X0515944Y0415405* +X0516127Y041543* +X0516202Y0415439* +X0516277Y0415447* +X0516344* +X0516394Y0415455* +X0516494* +X051666Y0415447* +X0516719Y0415441* +X0516777Y0415447* +X0516844* +X0516894Y0415455* +X0516994* +X051716Y0415447* +X0517219Y0415441* +X0517277Y0415447* +X0517344* +X0517394Y0415455* +X0517494* +X051766Y0415447* +X051781Y041543* +X0517943Y0415405* +X0518052Y0415372* +X0518144Y0415339* +X051821Y0415314* +X0518243Y0415297* +X051826Y0415289* +X051836Y0415222* +X0518452Y0415147* +X0518527Y0415072* +X0518593Y0415006* +X0518635Y0414939* +X0518677Y0414889* +X0518693Y0414856* +X0518702Y0414839* +X0518718Y0414797* +X0518743Y0414747* +X0518785Y0414631* +X0518826Y0414498* +X051886Y0414372* +X0518893Y0414248* +X051891Y0414148* +X0518918Y0414106* +X0518926Y0414073* +X0518935Y0414056* +Y0414048* +X0519035Y0413573* +X0519734* +X0519906Y0412754* +X0519934Y0412807* +X0519992Y0412881* +X0520042Y0412956* +X0520084Y0413015* +X0520126Y0413056* +X0520151Y041309* +X0520167Y0413106* +X0520176Y0413115* +X0520284Y0413215* +X0520409Y0413306* +X0520534Y0413381* +X0520667Y0413448* +X05208Y0413506* +X0520934Y0413548* +X0521067Y0413589* +X0521192Y0413615* +X0521308Y0413639* +X0521417Y0413656* +X0521517Y0413673* +X0521608Y0413681* +X0521675Y041369* +X0521775* +X0521991Y0413681* +X0522042Y0413675* +X0522108Y0413681* +X0522175Y041369* +X0522275* +X0522492Y0413681* +X0522542Y0413675* +X0522608Y0413681* +X0522675Y041369* +X0522775* +X0522992Y0413681* +X05232Y0413656* +X0523391Y0413615* +X0523575Y0413573* +X0523741Y0413506* +X05239Y0413448* +X0524041Y0413373* +X0524174Y0413306* +X0524291Y0413231* +X0524391Y0413156* +X0524474Y0413098* +X0524549Y041304* +X0524608Y041299* +X0524649Y0412948* +X0524674Y0412923* +X0524683Y0412915* +X0524807Y0412765* +X0524881Y0412665* +X0524882Y0412673* +X0524915Y0412831* +X0524957Y0412973* +X0524969Y041301* +X0524865Y0413015* +X0524882Y0413173* +X0524915Y0413331* +X0524957Y0413473* +X0524969Y041351* +X0524865Y0413515* +X0524882Y0413673* +X0524915Y0413831* +X0524957Y0413973* +X0524999Y0414106* +X0525057Y0414231* +X0525107Y0414348* +X0525174Y0414456* +X0525232Y0414547* +X052529Y0414639* +X0525349Y0414714* +X0525407Y0414772* +X0525449Y0414831* +X052549Y0414872* +X0525523Y0414897* +X052554Y0414914* +X0525548Y0414922* +X0525673Y0415014* +X0525798Y0415097* +X052594Y0415172* +X0526082Y0415231* +X0526223Y041528* +X0526373Y0415322* +X0526656Y0415389* +X0526781Y0415414* +X0526906Y041543* +X0527014Y0415439* +X0527114Y0415447* +X0527189Y0415455* +X0527298* +X0527498Y0415447* +X0527555Y0415442* +X0527614Y0415447* +X0527689Y0415455* +X0527798* +X0527998Y0415447* +X0528055Y0415442* +X0528115Y0415447* +X0528189Y0415455* +X0528298* +X0528498Y0415447* +X0528689Y041543* +X0528864Y0415405* +X0529031Y0415372* +X0529181Y0415331* +X0529322Y041528* +X0529447Y0415239* +X0529556Y0415189* +X0529656Y0415131* +X0529747Y0415089* +X0529822Y0415039* +X052988Y0414997* +X052993Y0414964* +X0529964Y0414939* +X052998Y0414922* +X0529989Y0414914* +X0530089Y0414814* +X053018Y0414706* +X0530255Y0414589* +X0530322Y0414481* +X053038Y0414364* +X053043Y0414256* +X0530472Y0414148* +X0530497Y0414048* +X0530522Y0413948* +X0530539Y0413856* +X0530555Y0413773* +X0530563Y0413706* +X0530572Y0413648* +Y0413606* +Y0413581* +Y0413573* +X0532663* +X0533639Y0411751* +X0533895Y0413573* +X0538002* +X0538119Y041346* +X0537935Y0414339* +X053804* +X0537935Y0414839* +X053804* +X0537935Y0415339* +X0540193* +X0540539Y0413677* +X0540576Y0413681* +X0540626Y041369* +X0540676* +X0540817Y0413681* +X0540921Y0413657* +X0541001Y0413673* +X0541076Y0413681* +X0541126Y041369* +X0541176* +X0541317Y0413681* +X0541421Y0413657* +X0541501Y0413673* +X0541576Y0413681* +X0541626Y041369* +X0541676* +X0541817Y0413681* +X0541959Y0413648* +X0542092Y0413598* +X0542139Y0413573* +X0544083* +X0544541Y0411375* +Y0411407* +Y0411432* +Y041144* +X0544549Y041154* +X0544558Y0411631* +X0544561Y0411642* +X0544558Y0411665* +X0544549Y041174* +Y0411807* +X0544541Y0411865* +Y0411907* +Y0411932* +Y041194* +X0544549Y041204* +X0544558Y0412132* +X0544561Y0412142* +X0544558Y0412165* +X0544549Y041224* +Y0412307* +X0544541Y0412365* +Y0412407* +Y0412432* +Y041244* +X0544549Y041254* +X0544558Y0412632* +X0544607Y0412798* +X0544674Y0412948* +X0544757Y0413081* +X0544841Y0413181* +X0544907Y0413256* +X0544957Y0413306* +X0544966Y0413323* +X0544974* +X0545057Y041339* +X0545149Y0413448* +X0545357Y0413531* +X0545582Y0413598* +X0545799Y0413648* +X0545899Y0413656* +X054599Y0413673* +X0546073Y0413681* +X0546148* +X0546215Y041369* +X0546457* +X0546552Y0413679* +X0546573Y0413681* +X0546649* +X0546715Y041369* +X0546957* +X0547051Y0413679* +X0547074Y0413681* +X0547149* +X0547215Y041369* +X0547457* +X0547607Y0413673* +X0547748Y0413656* +X0547882Y0413631* +X0548006Y0413606* +X0548123Y0413581* +X0548223Y0413548* +X0548315Y0413515* +X0548406Y0413481* +X0548481Y0413448* +X054854Y0413423* +X054859Y0413398* +X0548631Y0413373* +X0548665Y0413356* +X0548681Y0413348* +X054869Y041334* +X0548873Y0413198* +X0549023Y041304* +X0549148Y0412881* +X0549248Y0412723* +X0549323Y041259* +X0549348Y0412523* +X0549373Y0412473* +X0549389Y0412432* +X0549406Y0412398* +X0549414Y0412382* +Y0412373* +X0549166Y0412353* +X0549248Y0412223* +X0549323Y041209* +X0549348Y0412023* +X0549373Y0411973* +X0549377Y0411962* +X0549381Y0412032* +X0549405Y041219* +X0549431Y041234* +X0549464Y0412473* +X0549506Y0412598* +X0549547Y0412707* +X0549589Y0412807* +X054963Y0412898* +X0549672Y0412973* +X0549705Y0413031* +X0549747Y041309* +X0549772Y0413131* +X0549797Y0413156* +X0549805Y0413173* +X0549814Y0413181* +X0549897Y0413273* +X0549989Y0413348* +X0550089Y0413415* +X055018Y0413473* +X055028Y0413523* +X055038Y0413564* +X0550563Y0413623* +X055073Y0413664* +X0550797Y0413673* +X0550863Y0413681* +X0550913Y041369* +X055098* +X0551122Y0413681* +X0551242Y0413666* +X0551297Y0413673* +X0551363Y0413681* +X0551413Y041369* +X055148* +X0551621Y0413681* +X0551742Y0413666* +X0551797Y0413673* +X0551863Y0413681* +X0551913Y041369* +X055198* +X0552121Y0413681* +X0552255Y0413664* +X0552371Y0413648* +X055248Y0413623* +X0552571Y0413589* +X0552638Y0413573* +X0554496* +X0554702Y041258* +X0554712Y0412673* +X0554745Y0412831* +X0554787Y0412973* +X0554799Y041301* +X0554695Y0413015* +X0554712Y0413173* +X0554745Y0413331* +X0554787Y0413473* +X0554799Y041351* +X0554695Y0413515* +X0554712Y0413673* +X0554745Y0413831* +X0554787Y0413973* +X0554828Y0414106* +X0554887Y0414231* +X0554937Y0414348* +X0555003Y0414456* +X0555062Y0414547* +X055512Y0414639* +X0555178Y0414714* +X0555236Y0414772* +X0555278Y0414831* +X055532Y0414872* +X0555353Y0414897* +X055537Y0414914* +X0555378Y0414922* +X0555503Y0415014* +X0555628Y0415097* +X055577Y0415172* +X0555911Y0415231* +X0556053Y041528* +X0556203Y0415322* +X0556486Y0415389* +X0556611Y0415414* +X0556736Y041543* +X0556844Y0415439* +X0556944Y0415447* +X0557019Y0415455* +X0557128* +X0557327Y0415447* +X0557384Y0415442* +X0557444Y0415447* +X0557519Y0415455* +X0557627* +X0557827Y0415447* +X0557885Y0415442* +X0557944Y0415447* +X0558019Y0415455* +X0558127* +X0558327Y0415447* +G37* +%LNunisolder52_full-2*% +%LPC*% +G36* +X0522286Y0411616D02* +X0522284Y0411615D01* +X05222Y0411557* +X052215Y0411515* +X0522109Y0411482* +X05221Y0411473* +X0522009Y0411365* +X0521942Y0411248* +X0521906Y0411148* +X0521909Y0411132* +X052195Y0410999* +X0521992Y0410874* +X0522034Y0410757* +X0522084Y0410649* +X0522133Y0410557* +X0522175Y0410474* +X0522217Y0410399* +X0522259Y0410332* +X0522284Y0410291* +X0522308Y0410249* +X0522325Y0410232* +X0522333Y0410224* +X05224Y0410149* +X0522467Y0410083* +X0522542Y0410016* +X0522617Y0409966* +X0522686Y0409929* +X0522691Y0409933* +X0522775Y0409983* +X0522833Y0410033* +X0522866Y0410066* +X0522883Y0410074* +X0522974Y0410191* +X0523033Y0410324* +X0523075Y0410429* +X0523066Y0410465* +X0523033Y0410582* +X0523008Y0410674* +X0522999Y0410707* +X0522991Y0410732* +X0522983Y0410749* +Y0410757* +X0522908Y0410923* +X0522833Y0411073* +X052275Y0411198* +X0522675Y0411307* +X05226Y0411382* +X0522541Y041144* +X0522508Y0411482* +X0522491Y041149* +X0522366Y0411573* +X0522286Y0411616* +G37* +G36* +X0551982Y0411633D02* +X055193Y0411598D01* +X0551872Y0411548* +X0551838Y0411515* +X055183Y0411507* +X0551747Y041139* +X0551688Y0411265* +X0551648Y0411157* +X0551672Y0411049* +X0551713Y0410924* +X055173Y0410866* +X0551738Y0410824* +X0551755Y0410782* +X0551763Y0410757* +X0551772Y0410741* +Y0410732* +X0551847Y0410549* +X055193Y0410391* +X0552005Y0410266* +X0552088Y0410157* +X0552155Y0410083* +X0552205Y0410024* +X0552238Y0409991* +X0552255Y0409983* +X0552332Y0409929* +X0552379Y0409966* +X0552429Y0410008* +X0552471Y0410041* +X0552479Y0410058* +X0552571Y0410183* +X0552629Y0410316* +X0552673Y041044* +X0552663Y0410482* +X0552638Y0410599* +X0552613Y041069* +X0552604Y0410724* +X0552596Y0410749* +X0552588Y0410765* +Y0410774* +X0552521Y0410949* +X0552446Y0411107* +X0552371Y0411232* +X0552296Y041134* +X0552229Y0411423* +X0552179Y0411482* +X0552146Y0411523* +X0552129Y0411532* +X0552013Y0411615* +X0551982Y0411633* +G37* +G36* +X0529064Y0410803D02* +X0528997Y0410774D01* +X0528931Y041074* +X0528872Y0410715* +X0528814Y041069* +X0528781Y0410674* +X0528756Y0410657* +X0528748* +X0528614Y0410599* +X0528489Y041054* +X0528381Y041049* +X0528289Y0410449* +X0528206Y0410407* +X0528131Y0410365* +X0528064Y0410332* +X0528006Y0410299* +X0527964Y0410274* +X0527923Y0410249* +X0527865Y0410215* +X052784Y0410199* +X0527831Y041019* +X0527828Y0410187* +X0527831Y0410183* +X0527865Y0410149* +X0527881Y0410141* +X052794Y0410099* +X0528006Y0410066* +X0528148Y0410008* +X0528306Y0409974* +X0528328Y040997* +X0528414Y0409991* +X0528497Y0410024* +X0528581Y0410049* +X0528647Y0410083* +X0528706Y0410116* +X0528756Y0410141* +X0528797Y0410174* +X052883Y0410199* +X0528872Y0410232* +X0528889Y0410249* +X0528922Y0410291* +X0528947Y0410349* +X0528997Y0410466* +X052903Y0410599* +X0529055Y0410741* +X0529064Y0410803* +G37* +G36* +X0554716Y0412514D02* +X055513Y0410522D01* +X0555137Y0410615* +X055514Y041063* +X0555137Y0410649* +X0555128Y0410724* +Y0410782* +X055512Y0410832* +Y0410857* +Y0410866* +X0555128Y041099* +X0555137Y0411116* +X0555195Y0411332* +X0555262Y0411532* +X0555345Y041169* +X0555395Y0411765* +X0555437Y0411824* +X055547Y0411873* +X0555503Y0411915* +X0555536Y0411957* +X0555561Y0411982* +X055557Y041199* +X0555578Y0411999* +X0555645Y0412057* +X0555728Y0412115* +X055582Y0412182* +X0555928Y041224* +X0556153Y0412373* +X0556339Y0412469* +X0555962Y0412484* +X0555961Y0412481* +Y0412473* +Y0412465* +X0554716Y0412514* +G37* +G36* +X0558893Y0410803D02* +X0558827Y0410774D01* +X055876Y041074* +X0558702Y0410715* +X0558644Y041069* +X0558611Y0410674* +X0558586Y0410657* +X0558577* +X0558444Y0410599* +X0558319Y041054* +X0558211Y041049* +X0558119Y0410449* +X0558036Y0410407* +X0557961Y0410365* +X0557894Y0410332* +X0557836Y0410299* +X0557794Y0410274* +X0557753Y0410249* +X0557694Y0410215* +X0557669Y0410199* +X0557661Y041019* +X0557657Y0410187* +X0557661Y0410183* +X0557694Y0410149* +X0557711Y0410141* +X0557769Y0410099* +X0557836Y0410066* +X0557977Y0410008* +X0558136Y0409974* +X0558158Y040997* +X0558244Y0409991* +X0558327Y0410024* +X055841Y0410049* +X0558477Y0410083* +X0558535Y0410116* +X0558585Y0410141* +X0558627Y0410174* +X055866Y0410199* +X0558702Y0410232* +X0558718Y0410249* +X0558752Y0410291* +X0558777Y0410349* +X0558827Y0410466* +X055886Y0410599* +X0558885Y0410741* +X0558893Y0410803* +G37* +G36* +X0545011Y0408433D02* +X0544945D01* +X0544988Y0408228* +X0544999Y0408299* +X0545007Y0408399* +X0545011Y0408433* +G37* +G36* +X0536032Y0411975D02* +X0535458Y0408679D01* +X0535478Y0408641* +X0535553Y0408525* +X0535636Y0408425* +X0535711Y0408342* +X0535795Y0408275* +X053587Y0408217* +X0535945Y0408167* +X0536011Y0408133* +X0536078Y0408108* +X0536101Y0408098* +X0536136Y0408108* +X0536178Y0408117* +X0536211Y0408125* +X0536219* +X0536226Y0408065* +X0536253Y0408058* +X0536278* +X0536405Y0408433* +X0536236* +X0536405Y0408933* +X0536236* +X0536976Y0411124* +X0536032Y0411975* +G37* +G36* +X0544996Y0408933D02* +X0544945D01* +X0544988Y0408728* +X0544999Y04088* +X0545004Y0408862* +X0544999Y0408916* +X0544996Y0408933* +G37* +G36* +X0500093Y0411581D02* +X0500051Y0411548D01* +X0499992Y0411498* +X0499951Y0411465* +X0499942Y0411448* +X0499851Y0411323* +X0499784Y041119* +X0499742Y0411079* +X0499759Y0411007* +X0499792Y0410882* +X0499826Y0410791* +X0499834Y0410757* +X0499842Y0410732* +X0499851Y0410716* +Y0410707* +X0499917Y0410541* +X0500001Y0410391* +X0500076Y0410266* +X0500151Y0410166* +X0500217Y0410091* +X0500276Y0410033* +X0500309Y0409999* +X0500326Y0409991* +X0500442Y0409916* +X0500447Y0409914* +X05005Y0409949* +X050055Y0409991* +X0500592Y0410024* +X05006Y0410033* +X0500683Y0410149* +X0500742Y0410274* +X0500779Y0410373* +X0500733Y0410549* +X05007Y0410657* +X0500667Y0410749* +X0500633Y041084* +X0500608Y0410915* +X0500575Y0410982* +X050055Y041104* +X0500525Y041109* +X0500508Y0411123* +X0500492Y041114* +Y0411148* +X0500425Y0411257* +X050035Y0411348* +X0500275Y0411432* +X05002Y0411507* +X0500117Y0411565* +X0500093Y0411581* +G37* +G36* +X0503032Y041164D02* +X0502937D01* +X0502949Y041159* +X0502983Y041144* +X0503016Y0411299* +X0503033Y0411166* +X050305Y0411049* +X0503058Y0410957* +Y0410874* +X0503066Y0410816* +Y0410782* +Y0410766* +X0503058Y0410591* +X0503054Y0410505* +X0503058Y0410457* +Y0410374* +X0503066Y0410316* +Y0410282* +Y0410266* +X0503058Y0410091* +X0503054Y0410005* +X0503058Y0409957* +Y0409874* +X0503066Y0409816* +Y0409788* +X0503091Y0409783* +X0503216* +X0503223Y0409784* +X0503216Y0409816* +X0503333Y0409808* +X0503339Y0409807* +X0503341Y0409808* +X0503391Y0409824* +X0503419Y0409831* +X0503032Y041164* +G37* +G36* +X0519853Y0412656D02* +X0519822D01* +X051983Y0412615* +X0519853Y0412656* +G37* +G36* +X053057Y0412659D02* +X0530572Y0412648D01* +Y0412606* +Y0412581* +Y0412573* +X0530618* +X053057Y0412659* +G37* +G36* +X0549372Y041187D02* +X0549166Y0411853D01* +X0549248Y0411723* +X0549323Y041159* +X0549348Y0411523* +X0549372Y0411474* +Y0411557* +X0549364Y0411624* +Y0411665* +Y0411682* +X0549372Y0411865* +Y041187* +G37* +G36* +X053057Y0413159D02* +X0530572Y0413148D01* +Y0413106* +Y0413081* +Y0413073* +X0530618* +X053057Y0413159* +G37* +G36* +X0557645Y0413343D02* +X0557628Y0413339D01* +X0557503Y0413289* +X0557411Y0413248* +X0557344Y0413206* +X0557311Y0413173* +X0557294Y0413164* +X0557195Y0413064* +X055712Y0412956* +X0557061Y0412839* +X0557047Y04128* +X0557119Y0412831* +X0557236Y041289* +X0557344Y041294* +X0557444Y0412981* +X0557527Y0413031* +X0557611Y0413073* +X0557677Y0413106* +X0557735Y041314* +X0557786Y0413173* +X0557827Y0413198* +X0557883Y0413233* +X055781Y0413281* +X0557694Y0413331* +X0557645Y0413343* +G37* +G36* +X0527815D02* +X0527798Y0413339D01* +X0527673Y0413289* +X0527581Y0413248* +X0527515Y0413206* +X0527481Y0413173* +X0527465Y0413164* +X0527365Y0413064* +X052729Y0412956* +X0527232Y0412839* +X0527217Y04128* +X0527289Y0412831* +X0527406Y041289* +X0527514Y041294* +X0527614Y0412981* +X0527698Y0413031* +X0527781Y0413073* +X0527847Y0413106* +X0527906Y041314* +X0527956Y0413173* +X0527997Y0413198* +X0528053Y0413233* +X0527981Y0413281* +X0527864Y0413331* +X0527815Y0413343* +G37* +G36* +X0529589Y041106D02* +X0529554Y0411041D01* +X0529589Y0411039* +Y041104* +Y0411057* +Y041106* +G37* +G36* +X0530534Y0412223D02* +X0530513Y0412106D01* +X0530472Y041199* +X0530439Y041189* +X0530413Y0411815* +X0530389Y0411773* +X053038Y0411757* +X0530297Y0411631* +X0530214Y0411523* +X0530122Y0411432* +X053003Y0411348* +X0529955Y0411282* +X0529897Y041124* +X0529855Y0411207* +X0529839Y0411198* +X0529772Y0411157* +X0529689Y0411115* +X0529598Y0411065* +X0530089Y0411039* +Y041104* +Y0411057* +Y0411065* +X0531216Y0411006* +X0530534Y0412223* +G37* +G36* +X0519596Y0411657D02* +X0519434D01* +X0519607Y0410827* +X0519609Y0410849* +X0519601Y0410899* +Y0410982* +X0519593Y041104* +Y0411074* +Y041109* +X0519601Y0411265* +X0519609Y0411349* +X0519601Y0411399* +Y0411482* +X0519593Y041154* +Y0411574* +Y041159* +X0519596Y0411657* +G37* +G36* +X0524977Y041251D02* +X0525016Y041244D01* +X0525099Y0412273* +X0525174Y0412098* +X0525232Y0411924* +X0525274Y0411757* +X0525316Y0411599* +X0525349Y0411449* +X0525363Y0411326* +X0525365Y0411332* +X0525432Y0411532* +X0525515Y041169* +X0525565Y0411765* +X0525607Y0411824* +X052564Y0411873* +X0525673Y0411915* +X0525707Y0411957* +X0525732Y0411982* +X052574Y041199* +X0525748Y0411999* +X0525815Y0412057* +X0525898Y0412115* +X052599Y0412182* +X0526098Y041224* +X0526323Y0412373* +X0526509Y0412469* +X0526132Y0412484* +X0526131Y0412481* +Y0412473* +Y0412465* +X0524977Y041251* +G37* +G36* +X0549372Y041137D02* +X0549315Y0411365D01* +X054937Y0411325* +X0549372Y0411365* +Y041137* +G37* +G36* +X0559418Y041106D02* +X0559384Y0411041D01* +X0559418Y0411039* +Y041104* +Y0411057* +Y041106* +G37* +%LNunisolder52_full-3*% +%LPD*% +G54D174* +X0503498Y0562063D03* +Y0572063D03* +Y0552063D03* +Y0542063D03* +X0421798Y0542463D03* +Y0552463D03* +Y0572463D03* +Y0562463D03* +X0210191Y0577165D03* +X0220191D03* +X0230191D03* +X0240191D03* +X0356891Y0376565D03* +X0366891Y0366565D03* +X0356891D03* +X0366891Y0356565D03* +X0356891D03* +X0366891Y0346565D03* +X0356891D03* +X0366891Y0336565D03* +X0356891D03* +X0307891Y0468265D03* +X0297891D03* +X0287891D03* +X0277891D03* +X0267891D03* +X0307891Y0448265D03* +X0297891D03* +X0287891D03* +X0277891D03* +X0267891D03* +Y0417165D03* +X0277891D03* +X0287891D03* +X0297891D03* +X0307891D03* +X0267891Y0437165D03* +X0277891D03* +X0287891D03* +X0297891D03* +X0307891D03* +Y0406065D03* +X0297891D03* +X0287891D03* +X0277891D03* +X0267891D03* +X0307891Y0386065D03* +X0297891D03* +X0287891D03* +X0277891D03* +X0267891D03* +X0559272Y0294744D03* +Y0284744D03* +X0549272Y0294744D03* +Y0284744D03* +X0539272Y0294744D03* +Y0284744D03* +X0529272Y0294744D03* +Y0284744D03* +X0519272Y0294744D03* +G54D175* +X0503498Y0532063D03* +X0421798Y0532463D03* +X0517851Y0461417D03* +G54D176* +X0145276Y0430315D03* +X0136614Y0433465D03* +X0145276Y0424016D03* +X0136614Y0420866D03* +Y0427165D03* +G54D177* +X0140945Y0410827D03* +Y0443504D03* +G54D178* +X0194291Y0302665D03* +Y0551665D03* +G54D179* +X0369291Y0427165D03* +G54D180* +X0187197Y049969D03* +G54D181* +X0169102Y0517785D03* +G54D182* +X0200191Y0577165D03* +X0519272Y0284744D03* +G54D183* +X0253465Y0287098D03* +X0275118D03* +Y0303633D03* +X0253465D03* +X0626968Y0595472D03* +X0648622D03* +X0405673Y0344727D03* +X0427327D03* +Y0361262D03* +X0405673D03* +X0598425Y0595472D03* +X0576772D03* +G54D184* +X0366891Y0376565D03* +G54D185* +X0208033Y046787D03* +X022575D03* +Y0493461D03* +X0208033D03* +Y041437D03* +X022575D03* +Y0439961D03* +X0208033D03* +Y036087D03* +X022575D03* +Y0386461D03* +X0208033D03* +G54D186* +X024249Y0489814D03* +Y0509027D03* +G54D187* +X0560335Y0392027D03* +X042276Y0387435D03* +X0538287Y0358268D03* +X0479331Y0349803D03* +G54D188* +X054065Y0392027D03* +X0518602Y0358268D03* +X0499016Y0349803D03* +G54D189* +X0606063Y0285138D03* +G54D190* +X0596063Y0285138D03* +X0586063D03* +X0486Y0297094D03* +X0481Y0287094D03* +X0476Y0297094D03* +X0471Y0287094D03* +X0466Y0297094D03* +X0461Y0287094D03* +G54D191* +X0549902Y0508382D03* +X0597244Y0575083D03* +X0573622D03* +X0644488Y0501D03* +X0620866Y0501098D03* +G54D192* +X0549902Y0582555D03* +X0597244Y0500909D03* +X0573622D03* +X0644488Y0575173D03* +X0620866Y0575272D03* +G54D193* +X0517851Y0469291D03* +G54D194* +X0411417Y0287402D03* +Y0470472D03* +X0675197Y059252D03* +Y0287402D03* +G54D195* +X040884Y0401354D03* +G54D196* +X0677165Y0507146D03* +Y0480531D03* +Y0565728D03* +Y0539114D03* +G54D197* +X0625591Y0281496D03* +Y030315D03* +X0642126D03* +Y0281496D03* +G54D198* +X0297891Y0468465D03* +G54D199* +X0297884Y0433986D03* +G54D200* +X0297884Y040943D03* +G54D201* +X0257691Y0499665D03* +M02* \ No newline at end of file diff --git a/hardware/gerber/unisolder52_full.gko b/hardware/gerber/unisolder52_full.gko new file mode 100644 index 0000000..136ac2b --- /dev/null +++ b/hardware/gerber/unisolder52_full.gko @@ -0,0 +1,776 @@ +%FSTAX25Y25*% +%MOIN*% +%SFA1B1*% + +%IPPOS*% +%ADD117C,0.008000*% +%ADD118C,0.007870*% +%LNunisolder52_full-1*% +%LPD*% +G54D117* +X0393701Y0279527D02* +Y0291339D01* +Y0314961D02* +Y0360236D01* +Y0383858D02* +Y0438976D01* +Y0462598D02* +Y0478346D01* +X038189Y0269685D02* +Y0291338D01* +Y0314961D02* +Y0360236D01* +Y0383858D02* +Y0438976D01* +Y0462598D02* +Y0511811D01* +Y0535433D02* +Y0551181D01* +Y0574803D02* +Y0584646D01* +X0405512Y0507874D02* +Y0511811D01* +Y0535433D02* +Y0551181D01* +Y0574803D02* +Y0579528D01* +X0531496Y0494095D02* +Y0519685D01* +Y0543307D02* +Y0549213D01* +Y0572835D02* +Y0600394D01* +X0519685Y0507874D02* +Y0519685D01* +Y0543307D02* +Y0549213D01* +Y0572835D02* +Y0579528D01* +G54D118* +X0399606Y0568898D02* +D01* +X0400017Y0568912* +X0400427Y0568955* +X0400833Y0569027* +X0401233Y0569126* +X0401625Y0569254* +X0402008Y0569408* +X0402378Y0569589* +X0402735Y0569795* +X0403077Y0570025* +X0403402Y0570279* +X0403708Y0570555* +X0403995Y0570852* +X0404259Y0571167* +X0404502Y0571501* +X040472Y0571851* +X0404914Y0572214* +X0405081Y0572591* +X0405222Y0572978* +X0405336Y0573375* +X0405422Y0573778* +X0405479Y0574186* +X0405508Y0574597* +X0405512Y0574803* +X0399606Y0529528D02* +D01* +X0400017Y0529542* +X0400427Y0529585* +X0400833Y0529657* +X0401233Y0529756* +X0401625Y0529884* +X0402008Y0530038* +X0402378Y0530219* +X0402735Y0530425* +X0403077Y0530655* +X0403402Y0530909* +X0403708Y0531185* +X0403995Y0531482* +X0404259Y0531797* +X0404502Y0532131* +X040472Y0532481* +X0404914Y0532844* +X0405081Y0533221* +X0405222Y0533608* +X0405336Y0534005* +X0405422Y0534408* +X0405479Y0534816* +X0405508Y0535227* +X0405512Y0535433* +Y0551181D02* +D01* +X0405497Y0551592* +X0405454Y0552002* +X0405382Y0552408* +X0405283Y0552808* +X0405155Y05532* +X0405001Y0553583* +X040482Y0553953* +X0404614Y055431* +X0404384Y0554652* +X040413Y0554977* +X0403854Y0555283* +X0403557Y055557* +X0403242Y0555834* +X0402908Y0556077* +X0402559Y0556295* +X0402195Y0556489* +X0401818Y0556656* +X0401431Y0556797* +X0401034Y0556911* +X0400631Y0556997* +X0400223Y0557054* +X0399812Y0557083* +X0399606Y0557087* +X0405512Y0511811D02* +D01* +X0405497Y0512222* +X0405454Y0512632* +X0405382Y0513038* +X0405283Y0513438* +X0405155Y051383* +X0405001Y0514213* +X040482Y0514583* +X0404614Y051494* +X0404384Y0515282* +X040413Y0515607* +X0403854Y0515913* +X0403557Y05162* +X0403242Y0516464* +X0402908Y0516707* +X0402559Y0516925* +X0402195Y0517119* +X0401818Y0517286* +X0401431Y0517427* +X0401034Y0517541* +X0400631Y0517627* +X0400223Y0517684* +X0399812Y0517713* +X0399606Y0517717* +X038189Y0535433D02* +D01* +X0381904Y0535021* +X0381947Y0534611* +X0382019Y0534205* +X0382118Y0533805* +X0382246Y0533413* +X03824Y053303* +X0382581Y053266* +X0382787Y0532303* +X0383017Y0531961* +X0383271Y0531636* +X0383547Y053133* +X0383844Y0531043* +X0384159Y0530779* +X0384493Y0530536* +X0384843Y0530318* +X0385206Y0530124* +X0385583Y0529957* +X038597Y0529816* +X0386367Y0529702* +X038677Y0529616* +X0387178Y0529559* +X0387589Y052953* +X0387795Y0529528* +Y0517717D02* +D01* +X0387383Y0517702* +X0386973Y0517659* +X0386567Y0517587* +X0386167Y0517488* +X0385775Y051736* +X0385392Y0517206* +X0385022Y0517025* +X0384665Y0516819* +X0384323Y0516589* +X0383998Y0516335* +X0383692Y0516059* +X0383405Y0515762* +X0383141Y0515447* +X0382898Y0515113* +X038268Y0514764* +X0382486Y05144* +X0382319Y0514023* +X0382178Y0513636* +X0382064Y0513239* +X0381978Y0512836* +X0381921Y0512428* +X0381892Y0512017* +X038189Y0511811* +X0387795Y0557087D02* +D01* +X0387383Y0557072* +X0386973Y0557029* +X0386567Y0556957* +X0386167Y0556858* +X0385775Y055673* +X0385392Y0556576* +X0385022Y0556395* +X0384665Y0556189* +X0384323Y0555959* +X0383998Y0555705* +X0383692Y0555429* +X0383405Y0555132* +X0383141Y0554817* +X0382898Y0554483* +X038268Y0554134* +X0382486Y055377* +X0382319Y0553393* +X0382178Y0553006* +X0382064Y0552609* +X0381978Y0552206* +X0381921Y0551798* +X0381892Y0551387* +X038189Y0551181* +Y0574803D02* +D01* +X0381904Y0574391* +X0381947Y0573981* +X0382019Y0573575* +X0382118Y0573175* +X0382246Y0572783* +X03824Y05724* +X0382581Y057203* +X0382787Y0571673* +X0383017Y0571331* +X0383271Y0571006* +X0383547Y05707* +X0383844Y0570413* +X0384159Y0570149* +X0384493Y0569906* +X0384843Y0569688* +X0385206Y0569494* +X0385583Y0569327* +X038597Y0569186* +X0386367Y0569072* +X038677Y0568986* +X0387178Y0568929* +X0387589Y05689* +X0387795Y0568898* +X0393701Y0360236D02* +D01* +X0393686Y0360647* +X0393643Y0361057* +X0393571Y0361463* +X0393472Y0361863* +X0393344Y0362255* +X039319Y0362638* +X0393009Y0363008* +X0392803Y0363365* +X0392573Y0363707* +X0392319Y0364032* +X0392043Y0364338* +X0391746Y0364625* +X0391431Y0364889* +X0391097Y0365132* +X0390748Y036535* +X0390384Y0365544* +X0390007Y0365711* +X038962Y0365852* +X0389223Y0365966* +X038882Y0366052* +X0388412Y0366109* +X0388001Y0366138* +X0387588* +X0387177Y0366109* +X0386769Y0366052* +X0386366Y0365966* +X0385969Y0365852* +X0385582Y0365711* +X0385205Y0365544* +X0384842Y036535* +X0384492Y0365132* +X0384158Y0364889* +X0383843Y0364625* +X0383546Y0364338* +X038327Y0364032* +X0383016Y0363707* +X0382786Y0363365* +X038258Y0363008* +X0382399Y0362638* +X0382245Y0362255* +X0382117Y0361863* +X0382018Y0361463* +X0381946Y0361057* +X0381903Y0360647* +X038189Y0360236* +Y0383858D02* +D01* +X0381904Y0383446* +X0381947Y0383036* +X0382019Y038263* +X0382118Y038223* +X0382246Y0381838* +X03824Y0381455* +X0382581Y0381085* +X0382787Y0380728* +X0383017Y0380386* +X0383271Y0380061* +X0383547Y0379755* +X0383844Y0379468* +X0384159Y0379204* +X0384493Y0378961* +X0384843Y0378743* +X0385206Y0378549* +X0385583Y0378382* +X038597Y0378241* +X0386367Y0378127* +X038677Y0378041* +X0387178Y0377984* +X0387589Y0377955* +X0388002* +X0388413Y0377984* +X0388821Y0378041* +X0389224Y0378127* +X0389621Y0378241* +X0390008Y0378382* +X0390385Y0378549* +X0390749Y0378743* +X0391098Y0378961* +X0391432Y0379204* +X0391747Y0379468* +X0392044Y0379755* +X039232Y0380061* +X0392574Y0380386* +X0392804Y0380728* +X039301Y0381085* +X0393191Y0381455* +X0393345Y0381838* +X0393473Y038223* +X0393572Y038263* +X0393644Y0383036* +X0393687Y0383446* +X0393701Y0383858* +Y0438976D02* +D01* +X0393686Y0439387* +X0393643Y0439797* +X0393571Y0440203* +X0393472Y0440603* +X0393344Y0440995* +X039319Y0441378* +X0393009Y0441748* +X0392803Y0442105* +X0392573Y0442447* +X0392319Y0442772* +X0392043Y0443078* +X0391746Y0443365* +X0391431Y0443629* +X0391097Y0443872* +X0390748Y044409* +X0390384Y0444284* +X0390007Y0444451* +X038962Y0444592* +X0389223Y0444706* +X038882Y0444792* +X0388412Y0444849* +X0388001Y0444878* +X0387588* +X0387177Y0444849* +X0386769Y0444792* +X0386366Y0444706* +X0385969Y0444592* +X0385582Y0444451* +X0385205Y0444284* +X0384842Y044409* +X0384492Y0443872* +X0384158Y0443629* +X0383843Y0443365* +X0383546Y0443078* +X038327Y0442772* +X0383016Y0442447* +X0382786Y0442105* +X038258Y0441748* +X0382399Y0441378* +X0382245Y0440995* +X0382117Y0440603* +X0382018Y0440203* +X0381946Y0439797* +X0381903Y0439387* +X038189Y0438976* +Y0462598D02* +D01* +X0381904Y0462186* +X0381947Y0461776* +X0382019Y046137* +X0382118Y046097* +X0382246Y0460578* +X03824Y0460195* +X0382581Y0459825* +X0382787Y0459468* +X0383017Y0459126* +X0383271Y0458801* +X0383547Y0458495* +X0383844Y0458208* +X0384159Y0457944* +X0384493Y0457701* +X0384843Y0457483* +X0385206Y0457289* +X0385583Y0457122* +X038597Y0456981* +X0386367Y0456867* +X038677Y0456781* +X0387178Y0456724* +X0387589Y0456695* +X0388002* +X0388413Y0456724* +X0388821Y0456781* +X0389224Y0456867* +X0389621Y0456981* +X0390008Y0457122* +X0390385Y0457289* +X0390749Y0457483* +X0391098Y0457701* +X0391432Y0457944* +X0391747Y0458208* +X0392044Y0458495* +X039232Y0458801* +X0392574Y0459126* +X0392804Y0459468* +X039301Y0459825* +X0393191Y0460195* +X0393345Y0460578* +X0393473Y046097* +X0393572Y046137* +X0393644Y0461776* +X0393687Y0462186* +X0393701Y0462598* +X038189Y0314961D02* +D01* +X0381904Y0314549* +X0381947Y0314139* +X0382019Y0313733* +X0382118Y0313333* +X0382246Y0312941* +X03824Y0312558* +X0382581Y0312188* +X0382787Y0311831* +X0383017Y0311489* +X0383271Y0311164* +X0383547Y0310858* +X0383844Y0310571* +X0384159Y0310307* +X0384493Y0310064* +X0384843Y0309846* +X0385206Y0309652* +X0385583Y0309485* +X038597Y0309344* +X0386367Y030923* +X038677Y0309144* +X0387178Y0309087* +X0387589Y0309058* +X0388002* +X0388413Y0309087* +X0388821Y0309144* +X0389224Y030923* +X0389621Y0309344* +X0390008Y0309485* +X0390385Y0309652* +X0390749Y0309846* +X0391098Y0310064* +X0391432Y0310307* +X0391747Y0310571* +X0392044Y0310858* +X039232Y0311164* +X0392574Y0311489* +X0392804Y0311831* +X039301Y0312188* +X0393191Y0312558* +X0393345Y0312941* +X0393473Y0313333* +X0393572Y0313733* +X0393644Y0314139* +X0393687Y0314549* +X0393701Y0314961* +Y0291339D02* +D01* +X0393686Y029175* +X0393643Y029216* +X0393571Y0292566* +X0393472Y0292966* +X0393344Y0293358* +X039319Y0293741* +X0393009Y0294111* +X0392803Y0294468* +X0392573Y029481* +X0392319Y0295135* +X0392043Y0295441* +X0391746Y0295728* +X0391431Y0295992* +X0391097Y0296235* +X0390748Y0296453* +X0390384Y0296647* +X0390007Y0296814* +X038962Y0296955* +X0389223Y0297069* +X038882Y0297155* +X0388412Y0297212* +X0388001Y0297241* +X0387588* +X0387177Y0297212* +X0386769Y0297155* +X0386366Y0297069* +X0385969Y0296955* +X0385582Y0296814* +X0385205Y0296647* +X0384842Y0296453* +X0384492Y0296235* +X0384158Y0295992* +X0383843Y0295728* +X0383546Y0295441* +X038327Y0295135* +X0383016Y029481* +X0382786Y0294468* +X038258Y0294111* +X0382399Y0293741* +X0382245Y0293358* +X0382117Y0292966* +X0382018Y0292566* +X0381946Y029216* +X0381903Y029175* +X0381889Y0291339* +X038189Y0291338* +X0531496Y0549213D02* +D01* +X0531481Y0549624* +X0531438Y0550034* +X0531366Y055044* +X0531267Y055084* +X0531139Y0551232* +X0530985Y0551615* +X0530804Y0551985* +X0530598Y0552342* +X0530368Y0552684* +X0530114Y0553009* +X0529838Y0553315* +X0529541Y0553602* +X0529226Y0553866* +X0528892Y0554109* +X0528543Y0554327* +X0528179Y0554521* +X0527802Y0554688* +X0527415Y0554829* +X0527018Y0554943* +X0526615Y0555029* +X0526207Y0555086* +X0525796Y0555115* +X0525383* +X0524972Y0555086* +X0524564Y0555029* +X0524161Y0554943* +X0523764Y0554829* +X0523377Y0554688* +X0523Y0554521* +X0522637Y0554327* +X0522287Y0554109* +X0521953Y0553866* +X0521638Y0553602* +X0521341Y0553315* +X0521065Y0553009* +X0520811Y0552684* +X0520581Y0552342* +X0520375Y0551985* +X0520194Y0551615* +X052004Y0551232* +X0519912Y055084* +X0519813Y055044* +X0519741Y0550034* +X0519698Y0549624* +X0519685Y0549213* +Y0543307D02* +D01* +X0519699Y0542895* +X0519742Y0542485* +X0519814Y0542079* +X0519913Y0541679* +X0520041Y0541287* +X0520195Y0540904* +X0520376Y0540534* +X0520582Y0540177* +X0520812Y0539835* +X0521066Y053951* +X0521342Y0539204* +X0521639Y0538917* +X0521954Y0538653* +X0522288Y053841* +X0522638Y0538192* +X0523001Y0537998* +X0523378Y0537831* +X0523765Y053769* +X0524162Y0537576* +X0524565Y053749* +X0524973Y0537433* +X0525384Y0537404* +X0525797* +X0526208Y0537433* +X0526616Y053749* +X0527019Y0537576* +X0527416Y053769* +X0527803Y0537831* +X052818Y0537998* +X0528544Y0538192* +X0528893Y053841* +X0529227Y0538653* +X0529542Y0538917* +X0529839Y0539204* +X0530115Y053951* +X0530369Y0539835* +X0530599Y0540177* +X0530805Y0540534* +X0530986Y0540904* +X053114Y0541287* +X0531268Y0541679* +X0531367Y0542079* +X0531439Y0542485* +X0531482Y0542895* +X0531496Y0543307* +X0519685Y0572835D02* +D01* +X0519699Y0572423* +X0519742Y0572013* +X0519814Y0571607* +X0519913Y0571207* +X0520041Y0570815* +X0520195Y0570432* +X0520376Y0570062* +X0520582Y0569705* +X0520812Y0569363* +X0521066Y0569038* +X0521342Y0568732* +X0521639Y0568445* +X0521954Y0568181* +X0522288Y0567938* +X0522638Y056772* +X0523001Y0567526* +X0523378Y0567359* +X0523765Y0567218* +X0524162Y0567104* +X0524565Y0567018* +X0524973Y0566961* +X0525384Y0566932* +X0525797* +X0526208Y0566961* +X0526616Y0567018* +X0527019Y0567104* +X0527416Y0567218* +X0527803Y0567359* +X052818Y0567526* +X0528544Y056772* +X0528893Y0567938* +X0529227Y0568181* +X0529542Y0568445* +X0529839Y0568732* +X0530115Y0569038* +X0530369Y0569363* +X0530599Y0569705* +X0530805Y0570062* +X0530986Y0570432* +X053114Y0570815* +X0531268Y0571207* +X0531367Y0571607* +X0531439Y0572013* +X0531482Y0572423* +X0531496Y0572835* +Y0519685D02* +D01* +X0531481Y0520096* +X0531438Y0520506* +X0531366Y0520912* +X0531267Y0521312* +X0531139Y0521704* +X0530985Y0522087* +X0530804Y0522457* +X0530598Y0522814* +X0530368Y0523156* +X0530114Y0523481* +X0529838Y0523787* +X0529541Y0524074* +X0529226Y0524338* +X0528892Y0524581* +X0528543Y0524799* +X0528179Y0524993* +X0527802Y052516* +X0527415Y0525301* +X0527018Y0525415* +X0526615Y0525501* +X0526207Y0525558* +X0525796Y0525587* +X0525383* +X0524972Y0525558* +X0524564Y0525501* +X0524161Y0525415* +X0523764Y0525301* +X0523377Y052516* +X0523Y0524993* +X0522637Y0524799* +X0522287Y0524581* +X0521953Y0524338* +X0521638Y0524074* +X0521341Y0523787* +X0521065Y0523481* +X0520811Y0523156* +X0520581Y0522814* +X0520375Y0522457* +X0520194Y0522087* +X052004Y0521704* +X0519912Y0521312* +X0519813Y0520912* +X0519741Y0520506* +X0519698Y0520096* +X0519685Y0519685* +X0511811Y05D02* +X0519685Y0507874D01* +X015187Y0458661D02* +Y0584646D01* +X0143996Y0450787D02* +X015187Y0458661D01* +X0126279Y0450787D02* +X0143996D01* +X0126279Y0403543D02* +Y0450787D01* +Y0403543D02* +X0143996D01* +X015187Y0395669* +Y0269685D02* +Y0395669D01* +Y0269685D02* +X038189D01* +X015187Y0584646D02* +X038189D01* +X0405512Y0579528D02* +X0413386Y0587402D01* +X0511811* +X0519685Y0579528* +X0413386Y05D02* +X0511811D01* +X0405512Y0507874D02* +X0413386Y05D01* +X0393701Y0279527D02* +X0403543Y0269685D01* +X0393701Y0478346D02* +X0403543Y0488189D01* +X0683071Y0269685D02* +X0692913Y0279527D01* +X0403543Y0269685D02* +X0683071D01* +X0692913Y0279527D02* +Y0600394D01* +X0683071Y0610236D02* +X0692913Y0600394D01* +X0541338Y0610236D02* +X0683071D01* +X0531496Y0600394D02* +X0541338Y0610236D01* +X0525591Y0488189D02* +X0531496Y0494095D01* +X0403543Y0488189D02* +X0525591D01* +X0387795Y0517717D02* +X0399606D01* +X0387795Y0529528D02* +X0399606D01* +X0387795Y0557087D02* +X0399606D01* +X0387795Y0568898D02* +X0399606D01* +M02* \ No newline at end of file diff --git a/hardware/gerber/unisolder52_full.gtl b/hardware/gerber/unisolder52_full.gtl new file mode 100644 index 0000000..50ec951 --- /dev/null +++ b/hardware/gerber/unisolder52_full.gtl @@ -0,0 +1,19374 @@ +%FSTAX25Y25*% +%MOIN*% +%SFA1B1*% + +%IPPOS*% +%AMD10* +4,1,8,0.021800,0.025600,-0.021800,0.025600,-0.029500,0.017900,-0.029500,-0.017900,-0.021800,-0.025600,0.021800,-0.025600,0.029500,-0.017900,0.029500,0.017900,0.021800,0.025600,0.0* +1,1,0.015360,0.021800,0.017900* +1,1,0.015360,-0.021800,0.017900* +1,1,0.015360,-0.021800,-0.017900* +1,1,0.015360,0.021800,-0.017900* +% +%AMD11* +4,1,8,-0.021700,0.010200,-0.021700,-0.010200,-0.019100,-0.012800,0.019100,-0.012800,0.021700,-0.010200,0.021700,0.010200,0.019100,0.012800,-0.019100,0.012800,-0.021700,0.010200,0.0* +1,1,0.005120,-0.019100,0.010200* +1,1,0.005120,-0.019100,-0.010200* +1,1,0.005120,0.019100,-0.010200* +1,1,0.005120,0.019100,0.010200* +% +%AMD12* +4,1,8,0.025600,-0.021800,0.025600,0.021800,0.017900,0.029500,-0.017900,0.029500,-0.025600,0.021800,-0.025600,-0.021800,-0.017900,-0.029500,0.017900,-0.029500,0.025600,-0.021800,0.0* +1,1,0.015360,0.017900,-0.021800* +1,1,0.015360,0.017900,0.021800* +1,1,0.015360,-0.017900,0.021800* +1,1,0.015360,-0.017900,-0.021800* +% +%AMD13* +4,1,8,0.005600,0.059100,-0.005600,0.059100,-0.008100,0.056600,-0.008100,-0.056600,-0.005600,-0.059100,0.005600,-0.059100,0.008100,-0.056600,0.008100,0.056600,0.005600,0.059100,0.0* +1,1,0.004840,0.005600,0.056600* +1,1,0.004840,-0.005600,0.056600* +1,1,0.004840,-0.005600,-0.056600* +1,1,0.004840,0.005600,-0.056600* +% +%AMD15* +4,1,8,0.035400,-0.040200,0.035400,0.040200,0.028300,0.047200,-0.028300,0.047200,-0.035400,0.040200,-0.035400,-0.040200,-0.028300,-0.047200,0.028300,-0.047200,0.035400,-0.040200,0.0* +1,1,0.014180,0.028300,-0.040200* +1,1,0.014180,0.028300,0.040200* +1,1,0.014180,-0.028300,0.040200* +1,1,0.014180,-0.028300,-0.040200* +% +%AMD16* +4,1,8,0.027800,0.025600,-0.027800,0.025600,-0.035400,0.017900,-0.035400,-0.017900,-0.027800,-0.025600,0.027800,-0.025600,0.035400,-0.017900,0.035400,0.017900,0.027800,0.025600,0.0* +1,1,0.015360,0.027800,0.017900* +1,1,0.015360,-0.027800,0.017900* +1,1,0.015360,-0.027800,-0.017900* +1,1,0.015360,0.027800,-0.017900* +% +%AMD17* +4,1,8,-0.012600,-0.017100,0.012600,-0.017100,0.017700,-0.012000,0.017700,0.012000,0.012600,0.017100,-0.012600,0.017100,-0.017700,0.012000,-0.017700,-0.012000,-0.012600,-0.017100,0.0* +1,1,0.010280,-0.012600,-0.012000* +1,1,0.010280,0.012600,-0.012000* +1,1,0.010280,0.012600,0.012000* +1,1,0.010280,-0.012600,0.012000* +% +%AMD18* +4,1,8,-0.017100,0.012600,-0.017100,-0.012600,-0.012000,-0.017700,0.012000,-0.017700,0.017100,-0.012600,0.017100,0.012600,0.012000,0.017700,-0.012000,0.017700,-0.017100,0.012600,0.0* +1,1,0.010280,-0.012000,0.012600* +1,1,0.010280,-0.012000,-0.012600* +1,1,0.010280,0.012000,-0.012600* +1,1,0.010280,0.012000,0.012600* +% +%AMD19* +4,1,8,-0.021000,-0.003200,-0.003200,-0.021000,0.004000,-0.021000,0.021000,-0.004000,0.021000,0.003200,0.003200,0.021000,-0.004000,0.021000,-0.021000,0.004000,-0.021000,-0.003200,0.0* +1,1,0.010280,-0.017400,0.000400* +1,1,0.010280,0.000400,-0.017400* +1,1,0.010280,0.017400,-0.000400* +1,1,0.010280,-0.000400,0.017400* +% +%AMD20* +4,1,4,0.025000,0.017000,0.017000,0.025000,-0.025000,-0.017000,-0.017000,-0.025000,0.025000,0.017000,0.0* +1,1,0.011420,0.021000,0.021000* +1,1,0.011420,-0.021000,-0.021000* +% +%AMD21* +4,1,4,0.017000,-0.025000,0.025000,-0.017000,-0.017000,0.025000,-0.025000,0.017000,0.017000,-0.025000,0.0* +1,1,0.011420,0.021000,-0.021000* +1,1,0.011420,-0.021000,0.021000* +% +%AMD23* +4,1,8,-0.037400,0.008300,-0.037400,-0.008300,-0.033900,-0.011800,0.033900,-0.011800,0.037400,-0.008300,0.037400,0.008300,0.033900,0.011800,-0.033900,0.011800,-0.037400,0.008300,0.0* +1,1,0.007080,-0.033900,0.008300* +1,1,0.007080,-0.033900,-0.008300* +1,1,0.007080,0.033900,-0.008300* +1,1,0.007080,0.033900,0.008300* +% +%AMD26* +4,1,8,0.008300,0.025600,-0.008300,0.025600,-0.011800,0.022000,-0.011800,-0.022000,-0.008300,-0.025600,0.008300,-0.025600,0.011800,-0.022000,0.011800,0.022000,0.008300,0.025600,0.0* +1,1,0.007080,0.008300,0.022000* +1,1,0.007080,-0.008300,0.022000* +1,1,0.007080,-0.008300,-0.022000* +1,1,0.007080,0.008300,-0.022000* +% +%AMD27* +4,1,8,-0.025600,0.008300,-0.025600,-0.008300,-0.022000,-0.011800,0.022000,-0.011800,0.025600,-0.008300,0.025600,0.008300,0.022000,0.011800,-0.022000,0.011800,-0.025600,0.008300,0.0* +1,1,0.007080,-0.022000,0.008300* +1,1,0.007080,-0.022000,-0.008300* +1,1,0.007080,0.022000,-0.008300* +1,1,0.007080,0.022000,0.008300* +% +%AMD28* +4,1,8,-0.020500,-0.039400,0.020500,-0.039400,0.025600,-0.034200,0.025600,0.034200,0.020500,0.039400,-0.020500,0.039400,-0.025600,0.034200,-0.025600,-0.034200,-0.020500,-0.039400,0.0* +1,1,0.010240,-0.020500,-0.034200* +1,1,0.010240,0.020500,-0.034200* +1,1,0.010240,0.020500,0.034200* +1,1,0.010240,-0.020500,0.034200* +% +%AMD29* +4,1,8,-0.031500,-0.039400,0.031500,-0.039400,0.039400,-0.031500,0.039400,0.031500,0.031500,0.039400,-0.031500,0.039400,-0.039400,0.031500,-0.039400,-0.031500,-0.031500,-0.039400,0.0* +1,1,0.015740,-0.031500,-0.031500* +1,1,0.015740,0.031500,-0.031500* +1,1,0.015740,0.031500,0.031500* +1,1,0.015740,-0.031500,0.031500* +% +%AMD32* +4,1,8,-0.008300,-0.037400,0.008300,-0.037400,0.011800,-0.033900,0.011800,0.033900,0.008300,0.037400,-0.008300,0.037400,-0.011800,0.033900,-0.011800,-0.033900,-0.008300,-0.037400,0.0* +1,1,0.007080,-0.008300,-0.033900* +1,1,0.007080,0.008300,-0.033900* +1,1,0.007080,0.008300,0.033900* +1,1,0.007080,-0.008300,0.033900* +% +%AMD33* +4,1,8,0.026100,0.024600,-0.026100,0.024600,-0.033500,0.017200,-0.033500,-0.017200,-0.026100,-0.024600,0.026100,-0.024600,0.033500,-0.017200,0.033500,0.017200,0.026100,0.024600,0.0* +1,1,0.014760,0.026100,0.017200* +1,1,0.014760,-0.026100,0.017200* +1,1,0.014760,-0.026100,-0.017200* +1,1,0.014760,0.026100,-0.017200* +% +%AMD34* +4,1,8,0.002700,-0.033500,0.033500,-0.002700,0.033500,0.008200,0.008200,0.033500,-0.002700,0.033500,-0.033500,0.002700,-0.033500,-0.008200,-0.008200,-0.033500,0.002700,-0.033500,0.0* +1,1,0.015360,-0.002800,-0.028100* +1,1,0.015360,0.028100,0.002800* +1,1,0.015360,0.002800,0.028100* +1,1,0.015360,-0.028100,-0.002800* +% +%AMD35* +4,1,8,0.020800,0.029100,-0.020800,0.029100,-0.029500,0.020400,-0.029500,-0.020400,-0.020800,-0.029100,0.020800,-0.029100,0.029500,-0.020400,0.029500,0.020400,0.020800,0.029100,0.0* +1,1,0.017480,0.020800,0.020400* +1,1,0.017480,-0.020800,0.020400* +1,1,0.017480,-0.020800,-0.020400* +1,1,0.017480,0.020800,-0.020400* +% +%AMD36* +4,1,8,-0.048400,-0.053100,0.048400,-0.053100,0.059100,-0.042500,0.059100,0.042500,0.048400,0.053100,-0.048400,0.053100,-0.059100,0.042500,-0.059100,-0.042500,-0.048400,-0.053100,0.0* +1,1,0.021260,-0.048400,-0.042500* +1,1,0.021260,0.048400,-0.042500* +1,1,0.021260,0.048400,0.042500* +1,1,0.021260,-0.048400,0.042500* +% +%AMD39* +4,1,8,0.056300,0.035400,-0.056300,0.035400,-0.066900,0.024800,-0.066900,-0.024800,-0.056300,-0.035400,0.056300,-0.035400,0.066900,-0.024800,0.066900,0.024800,0.056300,0.035400,0.0* +1,1,0.021260,0.056300,0.024800* +1,1,0.021260,-0.056300,0.024800* +1,1,0.021260,-0.056300,-0.024800* +1,1,0.021260,0.056300,-0.024800* +% +%AMD40* +4,1,8,0.016100,0.009000,-0.016100,0.009000,-0.017000,0.008100,-0.017000,-0.008100,-0.016100,-0.009000,0.016100,-0.009000,0.017000,-0.008100,0.017000,0.008100,0.016100,0.009000,0.0* +1,1,0.001800,0.016100,0.008100* +1,1,0.001800,-0.016100,0.008100* +1,1,0.001800,-0.016100,-0.008100* +1,1,0.001800,0.016100,-0.008100* +% +%AMD41* +4,1,8,-0.024600,0.026100,-0.024600,-0.026100,-0.017200,-0.033500,0.017200,-0.033500,0.024600,-0.026100,0.024600,0.026100,0.017200,0.033500,-0.017200,0.033500,-0.024600,0.026100,0.0* +1,1,0.014760,-0.017200,0.026100* +1,1,0.014760,-0.017200,-0.026100* +1,1,0.014760,0.017200,-0.026100* +1,1,0.014760,0.017200,0.026100* +% +%AMD42* +4,1,8,-0.145700,0.102900,-0.145700,-0.102900,-0.140300,-0.108300,0.140300,-0.108300,0.145700,-0.102900,0.145700,0.102900,0.140300,0.108300,-0.140300,0.108300,-0.145700,0.102900,0.0* +1,1,0.010820,-0.140300,0.102900* +1,1,0.010820,-0.140300,-0.102900* +1,1,0.010820,0.140300,-0.102900* +1,1,0.010820,0.140300,0.102900* +% +%AMD43* +4,1,8,-0.037400,0.015000,-0.037400,-0.015000,-0.033700,-0.018700,0.033700,-0.018700,0.037400,-0.015000,0.037400,0.015000,0.033700,0.018700,-0.033700,0.018700,-0.037400,0.015000,0.0* +1,1,0.007480,-0.033700,0.015000* +1,1,0.007480,-0.033700,-0.015000* +1,1,0.007480,0.033700,-0.015000* +1,1,0.007480,0.033700,0.015000* +% +%AMD44* +4,1,8,-0.029400,-0.084100,0.029400,-0.084100,0.032700,-0.080800,0.032700,0.080800,0.029400,0.084100,-0.029400,0.084100,-0.032700,0.080800,-0.032700,-0.080800,-0.029400,-0.084100,0.0* +1,1,0.006540,-0.029400,-0.080800* +1,1,0.006540,0.029400,-0.080800* +1,1,0.006540,0.029400,0.080800* +1,1,0.006540,-0.029400,0.080800* +% +%AMD45* +4,1,8,-0.142000,-0.084100,0.142000,-0.084100,0.150400,-0.075600,0.150400,0.075600,0.142000,0.084100,-0.142000,0.084100,-0.150400,0.075600,-0.150400,-0.075600,-0.142000,-0.084100,0.0* +1,1,0.016820,-0.142000,-0.075600* +1,1,0.016820,0.142000,-0.075600* +1,1,0.016820,0.142000,0.075600* +1,1,0.016820,-0.142000,0.075600* +% +%AMD46* +4,1,8,0.040200,0.035400,-0.040200,0.035400,-0.047200,0.028300,-0.047200,-0.028300,-0.040200,-0.035400,0.040200,-0.035400,0.047200,-0.028300,0.047200,0.028300,0.040200,0.035400,0.0* +1,1,0.014180,0.040200,0.028300* +1,1,0.014180,-0.040200,0.028300* +1,1,0.014180,-0.040200,-0.028300* +1,1,0.014180,0.040200,-0.028300* +% +%AMD47* +4,1,8,-0.006900,-0.026600,0.006900,-0.026600,0.013800,-0.019700,0.013800,0.019700,0.006900,0.026600,-0.006900,0.026600,-0.013800,0.019700,-0.013800,-0.019700,-0.006900,-0.026600,0.0* +1,1,0.013780,-0.006900,-0.019700* +1,1,0.013780,0.006900,-0.019700* +1,1,0.013780,0.006900,0.019700* +1,1,0.013780,-0.006900,0.019700* +% +%AMD48* +4,1,8,-0.006900,-0.040400,0.006900,-0.040400,0.013800,-0.033500,0.013800,0.033500,0.006900,0.040400,-0.006900,0.040400,-0.013800,0.033500,-0.013800,-0.033500,-0.006900,-0.040400,0.0* +1,1,0.013780,-0.006900,-0.033500* +1,1,0.013780,0.006900,-0.033500* +1,1,0.013780,0.006900,0.033500* +1,1,0.013780,-0.006900,0.033500* +% +%AMD49* +4,1,8,-0.018700,-0.065000,0.018700,-0.065000,0.037400,-0.046300,0.037400,0.046300,0.018700,0.065000,-0.018700,0.065000,-0.037400,0.046300,-0.037400,-0.046300,-0.018700,-0.065000,0.0* +1,1,0.037400,-0.018700,-0.046300* +1,1,0.037400,0.018700,-0.046300* +1,1,0.037400,0.018700,0.046300* +1,1,0.037400,-0.018700,0.046300* +% +%AMD50* +4,1,8,0.052000,0.060000,-0.052000,0.060000,-0.064000,0.048000,-0.064000,-0.048000,-0.052000,-0.060000,0.052000,-0.060000,0.064000,-0.048000,0.064000,0.048000,0.052000,0.060000,0.0* +1,1,0.024000,0.052000,0.048000* +1,1,0.024000,-0.052000,0.048000* +1,1,0.024000,-0.052000,-0.048000* +1,1,0.024000,0.052000,-0.048000* +% +%AMD51* +4,1,8,0.025600,-0.027800,0.025600,0.027800,0.017900,0.035400,-0.017900,0.035400,-0.025600,0.027800,-0.025600,-0.027800,-0.017900,-0.035400,0.017900,-0.035400,0.025600,-0.027800,0.0* +1,1,0.015360,0.017900,-0.027800* +1,1,0.015360,0.017900,0.027800* +1,1,0.015360,-0.017900,0.027800* +1,1,0.015360,-0.017900,-0.027800* +% +%AMD52* +4,1,8,-0.067500,0.103500,-0.067500,-0.103500,-0.060700,-0.110200,0.060700,-0.110200,0.067500,-0.103500,0.067500,0.103500,0.060700,0.110200,-0.060700,0.110200,-0.067500,0.103500,0.0* +1,1,0.013500,-0.060700,0.103500* +1,1,0.013500,-0.060700,-0.103500* +1,1,0.013500,0.060700,-0.103500* +1,1,0.013500,0.060700,0.103500* +% +%AMD53* +4,1,8,0.104700,0.147600,-0.104700,0.147600,-0.110200,0.142100,-0.110200,-0.142100,-0.104700,-0.147600,0.104700,-0.147600,0.110200,-0.142100,0.110200,0.142100,0.104700,0.147600,0.0* +1,1,0.011020,0.104700,0.142100* +1,1,0.011020,-0.104700,0.142100* +1,1,0.011020,-0.104700,-0.142100* +1,1,0.011020,0.104700,-0.142100* +% +%AMD54* +4,1,8,0.013800,0.045000,-0.013800,0.045000,-0.019700,0.039100,-0.019700,-0.039100,-0.013800,-0.045000,0.013800,-0.045000,0.019700,-0.039100,0.019700,0.039100,0.013800,0.045000,0.0* +1,1,0.011820,0.013800,0.039100* +1,1,0.011820,-0.013800,0.039100* +1,1,0.011820,-0.013800,-0.039100* +1,1,0.011820,0.013800,-0.039100* +% +%AMD55* +4,1,8,0.045300,-0.036200,0.045300,0.036200,0.036200,0.045300,-0.036200,0.045300,-0.045300,0.036200,-0.045300,-0.036200,-0.036200,-0.045300,0.036200,-0.045300,0.045300,-0.036200,0.0* +1,1,0.018120,0.036200,-0.036200* +1,1,0.018120,0.036200,0.036200* +1,1,0.018120,-0.036200,0.036200* +1,1,0.018120,-0.036200,-0.036200* +% +%AMD88* +4,1,8,-0.029500,0.020700,-0.029500,-0.020700,-0.020700,-0.029500,0.020700,-0.029500,0.029500,-0.020700,0.029500,0.020700,0.020700,0.029500,-0.020700,0.029500,-0.029500,0.020700,0.0* +1,1,0.017720,-0.020700,0.020700* +1,1,0.017720,-0.020700,-0.020700* +1,1,0.017720,0.020700,-0.020700* +1,1,0.017720,0.020700,0.020700* +% +%AMD93* +4,1,8,0.042600,0.007500,0.007500,0.042600,-0.007500,0.042600,-0.042600,0.007500,-0.042600,-0.007500,-0.007500,-0.042600,0.007500,-0.042600,0.042600,-0.007500,0.042600,0.007500,0.0* +1,1,0.021260,0.035100,0.000000* +1,1,0.021260,0.000000,0.035100* +1,1,0.021260,-0.035100,0.000000* +1,1,0.021260,0.000000,-0.035100* +% +%AMD101* +4,1,8,0.025500,0.036400,-0.025500,0.036400,-0.036400,0.025500,-0.036400,-0.025500,-0.025500,-0.036400,0.025500,-0.036400,0.036400,-0.025500,0.036400,0.025500,0.025500,0.036400,0.0* +1,1,0.021860,0.025500,0.025500* +1,1,0.021860,-0.025500,0.025500* +1,1,0.021860,-0.025500,-0.025500* +1,1,0.021860,0.025500,-0.025500* +% +%AMD102* +4,1,8,-0.017500,-0.035000,0.017500,-0.035000,0.035000,-0.017500,0.035000,0.017500,0.017500,0.035000,-0.017500,0.035000,-0.035000,0.017500,-0.035000,-0.017500,-0.017500,-0.035000,0.0* +1,1,0.035000,-0.017500,-0.017500* +1,1,0.035000,0.017500,-0.017500* +1,1,0.035000,0.017500,0.017500* +1,1,0.035000,-0.017500,0.017500* +% +%AMD104* +4,1,8,0.055100,-0.038600,0.055100,0.038600,0.038600,0.055100,-0.038600,0.055100,-0.055100,0.038600,-0.055100,-0.038600,-0.038600,-0.055100,0.038600,-0.055100,0.055100,-0.038600,0.0* +1,1,0.033080,0.038600,-0.038600* +1,1,0.033080,0.038600,0.038600* +1,1,0.033080,-0.038600,0.038600* +1,1,0.033080,-0.038600,-0.038600* +% +%AMD108* +4,1,8,0.043800,0.007700,0.007700,0.043800,-0.007700,0.043800,-0.043800,0.007700,-0.043800,-0.007700,-0.007700,-0.043800,0.007700,-0.043800,0.043800,-0.007700,0.043800,0.007700,0.0* +1,1,0.021860,0.036100,0.000000* +1,1,0.021860,0.000000,0.036100* +1,1,0.021860,-0.036100,0.000000* +1,1,0.021860,0.000000,-0.036100* +% +%AMD109* +4,1,8,-0.068900,0.055100,-0.068900,-0.055100,-0.055100,-0.068900,0.055100,-0.068900,0.068900,-0.055100,0.068900,0.055100,0.055100,0.068900,-0.055100,0.068900,-0.068900,0.055100,0.0* +1,1,0.027560,-0.055100,0.055100* +1,1,0.027560,-0.055100,-0.055100* +1,1,0.027560,0.055100,-0.055100* +1,1,0.027560,0.055100,0.055100* +% +G04~CAMADD=10~8~0.0~0.0~590.6~511.8~76.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~590.6~511.8* +%ADD10D10*% +G04~CAMADD=11~8~0.0~0.0~255.9~433.1~25.6~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~434.0~256.0* +%ADD11D11*% +G04~CAMADD=12~8~0.0~0.0~590.6~511.8~76.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~512.0~590.0* +%ADD12D12*% +G04~CAMADD=13~8~0.0~0.0~161.4~1181.1~24.2~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~161.4~1181.1* +%ADD13D13*% +%ADD14R,0.035430X0.098430*% +G04~CAMADD=15~8~0.0~0.0~944.9~708.7~70.9~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~708.0~944.0* +%ADD15D15*% +G04~CAMADD=16~8~0.0~0.0~708.7~511.8~76.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~708.7~511.8* +%ADD16D16*% +G04~CAMADD=17~8~0.0~0.0~354.3~342.5~51.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~354.0~343.0* +%ADD17D17*% +G04~CAMADD=18~8~0.0~0.0~354.3~342.5~51.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~343.0~354.0* +%ADD18D18*% +G04~CAMADD=19~8~0.0~0.0~354.3~342.5~51.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~135.0~450.0~450.0* +%ADD19D19*% +G04~CAMADD=20~3~0.0~0.0~114.2~708.7~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~315.0~534.0~534.0* +%ADD20D20*% +G04~CAMADD=21~3~0.0~0.0~114.2~708.7~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~225.0~534.0~534.0* +%ADD21D21*% +%ADD22O,0.023620X0.074800*% +G04~CAMADD=23~8~0.0~0.0~236.2~748.0~35.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~748.0~236.0* +%ADD23D23*% +%ADD24O,0.074800X0.023620*% +%ADD25O,0.013780X0.066930*% +G04~CAMADD=26~8~0.0~0.0~236.2~511.8~35.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~236.2~511.8* +%ADD26D26*% +G04~CAMADD=27~8~0.0~0.0~236.2~511.8~35.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~512.0~236.0* +%ADD27D27*% +G04~CAMADD=28~8~0.0~0.0~511.8~787.4~51.2~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~512.0~788.0* +%ADD28D28*% +G04~CAMADD=29~8~0.0~0.0~787.4~787.4~78.7~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~788.0~788.0* +%ADD29D29*% +%ADD30O,0.066930X0.013780*% +%ADD31O,0.023620X0.086610*% +G04~CAMADD=32~8~0.0~0.0~236.2~748.0~35.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~236.0~748.0* +%ADD32D32*% +G04~CAMADD=33~8~0.0~0.0~669.3~492.1~73.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~669.3~492.1* +%ADD33D33*% +G04~CAMADD=34~8~0.0~0.0~590.6~511.8~76.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~225.0~717.0~715.0* +%ADD34D34*% +G04~CAMADD=35~8~0.0~0.0~590.6~582.7~87.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~590.6~582.7* +%ADD35D35*% +G04~CAMADD=36~8~0.0~0.0~1181.1~1063.0~106.3~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~1182.0~1063.0* +%ADD36D36*% +%ADD37O,0.066930X0.016000*% +%ADD38O,0.023620X0.078740*% +G04~CAMADD=39~8~0.0~0.0~1338.6~708.7~106.3~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~1338.6~708.7* +%ADD39D39*% +G04~CAMADD=40~8~0.0~0.0~340.0~180.0~9.0~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~340.0~180.0* +%ADD40D40*% +G04~CAMADD=41~8~0.0~0.0~669.3~492.1~73.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~492.0~670.0* +%ADD41D41*% +G04~CAMADD=42~8~0.0~0.0~2165.4~2913.4~54.1~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~2914.0~2166.0* +%ADD42D42*% +G04~CAMADD=43~8~0.0~0.0~374.0~748.0~37.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~748.0~374.0* +%ADD43D43*% +G04~CAMADD=44~8~0.0~0.0~653.5~1681.1~32.7~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~654.0~1682.0* +%ADD44D44*% +G04~CAMADD=45~8~0.0~0.0~3007.9~1681.1~84.1~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~3008.0~1681.0* +%ADD45D45*% +G04~CAMADD=46~8~0.0~0.0~944.9~708.7~70.9~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~944.9~708.7* +%ADD46D46*% +G04~CAMADD=47~8~0.0~0.0~275.6~531.5~68.9~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~276.0~532.0* +%ADD47D47*% +G04~CAMADD=48~8~0.0~0.0~275.6~808.7~68.9~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~276.0~809.0* +%ADD48D48*% +G04~CAMADD=49~8~0.0~0.0~748.0~1299.2~187.0~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~749.0~1300.0* +%ADD49D49*% +G04~CAMADD=50~8~0.0~0.0~1279.5~1200.0~120.0~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~1279.5~1200.0* +%ADD50D50*% +G04~CAMADD=51~8~0.0~0.0~708.7~511.8~76.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~512.0~708.0* +%ADD51D51*% +G04~CAMADD=52~8~0.0~0.0~2204.7~1350.0~67.5~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~1350.0~2204.0* +%ADD52D52*% +G04~CAMADD=53~8~0.0~0.0~2204.7~2952.8~55.1~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~2204.7~2952.8* +%ADD53D53*% +G04~CAMADD=54~8~0.0~0.0~393.7~900.0~59.1~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~393.7~900.0* +%ADD54D54*% +G04~CAMADD=55~8~0.0~0.0~905.5~905.5~90.6~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~906.0~906.0* +%ADD55D55*% +%ADD56C,0.025000*% +%ADD57C,0.020000*% +%ADD58C,0.012000*% +%ADD59C,0.050000*% +%ADD60C,0.016000*% +%ADD61C,0.035000*% +%ADD62C,0.022000*% +%ADD63C,0.014000*% +%ADD64C,0.015000*% +%ADD65C,0.010000*% +%ADD66C,0.052000*% +%ADD67C,0.032000*% +%ADD68C,0.011000*% +%ADD69C,0.030000*% +%ADD70C,0.018000*% +%ADD71C,0.019000*% +%ADD72C,0.023000*% +%ADD73C,0.034000*% +%ADD74C,0.048000*% +%ADD75C,0.100000*% +%ADD76C,0.110240*% +%ADD77C,0.046000*% +%ADD78C,0.200000*% +%ADD79C,0.040000*% +%ADD80C,0.220000*% +%ADD81C,0.160000*% +%ADD82R,0.246060X0.167320*% +%ADD83R,0.275590X0.029530*% +%ADD84R,0.494090X0.587010*% +%ADD85R,0.107000X0.103000*% +%ADD86R,0.121940X0.045280*% +%ADD87C,0.059060*% +G04~CAMADD=88~8~0.0~0.0~590.6~590.6~88.6~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~590.0~590.0* +%ADD88D88*% +%ADD89O,0.051180X0.043310*% +%ADD90O,0.196850X0.104330*% +%ADD91C,0.255900*% +%ADD92C,0.236220*% +G04~CAMADD=93~8~0.0~0.0~708.7~708.7~106.3~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~315.0~914.0~913.0* +%ADD93D93*% +%ADD94C,0.070870*% +%ADD95R,0.059060X0.059060*% +%ADD96O,0.118110X0.078740*% +%ADD97R,0.059060X0.059060*% +%ADD98C,0.078740*% +%ADD99C,0.055120*% +%ADD100C,0.072840*% +G04~CAMADD=101~8~0.0~0.0~728.4~728.4~109.3~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~728.4~728.4* +%ADD101D101*% +G04~CAMADD=102~8~0.0~0.0~700.0~700.0~175.0~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~700.0~700.0* +%ADD102D102*% +%ADD103C,0.070000*% +G04~CAMADD=104~8~0.0~0.0~1102.4~1102.4~165.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~1102.0~1102.0* +%ADD104D104*% +%ADD105C,0.110240*% +%ADD106C,0.059060*% +%ADD107C,0.314000*% +G04~CAMADD=108~8~0.0~0.0~728.4~728.4~109.3~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~315.0~940.0~939.0* +%ADD108D108*% +G04~CAMADD=109~8~0.0~0.0~1378.0~1378.0~137.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~1378.0~1378.0* +%ADD109D109*% +%ADD110O,0.078740X0.118110*% +%ADD111C,0.125200*% +%ADD112C,0.050000*% +%LNunisolder52_full-1*% +%LPD*% +G36* +X0517717Y0578346D02* +Y0523002D01* +X0517216Y0522851* +X0517186Y0522897* +X0516634Y0523265* +X0515983Y0523395* +X0514548* +Y0519903* +X0513798* +Y0519153* +X0509913* +Y0518112* +X0510042Y0517461* +X0510411Y0516909* +X0510963Y0516541* +X0511613Y0516411* +Y0515914* +X0510963Y0515785* +X0510411Y0515416* +X0510042Y0514865* +X0509913Y0514214* +Y0510632* +X0510004Y0510174* +X0506717Y0506888* +X0506172Y0506178* +X050583Y050535* +X0505713Y0504463* +X050583Y0503575* +X0506172Y0502748* +X0506387Y0502468* +X0506141Y0501968* +X0491708* +X0491462Y0502468* +X049176Y0502857* +X0492102Y0503684* +X0492219Y0504572* +X0492102Y0505459* +X049176Y0506286* +X0491582Y0506518* +X0491803Y0506966* +X0492111* +X0492556Y0507055* +X0492924Y0507301* +X0493291Y0507055* +X0493737Y0506966* +X0494867* +X0495312Y0507055* +X049568Y0507301* +X0496047Y0507055* +X0496492Y0506966* +X0497622* +X0498068Y0507055* +X0498435Y0507301* +X0498803Y0507055* +X0499248Y0506966* +X0500378* +X0500824Y0507055* +X0501191Y0507301* +X0501559Y0507055* +X0501819Y0507003* +Y0513794* +X0502569* +Y0514544* +X0504299* +Y0519458* +X0504211Y0519898* +X0504636Y0520182* +X0511033Y0526579* +X0511364Y0527075* +X0511481Y052766* +Y0534894* +X0514882* +X0515533Y0535023* +X0516084Y0535392* +X0516453Y0535944* +X0516582Y0536594* +Y0540177* +X0516453Y0540828* +X0516084Y0541379* +X0515533Y0541748* +X0514882Y0541878* +Y0542374* +X0515533Y0542504* +X0516084Y0542872* +X0516453Y0543424* +X0516582Y0544075* +Y0547657* +X0516453Y0548308* +X0516084Y054886* +X0515533Y0549228* +X0514882Y0549358* +X0510512* +X0509861Y0549228* +X0509309Y054886* +X0508771Y0548953* +X0507081Y0550644* +X0507252Y0551057* +X0507384Y0552063* +X0507252Y0553069* +X0506864Y0554006* +X0506246Y0554811* +X0505441Y0555428* +X0504504Y0555817* +X0503498Y0555949* +X0502493Y0555817* +X0501555Y0555428* +X0500751Y0554811* +X0500133Y0554006* +X0499745Y0553069* +X0499612Y0552063* +X0499745Y0551057* +X0500133Y055012* +X0500751Y0549315* +X0501555Y0548698* +X0502493Y0548309* +X0503498Y0548177* +X0504504Y0548309* +X0504918Y0548481* +X0506422Y0546977* +Y0545306* +X0505922Y054506* +X0505441Y0545428* +X0504504Y0545817* +X0503498Y0545949* +X0502493Y0545817* +X0501555Y0545428* +X0500751Y0544811* +X0500133Y0544006* +X0499745Y0543069* +X0499612Y0542063* +X0499745Y0541057* +X0500133Y054012* +X0500668Y0539423* +X0497964Y0536719* +X0497633Y0536222* +X0497516Y0535637* +Y0531175* +X0495134Y0528793* +X047957* +X0478985Y0528677* +X0478488Y0528345* +X0476873Y0526729* +X0469311* +X0468726Y0526613* +X0468229Y0526281* +X0462905Y0520957* +X0462574Y0520461* +X0462436Y0520404* +X0462241Y0520534* +X0461981Y0520585* +Y0513794* +Y0507003* +X0462241Y0507055* +X0462609Y0507301* +X0462976Y0507055* +X0463422Y0506966* +X0464552* +X0464997Y0507055* +X0465365Y0507301* +X0465732Y0507055* +X0466178Y0506966* +X0467307* +X0467753Y0507055* +X046812Y0507301* +X0468488Y0507055* +X0468933Y0506966* +X0470063* +X0470509Y0507055* +X0470876Y0507301* +X0471244Y0507055* +X0471504Y0507003* +Y0513794* +X0473004* +Y0507003* +X0473265Y0507055* +X0473632Y0507301* +X0474Y0507055* +X047426Y0507003* +Y0513794* +X047576* +Y0507003* +X0476021Y0507055* +X0476388Y0507301* +X0476756Y0507055* +X0477016Y0507003* +Y0513794* +X0478516* +Y0507003* +X0478777Y0507055* +X0479144Y0507301* +X0479511Y0507055* +X0479957Y0506966* +X0481087* +X0481533Y0507055* +X04819Y0507301* +X0482267Y0507055* +X0482528Y0507003* +Y0513794* +X0484028* +Y0507003* +X0484289Y0507055* +X0484656Y0507301* +X0485023Y0507055* +X0485469Y0506966* +X0485777* +X0485998Y0506518* +X048582Y0506286* +X0485477Y0505459* +X048536Y0504572* +X0485477Y0503684* +X048582Y0502857* +X0486118Y0502468* +X0485871Y0501968* +X0414173* +X0407705Y0508437* +X0407727Y0508906* +X0408247Y0508825* +X0408311Y0508729* +X0408863Y050836* +X0409513Y0508231* +X0413883* +X0414534Y050836* +X041485Y0508571* +X0418684Y0504737* +X0419246Y0504362* +X0419909Y050423* +X0426898* +X0427562Y0504362* +X0428124Y0504737* +X0429386Y0505999* +X0429761Y0506561* +X0429767Y0506592* +X0430351Y0506966* +X0431481* +X0431926Y0507055* +X0432294Y0507301* +X0432661Y0507055* +X0433107Y0506966* +X0434237* +X0434682Y0507055* +X043505Y0507301* +X0435417Y0507055* +X0435677Y0507003* +Y0513794* +Y0520607* +X0435201Y0520945* +Y0522704* +X043699Y0524492* +X0441094* +X0441745Y0524622* +X0442297Y052499* +X0442665Y0525542* +X0442795Y0526193* +Y0527348* +X0443257Y0527539* +X0449718Y0521078* +X0449496Y0520593* +X0449196Y0520534* +X0448829Y0520288* +X0448462Y0520534* +X0448201Y0520585* +Y0513794* +Y0507003* +X0448462Y0507055* +X0448829Y0507301* +X0449196Y0507055* +X0449642Y0506966* +X0450772* +X0451218Y0507055* +X0451585Y0507301* +X0451952Y0507055* +X0452398Y0506966* +X0453528* +X0453974Y0507055* +X0454341Y0507301* +X0454708Y0507055* +X0455154Y0506966* +X0456284* +X045673Y0507055* +X0457097Y0507301* +X0457464Y0507055* +X0457725Y0507003* +Y0513794* +Y0520585* +X0457624Y0520565* +X0457132Y0520654* +X04568Y052115* +X0446891Y0531059* +Y0533982* +X0447392Y0534352* +X0447724Y0534286* +X0449159* +Y0537778* +X0450659* +Y0534286* +X0452094* +X0452745Y0534415* +X0453297Y0534784* +X0453792Y0534625* +Y0533444* +X0453921Y0532794* +X045429Y0532242* +X0454841Y0531874* +X0455492Y0531744* +X0457518* +Y0535236* +X0459018* +Y0531744* +X0461043* +X0461694Y0531874* +X0462246Y0532242* +X0462536Y0532677* +X046295Y0532743* +X0463109Y0532719* +X046322Y0532553* +X0463772Y0532184* +X0464423Y0532055* +X0468793* +X0469444Y0532184* +X0469995Y0532553* +X0470222Y0532892* +X0470791Y0532884* +X0471022Y0532538* +X0471574Y0532169* +X0472224Y053204* +X0476594* +X0477245Y0532169* +X0477797Y0532538* +X0478165Y0533089* +X0478295Y053374* +Y0537323* +X0478165Y0537973* +X0477797Y0538525* +X0477245Y0538894* +X0476594Y0539023* +Y053952* +X0477245Y0539649* +X0477797Y0540018* +X04778Y0540022* +X04783Y0539871* +Y0539449* +X0478429Y0538798* +X0478798Y0538246* +X0479349Y0537878* +X048Y0537748* +X0483583* +X0484233Y0537878* +X0484785Y0538246* +X0485154Y0538798* +X0485283Y0539449* +X048578* +X0485909Y0538798* +X0486278Y0538246* +X048683Y0537878* +X048748Y0537748* +X0488522* +Y0541634* +Y0545519* +X048748* +X048683Y054539* +X0486278Y0545021* +X0485909Y0544469* +X048578Y0543819* +X0485283* +X0485154Y0544469* +X0484785Y0545021* +X0484233Y054539* +X0483583Y0545519* +X048* +X0479349Y054539* +X0478798Y0545021* +X047877Y0544979* +X0478249Y0545033* +X0478165Y0545454* +X0477797Y0546005* +X0477245Y0546374* +X0476594Y0546503* +X0472224* +X0471574Y0546374* +X0471022Y0546005* +X0470795Y0545666* +X0470226Y0545675* +X0469995Y054602* +X0469444Y0546389* +X0468793Y0546518* +X0468611* +Y0550598* +X0469034Y0550682* +X0469417Y0550938* +X0469672Y055132* +X0469762Y0551771* +Y0553818* +X0469672Y0554269* +X0469417Y0554651* +Y0554678* +X0469672Y055506* +X0469762Y0555511* +Y0555785* +X0463586* +Y0555511* +X0463676Y055506* +X0463931Y0554678* +Y0554651* +X0463676Y0554269* +X0463586Y0553818* +Y0551771* +X0463676Y055132* +X0463931Y0550938* +X0464314Y0550682* +X0464737Y0550598* +Y0546518* +X0464423* +X0463772Y0546389* +X0463244Y0546036* +X0463111Y0546063* +X0462744Y0546207* +Y0548445* +X0462614Y0549095* +X0462246Y0549647* +X0461694Y0550015* +X0461043Y0550145* +X0456998* +Y0553053* +X0457008* +X0457636Y0553178* +X0458168Y0553534* +X0458523Y0554066* +X0458648Y0554694* +Y0562725* +X0458523Y0563353* +X0458168Y0563885* +X0457636Y056424* +X0457008Y0564365* +X0451339* +X0450711Y056424* +X0450179Y0563885* +X0449823Y0563353* +X0449698Y0562725* +Y0561402* +X0446162* +X0445274Y0561285* +X0444447Y0560942* +X0443737Y0560397* +X0443192Y0559687* +X0442849Y055886* +X0442732Y0557972* +X0442849Y0557085* +X0443192Y0556258* +X0443737Y0555548* +X0444447Y0555002* +X0445274Y055466* +X0446162Y0554543* +X0449728* +X0449823Y0554066* +X0450139Y0553593* +Y054875* +X0447724* +X0447074Y054862* +X0446522Y0548252* +X0446153Y05477* +X0446024Y0547049* +Y0543467* +X0446153Y0542816* +X0446522Y0542264* +X0447074Y0541896* +X0447724Y0541766* +Y0541269* +X0447074Y054114* +X0446735Y0540913* +X0446444Y0541349* +X0432228Y0555565* +Y0565663* +X0432111Y0566248* +X043178Y0566744* +X0426074Y057245* +X0425649Y0572734* +X0425552Y0573469* +X0425164Y0574406* +X0424546Y0575211* +X0423741Y0575828* +X0422804Y0576217* +X0421798Y0576349* +X0420793Y0576217* +X0419855Y0575828* +X0419051Y0575211* +X0418433Y0574406* +X0418045Y0573469* +X0417912Y0572463* +X0418045Y0571457* +X0418433Y057052* +X0419051Y0569715* +X0419855Y0569098* +X0420793Y0568709* +X0421798Y0568577* +X0422804Y0568709* +X0423741Y0569098* +X0424511Y0569688* +X0429169Y0565029* +Y0556449* +X0428707Y0556257* +X042642Y0558544* +X0425924Y0558876* +X0425339Y0558992* +X0424426* +X0424256Y0559492* +X0424546Y0559715* +X0425164Y056052* +X0425552Y0561457* +X0425684Y0562463* +X0425552Y0563469* +X0425164Y0564406* +X0424546Y0565211* +X0423741Y0565828* +X0422804Y0566217* +X0421798Y0566349* +X0420793Y0566217* +X0419855Y0565828* +X0419051Y0565211* +X0418433Y0564406* +X0418045Y0563469* +X0417912Y0562463* +X0418045Y0561457* +X0418433Y056052* +X0419051Y0559715* +X0419855Y0559098* +X0420269Y0558926* +Y0556* +X0419855Y0555828* +X0419051Y0555211* +X0418433Y0554406* +X0418045Y0553469* +X0417912Y0552463* +X0418045Y0551457* +X0418433Y055052* +X0419051Y0549715* +X0419855Y0549098* +X0420793Y0548709* +X0421798Y0548577* +X0422804Y0548709* +X0423741Y0549098* +X0424546Y0549715* +X0425164Y055052* +X0425552Y0551457* +X0425684Y0552463* +X0425552Y0553469* +X0425164Y0554406* +X0424571Y0555178* +X0424588Y0555338* +X0424712Y0555714* +X0424891Y0555748* +X0441192Y0539446* +X0441151Y0539242* +X0440975Y0538956* +X0439659* +Y0535464* +X0438159* +Y0538956* +X0436724* +X0436074Y0538827* +X0435522Y0538458* +X0435294Y0538117* +X0434724* +X0434497Y0538458* +X0433945Y0538827* +X0433294Y0538956* +X0431859* +Y0535464* +X0430359* +Y0538956* +X0428924* +X0428685Y0538908* +X0428185Y0539319* +Y0540153* +X0429039Y0540266* +X0429866Y0540608* +X0430576Y0541153* +X0431121Y0541864* +X0431464Y0542691* +X043158Y0543578* +X0431464Y0544466* +X0431121Y0545293* +X0430576Y0546003* +X0429866Y0546548* +X0429039Y0546891* +X0428151Y0547008* +X0427264Y0546891* +X0426437Y0546548* +X0425726Y0546003* +X0425181Y0545293* +X0425128Y0545164* +X0424632Y0545099* +X0424546Y0545211* +X0423741Y0545828* +X0422804Y0546216* +X0422548Y054625* +Y0542463* +Y0538676* +X0422804Y0538709* +X0423741Y0539098* +X0424218Y0539463* +X0424718Y0539217* +Y0536664* +X0424218Y0536281* +X0423865Y0536351* +X0419732* +X0419035Y0536212* +X0418556Y0535892* +X0414895* +X0414783Y0535915* +Y0536411* +X0415434Y0536541* +X0415986Y0536909* +X0416354Y0537461* +X0416484Y0538112* +Y0539153* +X0408713* +Y0538112* +X0408842Y0537461* +X0409211Y0536909* +X0409763Y0536541* +X0410413Y0536411* +Y0535915* +X0409763Y0535785* +X0409211Y0535417* +X0408842Y0534865* +X0408713Y0534214* +Y0530631* +X0408842Y0529981* +X0409211Y0529429* +X0409763Y0529061* +X0410413Y0528931* +X0414783* +X0415299Y0529034* +X0418556* +X0419035Y0528714* +X0419732Y0528575* +X0423865* +X0424218Y0528645* +X0424718Y0528262* +Y052473* +X042485Y0524067* +X0425225Y0523504* +X0426427Y0522303* +Y0521041* +X0426154Y0520792* +Y0513794* +X0424654* +Y0520585* +X0424393Y0520534* +X0424026Y0520288* +X0423659Y0520534* +X0423398Y0520585* +Y0513794* +X0422648* +Y0513044* +X0420919* +Y0508131* +X0420923Y0508108* +X0420462Y0507861* +X0415584Y051274* +Y0513514* +X0415454Y0514165* +X0415086Y0514716* +X0414534Y0515085* +X0413883Y0515214* +Y0515711* +X0414534Y0515841* +X0415086Y0516209* +X0415454Y0516761* +X0415584Y0517412* +Y0518453* +X0411698* +Y0519203* +X0410948* +Y0522695* +X0409513* +X0408863Y0522565* +X0408311Y0522197* +X0408247Y05221* +X0407576Y0521996* +X040748Y0522073* +Y0578346* +X0414567Y0585433* +X051063* +X0517717Y0578346* +G37* +G36* +X0246466Y054794D02* +X0247177Y0547396D01* +X0248004Y0547053* +X0248162Y0547032* +Y0546122* +X0248278Y0545537* +X024861Y0545041* +X0256862Y0536789* +Y053003* +X0256362Y0529611* +X025632Y0529618* +X02563Y0529719* +X0255975Y0530205* +X0255488Y053053* +X0255004Y0530627* +X0254908Y0531111* +X0254583Y0531597* +X0254096Y0531922* +X0253612Y0532019* +X0253516Y0532503* +X0253191Y0532989* +X0252704Y0533314* +X025222Y0533411* +X0252165Y0533687* +X0251852Y0533373* +X0251556Y0533314* +X025107Y0532989* +X0248968Y0530888* +X0248305Y053155* +X0250407Y0533652* +X0250732Y0534139* +X0250791Y0534434* +X0251105Y0534748* +X0250828Y0534802* +X0250732Y0535287* +X0250407Y0535773* +X0249921Y0536098* +X0249436Y0536194* +X024934Y0536678* +X0249015Y0537165* +X0248766Y0537332* +X0248704Y053764* +X0248821Y0538225* +Y0539865* +X0248704Y0540451* +X0248373Y0540947* +X0244789Y054453* +X0244816Y0544941* +X0245361Y0545651* +X0245704Y0546478* +X0245821Y0547365* +X0245726Y0548084* +X0246204Y0548282* +X0246466Y054794* +G37* +G36* +X0308528Y0567809D02* +X0308406Y0567197D01* +Y0563614* +X0308535Y0562963* +X0308904Y0562412* +X0309456Y0562043* +X0310106Y0561914* +Y0561417* +X0309456Y0561287* +X0308904Y0560919* +X0308535Y0560367* +X0308406Y0559717* +Y0558675* +X0316177* +Y0559453* +X0316677Y055966* +X0318853Y0557484* +X0319349Y0557152* +X0319935Y0557036* +X0325168* +X0325311Y0556673* +X032534Y0556536* +X0325043Y0556093* +X0324934Y0555541* +Y0555092* +X0330332* +Y0555541* +X0330222Y0556093* +X0329926Y0556536* +X0329954Y0556673* +X0330098Y0557036* +X0338558* +X0348862Y0546732* +Y0536456* +X0348241Y0535836* +X0348051Y0535874* +X0344468* +X0343818Y0535744* +X0343266Y0535376* +X0342897Y0534824* +X0342768Y0534173* +Y0529803* +X0342897Y0529152* +X0343266Y0528601* +X0343818Y0528232* +X0344468Y0528103* +X0348051* +X0348702Y0528232* +X0349253Y0528601* +X0349622Y0529152* +X0349751Y0529803* +X0350248* +X0350378Y0529152* +X0350746Y0528601* +X0351298Y0528232* +X0351949Y0528103* +X0355531* +X0356182Y0528232* +X0356708Y0528584* +X0359062Y052623* +Y0522308* +X0359178Y0521723* +X035951Y0521227* +X0361069Y0519668* +Y0513925* +X0360905* +X0360255Y0513795* +X0359703Y0513427* +X0359334Y0512875* +X0359205Y0512224* +X0358708* +X0358579Y0512875* +X035821Y0513427* +X0357659Y0513795* +X0357008Y0513925* +X0355966* +Y0510039* +X0355216* +Y0509289* +X0351725* +Y0507854* +X0351854Y0507204* +X0352223Y0506652* +X0352774Y0506283* +X0353425Y0506154* +X0353847* +X0353999Y0505654* +X0353994Y0505651* +X0353626Y0505099* +X0353497Y0504449* +Y0504201* +X0352803* +Y0504449* +X0352673Y0505099* +X0352305Y0505651* +X0351753Y050602* +X0351102Y0506149* +X034752* +X0346869Y050602* +X0346317Y0505651* +X0345949Y0505099* +X0345819Y0504449* +X0345322* +X0345221Y050496* +Y0509741* +X0345567Y0509972* +X0345823Y0510355* +X0345913Y0510806* +Y0512853* +X0345867Y0513082* +X0346279Y0513279* +X0346335Y0513292* +X0346791Y0512987* +X0347342Y0512877* +X034785* +Y0515518* +X03486* +Y0516268* +X03513* +Y0516717* +X035119Y0517268* +X0351163Y0517308* +X0351281Y0517713* +X0351372Y0517819* +X0351409Y0517841* +X0351513Y051781* +X0352008Y0517166* +X0352718Y0516621* +X0353545Y0516279* +X0354433Y0516162* +X035532Y0516279* +X0356147Y0516621* +X0356858Y0517166* +X0357403Y0517876* +X0357745Y0518704* +X0357862Y0519591* +X0357745Y0520479* +X0357403Y0521306* +X0356858Y0522016* +X0356147Y0522561* +X035532Y0522904* +X0354433Y0523021* +X0353545Y0522904* +X0352718Y0522561* +X0352696Y0522544* +X0351158* +X0350877Y0522964* +X035041Y0523277* +X0349858Y0523386* +X0347342* +X0346791Y0523277* +X0346323Y0522964* +X0346011Y0522497* +X0346Y0522443* +X0345672Y0522378* +X034496Y0521902* +X034457Y0521512* +X0340915* +X0340464Y0521422* +X0340082Y0521167* +X0339826Y0520784* +X0339737Y0520333* +Y0518286* +X0339826Y0517835* +X0340082Y0517453* +Y0517427* +X0339826Y0517044* +X0339737Y0516593* +Y051632* +X0342825* +Y051482* +X0339737* +Y0514546* +X0339826Y0514095* +X0340082Y0513713* +Y0513686* +X0339826Y0513304* +X0339737Y0512853* +Y0510806* +X0339826Y0510355* +X0340082Y0509972* +X0340464Y0509717* +X0340915Y0509627* +X0342162* +Y0506149* +X0340039* +X0339389Y050602* +X0338837Y0505651* +X0338468Y0505099* +X0338339Y0504449* +Y0500079* +X0338468Y0499428* +X0338837Y0498876* +X0339017Y0498756* +X0338822Y0498285* +X0338492Y0498351* +X0337451* +Y049058* +X0338492* +X0339143Y0490709* +X0339695Y0491078* +X0340063Y049163* +X0340193Y049228* +X0340689* +X0340819Y049163* +X0341188Y0491078* +X0341739Y0490709* +X034239Y049058* +X0345973* +X0346175Y049062* +X0346562Y0490303* +Y0486999* +X0343258Y0483695* +X0340905* +X034026Y0484126* +X0339448Y0484287* +X033433* +X0333518Y0484126* +X033283Y0483666* +X033237Y0482977* +X0332208Y0482165* +X033237Y0481353* +X033283Y0480665* +X0333518Y0480205* +X033433Y0480044* +X0339448* +X034026Y0480205* +X0340905Y0480636* +X0343891* +X0344477Y0480752* +X0344973Y0481084* +X0348162Y0484273* +X0348623Y0484081* +Y0481055* +X034874Y048047* +X0349072Y0479973* +X0350951Y0478093* +X0350874Y0477977* +X0350712Y0477165* +X0350874Y0476353* +X0351334Y0475665* +X0352022Y0475205* +X0352834Y0475043* +X0357952* +X0358337Y0474665* +X0358033Y0474366* +X0357895Y0474287* +X0352834* +X0352022Y0474126* +X0351334Y0473666* +X0350874Y0472977* +X0350712Y0472165* +X0350874Y0471353* +X0351334Y0470665* +X0352022Y0470205* +X0352834Y0470044* +X0356823* +X0357234Y0469544* +X0357172Y046923* +Y0467233* +X0356962* +X0356299Y0467101* +X0355737Y0466725* +X0355361Y0466163* +X0355229Y0465499* +X0355361Y0464836* +X0355737Y0464274* +Y0464166* +X0355361Y0463603* +X0355328Y0463436* +X0354785Y0463271* +X0353619Y0464437* +Y0465605* +X0353502Y046619* +X0353171Y0466686* +X0349421Y0470436* +Y0471522* +X0349304Y0472108* +X0348973Y0472604* +X034333Y0478247* +X0342833Y0478578* +X0342248Y0478695* +X0340905* +X034026Y0479126* +X0339448Y0479287* +X033433* +X0333518Y0479126* +X033283Y0478666* +X033237Y0477977* +X0332208Y0477165* +X033237Y0476353* +X033283Y0475665* +X0333518Y0475205* +X033433Y0475043* +X0339448* +X034026Y0475205* +X0340905Y0475636* +X0341615* +X0346362Y0470889* +Y0469803* +X0346478Y0469217* +X034681Y0468721* +X035056Y0464971* +Y0463804* +X0350676Y0463219* +X0351008Y0462722* +X0354269Y0459462* +X0354325Y0458978* +X0354242Y0458812* +X0349107Y0453678* +X034887Y045375* +X03486Y0453877* +X0348269Y0454372* +X0347718Y045474* +X0347067Y045487* +X0343484* +X0342833Y045474* +X0342282Y0454372* +X0341913Y045382* +X0341784Y0453169* +X0341287* +X0341158Y045382* +X0340789Y0454372* +X0340237Y045474* +X0339587Y045487* +X0337569* +X0337377Y0455332* +X0338699Y0456653* +X0339196Y0456604* +X0339201Y0456596* +X0339764Y0456221* +X0340427Y0456089* +X0342223* +Y0457822* +X0342973* +Y0458572* +X0347063* +X0346973Y0458707* +X0346773Y0459102* +X0346973Y0459497* +X0347121Y0459718* +X0347253Y0460381* +X0347121Y0461044* +X0346973Y0461266* +X0346773Y0461661* +X0346973Y0462056* +X0347121Y0462277* +X0347253Y046294* +X0347121Y0463603* +X0346973Y0463825* +X0346773Y046422* +X0346973Y0464615* +X0347063Y0464749* +X0338883* +X0338898Y0464727* +X0338745Y0464359* +X0338629Y0464229* +X033821Y0463949* +X0336449Y0462188* +X0336416Y046219* +X0335706Y0462735* +X0334879Y0463078* +X0333991Y0463195* +X0333104Y0463078* +X0332277Y0462735* +X0331566Y046219* +X0331021Y046148* +X0330679Y0460653* +X0330562Y0459765* +X0330679Y0458878* +X0331021Y0458051* +X0331106Y045794* +X0330873Y0457423* +X0330177Y0457135* +X0329466Y045659* +X0328921Y045588* +X0328579Y0455053* +X0328462Y0454165* +X0328579Y0453278* +X0328921Y0452451* +X0329466Y045174* +X0330177Y0451195* +X0331004Y0450853* +X0331891Y0450736* +X0332779Y0450853* +X0333606Y0451195* +X0333855Y0451387* +X0334303Y0451165* +Y0448799* +X0334433Y0448148* +X0334802Y0447597* +X0335353Y0447228* +X0336004Y0447099* +X0337045* +Y0450984* +X0338545* +Y0447099* +X0339587* +X0340237Y0447228* +X0340789Y0447597* +X0341158Y0448148* +X0341287Y0448799* +X0341784* +X0341913Y0448148* +X0342282Y0447597* +X0342428Y0447499* +X0342477Y0447002* +X034097Y0445495* +X0337735* +X0337149Y0445378* +X0336653Y0445047* +X033431Y0442704* +X0333978Y0442207* +X0333862Y0441622* +Y0430066* +X0330689* +X0330038Y0429937* +X0329487Y0429568* +X0329374Y0429399* +X0328873Y0429551* +Y0445223* +X0328757Y0445808* +X0328426Y0446304* +X0325921Y0448809* +Y0456622* +X0328426Y0459126* +X0328757Y0459622* +X0328873Y0460208* +Y04683* +X0329426Y0468852* +X0329757Y0469348* +X0329873Y0469933* +Y0492816* +X0329757Y0493401* +X0329426Y0493897* +X0322169Y0501154* +X0322202Y0501653* +X0322316Y050174* +X0322861Y0502451* +X0323204Y0503278* +X0323321Y0504165* +X0323204Y0505053* +X0322861Y050588* +X0322316Y050659* +X0321606Y0507135* +X0320779Y0507478* +X0319891Y0507595* +X0319004Y0507478* +X0318177Y0507135* +X0317921Y0506939* +X0317421Y0507186* +Y0538364* +X0317304Y053895* +X0316973Y0539446* +X0309544Y0546874* +X0309736Y0547336* +X0316115* +X0321059Y0542392* +Y0530668* +X0321175Y0530083* +X0321507Y0529587* +X0323188Y0527906* +X0323156Y0527744* +Y0524162* +X0323285Y0523511* +X0323654Y0522959* +X0324205Y0522591* +X0324856Y0522461* +X0325407* +X0325511Y0522153* +X0325544Y0521961* +X0325021Y052128* +X0324679Y0520453* +X0324562Y0519565* +X0324679Y0518678* +X0325021Y0517851* +X0325566Y051714* +X032579Y0516969* +Y0516339* +X0325466Y051609* +X0324921Y051538* +X0324579Y0514553* +X0324462Y0513665* +X0324579Y0512778* +X0324921Y0511951* +X0325466Y051124* +X0326177Y0510696* +X0327004Y0510353* +X0327891Y0510236* +X0328779Y0510353* +X0329606Y0510696* +X0329829Y0510866* +X0330304Y0510636* +X0330324Y0510616* +Y0509585* +X0328959* +X0328407Y0509476* +X0327939Y0509163* +X0327627Y0508695* +X0327517Y0508144* +Y0505746* +X0327627Y0505194* +X0327939Y0504727* +X0328082Y0504631* +Y050403* +X0327939Y0503935* +X0327627Y0503467* +X0327517Y0502915* +Y0502466* +X0332916* +Y0502915* +X0332806Y0503467* +X0332494Y0503935* +X0332351Y050403* +Y0504631* +X0332494Y0504727* +X0333127Y0504786* +X0333381Y0504591* +X0334208Y0504248* +X0335096Y0504131* +X0335984Y0504248* +X0336811Y0504591* +X0337521Y0505136* +X0338066Y0505846* +X0338408Y0506673* +X0338525Y0507561* +X0338408Y0508448* +X0338066Y0509275* +X0337521Y0509986* +X0336811Y0510531* +X033644Y0510684* +X0336464Y0510806* +Y0512853* +X0336374Y0513304* +X0336119Y0513686* +Y0513713* +X0336374Y0514095* +X0336464Y0514546* +Y0514819* +X0338123Y0516477* +X0338454Y0516973* +X0338571Y0517559* +Y0523571* +X0338597Y0523611* +X0338726Y0524262* +Y0527844* +X0338694Y0528006* +X0340375Y0529686* +X0340707Y0530183* +X0340823Y0530768* +Y0536264* +X0340707Y0536849* +X0340375Y0537345* +X0338965Y0538756* +X0338469Y0539087* +X0337884Y0539203* +X0334161* +X033178Y0541585* +X0331725Y0541622* +X0329419Y0543928* +X0328922Y0544259* +X0328337Y0544376* +X0326244* +X0322709Y054791* +X0322901Y0548372* +X0324934* +Y0547915* +X0325043Y0547363* +X0325356Y0546896* +X0325823Y0546583* +X0326375Y0546473* +X0328891* +X0329442Y0546583* +X032991Y0546896* +X0330222Y0547363* +X0330332Y0547915* +Y0548372* +X033299* +X0334266Y0547096* +X0334818Y0546727* +X0335468Y0546598* +X0336119Y0546727* +X0336671Y0547096* +X0337022Y0546745* +X0336653Y0546193* +X0336524Y0545542* +X0336653Y0544892* +X0337022Y054434* +X0339555Y0541807* +X0340107Y0541438* +X0340758Y0541309* +X0340938Y054114* +X0340862Y0540565* +X0340979Y0539678* +X0341321Y0538851* +X0341866Y053814* +X0342577Y0537596* +X0343404Y0537253* +X0344291Y0537136* +X0345179Y0537253* +X0346006Y0537596* +X0346716Y053814* +X0347261Y0538851* +X0347604Y0539678* +X0347721Y0540565* +X0347604Y0541453* +X0347261Y054228* +X0346716Y054299* +X0346006Y0543535* +X0345179Y0543878* +X034479Y0543929* +X034461Y0544457* +X034505Y0544897* +X0345419Y0545448* +X0345548Y0546099* +X0345419Y054675* +X034505Y0547301* +X0342517Y0549835* +X0341965Y0550203* +X0341314Y0550333* +X0340664Y0550203* +X0340112Y0549835* +X0339761Y0550186* +X0340129Y0550738* +X0340259Y0551388* +X0340129Y0552039* +X0339761Y0552591* +X0337227Y0555124* +X0336676Y0555493* +X0336025Y0555622* +X0335374Y0555493* +X0334823Y0555124* +X0331733Y0552034* +X0331364Y0551482* +X0331354Y0551431* +X0330117* +X0329954Y0551595* +X032991Y0552124* +X0330222Y0552592* +X0330332Y0553143* +Y0553592* +X0324934* +Y0553143* +X0325043Y0552592* +X0325356Y0552124* +X0325311Y0551595* +X0325149Y0551431* +X0322017* +X0319501Y0553947* +X0319005Y0554278* +X031842Y0554395* +X0315775* +X0315624Y0554895* +X0315679Y0554931* +X0316047Y0555483* +X0316177Y0556134* +Y0557175* +X0308357* +X0307944Y0557004* +X0299001Y0565947* +X0298505Y0566278* +X029792Y0566395* +X0293838* +X0293521Y0566781* +X0293546Y0566908* +Y0567415* +X0290905* +Y0568915* +X0293546* +Y0569423* +X0293521Y056955* +X0293838Y0569936* +X0306401* +X0308528Y0567809* +G37* +G36* +X0304362Y0533589D02* +Y0517853D01* +X0303862Y0517662* +X0303303Y0518035* +X0302491Y0518197* +X0301679Y0518035* +X0301392Y0517843* +X029957Y0519665* +X0299107Y0519975* +X029856Y0520083* +X0296892* +X029551Y0521465* +X0295047Y0521775* +X0294501Y0521883* +X0292443* +X0292008Y0522318* +X0292199Y052278* +X0292442* +X0293093Y0522909* +X0293645Y0523278* +X0294014Y052383* +X0294143Y052448* +X029464* +X0294769Y052383* +X0295138Y0523278* +X0295689Y0522909* +X029634Y052278* +X0297381* +Y0526665* +X0298131* +Y0527415* +X0301623* +Y052885* +X0301494Y0529501* +X0301125Y0530053* +X0300573Y0530421* +X0299923Y0530551* +X0298869* +X0298737Y0530786* +X0298665Y0531051* +X0298936Y0531456* +X0299046Y0532008* +Y0532515* +X0296406* +Y0534015* +X0299046* +Y0534523* +X029902Y0534651* +X0299338Y0535038* +X0302913* +X0304362Y0533589* +G37* +G36* +X0332769Y035383D02* +X0333138Y0353278D01* +X0333689Y0352909* +X033434Y035278* +X0337357* +X033881Y0351327* +X0339082Y0351145* +X0339121Y0351051* +X0339666Y0350341* +X0340377Y0349796* +X0341204Y0349453* +X0342091Y0349336* +X0342979Y0349453* +X0343462Y0349653* +X0343962Y0349319* +Y0323812* +X0343586Y0323482* +X0343491Y0323495* +X0342604Y0323378* +X0341777Y0323035* +X0341066Y032249* +X0340521Y032178* +X0340179Y0320953* +X0340062Y0320065* +X0340179Y0319178* +X0340521Y0318351* +X0341066Y031764* +X0341098Y0317163* +X0338729Y0314795* +X0321991* +X0321406Y0314678* +X032091Y0314347* +X0320581Y0314018* +X032012Y0314264* +X0320123Y031428* +Y031865* +X0320016Y0319187* +X0322665Y0321836* +X0323236* +X0323484Y0321465* +X0324172Y0321005* +X0324984Y0320844* +X0330102* +X0330914Y0321005* +X0331603Y0321465* +X0332063Y0322153* +X0332217Y0322928* +X0333193Y0323904* +X0333256Y0323863* +X0333906Y0323733* +X0338276* +X0338927Y0323863* +X0339479Y0324232* +X0339847Y0324783* +X0339977Y0325434* +Y0329016* +X0339847Y0329667* +X0339479Y0330219* +X0338927Y0330588* +X0338276Y0330717* +Y0331214* +X0338927Y0331343* +X0339479Y0331712* +X0339847Y0332263* +X0339977Y0332914* +Y0336497* +X0339847Y0337148* +X0339479Y0337699* +X0338927Y0338068* +X0338276Y0338197* +X0337348* +Y0344995* +X0337231Y0345581* +X0336899Y0346077* +X0330662Y0352314* +X0330827Y0352856* +X0331093Y0352909* +X0331645Y0353278* +X0332014Y035383* +X0332143Y035448* +X033264* +X0332769Y035383* +G37* +G36* +X0298641Y0464478D02* +X0298897Y0464512D01* +X0299834Y04649* +X0300399Y0465334* +X0300899Y0465087* +Y0455456* +X0297549Y0452106* +X0296886Y0452019* +X0295948Y0451631* +X0295144Y0451013* +X0294526Y0450208* +X0294138Y0449271* +X0294005Y0448265* +X0294138Y044726* +X0294526Y0446322* +X0295144Y0445517* +X0295948Y04449* +X0296886Y0444512* +X0297805Y0444391* +X0300852Y0441343* +Y044038* +X0300352Y0440133* +X0299834Y0440531* +X0298897Y0440919* +X0298641Y0440953* +Y0433378* +X0298897Y0433412* +X0299834Y04338* +X0300352Y0434197* +X0300852Y0433951* +Y0423913* +X0297979Y042104* +X0297891Y0421051* +X0296886Y0420919* +X0295948Y0420531* +X0295144Y0419913* +X0294526Y0419108* +X0294138Y0418171* +X0294005Y0417165* +X0294138Y041616* +X0294526Y0415222* +X0295144Y0414418* +X0295948Y04138* +X0296886Y0413412* +X0297891Y0413279* +X0298777Y0413396* +X0300852Y0411321* +Y040928* +X0300352Y0409033* +X0299834Y0409431* +X0298897Y0409819* +X0298641Y0409853* +Y0406065* +X0297141* +Y0409853* +X0296886Y0409819* +X0295948Y0409431* +X0295244Y040889* +X0295009Y0408904* +X0294852Y0408935* +X0294666Y0409013* +X0294286Y0409582* +X0290235Y0413633* +X0290267Y0414132* +X0290639Y0414418* +X0291257Y0415222* +X0291645Y041616* +X0291777Y0417165* +X0291645Y0418171* +X0291257Y0419108* +X0290639Y0419913* +X0289931Y0420457* +Y0429271* +X0294333Y0433674* +X0294683Y0434197* +X0294813Y0434259* +X029514Y0434319* +X0295281Y0434312* +X0295948Y04338* +X0296886Y0433412* +X0297141Y0433378* +Y0440953* +X0296886Y0440919* +X0295948Y0440531* +X0295273Y0440012* +X0295159Y0439998* +X0294823Y0440047* +X0294667Y0440113* +X0294333Y0440612* +X0290222Y0444723* +X0290254Y0445222* +X0290639Y0445517* +X0291257Y0446322* +X0291645Y044726* +X0291777Y0448265* +X0291645Y0449271* +X0291257Y0450208* +X0290639Y0451013* +X0289931Y0451557* +Y0460373* +X0294286Y0464729* +X0294673Y0465309* +X0294845Y0465385* +X0294978Y0465413* +X0295247Y0465438* +X0295948Y04649* +X0296886Y0464512* +X0297141Y0464478* +Y0468265* +X0298641* +Y0464478* +G37* +G36* +X0608699Y047715D02* +X0608761Y0476838D01* +X0609142Y0476268* +X0609712Y0475888* +X0610384Y0475754* +X061361* +X0615222Y0474142* +Y0472507* +X0611049Y0468334* +X0610984* +X0610462Y046823* +X0610019Y0467934* +X0609724Y0467491* +X060962Y0466969* +Y046256* +X0609618Y0462558* +X0606675* +X0606522Y0462711* +Y0466969* +X0606419Y0467491* +X0606354Y0467588* +Y0468175* +X0606447* +X0607119Y0468309* +X0607689Y046869* +X0608069Y046926* +X0608203Y0469932* +Y0475148* +X0608069Y047582* +X0607689Y047639* +X0607665Y0476509* +X0607729Y0476965* +X0608173Y0477261* +X0608699Y047715* +G37* +G36* +X0221619Y0325358D02* +X0221904Y0324932D01* +X0222456Y0324563* +X0223106Y0324433* +X0226167* +X0226358Y0323972* +X0225823Y0323436* +X0225278Y0322726* +X0224936Y0321899* +X0224819Y0321011* +Y0319177* +X0224444Y0318863* +X022023* +X0220039* +X0219767Y0319319* +Y0324471* +X0220227Y0324563* +X0220779Y0324932* +X0221063Y0325358* +X0221175Y0325388* +X0221507* +X0221619Y0325358* +G37* +G36* +X0579415Y0478155D02* +X05796Y0478088D01* +X0579728Y0477447* +X0580019Y0477011* +X0579816Y0476511* +X0579705* +X0579021Y0476375* +X0578442Y0475988* +X0578054Y0475409* +X0577918Y0474725* +Y0471142* +X0578054Y0470459* +X0578442Y0469879* +X0579021Y0469492* +X05792Y0469456* +Y0468947* +X0579015Y046891* +X057843Y0468519* +X057804Y0467934* +X0577902Y0467245* +Y0466453* +X058189* +Y0465453* +X058289* +Y046186* +X0584075* +X0584764Y0461997* +X0584981Y0462142* +X0585481Y0461874* +Y0461434* +X0589075* +Y0460434* +X0590075* +Y0456446* +X0590866* +X0591556Y0456583* +X059214Y0456974* +X0592531Y0457559* +X0592568Y0457744* +X0593078* +X0593113Y0457565* +X0593501Y0456985* +X059408Y0456598* +X0594764Y0456462* +X0598346* +X059903Y0456598* +X059961Y0456985* +X0599997Y0457565* +X0600133Y0458249* +Y0459109* +X0600595Y0459301* +X0604829Y0455066* +X0605486Y0454627* +X0605879Y0454549* +Y0454292* +X0605983Y0453769* +X0606279Y0453327* +X0606722Y0453031* +X0607244Y0452927* +X0608898* +X060942Y0453031* +X0609863Y0453327* +X0610159Y0453769* +X0610263Y0454292* +Y0458701* +X0610264Y0458703* +X0613503* +X0613737Y0458749* +X0614237Y0458339* +Y0455493* +X0614373Y0454809* +X0614761Y0454229* +X061534Y0453842* +X0616024Y0453706* +X0620394* +X0621077Y0453842* +X0621657Y0454229* +X0622044Y0454809* +X0622134Y0455261* +X0623841* +X0623893Y0455193* +X0624621Y0454634* +X0625468Y0454283* +X0626378Y0454163* +X0627287Y0454283* +X0628135Y0454634* +X0628418Y0454851* +X0628918Y0454604* +Y0452171* +X0628592Y0451904* +X0625147* +X0624475Y045177* +X0623906Y045139* +X0623525Y045082* +X0623391Y0450148* +Y0447811* +X0623356Y044754* +X0623391Y0447269* +Y0444932* +X0623525Y0444259* +X0623906Y044369* +X0624344Y0443397* +X0624356Y044293* +X062433Y044285* +X0624227Y0442808* +X0623758Y0442448* +X0623116Y044232* +X0622679Y0442028* +X0622179Y044223* +Y0442372* +X0622046Y0443044* +X0621665Y0443614* +X0621095Y0443995* +X0620423Y0444129* +X0618181* +X0616372Y0445938* +Y0450148* +X0616238Y045082* +X0615858Y045139* +X0615288Y045177* +X0614616Y0451904* +X0611171* +X0610499Y045177* +X0609929Y045139* +X0609549Y045082* +X0609415Y0450148* +Y0449563* +X0606727* +Y0450118* +X0606591Y0450802* +X0606204Y0451381* +X0605625Y0451769* +X0604941Y0451905* +X0601358* +X0600675Y0451769* +X0600095Y0451381* +X0599708Y0450802* +X0599664Y0450583* +X0599155* +X0599111Y0450802* +X0598724Y0451381* +X0598144Y0451769* +X0597461Y0451905* +X0593878* +X0593194Y0451769* +X0592615Y0451381* +X0592377Y0451026* +X0591795Y0450997* +X0591736Y0451086* +X0591156Y0451474* +X0590472Y045161* +X058689* +X0586206Y0451474* +X0585627Y0451086* +X0585239Y0450507* +X0585196Y0450288* +X0584686* +X0584642Y0450507* +X0584255Y0451086* +X0583676Y0451474* +X0582992Y045161* +X0579409* +X0578726Y0451474* +X0578146Y0451086* +X057785Y0450642* +X0577831Y0450626* +X0577382Y0450503* +X0577248Y0450501* +X0576757Y0450878* +X0576334Y0451053* +Y0475442* +X0579092Y0478199* +X0579415Y0478155* +G37* +G36* +X0155535Y0408084D02* +X015528Y0407631D01* +X0154595Y0407495* +X0153946Y0407061* +X0153512Y0406412* +X015336Y0405646* +Y0403915* +X0168623* +Y0405646* +X0168505Y0406236* +X0168809Y0406736* +X0171741* +X0173192Y0405285* +X0173688Y0404953* +X0174273Y0404837* +X0181232* +X0181817Y0404953* +X0182314Y0405285* +X0183963Y0406933* +X0187033* +X0187241Y0406433* +X018435Y0403543* +X0178445* +X0174508Y0399606* +X0168817* +X0168508Y0400106* +X0168623Y0400685* +Y0402415* +X015336* +Y0400685* +X0153475Y0400106* +X0153166Y0399606* +X015187* +X01471Y0404376* +X0147242Y0404942* +X0147923Y0405149* +X0148986Y0405717* +X0149917Y0406481* +X0150681Y0407412* +X0151249Y0408475* +X0151599Y0409628* +X0151717Y0410827* +X0151672Y041128* +X0152124Y0411494* +X0155535Y0408084* +G37* +G36* +X0246221Y0582665D02* +X0246428Y0582165D01* +X0243744Y0579481* +X0243245Y0579514* +X0242939Y0579913* +X0242134Y0580531* +X0241197Y0580919* +X0240191Y0581051* +X0239186Y0580919* +X0238248Y0580531* +X0237443Y0579913* +X0236826Y0579108* +X0236438Y0578171* +X0236305Y0577165* +X0236438Y057616* +X0236826Y0575222* +X0237194Y0574742* +X0236948Y0574242* +X0235278* +X0233774Y0575746* +X0233945Y057616* +X0234077Y0577165* +X0233945Y0578171* +X0233557Y0579108* +X0232939Y0579913* +X0232134Y0580531* +X0231197Y0580919* +X0230191Y0581051* +X0229186Y0580919* +X0228248Y0580531* +X0227444Y0579913* +X0226826Y0579108* +X0226438Y0578171* +X0226305Y0577165* +X0226438Y057616* +X0226826Y0575222* +X0227444Y0574417* +X0228248Y05738* +X0229186Y0573412* +X0230191Y0573279* +X0231197Y0573412* +X0231611Y0573583* +X0233563Y0571631* +X0234059Y05713* +X0234644Y0571183* +X0242036* +X0242621Y05713* +X0242671Y0571222* +X0242674Y0571207* +X0242986Y0570739* +X0243345Y057038* +X0245213Y0572247* +X0245743Y0571717* +X0246273Y0572247* +X0248182Y0570338* +X0248499Y0570656* +X0248812Y0571124* +X0248921Y0571675* +X0248888Y0571843* +X0249313Y0572269* +X0249482Y0572235* +X0250033Y0572345* +X0250501Y0572657* +X0250636Y0572792* +X0250843Y0572694* +X025088Y0572611* +X0250955Y0572111* +X0250717Y0571755* +X0250621Y0571271* +X0250137Y0571175* +X024965Y057085* +X0249325Y0570363* +X0249229Y0569879* +X0248745Y0569783* +X0248258Y0569458* +X0247933Y0568971* +X0247837Y0568488* +X0247353Y0568391* +X0246866Y0568066* +X0246541Y056758* +X0246445Y0567096* +X0245961Y0566999* +X0245475Y0566674* +X0245149Y0566188* +X0245053Y0565704* +X0244569Y0565607* +X0244082Y0565282* +X0244029Y0565202* +X0243383Y0565136* +X0243162Y0565283* +X0242616Y0565392* +X0241265* +X0239841Y0566815* +X0239816Y0566832* +X0239746Y0566937* +Y0567223* +X0239636Y0567775* +X0239324Y0568243* +X0238856Y0568555* +X0238304Y0568665* +X0235907* +X0235355Y0568555* +X0234887Y0568243* +X0234792Y05681* +X0234191* +X0234095Y0568243* +X0233628Y0568555* +X0233076Y0568665* +X0232627* +Y0563266* +X0233076* +X0233628Y0563376* +X0234095Y0563688* +X0234191Y0563831* +X0234792* +X0234887Y0563688* +X0235355Y0563376* +X0235907Y0563266* +X0237191* +X0238512Y0561944* +X023838Y0561596* +X0238279Y056147* +X023502* +X0234434Y0561354* +X0233938Y0561022* +X0233435Y0560519* +X0232936Y0560552* +X0232897Y0560603* +X0232187Y0561148* +X023136Y056149* +X0230472Y0561607* +X0229585Y056149* +X0228758Y0561148* +X0228048Y0560603* +X0227503Y0559893* +X022716Y0559065* +X0227043Y0558178* +X022716Y055729* +X0227503Y0556463* +X0228048Y0555753* +X0228758Y0555208* +X0229585Y0554865* +X0230472Y0554749* +X0231262Y0554852* +X0231762Y055458* +Y0542999* +X0230423Y054166* +X0230379Y0541678* +X0229491Y0541795* +X0228604Y0541678* +X0227777Y0541335* +X0227066Y054079* +X0226521Y054008* +X0226179Y0539253* +X0226062Y0538365* +X0226179Y0537478* +X0226521Y0536651* +X0227066Y053594* +X0227777Y0535395* +X0228604Y0535053* +X0228962Y0535006* +X0229141Y0534478* +X022431Y0529647* +X0223978Y0529151* +X0223862Y0528565* +Y0526199* +X022041Y0522747* +X0220078Y0522251* +X0219962Y0521665* +Y0515833* +X0219921Y051578* +X0219579Y0514953* +X0219462Y0514065* +X0219579Y0513178* +X0219921Y0512351* +X0220466Y051164* +X0221177Y0511096* +X0222004Y0510753* +X0222891Y0510636* +X0223779Y0510753* +X0224606Y0511096* +X0225316Y051164* +X0225861Y0512351* +X0226204Y0513178* +X0226321Y0514065* +X0226204Y0514953* +X0225861Y051578* +X0225316Y051649* +X0224606Y0517035* +X0223779Y0517378* +X0223021Y0517478* +Y0521032* +X0226473Y0524484* +X0226804Y052498* +X0226921Y0525565* +Y0527932* +X0234573Y0535584* +X0234904Y053608* +X0235021Y0536665* +Y0537362* +X0235283Y0537629* +X0235731Y05378* +X0236217Y0537475* +X0236701Y0537379* +X0236798Y0536895* +X0237112Y0536424* +X022851Y0527822* +X0228178Y0527326* +X0228062Y0526741* +Y0512199* +X021481Y0498947* +X0214478Y0498451* +X0214362Y0497865* +Y0490827* +X0207379Y0483844* +X0200589* +X0200004Y0483728* +X0199508Y0483396* +X0184019Y0467908* +X0183903Y0467986* +X0183091Y0468147* +X0182279Y0467986* +X0181591Y0467526* +X0181131Y0466837* +X018097Y0466025* +Y0460513* +X0181131Y0459701* +X0181591Y0459013* +X0182279Y0458553* +X0183091Y0458392* +X0183903Y0458553* +X0184592Y0459013* +X0185052Y0459701* +X0185213Y0460513* +Y0464711* +X0185493Y0464935* +X0185969Y0464726* +Y0460513* +X0186131Y0459701* +X0186591Y0459013* +X0187279Y0458553* +X0188091Y0458392* +X0188903Y0458553* +X0189592Y0459013* +X0190052Y0459701* +X0190213Y0460513* +Y0466025* +X0190064Y0466775* +X0202074Y0478786* +X0208841* +X0209426Y0478902* +X0209922Y0479234* +X0218973Y0488284* +X0219304Y048878* +X0219421Y0489365* +Y0496403* +X0232673Y0509656* +X0233004Y0510152* +X0233121Y0510737* +Y0517938* +X0233584Y0518178* +X0233621Y0518172* +X0233914Y0517733* +X0234382Y0517421* +X0234933Y0517311* +X0235441* +Y0519951* +X0236941* +Y0517311* +X0237449* +X0237664Y0517354* +X0238164Y0516974* +Y0512597* +X0236551Y0510984* +X0236242Y0510521* +X0236133Y0509975* +Y049924* +X0236242Y0498694* +X0236551Y0498231* +X0238037Y0496745* +Y0495008* +X0238147Y0494456* +X0238459Y0493988* +X0238927Y0493676* +X0239108Y049364* +Y0491769* +X0239184Y0491387* +X0238928Y0490769* +X0238803Y0489814* +X0238928Y048886* +X0239297Y0487971* +X0239882Y0487207* +X0240646Y0486621* +X0241536Y0486253* +X024249Y0486127* +X0243444Y0486253* +X0244334Y0486621* +X0245097Y0487207* +X0245683Y0487971* +X0246052Y048886* +X0246177Y0489814* +X0246052Y0490769* +X0245683Y0491658* +X0245097Y0492422* +X0244334Y0493008* +X0243444Y0493376* +X0243344Y0493389* +X0243129Y0493922* +X0243156Y0493955* +X0243687Y0493988* +X0244155Y0493676* +X0244707Y0493566* +X0245156* +Y0498965* +X0244707* +X0244155Y0498855* +X0243687Y0498542* +X0243592Y04984* +X0242991* +X0242895Y0498542* +X0242428Y0498855* +X0241876Y0498965* +X0239855* +X0239335Y0499485* +X023942Y049977* +X0239561Y0499966* +X0241876* +X0242428Y0500076* +X0242895Y0500388* +X0242991Y0500531* +X0243592* +X0243687Y0500388* +X0244155Y0500076* +X0244707Y0499966* +X0245156* +Y0505365* +X0244707* +X0244325Y0505289* +X0244179Y050577* +X0244334Y0505834* +X0245097Y050642* +X0245683Y0507183* +X0246052Y0508073* +X0246177Y0509027* +X0246052Y0509981* +X0245683Y0510871* +X0245097Y0511634* +X0244334Y051222* +X0243444Y0512589* +X0242819Y0512671* +Y0526166* +X0244889Y0528237* +X0245387Y0528188* +X0245475Y0528056* +X0245605Y0527969* +X0245655Y0527471* +X0244777Y0526594* +X0244342Y0526303* +X0244011Y0525807* +X0243894Y0525222* +Y0515986* +X0244011Y0515401* +X0244342Y0514904* +X0253262Y0505985* +Y0496699* +X0249683Y049312* +X0249352Y0492624* +X0249236Y0492039* +Y0484072* +X0246058Y0480895* +X0221071* +X0220485Y0480778* +X0219989Y0480447* +X0213231Y0473689* +X02129Y0473193* +X0212783Y0472607* +Y0470349* +X0212283Y0470249* +X0212258Y0470309* +X0211483Y047132* +X0210472Y0472095* +X0209296Y0472583* +X0208033Y0472749* +X020677Y0472583* +X0205594Y0472095* +X0204583Y047132* +X0203808Y0470309* +X0203321Y0469133* +X0203154Y046787* +X0203321Y0466607* +X0203808Y0465431* +X0204583Y046442* +X0205594Y0463645* +X020677Y0463158* +X0208033Y0462991* +X0209296Y0463158* +X0210472Y0463645* +X0211483Y046442* +X0212258Y0465431* +X0212283Y0465491* +X0212783Y0465392* +Y0462251* +X0211809* +X0211158Y0462121* +X0210606Y0461753* +X0210238Y0461201* +X0210108Y046055* +X0209612* +X0209482Y0461201* +X0209114Y0461753* +X0208562Y0462121* +X0207911Y0462251* +X020687* +Y045448* +X0207911* +X0208562Y0454609* +X0209114Y0454978* +X0209482Y045553* +X0209612Y045618* +X0210108* +X0210238Y045553* +X0210606Y0454978* +X0211158Y0454609* +X0211809Y045448* +X0215391* +X021572Y0454545* +X021622Y0454173* +Y0453451* +X0213876* +X0213225Y0453321* +X0212673Y0452953* +X0212305Y0452401* +X0212175Y045175* +X0211679* +X0211549Y0452401* +X021118Y0452953* +X0210629Y0453321* +X0209978Y0453451* +X0208937* +Y044568* +X0209978* +X0210629Y0445809* +X021118Y0446178* +X0211549Y044673* +X0211679Y044738* +X0212175* +X0212305Y044673* +X0212612Y0446271* +X0210503Y0444162* +X0210472Y0444186* +X0209296Y0444673* +X0208033Y0444839* +X020677Y0444673* +X0205594Y0444186* +X0204583Y044341* +X0203808Y04424* +X0203321Y0441223* +X0203154Y0439961* +X0203321Y0438698* +X0203808Y0437521* +X0204583Y0436511* +X0205594Y0435736* +X020677Y0435248* +X0208033Y0435082* +X0209093Y0435221* +X0209593Y0434886* +Y0419445* +X0209093Y0419109* +X0208033Y0419249* +X020677Y0419083* +X0205594Y0418595* +X0204583Y041782* +X0203808Y041681* +X0203321Y0415633* +X0203154Y041437* +X0203321Y0413107* +X0203808Y0411931* +X0204583Y041092* +X0205594Y0410145* +X020677Y0409658* +X0208033Y0409491* +X0209296Y0409658* +X0210472Y0410145* +X0211483Y041092* +X0212258Y0411931* +X0212746Y0413107* +X0212912Y041437* +X0212746Y0415633* +X0212348Y0416593* +X0212535Y0416874* +X0212651Y0417459* +Y0436872* +X0212535Y0437457* +X0212348Y0437737* +X0212746Y0438698* +X0212912Y0439961* +X0212746Y0441223* +X0212495Y0441828* +X0216347Y044568* +X0217436* +X0217482Y0445629* +X0217677Y0445214* +X0217231Y0444768* +X02169Y0444272* +X0216783Y0443687* +Y043688* +X02169Y0436295* +X0217231Y0435799* +X0218223Y0434807* +Y0419523* +X0217231Y0418532* +X02169Y0418036* +X0216783Y0417451* +Y041129* +X02169Y0410704* +X0217231Y0410208* +X021822Y0409219* +Y0408251* +X0215809* +X0215158Y0408121* +X0214606Y0407753* +X0214238Y0407201* +X0214108Y040655* +X0213612* +X0213482Y0407201* +X0213113Y0407753* +X0212562Y0408121* +X0211911Y0408251* +X021087* +Y040048* +X0211911* +X0212562Y0400609* +X0213113Y0400978* +X0213482Y040153* +X0213612Y040218* +X0214108* +X0214238Y040153* +X0214606Y0400978* +X0215158Y0400609* +X0215809Y040048* +X021822* +Y0391612* +X0217231Y0390623* +X02169Y0390126* +X0216783Y0389541* +Y038799* +X0212635* +X0212258Y03889* +X0211483Y038991* +X0210472Y0390686* +X0209296Y0391173* +X0208033Y0391339* +X020677Y0391173* +X0205594Y0390686* +X0204583Y038991* +X0203808Y03889* +X0203321Y0387723* +X0203154Y0386461* +X0203321Y0385198* +X0203808Y0384021* +X0204583Y0383011* +X0205594Y0382236* +X020677Y0381748* +X0208033Y0381582* +X0209296Y0381748* +X0210472Y0382236* +X0211483Y0383011* +X0212258Y0384021* +X0212635Y0384931* +X0216783* +Y038338* +X02169Y0382795* +X0217231Y0382299* +X021822Y038131* +Y0371714* +X021461Y0368104* +X0214278Y0367607* +X0214162Y0367022* +Y0360899* +X021363Y0360367* +X0213295Y0360376* +X0212906Y0360829* +X0212912Y036087* +X0212746Y0362133* +X0212258Y036331* +X0211483Y036432* +X0210472Y0365095* +X0209296Y0365583* +X0208033Y0365749* +X020677Y0365583* +X0205594Y0365095* +X0204583Y036432* +X0203808Y036331* +X0203321Y0362133* +X0203154Y036087* +X0203321Y0359607* +X0203808Y0358431* +X0204583Y035742* +X020465Y0357369* +X0204489Y0356896* +X0200121* +Y036365* +X0200189Y0363987* +Y0369302* +X0200121Y036964* +Y0382265* +X0200026Y0382989* +X0200388Y0383531* +X0200536Y0384272* +Y038997* +X0203032Y0392466* +X0203576* +X0204128Y0392576* +X0204595Y0392888* +X0204691Y0393031* +X0205292* +X0205387Y0392888* +X0205855Y0392576* +X0206407Y0392466* +X0206856* +Y0397865* +X0206407* +X0205855Y0397755* +X0205387Y0397443* +X0205292Y03973* +X0204691* +X0204595Y0397443* +X0204128Y0397755* +X020376Y0397828* +X020355Y0398242* +X0203542Y0398365* +X0203761Y0398651* +X0204104Y0399478* +X0204221Y0400365* +X0204104Y0401253* +X0203761Y040208* +X0203216Y040279* +X0202506Y0403335* +X0201679Y0403678* +X0200791Y0403795* +X0199904Y0403678* +X0199077Y0403335* +X0198366Y040279* +X0197821Y040208* +X0197479Y0401253* +X0197471Y0401195* +X0195535* +X0194949Y0401078* +X0194453Y0400747* +X019211Y0398404* +X0191778Y0397907* +X0191662Y0397322* +Y0393965* +X0191721Y0393669* +X0191705Y0393638* +X0191641Y0393584* +Y0389086* +X0190141* +Y0393153* +X0189746Y0392889* +X0189478* +X0188952Y039324* +X0188332Y0393363* +X0187712Y039324* +X0187417Y0393043* +X0187053Y039293* +X0186688Y0393043* +X0186393Y039324* +X0185773Y0393363* +X0185153Y039324* +X0184628Y0392889* +X018436* +X0183834Y039324* +X0183214Y0393363* +X0182594Y039324* +X0182069Y0392889* +X0181717Y0392363* +X0181594Y0391743* +Y0386428* +X0181685Y0385972* +Y0384577* +X0181591Y0384495* +X0180704Y0384378* +X0179877Y0384035* +X0179166Y038349* +X0178621Y038278* +X0178279Y0381953* +X0178162Y0381065* +X0178279Y0380178* +X0178621Y0379351* +X0179166Y0378641* +X0179877Y0378096* +X0180704Y0377753* +X0181023Y0377711* +X0181202Y0377183* +X0179442Y0375423* +X0172216* +X0171592Y0375299* +X0171063Y0374945* +X0159835Y0363717* +X0159482Y0363188* +X0159358Y0362564* +Y0325783* +X0159482Y0325158* +X0159835Y0324629* +X0165134Y0319331* +X0165663Y0318977* +X0166287Y0318853* +X0181902* +X0182526Y0318977* +X0183055Y0319331* +X0185358Y0321634* +X0189267* +X0189759Y0321305* +X0190571Y0321144* +X0195689* +X0196501Y0321305* +X019719Y0321765* +X019765Y0322453* +X0197811Y0323265* +X019765Y0324077* +X019719Y0324766* +X0196501Y0325226* +X0195689Y0325387* +X0190571* +X0189759Y0325226* +X0189267Y0324897* +X0184683* +X0184058Y0324773* +X0183529Y0324419* +X0181226Y0322116* +X0179475* +X0179237Y0322515* +X0170015* +X0169777Y0322116* +X0166963* +X016262Y0326458* +Y0332844* +X0163082Y0333036* +X0169006Y0327112* +X0169535Y0326758* +X017016Y0326634* +X0170763* +X0171255Y0326305* +X0172067Y0326144* +X0177185* +X0177997Y0326305* +X0178686Y0326765* +X0179122Y0327418* +X0179231Y0327519* +X0179621Y0327666* +X0179843Y0327496* +X018067Y0327153* +X0181557Y0327036* +X0182445Y0327153* +X0183272Y0327496* +X0183982Y0328041* +X0184527Y0328751* +X018487Y0329578* +X0184987Y0330465* +X018487Y0331353* +X0184527Y033218* +X0183982Y033289* +X0183272Y0333435* +X0182445Y0333778* +X0181557Y0333895* +X018067Y0333778* +X0179843Y0333435* +X0179642Y0333281* +X017922Y0333703* +X0179146Y0334077* +X0178686Y0334766* +X0177997Y0335226* +X0177185Y0335387* +X0172067* +X0171255Y0335226* +X0170567Y0334766* +X0170107Y0334077* +X0169945Y0333265* +X0170107Y0332453* +X0170567Y0331765* +X0171255Y0331305* +X0172067Y0331143* +X0175947* +X0176172Y0330864* +X0175962Y0330387* +X0172067* +X0171255Y0330226* +X0170806Y0329926* +X016482Y0335912* +Y0360977* +X0173803Y036996* +X0181215* +X0181625Y036946* +X0181594Y0369302* +Y0367761* +X0181094Y0367514* +X0180806Y0367735* +X0179979Y0368078* +X0179091Y0368195* +X0178204Y0368078* +X0177377Y0367735* +X0176666Y036719* +X0176121Y036648* +X0175779Y0365653* +X0175662Y0364765* +X0175779Y0363878* +X0176121Y0363051* +X0176428Y0362651* +X0176182Y0362151* +X0176042* +X0175391Y0362021* +X017484Y0361653* +X0174471Y0361101* +X0174342Y036045* +X0173845* +X0173715Y0361101* +X0173347Y0361653* +X0172795Y0362021* +X0172145Y0362151* +X0171103* +Y035438* +X0172145* +X0172795Y0354509* +X0173347Y0354878* +X0173715Y035543* +X0173845Y035608* +X0174342* +X0174471Y035543* +X017484Y0354878* +X0175391Y0354509* +X0176042Y035438* +X0179625* +X0180276Y0354509* +X0180827Y0354878* +X0181196Y035543* +X0181325Y035608* +Y035693* +X0181546Y035706* +X0181825Y0357138* +X0182224Y0356872* +X0182776Y0356762* +X0183292* +X018416Y0355895* +Y0355841* +X0184109Y0355765* +X0184011Y0355276* +Y0350866* +X0184109Y0350377* +X0184287Y035011* +X0184307Y035001* +X0184727Y0349382* +X0187752Y0346357* +Y0343064* +X0187252Y0342857* +X0185973Y0344135* +X0185345Y0344555* +X0184603Y0344703* +X0183689* +Y034695* +X018356Y0347601* +X0183191Y0348153* +X018264Y0348521* +X0181989Y0348651* +X0178406* +X0177755Y0348521* +X0177204Y0348153* +X0176835Y0347601* +X0176706Y034695* +X0176209* +X0176079Y0347601* +X0175711Y0348153* +X0175159Y0348521* +X0174508Y0348651* +X0170926* +X0170275Y0348521* +X0169723Y0348153* +X0169355Y0347601* +X0169225Y034695* +Y034258* +X0169355Y034193* +X0169723Y0341378* +X0170275Y0341009* +X017078Y0340909* +Y0340279* +X0170751Y0340274* +X0170336Y0339997* +X0170059Y0339581* +X0169962Y0339092* +Y0337439* +X0170059Y0336949* +X0170336Y0336534* +X0170751Y0336257* +X017124Y033616* +X0178012* +X0178346Y0336226* +X0179034* +X0179253Y0335941* +X0179964Y0335396* +X0180791Y0335053* +X0181678Y0334936* +X0182566Y0335053* +X0183393Y0335396* +X0184103Y0335941* +X0184648Y0336651* +X0184991Y0337478* +X0185108Y0338365* +X0185039Y0338883* +X0185513Y0339116* +X0187734Y0336895* +X0188362Y0336476* +X0189103Y0336328* +X0189725* +X0189759Y0336305* +X0190571Y0336143* +X0195689* +X0196501Y0336305* +X0196536Y0336328* +X0199982* +X0200314Y0336106* +X0200964Y0335977* +Y033548* +X0200314Y033535* +X0200245Y0335304* +X0196105* +X0195689Y0335387* +X0190571* +X0189759Y0335226* +X0189071Y0334766* +X0188611Y0334077* +X0188449Y0333265* +X0188611Y0332453* +X0189071Y0331765* +X0189759Y0331305* +X0190571Y0331143* +X0195689* +X0196105Y0331226* +X0199264* +Y0330603* +X01989Y0330305* +X0196105* +X0195689Y0330387* +X0190571* +X0189759Y0330226* +X0189071Y0329766* +X0188611Y0329077* +X0188449Y0328265* +X0188611Y0327453* +X0189071Y0326765* +X0189759Y0326305* +X0190571Y0326144* +X0195689* +X0196105Y0326226* +X0198055* +X0210493Y0313789* +Y0312191* +X021059Y0311701* +X0210867Y0311286* +X0211282Y0311009* +X0211772Y0310912* +X0216181* +X021667Y0311009* +X0217085Y0311286* +X0217363Y0311701* +X021746Y0312191* +Y0313844* +X0217363Y0314334* +X0217085Y0314749* +X0216989Y0314813* +Y0315371* +X0218299Y031668* +X021876Y0316489* +Y0315931* +X0218858Y0315441* +X0219135Y0315026* +X021955Y0314749* +X0220039Y0314652* +X0221586* +Y0309544* +X0221741Y0308764* +X0222183Y0308102* +X0223288Y0306997* +Y0304291* +X0223385Y0303802* +X0223663Y0303387* +X0224078Y030311* +X0224567Y0303012* +X022622* +X0226546Y0302746* +Y0292482* +X0226662Y0291594* +X0227005Y0290767* +X022755Y0290057* +X0232921Y0284686* +Y0280113* +X0233073Y0279347* +X0233507Y0278698* +X0234156Y0278264* +X0234922Y0278112* +X0244607* +X0245373Y0278264* +X0246022Y0278698* +X0246456Y0279347* +X0246608Y0280113* +Y0283668* +X0248031* +X0248046Y0283648* +X0249057Y0282873* +X0250233Y0282385* +X0251496Y0282219* +X0255433* +X0256696Y0282385* +X0257872Y0282873* +X0258883Y0283648* +X0259658Y0284658* +X0260146Y0285835* +X0260312Y0287098* +X0260146Y028836* +X0259658Y0289537* +X0258883Y0290547* +X0257872Y0291323* +X0256696Y029181* +X0255433Y0291976* +X0251496* +X0250233Y029181* +X0249057Y0291323* +X0248046Y0290547* +X0248031Y0290527* +X0245069* +X0244607Y0290619* +X0236688* +X0233404Y0293902* +Y029496* +X0233899Y0295119* +X0234314Y0294842* +X0234803Y0294745* +X0236457* +X0236946Y0294842* +X0237361Y0295119* +X0237638Y0295534* +X0237736Y0296024* +Y0300433* +X0237638Y0300922* +X0237361Y0301337* +X0236946Y0301615* +X0236457Y0301712* +X0234803* +X0234314Y0301615* +X0233899Y0301337* +X0233404Y0301497* +Y0309158* +X0233904Y0309425* +X0234033Y0309339* +X0234523Y0309242* +X0236176* +X0236666Y0309339* +X0236831Y0309449* +X0237331Y0309182* +Y0309035* +X0237264Y0308701* +Y0304291* +X0237362Y0303802* +X0237639Y0303387* +X0238054Y030311* +X0238543Y0303012* +X0240197* +X0240686Y030311* +X0241101Y0303387* +X0241378Y0303802* +X0241476Y0304291* +Y0308701* +X0241448Y0308842* +X0241711Y0309171* +X0241909Y030926* +X0242003Y0309242* +X0243657* +X0244146Y0309339* +X0244561Y0309616* +X0244838Y0310031* +X0244936Y0310521* +Y031493* +X0244869Y0315264* +Y0317666* +X0245414Y0317891* +X0246124Y0318436* +X0246669Y0319146* +X0247011Y0319973* +X0247128Y0320861* +X0247011Y0321748* +X0246669Y0322576* +X0246124Y0323286* +X0246035Y0323354* +Y0324433* +X0247924* +X0248575Y0324563* +X0249127Y0324932* +X0249496Y0325483* +X0249625Y0326134* +Y0329716* +X0249496Y0330367* +X0249127Y0330919* +X0248575Y0331288* +X0247925Y0331417* +Y0331914* +X0248575Y0332043* +X0249127Y0332412* +X0249496Y0332963* +X0249625Y0333614* +Y0337197* +X0249496Y0337848* +X0249127Y0338399* +X0248575Y0338768* +X0247924Y0338897* +X0245124* +X0241097Y0342924* +Y0344536* +X0241Y0345026* +X0240722Y0345441* +X0240307Y0345718* +X0239818Y0345815* +X0238165* +X023784Y0346081* +Y0354846* +Y0354847* +X023772Y035576* +X0237368Y0356612* +X0237247Y0356769* +Y0358904* +X0237137Y0359455* +X0236824Y0359923* +X0236682Y0360018* +Y036062* +X0236824Y0360715* +X0237137Y0361183* +X0237247Y0361734* +Y0362183* +X0234547* +Y0362933* +X0233797* +Y0365573* +X0233289* +X0232738Y0365464* +X023227Y0365151* +X0231958Y0364684* +X0231848Y0364132* +Y0362955* +X0231386Y0362763* +X022928Y0364869* +Y0383116* +X0229677Y0383633* +X0235662* +X0235715Y0383554* +X02358Y0383497* +Y0374218* +X0235967Y0373379* +X0236442Y0372668* +X0238635Y0370475* +X0239346Y037* +X0240185Y0369833* +X0245257* +X0245692Y0369919* +X0247462* +X0247952Y0370017* +X0248366Y0370294* +X0248644Y0370709* +X0248741Y0371198* +Y0372852* +X0248644Y0373341* +X0248366Y0373756* +X0247952Y0374033* +X0247462Y0374131* +X0245692* +X0245257Y0374217* +X0241093* +X0240184Y0375126* +Y0383497* +X0240269Y0383554* +X0240322Y0383633* +X0245257* +X0245692Y0383719* +X0247462* +X0247952Y0383817* +X0248366Y0384094* +X0248644Y0384509* +X0248741Y0384998* +Y0386652* +X0248644Y0387141* +X0248366Y0387556* +X0247952Y0387833* +X0247462Y0387931* +X0245692* +X0245257Y0388017* +X0240228* +X0240126Y0388085* +Y0388686* +X0240269Y0388782* +X0240582Y0389249* +X0240691Y0389801* +Y039025* +X0235293* +Y0389801* +X0235402Y0389249* +X0235715Y0388782* +X0235636Y038826* +X0235386Y0388017* +X023034* +X0229975Y03889* +X022928Y0389806* +Y0411025* +X0229975Y0411931* +X0230462Y0413107* +X0230628Y041437* +X0230462Y0415633* +X0229975Y041681* +X0229282Y0417712* +Y0435273* +X0235502* +X0235559Y0435188* +X0235654Y0435125* +Y0433523* +X0235631Y0433488* +X023547Y0432676* +Y0427558* +X0235631Y0426746* +X0236091Y0426058* +X0236779Y0425598* +X0237591Y0425436* +X0238403Y0425598* +X0239092Y0426058* +X0239552Y0426746* +X0239713Y0427558* +Y0432676* +X0239552Y0433488* +X0239528Y0433523* +Y0434876* +X0239995Y0435188* +X0240091Y0435331* +X0240692* +X0240787Y0435188* +X0241255Y0434876* +X0241347Y0434348* +X0241091Y0434177* +X0240631Y0433488* +X024047Y0432676* +Y0430867* +X0244713* +Y0432676* +X0244552Y0433488* +X0244092Y0434177* +X0243958Y0434266* +X024411Y0434766* +X0244204* +X0244756Y0434876* +X0245224Y0435188* +X0245536Y0435656* +X0245646Y0436207* +Y0436715* +X0243005* +Y0437465* +X0242255* +Y0440165* +X0241807* +X0241255Y0440055* +X0240787Y0439743* +X0240692Y04396* +X0240091* +X0239995Y0439743* +X0239528Y0440055* +X0238976Y0440165* +X0236578* +X0236027Y0440055* +X0235559Y0439743* +X0235502Y0439657* +X0230894* +X0230628Y0439961* +X0230462Y0441223* +X0229975Y04424* +X022928Y0443306* +Y0454833* +X0238498* +X0238569Y0454727* +X0238712Y0454631* +Y045403* +X0238569Y0453935* +X0238257Y0453467* +X0238147Y0452915* +Y0452466* +X0243546* +Y0452915* +X0243436Y0453467* +X0243124Y0453935* +X024308Y0453964* +X0243048Y0454488* +X0243397Y0454833* +X0246986* +X024742Y0454919* +X024919* +X024968Y0455017* +X0250095Y0455294* +X0250372Y0455709* +X0250469Y0456198* +Y0457852* +X0250372Y0458341* +X0250095Y0458756* +X024968Y0459033* +X024919Y0459131* +X024742* +X0246986Y0459217* +X0243042* +X0242656Y0459476* +X0242104Y0459585* +X0239589* +X0239037Y0459476* +X0238651Y0459217* +X022928* +Y0464525* +X0229975Y0465431* +X0230462Y0466607* +X0230624Y0467835* +X0230641Y0467879* +X0231092Y0468182* +X0231404Y0468053* +X0232291Y0467936* +X0233179Y0468053* +X0234006Y0468396* +X0234716Y046894* +X0235261Y0469651* +X0235604Y0470478* +X0235721Y0471365* +X0235604Y0472253* +X0235261Y047308* +X0235065Y0473336* +X0235311Y0473836* +X0248348* +X0248933Y0473952* +X024943Y0474284* +X0254773Y0479628* +X0255236Y0479436* +Y0472972* +X0248874Y0466611* +X0244781* +X0244292Y0466514* +X0243877Y0466237* +X02436Y0465822* +X0243502Y0465332* +Y0463679* +X02436Y0463189* +X0243877Y0462774* +X0244292Y0462497* +X0244781Y04624* +X024919* +X024968Y0462497* +X0250095Y0462774* +X0250372Y0463189* +X0250469Y0463679* +Y046388* +X0257846Y0471257* +X025796Y0471427* +X0258598Y0471496* +X0259909Y0470185* +Y0457314* +X0258659Y0456064* +X025821Y0456285* +X0258221Y0456365* +X0258104Y0457253* +X0257761Y045808* +X0257675Y0458193* +X0257882Y0458744* +X0257948Y0458757* +X0258363Y0459034* +X025864Y0459449* +X0258737Y0459939* +Y0461592* +X025864Y0462081* +X0258363Y0462497* +X0257948Y0462774* +X0257458Y0462871* +X0253049* +X0252559Y0462774* +X0252144Y0462497* +X0251867Y0462081* +X025177Y0461592* +Y0459939* +X0251867Y0459449* +X0252144Y0459034* +X025211Y0458456* +X0251821Y045808* +X0251479Y0457253* +X0251362Y0456365* +X0251479Y0455478* +X0251821Y0454651* +X0252366Y045394* +X0253077Y0453396* +X0253904Y0453053* +X0254791Y0452936* +X0255679Y0453053* +X0256409Y0453355* +X0256721Y0453224* +X0256909Y0453075* +Y0443889* +X0257026Y0443303* +X0257357Y0442807* +X0259862Y0440303* +Y0424667* +X0257357Y0422162* +X0257026Y0421666* +X0256909Y0421081* +Y0408046* +X0253058Y0404195* +X0244834* +X0244249Y0404078* +X0243753Y0403747* +X024141Y0401404* +X0241078Y0400908* +X0240962Y0400322* +Y0396072* +X0241078Y0395486* +X024141Y039499* +X0241856Y0394544* +X0241774Y0394132* +Y0392479* +X0241871Y0391989* +X0242148Y0391574* +X0242563Y0391297* +X0243053Y03912* +X0247462* +X0247952Y0391297* +X0248366Y0391574* +X0248644Y0391989* +X0248741Y0392479* +Y0393832* +X0249241Y0393864* +X0249279Y0393578* +X0249621Y0392751* +X0250166Y039204* +X0250399Y0391862* +Y0391271* +X0250139Y0390881* +X0250042Y0390392* +Y0388739* +X0250139Y0388249* +X0250416Y0387834* +X0250831Y0387557* +X0251321Y038746* +X0253091* +X0253525Y0387373* +X025396Y038746* +X025573* +X0256219Y0387557* +X0256634Y0387834* +X0256911Y0388249* +X0257009Y0388739* +Y0390392* +X0256911Y0390881* +X0256634Y0391297* +X0256219Y0391574* +X025573Y0391671* +X0255336* +X0255274Y0391743* +X0255116Y0392171* +X0255561Y0392751* +X0255904Y0393578* +X0256021Y0394465* +X0255904Y0395353* +X0255561Y039618* +X0255016Y039689* +X0254306Y0397435* +X0253479Y0397778* +X0252591Y0397895* +X0251704Y0397778* +X0250877Y0397435* +X0250166Y039689* +X0249621Y039618* +X0249279Y0395353* +X0249162Y0394465* +X0248679Y0394446* +X0248644Y0394622* +X0248366Y0395037* +X0247952Y0395314* +X0247462Y0395411* +X0245315* +X0244021Y0396705* +Y0399689* +X0245468Y0401136* +X0253691* +X0254277Y0401252* +X0254773Y0401584* +X025952Y0406331* +X0259852Y0406827* +X0259968Y0407413* +Y0411733* +X026043Y0411924* +X0261909Y0410445* +Y0391946* +X0250998Y0381035* +X0248501* +X0248366Y0381237* +X0247952Y0381514* +X0247462Y0381611* +X0243053* +X0242563Y0381514* +X0242148Y0381237* +X0241871Y0380822* +X0241774Y0380332* +Y0378679* +X0241871Y0378189* +X0242148Y0377774* +X0242563Y0377497* +X0243053Y03774* +X0247462* +X0247952Y0377497* +X0248366Y0377774* +X0248501Y0377976* +X0250234* +X0250379Y0377595* +X0250403Y0377476* +X0250139Y0377081* +X0250042Y0376592* +Y0374939* +X0250139Y0374449* +X0250416Y0374034* +X0250831Y0373757* +X0251321Y037366* +X0253091* +X0253525Y0373573* +X0253791* +X0254226Y037366* +X025573* +X0256219Y0373757* +X0256634Y0374034* +X0256911Y0374449* +X0257009Y0374939* +Y0375652* +X0257443Y0376042* +X0257491Y0376036* +X0258379Y0376153* +X0259206Y0376496* +X0259916Y0377041* +X0260461Y0377751* +X0260804Y0378578* +X0260921Y0379465* +X0260804Y0380353* +X0260461Y038118* +X0259916Y038189* +X0259206Y0382435* +X0258379Y0382778* +X0257844Y0382848* +X0257665Y0383376* +X026452Y0390231* +X0264851Y0390727* +X0264968Y0391313* +Y0402822* +X0265468Y0403069* +X0265948Y04027* +X0266886Y0402312* +X0267891Y0402179* +X0268897Y0402312* +X0269834Y04027* +X0270639Y0403317* +X0271257Y0404122* +X0271645Y040506* +X0271777Y0406065* +X0271645Y0407071* +X0271257Y0408008* +X0270639Y0408813* +X0269931Y0409357* +Y0410161* +X0269775Y0410942* +X0269333Y0411603* +X026813Y0412806* +X0268309Y0413334* +X0268897Y0413412* +X0269834Y04138* +X0270442Y0414266* +X0270986Y0414094* +X0271007Y0413985* +X0271449Y0413323* +X0275337Y0409436* +X0275305Y0408937* +X0275144Y0408813* +X0274526Y0408008* +X0274138Y0407071* +X0274005Y0406065* +X0274138Y040506* +X0274526Y0404122* +X0275144Y0403317* +X0275948Y04027* +X0276886Y0402312* +X0277891Y0402179* +X0278897Y0402312* +X0279834Y04027* +X0280639Y0403317* +X0281257Y0404122* +X0281645Y040506* +X0281777Y0406065* +X0281645Y0407071* +X0281257Y0408008* +X0280639Y0408813* +X027993Y0409357* +Y0409765* +X0279775Y0410546* +X0279333Y0411207* +X0277684Y0412857* +X0277959Y0413288* +X0278897Y0413412* +X0279834Y04138* +X0280399Y0414234* +X0280899Y0413987* +Y0413518* +X0281055Y0412738* +X0281497Y0412076* +X0284977Y0408596* +X0284526Y0408008* +X0284138Y0407071* +X0284005Y0406065* +X0284138Y040506* +X0284526Y0404122* +X0285143Y0403317* +X0285948Y04027* +X0286886Y0402312* +X0287474Y0402234* +X0287653Y0401706* +X0284749Y0398803* +X0284307Y0398142* +X0284152Y0397361* +Y0387765* +X0284241Y038732* +X0284138Y0387071* +X0284005Y0386065* +X0284138Y038506* +X0284526Y0384122* +X0285143Y0383317* +X0285948Y03827* +X0286886Y0382312* +X0287891Y0382179* +X0288897Y0382312* +X0289834Y03827* +X0290639Y0383317* +X0291257Y0384122* +X0291645Y038506* +X0291777Y0386065* +X0291645Y0387071* +X0291257Y0388008* +X0290639Y0388813* +X0289834Y0389431* +X0288897Y0389819* +X028823Y0389907* +Y0396516* +X0294286Y0402572* +X0294658Y0403129* +X0294863Y0403208* +X0295039Y040324* +X029524Y0403244* +X0295948Y04027* +X0296886Y0402312* +X029747Y0402235* +X0297649Y0401707* +X0294449Y0398507* +X0294007Y0397846* +X0293852Y0397065* +Y0388065* +X0294007Y0387285* +X0294143Y0387083* +X0294138Y0387071* +X0294005Y0386065* +X0294138Y038506* +X0294526Y0384122* +X0294895Y0383642* +X0294648Y0383142* +X0292239* +X0291653Y0383026* +X0291157Y0382694* +X0283485Y0375022* +X0283023Y0375213* +Y0378327* +X0282894Y0378978* +X0282525Y0379529* +X0281974Y0379898* +X0281323Y0380027* +X027993* +Y0382774* +X0280639Y0383317* +X0281257Y0384122* +X0281645Y038506* +X0281777Y0386065* +X0281645Y0387071* +X0281257Y0388008* +X0280639Y0388813* +X0279834Y0389431* +X0278897Y0389819* +X0277891Y0389951* +X0276886Y0389819* +X0275948Y0389431* +X0275144Y0388813* +X0274526Y0388008* +X0274138Y0387071* +X0274005Y0386065* +X0274138Y038506* +X0274526Y0384122* +X0275144Y0383317* +X0275852Y0382774* +Y0379152* +X0275804Y0379133* +X0275352Y0379069* +X0275045Y0379529* +X0274493Y0379898* +X0273843Y0380027* +X027026* +X0269609Y0379898* +X0269057Y0379529* +X0268689Y0378978* +X026856Y0378327* +Y0374487* +X0268059Y037422* +X0267919Y0374314* +X026743Y0374411* +X0265975* +Y0372305* +X0265225* +Y0371555* +X0261742* +Y0371479* +X0261816Y0371105* +X0261541Y0370604* +X0259496* +X0259162Y0370671* +X0254753* +X0254263Y0370574* +X0253848Y0370297* +X0253571Y0369882* +X0253474Y0369392* +Y0367739* +X0253571Y0367249* +X0253848Y0366834* +X0254263Y0366557* +X0254753Y036646* +X0259162* +X0259496Y0366526* +X0261541* +X0261816Y0366026* +X0261742Y0365652* +Y0363998* +X0261839Y0363509* +X0262116Y0363094* +X0262531Y0362817* +X026302Y0362719* +X0266029* +X0266221Y0362258* +X0264358Y0360395* +X0246858* +X0246272Y0360278* +X0245776Y0359947* +X024165Y0355821* +X0241318Y0355325* +X0241202Y0354739* +Y0353843* +X0241Y0353708* +X0240723Y0353293* +X0240626Y0352804* +Y0348394* +X0240723Y0347905* +X0241Y034749* +X0241415Y0347213* +X0241905Y0347116* +X0243558* +X0244048Y0347213* +X0244463Y034749* +X024474Y0347905* +X0244837Y0348394* +Y0352804* +X024474Y0353293* +X0244463Y0353708* +X0244434Y0354279* +X0247491Y0357336* +X0264991* +X0265577Y0357452* +X0266073Y0357784* +X0276445Y0368156* +X0283511* +X0284096Y0368272* +X0284593Y0368604* +X0294072Y0378083* +X0310564* +X0311149Y03782* +X0311646Y0378531* +X0315425Y0382311* +X0315757Y0382807* +X0315874Y0383393* +Y0394293* +X0315936Y0394341* +X0316373Y0394478* +X0344562Y036629* +Y0361685* +X0344062Y0361439* +X0343806Y0361635* +X0342979Y0361978* +X0342091Y0362095* +X0341204Y0361978* +X0340665Y0361755* +X034022Y03622* +X0339724Y0362531* +X0339139Y0362648* +X033537* +X0335349Y036268* +X0335616Y036318* +X0337323* +X0337973Y0363309* +X0338525Y0363678* +X0338894Y036423* +X0339023Y036488* +Y0366315* +X0335531* +Y0367065* +X0334782* +Y0370951* +X033374* +X0333089Y0370821* +X0332538Y0370453* +X0332169Y0369901* +X033204Y036925* +X0331543* +X0331414Y0369901* +X0331045Y0370453* +X0330493Y0370821* +X0330307Y0370858* +X0330099Y037141* +X0330361Y0371751* +X0330704Y0372578* +X0330821Y0373465* +X0330704Y0374353* +X0330361Y037518* +X0329816Y037589* +X0329106Y0376435* +X0328279Y0376778* +X0327391Y0376895* +X0326504Y0376778* +X0325677Y0376435* +X0324966Y037589* +X0324421Y037518* +X0324345Y0374995* +X0317789* +X0317203Y0374878* +X0316707Y0374547* +X0313745Y0371585* +X0313504Y0371637* +X0313227Y0372192* +X0313304Y0372378* +X0313421Y0373265* +X0313304Y0374153* +X0312961Y037498* +X0312416Y037569* +X0311706Y0376235* +X0310879Y0376578* +X0309991Y0376695* +X0309104Y0376578* +X0308277Y0376235* +X0307566Y037569* +X030734Y0375395* +X0296935* +X0296349Y0375278* +X0295853Y0374947* +X029231Y0371404* +X0291978Y0370907* +X0291862Y0370322* +Y0360811* +X0291409Y0360721* +X0290858Y0360353* +X0290489Y0359801* +X0290359Y035915* +Y035478* +X0290489Y035413* +X0290858Y0353578* +X0291409Y0353209* +X029206Y035308* +X0295574* +X0297117Y0351536* +X0297104Y0351399* +X0296876Y0351059* +X0296306* +X0296079Y0351399* +X0295527Y0351768* +X0294876Y0351897* +X0290506* +X0289856Y0351768* +X0289304Y0351399* +X0288935Y0350848* +X0288806Y0350197* +Y0346614* +X0288935Y0345964* +X0289304Y0345412* +X0289856Y0345043* +X0290506Y0344914* +Y0344417* +X0289856Y0344287* +X0289304Y0343919* +X0288935Y0343367* +X0288806Y0342717* +Y0341675* +X0292691* +Y0340925* +X0293441* +Y0337434* +X0294846* +X0294907Y0337365* +X0295085Y0336965* +X0294371Y0336251* +X029166* +X0291378Y0336195* +X0288015* +X028192Y034229* +Y0348826* +X0281803Y0349411* +X0281472Y0349907* +X0280144Y0351236* +X0279647Y0351567* +X0279062Y0351684* +X0273579* +X0272994Y0351567* +X0272498Y0351236* +X0270815Y0349553* +X0270642Y0349587* +X026706* +X0266409Y0349458* +X0265858Y0349089* +X0265692Y0348841* +X0265091* +X0264925Y0349089* +X0264373Y0349458* +X0263723Y0349587* +X026014* +X0259489Y0349458* +X0258938Y0349089* +X0258569Y0348537* +X025844Y0347886* +X0257943* +X0257814Y0348537* +X0257445Y0349089* +X0256893Y0349458* +X0256242Y0349587* +X025266* +X0252009Y0349458* +X0251458Y0349089* +X0251089Y0348537* +X0250959Y0347886* +Y0343516* +X0251089Y0342866* +X0251458Y0342314* +X0252009Y0341946* +X025266Y0341816* +X0252822* +Y0331206* +X0252938Y033062* +X025327Y0330124* +X0258527Y0324867* +X0258477Y0324617* +Y0317766* +X0258587Y0317215* +X0258899Y0316748* +X0259366Y0316436* +X0259916Y0316327* +X0264011* +X0264562Y0316436* +X0265029Y0316748* +X0265341Y0317215* +X0265451Y0317766* +Y0324617* +X0265341Y0325167* +X0265029Y0325634* +X0264562Y0325946* +X0264011Y0326056* +X0261664* +X0255881Y0331839* +Y0341816* +X0256242* +X0256893Y0341946* +X0257445Y0342314* +X0257814Y0342866* +X0257943Y0343516* +X025844* +X0258569Y0342866* +X0258938Y0342314* +X0259489Y0341946* +X026014Y0341816* +X0261989* +X0262141Y0341316* +X0262125Y0341305* +X0261752Y0340747* +X0261621Y0340089* +Y033379* +X0261752Y0333131* +X0262125Y0332573* +X0262683Y03322* +X0263342Y0332069* +X0268917* +X0271305Y0329681* +Y0326868* +X0271259Y0326638* +X0271276Y0326556* +X0270985Y0326056* +X0268972* +X0268421Y0325946* +X0267954Y0325634* +X0267642Y0325167* +X0267532Y0324617* +Y0317766* +X0267642Y0317215* +X0267954Y0316748* +X0268421Y0316436* +X0268972Y0316327* +X0273066* +X0273617Y0316436* +X0274084Y0316748* +X0274396Y0317215* +X0274506Y0317766* +Y0324617* +X0274485Y0324722* +X0274802Y0325108* +X0283342* +X0291867Y0316584* +X0292363Y0316252* +X0292948Y0316136* +X030566* +Y031428* +X0305789Y031363* +X0306157Y0313078* +X0306422Y0312901* +X0306331Y0312483* +X030628Y0312395* +X0305693Y0312278* +X0305168Y0311927* +X0304817Y0311401* +X0304693Y0310781* +X0304817Y0310161* +X0305014Y0309866* +X0305126Y0309502* +X0305014Y0309137* +X0304817Y0308842* +X0304693Y0308222* +X0304817Y0307602* +X0305168Y0307077* +Y0306809* +X0304817Y0306283* +X0304693Y0305663* +X0304817Y0305043* +X0305014Y0304748* +X0305102Y0304463* +X0304871Y0304058* +X0304371Y0303978* +X0303906Y0304335* +X0303079Y0304678* +X0302191Y0304795* +X0301304Y0304678* +X0300477Y0304335* +X0299766Y030379* +X0299221Y030308* +X0298879Y0302253* +X0298874Y0302213* +X0298374Y0302246* +Y0302892* +X0294882* +Y0303642* +X0294132* +Y0307527* +X0293091* +X029244Y0307398* +X0291888Y0307029* +X029152Y0306477* +X029139Y0305827* +X0290893* +X0290764Y0306477* +X0290395Y0307029* +X0289844Y0307398* +X0289193Y0307527* +X028561* +X028496Y0307398* +X0284458Y0307062* +X0280552* +X0280536Y0307083* +X0279526Y0307858* +X0278349Y0308346* +X0277087Y0308512* +X027315* +X0271887Y0308346* +X027071Y0307858* +X02697Y0307083* +X0268924Y0306072* +X0268437Y0304896* +X0268271Y0303633* +X0268437Y030237* +X0268924Y0301194* +X02697Y0300183* +X027071Y0299408* +X0271887Y0298921* +X027315Y0298754* +X0277087* +X0278349Y0298921* +X0279526Y0299408* +X0280536Y0300183* +X0280552Y0300204* +X0283972* +Y0298365* +X028391Y0298051* +Y0293681* +X0284039Y029303* +X0284408Y0292479* +X028496Y029211* +X028561Y0291981* +X0289193* +X0289844Y029211* +X0290395Y0292479* +X0290764Y029303* +X0290893Y0293681* +X029139* +X029152Y029303* +X0291888Y0292479* +X029244Y029211* +X0293091Y0291981* +X0294132* +Y0295866* +X0295632* +Y0291981* +X0296673* +X0297324Y029211* +X0297876Y0292479* +X0298244Y029303* +X0298374Y0293681* +Y0294514* +X0298874Y0294621* +X0299114Y0294261* +X0299257Y0294166* +Y0293565* +X0299114Y0293469* +X0298802Y0293002* +X0298692Y029245* +Y0292001* +X0304091* +Y029245* +X0303981Y0293002* +X0303668Y0293469* +X0303526Y0293565* +Y0294166* +X0303668Y0294261* +X0303981Y0294729* +X0304091Y0295281* +Y0296243* +X0304492Y0296329* +X0304793Y0295929* +X0304693Y0295427* +X0304817Y0294807* +X0305168Y0294281* +Y0294013* +X0304817Y0293488* +X0304693Y0292868* +X0304817Y0292248* +X0305014Y0291953* +X0305126Y0291588* +X0305014Y0291224* +X0304817Y0290929* +X0304693Y0290309* +X0304817Y0289689* +X0305168Y0289163* +Y0288895* +X0304817Y028837* +X0304693Y028775* +X0304817Y028713* +X0305168Y0286604* +X0305693Y0286253* +X0306313Y0286129* +X0311628* +X0312084Y028622* +X0325025* +X0326766Y0284479* +X0327262Y0284148* +X0327848Y0284031* +X0333806* +X0336753Y0281084* +X0337249Y0280752* +X0337835Y0280636* +X0341148* +X0341734Y0280752* +X034223Y0281084* +X0343657Y0282511* +X0343677Y0282495* +X0344504Y0282153* +X0345391Y0282036* +X0346279Y0282153* +X0347106Y0282495* +X0347816Y028304* +X0348361Y0283751* +X0348704Y0284578* +X0348821Y0285465* +X0348704Y0286353* +X0348386Y028712* +X0348562Y0287586* +X0348578Y028762* +X0353223* +X0353808Y0287737* +X0354304Y0288068* +X0355991Y0289755* +X0356181Y0289717* +X0359764* +X0360414Y0289846* +X0360966Y0290215* +X0361335Y0290767* +X0361464Y0291417* +Y0294435* +X0366928* +X0367513Y0294552* +X0368009Y0294883* +X0371573Y0298447* +X0371797Y0298782* +X037343* +X0373762Y0298509* +Y0294133* +X0362197Y0282569* +X0352004* +X0351419Y0282452* +X0350922Y0282121* +X0347796Y0278995* +X0331525* +X0328673Y0281847* +X0328177Y0282178* +X0327591Y0282295* +X0285568* +X0284121Y0283742* +Y0289282* +X0284004Y0289867* +X0283673Y0290363* +X028042Y0293616* +X0279924Y0293948* +X0279339Y0294064* +X0268699* +X0263485Y0299277* +X0262989Y0299609* +X0262404Y0299726* +X0259038* +X025898Y0299898* +X0258915Y0300225* +X0259658Y0301194* +X0260146Y030237* +X0260213Y0302883* +X0246716* +X0246784Y030237* +X0247271Y0301194* +X0248014Y0300225* +X0247949Y0299898* +X0247891Y0299726* +X0245216* +Y0300433* +X0245119Y0300922* +X0244841Y0301337* +X0244426Y0301615* +X0243937Y0301712* +X0242284* +X0241794Y0301615* +X0241379Y0301337* +X0241102Y0300922* +X0241005Y0300433* +Y0296024* +X0241102Y0295534* +X0241379Y0295119* +X0241794Y0294842* +X0242284Y0294745* +X0243937* +X0244426Y0294842* +X0244841Y0295119* +X0245119Y0295534* +X0245216Y0296024* +Y0296667* +X026177* +X0266984Y0291453* +X026748Y0291122* +X0268065Y0291005* +X0269544* +X0269603Y0290833* +X0269667Y0290505* +X0268924Y0289537* +X0268437Y028836* +X026837Y0287848* +X0275118* +Y0287098* +X0275868* +Y0282219* +X0277087* +X0278349Y0282385* +X0279526Y0282873* +X0280536Y0283648* +X0280589Y0283716* +X0281062Y0283555* +Y0283108* +X0281178Y0282523* +X028151Y0282027* +X0283853Y0279684* +X0284349Y0279352* +X0284934Y0279236* +X0326958* +X0328937Y0277257* +X0328746Y0276795* +X0275325* +X0270973Y0281147* +X0270477Y0281478* +X0269891Y0281595* +X0260191* +X0259606Y0281478* +X025911Y0281147* +X0254758Y0276795* +X0232225* +X0224678Y0284342* +Y0289647* +X0224561Y0290232* +X022423Y0290728* +X0223183Y0291775* +Y0294985* +X0223385Y0295119* +X0223662Y0295534* +X0223759Y0296024* +Y0300433* +X0223662Y0300922* +X0223385Y0301337* +X022297Y0301615* +X022248Y0301712* +X0220827* +X0220337Y0301615* +X0219922Y0301337* +X0219645Y0300922* +X0219548Y0300433* +Y0296024* +X0219645Y0295534* +X0219922Y0295119* +X0220124Y0294985* +Y0291142* +X0220241Y0290556* +X0220572Y029006* +X0221619Y0289014* +Y0283708* +X0221735Y0283123* +X0222067Y0282627* +X023051Y0274184* +X0231006Y0273852* +X0231591Y0273736* +X0255391* +X0255977Y0273852* +X0256473Y0274184* +X0260825Y0278536* +X0269258* +X027361Y0274184* +X0274106Y0273852* +X0274691Y0273736* +X0368491* +X0369077Y0273852* +X0369573Y0274184* +X0378373Y0282984* +X0378704Y028348* +X0378821Y0284065* +Y0321851* +X0378704Y0322436* +X0378373Y0322933* +X0374888Y0326418* +Y0336396* +X0374771Y0336981* +X037444Y0337477* +X0369817Y03421* +X0369321Y0342431* +X0368736Y0342547* +X0368566* +X0368466Y0343047* +X0368834Y03432* +X0369639Y0343817* +X0370113Y0344435* +X0371606* +Y0342634* +X0371735Y0341983* +X0372104Y0341431* +X0372656Y0341063* +X0373306Y0340933* +X0377676* +X0378327Y0341063* +X0378879Y0341431* +X0379247Y0341983* +X0379377Y0342634* +Y0346217* +X0379247Y0346867* +X0378879Y0347419* +X0378327Y0347787* +X0377676Y0347917* +Y0348414* +X0378327Y0348543* +X0378879Y0348912* +X0379247Y0349464* +X0379377Y0350114* +Y0353697* +X0379247Y0354348* +X0378879Y0354899* +X0378447Y0355188* +X0378415Y0355316* +Y0355614* +X0378447Y0355743* +X0378879Y0356031* +X0379247Y0356583* +X0379377Y0357234* +Y0360817* +X0379247Y0361467* +X0378879Y0362019* +X0378327Y0362387* +X0377676Y0362517* +Y0363014* +X0378327Y0363143* +X0378879Y0363512* +X0379247Y0364064* +X0379377Y0364714* +Y0368297* +X0379247Y0368948* +X0378879Y0369499* +X0378327Y0369868* +X0377676Y0369997* +X0373306* +X0372656Y0369868* +X0372104Y0369499* +X0371735Y0368948* +X0371606Y0368297* +Y0364783* +X036937Y0362547* +X0368566* +X0368466Y0363048* +X0368834Y03632* +X0369639Y0363818* +X0370257Y0364622* +X0370645Y036556* +X0370777Y0366565* +X0370645Y0367571* +X0370257Y0368508* +X0369639Y0369313* +X0368834Y0369931* +X0367897Y0370319* +X0366891Y0370451* +X0365886Y0370319* +X0364948Y0369931* +X0364143Y0369313* +X0363822Y0368895* +X0363025* +X035982Y03721* +X0359324Y0372431* +X0358739Y0372548* +X0358566* +X0358466Y0373047* +X0358834Y03732* +X0359639Y0373817* +X0360257Y0374622* +X0360645Y037556* +X0360777Y0376565* +X0360645Y0377571* +X0360257Y0378508* +X0360154Y0378642* +X0361626Y0380113* +X0361957Y0380609* +X0362073Y0381194* +Y0382932* +X0362825Y0383683* +X0366479* +X0367064Y03838* +X036756Y0384131* +X0369209Y038578* +X0372723* +X0373374Y0385909* +X0373925Y0386278* +X0374294Y038683* +X0374423Y038748* +Y039185* +X0374294Y0392501* +X0373925Y0393053* +X0373374Y0393421* +X0372755Y0393545* +Y039766* +X037343* +X0373919Y0397757* +X0374334Y0398034* +X0374611Y0398449* +X0374709Y0398939* +Y0400592* +X0374611Y0401082* +X0374334Y0401497* +X0373919Y0401774* +X037343Y0401871* +X0369021* +X0368531Y0401774* +X0368116Y0401497* +X0367981Y0401295* +X0366249* +X0366104Y0401676* +X036608Y0401795* +X0366344Y0402189* +X0366441Y0402679* +Y0402755* +X0362958* +Y0403506* +X0362208* +Y0405611* +X0360753* +X0360734Y0405607* +X0360428Y0405858* +X0360311Y0406444* +X035998Y040694* +X0349021Y0417899* +Y0436032* +X0360225Y0447236* +X0370748* +X0371334Y0447352* +X037183Y0447684* +X0374173Y0450027* +X0374504Y0450523* +X0374621Y0451109* +Y0527453* +X0374504Y0528038* +X0374173Y0528534* +X037023Y0532477* +Y0536956* +X0370114Y0537541* +X0369782Y0538037* +X0364106Y0543714* +X0364204Y0543952* +X0364321Y0544839* +X0364204Y0545727* +X0363861Y0546554* +X0363316Y0547264* +X0362606Y0547809* +X0361779Y0548152* +X0360891Y0548269* +X0360004Y0548152* +X0359177Y0547809* +X0358466Y0547264* +X0357921Y0546554* +X0357579Y0545727* +X0357462Y0544839* +X0357579Y0543952* +X0357921Y0543124* +X0358466Y0542414* +X0359177Y0541869* +X0360004Y0541527* +X0360891Y054141* +X0361779Y0541527* +X0361912Y0541582* +X0367171Y0536323* +Y0531843* +X0367288Y0531258* +X0367619Y0530762* +X0371562Y0526819* +Y0451742* +X0370115Y0450295* +X0359591* +X0359006Y0450178* +X035851Y0449847* +X034641Y0437747* +X0346078Y0437251* +X0345962Y0436665* +Y0417265* +X0346078Y041668* +X034641Y0416184* +X0357369Y0405225* +Y0401911* +X0357485Y0401325* +X0357817Y0400829* +X0358157Y0400489* +X0357826Y0400113* +X0357406Y0400435* +X0356579Y0400778* +X0355691Y0400895* +X0354804Y0400778* +X0353977Y0400435* +X0353266Y039989* +X0352721Y039918* +X0352379Y0398353* +X0352262Y0397465* +Y0393479* +X0352206Y0393197* +Y0389614* +X0352335Y0388964* +X0352704Y0388412* +X0353256Y0388043* +X0353906Y0387914* +Y0387417* +X0353256Y0387287* +X0352704Y0386919* +X0352335Y0386367* +X0352206Y0385717* +Y0382134* +X0352335Y0381483* +X0352704Y0380931* +X0352707Y0380904* +X0350561Y0378758* +X0332921Y0396399* +Y0401451* +X0332804Y0402036* +X0332473Y0402532* +X0328873Y0406131* +Y0414123* +X0328757Y0414708* +X0328426Y0415204* +X0325873Y0417756* +Y0425474* +X0328426Y0428026* +X0328489Y0428121* +X0328989Y0427969* +Y0424784* +X0329118Y0424133* +X0329487Y0423581* +X0330038Y0423212* +X0330689Y0423083* +Y0422586* +X0330038Y0422457* +X0329487Y0422088* +X0329118Y0421536* +X0328989Y0420886* +Y0417303* +X0329118Y0416652* +X0329487Y0416101* +X0330038Y0415732* +X0330689Y0415603* +X0333862* +Y0411086* +X0333804Y0411078* +X0332977Y0410735* +X0332266Y041019* +X0331721Y040948* +X0331379Y0408653* +X0331262Y0407765* +X0331379Y0406878* +X0331721Y0406051* +X0332266Y040534* +X0332977Y0404796* +X0333804Y0404453* +X0334691Y0404336* +X0335579Y0404453* +X0336406Y0404796* +X0336662Y0404992* +X0337162Y0404745* +Y0399209* +X0337279Y0398322* +X0337621Y0397495* +X0338166Y0396784* +X0338877Y0396239* +X0339704Y0395897* +X0340591Y039578* +X0341479Y0395897* +X0342306Y0396239* +X0342562Y0396436* +X0343062Y0396189* +Y0394965* +X0343144Y0394552* +X0342979Y0394153* +X0342862Y0393265* +X0342979Y0392378* +X0343321Y0391551* +X0343866Y0390841* +X0344577Y0390296* +X0345404Y0389953* +X0346291Y0389836* +X0347179Y0389953* +X0348006Y0390296* +X0348716Y0390841* +X0349261Y0391551* +X0349604Y0392378* +X0349721Y0393265* +X0349604Y0394153* +X0349261Y039498* +X0348716Y039569* +X0348006Y0396235* +X0347179Y0396578* +X0346291Y0396695* +X0346121Y0396844* +Y0411725* +X0346004Y041231* +X0345673Y0412806* +X0344921Y0413558* +Y0438232* +X0358125Y0451436* +X0363591* +X0364177Y0451552* +X0364673Y0451884* +X0369673Y0456884* +X0370004Y045738* +X0370121Y0457965* +Y0525708* +X0370004Y0526294* +X0369673Y052679* +X0361998Y0534465* +Y0536087* +X0361881Y0536672* +X036155Y0537168* +X0356321Y0542397* +Y0549518* +X0356204Y0550103* +X0355873Y0550599* +X0346954Y0559518* +X0347001Y0559632* +Y0563115* +X034426* +Y0562866* +X0343797Y0562674* +X0339885Y0566587* +X0339388Y0566919* +X0338803Y0567035* +X0335805* +Y0567691* +X0335768Y056788* +X033622Y0568169* +X0336609Y0567909* +X033726Y056778* +X0338301* +Y0570915* +X033556* +Y056948* +X0335597Y0569291* +X0335145Y0569002* +X0334756Y0569262* +X0334105Y0569391* +X0330522* +X0329872Y0569262* +X032932Y0568893* +X0328951Y0568342* +X0328822Y0567691* +X0328325* +X0328196Y0568342* +X0327836Y056888* +X0327852Y0568963* +X0327999Y056938* +X0328223* +X0328873Y0569509* +X0329425Y0569878* +X0329794Y057043* +X0329923Y057108* +Y0572515* +X0326431* +Y0574015* +X0329923* +Y057545* +X0329847Y0575836* +X0330192Y0576336* +X0340476* +X0340735Y057601* +X0340534Y0575551* +X0339801* +Y056778* +X0340843* +X0341493Y0567909* +X0342045Y0568278* +X0342413Y056883* +X0342543Y056948* +X034304* +X0343169Y056883* +X0343538Y0568278* +X0344089Y0567909* +X0344668Y0567794* +X0344761Y0567597* +X0344798Y056728* +X0344758Y0567253* +X0344389Y0566701* +X034426Y056605* +Y0564615* +X0347751* +Y0563865* +X0348501* +Y055998* +X0349542* +X0350193Y0560109* +X0350745Y0560478* +X0351114Y056103* +X0351243Y056168* +X035174* +X0351869Y056103* +X0352238Y0560478* +X0352789Y0560109* +X035344Y055998* +X0357023* +X0357674Y0560109* +X0358225Y0560478* +X0358594Y056103* +X0358723Y056168* +Y0562001* +X0359221Y0562156* +X0359772Y0561788* +X0360423Y0561658* +Y0561162* +X0359772Y0561032* +X0359221Y0560664* +X0358852Y0560112* +X0358723Y0559461* +Y0555878* +X0358852Y0555228* +X0359221Y0554676* +X0359772Y0554308* +X0360423Y0554178* +X0363937* +X0365393Y0552722* +Y0551088* +X036551Y0550503* +X0365841Y0550007* +X0367528Y054832* +X036749Y054813* +Y0544547* +X036762Y0543896* +X0367988Y0543345* +X036854Y0542976* +X0369191Y0542847* +X0372705* +X0375762Y0539789* +Y0449899* +X0372058Y0446195* +X0361691* +X0361106Y0446078* +X036061Y0445747* +X035071Y0435847* +X0350378Y0435351* +X0350262Y0434765* +Y0419365* +X0350378Y041878* +X035071Y0418284* +X036151Y0407484* +X0362006Y0407152* +X0362591Y0407036* +X0372821* +X0376062Y0403795* +Y0384899* +X0371206Y0380043* +X0370744Y0380234* +Y0380418* +X0363039* +Y0372713* +X0370744* +Y0375255* +X0378673Y0383184* +X0379004Y038368* +X0379121Y0384265* +Y0404428* +X0379004Y0405014* +X0378673Y040551* +X0374536Y0409647* +X037404Y0409978* +X0373454Y0410095* +X0363225* +X0353321Y0419999* +Y0434132* +X0362325Y0443136* +X0372691* +X0373277Y0443252* +X0373773Y0443584* +X0378373Y0448184* +X0378704Y044868* +X0378821Y0449265* +Y0540423* +X0378704Y0541008* +X0378373Y0541504* +X0375261Y0544616* +Y054813* +X0375132Y054878* +X0374763Y0549332* +X0374211Y0549701* +X0373561Y054983* +Y0550327* +X0374211Y0550456* +X0374763Y0550825* +X0375132Y0551377* +X0375261Y0552027* +Y055561* +X0375132Y0556261* +X0374763Y0556812* +X0374473Y0557006* +X0374501Y0557589* +X0374816Y0557799* +X0375178Y0558341* +X0375306Y0558981* +Y0562425* +X0375178Y0563064* +X0374816Y0563606* +X0374274Y0563969* +X0373635Y0564096* +X0372523* +X037244Y0564515* +X0372108Y0565011* +X0365993Y0571126* +Y0573961* +X0365864Y0574612* +X0365495Y0575164* +X0364944Y0575532* +X0364293Y0575662* +Y0576158* +X0364944Y0576288* +X0365495Y0576656* +X0365864Y0577208* +X0365993Y0577859* +Y05789* +X0362108* +Y05804* +X0365993* +Y0581441* +X0365864Y0582092* +X0365815Y0582165* +X0366082Y0582665* +X03694* +X0373493Y0578572* +X0373286Y0578072* +X0371777* +Y0575429* +X0375306* +Y0576053* +X0375805Y057626* +X0380227Y0571839* +Y0437844* +X0379727Y043773* +X0378024Y0439185* +X0376036Y0440403* +X0373882Y0441295* +X0371616Y0441839* +X0369291Y0442022* +X0366967Y0441839* +X03647Y0441295* +X0362546Y0440403* +X0360559Y0439185* +X0358786Y0437671* +X0357272Y0435898* +X0356054Y043391* +X0355162Y0431756* +X0354617Y042949* +X0354434Y0427165* +X0354617Y0424841* +X0355162Y0422574* +X0356054Y0420421* +X0357272Y0418433* +X0358786Y041666* +X0360559Y0415146* +X0362546Y0413928* +X03647Y0413036* +X0366967Y0412492* +X0369291Y0412309* +X0371616Y0412492* +X0373882Y0413036* +X0376036Y0413928* +X0378024Y0415146* +X0379727Y04166* +X0380227Y0416487* +Y0282469* +X03694Y0271642* +X0164676* +X0153849Y0282469* +Y0374733* +X0154349Y0375001* +X0154595Y0374836* +X0155361Y0374684* +X0160241* +Y0383647* +X0155361* +X0154595Y0383495* +X0154349Y038333* +X0153849Y0383597* +Y0387784* +X0157786Y0391721* +X0176487* +X0180424Y0395657* +X0187313* +X0201093Y0409437* +Y0420264* +X0202077Y0421248* +Y043798* +X0195187Y044487* +X0164676* +X0153849Y0455697* +Y0572823* +X0163691Y0582665* +X0246221* +G37* +G36* +X061531Y0403909D02* +X0615222Y0403464D01* +Y0401711* +X0611873Y0398363* +X061138Y0397624* +X0611206Y0396752* +Y038891* +X061138Y0388038* +X0611873Y0387299* +X0615226Y0383947* +X0615368Y0383734* +X0616084Y0383256* +X061615Y0383243* +X0616227Y0383191* +X0617099Y0383017* +X0619488* +X0619841Y0383087* +X0622047* +X0622892Y0383256* +X0623608Y0383734* +X0624087Y038445* +X0624255Y0385295* +X0624087Y038614* +X0624015Y0386248* +X0624316Y0386697* +X0624423Y0386675* +X0624592Y0386422* +X0625041Y0386122* +X0625571Y0386017* +X0632303* +X0632833Y0386122* +X0633282Y0386422* +X0633583Y0386872* +X0633688Y0387402* +Y0390394* +X0633583Y0390924* +X0633282Y0391373* +X0632833Y0391673* +X0632303Y0391778* +X0625571* +X0625041Y0391673* +X0624997Y0391644* +X0624915Y0391726* +X0624258Y0392164* +X0623484Y0392318* +X0622917* +X0622892Y0392335* +X0622047Y0392503* +X0616929* +X0616512Y039242* +X0616046Y0392781* +Y0392809* +X0616512Y039317* +X0616929Y0393088* +X0622047* +X0622892Y0393255* +X0623608Y0393734* +X0624087Y039445* +X0624255Y0395295* +X0624087Y039614* +X0623608Y0396856* +X0622892Y0397335* +X0622173Y0397478* +X0622148Y0397505* +X0621997Y039782* +X0621969Y0398003* +X0622241Y0398411* +X0622277Y039859* +X0622787* +X0622823Y0398405* +X0623214Y039782* +X0623799Y0397429* +X0624488Y0397292* +X062528* +Y0401279* +X062728* +Y0397292* +X0628071* +X0628761Y0397429* +X0629346Y039782* +X0629736Y0398405* +X0629874Y0399094* +Y039955* +X0630335Y0399741* +X0633149Y0396928* +X0633474Y0396711* +X0633858Y0396634* +X0637776* +Y0375123* +X0637314Y0374932* +X0635552Y0376694* +X0635226Y0376911* +X0634842Y0376988* +X0629606* +X0629592Y0377029* +X0629493Y0377488* +X0630012Y0378164* +X0630363Y0379012* +X0630483Y0379921* +X0630363Y0380831* +X0630012Y0381678* +X0629454Y0382406* +X0628726Y0382965* +X0627878Y0383316* +X0626968Y0383436* +X0626059Y0383316* +X0625211Y0382965* +X0624483Y0382406* +X0624416Y0382318* +X0622917* +X0622892Y0382335* +X0622047Y0382503* +X0616929* +X0616084Y0382335* +X0615368Y0381856* +X0614889Y038114* +X0614721Y0380295* +X0614889Y037945* +X0615368Y0378734* +X0616084Y0378256* +X0616929Y0378087* +X0622047* +X0622892Y0378256* +X0622917Y0378272* +X062388* +X0623925Y0378164* +X0624444Y0377488* +X0624345Y0377029* +X0624331Y0376988* +X0612205* +X0611821Y0376911* +X0611724Y0376847* +X0590663* +X0589951Y0376705* +X0589348Y0376302* +X0588949Y0375705* +X0588917Y0375699* +X0588438Y0375712* +X0588378Y0376011* +X0588088Y0376445* +X0587655Y0376735* +X0587143Y0376837* +X0581261* +X058075Y0376735* +X0580316Y0376445* +X0580026Y0376011* +X0579924Y03755* +Y0359343* +X057995Y0359215* +Y0356128* +X0577475Y0353653* +X0577036Y0352996* +X0576882Y0352222* +Y0341105* +X0569436Y0333658* +X0568997Y0333002* +X0568843Y0332227* +Y031674* +X0559791Y0307688* +X0555086* +X0554935Y0308188* +X0555057Y030827* +X0555539Y0308992* +X0555708Y0309842* +Y0311992* +X0553484* +Y0312992* +X0552484* +Y0318097* +X0551912Y0317714* +X055143Y0316993* +X055126Y0316142* +Y0309842* +X055143Y0308992* +X0551912Y030827* +X0552633Y0307788* +X0552759Y0307763* +X0552864Y0307232* +X055266Y0307096* +X0547268Y0301704* +X0547227* +X0546452Y030155* +X0545796Y0301112* +X0542861Y0298176* +X0542567Y0297737* +X0542404Y0297675* +X0542001Y0297636* +X0541953Y0297649* +X0541257Y0298183* +X0540299Y029858* +X0539272Y0298715* +X0538291Y0298586* +X0530507Y0306369* +Y0308973* +X0530524Y0308998* +X0530692Y0309842* +Y0316142* +X0530612Y0316544* +X0530976Y0317013* +X0531341Y0316546* +X053126Y0316142* +Y0313992* +X0535708* +Y0316142* +X0535539Y0316993* +X0535057Y0317714* +X0534672Y0317971* +X0534607Y0318613* +X0535852Y0319858* +X0536326Y0319697* +X0536369Y0319366* +X0536481Y0319096* +X0536461Y0318996* +Y0317011* +X0536445Y0316987* +X0536276Y0316142* +Y0309842* +X0536445Y0308998* +X0536923Y0308281* +X0537639Y0307803* +X0538484Y0307635* +X0538887Y0307205* +X0538884Y0307013* +X0538755Y0306914* +X0538197Y0306186* +X0537846Y0305339* +X0537726Y0304429* +X0537846Y030352* +X0538197Y0302672* +X0538755Y0301944* +X0539483Y0301386* +X0540331Y0301034* +X054124Y0300915* +X054215Y0301034* +X0542997Y0301386* +X0543725Y0301944* +X0544284Y0302672* +X0544635Y030352* +X0544755Y0304429* +X0544635Y0305339* +X0544284Y0306186* +X0543725Y0306914* +X0543655Y0306968* +X0543611Y0307632* +X0543646Y0307667* +X0544329Y0307803* +X0545045Y0308281* +X0545524Y0308998* +X0545692Y0309842* +Y0316142* +X0545559Y0316812* +X0546004Y0317257* +X0546404Y0317003* +X0546425Y0316971* +X054626Y0316142* +Y0313992* +X0547484* +Y031844* +X0547369Y0318622* +X0549165Y0320418* +X0552074* +X0552849Y0320572* +X0553505Y032101* +X0556024Y032353* +X0556584Y0323382* +X0556886Y032293* +X0557466Y0322543* +X0557645Y0322507* +Y0321997* +X055746Y032196* +X0556875Y032157* +X0556484Y0320985* +X0556347Y0320295* +Y0319504* +X0564322* +Y0320295* +X0564185Y0320985* +X0563794Y032157* +X0563209Y032196* +X0563024Y0321997* +Y0322507* +X0563203Y0322543* +X0563783Y032293* +X056417Y0323509* +X0564306Y0324193* +Y0327776* +X056417Y0328459* +X0563783Y0329039* +X0563203Y0329426* +X056252Y0329562* +X0558988* +Y0342949* +X057423Y0358191* +X0574668Y0358848* +X0574822Y0359622* +Y0373438* +X0580744Y0379359* +X0596225* +X0596719Y0378865* +X0596823Y0378795* +X0596864Y0378734* +X059758Y0378256* +X0598425Y0378087* +X0603543* +X0604388Y0378256* +X0605104Y0378734* +X0605583Y037945* +X0605719Y0380133* +X0608139Y0382554* +X0608578Y038321* +X0608732Y0383984* +Y0386606* +X0608578Y0387381* +X0608139Y0388037* +X0605719Y0390457* +X0605583Y039114* +X0605104Y0391856* +X0604388Y0392335* +X0603543Y0392503* +X0598425* +X059758Y0392335* +X0596864Y0391856* +X0596385Y039114* +X0596217Y0390295* +X0596385Y038945* +X0596864Y0388734* +X059758Y0388256* +X0598425Y0388088* +X0601976* +X0602022Y0388019* +X0601754Y0387519* +X0598425* +X0597574Y038735* +X0596853Y0386868* +X059647Y0386295* +X0600984* +Y0384295* +X059647* +X0596731Y0383905* +X0596497Y0383405* +X059403* +X0593878Y0383905* +X0594216Y0384131* +X05946Y0384706* +X0594735Y0385384* +Y0386106* +X0585974* +Y0385384* +X0586109Y0384706* +X0586493Y0384131* +X0586831Y0383905* +X0586679Y0383405* +X0579906* +X0579131Y0383251* +X0578475Y0382812* +X05723Y0376638* +X0571838Y0376829* +Y038422* +X0572338Y0384389* +X0572613Y0384031* +X0573341Y0383472* +X0574189Y0383121* +X0575098Y0383001* +X0576008Y0383121* +X0576856Y0383472* +X0577583Y0384031* +X0578142Y0384758* +X0578493Y0385606* +X0578613Y0386516* +Y0389822* +X0579113Y0389871* +X0579137Y0389749* +X0579524Y038917* +X0580104Y0388783* +X0580787Y0388647* +X058437* +X0585053Y0388783* +X0585516Y0389092* +X0585945Y0388874* +X0585977Y0388844* +X0585974Y0388829* +Y0388106* +X0589354* +Y0390601* +X0587746* +X0587068Y0390466* +X0586612Y0390162* +X0586175Y0390387* +X0586152Y0390409* +X0586156Y0390433* +Y0392482* +X0591279Y0397604* +X0592963* +X0593635Y0397738* +X0594204Y0398118* +X0594531Y0398607* +X0595004* +X0595067Y0398512* +X0595637Y0398131* +X0596309Y0397998* +X0601526* +X0602198Y0398131* +X0602768Y0398512* +X0602898Y0398708* +X06035* +X060363Y0398512* +X06042Y0398131* +X0604872Y0397998* +X0610089* +X0610761Y0398131* +X061133Y0398512* +X0611711Y0399082* +X0611845Y0399754* +Y0403199* +X0611827Y040329* +X0613621Y0405084* +X0614136* +X061531Y0403909* +G37* +G36* +X0365433Y0324953D02* +X036694D01* +X0367104Y0324462* +X0366735Y032391* +X0366606Y0323259* +Y0319676* +X0366735Y0319026* +X0367104Y0318474* +X0367656Y0318106* +X0368306Y0317976* +Y0317479* +X0367656Y031735* +X0367104Y0316981* +X0366735Y031643* +X0366606Y0315779* +Y0312196* +X0366735Y0311545* +X0367104Y0310994* +X0367656Y0310625* +X0367924Y0310572* +X0368015Y0310347* +X0368072Y0310033* +X0367839Y0309684* +X0367742Y0309195* +Y0307541* +X0367839Y0307052* +X0368116Y0306637* +X0368531Y030636* +X0368962Y0306274* +Y0302982* +X0368531Y0302896* +X0368116Y0302619* +X0368109Y0302608* +X0367486Y0302575* +X0366971Y030297* +X0366372Y0303218* +X0366344Y0303311* +X0366441Y0303801* +Y0303878* +X0359474* +Y0303801* +X0359169Y0303429* +X035733* +Y0305138* +X0357201Y0305788* +X0356832Y030634* +X0356281Y0306709* +X035563Y0306838* +Y0307335* +X0356281Y0307465* +X0356832Y0307833* +X0357201Y0308385* +X035733Y0309035* +Y0309882* +X0357439Y0309965* +X035783Y0310103* +X0358133Y0309901* +X0358622Y0309804* +X0358699* +Y0316771* +X0358622* +X0358133Y0316674* +X0357738Y031641* +X035762Y0316434* +X0357238Y0316579* +Y0318311* +X035744Y0318446* +X0357717Y0318861* +X0357814Y031935* +Y0320026* +X0361083* +Y031935* +X0361181Y0318861* +X0361458Y0318446* +X0361873Y0318169* +X0362362Y0318072* +X0364016* +X0364505Y0318169* +X036492Y0318446* +X0365197Y0318861* +X0365295Y031935* +Y032376* +X0365197Y0324249* +X0365012Y0324527* +X0365271Y0324985* +X0365433Y0324953* +G37* +G36* +X027547Y0560024D02* +X0275954Y0559928D01* +X027605Y0559444* +X0276376Y0558958* +X0276498Y0558876* +X0276851Y0558555* +X0276793Y0558137* +X0276764Y055799* +Y0554987* +X0276221Y055428* +X0275879Y0553453* +X0275762Y0552565* +X0275879Y0551678* +X0276221Y0550851* +X0276766Y055014* +X0277477Y0549595* +X0278304Y0549253* +X0279191Y0549136* +X0280079Y0549253* +X0280906Y0549595* +X0281616Y055014* +X0282161Y0550851* +X0282504Y0551678* +X0282582Y055227* +X0283097Y0552354* +X0283335Y0551998* +X0283822Y0551673* +X0284306Y0551577* +X0284402Y0551093* +X0284727Y0550606* +X0285214Y0550281* +X0285698Y0550185* +X0285794Y0549701* +X0286119Y0549214* +X0286606Y0548889* +X028718Y0548775* +X0287754Y0548889* +X028824Y0549214* +X0292062Y0553036* +X02934* +X0304179Y0542257* +X0303988Y0541795* +X0302074* +X0301571Y0541695* +X0292062* +X028824Y0545517* +X0287754Y0545842* +X028718Y0545956* +X0286606Y0545842* +X0286119Y0545517* +X0285794Y054503* +X0285698Y0544546* +X0285214Y054445* +X0284727Y0544125* +X0284402Y0543638* +X0284306Y0543154* +X0283822Y0543058* +X0283335Y0542733* +X028301Y0542246* +X0282914Y0541762* +X028243Y0541666* +X0281943Y0541341* +X0281618Y0540854* +X0281522Y054037* +X0281038Y0540274* +X0280551Y0539949* +X0280226Y0539462* +X028013Y0538978* +X0279646Y0538882* +X0279159Y0538557* +X0278834Y053807* +X027881Y0537947* +X0278492Y053782* +X0278021Y0538142* +Y0541465* +X0277904Y0542051* +X0277573Y0542547* +X0275717Y0544402* +X0276061Y0544851* +X0276404Y0545678* +X0276521Y0546565* +X0276404Y0547453* +X0276061Y054828* +X0275516Y054899* +X0274806Y0549535* +X0273979Y0549878* +X0273091Y0549995* +X0272221Y054988* +X0272116Y0549876* +X0271721Y0550186* +Y0556989* +X0273415Y0558683* +X0273716Y0558884* +X0274373Y0559541* +X0274678Y0559998* +X0274714Y056004* +X0275242Y0560177* +X027547Y0560024* +G37* +G36* +X027022Y0474278D02* +X0270913Y0474141D01* +X0272652* +Y0473832* +X0272807Y0473052* +X0273249Y047239* +X0274802Y0470837* +X0274607Y0470546* +X0274545Y0470233* +X0274526Y0470208* +X0274138Y0469271* +X0274005Y0468265* +X0274138Y046726* +X0274526Y0466322* +X0275144Y0465518* +X0275852Y0464974* +Y045771* +X0271497Y0453355* +X0271055Y0452693* +X0270899Y0451913* +Y0451444* +X0270399Y0451197* +X0269834Y0451631* +X0268897Y0452019* +X0267891Y0452151* +X0266886Y0452019* +X0266623Y045191* +X0266339Y0452334* +X0269333Y0455328* +X0269775Y0455989* +X0269931Y045677* +Y0464974* +X0270639Y0465518* +X0271257Y0466322* +X0271645Y046726* +X0271777Y0468265* +X0271645Y0469271* +X0271257Y0470208* +X0270639Y0471013* +X0269931Y0471557* +Y0473065* +X0269775Y0473846* +X026962Y0474079* +X026998Y0474439* +X027022Y0474278* +G37* +G36* +X0188903Y0383158D02* +X0189399Y0382826D01* +X0189985Y038271* +X019274* +X019307Y0382334* +X0193061Y0382265* +Y0373095* +X0190059* +X0189473Y0372978* +X0188977Y0372647* +X0187503Y0371172* +X0186953Y0371136* +X0186852Y0371209* +X0185316Y0372745* +X0184787Y0373098* +X0184162Y0373223* +X0182509* +X0182318Y0373685* +X0186927Y0378294* +X018728Y0378823* +X0187405Y0379447* +Y0384003* +X0187866Y0384195* +X0188903Y0383158* +G37* +G36* +X0353762Y0361235D02* +Y0358816D01* +X0353526Y0358508* +X0353138Y0357571* +X0353005Y0356565* +X0353138Y035556* +X0353526Y0354622* +X0354144Y0353818* +X0354948Y03532* +X0355886Y0352812* +X0356891Y0352679* +X0357897Y0352812* +X0358067Y0352882* +X0358323Y0352686* +X035847Y0352508* +X0358579Y0351678* +X0358921Y0350851* +X0359195Y0350495* +X0358948Y0349995* +X035868* +X0357897Y0350319* +X0356891Y0350451* +X0355886Y0350319* +X0354948Y0349931* +X0354144Y0349313* +X0353526Y0348508* +X0353138Y0347571* +X0353005Y0346565* +X0353138Y034556* +X0353526Y0344622* +X0354144Y0343817* +X0354948Y03432* +X0355886Y0342812* +X0356891Y0342679* +X0357897Y0342812* +X035868Y0343136* +X0364824* +X0364909Y0343047* +X0364696Y0342547* +X0361344* +X0360759Y0342431* +X0360263Y03421* +X0358311Y0340148* +X0357897Y0340319* +X0356891Y0340451* +X0355886Y0340319* +X0354948Y0339931* +X0354144Y0339313* +X0353526Y0338508* +X0353138Y0337571* +X0353005Y0336565* +X0353138Y033556* +X0353526Y0334622* +X0354144Y0333818* +X0354948Y03332* +X0355886Y0332812* +X0356589Y0332719* +X0356701Y0332377* +X0356731Y0332196* +X0356382Y0331674* +X0356253Y0331024* +Y0326654* +X0356382Y0326003* +X0356709Y0325514* +X0356607Y0325234* +X035647Y0325039* +X0354882* +X0354393Y0324941* +X0353978Y0324664* +X03537Y0324249* +X0353603Y032376* +Y031935* +X03537Y0318861* +X0353978Y0318446* +X0354179Y0318311* +Y0314318* +X035126* +X0350609Y0314189* +X0350223Y0313931* +X0350061Y031398* +X0349721Y0314424* +Y0315647* +X0350573Y0316499* +X0350904Y0316995* +X0351021Y031758* +Y0348132* +X0351173Y0348284* +X0351504Y034878* +X0351621Y0349365* +Y0362723* +X0352083Y0362914* +X0353762Y0361235* +G37* +G36* +X0673228Y0480315D02* +Y0476316D01* +X0672875Y0475963* +X0665924* +X0663094Y0473133* +X066281Y0473323* +X0662126Y0473459* +X0658543* +X065786Y0473323* +X065728Y0472936* +X0656893Y0472357* +X0656757Y0471673* +Y0467303* +X0656893Y0466619* +X065728Y046604* +X065748Y0465906* +Y0465294* +X065728Y0465161* +X0656893Y0464581* +X0656757Y0463898* +Y0458346* +X0656893Y0457663* +X065728Y0457083* +X065748Y045695* +Y042126* +X065812Y042062* +X0658103Y042044* +X0657766Y0419936* +X0657647Y0419341* +Y0399232* +X0657589Y0398759* +X0657296Y0398706* +X0657256Y0398684* +X0657204Y0398672* +X0657081Y039859* +X0656951Y0398521* +X0656919Y0398482* +X0656878Y0398455* +X065608Y0397657* +X0638779* +X0638683Y0397638* +X0633858* +X0629921Y0401575* +Y0406697* +X0629956Y040687* +Y0412421* +X0629921Y0412594* +Y0429434* +X0629956Y0429607* +Y0433189* +X0629921Y0433362* +Y0462209* +X0629956Y0462382* +Y0465965* +X0629921Y0466138* +Y0484547* +X0639945Y0494571* +X064063Y0494481* +X0648346* +X0649035Y0494572* +X0649677Y0494838* +X0650228Y049526* +X0650651Y0495811* +X0650916Y0496453* +X0651007Y0497142* +Y0504858* +X0650916Y0505547* +X0650651Y0506188* +X0650228Y050674* +X0649677Y0507162* +X0649035Y0507428* +X0648346Y0507519* +X0645522* +Y0512106* +X0673228* +Y0480315* +G37* +G36* +X0306882Y0371887D02* +X0306679Y0371337D01* +X0305991Y0370877* +X0305462Y0370985* +X0305006Y0371335* +X0304179Y0371678* +X0303291Y0371795* +X0302404Y0371678* +X0301577Y0371335* +X0300866Y037079* +X0300321Y037008* +X0299979Y0369253* +X0299862Y0368365* +X0299979Y0367478* +X0300321Y0366651* +X0300382Y0366572* +X0300269Y0365897* +X0300187Y0365843* +X0300092Y03657* +X0299491* +X0299395Y0365843* +X0298928Y0366155* +X0298376Y0366265* +X0297927* +Y0363565* +X0296427* +Y0366265* +X0295978* +X0295427Y0366155* +X0295421Y0366151* +X0294921Y0366418* +Y0369689* +X0297568Y0372336* +X0306696* +X0306882Y0371887* +G37* +G36* +X0310369Y0369108D02* +Y0364258D01* +X0310531Y0363446* +X0310991Y0362758* +X0311679Y0362298* +X0312491Y0362136* +X0313303Y0362298* +X031342Y0362376* +X0315299Y0360496* +X0315795Y0360164* +X0316381Y0360048* +X0317919* +X0319471Y0358496* +X0319967Y0358164* +X0320552Y0358048* +X0324906* +X032516Y0357794* +Y0354866* +X0324758Y0354671* +X0324659Y0354651* +X0324187Y0354966* +X0323602Y0355083* +X0313166* +X0312702Y0355547* +X0312206Y0355878* +X031162Y0355995* +X0304823* +Y035915* +X0304694Y0359801* +X0304325Y0360353* +X0304156Y0360466* +Y0360704* +X0304224Y0361021* +X0304624Y0361288* +X0304936Y0361756* +X0305046Y0362308* +Y0362328* +X0306634* +X0306679Y0362298* +X0307491Y0362136* +X0308303Y0362298* +X0308992Y0362758* +X0309452Y0363446* +X0309613Y0364258* +Y0369376* +X0309989Y0369538* +X0310369Y0369108* +G37* +G36* +X023078Y0353384D02* +Y034726D01* +X023028Y0347091* +X0230073Y034736* +X0229363Y0347905* +X0228787Y0348144* +X0228837Y0348394* +Y0352804* +X022874Y0353293* +X0228463Y0353708* +X0228048Y0353986* +X0227558Y0354083* +X0225905* +X0225415Y0353986* +X0225Y0353708* +X0224723Y0353293* +X0224626Y0352804* +Y0348394* +X0224723Y0347905* +X0225Y034749* +X0224908Y034695* +X0224678Y034665* +X0224473Y0346156* +X0224336Y0345823* +X022383Y0345813* +X0223818Y0345815* +X0222165* +X0221675Y0345718* +X022126Y0345441* +X0220983Y0345026* +X0220886Y0344536* +Y0341774* +X0218009Y0338897* +X0215206* +X0214556Y0338768* +X0214004Y0338399* +X0213635Y0337848* +X0213506Y0337197* +Y0333614* +X0213635Y0332963* +X0214004Y0332412* +X0214556Y0332043* +X0215206Y0331914* +Y0331417* +X0214556Y0331288* +X0214004Y0330919* +X0213635Y0330367* +X0213506Y0329716* +Y0326134* +X0213635Y0325483* +X0214004Y0324932* +X0214556Y0324563* +X0215206Y0324433* +X0216504* +Y0322868* +X0216181Y0322603* +X0211776* +X0206185Y0328195* +X0206271Y0328817* +X0206537Y0328994* +X0206906Y0329546* +X0207035Y0330197* +Y033378* +X0206906Y033443* +X0206537Y0334982* +X0205985Y033535* +X0205335Y033548* +Y0335977* +X0205985Y0336106* +X0206537Y0336475* +X0206906Y0337027* +X0207035Y0337677* +Y034126* +X0206906Y0341911* +X0206537Y0342462* +X0206525Y034247* +X0206677Y034297* +X0207159* +X0207711Y034308* +X0208179Y0343392* +X0208491Y034386* +X0208601Y0344411* +Y0344919* +X0205961* +Y0345669* +X0205211* +Y0348369* +X0204762* +X020421Y0348259* +X0203743Y0347946* +X0203647Y0347804* +X0203046* +X020295Y0347946* +X0202483Y0348259* +X0201931Y0348369* +X0200159* +Y0349835* +X0216191* +X0216646Y0349895* +X0217145Y0349457* +Y0348394* +X0217243Y0347905* +X021752Y034749* +X0217935Y0347213* +X0218424Y0347116* +X0220078* +X0220567Y0347213* +X0220982Y034749* +X0221259Y0347905* +X0221357Y0348394* +Y0352804* +X0221259Y0353293* +X02212Y0353382* +X0224126Y0356307* +X0224487Y0356158* +X022575Y0355991* +X0227012Y0356158* +X0227715Y0356449* +X023078Y0353384* +G37* +G36* +X0658085Y0397696D02* +X0658103Y039767D01* +X0658607Y0397333* +X0659203Y0397214* +X0665329* +X0668116Y0394427* +Y0363189* +X0639783* +Y0364266* +X0639757Y0364395* +X0639749Y0364526* +X063972Y0364585* +X0639707Y036465* +X0639634Y0364759* +X0639576Y0364877* +X0639565Y0364891* +X0639315Y0365494* +X063923Y0366142* +X0639315Y0366789* +X0639616Y0367515* +X0639637Y036762* +X0639676Y0367719* +X0639675Y036781* +X0639692Y0367899* +X0639671Y0368004* +X063967Y0368111* +X0639555Y0368643* +X063948Y0368815* +X0639408Y0368989* +X0639402Y0368995* +X0639399Y0369003* +X0639264Y0369133* +X0639148Y0369249* +X0639026Y0369432* +X0638966Y0369735* +Y0372865* +X0638889Y0373249* +X0638779Y0373413* +Y0396654* +X0656496* +X0657588Y0397745* +X0658085Y0397696* +G37* +G36* +X032519Y0350436D02* +X0328215D01* +X0332724Y0345927* +X0332533Y0345465* +X0331407* +X0330855Y0345355* +X0330387Y0345042* +X0330292Y03449* +X0329691* +X0329595Y0345042* +X0329128Y0345355* +X0328576Y0345465* +X0326178* +X0325627Y0345355* +X0325183Y0345059* +X0325031Y034509* +X0324683Y034522* +Y0348313* +X0324613Y0348667* +Y0350157* +X0325Y0350474* +X032519Y0350436* +G37* +G36* +X0315459Y057108D02* +X0315589Y057043D01* +X0315957Y0569878* +X0316509Y0569509* +X031716Y056938* +X0320674* +X0321568Y0568486* +X0321471Y0568342* +X0321342Y0567691* +Y0563321* +X0321471Y056267* +X032184Y0562118* +X0322391Y056175* +X0323042Y0561621* +X0326625* +X0327275Y056175* +X0327827Y0562118* +X0328196Y056267* +X0328325Y0563321* +X0328822* +X0328951Y056267* +X032932Y0562118* +X0329872Y056175* +X0330522Y0561621* +X0334105* +X0334756Y056175* +X0335307Y0562118* +X0335676Y056267* +X0335805Y0563321* +Y0563976* +X033817* +X0353262Y0548884* +Y0541764* +X0353378Y0541179* +X035371Y0540682* +X0358939Y0535453* +Y0533831* +X0359055Y0533246* +X0359387Y053275* +X0367062Y0525075* +Y0506474* +X0366562Y0506089* +X036626Y0506149* +X0365838* +X0365686Y0506649* +X036569Y0506652* +X0366059Y0507204* +X0366189Y0507854* +Y0512224* +X0366059Y0512875* +X036569Y0513427* +X0365139Y0513795* +X0364488Y0513925* +X0364128* +Y0520301* +X0364011Y0520887* +X036368Y0521383* +X0362121Y0522942* +Y0526863* +X0362004Y0527449* +X0361673Y0527945* +X0357232Y0532386* +Y0534173* +X0357102Y0534824* +X0356734Y0535376* +X0356182Y0535744* +X0355531Y0535874* +X0351949* +X0351921Y0535897* +Y0547365* +X0351804Y0547951* +X0351473Y0548447* +X0340273Y0559647* +X0339777Y0559978* +X0339191Y0560095* +X0320568* +X0316177Y0564486* +Y0567197* +X0316047Y0567848* +X0315679Y0568399* +X0315127Y0568768* +X0314476Y0568897* +X0311766* +X0308116Y0572547* +X030762Y0572878* +X0307034Y0572995* +X0281949* +X0281758Y0573457* +X0282437Y0574136* +X0315459* +Y057108* +G37* +G36* +X0637962Y0372865D02* +Y0369636D01* +X0638081Y036904* +X0638418Y0368536* +X0638574Y0368432* +X0638689Y0367899* +X0638338Y0367051* +X0638218Y0366142* +X0638338Y0365232* +X0638689Y0364385* +X0638779Y0364266* +Y0362906* +X0638418Y0362665* +X0638081Y036216* +X0637962Y0361565* +Y03598* +X0637852Y0359636* +X0637776Y0359252* +Y0338014* +X0637086Y0337324* +X0633423Y0333661* +X062786* +X0627741Y0333752* +X0626894Y0334103* +X0625984Y0334223* +X0625075Y0334103* +X0624227Y0333752* +X0624109Y0333661* +X0621954* +X0621836Y0333752* +X0621082Y0334064* +Y0350394* +X0621006Y0350778* +X0620885Y0350959* +X062078Y0351486* +X0620377Y0352089* +X0620079Y0352288* +Y0352362* +X0612205Y0360236* +Y0375984* +X0634842* +X0637962Y0372865* +G37* +G36* +X0305273Y0403218D02* +X0305948Y04027D01* +X0306886Y0402312* +X0307474Y0402234* +X0307653Y0401706* +X0303949Y0398003* +X0303507Y0397341* +X0303352Y0396561* +Y0388565* +X0303507Y0387785* +X0303949Y0387123* +X0304122Y0386951* +X0304005Y0386065* +X0304138Y038506* +X0304526Y0384122* +X0304894Y0383642* +X0304648Y0383142* +X0301135* +X0300888Y0383642* +X0301257Y0384122* +X0301645Y038506* +X0301777Y0386065* +X0301645Y0387071* +X0301257Y0388008* +X0300639Y0388813* +X0299834Y0389431* +X0298897Y0389819* +X0297931Y0389946* +Y0396221* +X0301372Y0399662* +X0301385Y0399671* +X0304333Y0402619* +X0304666Y0403118* +X0304823Y0403184* +X0305159Y0403233* +X0305273Y0403218* +G37* +G36* +X0688976Y0479824D02* +Y0457696D01* +X0664193* +X0663876Y0458083* +X0663928Y0458346* +Y0460122* +X0660335* +Y0462122* +X0663928* +Y0463898* +X0663791Y0464587* +X06634Y0465172* +X0663209Y04653* +Y0465901* +X0663401Y0466029* +X0663791Y0466613* +X0663928Y0467303* +Y0468488* +X0660335* +Y0470488* +X0663928* +Y0471673* +X0663791Y0472363* +X0663767Y0472399* +X0663804Y0472424* +X0666339Y0474959* +X0669219* +X0669265Y047492* +X0669428Y0474098* +X066995Y0473316* +X0670732Y0472794* +X0671654Y0472611* +X0673183* +X0673451Y04725* +X0675285Y047206* +X0677165Y0471912* +X0679046Y047206* +X068088Y04725* +X0681148Y0472611* +X0682677* +X0683599Y0472794* +X068438Y0473316* +X0684902Y0474098* +X0685066Y047492* +X0685666Y0475433* +X0686891Y0476867* +X0687876Y0478476* +X0688476Y0479924* +X0688976Y0479824* +G37* +G36* +X0278849Y0341662D02* +X0278893Y0341498D01* +X0278978Y0341071* +X0279309Y0340575* +X02863Y0333584* +X0286797Y0333252* +X0287382Y0333136* +X028996* +Y033018* +X0290089Y032953* +X0290458Y0328978* +X0291009Y0328609* +X029166Y032848* +X0295243* +X0295893Y0328609* +X0296445Y0328978* +X0296814Y032953* +X0296943Y033018* +X029744* +X0297569Y032953* +X0297938Y0328978* +X0298489Y0328609* +X029914Y032848* +X0299258* +X0299505Y032798* +X0299121Y032748* +X0298779Y0326653* +X0298662Y0325765* +X0298779Y0324878* +X0299121Y0324051* +X0299384Y0323708* +X0299432Y03236* +X0299296Y0323393* +X0299158Y0323351* +X0298676Y0323322* +X0298328Y0323555* +X0297776Y0323665* +X0297327* +Y0320965* +X0296577* +Y0320215* +X0293937* +Y0319707* +X0293475Y0319479* +X0293312Y0319465* +X0285057Y0327719* +X0284561Y0328051* +X0283976Y0328167* +X0274364* +Y0330315* +X0274248Y03309* +X0273916Y0331396* +X0271361Y0333951* +Y033877* +X027443Y0341838* +X027454Y0341816* +X0278123* +X0278361Y0341863* +X0278849Y0341662* +G37* +G36* +X0367062Y0498053D02* +Y0458599D01* +X0362958Y0454495* +X0357491* +X0356906Y0454378* +X035641Y0454047* +X0343166Y0440803* +X0342647Y0440991* +X0342361Y044168* +X0342097Y0442024* +X0342149Y0442328* +X0342277Y0442611* +X0342685Y0442884* +X0346357Y0446556* +X0346689Y0447052* +X0346698Y0447099* +X0347067* +X0347718Y0447228* +X0348269Y0447597* +X0348638Y0448148* +X0348767Y0448799* +Y0449558* +X0349243Y0449652* +X0349739Y0449984* +X0356048Y0456293* +X0356191* +X0356299Y0456221* +X0356962Y0456089* +X0362055* +X0362719Y0456221* +X0363281Y0456596* +X0363657Y0457159* +X0363789Y0457822* +X0363657Y0458485* +X0363281Y0459048* +Y0459156* +X0363657Y0459718* +X0363789Y0460381* +X0363657Y0461044* +X0363281Y0461607* +Y0461715* +X0363599Y046219* +X0359509* +Y046369* +X0363599* +X0363281Y0464166* +Y0464274* +X0363657Y0464836* +X0363789Y0465499* +X0363657Y0466163* +X0363281Y0466725* +X0362719Y0467101* +X0362055Y0467233* +X0361046* +Y0468959* +X0362948Y047086* +X0363361Y0471137* +X0363764Y047174* +X0364416Y047224* +X0364961Y0472951* +X0365304Y0473778* +X0365421Y0474665* +X0365391Y0474887* +X0365468Y0475469* +Y0479912* +X0365495Y0480045* +Y0482443* +X0365385Y0482995* +X0365072Y0483462* +X036493Y0483558* +Y0484159* +X0365072Y0484254* +X0365385Y0484722* +X0365495Y0485274* +Y0485722* +X0362795* +Y0486472* +X0362045* +Y0489113* +X0361537* +X0360986Y0489003* +X0360518Y0488691* +X0360278Y0488331* +X0359879Y0488263* +X0359708Y0488283* +X0359453Y0488666* +X0358764Y0489126* +X0357952Y0489287* +X0355922* +X0355731Y0489749* +X03566Y0490618* +X035679Y049058* +X0360373* +X0361023Y0490709* +X0361575Y0491078* +X0361944Y049163* +X0362073Y049228* +Y049665* +X0361944Y0497301* +X0361715Y0497644* +X0362487Y0498416* +X0362677Y0498378* +X036626* +X0366562Y0498439* +X0367062Y0498053* +G37* +G36* +X0333355Y0340066D02* +X0333804D01* +X0333902Y0340086* +X0334289Y0339768* +Y0338197* +X0333906* +X0333256Y0338068* +X0332704Y0337699* +X0332671Y033765* +X03322Y0337846* +X0332224Y0337965* +X0332063Y0338777* +X0331603Y0339466* +X0331453Y0339566* +X0331604Y0340066* +X0331856* +Y0342765* +X0333355* +Y0340066* +G37* +G36* +X0609415Y0444932D02* +X0609549Y0444259D01* +X0609929Y044369* +X0610499Y0443309* +X0611171Y0443175* +X0613412* +X0615222Y0441365* +Y0439732* +X0611049Y0435558* +X0610984* +X0610462Y0435454* +X0610019Y0435158* +X0609723Y0434716* +X060962Y0434193* +Y0429784* +X0609618Y0429782* +X0606773* +X0606522Y0430033* +Y0434193* +X0606419Y0434716* +X0606354Y0434812* +Y04354* +X0606447* +X0607119Y0435533* +X0607689Y0435914* +X0608069Y0436484* +X0608203Y0437156* +Y0442372* +X0608069Y0443044* +X0607689Y0443614* +X0607119Y0443995* +X0606513Y0444115* +X0606455Y0444185* +X06064Y0444288* +X06063Y0444629* +X0606591Y0445065* +X0606681Y0445517* +X0609415* +Y0444932* +G37* +G36* +X0132544Y0448319D02* +X0131973Y044785D01* +X0131209Y0446918* +X0130641Y0445856* +X0130291Y0444703* +X0130173Y0443504* +X0130291Y0442305* +X0130641Y0441152* +X0131209Y0440089* +X0131973Y0439158* +X0132904Y0438394* +X0133967Y0437826* +X013512Y0437476* +X0136319Y0437358* +X0145571* +X014677Y0437476* +X0147923Y0437826* +X0148986Y0438394* +X0149917Y0439158* +X0150681Y0440089* +X0151249Y0441152* +X0151599Y0442305* +X0151717Y0443504* +X0151599Y0444703* +X0151249Y0445856* +X0150681Y0446918* +X0149917Y044785* +X0149534Y0448164* +X0149683Y0448689* +X0149991Y0448729* +X0161713Y0437008* +X0192224* +X0194193Y0435039* +Y043134* +X0193841Y0431115* +Y0426261* +X0193091* +Y0425511* +X019097* +Y0423505* +X0191131Y0422693* +X0191591Y0422005* +X0192279Y0421545* +X0193091Y0421384* +X0193209Y0421287* +Y0412402* +X0189677Y040887* +X0189177Y0409077* +Y0412217* +X0189047Y0412867* +X0188679Y0413419* +X0188127Y0413788* +X0187476Y0413917* +Y0414414* +X0188127Y0414543* +X0188679Y0414912* +X0189047Y0415463* +X0189177Y0416114* +Y041963* +X0189504Y042012* +X0189621Y0420706* +Y0422049* +X0190052Y0422693* +X0190213Y0423505* +Y0429017* +X0190052Y0429829* +X0189592Y0430518* +X0188903Y0430978* +X0188091Y0431139* +X0187279Y0430978* +X0186591Y0430518* +X0186131Y0429829* +X0185969Y0429017* +Y0423505* +X0186131Y0422693* +X0186562Y0422049* +Y0421397* +X0184582* +X018443Y0421897* +X0184592Y0422005* +X0185052Y0422693* +X0185213Y0423505* +Y0429017* +X0185052Y0429829* +X0184592Y0430518* +X0183903Y0430978* +X0183091Y0431139* +X0182279Y0430978* +X0181591Y0430518* +X0181131Y0429829* +X018097Y0429017* +Y0423615* +X0180703Y0423407* +X0180525Y0423443* +X0180213Y042361* +Y0425908* +X0180283Y0426261* +X0180213Y0426615* +Y0429017* +X0180052Y0429829* +X0179592Y0430518* +X0178903Y0430978* +X0178091Y0431139* +X0177279Y0430978* +X0176591Y0430518* +X0176131Y0429829* +X017597Y0429017* +Y0428453* +X0175213* +Y0429017* +X0175052Y0429829* +X0174592Y0430518* +X0173903Y0430978* +X0173091Y0431139* +X0172279Y0430978* +X0171591Y0430518* +X0171131Y0429829* +X0170969Y0429017* +Y0428453* +X0170213* +Y0429017* +X0170052Y0429829* +X0169592Y0430518* +X0168903Y0430978* +X0168091Y0431139* +X0167279Y0430978* +X0166591Y0430518* +X0166131Y0429829* +X016597Y0429017* +Y0426615* +X0165899Y0426261* +X016597Y0425908* +Y0423505* +X0166131Y0422693* +X0166591Y0422005* +X0167279Y0421545* +X0168091Y0421384* +X0168164Y0421398* +X0168443Y0420944* +X0168233Y042063* +X0168123Y0420078* +Y0417681* +X0168233Y0417129* +X0168546Y0416661* +X0168688Y0416566* +Y0415965* +X0168546Y0415869* +X0168233Y0415402* +X0168123Y041485* +Y0414401* +X0170823* +Y0412901* +X0168123* +Y0412452* +X0168155Y0412295* +X0167748Y0411795* +X016349* +X0163079Y0412295* +X0163091Y0412352* +Y0412801* +X0160391* +Y0414301* +X0163091* +Y041475* +X0162981Y0415302* +X0162669Y0415769* +X0162526Y0415865* +Y0416466* +X0162669Y0416561* +X0162981Y0417029* +X0163091Y0417581* +Y0419978* +X0162981Y042053* +X0162699Y0420952* +X0162753Y0421124* +X0162947Y0421412* +X0163091Y0421384* +X0163903Y0421545* +X0164592Y0422005* +X0165052Y0422693* +X0165213Y0423505* +Y0425511* +X0160969* +Y0424084* +X0160475Y0423861* +X0160213Y0424065* +Y0429017* +X0160052Y0429829* +X0159592Y0430518* +X0158903Y0430978* +X0158091Y0431139* +X0157642Y043105* +X0152942Y043575* +X0152314Y043617* +X0151572Y0436317* +X0143198* +X0142457Y043617* +X0141828Y043575* +X014148Y0435402* +X0139385* +X0139194Y0435651* +X0138554Y0436142* +X0137808Y0436451* +X0137008Y0436556* +X0136221* +X013542Y0436451* +X0134675Y0436142* +X0134034Y0435651* +X0133543Y043501* +X0133234Y0434265* +X0133129Y0433465* +X0133234Y0432664* +X0133543Y0431919* +X0134034Y0431278* +X0134675Y0430787* +X0135161Y0430586* +Y0430044* +X0134675Y0429843* +X0134034Y0429352* +X0133543Y0428711* +X0133234Y0427966* +X0133129Y0427165* +X0133234Y0426365* +X0133543Y042562* +X0134034Y0424979* +X0134675Y0424488* +X0135161Y0424286* +Y0423745* +X0134675Y0423544* +X0134034Y0423052* +X0133543Y0422412* +X0133234Y0421666* +X0133227Y0421616* +X0136614* +Y0420866* +X0137364* +Y0417821* +X0137808Y041788* +X0138554Y0418189* +X0139194Y041868* +X0139685Y041932* +X0139994Y0420066* +X0140085Y0420759* +X0140539Y0421012* +X0142282Y0419269* +X0142778Y0418937* +X0143364Y0418821* +X0146751* +X0149162Y0416409* +X0148861Y0416003* +X0147923Y0416505* +X014677Y0416855* +X0145571Y0416973* +X0136319* +X013512Y0416855* +X0133967Y0416505* +X0132904Y0415937* +X0131973Y0415173* +X0131209Y0414241* +X0130641Y0413179* +X0130291Y0412026* +X0130173Y0410827* +X0130291Y0409628* +X0130641Y0408475* +X0131209Y0407412* +X0131973Y0406481* +X0132544Y0406012* +X0132366Y0405512* +X0130217* +X0128248Y040748* +Y044685* +X0130217Y0448819* +X0132366* +X0132544Y0448319* +G37* +G36* +X0668116Y0357475D02* +Y033649D01* +X0663832Y0332206* +X066053* +X0659846Y033207* +X0659267Y0331683* +X0658879Y0331104* +X0658743Y033042* +Y0327118* +X0655084Y0323458* +X0654449* +X0653788Y0323327* +X0653228Y0322953* +X0652854Y0322393* +X0652723Y0321732* +Y0321097* +X0648982Y0317357* +X0648586Y0316893* +X0645669Y0313976* +Y0299213* +X0640748Y0294291* +X0634842* +X0630049Y0299085* +X0630385Y0299896* +X0630554Y0301181* +Y0305118* +X0630385Y0306403* +X0629921Y0307523* +Y032874* +X0637795Y0336614* +X0638779Y0337598* +Y0359252* +X0666339* +X0668116Y0357475* +G37* +G36* +X0349559Y0301555D02* +X0349658Y0301062D01* +X0348067Y0299472* +X0347522Y0298762* +X0347291Y0298204* +X0347255Y0298185* +X0346729Y0298153* +X0346316Y029869* +X0345606Y0299235* +X0344779Y0299578* +X0343891Y0299695* +X0343004Y0299578* +X0342177Y0299235* +X0341812Y0298956* +X0341609Y0298923* +X0341348Y0299139* +X0341268Y0299661* +X0341581Y0300129* +X0341691Y0300681* +Y030113* +X0338991* +Y0302629* +X0341691* +Y0303078* +X0341581Y030363* +X0341268Y0304098* +X0341211Y0304136* +X0341363Y0304636* +X0349559* +Y0301555* +G37* +G36* +X0688976Y0420275D02* +X0688464D01* +X0688354Y042044* +X0687849Y0420778* +X0687254Y0420896* +X0659203* +X0659122Y042088* +X0659081Y0420911* +X0659057Y0420955* +X0659048Y0421004* +X0658966Y0421126* +X0658896Y0421256* +X0658858Y0421288* +X065883Y0421329* +X0658484Y0421675* +Y0456511* +X0658543Y045656* +X0662126* +X0662793Y0456693* +X0688976* +Y0420275* +G37* +G36* +X03502Y0582224D02* +X0350127Y0582116D01* +X0349998Y0581465* +Y0580424* +X0353883* +Y0578924* +X0349998* +Y0578183* +X034994Y0577859* +X0349525Y0577695* +X0346468* +X0343216Y0580947* +X034272Y0581278* +X0342134Y0581395* +X028058* +X0279995Y0581278* +X0279499Y0580947* +X0279208Y0580512* +X0273542Y0574846* +X0273044Y0574895* +X0272956Y0575026* +X027247Y0575351* +X0271986Y0575447* +X027189Y0575931* +X0271565Y0576418* +X0271078Y0576743* +X0270504Y0576857* +X0270233Y0577079* +Y0577615* +X0270067Y0578454* +X0269846Y0578785* +Y0580523* +X0269736Y0581075* +X0269424Y0581542* +X0268956Y0581855* +X0268404Y0581965* +X0266007* +X0265455Y0581855* +X0264987Y0581542* +X0264892Y05814* +X0264291* +X0264195Y0581542* +X0263728Y0581855* +X0263176Y0581965* +X0260778* +X0260227Y0581855* +X0259759Y0581542* +X0259447Y0581075* +X0259337Y0580523* +Y0580015* +X0261977* +Y0579265* +X0262727* +Y0576566* +X0263176* +X0263728Y0576676* +X0264195Y0576988* +X0264291Y0577131* +X0264892* +X0264987Y0576988* +X0265455Y0576676* +X0265849Y0576597* +Y0573958* +X0266016Y057312* +X0266068Y0573042* +X026524Y0572214* +X0265034Y0571906* +X0264243Y0571115* +X026411Y0571026* +X0263778Y057053* +X0263662Y0569944* +Y0560909* +X0263778Y0560323* +X026411Y0559827* +X0264262Y0559675* +Y0549544* +X026401Y0549292* +X0263678Y0548795* +X0263562Y054821* +Y0543347* +X0262966Y054289* +X0262421Y054218* +X0262079Y0541353* +X0261962Y0540465* +X0262079Y0539578* +X0262421Y0538751* +X0262966Y053804* +X0263677Y0537496* +X0264504Y0537153* +X0265391Y0537036* +X0266279Y0537153* +X0267106Y0537496* +X0267816Y053804* +X0268361Y0538751* +X0268704Y0539578* +X0268821Y0540465* +X0268704Y0541353* +X0268361Y054218* +X0267816Y054289* +X0267106Y0543435* +X0266621Y0543636* +Y0547577* +X0266873Y0547829* +X0267204Y0548325* +X0267321Y054891* +Y0560309* +X0267204Y0560894* +X0266873Y056139* +X0266721Y0561542* +Y0568086* +X0267138Y0568311* +X0267632Y056813* +X0267699Y0567796* +X0268024Y0567309* +X0268511Y0566984* +X0268994Y0566888* +X0269091Y0566404* +X0269416Y0565917* +X0269902Y0565592* +X0270387Y0565496* +X0270483Y0565012* +X0270808Y0564525* +X0271294Y05642* +X0271778Y0564104* +X0271875Y056362* +X02722Y0563133* +X0272212Y0563125* +Y0562524* +X027221Y0562523* +X0271878Y0562027* +X0271762Y0561441* +Y0561256* +X0271754Y0561248* +X0271453Y0561047* +X026911Y0558704* +X0268778Y0558208* +X0268662Y0557622* +Y0547765* +X0268778Y054718* +X026911Y0546684* +X0269728Y0546066* +X0269779Y0545678* +X0270121Y0544851* +X0270666Y054414* +X0271377Y0543596* +X0272204Y0543253* +X0272592Y0543202* +X0274962Y0540832* +Y0535657* +X0275078Y0535072* +X0275172Y0534932* +X0275074Y0534442* +X0274984Y0534381* +X0274659Y0533894* +X0274562Y0533411* +X0274078Y0533314* +X0273592Y0532989* +X0273267Y0532503* +X027317Y0532019* +X0272686Y0531922* +X02722Y0531597* +X0271875Y0531111* +X0271778Y0530627* +X0271294Y053053* +X0270808Y0530205* +X0270483Y0529719* +X0270387Y0529235* +X0269902Y0529138* +X0269416Y0528813* +X0269091Y0528327* +X0268994Y0527843* +X0268511Y0527746* +X0268024Y0527421* +X0267699Y0526935* +X0267603Y0526451* +X0267119Y0526355* +X0266632Y0526029* +X0266307Y0525543* +X0266211Y0525059* +X0265727Y0524963* +X026524Y0524638* +X0264915Y0524151* +X0264801Y0523577* +X0264915Y0523003* +X026524Y0522517* +X0269444Y0518313* +X0269658Y051817* +X0270695Y0517133* +X0270531Y0516887* +X027037Y0516075* +Y0509776* +X0270531Y0508964* +X0270554Y0508929* +Y0508217* +X0270702Y0507476* +X0271122Y0506847* +X0271586Y0506383* +X0271577Y0506289* +X0271358Y0505962* +X0271281Y0505575* +Y0503955* +X0271358Y0503569* +X0271427Y0503465* +X0271358Y0503362* +X0271281Y0502975* +Y0501355* +X0271358Y0500969* +X0271577Y0500642* +X027159Y0500511* +X0271122Y0500042* +X0270702Y0499414* +X0270554Y0498672* +Y0498024* +X0270531Y0497989* +X027037Y0497177* +Y0492127* +X027009Y0491903* +X0269613Y0492113* +Y0497177* +X0269452Y0497989* +X0268992Y0498677* +X0268303Y0499137* +X0267491Y0499299* +X0266821Y0499166* +X0266321Y0499453* +Y0507499* +X0266741Y0507741* +Y0518048* +X0266679Y0518035* +X0265991Y0517575* +X0265531Y0516887* +X026537Y0516075* +Y0512998* +X0264908Y0512807* +X025837Y0519344* +X0261543Y0522517* +X0261868Y0523003* +X0261982Y0523577* +X0261868Y0524151* +X0261543Y0524638* +X0261056Y0524963* +X0260572Y0525059* +X0260476Y0525543* +X0260151Y0526029* +X0259855Y0526227* +X0259804Y052648* +X0259921Y0527065* +Y0537422* +X0259804Y0538007* +X0259473Y0538504* +X0251221Y0546756* +Y0547867* +X0251316Y054794* +X0251861Y0548651* +X0252204Y0549478* +X0252321Y0550365* +X0252204Y0551253* +X0251861Y055208* +X0251316Y055279* +X0250606Y0553335* +X0249779Y0553678* +X0248979Y0553783* +X0248714Y0554225* +X0249773Y0555284* +X0250104Y055578* +X0250221Y0556365* +Y055789* +X0250104Y0558475* +X0249773Y0558971* +X0249338Y0559262* +X0249221Y0559379* +X0249015Y0559687* +X0246913Y0561789* +X0247576Y0562451* +X0249678Y056035* +X0250165Y0560024* +X025046Y0559966* +X0250774Y0559652* +X0250828Y0559928* +X0251312Y0560024* +X0251799Y056035* +X0252124Y0560836* +X025222Y056132* +X0252704Y0561416* +X0253191Y0561742* +X0253516Y0562228* +X0253612Y0562712* +X0254096Y0562808* +X0254583Y0563133* +X0254908Y056362* +X0255004Y0564104* +X0255488Y05642* +X0255975Y0564525* +X02563Y0565012* +X0256396Y0565496* +X025688Y0565592* +X0257367Y0565917* +X0257454Y0566048* +X0257952Y0566097* +X0259362Y0564687* +Y0560656* +X0255746Y0557039* +X0255414Y0556543* +X0255298Y0555958* +Y0550768* +X0254977Y0550635* +X0254266Y055009* +X0253721Y054938* +X0253379Y0548553* +X0253262Y0547665* +X0253379Y0546778* +X0253721Y0545951* +X0254266Y054524* +X0254977Y0544696* +X0255804Y0544353* +X0256691Y0544236* +X0257579Y0544353* +X0258406Y0544696* +X0259116Y054524* +X0259661Y0545951* +X0260004Y0546778* +X0260121Y0547665* +X0260004Y0548553* +X0259661Y054938* +X0259116Y055009* +X0258406Y0550635* +X0258356Y0550656* +Y0555324* +X0261973Y0558941* +X0262304Y0559437* +X0262421Y0560022* +Y0565177* +X0262304Y0565762* +X0261973Y0566258* +X0261538Y0566548* +X0259971Y0568116* +X026002Y0568614* +X0260151Y0568701* +X0260476Y0569188* +X0260572Y0569672* +X0261056Y0569768* +X0261543Y0570093* +X0261868Y057058* +X0261982Y0571154* +X0261868Y0571728* +X0261543Y0572214* +X0257772Y0575984* +Y0576042* +X0257656Y0576627* +X0257325Y0577123* +X0252283Y0582165* +X025249Y0582665* +X0349964* +X03502Y0582224* +G37* +G36* +X0270627Y0445281D02* +X0270922Y0445104D01* +X0271055Y0444438* +X0271497Y0443776* +X0275157Y0440116* +X0275144Y0439913* +X0274526Y0439108* +X0274138Y0438171* +X0274005Y0437165* +X0274138Y043616* +X0274526Y0435222* +X0275144Y0434417* +X0275852Y0433874* +Y042511* +X0271449Y0420707* +X0271082Y0420157* +X0270977Y0420099* +X0270676Y0420032* +X0270493Y0420025* +X0269834Y0420531* +X0268897Y0420919* +X0268309Y0420996* +X026813Y0421524* +X0269333Y0422728* +X0269775Y0423389* +X0269931Y042417* +Y0433874* +X0270639Y0434417* +X0271257Y0435222* +X0271645Y043616* +X0271777Y0437165* +X0271645Y0438171* +X0271257Y0439108* +X0270639Y0439913* +X0269931Y0440457* +Y0441261* +X0269775Y0442041* +X0269333Y0442703* +X026813Y0443906* +X0268309Y0444434* +X0268897Y0444512* +X0269834Y04449* +X0270399Y0445334* +X0270627Y0445281* +G37* +G36* +X015597Y0427244D02* +Y0423505D01* +X0156131Y0422693* +X0156591Y0422005* +X0156778Y042188* +X0157932Y0420726* +X0157802Y042053* +X0157692Y0419978* +Y0417581* +X0157802Y0417029* +X0158114Y0416561* +X0158257Y0416466* +Y0415865* +X0158114Y0415769* +X0157802Y0415302* +X0157692Y041475* +Y0413734* +X015723Y0413543* +X0155921Y0414852* +Y0416172* +X0155804Y0416757* +X0155473Y0417253* +X0150864Y0421862* +Y0425534* +X0150748Y0426119* +X0150416Y0426615* +X014831Y0428721* +X0148347Y0428769* +X0148656Y0429515* +X0148761Y0430315* +X0148656Y0431115* +X0148347Y0431861* +X0148244Y0431995* +X0148465Y0432443* +X015077* +X015597Y0427244* +G37* +G36* +X0663386Y0301853D02* +X0661979Y0300619D01* +X0660367Y0298781* +X0659008Y0296748* +X0657927Y0294555* +X0657141Y029224* +X0656664Y0289841* +X0656504Y0287402* +X0656664Y0284962* +X0657141Y0282563* +X0657927Y0280248* +X0658668Y0278746* +X0651575Y0271654* +X0637795* +X0633858Y027559* +Y0287402* +X0639745Y0293288* +X0640748* +X0641132Y0293364* +X0641458Y0293582* +X0645254Y0297378* +X0645636Y0297671* +X0645929Y0298053* +X0646379Y0298503* +X0646596Y0298829* +X0646673Y0299213* +Y0299298* +X0646921Y0299896* +X064709Y0301181* +Y0305118* +X0646921Y0306403* +X0646673Y0307001* +Y0313561* +X0649295Y0316183* +X0649318Y0316216* +X0649349Y0316241* +X0649719Y0316675* +X0651942Y0318898* +X0663386* +Y0301853* +G37* +G36* +X058289Y0429182D02* +X0584075D01* +X0584764Y0429319* +X0584981Y0429464* +X0585481Y0429197* +Y0428658* +X0589075* +Y0427658* +X0590075* +Y042367* +X0590866* +X0591556Y0423808* +X059214Y0424198* +X0592531Y0424783* +X0592568Y0424968* +X0593078* +X0593113Y0424789* +X0593501Y042421* +X059408Y0423822* +X0594764Y0423687* +X0598346* +X059903Y0423822* +X059961Y042421* +X0599997Y0424789* +X0600133Y0425473* +Y0426334* +X0600595Y0426525* +X0604829Y042229* +X0605486Y0421852* +X0605879Y0421773* +Y0421516* +X0605983Y0420994* +X0606279Y0420551* +X0606722Y0420255* +X0607244Y0420151* +X0608898* +X060942Y0420255* +X0609863Y0420551* +X0610159Y0420994* +X0610262Y0421516* +Y0425926* +X0610264Y0425927* +X0613503* +X0613737Y0425974* +X0614237Y0425563* +Y0422717* +X0614373Y0422033* +X061476Y0421454* +X061534Y0421067* +X0616024Y0420931* +X0620394* +X0621077Y0421067* +X0621657Y0421454* +X0622044Y0422033* +X0622134Y0422485* +X0623932* +X0624621Y0421956* +X0625468Y0421605* +X0626378Y0421486* +X0627287Y0421605* +X0628135Y0421956* +X0628418Y0422173* +X0628918Y0421927* +Y0414584* +X0628418Y0414174* +X0628169Y0414223* +X0627378* +Y0409646* +X0626378* +Y0408645* +X0622784* +Y040687* +X0622922Y040618* +X0623312Y0405595* +X0623454Y0405501* +Y0404899* +X0623214Y0404739* +X0622823Y0404154* +X0622787Y0403969* +X0622277* +X0622241Y0404148* +X0621854Y0404728* +X0621274Y0405115* +X0620591Y0405251* +X0620411* +X062041Y0405252* +X0618538Y0407124* +Y0412421* +X0618402Y0413105* +X0618015Y0413684* +X0617436Y0414071* +X0616752Y0414207* +X0613169* +X0612486Y0414071* +X0612345Y0413977* +X0611845Y0414244* +Y0417175* +X0611711Y0417847* +X061133Y0418417* +X0610761Y0418798* +X0610089Y0418931* +X0604872* +X06042Y0418798* +X060363Y0418417* +X06035Y0418221* +X0602898* +X0602768Y0418417* +X0602198Y0418798* +X0601526Y0418931* +X0596309* +X0595637Y0418798* +X0595067Y0418417* +X0594687Y0417847* +X0594553Y0417175* +Y041655* +X0589271* +X0588399Y0416376* +X058766Y0415882* +X0587166Y0415143* +X0586993Y0414272* +X0587166Y04134* +X058766Y0412661* +X0588399Y0412167* +X0589271Y0411994* +X0596211* +X0596309Y0411974* +X0601526* +X0601624Y0411994* +X0604774* +X0604872Y0411974* +X0610089* +X0610761Y0412108* +X0610883Y0412189* +X0611383Y0411922* +Y040929* +X0607049Y0404955* +X0604872* +X06042Y0404821* +X060363Y040444* +X06035Y0404245* +X0602898* +X0602768Y0404441* +X0602198Y0404821* +X0601526Y0404955* +X0596309* +X0595637Y0404821* +X0595067Y0404441* +X0594805Y0404048* +X0594279Y0403997* +X0594227Y0404014* +X0594204Y0404047* +X0593958Y0404212* +X0593931Y040436* +X0593995Y0404788* +X0594311Y0404999* +X0594607Y0405442* +X0594711Y0405965* +Y0407618* +X0594607Y040814* +X0594311Y0408583* +X0593868Y0408879* +X0593346Y0408983* +X0588937* +X0588414Y0408879* +X0587971Y0408583* +X0587676Y040814* +X0587572Y0407618* +Y0405965* +X0587676Y0405442* +X058793Y0405061* +X058785Y0404764* +X0587804Y0404675* +X0587732Y0404558* +X0587074Y0404428* +X0586504Y0404047* +X0586301Y0403742* +X0585704Y0403735* +X0585633Y0403841* +X0585053Y0404229* +X058437Y0404365* +X0581845* +Y040834* +X0585078* +X0585601Y0408444* +X0586043Y040874* +X0586339Y0409182* +X0586443Y0409705* +Y0411358* +X0586339Y041188* +X0586043Y0412323* +X0585601Y0412619* +X0585078Y0412723* +X0580669* +X0580147Y0412619* +X0579998Y041252* +X0579822Y0412555* +X0579048Y04124* +X0578392Y0411962* +X0577953Y0411306* +X0577799Y0410531* +Y0404633* +X0577299Y0404283* +X057689Y0404365* +X0573307* +X0572623Y0404229* +X0572338Y0404038* +X0571838Y0404305* +Y0409835* +X0575348Y0413345* +X0575786Y0414001* +X057594Y0414776* +Y0432107* +X0576331Y0432158* +X0577179Y0432509* +X0577454Y043272* +X0577902Y0432499* +Y0430985* +X057804Y0430295* +X057843Y042971* +X0579015Y0429319* +X0579705Y0429182* +X058089* +Y0432776* +X058289* +Y0429182* +G37* +G36* +X0375762Y0291154D02* +Y0284699D01* +X0367858Y0276795* +X0350575* +X0350384Y0277257* +X0352637Y027951* +X0362831* +X0363416Y0279626* +X0363912Y0279958* +X03753Y0291346* +X0375762Y0291154* +G37* +G36* +X0336292Y0301574D02* +Y0300681D01* +X0336402Y0300129* +X0336153Y0299677* +X0335914* +X0335603Y0300112* +X0335689Y0300545* +X0335566Y0301165* +X0335505Y0301256* +X0335612Y0301751* +X0335792Y0301858* +X0336292Y0301574* +G37* +G36* +X0661979Y0605737D02* +D01* +X0660367Y0603899* +X0659008Y0601866* +X0657927Y0599673* +X0657475Y0598341* +X0656938Y0598314* +X0656386Y0599345* +X0655519Y0600401* +X0654463Y0601268* +X0653623Y0601717* +X0653088Y0602156* +X0651698Y0602899* +X065019Y0603357* +X0648622Y0603511* +X0647054Y0603357* +X0645546Y0602899* +X0644156Y0602156* +X0643621Y0601717* +X0642781Y0601268* +X0641725Y0600401* +X0640858Y0599345* +X0640549Y0598768* +X0638804Y0597023* +X0637804Y0595805* +X0637061Y0594415* +X0636604Y0592907* +X0636449Y0591338* +Y0578503* +X0634737Y057679* +X0634331Y0577091* +X063487Y0578101* +X0635357Y0579705* +X0635522Y0581374* +Y0593281* +X0635774Y0594112* +X0635908Y0595472* +X0635774Y0596832* +X0635377Y059814* +X0634733Y0599345* +X0634208Y0599984* +X063408Y0600224* +X0633016Y060152* +X063172Y0602584* +X0630242Y0603374* +X0628637Y0603861* +X0626968Y0604025* +X0598425* +X0596757Y0603861* +X0595152Y0603374* +X0593673Y0602584* +X0592377Y060152* +X0591196Y0600339* +X0590133Y0599043* +X0589342Y0597564* +X0588855Y059596* +X0588691Y0594291* +Y0575083* +X0588692Y0575072* +Y0572034* +X058823Y0571843* +X0582174Y0577899* +Y0578941* +X0582014Y0580156* +X0581545Y0581288* +X0580799Y058226* +X0579827Y0583006* +X0578695Y0583475* +X057748Y0583635* +X0569764* +X0568549Y0583475* +X0567417Y0583006* +X0566445Y058226* +X0565699Y0581288* +X056523Y0580156* +X056507Y0578941* +Y0571224* +X056523Y057001* +X0565699Y0568878* +X0566445Y0567905* +X0567417Y056716* +X0568549Y0566691* +X0569764Y0566531* +X0570806* +X058145Y0555887* +X0582668Y0554887* +X0584058Y0554144* +X0585566Y0553687* +X0587134Y0553532* +X0630886* +X0632454Y0553687* +X0633962Y0554144* +X0635352Y0554887* +X063657Y0555887* +X0648177Y0567493* +X064924Y0568062* +X0650536Y0569125* +X06516Y0570421* +X065239Y05719* +X0652877Y0573504* +X0653041Y0575173* +X0652877Y0576842* +X0652527Y0577995* +Y0588009* +X0653886Y0589368* +X0654463Y0589677* +X0655519Y0590544* +X0656087Y0591235* +X0656599Y0591071* +X0656664Y059008* +X0657141Y0587682* +X0657927Y0585366* +X0659008Y0583173* +X0660367Y058114* +X0661979Y0579302* +X0663817Y057769* +X066585Y0576331* +X0668043Y057525* +X0670359Y0574464* +X0671314Y0574274* +X0671666Y0573694* +X0671654Y0573649* +X0670732Y0573465* +X066995Y0572943* +X0669428Y0572162* +X0669406Y0572051* +X0668665Y0571418* +X066744Y0569983* +X0666454Y0568375* +X0665732Y0566632* +X0665292Y0564798* +X0665144Y0562917* +Y0544898* +X0665292Y0543017* +X0665732Y0541183* +X0666454Y053944* +X066744Y0537832* +X0668665Y0536397* +X0669245Y0535902* +Y0533602* +X0669428Y0532681* +X066995Y0531899* +X0670732Y0531377* +X0671654Y0531194* +X0682677* +X0683599Y0531377* +X068438Y0531899* +X0684902Y0532681* +X0685086Y0533602* +Y0535902* +X0685666Y0536397* +X0686891Y0537832* +X0687876Y053944* +X0688476Y0540888* +X0688976Y0540789* +Y0510195* +X0688476Y0510096* +X0687876Y0511544* +X0686891Y0513153* +X0685666Y0514587* +X0684231Y0515812* +X0683755Y0516104* +X0672764Y0527095* +X067133Y052832* +X0669721Y0529306* +X0667978Y0530027* +X0666144Y0530468* +X0664264Y0530616* +X0560114* +X0558234Y0530468* +X0556399Y0530027* +X0554657Y0529306* +X0553048Y052832* +X0551614Y0527095* +X0543362Y0518843* +X0542137Y0517408* +X0541151Y05158* +X0540429Y0514057* +X0539989Y0512223* +X0539841Y0510342* +X0539989Y0508462* +X0540429Y0506628* +X0541151Y0504885* +X0542137Y0503276* +X0543362Y0501842* +X0544796Y0500617* +X0546405Y0499631* +X0548147Y049891* +X0549982Y0498469* +X0551257Y0498369* +Y042266* +X0551181Y0422598* +X0546419* +X0546212Y0422736* +X0545551Y0422868* +X053752* +X0536859Y0422736* +X0536652Y0422598* +X0535312* +X0534914Y0423098* +X0534975Y0423406* +Y0426988* +X0534839Y0427672* +X0534452Y0428251* +X0533873Y0428638* +X0533189Y0428774* +X0528819* +X0528135Y0428638* +X0527556Y0428251* +X0527169Y0427672* +X0527079Y042722* +X052572* +Y0431626* +X0525597Y043224* +X0525249Y0432761* +X0524728Y0433109* +X0524114Y0433232* +X0523972* +Y0436516* +X0523951Y0436621* +Y044001* +X0523817Y0440682* +X0523437Y0441252* +X0522867Y0441632* +X0522195Y0441766* +X051875* +X0518078Y0441632* +X0517508Y0441252* +X0517321Y0440972* +X0516697Y0440888* +X0514377Y0443209* +X0514584Y0443709* +X052204* +X0522701Y044384* +X052326Y0444214* +X0523635Y0444774* +X0523766Y0445435* +Y0451104* +X0523635Y0451764* +X052326Y0452324* +X0523095Y0452435* +X0523246Y0452935* +X0530081* +X0530668Y0452543* +X0530704Y0452515* +X0531006Y0451951* +X0530958Y0451709* +Y0450056* +X0531062Y0449534* +X0531357Y0449091* +X05318Y0448795* +X0532323Y0448691* +X0536732* +X0537254Y0448795* +X0537351Y044886* +X0541663* +Y0447247* +X0541799Y0446563* +X0542186Y0445984* +X0542766Y0445596* +X0542985Y0445553* +Y0445043* +X0542766Y0444999* +X0542186Y0444612* +X0541799Y0444032* +X054176Y0443836* +X0539909* +X0539865Y0443901* +X0539286Y0444288* +X0538602Y0444424* +X0535019* +X0534336Y0444288* +X0533756Y0443901* +X0533369Y0443321* +X0533334Y0443143* +X0532824* +X0532787Y0443328* +X0532396Y0443912* +X0531812Y0444303* +X0531122Y044444* +X0530331* +Y0440453* +Y0436465* +X0531122* +X0531812Y0436602* +X0532396Y0436993* +X0532787Y0437578* +X0532824Y0437763* +X0533334* +X0533369Y0437584* +X0533756Y0437005* +X0534336Y0436617* +X0535019Y0436481* +X0535813* +Y0433638* +X0535794Y0433543* +Y0427874* +X0535925Y0427213* +X0536299Y0426653* +X0536859Y0426279* +X053752Y0426148* +X0545551* +X0546212Y0426279* +X0546772Y0426653* +X0547146Y0427213* +X0547277Y0427874* +Y0433543* +X0547146Y0434204* +X0546772Y0434764* +X0546212Y0435138* +X0545551Y0435269* +X0540369* +Y0438167* +X0540388Y0438268* +Y043884* +X0540828Y043928* +X054176* +X0541799Y0439083* +X0542186Y0438503* +X0542766Y0438116* +X0543449Y043798* +X054782* +X0548503Y0438116* +X0549083Y0438503* +X054947Y0439083* +X0549606Y0439766* +Y0443349* +X054947Y0444032* +X0549083Y0444612* +X0548503Y0444999* +X0548284Y0445043* +Y0445553* +X0548503Y0445596* +X0549083Y0445984* +X054947Y0446563* +X0549606Y0447247* +Y0450829* +X054947Y0451513* +X0549083Y0452092* +X0548503Y045248* +X054782Y0452615* +X0546422* +X0546155Y0453116* +X0546261Y0453274* +X0546364Y0453796* +Y045545* +X0546261Y0455972* +X0545965Y0456415* +X0545782Y0456537* +Y0460399* +X0546476* +X054716Y0460535* +X054774Y0460922* +X0548127Y0461501* +X0548263Y0462185* +Y0467736* +X0548127Y046842* +X054774Y0468999* +X0547352Y0469258* +X0547308Y0469807* +X0547318Y0469836* +X054739Y0469885* +X0547771Y0470454* +X0547905Y0471126* +Y0476343* +X0547771Y0477015* +X054739Y0477585* +X0547187Y047772* +Y0478322* +X0547354Y0478433* +X0547735Y0479003* +X0547868Y0479675* +Y0484892* +X0547735Y0485564* +X0547354Y0486133* +X0546784Y0486514* +X0546112Y0486648* +X0542667* +X0541995Y0486514* +X0541426Y0486133* +X0541045Y0485564* +X0540911Y0484892* +Y0479675* +X0541045Y0479003* +X0541426Y0478433* +X0541629Y0478298* +Y0477696* +X0541462Y0477585* +X0541081Y0477015* +X0540948Y0476343* +Y0471126* +X0541081Y0470454* +X0541462Y0469885* +X0541759Y0469686* +X0541761Y0469087* +X0541631Y0468999* +X0541243Y046842* +X0541107Y0467736* +Y0462185* +X0541226Y0461589* +Y0456904* +X0538475* +X053807Y0457404* +X0538097Y0457536* +Y045919* +X0537993Y0459712* +X0537697Y0460155* +X0537254Y0460451* +X0536732Y0460555* +X0536604* +X0536411Y0461055* +X0536709Y0461501* +X0536845Y0462185* +Y0467736* +X0536709Y046842* +X0536322Y0468999* +X0535743Y0469386* +X0535151Y0469504* +X0535137Y0469576* +X0534698Y0470233* +X0533908Y0471023* +X0533928Y0471126* +Y0476343* +X0533795Y0477015* +X0533414Y0477585* +X0533225Y0477711* +Y0478312* +X0533389Y0478422* +X0533773Y0478997* +X0533908Y0479675* +Y0481283* +X0526919* +Y0479675* +X0527054Y0478997* +X0527438Y0478422* +X0527638Y0478288* +Y0477687* +X0527486Y0477585* +X0527105Y0477015* +X0526971Y0476343* +Y0471126* +X0527105Y0470454* +X0527486Y0469885* +X0528055Y0469504* +X0528727Y046937* +X0529838* +X0530212Y0468997* +X0529826Y046842* +X052969Y0467736* +Y0462185* +X0529826Y0461501* +X0530213Y0460922* +X0530793Y0460535* +X0531133Y0460467* +X0531235Y0459972* +X0531062Y0459712* +X0530958Y045919* +Y0457536* +X0530921Y0457491* +X0523092* +X0521727Y0458857* +X0521825Y045935* +Y0463484* +X052168Y0464214* +X0521266Y0464832* +X0520648Y0465246* +X0520021Y0465371* +X0519915Y0465651* +X0519913Y0465891* +X052067Y0466472* +X0521304Y0467298* +X0521702Y0468259* +X0521706Y0468291* +X0513996* +X0514Y0468259* +X0514398Y0467298* +X0515032Y0466472* +X051579Y0465891* +X0515787Y0465651* +X0515681Y0465371* +X0515055Y0465246* +X0514436Y0464832* +X0514023Y0464214* +X0513877Y0463484* +Y045935* +X0514023Y0458621* +X0514436Y0458002* +X0515055Y0457589* +X0515784Y0457444* +X0516656* +Y045283* +X0514009* +X0513348Y0452699* +X0512788Y0452324* +X0512661Y0452134* +X0512161Y0452286* +Y0452461* +X0512007Y0453235* +X0511568Y0453891* +X0504839Y046062* +Y0464979* +X0504693Y0465716* +X0504275Y0466341* +X050365Y0466759* +X0502912Y0466905* +X0495668* +X0494931Y0466759* +X0494306Y0466341* +X0493888Y0465716* +X0493742Y0464979* +Y0457735* +X0493888Y0456997* +X0494306Y0456372* +X0494931Y0455955* +X0495668Y0455808* +X0502912* +X050365Y0455955* +X0503729Y0456008* +X0506521Y0453216* +X0506275Y0452755* +X0505898Y045283* +X0497867* +X0497206Y0452699* +X0496646Y0452324* +X0496272Y0451764* +X0496141Y0451104* +Y0445435* +X0496272Y0444774* +X0496646Y0444214* +X0497206Y044384* +X0497867Y0443709* +X0499301* +X0499779Y0443086* +X0502982Y0439883* +Y0433179* +X0502633Y0433109* +X0502112Y0432761* +X0501764Y043224* +X0501642Y0431626* +Y0431514* +X0495801Y0425672* +X0495242Y0424944* +X0494891Y0424097* +X0494771Y0423187* +Y0417683* +X0490586* +X0490532Y0417693* +X0486162* +X0486108Y0417683* +X0482867* +X0482813Y0417693* +X0478443* +X0478389Y0417683* +X047476* +X0474114Y0417598* +X0473881Y0418071* +X0485748Y0429939* +X0486496Y043085* +X0487051Y0431889* +X0487394Y0433017* +X0487509Y0434191* +Y0443354* +X0489016* +X0489664Y0443483* +X0490213Y044385* +X049058Y0444398* +X0490708Y0445046* +Y0465743* +X049058Y0466391* +X0490213Y0466939* +X0489664Y0467306* +X0489016Y0467435* +X0476866* +X0476219Y0467306* +X047567Y0466939* +X0475304Y0466391* +X0475175Y0465743* +Y0445046* +X0475304Y0444398* +X0475483Y044413* +Y0436681* +X0466665Y0427864* +X0460351* +X0460235Y0428036* +X0459656Y0428424* +X0458972Y0428559* +X045539* +X0454706Y0428424* +X0454127Y0428036* +X0453739Y0427457* +X0453696Y0427238* +X0453186* +X0453142Y0427457* +X0452755Y0428036* +X0452176Y0428424* +X0451492Y0428559* +X0447909* +X0447226Y0428424* +X0446646Y0428036* +X0446259Y0427457* +X0446123Y0426773* +Y0424322* +X0442057Y0420255* +X0437208* +X0436363Y0420087* +X0435647Y0419608* +X0435168Y0418892* +X0435Y0418047* +X0435168Y0417203* +X0435647Y0416486* +X0436363Y0416008* +X0437208Y041584* +X0442326* +X0442528Y041588* +X0443073Y0415771* +X0443944Y0415945* +X0444683Y0416439* +X0448862Y0420617* +X0451492* +X0452176Y0420753* +X0452755Y042114* +X0453142Y042172* +X0453186Y0421939* +X0453696* +X0453739Y042172* +X0454127Y042114* +X045441Y0420951* +X0454437Y0420677* +X0454658Y0419948* +X0454151Y0419608* +X0453672Y0418892* +X0453504Y0418047* +X0453672Y0417203* +X0454151Y0416486* +X0454475Y0416269* +X0454495Y0415654* +X0454252Y0415468* +X0453726Y0414782* +X0453395Y0413983* +X0453282Y0413125* +X0453395Y0412268* +X0453726Y0411469* +X0454252Y0410783* +X0454595Y041052* +X0454571Y0409908* +X0454139Y040962* +X0453757Y0409047* +X0462785* +X0462608Y0409313* +X0462875Y0409813* +X0464138* +X0464527Y0409313* +X0464466Y0409008* +Y0400976* +X0464597Y0400316* +X0464971Y0399756* +X0465531Y0399382* +X0466192Y039925* +X0466508* +Y0392903* +X0461766* +X0461082Y0392767* +Y0392766* +X0459035* +X0458126Y0392647* +X0457278Y0392295* +X045655Y0391737* +X0448716Y0383902* +X0448157Y0383174* +X0447806Y0382327* +X0447686Y0381417* +Y0375764* +X0447619Y037575* +X0446896Y0375268* +X0446413Y0374545* +X0446244Y0373693* +X0446039Y0373489* +X0441082Y0373509* +X0441076Y0373508* +X0441069Y0373509* +X044062Y037345* +X0440172Y0373393* +X0440166Y037339* +X0440159Y0373389* +X0439741Y0373216* +X0439324Y0373045* +X0439318Y0373041* +X0439311Y0373038* +X0438953Y0372763* +X0438593Y0372489* +X0438589Y0372484* +X0438584Y0372479* +X0438308Y037212* +X0438032Y0371764* +X0438029Y0371757* +X0438025Y0371752* +X0437852Y0371333* +X0437678Y0370918* +X0437677Y0370911* +X0437674Y0370904* +X0437615Y0370455* +X0437554Y0370008* +X0437555Y0370001* +X0437554Y0369994* +Y0366394* +X0437613Y0365949* +X0437669Y0365503* +X0437673Y0365494* +X0437674Y0365485* +X0437846Y0365071* +X0438016Y0364654* +X0438021Y0364646* +X0438025Y0364637* +X0438299Y0364281* +X043857Y0363923* +X0438578Y0363917* +X0438584Y036391* +X043894Y0363636* +X0439295Y0363361* +X0439304Y0363357* +X0439311Y0363351* +X0439726Y0363179* +X044014Y0363005* +X0465341Y0356105* +X046535Y0356104* +X0465359Y03561* +X0465804Y0356041* +X0466249Y035598* +X0466259Y0355981* +X0466269Y035598* +X0466714Y0356039* +X046716Y0356095* +X0467169Y0356099* +X0467178Y03561* +X0467593Y0356272* +X0468009Y0356441* +X0468017Y0356447* +X0468026Y0356451* +X0468382Y0356724* +X046874Y0356996* +X0468746Y0357003* +X0468754Y035701* +X0469027Y0357366* +X0469302Y0357721* +X0469306Y035773* +X0469312Y0357737* +X0469484Y0358153* +X0469658Y0358566* +X0469659Y0358576* +X0469663Y0358585* +X0469722Y0359031* +X0469783Y0359475* +X0469782Y0359485* +X0469783Y0359494* +Y0369895* +X0469724Y0370343* +X0469667Y0370791* +X0469664Y0370797* +X0469663Y0370804* +X046949Y0371222* +X0469319Y0371639* +X0469315Y0371645* +X0469312Y0371652* +X0469037Y037201* +X0468763Y037237* +X0468758Y0372374* +X0468754Y0372379* +X0468395Y0372655* +X0468038Y0372931* +X0468031Y0372934* +X0468026Y0372938* +X0467607Y0373111* +X0467192Y0373285* +X0467185Y0373286* +X0467178Y0373289* +X0466729Y0373348* +X0466283Y0373409* +X0461093Y0373429* +Y0373693* +X0461042Y0373948* +X0461468Y0374374* +X0461766Y0374314* +X0463542* +Y0376908* +X0459964* +Y0376173* +X0459919Y0376097* +X0459878Y0376054* +X0459519Y037579* +X0458866Y037592* +X0454715* +Y0379962* +X0460491Y0385738* +X0466227* +X0466302Y0385748* +X0467317* +X0467658Y0385815* +X0467691Y0385811* +X0470094* +X0470143Y0385311* +X0469985Y0385279* +X04694Y0384889* +X0469009Y0384304* +X0468872Y0383614* +Y0381385* +X0468372Y038112* +X0468007Y0381364* +X0467317Y0381502* +X0465542* +Y0377908* +Y0374314* +X0467317* +X0468007Y0374451* +X0468592Y0374842* +X0468982Y0375427* +X046912Y0376116* +Y0378346* +X046962Y0378611* +X0469985Y0378366* +X0470675Y0378229* +X047186* +Y0381823* +X047286* +Y0382823* +X0476847* +Y0383614* +X047671Y0384304* +X0476319Y0384889* +X0475734Y0385279* +X0475576Y0385311* +X0475625Y0385811* +X0480217* +X0481126Y0385931* +X0481974Y0386282* +X0482701Y038684* +X0482772Y0386932* +X048324Y0387245* +X048361Y0387798* +X048374Y0388451* +Y0392388* +X048361Y0393041* +X048324Y0393595* +X0482687Y0393964* +X0482034Y0394094* +X0480656* +X0480003Y0393964* +X047945Y0393595* +X047908Y0393041* +X047904Y039284* +X0475252* +X0475045Y0392881* +X0473536* +Y040072* +X0473587Y0400976* +Y0409008* +X0473526Y0409317* +X0473525Y0409336* +X0473881Y0409859* +X0473888Y0409862* +X0474373Y0409926* +X0475172Y0410256* +X0475858Y0410783* +X0476132Y0411057* +X0477186* +X047776Y0410674* +X0477939Y0410639* +Y0410129* +X0477753Y0410092* +X0477169Y0409701* +X0476778Y0409117* +X0476641Y0408427* +Y0407635* +X0480628* +Y0406636* +X0481628* +Y0403042* +X0482813* +X0483503Y0403179* +X0484088Y040357* +X0484187Y0403718* +X0484788* +X0484888Y040357* +X0485472Y0403179* +X0486162Y0403042* +X0487347* +Y0406636* +X0488347* +Y0407635* +X0492335* +Y0408427* +X0492197Y0409117* +X0491807Y0409701* +X0491222Y0410092* +X0491037Y0410129* +Y0410639* +X0491216Y0410674* +X0491789Y0411057* +X0494771* +Y0394356* +X0494271Y0394025* +X0494156Y0394048* +Y039042* +Y0386791* +X0494271Y0386814* +X0494771Y0386483* +Y0359492* +X0494753Y035935* +X0494771Y0359209* +Y0353553* +X049451Y0353163* +X0494349Y0352352* +Y0347254* +X049451Y0346444* +X0494969Y0345757* +X0495656Y0345298* +X0496466Y0345136* +X0501565* +X0502375Y0345298* +X0503062Y0345757* +X0503521Y0346444* +X0503682Y0347254* +Y0352352* +X0503521Y0353163* +X0503062Y035385* +X0502375Y0354309* +X05018Y0354423* +Y0355836* +X0513936* +Y0355718* +X0514097Y0354908* +X0514556Y0354221* +X0515243Y0353762* +X0516053Y0353601* +X0521152* +X0521962Y0353762* +X0522649Y0354221* +X0523108Y0354908* +X0523269Y0355718* +Y0360817* +X0523155Y036139* +X0523488Y036189* +X0534593* +X0534832Y036139* +X0534233Y0360609* +X0533765Y0359479* +X0533737Y0359268* +X0542837* +X054281Y0359479* +X0542342Y0360609* +X0541742Y036139* +X0541982Y036189* +X0545539* +X0545786Y036139* +X0545507Y0361027* +X0545156Y0360179* +X0545036Y0359269* +X0545156Y035836* +X0545507Y0357512* +X0546065Y0356785* +X0546793Y0356226* +X0547641Y0355875* +X054855Y0355755* +X054946Y0355875* +X0550308Y0356226* +X0551035Y0356785* +X0551594Y0357512* +X0551705Y0357779* +X0551794Y0357839* +X0554596Y0360641* +X0555034Y0361297* +X0555189Y0362072* +Y0391724* +Y0392331* +Y0412957* +X0555977Y0413746* +X0561693* +X0562353Y0413878* +X0562913Y0414252* +X0563288Y0414812* +X0563419Y0415472* +Y0421142* +X0563288Y0421802* +X0563283Y0421809* +Y0427207* +X0563288Y0427213* +X0563419Y0427874* +Y0433543* +X0563288Y0434204* +X0563283Y043421* +Y0504763* +X0565094Y0506573* +X0569471* +X0569649Y0506073* +X0568995Y0505536* +X0568181Y0504545* +X0567577Y0503413* +X0567204Y0502186* +X0567177Y0501909* +X0580067* +X058004Y0502186* +X0579667Y0503413* +X0579063Y0504545* +X0578249Y0505536* +X0577595Y0506073* +X0577774Y0506573* +X0593092* +X0593271Y0506073* +X0592617Y0505536* +X0591804Y0504545* +X0591199Y0503413* +X0590827Y0502186* +X0590799Y0501909* +X0603689* +X0603662Y0502186* +X0603289Y0503413* +X0602685Y0504545* +X0601871Y0505536* +X0601217Y0506073* +X0601396Y0506573* +X0614337* +X0614615Y0506073* +X0614438Y0505645* +X0614347Y0504957* +Y049724* +X0614438Y0496552* +X0614704Y049591* +X0615127Y0495359* +X0615677Y0494936* +X0616319Y049467* +X0617008Y049458* +X0624724* +X0625413Y049467* +X0626055Y0494936* +X0626606Y0495359* +X0626698Y0495479* +X0638581* +X0638749Y049526* +X0638777Y0494823* +X0629212Y0485257* +X0628994Y0484931* +X0628937Y0484644* +X0628586Y0484409* +X0628418Y0484361* +X0627805Y0484483* +X062436* +X0623688Y0484349* +X0623118Y0483969* +X0622738Y0483399* +X0622604Y0482727* +Y048039* +X0622568Y0480119* +X0622604Y0479847* +Y047751* +X0622738Y0476838* +X0623118Y0476268* +X0623688Y0475888* +X0623859Y0475344* +X0623799Y0475232* +X0623116Y0475096* +X062268Y0474804* +X062218Y0475006* +Y0475148* +X0622046Y047582* +X0621665Y047639* +X0621095Y0476771* +X0620423Y0476904* +X0618182* +X0615585Y0479501* +Y0482727* +X0615451Y0483399* +X061507Y0483969* +X0614501Y0484349* +X0613829Y0484483* +X0610384* +X0609712Y0484349* +X0609142Y0483969* +X0608998Y0483753* +X0608992Y0483751* +X060842Y0483787* +X0608173Y0484157* +X0607593Y0484545* +X0606909Y0484681* +X0603327* +X0602643Y0484545* +X0602064Y0484157* +X0601676Y0483578* +X0601633Y0483358* +X0601123* +X0601079Y0483578* +X0600692Y0484157* +X0600113Y0484545* +X0599429Y0484681* +X0595846* +X0595163Y0484545* +X0594583Y0484157* +X0594313Y0483752* +X0593791Y0483701* +X0593734Y0483718* +X0593704Y0483764* +X0593124Y0484151* +X0592441Y0484287* +X0588858* +X0588175Y0484151* +X0587595Y0483764* +X0587208Y0483184* +X0587164Y0482965* +X0586655* +X0586611Y0483184* +X0586224Y0483764* +X0585644Y0484151* +X0584961Y0484287* +X0581378* +X0580694Y0484151* +X0580115Y0483764* +X0579728Y0483184* +X0579592Y0482501* +Y0482339* +X0578347* +X0577573Y0482185* +X0576916Y0481746* +X057288Y047771* +X0572442Y0477054* +X0572288Y0476279* +Y0450024* +X0571956Y0449592* +X0571605Y0448744* +X0571486Y0447835* +X0571605Y0446925* +X0571956Y0446077* +X0572515Y044535* +X0573243Y0444791* +X057409Y044444* +X0574428Y0444396* +X0574588Y0443922* +X0569436Y0438769* +X0568997Y0438113* +X0568843Y0437339* +Y0416783* +X05654Y041334* +X0564962Y0412684* +X0564808Y0411909* +Y0394592* +X0564308Y0394475* +X0563645Y0395338* +X0562676Y0396082* +X0561546Y039655* +X0561335Y0396578* +Y0392027* +Y0387477* +X0561546Y0387505* +X0562676Y0387973* +X0563645Y0388717* +X0564308Y038958* +X0564808Y0389463* +Y0362932* +X0542186Y0340311* +X0532256* +X0531482Y0340157* +X0530825Y0339718* +X0528322Y0337215* +X0527639Y0337079* +X0526923Y03366* +X0526444Y0335884* +X0526276Y0335039* +Y0333933* +X0525776Y0333682* +X0525692Y0333745* +Y0335039* +X0525524Y0335884* +X0525045Y03366* +X0524329Y0337079* +X0523484Y0337247* +X0522639Y0337079* +X0521923Y03366* +X0521445Y0335884* +X0521416Y0335743* +X0520764* +X0520376Y0336322* +X0519797Y0336709* +X0519113Y0336845* +X0514743* +X051406Y0336709* +X051348Y0336322* +X0513093Y0335743* +X0512957Y0335059* +Y033326* +X0510131Y0330433* +X0509637Y0329694* +X0509463Y0328822* +Y0325972* +X0493938Y0310447* +X0472342* +X0471471Y0310274* +X0470732Y030978* +X0464389Y0303437* +X0463895Y0302698* +X0463722Y0301827* +Y0300999* +X0463214Y0300609* +X0453756* +X0418614Y033575* +Y0347795* +X0418495Y0348704* +X0418144Y0349552* +X0417585Y0350279* +X0410832Y0357033* +X0410864Y0357532* +X0411152Y0357752* +X041194Y035878* +X0412114Y0359199* +X0412152Y0359237* +X04129Y0360148* +X0413455Y0361188* +X0413798Y0362316* +X0413913Y0363489* +Y0399827* +X0413943Y0399857* +X0414402Y0400544* +X0414563Y0401354* +X0414402Y0402165* +X0413943Y0402851* +X0413913Y0402881* +Y0410591* +X0414375Y0410782* +X0423649Y0401509* +X0424355Y0401037* +X0425187Y0400871* +X0437048* +X0437208Y040084* +X0438877* +Y0400179* +X0438715* +X0438031Y0400043* +X0437452Y0399656* +X0437065Y0399077* +X0436929Y0398393* +Y039481* +X0437065Y0394127* +X0437452Y0393547* +X0438031Y039316* +X043821Y0393124* +Y0392615* +X0438025Y0392578* +X043744Y0392187* +X043705Y0391602* +X0436913Y0390913* +Y0390121* +X0444887* +Y0390913* +X044475Y0391602* +X0444359Y0392187* +X0443775Y0392578* +X044359Y0392615* +Y0393124* +X0443769Y039316* +X0444348Y0393547* +X0444735Y0394127* +X0444871Y039481* +Y0398393* +X0444735Y0399077* +X0444348Y0399656* +X0443769Y0400043* +X0443085Y0400179* +X0442923* +Y0400958* +X0443171Y0401008* +X0443887Y0401486* +X0444366Y0402203* +X0444534Y0403047* +X0444366Y0403892* +X0443887Y0404608* +X0443171Y0405087* +X0442326Y0405255* +X0437208* +X0437048Y0405223* +X0426089* +X0417235Y0414077* +Y0420101* +X0418979* +X0419704Y0420245* +X0420319Y0420656* +X0420465Y0420875* +X0421067* +X0421241Y0420615* +X0421825Y0420224* +X0422515Y0420087* +X04237* +Y042368* +X04257* +Y0420087* +X0426885* +X0427575Y0420224* +X042816Y0420615* +X0428299Y0420824* +X0428901* +X042904Y0420615* +X0429625Y0420224* +X0430315Y0420087* +X04315* +Y042368* +X04325* +Y0424681* +X0436487* +Y0425472* +X043635Y0426162* +X0435959Y0426746* +X0435375Y0427137* +X043519Y0427174* +Y0427684* +X0435369Y0427719* +X0435557Y0427845* +X0437764* +X0438937Y042796* +X0440065Y0428303* +X0441105Y0428858* +X0442016Y0429606* +X0446378Y0433968* +X0447126Y043488* +X0447682Y0435919* +X0448024Y0437047* +X0448139Y043822* +Y0443354* +X0449647* +X0450294Y0443483* +X0450843Y044385* +X0451209Y0444398* +X0451338Y0445046* +Y0465743* +X0451209Y0466391* +X0450843Y0466939* +X0450294Y0467306* +X0449647Y0467435* +X0437497* +X0436849Y0467306* +X04363Y0466939* +X0435933Y0466391* +X0435805Y0465743* +Y0445046* +X0435933Y0444398* +X0436113Y044413* +Y0440711* +X0435273Y0439871* +X0412392* +X0411219Y0439756* +X0410091Y0439414* +X0409052Y0438858* +X040814Y043811* +X0403648Y0433618* +X04029Y0432707* +X0402345Y0431667* +X0402002Y0430539* +X0401887Y0429366* +Y036598* +X0401641Y0365734* +X0401223Y0365561* +X0400195Y0364772* +X0399406Y0363744* +X039891Y0362547* +X0398741Y0361262* +X039891Y0359978* +X0399406Y035878* +X0400195Y0357752* +X0401223Y0356963* +X0401738Y035675* +X0402282Y0356304* +X040263Y0355464* +X0403188Y0354736* +X0407772Y0350152* +X0407511Y0349706* +X0406673* +Y0344727* +Y0339747* +X0407642* +X040893Y0339917* +X0410132Y0340414* +X0411086Y0341146* +X0411586Y0341014* +Y0334295* +X0411705Y0333385* +X0412056Y0332537* +X0412615Y0331809* +X0449815Y0294609* +X0450543Y0294051* +X045139Y02937* +X04523Y029358* +X0457486* +Y0289881* +X0457083Y0289356* +X0456631Y0288265* +X0456477Y0287094* +X0456631Y0285924* +X0457083Y0284833* +X0457802Y0283896* +X0458739Y0283177* +X0459829Y0282726* +X0461Y0282572* +X0462171Y0282726* +X0463261Y0283177* +X0464198Y0283896* +X0464917Y0284833* +X0465369Y0285924* +X0465523Y0287094* +X0465369Y0288265* +X0464917Y0289356* +X0464514Y0289881* +Y0290639* +X0466515Y0292639* +X0467171Y0292726* +X0468261Y0293178* +X0469198Y0293896* +X0469917Y0294833* +X0470369Y0295924* +X0470523Y0297094* +X0470369Y0298265* +X0469917Y0299356* +X0469198Y0300293* +X0468644Y0300718* +X0468611Y0301217* +X0473286Y0305891* +X0494882* +X0495754Y0306065* +X0496493Y0306558* +X0510816Y0320882* +X0511277Y0320635* +X0511268Y032059* +Y0319799* +X0519242* +Y032059* +X0519105Y032128* +X0518829Y0321694* +X0519054Y0322194* +X0519113* +X0519803Y0322331* +X0520388Y0322722* +X0520779Y0323306* +X0520916Y0323996* +Y0324787* +X0516928* +Y0326787* +X0520916* +Y0327579* +X0520779Y0328268* +X0520388Y0328853* +X0519803Y0329244* +X0519618Y0329281* +Y032979* +X0519797Y0329826* +X0520376Y0330213* +X0520764Y0330793* +X0520777Y0330857* +X0521277Y0330807* +Y032874* +X0521445Y0327895* +X0521923Y0327179* +X0522639Y03267* +X0523484Y0326532* +X0524329Y03267* +X0525045Y0327179* +X0525524Y0327895* +X0525692Y032874* +Y0330626* +X0525776Y0330689* +X0526276Y0330437* +Y032874* +X0526444Y0327895* +X0526923Y0327179* +X0527639Y03267* +X052796Y0326637* +X0528136Y0326169* +X0528059Y0326068* +X0527708Y0325221* +X0527588Y0324311* +X0527708Y0323401* +X0528059Y0322554* +X0528593Y0321858* +X0528555Y0321642* +X0528458Y0321358* +X0527201* +X0526426Y0321204* +X052577Y0320765* +X0523322Y0318317* +X0522639Y0318181* +X0521923Y0317703* +X0521445Y0316987* +X0521277Y0316142* +Y0310244* +X0520777Y0310037* +X0519346Y0311468* +Y0311516* +X0519226Y0312117* +Y031311* +X051909Y0313794* +X0518703Y0314373* +X0518124Y031476* +X0517945Y0314796* +Y0315306* +X051813Y0315343* +X0518715Y0315733* +X0519105Y0316318* +X0519242Y0317008* +Y0317799* +X0511268* +Y0317008* +X0511405Y0316318* +X0511796Y0315733* +X051238Y0315343* +X0512565Y0315306* +Y0314796* +X0512387Y031476* +X0511807Y0314373* +X051142Y0313794* +X0511284Y031311* +Y0309527* +X051142Y0308844* +X0511807Y0308264* +X0512387Y0307877* +X051307Y0307741* +X051735* +X0519845Y0305247* +X0520501Y0304808* +X0521276Y0304654* +X0526501* +X0527054Y0304101* +X053543Y0295725* +X0535301Y0294744* +X0535436Y0293716* +X0535833Y0292759* +X0536464Y0291936* +X0537286Y0291305* +X0538244Y0290908* +X0539272Y0290773* +X0540299Y0290908* +X0541257Y0291305* +X0541768Y0291697* +X0542268Y0291451* +Y0290602* +X0540252Y0288586* +X0539272Y0288715* +X0538244Y028858* +X0537286Y0288183* +X0536464Y0287552* +X0535833Y028673* +X0535436Y0285772* +X0535301Y0284744* +X0535436Y0283716* +X0535833Y0282759* +X0536464Y0281936* +X0537286Y0281305* +X0538244Y0280908* +X0539272Y0280773* +X0540299Y0280908* +X0541257Y0281305* +X0542079Y0281936* +X0542711Y0282759* +X0543107Y0283716* +X0543243Y0284744* +X0543114Y0285725* +X0545098Y028771* +X0545561Y0287518* +Y0286072* +X0545436Y0285772* +X0545301Y0284744* +X0545436Y0283716* +X0545833Y0282759* +X0546464Y0281936* +X0547286Y0281305* +X0548244Y0280908* +X0549272Y0280773* +X0550299Y0280908* +X0551257Y0281305* +X0552079Y0281936* +X0552711Y0282759* +X0553107Y0283716* +X0553243Y0284744* +X0553107Y0285772* +X0552711Y028673* +X0552589Y0286888* +Y0292218* +X0552642Y0292259* +X0554835Y0294451* +X0555363Y0294272* +X0555436Y0293716* +X0555833Y0292759* +X0556464Y0291936* +X0557286Y0291305* +X0558244Y0290908* +X0559272Y0290773* +X0560299Y0290908* +X0561257Y0291305* +X0562079Y0291936* +X0562452Y0292422* +X0578142* +X0579377Y0291188* +X0580033Y0290749* +X0580807Y0290595* +X0589615* +X0592435Y0287775* +X0592146Y0287399* +X0591694Y0286308* +X059154Y0285138* +X0591694Y0283967* +X0592146Y0282876* +X0592865Y028194* +X0593801Y0281221* +X0594892Y0280769* +X0596063Y0280615* +X0597234Y0280769* +X0598324Y0281221* +X0599261Y028194* +X059998Y0282876* +X0600432Y0283967* +X0600586Y0285138* +X0600432Y0286308* +X059998Y0287399* +X0599261Y0288336* +X0598324Y0289055* +X0597234Y0289507* +X0596303Y0289629* +X0591883Y0294049* +X0591227Y0294487* +X0590453Y0294641* +X0581645* +X0580411Y0295875* +X0579754Y0296314* +X057898Y0296468* +X0562819* +X0562711Y0296729* +X0562375Y0297167* +X0562425Y029739* +X0562609Y0297683* +X0563396Y0297786* +X0564244Y0298138* +X0564971Y0298696* +X0577835Y031156* +X0578394Y0312288* +X0578745Y0313135* +X0578865Y0314045* +Y0328914* +X0583743Y0333793* +X0587143* +X0587655Y0333895* +X0588088Y0334185* +X0588378Y0334618* +X058848Y033513* +Y0351287* +X0588378Y0351799* +X0588088Y0352233* +X0587655Y0352522* +X0587143Y0352624* +X0582822* +X058263Y0353086* +X0583404Y0353859* +X0583834Y0354503* +X0583842Y0354516* +X0583996Y035529* +Y0358006* +X0587143* +X0587385Y0358054* +X0587655Y0358107* +X0588088Y0358397* +X0588378Y0358831* +X0588438Y035913* +X0588917Y0359143* +X0588949Y0359138* +X0589348Y0358541* +X0589951Y0358137* +X0590663Y0357996* +X0613026* +X0617909Y0353112* +X0617749Y0352724* +X0620079Y0350394* +Y0333693* +X0620211Y0333597* +X0620373Y0333355* +X0620698Y0333137* +X062133Y0332875* +X0621343Y0332865* +X0621461Y0332807* +X062157Y0332734* +X0621635Y0332721* +X0621694Y0332692* +X0621825Y0332683* +X0621954Y0332658* +X0624109* +X0624238Y0332683* +X0624369Y0332692* +X0624428Y0332721* +X0624493Y0332734* +X0624602Y0332807* +X062472Y0332865* +X0624733Y0332875* +X0625337Y0333125* +X0625984Y0333211* +X0626632Y0333125* +X0627235Y0332875* +X0627249Y0332865* +X0627366Y0332807* +X0627476Y0332734* +X062754Y0332721* +X06276Y0332692* +X0627731Y0332683* +X062786Y0332658* +X0631767* +X0631958Y0332196* +X0629212Y032945* +X0628994Y0329124* +X0628918Y032874* +Y0309333* +X0628469Y0309112* +X0628072Y0309417* +X0626875Y0309913* +X0625591Y0310082* +X0624306Y0309913* +X0623946Y0309764* +X0617446Y0316265* +X0616718Y0316823* +X061587Y0317174* +X0614961Y0317294* +X061086* +Y0323209* +X0610729Y0323869* +X0610354Y0324429* +X0609794Y0324803* +X0609134Y0324935* +X0603465* +X0602804Y0324803* +X0602244Y0324429* +X060187Y0323869* +X0601739Y0323209* +Y0317294* +X060128* +X060037Y0317174* +X0599522Y0316823* +X0598795Y0316265* +X059595Y031342* +X0594764* +X059408Y0313284* +X0593501Y0312897* +X0593114Y0312317* +X0592978Y0311634* +Y0308051* +X0593114Y0307367* +X0593501Y0306788* +X059408Y0306401* +X05943Y0306357* +Y0305847* +X059408Y0305804* +X0593501Y0305416* +X0593114Y0304837* +X0592978Y0304153* +Y0300571* +X0593114Y0299887* +X0593501Y0299308* +X059408Y029892* +X0594764Y0298784* +X0599134* +X0599453Y0298848* +X0601776* +X060187Y0298375* +X0602244Y0297815* +X0602804Y0297441* +X0603465Y0297309* +X0604807* +X0620627Y028149* +Y0279527* +X0620796Y0278243* +X0621292Y0277046* +X0622081Y0276018* +X0623109Y0275229* +X0624306Y0274733* +X0625591Y0274564* +X0626875Y0274733* +X0628072Y0275229* +X06291Y0276018* +X0629889Y0277046* +X0630385Y0278243* +X0630554Y0279527* +Y0283465* +X0630385Y0284749* +X0629889Y0285946* +X06291Y0286974* +X0628072Y0287763* +X0626875Y0288259* +X0625591Y0288428* +X0624306Y0288259* +X0623946Y028811* +X061086Y0301197* +Y0307067* +X0610729Y0307728* +X0610354Y0308288* +X0609794Y0308662* +X0609134Y0308793* +X0603465* +X0602804Y0308662* +X0602244Y0308288* +X060187Y0307728* +X0601739Y0307067* +Y0305876* +X0599745* +X0599696Y0306377* +X0599818Y0306401* +X0600397Y0306788* +X0600784Y0307367* +X060092Y0308051* +Y030845* +X0602735Y0310265* +X0613505* +X0620627Y0303143* +Y0301181* +X0620796Y0299896* +X0621292Y0298699* +X0622081Y0297671* +X0623109Y0296882* +X0624306Y0296387* +X0625591Y0296217* +X0626875Y0296387* +X0628072Y0296882* +X06291Y0297671* +X0629279Y0297904* +X0629778Y0297937* +X0634133Y0293582* +X0634458Y0293364* +X0634842Y0293288* +X0637672* +X0637863Y0292826* +X0633149Y0288111* +X0632931Y0287786* +X0632855Y0287402* +Y027559* +X0632931Y0275206* +X0633149Y0274881* +X0635914Y0272115* +X0635723Y0271654* +X0427165* +X0424635Y0274184* +X0426247Y0276022* +X0427606Y0278055* +X0428687Y0280248* +X0429473Y0282563* +X042995Y0284962* +X043011Y0287402* +X042995Y0289841* +X0429473Y029224* +X0428687Y0294555* +X0427606Y0296748* +X0426247Y0298781* +X0424635Y0300619* +X0422797Y0302232* +X0420764Y030359* +X0418571Y0304671* +X0416255Y0305457* +X0413857Y0305934* +X0411417Y0306094* +X0408977Y0305934* +X0406579Y0305457* +X0404264Y0304671* +X0402071Y030359* +X0400038Y0302232* +X03982Y0300619* +X0395669Y030315* +Y0454724* +X03982Y0457255* +X0400038Y0455642* +X0402071Y0454284* +X0404264Y0453202* +X0406579Y0452417* +X0408977Y0451939* +X0411417Y045178* +X0413857Y0451939* +X0416255Y0452417* +X0418571Y0453202* +X0420764Y0454284* +X0422797Y0455642* +X0424635Y0457255* +X0426247Y0459093* +X0427606Y0461126* +X0428687Y0463319* +X0429473Y0465634* +X042995Y0468033* +X043011Y0470472* +X042995Y0472912* +X0429473Y047531* +X0428687Y0477626* +X0427606Y0479819* +X0426247Y0481852* +X0424635Y048369* +X0427165Y048622* +X0526575* +X0533464Y049311* +Y0599409* +X0542323Y0608268* +X0659449* +X0661979Y0605737* +G37* +%LNunisolder52_full-2*% +%LPC*% +G36* +X0166621Y0383647D02* +X0161741D01* +Y0379915* +X0168623* +Y0381646* +X016847Y0382412* +X0168036Y0383061* +X0167387Y0383495* +X0166621Y0383647* +G37* +G36* +X0246841Y0410863D02* +X0245469D01* +Y0409054* +X0245631Y0408242* +X0246091Y0407554* +X0246779Y0407094* +X0246841Y0407082* +Y0410863* +G37* +G36* +X0463542Y0381502D02* +X0461766D01* +X0461076Y0381364* +X0460492Y0380974* +X0460101Y0380389* +X0459964Y0379699* +Y0378908* +X0463542* +Y0381502* +G37* +G36* +X0249713Y0410863D02* +X0248341D01* +Y0407082* +X0248403Y0407094* +X0249092Y0407554* +X0249552Y0408242* +X0249713Y0409054* +Y0410863* +G37* +G36* +X0241841D02* +X024047D01* +Y0409054* +X0240631Y0408242* +X0241091Y0407554* +X0241779Y0407094* +X0241841Y0407082* +Y0410863* +G37* +G36* +X0267891Y0389951D02* +X0266886Y0389819D01* +X0265948Y0389431* +X0265143Y0388813* +X0264526Y0388008* +X0264138Y0387071* +X0264005Y0386065* +X0264138Y038506* +X0264526Y0384122* +X0265143Y0383317* +X0265948Y03827* +X0266886Y0382312* +X0267891Y0382179* +X0268897Y0382312* +X0269834Y03827* +X0270639Y0383317* +X0271257Y0384122* +X0271645Y038506* +X0271777Y0386065* +X0271645Y0387071* +X0271257Y0388008* +X0270639Y0388813* +X0269834Y0389431* +X0268897Y0389819* +X0267891Y0389951* +G37* +G36* +X042276Y038602D02* +X0420249Y038351D01* +X0420419Y038338* +X0421548Y0382912* +X042276Y0382753* +X0423971Y0382912* +X0425101Y038338* +X042527Y038351* +X042276Y038602* +G37* +G36* +X0426327Y0366242D02* +X0425358D01* +X0424069Y0366072* +X0422868Y0365575* +X0421837Y0364783* +X0421046Y0363752* +X0420548Y0362551* +X042051Y0362262* +X0426327* +Y0366242* +G37* +G36* +X0244713Y0410863D02* +X0243341D01* +Y0407082* +X0243403Y0407094* +X0244092Y0407554* +X0244552Y0408242* +X0244713Y0409054* +Y0410863* +G37* +G36* +X0489661Y0388094D02* +X0484839D01* +Y0386944* +X0484631Y0386916* +X0483933Y0386627* +X0483333Y0386167* +X0482873Y0385568* +X0482584Y038487* +X0482485Y038412* +Y0380494* +X0492015* +Y038412* +X0491917Y038487* +X0491627Y0385568* +X0491167Y0386167* +X0490568Y0386627* +X0489869Y0386916* +X0489661Y0386944* +Y0388094* +G37* +G36* +X0442326Y0410271D02* +X0437208D01* +X0436357Y0410102* +X0435635Y040962* +X0435253Y0409047* +X0444281* +X0443898Y040962* +X0443177Y0410102* +X0442326Y0410271* +G37* +G36* +X0651988Y0420913D02* +X0645256D01* +X0644726Y0420807* +X0644277Y0420507* +X0643976Y0420058* +X0643871Y0419528* +Y0416536* +X0643976Y0416006* +X0644277Y0415556* +X0644726Y0415256* +X0645256Y0415151* +X0645709* +X0645956Y0414651* +X0645578Y0414159* +X0645227Y0413311* +X0645108Y0412401* +X0645227Y0411492* +X0645578Y0410644* +X0646137Y0409916* +X0646865Y0409358* +X0647713Y0409007* +X0648622Y0408887* +X0649532Y0409007* +X0650379Y0409358* +X0651107Y0409916* +X0651665Y0410644* +X0652017Y0411492* +X0652136Y0412401* +X0652017Y0413311* +X0651665Y0414159* +X0651288Y0414651* +X0651535Y0415151* +X0651988* +X0652518Y0415256* +X0652967Y0415556* +X0653268Y0416006* +X0653373Y0416536* +Y0419528* +X0653268Y0420058* +X0652967Y0420507* +X0652518Y0420807* +X0651988Y0420913* +G37* +G36* +X048625Y0378495D02* +X0482485D01* +Y0374869* +X0482584Y0374119* +X0482873Y0373421* +X0483333Y0372822* +X0483933Y0372362* +X0484631Y0372073* +X048538Y0371974* +X048625* +Y0378495* +G37* +G36* +X0235805Y0365573D02* +X0235297D01* +Y0363683* +X0237247* +Y0364132* +X0237137Y0364684* +X0236824Y0365151* +X0236357Y0365464* +X0235805Y0365573* +G37* +G36* +X0337323Y0370951D02* +X0336281D01* +Y0367815* +X0339023* +Y036925* +X0338894Y0369901* +X0338525Y0370453* +X0337973Y0370821* +X0337323Y0370951* +G37* +G36* +X0625378Y0414223D02* +X0624587D01* +X0623897Y0414086* +X0623312Y0413695* +X0622922Y0413111* +X0622784Y0412421* +Y0410645* +X0625378* +Y0414223* +G37* +G36* +X0492015Y0378495D02* +X048825D01* +Y0371974* +X048912* +X0489869Y0372073* +X0490568Y0372362* +X0491167Y0372822* +X0491627Y0373421* +X0491917Y0374119* +X0492015Y0374869* +Y0378495* +G37* +G36* +X0476847Y0380823D02* +X047386D01* +Y0378229* +X0475045* +X0475734Y0378366* +X0476319Y0378757* +X047671Y0379342* +X0476847Y0380032* +Y0380823* +G37* +G36* +X0254713Y0410863D02* +X0253341D01* +Y0407082* +X0253403Y0407094* +X0254092Y0407554* +X0254552Y0408242* +X0254713Y0409054* +Y0410863* +G37* +G36* +X0251841D02* +X0250469D01* +Y0409054* +X0250631Y0408242* +X0251091Y0407554* +X0251779Y0407094* +X0251841Y0407082* +Y0410863* +G37* +G36* +X0264475Y0374411D02* +X026302D01* +X0262531Y0374314* +X0262116Y0374037* +X0261839Y0373622* +X0261742Y0373132* +Y0373056* +X0264475* +Y0374411* +G37* +G36* +X0429295Y0366242D02* +X0428327D01* +Y0362262* +X0434143* +X0434105Y0362551* +X0433608Y0363752* +X0432816Y0364783* +X0431785Y0365575* +X0430584Y0366072* +X0429295Y0366242* +G37* +G36* +X0168623Y0378415D02* +X0161741D01* +Y0374684* +X0166621* +X0167387Y0374836* +X0168036Y037527* +X016847Y0375919* +X0168623Y0376685* +Y0378415* +G37* +G36* +X020937Y0408251D02* +X0208328D01* +X0207678Y0408121* +X0207126Y0407753* +X0206757Y0407201* +X0206628Y040655* +Y0405115* +X020937* +Y0408251* +G37* +G36* +X0210246Y0394415D02* +X0208355D01* +Y0392466* +X0208804* +X0209356Y0392576* +X0209824Y0392888* +X0210136Y0393356* +X0210246Y0393907* +Y0394415* +G37* +G36* +X0559335Y0396578D02* +X0559123Y039655D01* +X0557994Y0396082* +X0557024Y0395338* +X055628Y0394368* +X0555812Y0393239* +X0555785Y0393027* +X0559335* +Y0396578* +G37* +G36* +X023925Y039364D02* +X0238742D01* +Y039175* +X0240691* +Y0392199* +X0240582Y0392751* +X0240269Y0393218* +X0239802Y0393531* +X023925Y039364* +G37* +G36* +X0444281Y0407047D02* +X0440767D01* +Y0405824* +X0442326* +X0443177Y0405993* +X0443898Y0406475* +X0444281Y0407047* +G37* +G36* +X0438767D02* +X0435253D01* +X0435635Y0406475* +X0436357Y0405993* +X0437208Y0405824* +X0438767* +Y0407047* +G37* +G36* +X0237242Y039364D02* +X0236734D01* +X0236183Y0393531* +X0235715Y0393218* +X0235402Y0392751* +X0235293Y0392199* +Y039175* +X0237242* +Y039364* +G37* +G36* +X020937Y0403615D02* +X0206628D01* +Y040218* +X0206757Y040153* +X0207126Y0400978* +X0207678Y0400609* +X0208328Y040048* +X020937* +Y0403615* +G37* +G36* +X046083Y0405255D02* +X0455712D01* +X0454867Y0405087* +X0454151Y0404608* +X0453672Y0403892* +X0453504Y0403047* +X0453672Y0402203* +X0454151Y0401486* +X0454867Y0401008* +X0455712Y040084* +X046083* +X0461675Y0401008* +X0462391Y0401486* +X046287Y0402203* +X0463038Y0403047* +X046287Y0403892* +X0462391Y0404608* +X0461675Y0405087* +X046083Y0405255* +G37* +G36* +X0479628Y0405635D02* +X0476641D01* +Y0404844* +X0476778Y0404154* +X0477169Y040357* +X0477753Y0403179* +X0478443Y0403042* +X0479628* +Y0405635* +G37* +G36* +X0492335D02* +X0489347D01* +Y0403042* +X0490532* +X0491222Y0403179* +X0491807Y040357* +X0492197Y0404154* +X0492335Y0404844* +Y0405635* +G37* +G36* +X060437Y0397487D02* +X0597598D01* +X0597076Y0397383* +X0596633Y0397087* +X0596338Y0396644* +X0596234Y0396122* +Y0394468* +X0596338Y0393946* +X0596633Y0393503* +X0597076Y0393208* +X0597598Y0393104* +X060437* +X0604892Y0393208* +X0605335Y0393503* +X0605631Y0393946* +X0605735Y0394468* +Y0396122* +X0605631Y0396644* +X0605335Y0397087* +X0604892Y0397383* +X060437Y0397487* +G37* +G36* +X0208804Y0397865D02* +X0208355D01* +Y0395915* +X0210246* +Y0396423* +X0210136Y0396975* +X0209824Y0397443* +X0209356Y0397755* +X0208804Y0397865* +G37* +G36* +X0365162Y0405611D02* +X0363707D01* +Y0404255* +X0366441* +Y0404332* +X0366344Y0404822* +X0366067Y0405237* +X0365652Y0405514* +X0365162Y0405611* +G37* +G36* +X0492156Y0394048D02* +X0491808Y0393979D01* +X0491249Y0393606* +X0490876Y0393047* +X0490745Y0392388* +Y039142* +X0492156* +Y0394048* +G37* +G36* +X0444887Y0388121D02* +X04419D01* +Y0385528* +X0443085* +X0443775Y0385665* +X0444359Y0386055* +X044475Y038664* +X0444887Y038733* +Y0388121* +G37* +G36* +X0492156Y038942D02* +X0490745D01* +Y0388451* +X0490876Y0387792* +X0491249Y0387233* +X0491808Y038686* +X0492156Y0386791* +Y038942* +G37* +G36* +X0236841Y0410863D02* +X023547D01* +Y0409054* +X0235631Y0408242* +X0236091Y0407554* +X0236779Y0407094* +X0236841Y0407082* +Y0410863* +G37* +G36* +X0239713D02* +X0238341D01* +Y0407082* +X0238403Y0407094* +X0239092Y0407554* +X0239552Y0408242* +X0239713Y0409054* +Y0410863* +G37* +G36* +X0418835Y0389945D02* +X0418705Y0389776D01* +X0418237Y0388647* +X0418078Y0387435* +X0418237Y0386223* +X0418705Y0385094* +X0418835Y0384924* +X0421346Y0387435* +X0418835Y0389945* +G37* +G36* +X0426684D02* +X0424174Y0387435D01* +X0426684Y0384924* +X0426814Y0385094* +X0427282Y0386223* +X0427442Y0387435* +X0427282Y0388647* +X0426814Y0389776* +X0426684Y0389945* +G37* +G36* +X04399Y0388121D02* +X0436913D01* +Y038733* +X043705Y038664* +X043744Y0386055* +X0438025Y0385665* +X0438715Y0385528* +X04399* +Y0388121* +G37* +G36* +X048625Y0394109D02* +X0485902Y039404D01* +X0485344Y0393667* +X048497Y0393108* +X0484839Y0392449* +Y0390094* +X048625* +Y0394109* +G37* +G36* +X048825D02* +Y0390094D01* +X0489661* +Y0392449* +X048953Y0393108* +X0489157Y0393667* +X0488598Y039404* +X048825Y0394109* +G37* +G36* +X0457271Y0407047D02* +X0453757D01* +X0454139Y0406475* +X0454861Y0405993* +X0455712Y0405824* +X0457271* +Y0407047* +G37* +G36* +X0462785D02* +X0459271D01* +Y0405824* +X046083* +X0461681Y0405993* +X0462402Y0406475* +X0462785Y0407047* +G37* +G36* +X0559335Y0391027D02* +X0555785D01* +X0555812Y0390816* +X055628Y0389687* +X0557024Y0388717* +X0557994Y0387973* +X0559123Y0387505* +X0559335Y0387477* +Y0391027* +G37* +G36* +X0592963Y0390601D02* +X0591354D01* +Y0388106* +X0594735* +Y0388829* +X05946Y0389507* +X0594216Y0390082* +X0593641Y0390466* +X0592963Y0390601* +G37* +G36* +X042276Y0392116D02* +X0421548Y0391957D01* +X0420419Y0391489* +X0420249Y0391359* +X042276Y0388849* +X042527Y0391359* +X0425101Y0391489* +X0423971Y0391957* +X042276Y0392116* +G37* +G36* +X0169603Y0362151D02* +X0168562D01* +X0167911Y0362021* +X0167359Y0361653* +X0166991Y0361101* +X0166861Y036045* +Y0359015* +X0169603* +Y0362151* +G37* +G36* +X0362208Y0306733D02* +X0360753D01* +X0360263Y0306636* +X0359848Y0306359* +X0359571Y0305944* +X0359474Y0305454* +Y0305378* +X0362208* +Y0306733* +G37* +G36* +X0296673Y0307527D02* +X0295632D01* +Y0304392* +X0298374* +Y0305827* +X0298244Y0306477* +X0297876Y0307029* +X0297324Y0307398* +X0296673Y0307527* +G37* +G36* +X0532484Y0311992D02* +X053126D01* +Y0309842* +X053143Y0308992* +X0531912Y030827* +X0532484Y0307888* +Y0311992* +G37* +G36* +X0365162Y0306733D02* +X0363707D01* +Y0305378* +X0366441* +Y0305454* +X0366344Y0305944* +X0366067Y0306359* +X0365652Y0306636* +X0365162Y0306733* +G37* +G36* +X0477Y0301502D02* +Y0298095D01* +X0480407* +X0480384Y0298269* +X0479931Y0299364* +X0479209Y0300304* +X0478269Y0301025* +X0477175Y0301479* +X0477Y0301502* +G37* +G36* +X0475D02* +X0474825Y0301479D01* +X0473731Y0301025* +X047279Y0300304* +X0472069Y0299364* +X0471616Y0298269* +X0471593Y0298095* +X0475* +Y0301502* +G37* +G36* +X0255433Y0308512D02* +X0254215D01* +Y0304383* +X0260213* +X0260146Y0304896* +X0259658Y0306072* +X0258883Y0307083* +X0257872Y0307858* +X0256696Y0308346* +X0255433Y0308512* +G37* +G36* +X0252715D02* +X0251496D01* +X0250233Y0308346* +X0249057Y0307858* +X0248046Y0307083* +X0247271Y0306072* +X0246784Y0304896* +X0246716Y0304383* +X0252715* +Y0308512* +G37* +G36* +X0535708Y0311992D02* +X0534484D01* +Y0307888* +X0535057Y030827* +X0535539Y0308992* +X0535708Y0309842* +Y0311992* +G37* +G36* +X04525Y0321094D02* +X0446304D01* +X0446345Y0320671* +X044676Y0319303* +X0447434Y0318042* +X0448342Y0316936* +X0449447Y0316029* +X0450708Y0315355* +X0452077Y031494* +X04525Y0314898* +Y0321094* +G37* +G36* +X0360276Y0316771D02* +X0360199D01* +Y0314037* +X0361555* +Y0315492* +X0361457Y0315982* +X036118Y0316396* +X0360765Y0316674* +X0360276Y0316771* +G37* +G36* +X04925Y0321094D02* +X0486304D01* +X0486345Y0320671* +X048676Y0319303* +X0487434Y0318042* +X0488342Y0316936* +X0489447Y0316029* +X0490708Y0315355* +X0492077Y031494* +X04925Y0314898* +Y0321094* +G37* +G36* +X0460697D02* +X04545D01* +Y0314898* +X0454923Y031494* +X0456292Y0315355* +X0457553Y0316029* +X0458658Y0316936* +X0459565Y0318042* +X046024Y0319303* +X0460655Y0320671* +X0460697Y0321094* +G37* +G36* +X0549484Y0318097D02* +Y0312992D01* +Y0307888* +X0550057Y030827* +X0550539Y0308992* +X0550708Y0309842* +Y0316142* +X0550539Y0316993* +X0550057Y0317714* +X0549484Y0318097* +G37* +G36* +X0547484Y0311992D02* +X054626D01* +Y0309842* +X054643Y0308992* +X0546912Y030827* +X0547484Y0307888* +Y0311992* +G37* +G36* +X0554484Y0318097D02* +Y0313992D01* +X0555708* +Y0316142* +X0555539Y0316993* +X0555057Y0317714* +X0554484Y0318097* +G37* +G36* +X0361555Y0312537D02* +X0360199D01* +Y0309804* +X0360276* +X0360765Y0309901* +X036118Y0310178* +X0361457Y0310593* +X0361555Y0311083* +Y0312537* +G37* +G36* +X0480407Y0296094D02* +X0477D01* +Y0292687* +X0477175Y029271* +X0478269Y0293164* +X0479209Y0293885* +X0479931Y0294825* +X0480384Y029592* +X0480407Y0296094* +G37* +G36* +X0475407Y0286094D02* +X0472D01* +Y0282687* +X0472175Y028271* +X0473269Y0283164* +X0474209Y0283885* +X0474931Y0284825* +X0475384Y028592* +X0475407Y0286094* +G37* +G36* +X047D02* +X0466593D01* +X0466616Y028592* +X0467069Y0284825* +X0467791Y0283885* +X0468731Y0283164* +X0469825Y028271* +X047Y0282687* +Y0286094* +G37* +G36* +X0216261Y0290619D02* +X0212168D01* +Y0285115* +X0218262* +Y0288617* +X021811Y0289383* +X0217676Y0290033* +X0217026Y0290466* +X0216261Y0290619* +G37* +G36* +X0210668D02* +X0206576D01* +X020581Y0290466* +X020516Y0290033* +X0204727Y0289383* +X0204574Y0288617* +Y0285115* +X0210668* +Y0290619* +G37* +G36* +Y0283615D02* +X0204574D01* +Y0280113* +X0204727Y0279347* +X020516Y0278698* +X020581Y0278264* +X0206576Y0278112* +X0210668* +Y0283615* +G37* +G36* +X0607813Y0289646D02* +X0604313D01* +X0603599Y0289552* +X0602934Y0289276* +X0602363Y0288838* +X0601925Y0288267* +X0601649Y0287601* +X0601555Y0286888* +Y0283388* +X0601632Y0282806* +X059662Y0277795* +X0536582* +X0532236Y028214* +X0532711Y0282759* +X0533107Y0283716* +X0533243Y0284744* +X0533107Y0285772* +X0532711Y028673* +X053208Y0287552* +X0531257Y0288183* +X0530299Y028858* +X0529272Y0288715* +X0528244Y028858* +X0527286Y0288183* +X0526464Y0287552* +X0525833Y028673* +X0525436Y0285772* +X0525301Y0284744* +X0525436Y0283716* +X0525833Y0282759* +X0526464Y0281936* +X0527286Y0281305* +X0527599Y0281175* +X0527841Y0280814* +X0534313Y0274341* +X053497Y0273903* +X0535744Y0273748* +X0597458* +X0598232Y0273903* +X0598889Y0274341* +X0605178Y028063* +X0607813* +X0608527Y0280724* +X0609192Y0280999* +X0609763Y0281438* +X0610201Y0282009* +X0610477Y0282674* +X0610571Y0283388* +Y0286888* +X0610477Y0287601* +X0610201Y0288267* +X0609763Y0288838* +X0609192Y0289276* +X0608527Y0289552* +X0607813Y0289646* +G37* +G36* +X0274368Y0286348D02* +X026837D01* +X0268437Y0285835* +X0268924Y0284658* +X02697Y0283648* +X027071Y0282873* +X0271887Y0282385* +X027315Y0282219* +X0274368* +Y0286348* +G37* +G36* +X0218262Y0283615D02* +X0212168D01* +Y0278112* +X0216261* +X0217026Y0278264* +X0217676Y0278698* +X021811Y0279347* +X0218262Y0280113* +Y0283615* +G37* +G36* +X0194291Y031851D02* +X0191813Y0318314D01* +X0189395Y0317734* +X0187098Y0316782* +X0184978Y0315483* +X0183088Y0313869* +X0181473Y0311978* +X0180174Y0309858* +X0179223Y0307561* +X0178642Y0305144* +X0178447Y0302665* +X0178642Y0300187* +X0179223Y0297769* +X0180174Y0295472* +X0181473Y0293352* +X0183088Y0291462* +X0184978Y0289847* +X0187098Y0288548* +X0189395Y0287597* +X0191813Y0287016* +X0194291Y0286821* +X019677Y0287016* +X0199187Y0287597* +X0201484Y0288548* +X0203604Y0289847* +X0205495Y0291462* +X0207109Y0293352* +X0208408Y0295472* +X020936Y0297769* +X020994Y0300187* +X0210135Y0302665* +X020994Y0305144* +X020936Y0307561* +X0208408Y0309858* +X0207109Y0311978* +X0205495Y0313869* +X0203604Y0315483* +X0201484Y0316782* +X0199187Y0317734* +X019677Y0318314* +X0194291Y031851* +G37* +G36* +X0529272Y0298715D02* +X0528244Y029858D01* +X0527286Y0298183* +X0526464Y0297552* +X0525833Y0296729* +X0525436Y0295772* +X0525301Y0294744* +X0525436Y0293716* +X0525833Y0292759* +X0526464Y0291936* +X0527286Y0291305* +X0528244Y0290908* +X0529272Y0290773* +X0530299Y0290908* +X0531257Y0291305* +X053208Y0291936* +X0532711Y0292759* +X0533107Y0293716* +X0533243Y0294744* +X0533107Y0295772* +X0532711Y0296729* +X053208Y0297552* +X0531257Y0298183* +X0530299Y029858* +X0529272Y0298715* +G37* +G36* +X0304091Y0290501D02* +X0302141D01* +Y0288611* +X0302649* +X0303201Y0288721* +X0303668Y0289033* +X0303981Y0289501* +X0304091Y0290052* +Y0290501* +G37* +G36* +X0475Y0296094D02* +X0471593D01* +X0471616Y029592* +X0472069Y0294825* +X047279Y0293885* +X0473731Y0293164* +X0474825Y029271* +X0475Y0292687* +Y0296094* +G37* +G36* +X0486Y0301617D02* +X0484829Y0301463D01* +X0483739Y0301011* +X0482802Y0300293* +X0482083Y0299356* +X0481631Y0298265* +X0481477Y0297094* +X0481631Y0295924* +X0482083Y0294833* +X0482802Y0293896* +X0483612Y0293275* +X0483712Y0292834* +X0483698Y0292653* +X0482409Y0291365* +X0482171Y0291463* +X0481Y0291617* +X0479829Y0291463* +X0478738Y0291011* +X0477802Y0290293* +X0477083Y0289356* +X0476631Y0288265* +X0476477Y0287094* +X0476631Y0285924* +X0477083Y0284833* +X0477802Y0283896* +X0478738Y0283177* +X0479829Y0282726* +X0481Y0282572* +X0482171Y0282726* +X0482409Y0282824* +X0485569Y0279664* +X0486226Y0279225* +X0487Y0279071* +X0505743* +X0506518Y0279225* +X0507174Y0279664* +X0514873Y0287363* +X0515335Y0287171* +Y0280807* +X0523209* +Y0288681* +X0516844* +X0516653Y0289143* +X0518398Y0290888* +X0519272Y0290773* +X0520299Y0290908* +X0521257Y0291305* +X052208Y0291936* +X0522711Y0292759* +X0523107Y0293716* +X0523243Y0294744* +X0523107Y0295772* +X0522711Y0296729* +X052208Y0297552* +X0521257Y0298183* +X0520299Y029858* +X0519272Y0298715* +X0518244Y029858* +X0517286Y0298183* +X0516464Y0297552* +X0515833Y0296729* +X0515436Y0295772* +X0515301Y0294744* +X0515436Y0293716* +X0515456Y0293668* +X0504905Y0283118* +X0487838* +X048527Y0285685* +X0485369Y0285924* +X0485523Y0287094* +X0485369Y0288265* +X048527Y0288503* +X048743Y0290664* +X0487869Y029132* +X0488023Y0292094* +Y0293079* +X0488261Y0293178* +X0489198Y0293896* +X0489917Y0294833* +X0490369Y0295924* +X0490523Y0297094* +X0490369Y0298265* +X0489917Y0299356* +X0489198Y0300293* +X0488261Y0301011* +X0487171Y0301463* +X0486Y0301617* +G37* +G36* +X047Y0291502D02* +X0469825Y0291479D01* +X0468731Y0291025* +X0467791Y0290304* +X0467069Y0289364* +X0466616Y0288269* +X0466593Y0288094* +X047* +Y0291502* +G37* +G36* +X0586063Y0289661D02* +X0584892Y0289507D01* +X0583802Y0289055* +X0582865Y0288336* +X0582146Y0287399* +X0582047Y0287161* +X056238* +X0562079Y0287552* +X0561257Y0288183* +X0560299Y028858* +X0559272Y0288715* +X0558244Y028858* +X0557286Y0288183* +X0556464Y0287552* +X0555833Y028673* +X0555436Y0285772* +X0555301Y0284744* +X0555436Y0283716* +X0555833Y0282759* +X0556464Y0281936* +X0557286Y0281305* +X0558244Y0280908* +X0559272Y0280773* +X0560299Y0280908* +X0561257Y0281305* +X0562079Y0281936* +X0562711Y0282759* +X0562858Y0283115* +X0582047* +X0582146Y0282876* +X0582865Y028194* +X0583802Y0281221* +X0584892Y0280769* +X0586063Y0280615* +X0587234Y0280769* +X0588324Y0281221* +X0589261Y028194* +X058998Y0282876* +X0590432Y0283967* +X0590586Y0285138* +X0590432Y0286308* +X058998Y0287399* +X0589261Y0288336* +X0588324Y0289055* +X0587234Y0289507* +X0586063Y0289661* +G37* +G36* +X0300641Y0290501D02* +X0298692D01* +Y0290052* +X0298802Y0289501* +X0299114Y0289033* +X0299582Y0288721* +X0300133Y0288611* +X0300641* +Y0290501* +G37* +G36* +X0472Y0291502D02* +Y0288094D01* +X0475407* +X0475384Y0288269* +X0474931Y0289364* +X0474209Y0290304* +X0473269Y0291025* +X0472175Y0291479* +X0472Y0291502* +G37* +G36* +X0500697Y0321094D02* +X04945D01* +Y0314898* +X0494923Y031494* +X0496292Y0315355* +X0497553Y0316029* +X0498658Y0316936* +X0499566Y0318042* +X050024Y0319303* +X0500655Y0320671* +X0500697Y0321094* +G37* +G36* +X0483881Y0348803D02* +X0480331D01* +Y0345253* +X0480542Y0345281* +X0481672Y0345749* +X0482641Y0346493* +X0483385Y0347462* +X0483853Y0348591* +X0483881Y0348803* +G37* +G36* +X0478331D02* +X0474781D01* +X0474808Y0348591* +X0475276Y0347462* +X047602Y0346493* +X047699Y0345749* +X0478119Y0345281* +X0478331Y0345253* +Y0348803* +G37* +G36* +X0207159Y0348369D02* +X0206711D01* +Y0346419* +X0208601* +Y0346927* +X0208491Y0347479* +X0208179Y0347946* +X0207711Y0348259* +X0207159Y0348369* +G37* +G36* +X0404673Y0349706D02* +X0403705D01* +X0402416Y0349537* +X0401215Y0349039* +X0400184Y0348248* +X0399392Y0347217* +X0398895Y0346016* +X0398857Y0345727* +X0404673* +Y0349706* +G37* +G36* +X0471012Y0338417D02* +Y0335866D01* +X047222* +Y0337071* +X0472114Y0337599* +X0471815Y0338047* +X0471367Y0338347* +X0471012Y0338417* +G37* +G36* +X0469012D02* +X0468657Y0338347D01* +X0468209Y0338047* +X0467909Y0337599* +X0467804Y0337071* +Y0335866* +X0469012* +Y0338417* +G37* +G36* +X0404673Y0343727D02* +X0398857D01* +X0398895Y0343438* +X0399392Y0342237* +X0400184Y0341206* +X0401215Y0340414* +X0402416Y0339917* +X0403705Y0339747* +X0404673* +Y0343727* +G37* +G36* +X0291941Y0340175D02* +X0288806D01* +Y0339134* +X0288935Y0338483* +X0289304Y0337931* +X0289856Y0337563* +X0290506Y0337434* +X0291941* +Y0340175* +G37* +G36* +X0441069Y0358609D02* +X0440623Y035855D01* +X0440177Y0358494* +X0440169Y035849* +X0440159Y0358489* +X0439745Y0358317* +X0439328Y0358148* +X043932Y0358142* +X0439311Y0358138* +X0438955Y0357864* +X0438597Y0357593* +X0438591Y0357585* +X0438584Y0357579* +X043831Y0357223* +X0438035Y0356868* +X0438031Y0356859* +X0438025Y0356852* +X0437853Y0356437* +X0437679Y0356023* +X0437678Y0356013* +X0437674Y0356004* +X0437615Y0355559* +X0437554Y0355114* +X0437556Y0355104* +X0437554Y0355095* +Y0348241* +X0432799* +X0431777Y0349026* +X043058Y0349521* +X0429295Y0349691* +X0425358* +X0424074Y0349521* +X0422876Y0349026* +X0421848Y0348237* +X042106Y0347209* +X0420564Y0346011* +X0420395Y0344727* +X0420564Y0343442* +X042106Y0342245* +X0421848Y0341217* +X0422876Y0340428* +X0424074Y0339932* +X0425358Y0339763* +X0429295* +X043058Y0339932* +X0431777Y0340428* +X0432799Y0341212* +X043719* +Y0337391* +X0436666Y0337041* +X0436279Y0336461* +X0436143Y0335778* +Y0332195* +X0436279Y0331512* +X0436666Y0330932* +X0437246Y0330545* +X0437929Y0330409* +X044348* +X0444164Y0330545* +X0444743Y0330932* +X0445131Y0331512* +X0445266Y0332195* +Y0335778* +X0445131Y0336461* +X0444743Y0337041* +X0444219Y0337391* +Y0340813* +X0444573Y0341166* +X0446244Y034116* +Y0340896* +X0446413Y0340044* +X0446896Y0339321* +X0447619Y0338839* +X0448471Y0338669* +X045718* +X0460253Y0335596* +Y0334866* +X046034Y0334431* +Y0332661* +X0460444Y0332139* +X046074Y0331696* +X0461182Y03314* +X0461705Y0331296* +X0463358* +X0463881Y03314* +X0464323Y0331696* +X0464619Y0332139* +X0464723Y0332661* +Y0334431* +X046481Y0334866* +Y0336539* +X0464723Y0336974* +Y0337071* +X0464619Y0337593* +X0464323Y0338036* +X0464122Y033817* +X0461656Y0340636* +X0461849Y0341098* +X0466255Y034108* +X0466262Y0341081* +X0466269Y034108* +X0466717Y0341139* +X0467165Y0341196* +X0467171Y0341199* +X0467178Y03412* +X0467596Y0341373* +X0468014Y0341544* +X0468019Y0341548* +X0468026Y0341551* +X0468384Y0341826* +X0468744Y03421* +X0468748Y0342105* +X0468754Y0342109* +X0469029Y0342468* +X0469305Y0342825* +X0469308Y0342832* +X0469312Y0342837* +X0469485Y0343255* +X046966Y0343671* +X0469661Y0343678* +X0469663Y0343685* +X0469722Y0344132* +X0469783Y0344581* +X0469782Y0344587* +X0469783Y0344595* +Y0348195* +X0469724Y034864* +X0469668Y0349085* +X0469664Y0349095* +X0469663Y0349104* +X0469492Y0349518* +X0469322Y0349935* +X0469316Y0349943* +X0469312Y0349952* +X0469039Y0350308* +X0468767Y0350666* +X0468759Y0350672* +X0468754Y0350679* +X0468397Y0350953* +X0468042Y0351228* +X0468033Y0351232* +X0468026Y0351238* +X0467611Y035141* +X0467197Y0351584* +X0441997Y0358484* +X0441987Y0358485* +X0441978Y0358489* +X0441533Y0358548* +X0441088Y0358609* +X0441078Y0358608* +X0441069Y0358609* +G37* +G36* +X0169603Y0357515D02* +X0166861D01* +Y035608* +X0166991Y035543* +X0167359Y0354878* +X0167911Y0354509* +X0168562Y035438* +X0169603* +Y0357515* +G37* +G36* +X0542837Y0357268D02* +X0539287D01* +Y0353717* +X0539499Y0353745* +X0540628Y0354213* +X0541598Y0354957* +X0542342Y0355927* +X054281Y0357056* +X0542837Y0357268* +G37* +G36* +X0434143Y0360262D02* +X0428327D01* +Y0356283* +X0429295* +X0430584Y0356452* +X0431785Y035695* +X0432816Y0357741* +X0433608Y0358772* +X0434105Y0359973* +X0434143Y0360262* +G37* +G36* +X0426327D02* +X042051D01* +X0420548Y0359973* +X0421046Y0358772* +X0421837Y0357741* +X0422868Y035695* +X0424069Y0356452* +X0425358Y0356283* +X0426327* +Y0360262* +G37* +G36* +X0480331Y0354353D02* +Y0350803D01* +X0483881* +X0483853Y0351015* +X0483385Y0352144* +X0482641Y0353114* +X0481672Y0353858* +X0480542Y0354325* +X0480331Y0354353* +G37* +G36* +X0478331D02* +X0478119Y0354325D01* +X047699Y0353858* +X047602Y0353114* +X0475276Y0352144* +X0474808Y0351015* +X0474781Y0350803* +X0478331* +Y0354353* +G37* +G36* +X0537287Y0357268D02* +X0533737D01* +X0533765Y0357056* +X0534233Y0355927* +X0534977Y0354957* +X0535947Y0354213* +X0537076Y0353745* +X0537287Y0353717* +Y0357268* +G37* +G36* +X0632303Y0363137D02* +X0625571D01* +X0625041Y0363031* +X0624592Y0362731* +X0624291Y0362282* +X0624186Y0361752* +Y0358759* +X0624291Y0358229* +X0624592Y035778* +X0625041Y035748* +X0625571Y0357375* +X0626359* +X0626529Y0356875* +X0626452Y0356816* +X0625893Y0356088* +X0625542Y035524* +X0625423Y0354331* +X0625542Y0353421* +X0625893Y0352573* +X0626452Y0351846* +X062718Y0351287* +X0628027Y0350936* +X0628937Y0350816* +X0629847Y0350936* +X0630694Y0351287* +X0631422Y0351846* +X0631981Y0352573* +X0632332Y0353421* +X0632451Y0354331* +X0632332Y035524* +X0631981Y0356088* +X0631422Y0356816* +X0631345Y0356875* +X0631515Y0357375* +X0632303* +X0632833Y035748* +X0633282Y035778* +X0633583Y0358229* +X0633688Y0358759* +Y0361752* +X0633583Y0362282* +X0633282Y0362731* +X0632833Y0363031* +X0632303Y0363137* +G37* +G36* +X047222Y0333866D02* +X0471012D01* +Y0331315* +X0471367Y0331385* +X0471815Y0331685* +X0472114Y0332133* +X047222Y0332661* +Y0333866* +G37* +G36* +X0465272Y0325598D02* +X0464064D01* +Y0324394* +X0464169Y0323865* +X0464468Y0323417* +X0464917Y0323118* +X0465272Y0323047* +Y0325598* +G37* +G36* +X0295827Y0323665D02* +X0295378D01* +X0294827Y0323555* +X0294359Y0323242* +X0294047Y0322775* +X0293937Y0322223* +Y0321715* +X0295827* +Y0323665* +G37* +G36* +X04525Y0329291D02* +X0452077Y0329249D01* +X0450708Y0328834* +X0449447Y032816* +X0448342Y0327253* +X0447434Y0326147* +X044676Y0324886* +X0446345Y0323518* +X0446304Y0323095* +X04525* +Y0329291* +G37* +G36* +X0468479Y0325598D02* +X0467272D01* +Y0323047* +X0467627Y0323118* +X0468075Y0323417* +X0468374Y0323865* +X0468479Y0324394* +Y0325598* +G37* +G36* +X0564322Y0317504D02* +X0561335D01* +Y031491* +X056252* +X0563209Y0315048* +X0563794Y0315438* +X0564185Y0316023* +X0564322Y0316713* +Y0317504* +G37* +G36* +X0559335D02* +X0556347D01* +Y0316713* +X0556484Y0316023* +X0556875Y0315438* +X055746Y0315048* +X055815Y031491* +X0559335* +Y0317504* +G37* +G36* +X044348Y0326163D02* +X0441705D01* +Y0322569* +Y0318975* +X044348* +X044417Y0319113* +X0444755Y0319503* +X0445145Y0320088* +X0445283Y0320778* +Y032436* +X0445145Y032505* +X0444755Y0325635* +X044417Y0326026* +X044348Y0326163* +G37* +G36* +X0439705Y0321569D02* +X0436127D01* +Y0320778* +X0436264Y0320088* +X0436655Y0319503* +X0437239Y0319113* +X0437929Y0318975* +X0439705* +Y0321569* +G37* +G36* +X04545Y0329291D02* +Y0323095D01* +X0460697* +X0460655Y0323518* +X046024Y0324886* +X0459565Y0326147* +X0458658Y0327253* +X0457553Y032816* +X0456292Y0328834* +X0454923Y0329249* +X04545Y0329291* +G37* +G36* +X0465272Y0330149D02* +X0464917Y0330079D01* +X0464468Y0329779* +X0464169Y0329331* +X0464064Y0328803* +Y0327598* +X0465272* +Y0330149* +G37* +G36* +X0177185Y0325387D02* +X0175376D01* +Y0324015* +X0179158* +X0179146Y0324077* +X0178686Y0324766* +X0177997Y0325226* +X0177185Y0325387* +G37* +G36* +X0469012Y0333866D02* +X0467804D01* +Y0332661* +X0467909Y0332133* +X0468209Y0331685* +X0468657Y0331385* +X0469012Y0331315* +Y0333866* +G37* +G36* +X0467272Y0330149D02* +Y0327598D01* +X0468479* +Y0328803* +X0468374Y0329331* +X0468075Y0329779* +X0467627Y0330079* +X0467272Y0330149* +G37* +G36* +X04945Y0329291D02* +Y0323095D01* +X0500697* +X0500655Y0323518* +X050024Y0324886* +X0499566Y0326147* +X0498658Y0327253* +X0497553Y032816* +X0496292Y0328834* +X0494923Y0329249* +X04945Y0329291* +G37* +G36* +X04925D02* +X0492077Y0329249D01* +X0490708Y0328834* +X0489447Y032816* +X0488342Y0327253* +X0487434Y0326147* +X048676Y0324886* +X0486345Y0323518* +X0486304Y0323095* +X04925* +Y0329291* +G37* +G36* +X0173876Y0325387D02* +X0172067D01* +X0171255Y0325226* +X0170567Y0324766* +X0170107Y0324077* +X0170095Y0324015* +X0173876* +Y0325387* +G37* +G36* +X0439705Y0326163D02* +X0437929D01* +X0437239Y0326026* +X0436655Y0325635* +X0436264Y032505* +X0436127Y032436* +Y0323569* +X0439705* +Y0326163* +G37* +G36* +X0444281Y0412047D02* +X0435253D01* +X0435635Y0411475* +X0436357Y0410993* +X0437208Y0410823* +X0442326* +X0443177Y0410993* +X0443898Y0411475* +X0444281Y0412047* +G37* +G36* +X0441189Y0520585D02* +X0440929Y0520534D01* +X0440561Y0520288* +X0440194Y0520534* +X0439933Y0520585* +Y0513794* +Y0507003* +X0440194Y0507055* +X0440561Y0507301* +X0440929Y0507055* +X0441189Y0507003* +Y0513794* +Y0520585* +G37* +G36* +X0446701D02* +X0446441Y0520534D01* +X0446073Y0520288* +X0445706Y0520534* +X0445445Y0520585* +Y0513794* +Y0507003* +X0445706Y0507055* +X0446073Y0507301* +X0446441Y0507055* +X0446701Y0507003* +Y0513794* +Y0520585* +G37* +G36* +X0513048Y0523395D02* +X0511613D01* +X0510963Y0523265* +X0510411Y0522897* +X0510042Y0522345* +X0509913Y0521694* +Y0520653* +X0513048* +Y0523395* +G37* +G36* +X0460481Y0520585D02* +X046022Y0520534D01* +X0459853Y0520288* +X0459485Y0520534* +X0459225Y0520585* +Y0513794* +Y0507003* +X0459485Y0507055* +X0459853Y0507301* +X046022Y0507055* +X0460481Y0507003* +Y0513794* +Y0520585* +G37* +G36* +X0413883Y0522695D02* +X0412448D01* +Y0519953* +X0415584* +Y0520994* +X0415454Y0521645* +X0415086Y0522197* +X0414534Y0522565* +X0413883Y0522695* +G37* +G36* +X0187815Y0521805D02* +X0183722D01* +Y0516301* +X0189816* +Y0519803* +X0189664Y0520569* +X018923Y0521218* +X0188581Y0521652* +X0187815Y0521805* +G37* +G36* +X0443945Y0520585D02* +X0443685Y0520534D01* +X0443317Y0520288* +X044295Y0520534* +X0442689Y0520585* +Y0513794* +Y0507003* +X044295Y0507055* +X0443317Y0507301* +X0443685Y0507055* +X0443945Y0507003* +Y0513794* +Y0520585* +G37* +G36* +X0438433D02* +X0438173Y0520534D01* +X0437806Y0520288* +X0437438Y0520534* +X0437178Y0520585* +Y0513794* +Y0507003* +X0437438Y0507055* +X0437806Y0507301* +X0438173Y0507055* +X0438433Y0507003* +Y0513794* +Y0520585* +G37* +G36* +X0301623Y0525915D02* +X0298882D01* +Y052278* +X0299923* +X0300573Y0522909* +X0301125Y0523278* +X0301494Y052383* +X0301623Y052448* +Y0525915* +G37* +G36* +X0411848Y0543395D02* +X0410413D01* +X0409763Y0543265* +X0409211Y0542897* +X0408842Y0542345* +X0408713Y0541694* +Y0540653* +X0411848* +Y0543395* +G37* +G36* +X0421048Y0541713D02* +X0418011D01* +X0418045Y0541457* +X0418433Y054052* +X0419051Y0539715* +X0419855Y0539098* +X0420793Y0538709* +X0421048Y0538676* +Y0541713* +G37* +G36* +X0224392Y0546075D02* +X0218993D01* +Y0545626* +X0219103Y0545075* +X0219415Y0544607* +X0219558Y0544512* +Y0543911* +X0219415Y0543815* +X0219103Y0543347* +X0218993Y0542796* +Y0542591* +X0218928Y0542537* +X0218493Y054237* +X0218209Y0542559* +X021772Y0542657* +X0217643* +Y0535689* +X021772* +X0217772Y05357* +X021826Y0535679* +X0218412Y0535356* +X0218441Y0535286* +Y0529905* +X0218527Y0529471* +Y0528701* +X0218625Y0528211* +X0218902Y0527796* +X0219317Y0527519* +X0219806Y0527422* +X022146* +X0221949Y0527519* +X0222364Y0527796* +X0222641Y0528211* +X0222739Y0528701* +Y0529471* +X0222825Y0529905* +Y0533396* +X0223306Y0533596* +X0224016Y053414* +X0224561Y0534851* +X0224904Y0535678* +X0225021Y0536565* +X0224904Y0537453* +X0224561Y053828* +X0224108Y053887* +X0223969Y0539379* +X0224282Y0539847* +X0224392Y0540398* +Y0542796* +X0224282Y0543347* +X0223969Y0543815* +X0223827Y0543911* +Y0544512* +X0223969Y0544607* +X0224282Y0545075* +X0224392Y0545626* +Y0546075* +G37* +G36* +X0414783Y0543395D02* +X0413348D01* +Y0540653* +X0416484* +Y0541694* +X0416354Y0542345* +X0415986Y0542897* +X0415434Y0543265* +X0414783Y0543395* +G37* +G36* +X0202438Y0531521D02* +X020199D01* +X0201438Y0531411* +X020097Y0531098* +X0200658Y0530631* +X0200548Y0530079* +Y0529571* +X0202438* +Y0531521* +G37* +G36* +Y0528071D02* +X0200548D01* +Y0527563* +X0200658Y0527012* +X020097Y0526544* +X0201438Y0526232* +X020199Y0526122* +X0202438* +Y0528071* +G37* +G36* +X0492763Y0540884D02* +X0490022D01* +Y0537748* +X0491063* +X0491714Y0537878* +X0492265Y0538246* +X0492634Y0538798* +X0492763Y0539449* +Y0540884* +G37* +G36* +X0194291Y056751D02* +X0191813Y0567314D01* +X0189395Y0566734* +X0187098Y0565782* +X0184978Y0564483* +X0183088Y0562869* +X0181473Y0560978* +X0180174Y0558858* +X0179223Y0556561* +X0178642Y0554144* +X0178447Y0551665* +X0178642Y0549187* +X0179223Y0546769* +X0180174Y0544472* +X0181473Y0542352* +X0183088Y0540462* +X0184978Y0538847* +X0187098Y0537548* +X0189395Y0536597* +X0191813Y0536016* +X0194291Y0535821* +X019677Y0536016* +X0199187Y0536597* +X0201484Y0537548* +X0203604Y0538847* +X0205495Y0540462* +X0207109Y0542352* +X0208408Y0544472* +X020936Y0546769* +X020994Y0549187* +X0210135Y0551665* +X020994Y0554144* +X020936Y0556561* +X0208408Y0558858* +X0207109Y0560978* +X0205495Y0562869* +X0203604Y0564483* +X0201484Y0565782* +X0199187Y0566734* +X019677Y0567314* +X0194291Y056751* +G37* +G36* +X0421898Y0520585D02* +X0421637Y0520534D01* +X042126Y0520281* +X0421007Y0519903* +X0420919Y0519458* +Y0514544* +X0421898* +Y0520585* +G37* +G36* +X0171544Y0504217D02* +X0170657Y05041D01* +X0169829Y0503757* +X0169119Y0503212* +X0168574Y0502502* +X0168232Y0501675* +X0168115Y0500787* +X0168232Y04999* +X0168574Y0499073* +X0169119Y0498362* +X0169829Y0497818* +X0170657Y0497475* +X0171544Y0497358* +X0172432Y0497475* +X0173259Y0497818* +X0173416Y0497938* +X0173864Y0497717* +Y0497483* +X0173962Y0496993* +X0174239Y0496578* +X0174654Y0496301* +X0175143Y0496204* +X0176797* +X0177286Y0496301* +X0177701Y0496578* +X0177979Y0496993* +X0178076Y0497483* +Y0500116* +X0178209Y0500787* +X0178076Y0501459* +Y0501892* +X0177979Y0502382* +X0177701Y0502796* +X0177286Y0503074* +X0176797Y0503171* +X0175143* +X0174654Y0503074* +X0174284Y0502826* +X0174265* +X0173969Y0503212* +X0173259Y0503757* +X0172432Y05041* +X0171544Y0504217* +G37* +G36* +X0335951Y0498351D02* +X033491D01* +X0334259Y0498221* +X0333707Y0497853* +X0333339Y0497301* +X0333209Y049665* +Y0495215* +X0335951* +Y0498351* +G37* +G36* +X0329467Y0500967D02* +X0327517D01* +Y0500518* +X0327627Y0499966* +X0327939Y0499498* +X0328407Y0499186* +X0328959Y0499076* +X0329467* +Y0500967* +G37* +G36* +X0247104Y0498965D02* +X0246656D01* +Y0497015* +X0248546* +Y0497523* +X0248436Y0498075* +X0248124Y0498542* +X0247656Y0498855* +X0247104Y0498965* +G37* +G36* +X0596244Y0499909D02* +X0590799D01* +X0590827Y0499633* +X0591199Y0498405* +X0591804Y0497274* +X0592617Y0496283* +X0593609Y0495469* +X059474Y0494864* +X0595967Y0494492* +X0596244Y0494465* +Y0499909* +G37* +G36* +X0580067D02* +X0574622D01* +Y0494465* +X0574898Y0494492* +X0576126Y0494864* +X0577257Y0495469* +X0578249Y0496283* +X0579063Y0497274* +X0579667Y0498405* +X058004Y0499633* +X0580067Y0499909* +G37* +G36* +X0187197Y0505199D02* +X0186431Y0505047D01* +X0185782Y0504613* +X0182274Y0501105* +X018184Y0500456* +X0181688Y049969* +X018184Y0498924* +X0182274Y0498275* +X0183563Y0496986* +X018124Y0494663* +X0181026Y0494806* +X0180537Y0494903* +X0178884* +X0178394Y0494806* +X0177979Y0494529* +X0177702Y0494114* +X0177605Y0493624* +Y0491028* +X0172892Y0486316* +X0172347Y0485606* +X0172004Y0484778* +X0171888Y0483891* +Y0478695* +X0170564* +X0170361Y0478999* +X0169946Y0479276* +X0169457Y0479373* +X0165047* +X0164558Y0479276* +X0164143Y0478999* +X0163866Y0478584* +X0163768Y0478094* +Y0476441* +X0163866Y0475951* +X0164143Y0475536* +X0164558Y0475259* +X0165047Y0475162* +X0169457* +X0169946Y0475259* +X0170361Y0475536* +X0170564Y047584* +X0171888* +Y0471965* +X0171932Y047163* +X0171541Y047124* +X0171066Y0470529* +X0170899Y046969* +Y0465461* +X0170283* +Y0465736* +X0170117Y0466575* +X0170098Y0466602* +X0170052Y0466837* +X0169592Y0467526* +X016902Y0467908* +X0166021Y0470906* +X016531Y0471382* +X0164471Y0471548* +X0161712* +X0160873Y0471382* +X0160161Y0470906* +X0157163Y0467908* +X0156591Y0467526* +X0156131Y0466837* +X0156084Y0466602* +X0156066Y0466575* +X0155899Y0465736* +Y0463269* +X015597Y0462916* +Y0460513* +X0156131Y0459701* +X0156591Y0459013* +X0157279Y0458553* +X0158091Y0458392* +X0158903Y0458553* +X0159592Y0459013* +X0160052Y0459701* +X0160213Y0460513* +Y0462916* +X0160283Y0463269* +Y0464623* +X0160469Y0464764* +X0160969Y0464516* +Y0464019* +X0165213* +Y0464516* +X0165713Y0464764* +X0165899Y0464623* +Y0463269* +X016597Y0462916* +Y0460513* +X0166131Y0459701* +X0166591Y0459013* +X0167279Y0458553* +X0168091Y0458392* +X0168903Y0458553* +X0169592Y0459013* +X0170052Y0459701* +X0170213Y0460513* +Y0461077* +X0170969* +Y0460513* +X0171131Y0459701* +X0171591Y0459013* +X0172279Y0458553* +X0173091Y0458392* +X0173903Y0458553* +X0174592Y0459013* +X0175052Y0459701* +X0175213Y0460513* +Y0461077* +X017597* +Y0460513* +X0176131Y0459701* +X0176591Y0459013* +X0177279Y0458553* +X0178091Y0458392* +X0178903Y0458553* +X0179592Y0459013* +X0180052Y0459701* +X0180213Y0460513* +Y0462916* +X0180283Y0463269* +X0180213Y0463623* +Y0466025* +X0180052Y0466837* +X0179592Y0467526* +X0178903Y0467986* +X0178091Y0468147* +X0177279Y0467986* +X0176591Y0467526* +X0176131Y0466837* +X017597Y0466025* +Y0465461* +X0175283* +Y0468507* +X0175317Y0468536* +X0176205Y0468653* +X0177032Y0468996* +X0177384Y0469266* +X0177676* +X0178228Y0469376* +X0178695Y0469688* +X0178791Y0469831* +X0179392* +X0179487Y0469688* +X0179955Y0469376* +X0180507Y0469266* +X0180956* +Y0474665* +X0180507* +X0179955Y0474555* +X0179487Y0474242* +X0178971Y0474352* +X0178746Y0474581* +Y047753* +X0178756Y0477546* +X0179358* +X0179453Y0477403* +X0179921Y047709* +X0180472Y0476981* +X0180921* +Y0482379* +X0180472* +X0179921Y0482269* +X0179453Y0481957* +X0178951Y0482105* +X0178746Y048231* +Y0482471* +X0190318Y0494042* +X0190863Y0494753* +X0191206Y049558* +X0191323Y0496467* +Y0497477* +X019212Y0498275* +X0192554Y0498924* +X0192706Y049969* +X0192554Y0500456* +X019212Y0501105* +X0188612Y0504613* +X0187963Y0505047* +X0187197Y0505199* +G37* +G36* +X0603689Y0499909D02* +X0598244D01* +Y0494465* +X0598521Y0494492* +X0599748Y0494864* +X0600879Y0495469* +X0601871Y0496283* +X0602685Y0497274* +X0603289Y0498405* +X0603662Y0499633* +X0603689Y0499909* +G37* +G36* +X0332916Y0500967D02* +X0330966D01* +Y0499076* +X0331474* +X0332026Y0499186* +X0332494Y0499498* +X0332806Y0499966* +X0332916Y0500518* +Y0500967* +G37* +G36* +X0354466Y0513925D02* +X0353425D01* +X0352774Y0513795* +X0352223Y0513427* +X0351854Y0512875* +X0351725Y0512224* +Y0510789* +X0354466* +Y0513925* +G37* +G36* +X0189816Y0514801D02* +X0183722D01* +Y0509298* +X0187815* +X0188581Y050945* +X018923Y0509884* +X0189664Y0510533* +X0189816Y0511299* +Y0514801* +G37* +G36* +X0268241Y0518048D02* +Y0513675D01* +X0269613* +Y0516075* +X0269452Y0516887* +X0268992Y0517575* +X0268303Y0518035* +X0268241Y0518048* +G37* +G36* +X03513Y0514768D02* +X034935D01* +Y0512877* +X0349858* +X035041Y0512987* +X0350877Y05133* +X035119Y0513767* +X03513Y0514319* +Y0514768* +G37* +G36* +X0247104Y0505365D02* +X0246656D01* +Y0503415* +X0248546* +Y0503923* +X0248436Y0504475* +X0248124Y0504943* +X0247656Y0505255* +X0247104Y0505365* +G37* +G36* +X0248546Y0501915D02* +X0246656D01* +Y0499966* +X0247104* +X0247656Y0500076* +X0248124Y0500388* +X0248436Y0500856* +X0248546Y0501407* +Y0501915* +G37* +G36* +X0269613Y0512175D02* +X0268241D01* +Y0507803* +X0268303Y0507815* +X0268992Y0508275* +X0269452Y0508964* +X0269613Y0509776* +Y0512175* +G37* +G36* +X0504299Y0513044D02* +X0503319D01* +Y0507003* +X050358Y0507055* +X0503958Y0507307* +X050421Y0507685* +X0504299Y0508131* +Y0513044* +G37* +G36* +X0491063Y0545519D02* +X0490022D01* +Y0542384* +X0492763* +Y0543819* +X0492634Y0544469* +X0492265Y0545021* +X0491714Y054539* +X0491063Y0545519* +G37* +G36* +X0487183Y0579695D02* +X0485748D01* +Y0576953* +X0488884* +Y0577994* +X0488754Y0578645* +X0488386Y0579197* +X0487834Y0579565* +X0487183Y0579695* +G37* +G36* +X0261227Y0578515D02* +X0259337D01* +Y0578008* +X0259447Y0577456* +X0259759Y0576988* +X0260227Y0576676* +X0260778Y0576566* +X0261227* +Y0578515* +G37* +G36* +X0220941Y0580953D02* +Y0577915D01* +X0223979* +X0223945Y0578171* +X0223557Y0579108* +X0222939Y0579913* +X0222134Y0580531* +X0221197Y0580919* +X0220941Y0580953* +G37* +G36* +X0219441D02* +X0219186Y0580919D01* +X0218248Y0580531* +X0217443Y0579913* +X0216826Y0579108* +X0216438Y0578171* +X0216404Y0577915* +X0219441* +Y0580953* +G37* +G36* +X0182991Y0578995D02* +X0182104Y0578878D01* +X0181277Y0578535* +X0180566Y057799* +X0180021Y057728* +X0179679Y0576453* +X0179592Y0575795* +X0171437* +Y0575804* +X017134Y0576293* +X0171063Y0576708* +X0170648Y0576986* +X0170158Y0577083* +X0168505* +X0168015Y0576986* +X01676Y0576708* +X0167323Y0576293* +X0167226Y0575804* +Y0571394* +X0167323Y0570905* +X01676Y057049* +X0167802Y0570355* +Y0568623* +X0167421Y0568478* +X0167302Y0568454* +X0166908Y0568718* +X0166418Y0568815* +X0164765* +X0164275Y0568718* +X016386Y056844* +X0163583Y0568026* +X0163486Y0567536* +Y0563127* +X0163552Y0562792* +Y0561807* +X0161606* +X0160956Y0561677* +X0160404Y0561309* +X0160035Y0560757* +X0159906Y0560106* +Y0556524* +X0160035Y0555873* +X0160404Y0555321* +X0160956Y0554953* +X0161606Y0554823* +Y0554326* +X0160956Y0554197* +X0160404Y0553828* +X0160035Y0553277* +X0159906Y0552626* +Y0549043* +X0160035Y0548393* +X0160404Y0547841* +X0160956Y0547472* +X0161606Y0547343* +X0161752* +Y0526563* +X0161907Y0525783* +X0162349Y0525121* +X0165995Y0521476* +X0165962Y0520977* +X0165933Y0520954* +X0165221Y0520026* +X0164773Y0518945* +X016462Y0517785* +X0164773Y0516625* +X0165221Y0515545* +X0165933Y0514616* +X0166861Y0513904* +X0167942Y0513456* +X0169102Y0513304* +X0170262Y0513456* +X0171343Y0513904* +X0172271Y0514616* +X0172983Y0515545* +X0173431Y0516625* +X0173538Y0517436* +X0174038Y0517403* +Y0514374* +X0161123Y050146* +X0160792Y0500964* +X0160675Y0500379* +Y0489795* +X0160792Y048921* +X0161123Y0488714* +X016385Y0485987* +X0163768Y0485575* +Y0483921* +X0163866Y0483432* +X0164143Y0483017* +X0164558Y048274* +X0165047Y0482642* +X0169457* +X0169946Y048274* +X0170361Y0483017* +X0170638Y0483432* +X0170736Y0483921* +Y0485575* +X0170638Y0486064* +X0170361Y0486479* +X0169946Y0486756* +X0169457Y0486854* +X0167309* +X0163734Y0490429* +Y0499745* +X0175666Y0511678* +X0176128Y0511486* +Y0511299* +X0176281Y0510533* +X0176715Y0509884* +X0177364Y050945* +X017813Y0509298* +X0182222* +Y0521805* +X017813* +X0177596Y0521699* +X0177096Y0522029* +Y053165* +X0177206Y0531696* +X0177916Y053224* +X0178461Y0532951* +X0178804Y0533778* +X0178921Y0534665* +X0178804Y0535553* +X0178461Y053638* +X0177916Y053709* +X0177206Y0537635* +X0176379Y0537978* +X0175491Y0538095* +X0174604Y0537978* +X0173777Y0537635* +X0173066Y053709* +X0172521Y053638* +X0172179Y0535553* +X0172062Y0534665* +X0172179Y0533778* +X0172521Y0532951* +X0173066Y053224* +X0173777Y0531696* +X0174038Y0531587* +Y0518168* +X0173538Y0518135* +X0173431Y0518945* +X0172983Y0520026* +X0172271Y0520954* +X0171343Y0521666* +X0171033Y0521795* +X0170986Y0522033* +X0170544Y0522694* +X0165831Y0527408* +Y0547343* +X0165976* +X0166627Y0547472* +X0167179Y0547841* +X0167547Y0548393* +X0167677Y0549043* +Y0552021* +X0168177Y0552172* +X0168204Y0552132* +X0168756Y0551763* +X0169406Y0551634* +X0173776* +X0174427Y0551763* +X0174979Y0552132* +X0175347Y0552683* +X0175477Y0553334* +Y0556917* +X0175347Y0557567* +X0174979Y0558119* +X0174427Y0558488* +X0173776Y0558617* +Y0559114* +X0174427Y0559243* +X0174979Y0559612* +X0175347Y0560163* +X0175477Y0560814* +Y0564397* +X0175347Y0565048* +X0174979Y0565599* +X0174427Y0565968* +X0173776Y0566097* +X0170861* +Y0570355* +X0171063Y057049* +X017134Y0570905* +X0171437Y0571394* +Y0572736* +X0180291* +X0180877Y0572852* +X0180912Y0572876* +X0181277Y0572596* +X0182104Y0572253* +X0182991Y0572136* +X0183879Y0572253* +X0184706Y0572596* +X0185416Y057314* +X0185961Y0573851* +X0186304Y0574678* +X0186421Y0575565* +X0186304Y0576453* +X0185961Y057728* +X0185416Y057799* +X0184706Y0578535* +X0183879Y0578878* +X0182991Y0578995* +G37* +G36* +X0370277Y0578072D02* +X0368419D01* +X0367779Y0577945* +X0367238Y0577583* +X0366876Y0577041* +X0366748Y0576402* +Y0575429* +X0370277* +Y0578072* +G37* +G36* +X0556347Y0581555D02* +X0550902D01* +Y057611* +X0551178Y0576137* +X0552406Y057651* +X0553537Y0577114* +X0554529Y0577928* +X0555342Y057892* +X0555947Y0580051* +X0556319Y0581279* +X0556347Y0581555* +G37* +G36* +X0548902D02* +X0543457D01* +X0543484Y0581279* +X0543856Y0580051* +X0544461Y057892* +X0545275Y0577928* +X0546266Y0577114* +X0547398Y057651* +X0548625Y0576137* +X0548902Y057611* +Y0581555* +G37* +G36* +X0492848Y0581295D02* +X0491413D01* +X0490763Y0581165* +X0490211Y0580797* +X0489842Y0580245* +X0489713Y0579594* +Y0578553* +X0492848* +Y0581295* +G37* +G36* +X0583588Y0594472D02* +X0577772D01* +Y0590493* +X057874* +X0580029Y0590662* +X058123Y059116* +X0582261Y0591951* +X0583053Y0592983* +X058355Y0594184* +X0583588Y0594472* +G37* +G36* +X0575772D02* +X0569955D01* +X0569993Y0594184* +X0570491Y0592983* +X0571282Y0591951* +X0572313Y059116* +X0573514Y0590662* +X0574803Y0590493* +X0575772* +Y0594472* +G37* +G36* +X057874Y0600452D02* +X0577772D01* +Y0596472* +X0583588* +X058355Y0596761* +X0583053Y0597962* +X0582261Y0598993* +X058123Y0599785* +X0580029Y0600282* +X057874Y0600452* +G37* +G36* +X0575772D02* +X0574803D01* +X0573514Y0600282* +X0572313Y0599785* +X0571282Y0598993* +X0570491Y0597962* +X0569993Y0596761* +X0569955Y0596472* +X0575772* +Y0600452* +G37* +G36* +X0468938Y0584314D02* +X0465985D01* +X0465634Y0584244* +X0465336Y0584045* +X0462088Y0580797* +X0461927Y0580556* +X0461837* +Y0580237* +X0461819Y0580148* +Y0579262* +X046183Y0579207* +X0461826Y0579151* +X0461837Y0579118* +Y0578576* +X0458648* +Y0578867* +X0458523Y0579494* +X0458168Y0580027* +X0457636Y0580382* +X0457008Y0580507* +X0451339* +X0450711Y0580382* +X0450179Y0580027* +X0449823Y0579494* +X0449698Y0578867* +Y0570835* +X0449823Y0570208* +X0450179Y0569676* +X0450711Y056932* +X0451339Y0569195* +X0457008* +X0457636Y056932* +X0458168Y0569676* +X0458523Y0570208* +X0458648Y0570835* +Y0571717* +X0461837* +Y0570352* +X0461826Y0570319* +X046183Y0570262* +X0461819Y0570207* +Y0569405* +Y0569321* +X0461837Y0568913* +X0462023Y056849* +Y0561516* +X046214Y0560628* +X0462483Y0559801* +X0463028Y0559091* +X0463566Y0558677* +X0463738Y0558543* +X0463687Y0558026* +X0463676Y0558009* +X0463586Y0557558* +Y0557285* +X0469762* +Y0557558* +X0469672Y0558009* +X0469417Y0558392* +Y0558418* +X0469672Y05588* +X0469762Y0559251* +Y0561299* +X0469672Y056175* +X0469417Y0562132* +X0469034Y0562387* +X0468882Y0562418* +Y0565156* +X0468938* +X0469289Y0565226* +X0469587Y0565424* +X0469785Y0565722* +X0469855Y0566073* +Y0569813* +X0469785Y0570165* +X0469587Y0570462* +X0469289Y0570661* +X0468938Y0570731* +X0468038* +X0468Y057077* +X0467878Y0570929* +X0467718Y0571051* +X046718Y0571589* +Y057788* +X0468038Y0578738* +X0468938* +X0469289Y0578808* +X0469587Y0579007* +X0469785Y0579305* +X0469855Y0579656* +Y0583396* +X0469785Y0583747* +X0469587Y0584045* +X0469289Y0584244* +X0468938Y0584314* +G37* +G36* +X0495783Y0581295D02* +X0494348D01* +Y0578553* +X0497484* +Y0579594* +X0497354Y0580245* +X0496986Y0580797* +X0496434Y0581165* +X0495783Y0581295* +G37* +G36* +X0550902Y0589D02* +Y0583555D01* +X0556347* +X0556319Y0583832* +X0555947Y0585059* +X0555342Y058619* +X0554529Y0587182* +X0553537Y0587996* +X0552406Y05886* +X0551178Y0588973* +X0550902Y0589* +G37* +G36* +X0548902D02* +X0548625Y0588973D01* +X0547398Y05886* +X0546266Y0587996* +X0545275Y0587182* +X0544461Y058619* +X0543856Y0585059* +X0543484Y0583832* +X0543457Y0583555* +X0548902* +Y0589* +G37* +G36* +X0162678Y0577083D02* +X0162601D01* +Y0574349* +X0163957* +Y0575804* +X0163859Y0576293* +X0163582Y0576708* +X0163167Y0576986* +X0162678Y0577083* +G37* +G36* +X0503498Y0565949D02* +X0502493Y0565816D01* +X0501555Y0565428* +X0500751Y0564811* +X0500133Y0564006* +X0499745Y0563069* +X0499612Y0562063* +X0499745Y0561057* +X0500133Y056012* +X0500751Y0559315* +X0501555Y0558698* +X0502493Y0558309* +X0503498Y0558177* +X0504504Y0558309* +X0505441Y0558698* +X0506246Y0559315* +X0506864Y056012* +X0507252Y0561057* +X0507384Y0562063* +X0507252Y0563069* +X0506864Y0564006* +X0506246Y0564811* +X0505441Y0565428* +X0504504Y0565816* +X0503498Y0565949* +G37* +G36* +X0497685Y0555156D02* +X0494549D01* +Y0552414* +X0495984* +X0496635Y0552543* +X0497187Y0552912* +X0497555Y0553463* +X0497685Y0554114* +Y0555156* +G37* +G36* +X0231127Y0568665D02* +X0230678D01* +X0230127Y0568555* +X0229659Y0568243* +X0229347Y0567775* +X0229237Y0567223* +Y0566715* +X0231127* +Y0568665* +G37* +G36* +Y0565215D02* +X0229237D01* +Y0564708* +X0229347Y0564156* +X0229659Y0563688* +X0230127Y0563376* +X0230678Y0563266* +X0231127* +Y0565215* +G37* +G36* +X0220942Y0549466D02* +X0220434D01* +X0219883Y0549356* +X0219415Y0549043* +X0219103Y0548576* +X0218993Y0548024* +Y0547575* +X0220942* +Y0549466* +G37* +G36* +X0421048Y054625D02* +X0420793Y0546216D01* +X0419855Y0545828* +X0419051Y0545211* +X0418433Y0544406* +X0418045Y0543469* +X0418011Y0543213* +X0421048* +Y054625* +G37* +G36* +X0493049Y0555156D02* +X0489914D01* +Y0554114* +X0490043Y0553463* +X0490412Y0552912* +X0490964Y0552543* +X0491614Y0552414* +X0493049* +Y0555156* +G37* +G36* +X022295Y0549466D02* +X0222442D01* +Y0547575* +X0224392* +Y0548024* +X0224282Y0548576* +X0223969Y0549043* +X0223502Y0549356* +X022295Y0549466* +G37* +G36* +X0476812Y0584314D02* +X0473859D01* +X0473508Y0584244* +X047321Y0584045* +X0473011Y0583747* +X0472941Y0583396* +Y0579656* +X0473011Y0579305* +X047321Y0579007* +X0473508Y0578808* +X0473859Y0578738* +X0474758* +X0475617Y057788* +Y0571589* +X0474758Y0570731* +X0473859* +X0473508Y0570661* +X047321Y0570462* +X0473011Y0570165* +X0472941Y0569813* +Y0566073* +X0473011Y0565722* +X047321Y0565424* +X0473508Y0565226* +X0473859Y0565156* +X0474071* +Y0562449* +X0473762Y0562387* +X047338Y0562132* +X0473125Y056175* +X0473035Y0561299* +Y0559251* +X0473125Y05588* +X047338Y0558418* +Y0558392* +X0473125Y0558009* +X0473035Y0557558* +Y0557285* +X0476123* +Y0555785* +X0473035* +Y0555511* +X0473125Y055506* +X047338Y0554678* +Y0554651* +X0473125Y0554269* +X0473035Y0553818* +Y0551771* +X0473125Y055132* +X047338Y0550938* +X0473762Y0550682* +X0474213Y0550592* +X0478032* +X0478483Y0550682* +X0478866Y0550938* +X0479121Y055132* +X0479211Y0551771* +Y0552043* +X048087Y0553702* +X0481201Y0554199* +X0481318Y0554784* +Y0558286* +X0481201Y0558871* +X048087Y0559367* +X0480471Y0559766* +X0480813Y0560592* +X048093Y056148* +Y0564925* +X0489914* +Y0561594* +X0490043Y0560944* +X0490412Y0560392* +X0490964Y0560023* +X0491614Y0559894* +Y0559397* +X0490964Y0559268* +X0490412Y0558899* +X0490043Y0558348* +X0489914Y0557697* +Y0556656* +X0497685* +Y0557697* +X0497555Y0558348* +X0497187Y0558899* +X0496635Y0559268* +X0495984Y0559397* +Y0559894* +X0496635Y0560023* +X0497187Y0560392* +X0497555Y0560944* +X0497685Y0561594* +Y0565003* +X0497977Y0565042* +X0498804Y0565384* +X0499515Y0565929* +X050207Y0568484* +X0502493Y0568309* +X0503498Y0568177* +X0504504Y0568309* +X0505441Y0568698* +X0506246Y0569315* +X0506864Y057012* +X0507252Y0571057* +X0507384Y0572063* +X0507252Y0573069* +X0506864Y0574006* +X0506246Y0574811* +X0505441Y0575428* +X0504504Y0575816* +X0503498Y0575949* +X0502493Y0575816* +X050171Y0575492* +X0500798* +X0499911Y0575375* +X0499084Y0575033* +X0498374Y0574488* +X0497183Y0573297* +X0496986Y0573316* +X0496434Y0573685* +X0495783Y0573814* +Y0574311* +X0496434Y0574441* +X0496986Y0574809* +X0497354Y0575361* +X0497484Y0576012* +Y0577053* +X0489713* +Y0576012* +X0489842Y0575361* +X0490211Y0574809* +X0490763Y0574441* +X0491413Y0574311* +Y0573814* +X0490763Y0573685* +X0490211Y0573316* +X0489842Y0572765* +X0489713Y0572114* +Y0571784* +X0488285* +X0487834Y0572085* +X0487183Y0572215* +Y0572711* +X0487834Y0572841* +X0488386Y0573209* +X0488754Y0573761* +X0488884Y0574412* +Y0575453* +X0484998* +Y0576203* +X0484248* +Y0579695* +X0482813* +X0482163Y0579565* +X0481611Y0579197* +X048146Y057897* +X0480993Y0579108* +X0480971Y0579151* +X0480967Y0579207* +X0480977Y0579262* +Y0580148* +X048096Y0580237* +Y0580556* +X048087* +X0480709Y0580797* +X0477461Y0584045* +X0477163Y0584244* +X0476812Y0584314* +G37* +G36* +X0338301Y0575551D02* +X033726D01* +X0336609Y0575421* +X0336057Y0575053* +X0335689Y0574501* +X033556Y057385* +Y0572415* +X0338301* +Y0575551* +G37* +G36* +X0375306Y0573929D02* +X0371777D01* +Y0571287* +X0373635* +X0374274Y0571414* +X0374816Y0571776* +X0375178Y0572318* +X0375306Y0572957* +Y0573929* +G37* +G36* +X0161101Y0577083D02* +X0161024D01* +X0160535Y0576986* +X016012Y0576708* +X0159843Y0576293* +X0159746Y0575804* +Y0574349* +X0161101* +Y0577083* +G37* +G36* +X0210191Y0581051D02* +X0209186Y0580919D01* +X0208248Y0580531* +X0207443Y0579913* +X0206826Y0579108* +X0206438Y0578171* +X0206305Y0577165* +X0206438Y057616* +X0206826Y0575222* +X0207443Y0574417* +X0208248Y05738* +X0208367Y0573751* +X0208268Y0573251* +X020786* +X0207209Y0573121* +X0207203Y0573117* +X0204044Y0576275* +Y0581018* +X0196339* +Y0573313* +X0202681* +X0206159Y0569834* +Y056718* +X0206289Y056653* +X0206658Y0565978* +X0207209Y0565609* +X020786Y056548* +X0211442* +X0212093Y0565609* +X0212645Y0565978* +X0213014Y056653* +X0213041Y0566669* +X0213572Y0566777* +X0213638Y056668* +X0213606Y0566517* +Y0547419* +X0212442Y0546256* +X0212022Y0545627* +X0211875Y0544886* +Y0534299* +X0211837Y0534292* +X0211422Y0534015* +X0211144Y05336* +X0211047Y053311* +Y0531379* +X0210869Y0531257* +X0210547Y0531157* +X0210167Y0531411* +X0209615Y0531521* +X0207218* +X0206666Y0531411* +X0206199Y0531098* +X0206103Y0530956* +X0205502* +X0205406Y0531098* +X0204939Y0531411* +X0204387Y0531521* +X0203938* +Y0526122* +X0204387* +X0204939Y0526232* +X0205406Y0526544* +X0205502Y0526687* +X0206103* +X0206199Y0526544* +X0206666Y0526232* +X0207218Y0526122* +X0209615* +X0210167Y0526232* +X0210635Y0526544* +X0210692Y0526629* +X0211875* +Y0526066* +X0212019Y0525341* +X0211721Y0524953* +X0211379Y0524126* +X0211262Y0523239* +Y0521805* +X0206476* +X0205711Y0521652* +X0205061Y0521218* +X0204627Y0520569* +X0204475Y0519803* +Y051918* +X0201476* +X0200563Y051906* +X0199711Y0518707* +X019898Y0518146* +X0198419Y0517415* +X0198066Y0516563* +X0197946Y051565* +X0198066Y0514736* +X0198419Y0513884* +X019898Y0513153* +X0199711Y0512592* +X0200563Y051224* +X0201476Y0512119* +X0204475* +Y0511299* +X0204627Y0510533* +X0205061Y0509884* +X0205711Y050945* +X0206476Y0509298* +X0216161* +X0216927Y050945* +X0217577Y0509884* +X021801Y0510533* +X0218163Y0511299* +Y0519803* +X0218121Y0520015* +Y0521827* +X0218635Y0522498* +X0218978Y0523325* +X0219095Y0524213* +X0218978Y05251* +X0218635Y0525927* +X021809Y0526638* +X021738Y0527182* +X0216553Y0527525* +X0215749Y0527631* +Y0535429* +X0216066Y0535689* +X0216143* +Y0542657* +X0216066* +X0215749Y0542917* +Y0544083* +X0216913Y0545247* +X0217333Y0545876* +X021748Y0546617* +Y056548* +X0218923* +X0219573Y0565609* +X0220125Y0565978* +X0220494Y056653* +X0220623Y056718* +Y057155* +X0220494Y0572201* +X0220125Y0572753* +X0220067Y0572791* +X0220168Y0573189* +X022023Y0573284* +X0221197Y0573412* +X0222134Y05738* +X0222939Y0574417* +X0223557Y0575222* +X0223945Y057616* +X0223979Y0576415* +X0216404* +X0216438Y057616* +X0216826Y0575222* +X0217443Y0574417* +X0218248Y05738* +X0218367Y0573751* +X0218268Y0573251* +X0215369* +X0213488Y0575132* +X0213557Y0575222* +X0213945Y057616* +X0214077Y0577165* +X0213945Y0578171* +X0213557Y0579108* +X0212939Y0579913* +X0212134Y0580531* +X0211197Y0580919* +X0210191Y0581051* +G37* +G36* +X0161101Y0572849D02* +X0159746D01* +Y0571394* +X0159843Y0570905* +X016012Y057049* +X0160535Y0570213* +X0161024Y0570116* +X0161101* +Y0572849* +G37* +G36* +X0245743Y0570656D02* +X0244406Y056932D01* +X0244765Y0568961* +X0245233Y0568648* +X0245785Y0568538* +X0246336Y0568648* +X0246804Y0568961* +X0247121Y0569278* +X0245743Y0570656* +G37* +G36* +X0370277Y0573929D02* +X0366748D01* +Y0572957* +X0366876Y0572318* +X0367238Y0571776* +X0367779Y0571414* +X0368419Y0571287* +X0370277* +Y0573929* +G37* +G36* +X0163957Y0572849D02* +X0162601D01* +Y0570116* +X0162678* +X0163167Y0570213* +X0163582Y057049* +X0163859Y0570905* +X0163957Y0571394* +Y0572849* +G37* +G36* +X0207437Y0448815D02* +X0204695D01* +Y044738* +X0204824Y044673* +X0205193Y0446178* +X0205745Y0445809* +X0206396Y044568* +X0207437* +Y0448815* +G37* +G36* +X0528331Y044444D02* +X0527539D01* +X052685Y0444303* +X0526265Y0443912* +X0525874Y0443328* +X0525737Y0442638* +Y0441453* +X0528331* +Y044444* +G37* +G36* +X0243546Y0450967D02* +X0241596D01* +Y0449076* +X0242104* +X0242656Y0449186* +X0243124Y0449498* +X0243436Y0449966* +X0243546Y0450518* +Y0450967* +G37* +G36* +X0240096D02* +X0238147D01* +Y0450518* +X0238257Y0449966* +X0238569Y0449498* +X0239037Y0449186* +X0239589Y0449076* +X0240096* +Y0450967* +G37* +G36* +X0528331Y0439453D02* +X0525737D01* +Y0438268* +X0525874Y0437578* +X0526265Y0436993* +X052685Y0436602* +X0527539Y0436465* +X0528331* +Y0439453* +G37* +G36* +X0192341Y043099D02* +X0192279Y0430978D01* +X0191591Y0430518* +X0191131Y0429829* +X019097Y0429017* +Y0427011* +X0192341* +Y043099* +G37* +G36* +X0651988Y0450834D02* +X0645256D01* +X0644726Y0450728* +X0644277Y0450428* +X0643976Y0449979* +X0643871Y0449449* +Y0446457* +X0643976Y0445927* +X0644277Y0445477* +X0644726Y0445177* +X0645256Y0445072* +X0645327* +X0645538Y0444572* +X0645227Y0443823* +X0645108Y0442913* +X0645227Y0442004* +X0645578Y0441156* +X0646137Y0440428* +X0646865Y043987* +X0647713Y0439519* +X0648622Y0439399* +X0649532Y0439519* +X0650379Y043987* +X0651107Y0440428* +X0651665Y0441156* +X0652017Y0442004* +X0652136Y0442913* +X0652017Y0443823* +X0651706Y0444572* +X0651918Y0445072* +X0651988* +X0652518Y0445177* +X0652967Y0445477* +X0653268Y0445927* +X0653373Y0446457* +Y0449449* +X0653268Y0449979* +X0652967Y0450428* +X0652518Y0450728* +X0651988Y0450834* +G37* +G36* +X0244204Y0440165D02* +X0243756D01* +Y0438215* +X0245646* +Y0438723* +X0245536Y0439275* +X0245224Y0439743* +X0244756Y0440055* +X0244204Y0440165* +G37* +G36* +X0207437Y0453451D02* +X0206396D01* +X0205745Y0453321* +X0205193Y0452953* +X0204824Y0452401* +X0204695Y045175* +Y0450315* +X0207437* +Y0453451* +G37* +G36* +X0192341Y0462519D02* +X019097D01* +Y0460513* +X0191131Y0459701* +X0191591Y0459013* +X0192279Y0458553* +X0192341Y0458541* +Y0462519* +G37* +G36* +X0165213D02* +X0163841D01* +Y0458541* +X0163903Y0458553* +X0164592Y0459013* +X0165052Y0459701* +X0165213Y0460513* +Y0462519* +G37* +G36* +X020537Y0462251D02* +X0204328D01* +X0203678Y0462121* +X0203126Y0461753* +X0202758Y0461201* +X0202628Y046055* +Y0459115* +X020537* +Y0462251* +G37* +G36* +X0195213Y0462519D02* +X0193841D01* +Y0458541* +X0193903Y0458553* +X0194592Y0459013* +X0195052Y0459701* +X0195213Y0460513* +Y0462519* +G37* +G36* +X0347063Y0457072D02* +X0343723D01* +Y0456089* +X034552* +X0346183Y0456221* +X0346745Y0456596* +X0347063Y0457072* +G37* +G36* +X020537Y0457615D02* +X0202628D01* +Y045618* +X0202758Y045553* +X0203126Y0454978* +X0203678Y0454609* +X0204328Y045448* +X020537* +Y0457615* +G37* +G36* +X0162341Y0462519D02* +X0160969D01* +Y0460513* +X0161131Y0459701* +X0161591Y0459013* +X0162279Y0458553* +X0162341Y0458541* +Y0462519* +G37* +G36* +X0588075Y0459434D02* +X0585481D01* +Y0458249* +X0585618Y0457559* +X0586009Y0456974* +X0586594Y0456583* +X0587283Y0456446* +X0588075* +Y0459434* +G37* +G36* +X0163841Y043099D02* +Y0427011D01* +X0165213* +Y0429017* +X0165052Y0429829* +X0164592Y0430518* +X0163903Y0430978* +X0163841Y043099* +G37* +G36* +X0248341Y0416145D02* +Y0412363D01* +X0249713* +Y0414172* +X0249552Y0414984* +X0249092Y0415673* +X0248403Y0416133* +X0248341Y0416145* +G37* +G36* +X0246841D02* +X0246779Y0416133D01* +X0246091Y0415673* +X0245631Y0414984* +X0245469Y0414172* +Y0412363* +X0246841* +Y0416145* +G37* +G36* +X0253341D02* +Y0412363D01* +X0254713* +Y0414172* +X0254552Y0414984* +X0254092Y0415673* +X0253403Y0416133* +X0253341Y0416145* +G37* +G36* +X0251841D02* +X0251779Y0416133D01* +X0251091Y0415673* +X0250631Y0414984* +X0250469Y0414172* +Y0412363* +X0251841* +Y0416145* +G37* +G36* +X0238341D02* +Y0412363D01* +X0239713* +Y0414172* +X0239552Y0414984* +X0239092Y0415673* +X0238403Y0416133* +X0238341Y0416145* +G37* +G36* +X0236841D02* +X0236779Y0416133D01* +X0236091Y0415673* +X0235631Y0414984* +X023547Y0414172* +Y0412363* +X0236841* +Y0416145* +G37* +G36* +X0243341D02* +Y0412363D01* +X0244713* +Y0414172* +X0244552Y0414984* +X0244092Y0415673* +X0243403Y0416133* +X0243341Y0416145* +G37* +G36* +X0241841D02* +X0241779Y0416133D01* +X0241091Y0415673* +X0240631Y0414984* +X024047Y0414172* +Y0412363* +X0241841* +Y0416145* +G37* +G36* +X0438767Y0415271D02* +X0437208D01* +X0436357Y0415102* +X0435635Y041462* +X0435253Y0414047* +X0438767* +Y0415271* +G37* +G36* +X0241841Y0429367D02* +X024047D01* +Y0427558* +X0240631Y0426746* +X0241091Y0426058* +X0241779Y0425598* +X0241841Y0425586* +Y0429367* +G37* +G36* +X0588075Y0426658D02* +X0585481D01* +Y0425473* +X0585618Y0424783* +X0586009Y0424198* +X0586594Y0423808* +X0587283Y042367* +X0588075* +Y0426658* +G37* +G36* +X0162341Y043099D02* +X0162279Y0430978D01* +X0161591Y0430518* +X0161131Y0429829* +X0160969Y0429017* +Y0427011* +X0162341* +Y043099* +G37* +G36* +X0244713Y0429367D02* +X0243341D01* +Y0425586* +X0243403Y0425598* +X0244092Y0426058* +X0244552Y0426746* +X0244713Y0427558* +Y0429367* +G37* +G36* +X0135864Y0420116D02* +X0133227D01* +X0133234Y0420066* +X0133543Y041932* +X0134034Y041868* +X0134675Y0418189* +X013542Y041788* +X0135864Y0417821* +Y0420116* +G37* +G36* +X0442326Y0415271D02* +X0440767D01* +Y0414047* +X0444281* +X0443898Y041462* +X0443177Y0415102* +X0442326Y0415271* +G37* +G36* +X0250491Y0439695D02* +X0249604Y0439578D01* +X0248777Y0439235* +X0248066Y043869* +X0247521Y043798* +X0247179Y0437153* +X0247062Y0436265* +X0247179Y0435378* +X0247281Y0435131* +X0247045Y043469* +X0246779Y0434637* +X0246091Y0434177* +X0245631Y0433488* +X0245469Y0432676* +Y0427558* +X0245631Y0426746* +X0246062Y0426101* +Y0426065* +X0246178Y042548* +X0246462Y0425055* +X0246379Y0424853* +X0246262Y0423965* +X0246379Y0423078* +X0246721Y0422251* +X0247266Y042154* +X0247977Y0420996* +X0248804Y0420653* +X0249691Y0420536* +X0250579Y0420653* +X0251406Y0420996* +X0252116Y042154* +X0252661Y0422251* +X0253004Y0423078* +X0253121Y0423965* +X0253004Y0424853* +X02529Y0425104* +X0253136Y0425545* +X0253403Y0425598* +X0254092Y0426058* +X0254552Y0426746* +X0254713Y0427558* +Y0432676* +X0254552Y0433488* +X0254121Y0434133* +Y0434165* +X0254004Y0434751* +X025372Y0435176* +X0253804Y0435378* +X0253921Y0436265* +X0253804Y0437153* +X0253461Y043798* +X0252916Y043869* +X0252206Y0439235* +X0251379Y0439578* +X0250491Y0439695* +G37* +G36* +X0436487Y0422681D02* +X04335D01* +Y0420087* +X0434685* +X0435375Y0420224* +X0435959Y0420615* +X043635Y0421199* +X0436487Y0421889* +Y0422681* +G37* +G36* +X058089Y0464453D02* +X0577902D01* +Y0463662* +X057804Y0462972* +X057843Y0462388* +X0579015Y0461997* +X0579705Y046186* +X058089* +Y0464453* +G37* +G36* +X0532136Y0486664D02* +X0531413D01* +Y0483283* +X0533908* +Y0484892* +X0533773Y048557* +X0533389Y0486145* +X0532814Y0486529* +X0532136Y0486664* +G37* +G36* +X0529413D02* +X0528691D01* +X0528013Y0486529* +X0527438Y0486145* +X0527054Y048557* +X0526919Y0484892* +Y0483283* +X0529413* +Y0486664* +G37* +G36* +X0364053Y0489113D02* +X0363545D01* +Y0487222* +X0365495* +Y0487671* +X0365385Y0488223* +X0365072Y0488691* +X0364605Y0489003* +X0364053Y0489113* +G37* +G36* +X0340275Y0489271D02* +X0333503D01* +X0333014Y0489174* +X0332599Y0488897* +X0332322Y0488482* +X0332224Y0487992* +Y0486339* +X0332322Y0485849* +X0332599Y0485434* +X0333014Y0485157* +X0333503Y048506* +X0340275* +X0340764Y0485157* +X0341179Y0485434* +X0341457Y0485849* +X0341554Y0486339* +Y0487992* +X0341457Y0488482* +X0341179Y0488897* +X0340764Y0489174* +X0340275Y0489271* +G37* +G36* +X0161189Y0483113D02* +X0159734D01* +Y0481758* +X0162468* +Y0481835* +X0162371Y0482324* +X0162093Y0482739* +X0161678Y0483016* +X0161189Y0483113* +G37* +G36* +X0502912Y0484638D02* +X050029D01* +Y0480073* +X0504855* +Y0482695* +X0504707Y0483439* +X0504286Y0484069* +X0503656Y048449* +X0502912Y0484638* +G37* +G36* +X049829D02* +X0495668D01* +X0494925Y048449* +X0494295Y0484069* +X0493873Y0483439* +X0493725Y0482695* +Y0480073* +X049829* +Y0484638* +G37* +G36* +X0158234Y0483113D02* +X015678D01* +X015629Y0483016* +X0155875Y0482739* +X0155598Y0482324* +X0155501Y0481835* +Y0481758* +X0158234* +Y0483113* +G37* +G36* +X018287Y0482379D02* +X0182421D01* +Y048043* +X0184311* +Y0480938* +X0184202Y0481489* +X0183889Y0481957* +X0183422Y0482269* +X018287Y0482379* +G37* +G36* +X0173057Y0494903D02* +X017298D01* +Y049217* +X0174336* +Y0493624* +X0174238Y0494114* +X0173961Y0494529* +X0173546Y0494806* +X0173057Y0494903* +G37* +G36* +X017148D02* +X0171403D01* +X0170914Y0494806* +X0170499Y0494529* +X0170222Y0494114* +X0170124Y0493624* +Y049217* +X017148* +Y0494903* +G37* +G36* +X0572622Y0499909D02* +X0567177D01* +X0567204Y0499633* +X0567577Y0498405* +X0568181Y0497274* +X0568995Y0496283* +X0569987Y0495469* +X0571118Y0494864* +X0572345Y0494492* +X0572622Y0494465* +Y0499909* +G37* +G36* +X0248546Y0495515D02* +X0246656D01* +Y0493566* +X0247104* +X0247656Y0493676* +X0248124Y0493988* +X0248436Y0494456* +X0248546Y0495008* +Y0495515* +G37* +G36* +X0335951Y0493715D02* +X0333209D01* +Y049228* +X0333339Y049163* +X0333707Y0491078* +X0334259Y0490709* +X033491Y049058* +X0335951* +Y0493715* +G37* +G36* +X0174336Y049067D02* +X017298D01* +Y0487936* +X0173057* +X0173546Y0488033* +X0173961Y0488311* +X0174238Y0488726* +X0174336Y0489215* +Y049067* +G37* +G36* +X017148D02* +X0170124D01* +Y0489215* +X0170222Y0488726* +X0170499Y0488311* +X0170914Y0488033* +X0171403Y0487936* +X017148* +Y049067* +G37* +G36* +X022575Y0498339D02* +X0224487Y0498173D01* +X022331Y0497686* +X02223Y049691* +X0221525Y04959* +X0221037Y0494723* +X0220871Y0493461* +X0221037Y0492198* +X0221525Y0491021* +X02223Y0490011* +X022331Y0489235* +X0224487Y0488748* +X022575Y0488582* +X0227012Y0488748* +X0228189Y0489235* +X0229199Y0490011* +X0229975Y0491021* +X0230462Y0492198* +X0230628Y0493461* +X0230462Y0494723* +X0229975Y04959* +X0229199Y049691* +X0228189Y0497686* +X0227012Y0498173* +X022575Y0498339* +G37* +G36* +X0208033D02* +X020677Y0498173D01* +X0205594Y0497686* +X0204583Y049691* +X0203808Y04959* +X0203321Y0494723* +X0203154Y0493461* +X0203321Y0492198* +X0203808Y0491021* +X0204583Y0490011* +X0205594Y0489235* +X020677Y0488748* +X0208033Y0488582* +X0209296Y0488748* +X0210472Y0489235* +X0211483Y0490011* +X0212258Y0491021* +X0212746Y0492198* +X0212912Y0493461* +X0212746Y0494723* +X0212258Y04959* +X0211483Y049691* +X0210472Y0497686* +X0209296Y0498173* +X0208033Y0498339* +G37* +G36* +X0162468Y0480258D02* +X0159734D01* +Y0478902* +X0161189* +X0161678Y0478999* +X0162093Y0479277* +X0162371Y0479692* +X0162468Y0480181* +Y0480258* +G37* +G36* +X0193841Y0467998D02* +Y0464019D01* +X0195213* +Y0466025* +X0195052Y0466837* +X0194592Y0467526* +X0193903Y0467986* +X0193841Y0467998* +G37* +G36* +X0342223Y0467233D02* +X0340427D01* +X0339764Y0467101* +X0339201Y0466725* +X0338883Y0466249* +X0342223* +Y0467233* +G37* +G36* +X0516851Y0473147D02* +X0516819Y0473142D01* +X0515858Y0472744* +X0515032Y0472111* +X0514398Y0471285* +X0514Y0470323* +X0513996Y0470291* +X0516851* +Y0473147* +G37* +G36* +X0192341Y0467998D02* +X0192279Y0467986D01* +X0191591Y0467526* +X0191131Y0466837* +X019097Y0466025* +Y0464019* +X0192341* +Y0467998* +G37* +G36* +X0336139Y0471415D02* +X0332357D01* +X033237Y0471353* +X033283Y0470665* +X0333518Y0470205* +X033433Y0470044* +X0336139* +Y0471415* +G37* +G36* +X0184346Y0471215D02* +X0182456D01* +Y0469266* +X0182904* +X0183456Y0469376* +X0183924Y0469688* +X0184236Y0470156* +X0184346Y0470708* +Y0471215* +G37* +G36* +X034552Y0467233D02* +X0343723D01* +Y0466249* +X0347063* +X0346745Y0466725* +X0346183Y0467101* +X034552Y0467233* +G37* +G36* +X0341421Y0471415D02* +X0337639D01* +Y0470044* +X0339448* +X034026Y0470205* +X0340949Y0470665* +X0341408Y0471353* +X0341421Y0471415* +G37* +G36* +X0504855Y0478073D02* +X050029D01* +Y0473508* +X0502912* +X0503656Y0473656* +X0504286Y0474077* +X0504707Y0474708* +X0504855Y0475451* +Y0478073* +G37* +G36* +X049829D02* +X0493725D01* +Y0475451* +X0493873Y0474708* +X0494295Y0474077* +X0494925Y0473656* +X0495668Y0473508* +X049829* +Y0478073* +G37* +G36* +X0158234Y0480258D02* +X0155501D01* +Y0480181* +X0155598Y0479692* +X0155875Y0479277* +X015629Y0478999* +X015678Y0478902* +X0158234* +Y0480258* +G37* +G36* +X0184311Y047893D02* +X0182421D01* +Y0476981* +X018287* +X0183422Y047709* +X0183889Y0477403* +X0184202Y047787* +X0184311Y0478422* +Y047893* +G37* +G36* +X0182904Y0474665D02* +X0182456D01* +Y0472715* +X0184346* +Y0473223* +X0184236Y0473775* +X0183924Y0474242* +X0183456Y0474555* +X0182904Y0474665* +G37* +G36* +X0518851Y0473147D02* +Y0470291D01* +X0521706* +X0521702Y0470323* +X0521304Y0471285* +X052067Y0472111* +X0519845Y0472744* +X0518883Y0473142* +X0518851Y0473147* +G37* +G36* +X0339448Y0474287D02* +X0337639D01* +Y0472915* +X0341421* +X0341408Y0472977* +X0340949Y0473666* +X034026Y0474126* +X0339448Y0474287* +G37* +G36* +X0336139D02* +X033433D01* +X0333518Y0474126* +X033283Y0473666* +X033237Y0472977* +X0332357Y0472915* +X0336139* +Y0474287* +G37* +%LNunisolder52_full-3*% +%LPD*% +G36* +X048006Y0580148D02* +Y0579262D01* +X0476516Y0578278* +X0475139Y0579656* +X0473859* +Y0583396* +X0476812* +X048006Y0580148* +G37* +G36* +X0468938Y0579656D02* +X0467658D01* +X046628Y0578278* +X0462737Y0579262* +Y0580148* +X0465985Y0583396* +X0468938* +Y0579656* +G37* +G36* +X0467658Y0569813D02* +X0468938D01* +Y0566073* +X0465985* +X0462737Y0569321* +Y0570207* +X046628Y0571191* +X0467658Y0569813* +G37* +G36* +X048006Y0570207D02* +Y0569321D01* +X0476812Y0566073* +X0473859* +Y0569813* +X0475139* +X0476516Y0571191* +X048006Y0570207* +G37* +G54D10* +X0493799Y0555905D03* +Y0563386D03* +X0412598Y0532423D03* +Y0539903D03* +X0513798Y0512423D03* +Y0519903D03* +X0411698Y0511723D03* +Y0519203D03* +X0438909Y0527984D03* +Y0535464D03* +X0466608Y0535546D03* +Y0543027D03* +X0431109Y0527984D03* +Y0535464D03* +X0493598Y0577803D03* +Y0570323D03* +X0484998Y0568723D03* +Y0576203D03* +X0449909Y0545258D03* +Y0537778D03* +X0512697Y0538386D03* +Y0545866D03* +X0474409Y0535531D03* +Y0543012D03* +X0171591Y0555125D03* +Y0562605D03* +X0332874Y0426575D03* +Y0419095D03* +X0353445Y0303346D03* +Y0310827D03* +X0312291Y0557925D03* +Y0565406D03* +X024574Y0335405D03* +Y0327925D03* +X0217391Y0335405D03* +Y0327925D03* +X0237841Y0335405D03* +Y0327925D03* +X0225291Y0335405D03* +Y0327925D03* +X0334841Y0533533D03* +Y0526053D03* +X0327041Y0533433D03* +Y0525953D03* +X0362608Y055767D03* +Y056515D03* +X0163791Y0558315D03* +Y0550835D03* +X0353883Y0572193D03* +Y0579674D03* +X0336091Y0334705D03* +Y0327225D03* +X0371376Y0546338D03* +Y0553819D03* +X0370491Y0313987D03* +Y0321468D03* +X0362108Y057965D03* +Y057217D03* +X0300491Y0348406D03* +Y0340925D03* +X0292691D03* +Y0348406D03* +X0177491Y0417906D03* +Y0410425D03* +X0185291Y0417906D03* +Y0410425D03* +X020315Y0339469D03* +Y0331988D03* +X0375491Y0351905D03* +Y0344425D03* +Y0366506D03* +Y0359025D03* +X0356091Y0391406D03* +Y0383925D03* +X0560335Y0325984D03* +Y0318504D03* +X0515255Y0318799D03* +Y0311319D03* +X0516928Y0325787D03* +Y0333268D03* +X058189Y0432776D03* +Y0440256D03* +X0618209Y0431989D03* +Y0424508D03* +X0625984Y0438878D03* +Y0431398D03* +X0545635Y0441558D03* +Y0449038D03* +X04247Y042368D03* +Y0431161D03* +X04325Y042368D03* +Y0431161D03* +X0480628Y0406636D03* +Y0414116D03* +X0596949Y0309842D03* +Y0302362D03* +X0488347Y0406636D03* +Y0414116D03* +X0618209Y0464764D03* +Y0457284D03* +X0625984Y0471654D03* +Y0464174D03* +X0531004Y0417717D03* +Y0425197D03* +X058189Y0465453D03* +Y0472934D03* +X04409Y0389121D03* +Y0396602D03* +X047286Y0389303D03* +Y0381823D03* +G54D11* +X0476123Y0560275D03* +Y0556535D03* +Y0552795D03* +X0466674D03* +Y0556535D03* +Y0560275D03* +X0333376Y0511829D03* +Y051557D03* +Y051931D03* +X0342825D03* +Y051557D03* +Y0511829D03* +G54D12* +X0481791Y0541634D03* +X0489272D03* +X0337795Y0450984D03* +X0345276D03* +X0287402Y0303642D03* +X0294882D03* +X0324833Y0565506D03* +X0332314D03* +X0326431Y0573265D03* +X0318951D03* +X0309151Y0316465D03* +X0316632D03* +X0254451Y0345702D03* +X0261931D03* +X0339051Y0571665D03* +X0346532D03* +X0350492Y0293602D03* +X0357972D03* +X0177833Y0358265D03* +X0170353D03* +X0298131Y0526665D03* +X0290651D03* +X0355231Y0563865D03* +X0347751D03* +X0209651Y0569365D03* +X0217131D03* +X02176Y0404365D03* +X021012D03* +X0215667Y0449565D03* +X0208187D03* +X02136Y0458365D03* +X020612D03* +X0293451Y0332365D03* +X0300932D03* +X0359744Y0328838D03* +X0367225D03* +X0363451Y0389665D03* +X0370932D03* +X0272051Y0376142D03* +X0279532D03* +X0341831Y0502264D03* +X0349311D03* +X0351101Y0494465D03* +X0358581D03* +X035374Y0531988D03* +X034626D03* +X0336701Y0494465D03* +X0344181D03* +X0268851Y0345702D03* +X0276331D03* +X0362697Y0510039D03* +X0355216D03* +X0287402Y0295866D03* +X0294882D03* +X0293851Y0356965D03* +X0301331D03* +X0180197Y0344765D03* +X0172717D03* +X0328651Y0356665D03* +X0336132D03* +X0328051Y0367065D03* +X0335531D03* +X0364469Y0502264D03* +X0356988D03* +X059065Y0480315D03* +X0583169D03* +X0588681Y0447638D03* +X0581201D03* +X0595669Y0447933D03* +X060315D03* +X0596555Y0427658D03* +X0589075D03* +X0654841Y0328235D03* +X0662321D03* +X052933Y0440453D03* +X0536811D03* +X0660335Y0469488D03* +X0652854D03* +X0596555Y0460434D03* +X0589075D03* +X0457181Y0424588D03* +X0449701D03* +X0597638Y0480709D03* +X0605118D03* +X062628Y0401279D03* +X0618799D03* +X0582579Y0392618D03* +X0575098D03* +X0582579Y0400393D03* +X0575098D03* +G54D13* +X0422648Y0513794D03* +X0425404D03* +X042816D03* +X0430916D03* +X0433672D03* +X0469498D03* +X0472254D03* +X047501D03* +X0477766D03* +X0480522D03* +X0483278D03* +X0486034D03* +X048879D03* +X0491546D03* +X0494302D03* +X0497057D03* +X0499813D03* +X0502569D03* +X0436427D03* +X0439183D03* +X0441939D03* +X0444695D03* +X0447451D03* +X0450207D03* +X0452963D03* +X0455719D03* +X0458475D03* +X0461231D03* +X0463987D03* +X0466743D03* +G54D14* +X0464509Y0574735D03* +X0478288D03* +G54D15* +X0454173Y0558709D03* +Y0574851D03* +X0606299Y0303051D03* +Y0319193D03* +X0469027Y0404992D03* +Y0421134D03* +G54D16* +X0458268Y0535236D03* +Y0546653D03* +X0440705Y0322569D03* +Y0333986D03* +X0464542Y0377908D03* +Y0389325D03* +G54D17* +X0301391Y029648D03* +Y0291251D03* +X0236191Y0525179D03* +Y0519951D03* +X0234547Y0362933D03* +Y0357705D03* +X0327633Y0549114D03* +Y0554342D03* +X0221692Y0546825D03* +Y0541597D03* +X03486Y0520746D03* +Y0515518D03* +X0362795Y0486472D03* +Y0481244D03* +X0330217Y0506945D03* +Y0501717D03* +X0338991Y030188D03* +Y0296651D03* +X0160391Y041878D03* +Y0413551D03* +X0170823Y0413651D03* +Y041888D03* +X0240846Y0456945D03* +Y0451717D03* +X0237992Y0385772D03* +Y0391D03* +G54D18* +X0261977Y0579265D03* +X0267206D03* +X0231877Y0565965D03* +X0237105D03* +X0189203Y0359461D03* +X0183975D03* +X0243005Y0437465D03* +X0237777D03* +X0202377Y0395165D03* +X0207606D03* +X0296577Y0320965D03* +X0301805D03* +X0302406Y0363565D03* +X0297177D03* +X0296406Y0533265D03* +X0291177D03* +X0285677Y0568165D03* +X0290905D03* +X0205961Y0345669D03* +X0200732D03* +X0208417Y0528821D03* +X0203188D03* +X0181671Y047968D03* +X0176443D03* +X0240677Y0502665D03* +X0245905D03* +Y0496265D03* +X0240677D03* +X0327377Y0342765D03* +X0332606D03* +X0181705Y0471965D03* +X0176477D03* +G54D19* +X024944Y0575414D03* +X0245743Y0571717D03* +G54D20* +X0289282Y0552376D03* +X028789Y0553768D03* +X0286498Y055516D03* +X0285106Y0556552D03* +X0283714Y0557944D03* +X0282322Y0559336D03* +X028093Y0560728D03* +X0279538Y056212D03* +X0278146Y0563512D03* +X0276754Y0564904D03* +X0275362Y0566296D03* +X027397Y0567688D03* +X0272578Y056908D03* +X0271186Y0570472D03* +X0269794Y0571864D03* +X0268402Y0573255D03* +X0237501Y0542354D03* +X0238893Y0540962D03* +X0240285Y0539571D03* +X0241677Y0538178D03* +X0243069Y0536787D03* +X0244461Y0535395D03* +X0245853Y0534003D03* +X0247245Y0532611D03* +X0248637Y0531219D03* +X0250029Y0529827D03* +X0251421Y0528435D03* +X0252813Y0527043D03* +X0254205Y0525651D03* +X0255596Y0524259D03* +X0256988Y0522867D03* +X025838Y0521475D03* +G54D21* +X025838Y0573255D03* +X0256988Y0571864D03* +X0255596Y0570472D03* +X0254205Y056908D03* +X0252813Y0567688D03* +X0251421Y0566296D03* +X0250029Y0564904D03* +X0248637Y0563512D03* +X0247245Y056212D03* +X0245853Y0560728D03* +X0244461Y0559336D03* +X0243069Y0557944D03* +X0241677Y0556552D03* +X0240285Y055516D03* +X0238893Y0553768D03* +X0237501Y0552376D03* +X0268402Y0521475D03* +X0269794Y0522867D03* +X0271186Y0524259D03* +X0272578Y0525651D03* +X027397Y0527043D03* +X0275362Y0528435D03* +X0276754Y0529827D03* +X0278146Y0531219D03* +X0279538Y0532611D03* +X028093Y0534003D03* +X0282322Y0535395D03* +X0283714Y0536787D03* +X0285106Y0538178D03* +X0286498Y0539571D03* +X028789Y0540962D03* +X0289282Y0542354D03* +G54D22* +X0252591Y0430117D03* +X0247591D03* +X0242591D03* +X0237591D03* +X0252591Y0411613D03* +X0247591D03* +X0242591D03* +X0237591D03* +X0322491Y0366817D03* +X0317491D03* +X0312491D03* +X0307491D03* +X0322491Y0348313D03* +X0317491D03* +X0312491D03* +G54D23* +X0174626Y0338265D03* +X0336889Y0487165D03* +X0600984Y0395295D03* +G54D24* +X0174626Y0333265D03* +Y0328265D03* +Y0323265D03* +X019313Y0338265D03* +Y0333265D03* +Y0328265D03* +Y0323265D03* +X0336889Y0482165D03* +Y0477165D03* +Y0472165D03* +X0355393Y0487165D03* +Y0482165D03* +Y0477165D03* +Y0472165D03* +X0327543Y0322965D03* +Y0327965D03* +Y0332965D03* +Y0337965D03* +X0309039Y0322965D03* +Y0327965D03* +Y0332965D03* +Y0337965D03* +X0619488Y0380295D03* +Y0385295D03* +Y0390295D03* +Y0395295D03* +X0600984Y0380295D03* +Y0385295D03* +Y0390295D03* +X0458271Y0403047D03* +Y0408047D03* +Y0413047D03* +Y0418047D03* +X0439767Y0403047D03* +Y0408047D03* +Y0413047D03* +Y0418047D03* +G54D25* +X0183214Y0366645D03* +X0185773D03* +X0188332D03* +X0190891D03* +X019345D03* +X0196009D03* +X0198568D03* +X0183214Y0389086D03* +X0185773D03* +X0188332D03* +X0190891D03* +X019345D03* +X0196009D03* +X0198568D03* +G54D26* +X0189857Y0344803D03* +X0186117Y0353071D03* +X0193597D03* +X023909Y0320993D03* +X024283Y0312725D03* +X023535D03* +X0238991Y0342332D03* +X0235251Y0350599D03* +X0242731D03* +X0222991Y0342332D03* +X0219251Y0350599D03* +X0226731D03* +X0165591Y0565332D03* +X0161851Y0573599D03* +X0169332D03* +X0363189Y0321555D03* +X0355709D03* +X0359449Y0313287D03* +X0216893Y0539173D03* +X0220633Y0530905D03* +X0213153D03* +X0225394Y0306496D03* +X0229134Y0298228D03* +X0221654D03* +X023937Y0306496D03* +X024311Y0298228D03* +X023563D03* +X017223Y049142D03* +X017971D03* +X017597Y0499687D03* +X0611811Y0431989D03* +X0604331D03* +X0608071Y0423721D03* +X0466272Y0326598D03* +X0462532Y0334866D03* +X0470012D03* +X0608071Y0456496D03* +X0604331Y0464764D03* +X0611811D03* +G54D27* +X0222244Y0316757D03* +X0213976Y0313017D03* +Y0320498D03* +X0253525Y0375765D03* +X0245257Y0372025D03* +Y0379505D03* +X0253525Y0389565D03* +X0245257Y0385825D03* +Y0393305D03* +X0246986Y0464505D03* +Y0457025D03* +X0255254Y0460765D03* +X0371225Y0399765D03* +X0362958Y0396025D03* +Y0403506D03* +Y0304628D03* +X0371225Y0308368D03* +Y0300887D03* +X0256958Y0368565D03* +X0265225Y0372305D03* +Y0364825D03* +X0158984Y0481008D03* +X0167252Y0484748D03* +Y0477268D03* +X0589567Y0441536D03* +Y0434056D03* +X0597835Y0437796D03* +X0542795Y0454623D03* +X0534527Y0450883D03* +Y0458363D03* +X0589567Y0474312D03* +Y0466831D03* +X0597835Y0470571D03* +X0582873Y0410532D03* +X0591141Y0414272D03* +Y0406791D03* +G54D28* +X0261964Y0321191D03* +X0271019D03* +G54D29* +X0266491Y0336939D03* +G54D30* +X0308971Y028775D03* +Y0290309D03* +Y0292868D03* +Y0295427D03* +X0331412Y0308222D03* +Y0310781D03* +X0308971D03* +Y0308222D03* +Y0305663D03* +Y0303104D03* +Y0300545D03* +Y0297986D03* +X0331412Y0305663D03* +Y0303104D03* +Y0300545D03* +Y0297986D03* +Y0295427D03* +Y0292868D03* +Y0290309D03* +Y028775D03* +G54D31* +X0302491Y0512925D03* +X0297491D03* +X0292491D03* +X0287491D03* +X0282491D03* +X0277491D03* +X0272491D03* +X0267491D03* +X0302491Y0494028D03* +X0297491D03* +X0292491D03* +X0287491D03* +X0282491D03* +X0277491D03* +X0272491D03* +X0267491D03* +X0523484Y0312992D03* +X0528484D03* +X0533484D03* +X0538484D03* +X0543484D03* +X0548484D03* +X0553484D03* +X0523484Y033189D03* +X0528484D03* +X0533484D03* +X0538484D03* +X0543484D03* +X0548484D03* +X0553484D03* +G54D32* +X0307491Y0348313D03* +G54D33* +X0371027Y0560703D03* +Y0574679D03* +X060748Y0401476D03* +Y0415453D03* +X0590354Y0401083D03* +Y0387106D03* +X0598917Y0401476D03* +Y0415453D03* +G54D34* +X0341036Y0545821D03* +X0335747Y055111D03* +G54D35* +X0280791Y0477989D03* +Y0484761D03* +X0288591Y0477989D03* +Y0484761D03* +X0272991Y0477989D03* +Y0484761D03* +X0265218Y0477955D03* +Y0484727D03* +X0296351Y0477989D03* +Y0484761D03* +X0304091Y0477989D03* +Y0484761D03* +X0311891Y0477989D03* +Y0484761D03* +X04169Y0430806D03* +Y0424035D03* +G54D36* +X0239765Y0284365D03* +X0211418D03* +X0182973Y0515551D03* +X0211319D03* +G54D37* +X0342973Y0465499D03* +Y046294D03* +Y0460381D03* +Y0457822D03* +X0359509Y0465499D03* +Y046294D03* +Y0460381D03* +Y0457822D03* +G54D38* +X0158091Y0426261D03* +X0163091D03* +X0168091D03* +X0173091D03* +X0178091D03* +X0183091D03* +X0188091D03* +X0193091D03* +X0158091Y0463269D03* +X0163091D03* +X0168091D03* +X0173091D03* +X0178091D03* +X0183091D03* +X0188091D03* +X0193091D03* +G54D39* +X0160991Y0379165D03* +Y0403165D03* +G54D40* +X0294707Y0504765D03* +Y0502165D03* +X0289506D03* +Y0504765D03* +X0273901D03* +Y0502165D03* +X0279102D03* +Y0504765D03* +X0284304D03* +Y0502165D03* +X03Y0502243D03* +Y0504843D03* +G54D41* +X054439Y0482283D03* +X0530413D03* +X062687Y044754D03* +X0612894D03* +X053045Y0473735D03* +X0544426D03* +X0520472Y0437402D03* +X0506496D03* +X0604725Y047254D03* +X0618701D03* +X0604724Y0439764D03* +X0618701D03* +X0626083Y0480119D03* +X0612106D03* +G54D42* +X0653543Y0351279D03* +Y0379921D03* +X0673228Y0409055D03* +Y0438976D03* +G54D43* +X0628937Y0342303D03* +Y0360256D03* +Y0370945D03* +Y0388898D03* +X0648622Y0418032D03* +Y0400079D03* +Y0447953D03* +Y043D03* +G54D44* +X0584202Y0367421D03* +Y0343209D03* +G54D45* +X0604862Y0367421D03* +Y0343209D03* +G54D46* +X0658465Y0318898D03* +X0642323D03* +X0501883Y0448269D03* +X0518024D03* +X0541535Y0430709D03* +X0557677D03* +Y0418307D03* +X0541535D03* +G54D47* +X0481345Y039042D03* +X0493156D03* +G54D48* +X048725Y0389094D03* +G54D49* +X048725Y0379495D03* +G54D50* +X0453669Y0345696D03* +Y0368893D03* +G54D51* +X0533268Y046496D03* +X0544685D03* +X0648917Y0461122D03* +X0660335D03* +X0614961Y0409646D03* +X0626378D03* +G54D52* +X0443572Y0455394D03* +X0482941D03* +G54D53* +X0513681Y0403805D03* +G54D54* +X0522736Y0427716D03* +X0513681D03* +X0504626D03* +G54D55* +X049929Y0461357D03* +Y0479073D03* +G54D56* +X0449811Y0533161D02* +Y0537581D01* +X0458268Y0531299D02* +Y0536122D01* +X0450205Y0536498D02* +X0458054D01* +X0486376Y0577089D02* +X0491408D01* +X0493598Y0579772D02* +Y0584263D01* +X0431109Y0535661D02* +Y053996D01* +X0438909Y0535661D02* +Y0540121D01* +X0506939Y0519903D02* +X0513798D01* +Y0526863* +X0411698Y0519203D02* +Y0526063D01* +Y0519203D02* +X0418139D01* +X0463961Y0538292D02* +X0466706Y0535546D01* +X0493598Y0577803D02* +X0499165D01* +X0484842Y0576359D02* +X0484898Y0576303D01* +X0484842Y0576359D02* +Y0582972D01* +X0470546Y0556535D02* +X0476123D01* +X0462402Y0556555D02* +X0470526D01* +X0412598Y0539903D02* +Y0545374D01* +X0458169Y0543985D02* +X046152Y0540634D01* +X0458268Y0543887D02* +Y0547244D01* +X0353671Y0520352D02* +X0354433Y0519591D01* +X0332677Y0445768D02* +X0337795Y0450886D01* +Y0450984* +Y0451607D02* +X0340675Y0454486D01* +X0337795Y0450984D02* +Y0451607D01* +X0131392Y0420866D02* +X0136614D01* +X0332606Y0342765D02* +Y0343761D01* +X0329679Y0346687D02* +X0332606Y0343761D01* +X0242591Y0430117D02* +Y0436909D01* +X0243147Y0437465* +X0228245D02* +X0237635D01* +X0225752Y0439958D02* +X0228245Y0437465D01* +X022575Y0457025D02* +X0246986D01* +X0182973Y0515551D02* +X0193405D01* +X0193799Y0515945* +X0342825Y051557D02* +X0348013D01* +X0170823Y0419021D02* +Y0420397D01* +X0173091Y0422665* +Y0426261* +X0151476Y040355D02* +X0172291D01* +X0208559Y0528821D02* +X0212791D01* +X034541Y0519252D02* +X0346511Y0520352D01* +X0349591Y0580065D02* +X0367391D01* +X0301391Y0300565D02* +X0302191Y0301365D01* +X0301391Y0296621D02* +Y0300565D01* +X0339235Y0296265D02* +X0343891D01* +X0338991Y029651D02* +X0339235Y0296265D01* +X0173091Y046969D02* +X0175367Y0471965D01* +X0173091Y0463269D02* +Y046969D01* +Y0426261D02* +X0178091D01* +X0168091D02* +X0173091D01* +X0168091Y0463269D02* +Y0465736D01* +X0164471Y0469356D02* +X0168091Y0465736D01* +X0158091Y0463269D02* +Y0465736D01* +X0161712Y0469356* +X0164471* +X0173091Y0463269D02* +X0178091D01* +X0168091D02* +X0173091D01* +X022575Y0439961D02* +X0225752Y0439958D01* +X0252591Y0390499D02* +X0253525Y0389565D01* +X0252591Y0390499D02* +Y0394465D01* +X0238291Y0565265D02* +X0240292Y0563265D01* +X0284739Y0526665D02* +X0290751D01* +X0268041Y0573958D02* +Y0577615D01* +X0267347Y0578309D02* +X0268041Y0577615D01* +X0267347Y0578309D02* +Y0579265D01* +X0182579Y050689D02* +Y0524114D01* +X0370991Y0570765D02* +Y0579265D01* +X0367291Y0574639D02* +X037538D01* +X0254791Y0456565D02* +X0255025Y0456799D01* +X0254791Y0456565D02* +Y0460532D01* +Y0456365D02* +Y0456565D01* +X0342882Y0519252D02* +X034541D01* +X0327046Y0533429D02* +X0333441D01* +X0216862Y053405D02* +Y0542548D01* +X0221591Y0536565D02* +Y0541154D01* +Y0540354D02* +X0221692Y0540455D01* +X0220633Y0529905D02* +Y0536307D01* +X0338991Y030188D02* +X0343605D01* +X0343891Y0302165* +X0307548Y0322965D02* +X0309039D01* +X0301947Y0320965D02* +Y0325621D01* +Y0320965D02* +X0305549D01* +X0307548Y0322965* +X0322491Y0341665D02* +Y0348313D01* +Y0341665D02* +X0322591Y0341565D01* +X0323791Y0342765* +X0327377* +Y0338131D02* +Y0342765D01* +X0301947Y0325621D02* +X0302091Y0325765D01* +X0303291Y0364451D02* +Y0368365D01* +X0302406Y0363565D02* +X0303291Y0364451D01* +X0327191Y0347965D02* +X032847Y0346687D01* +X0329679* +X0339051Y0569005D02* +Y0571665D01* +Y0569005D02* +X0350591Y0557465D01* +X0253525Y0375765D02* +X0253791D01* +X0257491Y0379465* +X0240185Y0372025D02* +X0245257D01* +X0332516Y0507579D02* +Y0511365D01* +X0349191Y0510065D02* +X0354351D01* +X03486Y0514982D02* +Y0515124D01* +Y0509474D02* +Y0514982D01* +X0348013Y051557D02* +X03486Y0514982D01* +X0237992Y0385825D02* +X0245257D01* +X0237992Y0374218D02* +Y0385825D01* +Y0374218D02* +X0240185Y0372025D01* +X022575Y0386461D02* +X0226385Y0385825D01* +X0237008* +X0346511Y0520352D02* +X0353671D01* +X0330217Y050724D02* +X0335366D01* +X0540059Y0430512D02* +X0541535D01* +X0538091Y043248D02* +X0540059Y0430512D01* +X0538091Y043248D02* +Y0439764D01* +X0539884Y0441558* +X0545635D02* +X0546358D01* +X0539884D02* +X0545635D01* +X0543504Y0463779D02* +X0544685Y046496D01* +X0543504Y0454626D02* +Y0463779D01* +X0531572Y0454626D02* +X0543504D01* +X0530984Y0455213D02* +X0531572Y0454626D01* +X0522149Y0455213D02* +X0530984D01* +X0660728Y0470079D02* +X0667717D01* +X0516384Y0333465D02* +X052252D01* +X0511741Y0328822D02* +X0516384Y0333465D01* +X0511741Y0325029D02* +Y0328822D01* +X0494882Y0308169D02* +X0511741Y0325029D01* +X0472342Y0308169D02* +X0494882D01* +X0462532Y0334866D02* +Y0336539D01* +X0597677Y0385295D02* +X0600984D01* +X0595866Y0387106D02* +X0597677Y0385295D01* +X0590354Y0387106D02* +X0595866D01* +X0618799Y0401279D02* +Y0403641D01* +X0614961Y040748D02* +X0618799Y0403641D01* +X0614961Y040748D02* +Y0409646D01* +X060748Y0402165D02* +X0614961Y0409646D01* +X060748Y0401476D02* +Y0402165D01* +X0613484Y0396752D02* +X061811Y0401378D01* +X051998Y0457382D02* +X0522149Y0455213D01* +X0518934Y0447736D02* +Y0459646D01* +X0661024Y046122D02* +X0667913D01* +X0466Y0301827D02* +X0472342Y0308169D01* +X0466Y0297094D02* +Y0301827D01* +X052252Y0333465D02* +X0523799Y0332185D01* +X0648622Y0442913D02* +Y0447953D01* +Y0412401D02* +Y0418032D01* +X0443073Y0418049D02* +X0449656Y0424633D01* +X0582185Y0465453D02* +X0583563Y0466831D01* +X0589567* +Y0461713D02* +Y0466831D01* +X0583169Y0434056D02* +X0589567D01* +X0589075Y0427658D02* +Y0433563D01* +X0617099Y0385295D02* +X0619488D01* +X0613484Y038891D02* +X0617099Y0385295D01* +X0613484Y038891D02* +Y0396752D01* +X0453669Y0345402D02* +X0462532Y0336539D01* +X0583415Y0392963D02* +X0591584Y0401132D01* +X0589271Y0414272D02* +X060561D01* +X0591142Y0400885D02* +X0596555D01* +X0591142D02* +Y0405512D01* +X0471622Y0381823D02* +X047286D01* +X0470571Y0382874D02* +X0471622Y0381823D01* +X0462008Y0382874D02* +X0470571D01* +X0544426Y0473735D02* +Y0482247D01* +G54D57* +X0475984Y0542913D02* +X0482382D01* +X0466608Y0543012D02* +X0474409D01* +X0466674D02* +Y0552795D01* +X0466608Y0535433D02* +X0474409D01* +X0361991Y0472507D02* +Y0474961D01* +X0359109Y0466009D02* +Y046923D01* +Y0466009D02* +X0359449Y0465669D01* +X0159891Y0418865D02* +Y0421506D01* +X0158091Y0423306D02* +X0159891Y0421506D01* +X0158091Y0423306D02* +Y0427861D01* +X0196591Y0382265D02* +X0198598Y0384272D01* +Y0390772* +X0202235Y0394409* +Y0395165* +X0151572Y043438D02* +X0158091Y0427861D01* +X0143198Y043438D02* +X0151572D01* +X0142282Y0433465D02* +X0143198Y043438D01* +X0136614Y0433465D02* +X0142282D01* +X0237591Y0430117D02* +Y0436925D01* +X0208487Y0449565D02* +Y045337D01* +X0203991Y0449565D02* +X0208487D01* +X020642Y0454594D02* +Y0458365D01* +X0201991D02* +X020642D01* +Y0461962* +X0220191Y0577165D02* +X0225339D01* +X0215291D02* +X0220191D01* +X0235591Y0514365D02* +X0236191Y0514965D01* +Y0519809* +X0298232Y0526665D02* +X0303291D01* +X0298232Y0522305D02* +Y0526665D01* +X0296947Y0528965D02* +Y0533065D01* +X0291093Y0568223D02* +X0294837D01* +X0281541Y0568215D02* +X0284986D01* +X0158594Y041341D02* +X0160391D01* +X0156791Y0415212D02* +X0158594Y041341D01* +X0156791Y0415212D02* +Y0416764D01* +X0193091Y0426261D02* +Y0432365D01* +X0163091Y0422165D02* +Y0426261D01* +Y0422165D02* +X0165591Y0419665D01* +X0163091Y0426261D02* +Y0433265D01* +X0215543Y0566517D02* +X0217291Y0568265D01* +X0215543Y0546617D02* +Y0566517D01* +X0213812Y0544886D02* +X0215543Y0546617D01* +X0213812Y0526066D02* +X0215665Y0524213D01* +X0213812Y0526066D02* +Y0544886D01* +X019313Y0338265D02* +X0202657D01* +X0193091Y0422565D02* +Y0426261D01* +X0191441Y0420915D02* +X0193091Y0422565D01* +X0180197Y0344765D02* +X0182197Y0342765D01* +X0172717Y0338125D02* +Y0344765D01* +X0307491Y0364265D02* +Y0366817D01* +X0303291Y0364451D02* +X0303477Y0364265D01* +X0307491* +X0178642Y0359662D02* +X0183833D01* +X0183975Y035882D02* +X0186097Y0356697D01* +X0183975Y035882D02* +Y0359461D01* +X0189103Y0338265D02* +X019313D01* +X0182197Y0342765D02* +X0184603D01* +X0189103Y0338265* +X0186097Y0350752D02* +Y0356697D01* +Y0350752D02* +X0189857Y0346991D01* +Y0345203D02* +Y0346991D01* +X036215Y048189D02* +X0362795Y0481244D01* +X0355393Y0482165D02* +X0359665D01* +X0359941Y048189* +X036215* +X03Y0500394D02* +X0302491Y0497902D01* +X03Y0500394D02* +Y0502043D01* +X029498Y0500098D02* +Y0501938D01* +Y0500098D02* +X0297491Y0497587D01* +Y0494028D02* +Y0497587D01* +X0302491Y0508495D02* +Y0512925D01* +X03Y0506004D02* +X0302491Y0508495D01* +X03Y0505043D02* +Y0506004D01* +X0297491Y0509204D02* +Y0512925D01* +X0294882Y0506595D02* +X0297491Y0509204D01* +X0294882Y0505036D02* +Y0506595D01* +X0287491Y0508276D02* +Y0512925D01* +Y0508276D02* +X0289506Y0506262D01* +Y0504965D02* +Y0506262D01* +Y0500431D02* +Y0501965D01* +X0287491Y0498417D02* +X0289506Y0500431D01* +X0287491Y0494028D02* +Y0498417D01* +X0282491Y0508355D02* +Y0512925D01* +Y0508355D02* +X0284304Y0506543D01* +Y0504965D02* +Y0506543D01* +Y0500347D02* +Y0501965D01* +X0282491Y0498535D02* +X0284304Y0500347D01* +X0282491Y0494028D02* +Y0498535D01* +X0277491Y0508237D02* +Y0512925D01* +Y0508237D02* +X0279102Y0506626D01* +Y0504965D02* +Y0506626D01* +Y0500362D02* +Y0501965D01* +X0277491Y0498751D02* +X0279102Y0500362D01* +X0277491Y0494028D02* +Y0498751D01* +X0272491Y0508217D02* +Y0512925D01* +Y0508217D02* +X0273901Y0506808D01* +Y0504965D02* +Y0506808D01* +Y0500082D02* +Y0501965D01* +X0272491Y0498672D02* +X0273901Y0500082D01* +X0272491Y0494028D02* +Y0498672D01* +X0302491Y0494517D02* +Y0497902D01* +X0349311Y0502264D02* +X0356988D01* +X0344181Y0494465D02* +X0351101D01* +X0349311Y0502264D02* +X0350197Y0501378D01* +Y0495369D02* +Y0501378D01* +Y0495369D02* +X0351101Y0494465D01* +X0574311Y0476279D02* +X0578347Y0480315D01* +X0574311Y0448524D02* +Y0476279D01* +Y0448524D02* +X0575Y0447835D01* +X0533268Y0458366D02* +Y0468802D01* +X0543704Y0450883D02* +X0545549Y0449038D01* +X0535118Y0450883D02* +X0543704D01* +X0550363Y0359269D02* +X0553165Y0362072D01* +X0517323Y031063D02* +X0521276Y0306677D01* +X0517323Y031063D02* +Y0311516D01* +X0538484Y0318996D02* +X0539764Y0320276D01* +X0532468Y0319335D02* +X0538878Y0325745D01* +X0531102Y0324311D02* +X0533484Y0326693D01* +X0538484Y0312992D02* +Y0318996D01* +X0538878Y0325745D02* +Y033189D01* +X0527201Y0319335D02* +X0532468D01* +X0523484Y0315618D02* +X0527201Y0319335D01* +X0515551Y0324213D02* +X0517323Y0325984D01* +X0515551Y0318996D02* +Y0324213D01* +X0553165Y0413795D02* +X0557677Y0418307D01* +X0553165Y0362072D02* +Y0413795D01* +X051643Y0438294D02* +X0520472D01* +X0510138Y0444587D02* +X051643Y0438294D01* +X0510138Y0444587D02* +Y0452461D01* +X0501242Y0461357D02* +X0510138Y0452461D01* +X054855Y0359269D02* +X0550363D01* +X0543024Y0338287D02* +X0566831Y0362094D01* +X0543799Y0334842D02* +X0569815Y0360858D01* +X0556964Y0343787D02* +X0572799Y0359622D01* +X0556964Y0327331D02* +Y0343787D01* +X0566831Y0362094D02* +Y0411909D01* +X0569815Y0360858D02* +Y0410673D01* +X0572799Y0359622D02* +Y0374275D01* +X0552173Y0338205D02* +X055689D01* +X0548484Y0334516D02* +X0552173Y0338205D01* +X0548484Y0331102D02* +Y0334516D01* +X0532256Y0338287D02* +X0543024D01* +X0543799Y0332185D02* +Y0334842D01* +X0528484Y0334516D02* +X0532256Y0338287D01* +X0528484Y033189D02* +Y0334516D01* +X0521949Y0429685D02* +Y0436516D01* +X052313Y0425197D02* +X0531004D01* +X0569815Y0410673D02* +X0573917Y0414776D01* +X0572799Y0374275D02* +X0579906Y0381382D01* +X0566831Y0411909D02* +X0570866Y0415945D01* +X0579906Y0381382D02* +X0597063D01* +X0618799Y0401279D02* +Y0403149D01* +X0580807Y0292618D02* +X0590453D01* +X057898Y0294445D02* +X0580807Y0292618D01* +X0559272Y0294445D02* +X057898D01* +X0535744Y0275772D02* +X0597458D01* +X0529272Y0282244D02* +X0535744Y0275772D01* +X0529272Y0282244D02* +Y0284744D01* +X0519272Y0294623D02* +Y0294744D01* +X0505743Y0281095D02* +X0519272Y0294623D01* +X0487Y0281095D02* +X0505743D01* +X0544291Y0289764D02* +Y0296746D01* +X0547227Y0299681* +X0539272Y0284744D02* +X0544291Y0289764D01* +X0559272Y0294445D02* +Y0294744D01* +X0590453Y0292618D02* +X0596063Y0287008D01* +Y0285138D02* +Y0287008D01* +X0559665Y0285138D02* +X0586063D01* +X0578905Y0340267D02* +Y0352222D01* +X0570866Y0332227D02* +X0578905Y0340267D01* +X0581973Y0365192D02* +X0584202Y0367421D01* +X0581973Y035529D02* +Y0365192D01* +X0578905Y0352222D02* +X0581973Y035529D01* +X0601165Y0428815D02* +X060626Y0423721D01* +X0601165Y0428815D02* +Y043289D01* +X060626Y0423721D02* +X0608071D01* +X0573917Y0414776D02* +Y0433858D01* +X0570866Y0415945D02* +Y0437339D01* +X0530465Y0471605D02* +X0533268Y0468802D01* +X0530465Y0471605D02* +Y0473498D01* +X0570866Y0437339D02* +X0581166Y0447638D01* +X0597458Y0275772D02* +X0606444Y0284757D01* +X0597835Y043622D02* +X0601165Y043289D01* +X0597835Y043622D02* +Y0437796D01* +X0573917Y0433858D02* +X0575886Y0435827D01* +X0581166Y0447638D02* +X0581201D01* +X0523484Y0312205D02* +Y0315618D01* +X0481Y0287094D02* +X0486Y0292094D01* +Y0297094* +X0480628Y0406734D02* +X0488347D01* +X046417Y0377984D02* +X0468964D01* +X04247Y042368D02* +X04325D01* +X0481Y0287094D02* +X0487Y0281095D01* +X0628937Y0354331D02* +Y0360256D01* +X0619488Y0380295D02* +X0626594D01* +X0619488Y0390295D02* +X0623484D01* +X0624882Y0388898* +X0628937* +X0600984Y0390295D02* +X060302D01* +X0606709Y0386606* +X060302Y0380295D02* +X0606709Y0383984D01* +X0600984Y0380295D02* +X060302D01* +X0606709Y0383984D02* +Y0386606D01* +X0578347Y0480315D02* +X0583169D01* +X0589567Y0474312D02* +Y0479233D01* +X059065Y0480315* +X0583563Y0474312D02* +X0589567D01* +X0582185Y0472934D02* +X0583563Y0474312D01* +X0597638Y0480709D02* +X0597835Y0480512D01* +Y0470571D02* +Y0480512D01* +X0618116Y047254D02* +X0618701D01* +X0611811Y0466235D02* +X0618116Y047254D01* +X0611811Y0464764D02* +Y0466235D01* +X0604331Y0464764D02* +Y0472146D01* +X0605118Y0480709D02* +X0611516D01* +X0612106Y0480119* +X0618116Y0474109* +X0597835Y0467317D02* +Y0470571D01* +Y0467317D02* +X0601165Y0463987D01* +X060315Y0447933D02* +X0603543Y044754D01* +X0612894* +X0583169Y0441536D02* +X0589567D01* +X0588681Y0441733D02* +Y0447638D01* +X0595669Y0447933D02* +X0597835Y0445768D01* +Y0437796D02* +Y0445768D01* +X0597063Y0381382D02* +X059815Y0380295D01* +X0600984* +X0618116Y0439764D02* +X0618701D01* +X0611811Y0433459D02* +X0618116Y0439764D01* +X0611811Y0431989D02* +Y0433459D01* +X0604331Y0431989D02* +Y0439371D01* +X0612894Y0446555D02* +Y044754D01* +Y0446555D02* +X0618701Y0440748D01* +Y0439764D02* +Y0440748D01* +X0579822Y04D02* +Y0410531D01* +X0548602Y0312992D02* +X0553602D01* +X0533484Y0326693D02* +Y0331102D01* +X0553352Y0328344D02* +Y0331364D01* +X04409Y0396602D02* +Y0403047D01* +X0552074Y0322441D02* +X0556964Y0327331D01* +X0538484Y0325492D02* +Y0331102D01* +Y0325492D02* +X05505D01* +X0553352Y0328344* +X0548327Y0322441D02* +X0552074D01* +X0521276Y0306677D02* +X0527339D01* +X0528484Y0305531D02* +Y0312992D01* +X0527339Y0306677D02* +X0528484Y0305531D01* +X0539272Y0294744* +X060626Y0456496D02* +X0608071D01* +X0601165Y0461591D02* +Y0463987D01* +Y0461591D02* +X060626Y0456496D01* +X0468964Y0377984D02* +X0471654Y0375295D01* +X049929Y0461357D02* +X0501242D01* +X0618209Y0457284D02* +X0626378D01* +Y0464469* +X0618209Y0424508D02* +X0624582D01* +X0624629Y0424555* +X0625984* +Y0432284* +X054124Y0304429D02* +Y0308122D01* +X0543484Y0310366* +Y0317598* +X0548327Y0322441* +X0547227Y0299681D02* +X0548106D01* +X0570866Y0315902D02* +Y0332227D01* +X0560629Y0305665D02* +X0570866Y0315902D01* +X055409Y0305665D02* +X0560629D01* +X0548106Y0299681D02* +X055409Y0305665D01* +G54D58* +X050805Y0545866D02* +X0512697D01* +X0509951Y053564D02* +X0512697Y0538386D01* +X0509951Y052766D02* +Y053564D01* +X048879Y0504572D02* +Y052126D01* +X0493598Y0568354D02* +X0494298Y0567654D01* +X0430916Y0515763D02* +Y0527984D01* +X0507951Y0528489D02* +Y054761D01* +X0503498Y0552063D02* +X0507951Y054761D01* +X0421798Y0552463D02* +Y0562463D01* +Y0571369D02* +X0424993D01* +X0430698Y0565663* +X0476123Y0560275D02* +X0477799D01* +X0479788Y0558286* +X0477799Y0552795D02* +X0479788Y0554784D01* +X0476123Y0552795D02* +X0477799D01* +X0479788Y0554784D02* +Y0558286D01* +X0445362Y0530425D02* +X0455719Y0520069D01* +Y0515763D02* +Y0520069D01* +X0443362Y0529597D02* +X0452963Y0519996D01* +Y0515763D02* +Y0519996D01* +X0503554Y0521264D02* +X0509951Y052766D01* +X0502726Y0523264D02* +X0507951Y0528489D01* +X0470968Y05212D02* +X0479163D01* +X0470139Y05232D02* +X0478335D01* +X0463987Y0519875D02* +X0469311Y05252D01* +X0466743Y0515763D02* +Y0519803D01* +X0470139Y05232* +X0469498Y0515763D02* +Y0519731D01* +X0470968Y05212* +X0463987Y0515763D02* +Y0519875D01* +X0469311Y05252D02* +X0477506D01* +X047957Y0527264* +X0478335Y05232D02* +X0480398Y0525264D01* +X0479163Y05212D02* +X0481227Y0523264D01* +X0480522Y0515763D02* +Y0519731D01* +X0433672Y0515763D02* +Y0523337D01* +X0438399Y0528064* +X0439678* +X0430698Y0554931D02* +Y0565663D01* +Y0554931D02* +X0445362Y0540268D01* +Y0530425D02* +Y0540268D01* +X0425339Y0557463D02* +X0443362Y0539439D01* +Y0529597D02* +Y0539439D01* +X0421798Y0557463D02* +X0425339D01* +X0481227Y0523264D02* +X0502726D01* +X0482055Y0521264D02* +X0503554D01* +X0480522Y0519731D02* +X0482055Y0521264D01* +X0499046Y0535637D02* +X0503498Y054009D01* +Y0542063* +X0480398Y0525264D02* +X0496699D01* +X0503498Y0532063* +X047957Y0527264D02* +X0495768D01* +X0499046Y0530542* +Y0535637* +X0310291Y0392465D02* +X0312344Y0390413D01* +X0283976Y0326638D02* +X0292948Y0317665D01* +X0272789Y0326638D02* +X0283976D01* +X0268851Y0345702D02* +X0269127D01* +X0273579Y0350154* +X0279062* +X0280391Y0348826* +Y0341657D02* +Y0348826D01* +X0261931Y0345702D02* +X0268851D01* +X0269587Y0333563D02* +Y0339158D01* +X0276232Y0345802* +X0272835Y0323007D02* +Y0330315D01* +X0269587Y0333563D02* +X0272835Y0330315D01* +X0271019Y0321191D02* +X0272835Y0323007D01* +X0261964Y0321191D02* +Y0323593D01* +X0373091Y0451109D02* +Y0527453D01* +X0368701Y0531843D02* +X0373091Y0527453D01* +X0360469Y0533831D02* +X0368591Y0525708D01* +X0360469Y0533831D02* +Y0536087D01* +X0354791Y0541764D02* +X0360469Y0536087D01* +X0354791Y0541764D02* +Y0549518D01* +X0368701Y0531843D02* +Y0536956D01* +X0360791Y0544866D02* +X0368701Y0536956D01* +X0346408Y053184D02* +X0350391Y0535823D01* +Y0547365* +X0368591Y0457965D02* +Y0525708D01* +X0363591Y0452965D02* +X0368591Y0457965D01* +X0327344Y0460208D02* +Y0468933D01* +X0328344Y0469933* +X0324391Y0457255D02* +X0327344Y0460208D01* +X0322344Y0458036D02* +X0325344Y0461036D01* +Y0469762* +X0320344Y0458865D02* +X0323344Y0461865D01* +Y047059* +X0318344Y0459693D02* +X0321344Y0462693D01* +Y0471419* +X0316344Y0460522D02* +X0319344Y0463521D01* +Y0472247* +X0314344Y046135D02* +X0317344Y046435D01* +Y0473075* +X0312344Y0462178D02* +X0315344Y0465178D01* +Y0473904* +X0316344Y0474904* +X0317344Y0473075D02* +X0318344Y0474076D01* +X0324391Y0448176D02* +Y0457255D01* +X0314344Y0444081D02* +Y046135D01* +X0312344Y0443252D02* +Y0462178D01* +X0316344Y0444909D02* +Y0460522D01* +X0318344Y0445738D02* +Y0459693D01* +X0320344Y0446566D02* +Y0458865D01* +X0322344Y0447395D02* +Y0458036D01* +X0332874Y0419095D02* +X0335391Y0416577D01* +Y0408465D02* +Y0416577D01* +X0334691Y0407765D02* +X0335391Y0408465D01* +X0339733Y0460381D02* +X0342973D01* +X0337991Y0458639D02* +X0339733Y0460381D01* +X0337991Y0458109D02* +Y0458639D01* +X0355415Y0457822D02* +X0359509D01* +X0348658Y0451065D02* +X0355415Y0457822D01* +X0345276Y0447638D02* +Y0450984D01* +X0341603Y0443965D02* +X0345276Y0447638D01* +X0337735Y0443965D02* +X0341603D01* +X0335391Y0441622D02* +X0337735Y0443965D01* +X0335391Y0429092D02* +Y0441622D01* +X0343391Y0412925D02* +Y0438865D01* +X0357491Y0452965* +X0332874Y0426575D02* +X0335391Y0429092D01* +X0323344Y0398156D02* +X0352091Y0369408D01* +X0323344Y0398156D02* +Y0412466D01* +X0321344Y0397327D02* +X0350091Y036858D01* +X0321344Y0397327D02* +Y0411638D01* +X0319344Y0396499D02* +X0348091Y0367752D01* +X0317344Y0395671D02* +X0346091Y0366923D01* +X0314344Y0401978D02* +X0315344Y0402978D01* +X0314344Y0412981D02* +X0317344Y0409981D01* +X0314344Y0412981D02* +Y043025D01* +X0312344Y0412152D02* +X0315344Y0409152D01* +X0312344Y0412152D02* +Y0431078D01* +X0318344Y0414638D02* +Y0428593D01* +X0316344Y0413809D02* +Y0429422D01* +X0319344Y0396499D02* +Y0410809D01* +X0324344Y0417123D02* +X0327344Y0414123D01* +X0324344Y0417123D02* +Y0426108D01* +X0322344Y0416294D02* +X0325344Y0413295D01* +X0322344Y0416294D02* +Y0426936D01* +X0320344Y0415466D02* +X0323344Y0412466D01* +X0320344Y0415466D02* +Y0427765D01* +X0318344Y0414638D02* +X0321344Y0411638D01* +X0316344Y0413809D02* +X0319344Y0410809D01* +X0327344Y0405498D02* +X0331391Y0401451D01* +X0327344Y0405498D02* +Y0414123D01* +X0325344Y040467D02* +Y0413295D01* +X0317344Y0395671D02* +Y0409981D01* +X0315344Y0402978D02* +Y0409152D01* +X0325344Y040467D02* +X0329391Y0400622D01* +X0314344Y0383393D02* +Y0401978D01* +X0162205Y0489795D02* +Y0500379D01* +X0175567Y0513741* +Y0535161* +X0341591Y0358665D02* +X0342091D01* +X034109D02* +X0341591D01* +X0341841Y0358415* +X0339139Y0361118D02* +X0341591Y0358665D01* +X0349491Y031758D02* +Y0348765D01* +X0350091Y0349365* +Y036858* +X0347491Y034968D02* +X0348091Y035028D01* +Y0367752* +X0345491Y0350508D02* +X0346091Y0351109D01* +Y0366923* +X0347491Y0318408D02* +Y034968D01* +X0345491Y0319394D02* +Y0350508D01* +X0348191Y031628D02* +X0349491Y031758D01* +X0339864Y0310781D02* +X0347491Y0318408D01* +X0336132Y0356168D02* +X0339891Y0352409D01* +X0335818Y0334979D02* +Y0344995D01* +X0328848Y0351965D02* +X0335818Y0344995D01* +X0339363Y0313265D02* +X0345491Y0319394D01* +X0329391Y0394937D02* +X0356891Y0367437D01* +X0356139Y0371018D02* +X0358739D01* +X0331391Y0395765D02* +X0356139Y0371018D01* +X0340191Y0357766D02* +X034109Y0358665D01* +X0352091Y0365068D02* +X0355291Y0361868D01* +X0352091Y0365068D02* +Y0369408D01* +X0362344Y0352113D02* +X0375491D01* +X0356891Y0336565D02* +X0361344Y0341018D01* +X0362391Y0367365D02* +X0366891D01* +X0358739Y0371018D02* +X0362391Y0367365D01* +X0361891Y0352565D02* +X0362344Y0352113D01* +X0325539Y0359577D02* +X0328651Y0356465D01* +X0320552Y0359577D02* +X0325539D01* +X0317491Y0365467D02* +X0321381Y0361577D01* +X0331008* +X0318552D02* +X0320552Y0359577D01* +X0316381Y0361577D02* +X0318552D01* +X0331008D02* +X033612Y0356465D01* +X0312491Y0365467D02* +Y0366817D01* +X0317491Y0365467D02* +Y0366817D01* +X0312491Y0365467D02* +X0316381Y0361577D01* +X031162Y0354465D02* +X0312532Y0353554D01* +X0303832Y0354465D02* +X031162D01* +X0301331Y0356965D02* +X0303832Y0354465D01* +X0305692Y0352465D02* +X0307491Y0350665D01* +X0298352Y0352465D02* +X0305692D01* +X0307491Y0349013D02* +Y0350665D01* +X019345Y0389086D02* +Y0393706D01* +X0193191Y0393965D02* +X019345Y0393706D01* +X0193191Y0393965D02* +Y0397322D01* +X0248932Y0464505D02* +X0256765Y0472339D01* +X0246758Y0464505D02* +X0248932D01* +X0264791Y0491923D02* +Y051076D01* +X0262791Y0492752D02* +Y0509932D01* +X0260791Y049358D02* +Y0509103D01* +X0258791Y0494409D02* +Y0508275D01* +X0256791Y0495237D02* +Y0507447D01* +X0256765Y0472339D02* +Y0489554D01* +X0258765Y0473492D02* +Y0488725D01* +X0262791Y0492752* +X0256765Y0489554D02* +X0260791Y049358D01* +X0254765Y0481782D02* +Y0490382D01* +X0258791Y0494409* +X0252765Y0482611D02* +Y0491211D01* +X0256791Y0495237* +X0250765Y0483439D02* +Y0492039D01* +X0254791Y0496065* +Y0506618* +X0258765Y0473492D02* +X0261439Y0470818D01* +X0248348Y0475365D02* +X0254765Y0481782D01* +X024752Y0477365D02* +X0252765Y0482611D01* +X0246691Y0479365D02* +X0250765Y0483439D01* +X0263439Y0455852D02* +Y0471818D01* +X0261439Y0456681D02* +Y0470818D01* +X0315891Y050244D02* +Y0538364D01* +X0313891Y0501612D02* +Y0537536D01* +X0311891Y0500784D02* +Y0536707D01* +X0309891Y0499955D02* +Y0535879D01* +X0307891Y0499127D02* +Y0535051D01* +X0305891Y0498298D02* +Y0534222D01* +X0328344Y0469933D02* +Y0492816D01* +X0319591Y0501569D02* +X0328344Y0492816D01* +X0326344Y0470762D02* +Y0491988D01* +X0324344Y047159D02* +Y0491159D01* +X0322344Y0472419D02* +Y0490331D01* +X0320344Y0473247D02* +Y0489502D01* +X0318344Y0474076D02* +Y0488674D01* +X0316344Y0474904D02* +Y0487846D01* +X0315891Y050244D02* +X0326344Y0491988D01* +X0313891Y0501612D02* +X0324344Y0491159D01* +X0311891Y0500784D02* +X0322344Y0490331D01* +X0309891Y0499955D02* +X0320344Y0489502D01* +X0307891Y0499127D02* +X0318344Y0488674D01* +X0305891Y0498298D02* +X0316344Y0487846D01* +X0325344Y0469762D02* +X0326344Y0470762D01* +X0323344Y047059D02* +X0324344Y047159D01* +X0321344Y0471419D02* +X0322344Y0472419D01* +X0319344Y0472247D02* +X0320344Y0473247D01* +X0348091Y0486365D02* +Y0491065D01* +X0349591Y0492565* +Y0493569* +X0343891Y0482165D02* +X0348091Y0486365D01* +X0350153Y0481055D02* +Y0488627D01* +X0351372Y0489847* +X0350153Y0481055D02* +X0354042Y0477165D01* +X0336991Y0482165D02* +X0343891D01* +X0372691Y0444665D02* +X0377291Y0449265D01* +X0361691Y0444665D02* +X0372691D01* +X0351791Y0434765D02* +X0361691Y0444665D01* +X0359591Y0448765D02* +X0370748D01* +X0373091Y0451109* +X0377291Y0449265D02* +Y0540423D01* +X029549Y0558765D02* +X0315891Y0538364D01* +X0294862Y0556565D02* +X0313891Y0537536D01* +X0294033Y0554565D02* +X0311891Y0536707D01* +X0305505Y0540265D02* +X0309891Y0535879D01* +X0302074Y0540265D02* +X0305505D01* +X0304677Y0538265D02* +X0307891Y0535051D01* +X0303648Y0536465D02* +X0305891Y0534222D01* +X0301974Y0540165D02* +X0302074Y0540265D01* +X0291615Y0540165D02* +X0301974D01* +X0327891Y0513665D02* +X0329791D01* +X0256301Y0519251D02* +X0264791Y051076D01* +X0245424Y0515986D02* +X0254791Y0506618D01* +X0247424Y0516814D02* +X0256791Y0507447D01* +X0249424Y0517643D02* +X0258791Y0508275D01* +X0251424Y0518471D02* +X0260791Y0509103D01* +X0351372Y0489847D02* +X0353665D01* +X0358433Y0494614* +X0222727Y0475365D02* +X0248348D01* +X0221899Y0477365D02* +X024752D01* +X0221071Y0479365D02* +X0246691D01* +X0343391Y0412925D02* +X0344591Y0411725D01* +Y0394965D02* +Y0411725D01* +X0357491Y0452965D02* +X0363591D01* +X0345276Y0451065D02* +X0348658D01* +X0296263Y0560865D02* +X0308263Y0548865D01* +X0297091Y0562865D02* +X0309091Y0550865D01* +X0250491Y0571865D02* +X0251291D01* +X0245655Y0571587D02* +X0249621D01* +X0183214Y0359583D02* +Y0363965D01* +Y0366645* +X0310564Y0379613D02* +X0314344Y0383393D01* +X0309736Y0381613D02* +X0312344Y0384221D01* +X0331696Y051557D02* +X0335052D01* +X0329791Y0513665D02* +X0331696Y051557D01* +X0181591Y0381065D02* +X0183214Y0382688D01* +Y0389086* +X0188332Y0385892D02* +X0189985Y0384239D01* +X0188332Y0385892D02* +Y0389086D01* +X0194617Y0384239D02* +X0196591Y0382265D01* +X0189985Y0384239D02* +X0194617D01* +X0188332Y0366645D02* +Y0369839D01* +X0190059Y0371565* +X0196591* +X0195535Y0399665D02* +X0199991D01* +X0193191Y0397322D02* +X0195535Y0399665D01* +X0196009Y0394483D02* +X0197191Y0395665D01* +X0196009Y0389086D02* +Y0394483D01* +X0199991Y0399665D02* +X0200691Y0400365D01* +X0157516Y0408265D02* +X0172374D01* +X0152391Y041339D02* +Y0415344D01* +X0158344Y0410265D02* +X0179591D01* +X0154391Y0414218D02* +X0158344Y0410265D01* +X0154391Y0414218D02* +Y0416172D01* +X0152391Y041339D02* +X0157516Y0408265D01* +X0149335Y0421229D02* +X0154391Y0416172D01* +X0185291Y0417906D02* +X0188091Y0420706D01* +X0183091Y0423365D02* +Y0423505D01* +Y0426261* +X0177491Y0417906D02* +X0183091Y0423505D01* +X0181232Y0406366D02* +X0185291Y0410425D01* +X0174273Y0406366D02* +X0181232D01* +X0172374Y0408265D02* +X0174273Y0406366D01* +X0301771Y0297986D02* +X0308971D01* +Y0305663D02* +X0315394D01* +X0331412Y0300545D02* +X0337515D01* +Y0297986D02* +X0338991Y029651D01* +X0331412Y0297986D02* +X0337515D01* +X0300491Y0348265D02* +Y0348406D01* +Y0349706* +X0292691Y0348406D02* +X0300491D01* +X0337707Y028775D02* +X0339491Y0285965D01* +X0331412Y028775D02* +X0337707D01* +X0265191Y0560909D02* +Y0569944D01* +X0270191Y0547765D02* +X0276491Y0541465D01* +X0270191Y0547765D02* +Y0557622D01* +X0265191Y0560909D02* +X0265791Y0560309D01* +Y054891D02* +Y0560309D01* +X0270191Y0557622D02* +X0272534Y0559965D01* +X0272635* +X0273291Y0560622* +X0312553Y0295427D02* +X0314891Y0297765D01* +X0308971Y0295427D02* +X0312553D01* +X0308971Y0292868D02* +X0313037D01* +X0315934Y0295765* +X0308971Y0290309D02* +X0316135D01* +X0337691Y0306165D02* +X0350626D01* +X033463Y0295427D02* +X0337791Y0292265D01* +X033463Y0303104D02* +X0337691Y0306165D01* +X0309139Y0337965D02* +X0315891D01* +X0325659Y028775D02* +X0327848Y0285561D01* +X0313835Y0301565D02* +X0321891D01* +X0312296Y0303104D02* +X0313835Y0301565D01* +X0308971Y0303104D02* +X0312296D01* +X0328218Y0292868D02* +X0331412D01* +X0324691Y0308965D02* +X0327994Y0305663D01* +X0308971Y0308222D02* +X0312491D01* +X0327994Y0305663D02* +X0331412D01* +X0274691Y0275265D02* +X0368491D01* +X0331412Y0308222D02* +X0331469Y0308165D01* +X0331412Y0303104D02* +X033463D01* +X0331412Y0295427D02* +X033463D01* +X0333691Y0537674D02* +X0337884D01* +X0342825Y0511829D02* +X0343691Y0510963D01* +X0188091Y0463269D02* +Y0466965D01* +X0183091Y0463269D02* +Y0464817D01* +X0162205Y0489795D02* +X0167352Y0484648D01* +X0147384Y042035D02* +X0152391Y0415344D01* +X0143364Y042035D02* +X0147384D01* +X0149335Y0421229D02* +Y0425534D01* +X0188091Y0420706D02* +Y0426261D01* +X0145276Y0429593D02* +X0149335Y0425534D01* +X0145276Y0429593D02* +Y0430315D01* +X0136614Y04271D02* +X0143364Y042035D01* +X0136614Y04271D02* +Y0427165D01* +Y0433465D02* +X013713Y043398D01* +X0251631Y0379505D02* +X0263439Y0391313D01* +X0244834Y0402665D02* +X0253691D01* +X0258439Y0407413* +Y0421081* +X0260439Y0414078D02* +Y0420252D01* +X0263439Y0423252* +X0258439Y0421081D02* +X0261391Y0424034D01* +Y0440936* +X0258439Y0443889D02* +X0261391Y0440936D01* +X0263439Y0423252D02* +Y0442178D01* +X0262786Y0442831D02* +X0263439Y0442178D01* +X0258439Y0443889D02* +Y0453681D01* +X0242491Y0396072D02* +Y0400322D01* +X0244834Y0402665* +X0242491Y0396072D02* +X0245257Y0393305D01* +X0258439Y0453681D02* +X0261439Y0456681D01* +X0260439Y0445178D02* +Y0452852D01* +X0263439Y0455852* +X0260439Y0445178D02* +X0262786Y0442831D01* +X0263439Y0391313D02* +Y0411078D01* +X0260439Y0414078D02* +X0263439Y0411078D01* +X0242731Y0354739D02* +X0246858Y0358865D01* +X0243831Y0298196D02* +X0262404D01* +X0268065Y0292535* +X0254351Y0331206D02* +Y0345702D01* +Y0331206D02* +X0261964Y0323593D01* +X0215453Y0568244D02* +Y0570404D01* +X0200991Y0577165D02* +X0208841Y0569315D01* +X0200191Y0577165D02* +X0200991D01* +X0210791Y0575665D02* +X0216053Y0570404D01* +X0210191Y0575665D02* +Y0577165D01* +X0240191D02* +X0243591D01* +X0234644Y0572713D02* +X0242036D01* +X0230191Y0577165D02* +X0234644Y0572713D01* +X0208033Y0439961D02* +X0208465D01* +X0242731Y0350599D02* +Y0354739D01* +X0208033Y0439961D02* +X0211122Y0436872D01* +X0208033Y041437D02* +X0211122Y0417459D01* +X0208033Y0386461D02* +X0218091D01* +X0242731Y0348804D02* +Y0350599D01* +X0211122Y0417459D02* +Y0436872D01* +X0242036Y0572713D02* +X0248588Y0579265D01* +X0250091* +X0250191D02* +X0254191Y0575265D01* +X0243591Y0577165D02* +X0247691Y0581265D01* +X0256243Y0575565D02* +X0256291D01* +X0247691Y0581265D02* +X025102D01* +X0256243Y0576042* +Y0575565D02* +Y0576042D01* +X0237247Y0565965D02* +X0238591D01* +X0249424Y0517643D02* +Y0523654D01* +X0247424Y0516814D02* +Y0524438D01* +X0238333Y0559941D02* +X0238896Y0559377D01* +X024954Y0575514D02* +X0250554D01* +X0252816Y0573252* +X0256827Y0555958D02* +X0260891Y0560022D01* +X0256827Y0547201D02* +Y0555958D01* +X0256291Y0546665D02* +X0256827Y0547201D01* +X0249691Y0546122D02* +Y0549865D01* +X0249191Y0550365D02* +X0249691Y0549865D01* +Y0546122D02* +X0258391Y0537422D01* +Y0527065D02* +Y0537422D01* +X0276491Y0535657D02* +Y0541465D01* +X023502Y0559941D02* +X0238333D01* +X0169998Y0574265D02* +X0180291D01* +X0182991Y0576965* +X0242391Y0547365D02* +Y0550065D01* +Y0544765D02* +Y0547365D01* +Y0544765D02* +X0247291Y0539865D01* +Y0538225D02* +Y0539865D01* +X0273291Y0560622D02* +Y0561441D01* +X0275291Y0556865D02* +Y0560657D01* +X0265091Y0540965D02* +X0265391Y0540665D01* +X0265091Y054821D02* +X0265791Y054891D01* +X0265091Y0540965D02* +Y054821D01* +X0223148Y0283708D02* +X0231591Y0275265D01* +X0255391* +X0335052Y051557D02* +X0337041Y0517559D01* +X0252591Y0430117D02* +Y0434165D01* +X0250491Y0436265D02* +X0252591Y0434165D01* +X0247591Y0426065D02* +Y0430117D01* +Y0426065D02* +X0249691Y0423965D01* +X0337884Y0537674D02* +X0339294Y0536264D01* +Y0530768D02* +Y0536264D01* +X033471Y0526184D02* +X0339294Y0530768D01* +X0337041Y0517559D02* +Y0523853D01* +X0301391Y0302371D02* +Y0302621D01* +X0308971Y0310781D02* +X0311707D01* +X0316131Y0317465D02* +X0322031Y0323365D01* +X0330491* +X0334851Y0327725* +X0336091* +X0325891Y0328365D02* +X0327543D01* +X0302031Y0332365D02* +X0306031Y0328365D01* +X0307191Y0333365D02* +X0309039D01* +X0297101Y0336818D02* +X0303739D01* +X0307191Y0333365* +X0294948Y0334665D02* +X0297101Y0336818D01* +X0318991Y0326265D02* +X0323791D01* +X0325891Y0328365* +X0183091Y0464817D02* +X0200589Y0482315D01* +X0188091Y0466965D02* +X0201441Y0480315D01* +X0217891Y0489365D02* +Y0497037D01* +X0208841Y0480315D02* +X0217891Y0489365D01* +X0201441Y0480315D02* +X0208841D01* +X0215891Y0490194D02* +Y0497865D01* +X0208013Y0482315D02* +X0215891Y0490194D01* +X0200589Y0482315D02* +X0208013D01* +X021775Y0449246D02* +Y0462524D01* +X0208465Y0439961D02* +X021775Y0449246D01* +X0220313Y0437709D02* +Y0442213D01* +X022175Y044365* +X0220313Y0437709D02* +X0221752Y0436269D01* +X0218313Y0443687D02* +X021975Y0445124D01* +X0218313Y043688D02* +X0219752Y0435441D01* +X0218313Y043688D02* +Y0443687D01* +X0221752Y0418061D02* +Y0436269D01* +X0219752Y041889D02* +Y0435441D01* +X0220313Y0416622D02* +X0221752Y0418061D01* +X0218313Y0417451D02* +X0219752Y041889D01* +X0220313Y0412118D02* +Y0416622D01* +Y0412118D02* +X022175Y0410681D01* +X0218313Y041129D02* +Y0417451D01* +X022175Y039015D02* +Y0410681D01* +X0218313Y041129D02* +X021975Y0409853D01* +Y0390978D02* +Y0409853D01* +X0220313Y0388713D02* +X022175Y039015D01* +X0218313Y0389541D02* +X021975Y0390978D01* +X022175Y0367424D02* +Y0382771D01* +X0220313Y0384209D02* +Y0388713D01* +Y0384209D02* +X022175Y0382771D01* +X0218313Y038338D02* +Y0389541D01* +Y038338D02* +X021975Y0381943D01* +Y037108D02* +Y0381943D01* +X0215691Y0367022D02* +X021975Y037108D01* +X0215691Y0360265D02* +Y0367022D01* +X0214087Y0358661D02* +X0215691Y0360265D01* +X0210242Y0358661D02* +X0214087D01* +X0220313Y0465618D02* +Y0470122D01* +Y0465618D02* +X022175Y0464181D01* +X0218313Y046479D02* +Y0470951D01* +Y046479D02* +X021975Y0463353D01* +X0216313Y0463961D02* +Y0471779D01* +X022175Y044365D02* +Y0464181D01* +X021975Y0445124D02* +Y0463353D01* +X0216313Y0463961D02* +X021775Y0462524D01* +X0214313Y0459549D02* +Y0472607D01* +X0219691Y0365365D02* +X022175Y0367424D01* +X0226731Y0345852D02* +Y0350599D01* +Y0345852D02* +X0227648Y0344935D01* +X0220313Y0470122D02* +X0223498Y0473307D01* +X0214313Y0472607D02* +X0221071Y0479365D01* +X0216313Y0471779D02* +X0221899Y0477365D01* +X0218313Y0470951D02* +X0222727Y0475365D01* +X0223498Y0473307D02* +X023035D01* +X0232291Y0471365* +X0251424Y0518471D02* +Y052287D01* +X0245424Y0515986D02* +Y0525222D01* +X0233491Y0538344D02* +X0233991Y0538844D01* +X0233491Y0536665D02* +Y0538344D01* +X0229491Y0538565D02* +X0230191Y0537865D01* +X0229491Y0538565D02* +X0233291Y0542365D01* +X0229591Y0526741D02* +X0238204Y0535353D01* +X0215891Y0497865D02* +X0229591Y0511565D01* +X0231591Y0525912D02* +X0239244Y0533565D01* +X0217891Y0497037D02* +X0231591Y0510737D01* +X0225391Y0528565D02* +X0233491Y0536665D01* +X0225391Y0525565D02* +Y0528565D01* +X0222391Y0513365D02* +Y0513965D01* +X0221491Y0514865D02* +Y0521665D01* +X0225391Y0525565* +X0221491Y0514865D02* +X0222391Y0513965D01* +X0208033Y046787D02* +X0214008D01* +X0229591Y0517808D02* +Y0526741D01* +Y0511565D02* +Y0517808D01* +X0231591Y0510737D02* +Y0525912D01* +X0327991Y051931D02* +X0332431D01* +X0327991Y0519565D02* +Y0525265D01* +Y051931D02* +Y0519565D01* +X0323091Y0332965D02* +X0326543D01* +X0321291Y0331165D02* +X0323091Y0332965D01* +X0268065Y0292535D02* +X0279339D01* +X0282591Y0289282* +Y0283108D02* +X0284934Y0280765D01* +X0282591Y0283108D02* +Y0289282D01* +X0284934Y0280765D02* +X0327591D01* +X0248691Y0556365D02* +Y055789D01* +X0242391Y0550065D02* +X0248691Y0556365D01* +X0260891Y0560022D02* +Y0565177D01* +X0300932Y0332365D02* +X0302031D01* +X0179291Y0363965D02* +X0183214D01* +X0306031Y0328365D02* +X0312548D01* +X0317248Y0341065D02* +X0319591Y0338722D01* +X0302051Y0341065D02* +X0317248D01* +X0323591Y0291422D02* +Y0291765D01* +X0321977Y0295865D02* +X0326391D01* +X0318035Y0309565D02* +X0322335Y0305265D01* +X0313835Y0309565D02* +X0318035D01* +X0312491Y0308222D02* +X0313835Y0309565D01* +X0311707Y0310781D02* +X0312491Y0311565D01* +X0320291* +X0321991Y0313265* +X0316135Y0290309D02* +X0317591Y0291765D01* +X0308971Y028775D02* +X0325659D01* +X0315934Y0295765D02* +X0319248D01* +X0323591Y0291422* +X0314891Y0297765D02* +X0320077D01* +X0321977Y0295865* +X0322335Y0305265D02* +X0323891D01* +X0326491Y0302665* +X0321891Y0301565D02* +X0322491Y0300965D01* +X0326491Y0294594D02* +Y0302665D01* +Y0294594D02* +X0328218Y0292868D01* +X0291641Y0554565D02* +X0294033D01* +X0290687Y0556565D02* +X0294862D01* +X0290091Y0558765D02* +X029549D01* +X0285851Y0562865D02* +X0297091D01* +X0286635Y0560865D02* +X0296263D01* +X0283925Y0564865D02* +X029792D01* +X0328337Y0542846D02* +X033068Y0540503D01* +X033361Y0537592D02* +X0333691Y0537674D01* +X032561Y0542846D02* +X0328337D01* +X033068Y0540503D02* +X0330699D01* +X033361Y0537592* +X0347091Y0311365D02* +X0348191Y0312465D01* +X0321991Y0313265D02* +X0339363D01* +X0331412Y0310781D02* +X0339864D01* +X0334439Y0285561D02* +X0337835Y0282165D01* +X0327848Y0285561D02* +X0334439D01* +X0343491Y0284565D02* +X0344391Y0285465D01* +X0343491Y0284508D02* +Y0284565D01* +X0341148Y0282165D02* +X0343491Y0284508D01* +X0337835Y0282165D02* +X0341148D01* +X0348191Y0312465D02* +Y031628D01* +X0337515Y0300545D02* +X0338991Y0302021D01* +X0292948Y0317665D02* +X0310391D01* +X0318991Y0326265* +X0300491Y0348406D02* +X0305832Y0343065D01* +X0293851Y0356965D02* +X0298352Y0352465D01* +X0305832Y0343065D02* +X0313641D01* +X0335818Y0334979D02* +X0336091Y0334705D01* +X0312491Y0348313D02* +Y0353365D01* +X0312548Y0328365D02* +X0319591Y0335408D01* +Y0338722* +X0312532Y0353554D02* +X0323602D01* +X032519Y0351965* +X0328848* +X0312344Y0384221D02* +Y0390413D01* +X0328596Y0366817D02* +X0334295Y0361118D01* +X0339139* +X0336132Y0356465D02* +Y0356665D01* +Y0356168D02* +Y0356465D01* +X033612D02* +X0336132D01* +X0322588Y0530668D02* +X0327991Y0525265D01* +X0322588Y0530668D02* +Y0543025D01* +X0308263Y0548865D02* +X0316748D01* +X0322588Y0543025* +X0309091Y0550865D02* +X0317591D01* +X032561Y0542846* +X0354042Y0477165D02* +X0355393D01* +X0331891Y0454165D02* +X0333491Y0455765D01* +X0335648* +X0337991Y0458109* +X0353907Y057217D02* +X0362108D01* +X0353883Y0572193D02* +X0353907Y057217D01* +X0371327Y0553765D02* +Y0560003D01* +X0349911Y0576165D02* +X0353883Y0572193D01* +X0362108Y057217D02* +X0362787D01* +X0371027Y056393* +Y0560703D02* +Y056393D01* +X028058Y0579865D02* +X0342134D01* +X0345834Y0576165* +X0349911* +X0281364Y0577865D02* +X0341191D01* +X0346611Y0572445* +Y0571745D02* +Y0572445D01* +X0346532Y0571665D02* +X0347191D01* +X0353731Y0565125* +X0355231Y0563865D02* +X0356516Y056515D01* +X0362608* +X0281948Y0575665D02* +X0316551D01* +X0325772Y0566444* +X0307034Y0571465D02* +X0319935Y0558565D01* +X0280532Y0571465D02* +X0307034D01* +X029792Y0564865D02* +X030992Y0552865D01* +X031842* +X0318591Y0552694* +X0371376Y0546338D02* +Y0546635D01* +X0362608Y055767D02* +X0366923Y0553355D01* +Y0551088D02* +Y0553355D01* +Y0551088D02* +X0371376Y0546635D01* +X0332314Y0565506D02* +X0338803D01* +X0354791Y0549518* +X0319935Y0558565D02* +X0339191D01* +X0350391Y0547365* +X0341036Y0543821D02* +Y0545821D01* +Y0543821D02* +X0344291Y0540565D01* +X0327633Y0549901D02* +X0334538D01* +X0335747Y055111* +X0351791Y0419365D02* +Y0434765D01* +Y0419365D02* +X0362591Y0408565D01* +X0373454* +X0377591Y0404428* +X0361044Y0399765D02* +X0371225D01* +X0371376Y0546338D02* +X0377291Y0540423D01* +X0358898Y0401911D02* +X0361044Y0399765D01* +X0358898Y0401911D02* +Y0405858D01* +X0329391Y0394937D02* +Y0400622D01* +X0331391Y0395765D02* +Y0401451D01* +X0267651Y0364825D02* +X0274511Y0371685D01* +X0265225Y0364825D02* +X0267651D01* +X0292239Y0381613D02* +X0309736D01* +X0282311Y0371685D02* +X0292239Y0381613D01* +X0274511Y0371685D02* +X0282311D01* +X0293439Y0379613D02* +X0310564D01* +X0283511Y0369685D02* +X0293439Y0379613D01* +X0275811Y0369685D02* +X0283511D01* +X0264991Y0358865D02* +X0275811Y0369685D01* +X0246858Y0358865D02* +X0264991D01* +X0344591Y0394965D02* +X0346291Y0393265D01* +X0293391Y0357425D02* +Y0370322D01* +X0296935Y0373865D02* +X0309391D01* +X0293391Y0370322D02* +X0296935Y0373865D01* +X0293391Y0357425D02* +X0293851Y0356965D01* +X0312491Y0368168D02* +X0317789Y0373465D01* +X0327391* +X0312491Y0366817D02* +Y0368168D01* +X0335091Y040745D02* +X0335691Y040685D01* +X0347491Y0417265D02* +X0358898Y0405858D01* +X0347491Y0436665D02* +X0359591Y0448765D01* +X0347491Y0417265D02* +Y0436665D01* +X0245257Y0379505D02* +X0251631D01* +X0319591Y0501569D02* +Y0505465D01* +X0254208Y0518516D02* +X0262791Y0509932D01* +X0254208Y0518516D02* +Y0520086D01* +X0350781Y0376815D02* +X0356091Y0382125D01* +Y0383925* +X0362191Y0385213D02* +X0366479D01* +X0360544Y0383565D02* +X0362191Y0385213D01* +X0377591Y0384265D02* +Y0404428D01* +X0369334Y0376008D02* +X0377591Y0384265D01* +X0366449Y0376008D02* +X0369334D01* +X0367091Y0357265D02* +X0373731D01* +X0355291Y0358165D02* +Y0361868D01* +X0368491Y0275265D02* +X0377291Y0284065D01* +X0260191Y0280065D02* +X0269891D01* +X0255391Y0275265D02* +X0260191Y0280065D01* +X0269891D02* +X0274691Y0275265D01* +X0221654Y0291142D02* +Y0298228D01* +Y0291142D02* +X0223148Y0289647D01* +Y0283708D02* +Y0289647D01* +X0280391Y0341657D02* +X0287382Y0334665D01* +X0294948* +X0260765Y0487897D02* +X0264791Y0491923D01* +X0260765Y0474492D02* +Y0487897D01* +Y0474492D02* +X0263439Y0471818D01* +X0342248Y0477165D02* +X0347891Y0471522D01* +Y0469803D02* +Y0471522D01* +Y0469803D02* +X0352089Y0465605D01* +X0336591Y0477165D02* +X0342248D01* +X0352089Y0463804D02* +Y0465605D01* +Y0463804D02* +X0355548Y0460345D01* +X035925* +X0343691Y0504124D02* +Y0510963D01* +X0169332Y0564865D02* +Y0573599D01* +Y0564865D02* +X0171591Y0562605D01* +X0169332Y0573599D02* +X0169998Y0574265D01* +X0309391Y0373865D02* +X0309991Y0373265D01* +X0322491Y0366817D02* +X0328596D01* +X0317491Y0346916D02* +Y0348313D01* +X0313641Y0343065D02* +X0317491Y0346916D01* +X0341831Y0502264D02* +X0343691Y0504124D01* +X0358581Y0494465D02* +Y0496673D01* +X0362598Y0500691D02* +Y0520301D01* +X0358581Y0496673D02* +X0362598Y0500691D01* +X0355533Y0531921D02* +X0360591Y0526863D01* +Y0522308D02* +Y0526863D01* +Y0522308D02* +X0362598Y0520301D01* +X0334841Y0526053D02* +X0337041Y0523853D01* +X0235933Y0557941D02* +X0237504D01* +X0233291Y0555299D02* +X0235933Y0557941D01* +X0233291Y0542365D02* +Y0555299D01* +X0233257Y0558178D02* +X023502Y0559941D01* +X0230472Y0558178D02* +X0233257D01* +X031842Y0552865D02* +X0321384Y0549902D01* +X0327269* +X0373731Y0357265D02* +X0375491Y0359025D01* +X0370004Y0361018D02* +X0375491Y0366506D01* +X0362344Y0361018D02* +X0370004D01* +X0366891Y0346565D02* +X0367492Y0345965D01* +X0373952* +X0375491Y0344425* +X0377291Y0284065D02* +Y0321851D01* +X0356891Y0335432D02* +Y0336565D01* +X0366891D02* +X0371358Y0332098D01* +Y0322146D02* +Y0332098D01* +Y0322146D02* +X0375291Y0318213D01* +X0361344Y0341018D02* +X0368736D01* +X0373358Y0325784D02* +Y0336396D01* +X0360544Y0381194D02* +Y0383565D01* +X0356891Y0377542D02* +X0360544Y0381194D01* +X0356891Y0376565D02* +Y0377542D01* +X0366479Y0385213D02* +X0370932Y0389665D01* +X0371225Y0389959* +Y0399765* +X0359744Y0327559D02* +Y0328838D01* +X0331412Y0308222D02* +X0350545D01* +X0355709Y0313386* +Y0321555* +X0359744Y0327559D02* +X0363189Y0324114D01* +Y0321555D02* +Y0324114D01* +X0355709Y0321555D02* +X0363189D01* +X0337791Y0292265D02* +X0349352D01* +X0350626Y0306165D02* +X0353445Y0303346D01* +X0370491Y0299528D02* +Y0313987D01* +X0359941Y0295965D02* +X0366928D01* +X0370491Y0299528* +X0331412Y0290309D02* +X0331455Y0290265D01* +X0357579Y0293602D02* +X0359941Y0295965D01* +X0344391Y0285465D02* +X0345391D01* +X0327591Y0280765D02* +X0330891Y0277465D01* +X034843D02* +X0352004Y0281039D01* +X0330891Y0277465D02* +X034843D01* +X0375291Y02935D02* +Y0318213D01* +X0362831Y0281039D02* +X0375291Y02935D01* +X0352004Y0281039D02* +X0362831D01* +X0368736Y0341018D02* +X0373358Y0336396D01* +Y0325784D02* +X0377291Y0321851D01* +X0356891Y0336565D02* +X0360165Y0333291D01* +X0362772* +X0367225Y0328838* +X0353223Y028915D02* +X0357579Y0293506D01* +Y0293602* +X0331455Y0290265D02* +X0346646D01* +X0347761Y028915* +X0353223* +X0312344Y0443252D02* +X0315344Y0440252D01* +Y0434078D02* +Y0440252D01* +X0312344Y0431078D02* +X0315344Y0434078D01* +X0314344Y0444081D02* +X0317344Y0441081D01* +Y043325D02* +Y0441081D01* +X0314344Y043025D02* +X0317344Y043325D01* +X0316344Y0444909D02* +X0319344Y0441909D01* +Y0432421D02* +Y0441909D01* +X0316344Y0429422D02* +X0319344Y0432421D01* +X0318344Y0445738D02* +X0321344Y0442738D01* +Y0431593D02* +Y0442738D01* +X0318344Y0428593D02* +X0321344Y0431593D01* +X0320344Y0446566D02* +X0323344Y0443566D01* +Y0430765D02* +Y0443566D01* +X0320344Y0427765D02* +X0323344Y0430765D01* +X0322344Y0447395D02* +X0325344Y0444394D01* +Y0429936D02* +Y0444394D01* +X0322344Y0426936D02* +X0325344Y0429936D01* +X0324391Y0448176D02* +X0327344Y0445223D01* +Y0429108D02* +Y0445223D01* +X0324344Y0426108D02* +X0327344Y0429108D01* +X0604331Y0464764D02* +D01* +Y0472146D02* +X0604725Y047254D01* +X0617584Y0464764D02* +X0617796D01* +X0618209* +G54D59* +X0513798Y0509119D02* +Y0512423D01* +X0500798Y0572063D02* +X0503498D01* +X049709Y0568354D02* +X0500798Y0572063D01* +X0493598Y0568354D02* +X049709D01* +X0478498D02* +X0493598D01* +X0412639Y0532463D02* +X0421798D01* +X0412598Y0532423D02* +X0412639Y0532463D01* +X0454598Y0575146D02* +X0463698D01* +X0509142Y0504463D02* +X0513798Y0509119D01* +X0465453Y0561516D02* +Y0568504D01* +X0477501Y056148D02* +Y0568504D01* +X0446162Y0557972D02* +X0452683D01* +X0453569Y0547072D02* +Y0557874D01* +X0275118Y0303633D02* +X0287402D01* +Y0296457D02* +Y0303633D01* +X0294882Y0288091D02* +Y0296457D01* +Y0311122* +X0356891Y0346565D02* +X0366891D01* +X0339291Y0411509D02* +X0340591Y0410209D01* +X0339291Y0411509D02* +Y0439965D01* +X0340591Y0404565D02* +Y0410209D01* +X0175317Y0483891D02* +X0187893Y0496467D01* +Y0499494* +X0211418Y0277239D02* +Y0284365D01* +X0201991D02* +X0211418D01* +Y0292139* +Y0284365D02* +X0218991D01* +X0247466Y0303633D02* +X0253465D01* +Y0311792* +Y0303633D02* +X0261824D01* +X0253465D02* +X0253497Y0303665D01* +X0275118Y0281039D02* +Y0287098D01* +X0264724D02* +X0275118D01* +X0235359D02* +X0253465D01* +X0326741Y0533733D02* +X0327046Y0533429D01* +X0214691Y0518165D02* +Y0523239D01* +X0215665Y0524213* +X0340591Y0399209D02* +Y0404565D01* +X0326741Y0533733D02* +Y0538846D01* +X0275118Y0303633D02* +X0276477Y0302274D01* +X0355691Y0391806D02* +Y0397465D01* +X0228248Y0311983D02* +X0229975Y0310256D01* +Y0298228D02* +Y0310256D01* +Y0292482D02* +Y0298228D01* +Y0292482D02* +X0235359Y0287098D01* +X0228248Y0311983D02* +Y0321011D01* +X0231566Y032433* +X0175317Y0471965D02* +Y0483891D01* +X0297891Y0461951D02* +Y0468265D01* +Y0433408D02* +Y044061D01* +X0353445Y03D02* +Y0301673D01* +X0350492Y0297047D02* +X0353445Y03D01* +X0350492Y0293602D02* +Y0297047D01* +X0353445Y03D02* +X0365256D01* +X0441069Y0355095D02* +X0466269Y0348195D01* +X0441069Y0344694D02* +X0466269Y0344595D01* +X0441069Y0348195D02* +X0466269D01* +X0441069Y0344694D02* +Y0355095D01* +Y0351195D02* +X0452669D01* +X0455669Y0363394D02* +X0466269D01* +X0441069Y0366394D02* +X0466169D01* +X0466269Y0359494D02* +Y0369895D01* +X0441069Y0366394D02* +X0466269Y0359494D01* +X0441069Y0366394D02* +Y0369994D01* +X0466269Y0369895* +Y0344595D02* +Y0348195D01* +X0569882Y0595472D02* +X0582735D01* +X0549902Y0582555D02* +Y0591535D01* +Y0572835D02* +Y0582555D01* +X0558071* +X0543012D02* +X0549902D01* +X0597441Y0488189D02* +Y0503248D01* +X0573819Y0488189D02* +Y0503248D01* +X0590354Y0500909D02* +X0605413D01* +X0566732D02* +X0581791D01* +X0576772Y0589508D02* +Y0602362D01* +X0625984Y0472343D02* +X0635729D01* +X0626083Y0480119D02* +X0634055D01* +X0451201Y0381417D02* +X0459035Y0389252D01* +X0451201Y0369392D02* +X04517Y0368893D01* +X0451201Y0369392D02* +Y0381417D01* +X0459035Y0389252D02* +X0466227D01* +X0498286Y0349803D02* +Y041437D01* +Y0423187D02* +X0506496Y0431397D01* +X0498286Y0414608D02* +Y0423187D01* +X0506496Y0431397D02* +Y0441339D01* +X0502264Y0445571D02* +X0506496Y0441339D01* +X0502264Y0445571D02* +Y044813D01* +X0513681Y0406168D02* +Y0430079D01* +X0498267Y035935D02* +X0518602D01* +X0575098Y0386516D02* +Y0400197D01* +X0549075Y0284744D02* +Y0294744D01* +X0584202Y0339222D02* +Y0343209D01* +X057535Y033037D02* +X0584202Y0339222D01* +X0467691Y0389325D02* +X0480217D01* +X0470022Y038937D02* +Y0401558D01* +X0461Y0287094D02* +Y0294994D01* +X04523Y0297094D02* +X0466D01* +X0461Y0292094D02* +X0466Y0297094D01* +X04151Y0334295D02* +X04523Y0297094D01* +X0405673Y0357221D02* +Y0361262D01* +Y0357221D02* +X04151Y0347795D01* +Y0334295D02* +Y0347795D01* +X062687Y044754D02* +X0640158D01* +X0625984Y0439764D02* +X0638189D01* +X0614961Y0313779D02* +X0625591Y030315D01* +X0596949Y0302362D02* +X0604724D01* +X0625591Y0281496* +X0440705Y0333986D02* +Y0344331D01* +X0441069Y0344694* +X0427327Y0344727D02* +X0449673D01* +X0549272Y0294744D02* +X0550157D01* +X0597343Y0309842D02* +X060128Y0313779D01* +X0614961* +X048725Y0366785D02* +Y0379495D01* +X0562487Y0301181D02* +X057535Y0314045D01* +Y033037* +X0550157Y0294744D02* +X0556595Y0301181D01* +X0562487* +G54D60* +X0419909Y0505963D02* +X0426898D01* +X041415Y0511723D02* +X0419909Y0505963D01* +X0411698Y0511723D02* +X041415D01* +X0426898Y0505963D02* +X042816Y0507224D01* +X0461619Y0540437D02* +X0463567Y0538685D01* +X0426451Y052473D02* +Y0541878D01* +Y052473D02* +X042816Y0523021D01* +Y0507224D02* +Y0523021D01* +X0426451Y0541878D02* +X0428151Y0543578D01* +X0235191Y0524865D02* +Y0526321D01* +X0237491Y0528621* +X0237091Y0524765D02* +Y0528125D01* +X0237491Y0528625D02* +X0240312Y0531445D01* +G54D61* +X0450303Y0545947D02* +X0457266D01* +X0361991Y0474665D02* +X0362795Y0475469D01* +Y0481244* +X0356749Y0390748D02* +X0362368D01* +G54D62* +X0305391Y0388565D02* +Y0396561D01* +X0312844Y0404014* +X0307891Y0461261D02* +X0312844Y0466214D01* +Y0477036* +X0307891Y0448265D02* +Y0461261D01* +Y041307D02* +X0312844Y0408117D01* +Y0404014D02* +Y0408117D01* +X0307891Y0417165D02* +Y0430161D01* +X0302891Y0423069D02* +Y0442188D01* +X0297891Y0447188D02* +X0302891Y0442188D01* +X0287891Y0430116D02* +X0292891Y0435116D01* +Y043917* +X0287891Y044417D02* +X0292891Y043917D01* +X0307891Y041307D02* +Y0417165D01* +X0169102Y0518285D02* +Y0521252D01* +X0163791Y0526563D02* +X0169102Y0521252D01* +X0169951Y0556765D02* +X0171591Y0555125D01* +X0165341Y0556765D02* +X0169951D01* +X0163791Y0558315D02* +X0165341Y0556765D01* +X0165591Y0560115D02* +Y0565025D01* +X0267846Y0368565D02* +X0272051Y0372771D01* +X0256958Y0368565D02* +X0267846D01* +X0280791Y0475803D02* +X0287891Y0468703D01* +X0265218Y0475739D02* +X0267891Y0473065D01* +X0274691Y0473832D02* +X0277891Y0470632D01* +X0267891Y0468265D02* +Y0473065D01* +X0288591Y0476365D02* +X0292844Y0472113D01* +X0307861Y04442D02* +Y0448235D01* +X0307891Y0448265* +X0262939Y0419217D02* +X0267891Y042417D01* +Y0437165* +X0262939Y0415114D02* +Y0419217D01* +Y0446214D02* +Y0451817D01* +Y0446214D02* +X0267891Y0441261D01* +X0262939Y0451817D02* +X0267891Y045677D01* +Y0468265* +X0265939Y0412114D02* +Y0412213D01* +X026584D02* +X0265939D01* +X0262939Y0415114D02* +X026584Y0412213D01* +X0265939Y0412114D02* +X0267891Y0410161D01* +X0305391Y0388565D02* +X0307891Y0386065D01* +X0295891Y0388065D02* +X0297891Y0386065D01* +X0295891Y0388065D02* +Y0397065D01* +X0299939Y0401113* +X0286191Y0387765D02* +X0287891Y0386065D01* +X0362791Y0486705D02* +Y0490465D01* +X0223625Y0309544D02* +X0225394Y0307776D01* +X0277891Y0456865D02* +Y0468265D01* +Y0470632* +X0239133Y0342004D02* +X0244606Y0336531D01* +X0272891Y0414765D02* +Y0419265D01* +X0277891Y0424265* +X0272939Y0451913D02* +X0277891Y0456865D01* +X0272891Y0414765D02* +X0277891Y0409765D01* +Y0406065D02* +Y0409765D01* +X0267891Y0406065D02* +Y0410161D01* +X0223625Y0309544D02* +Y0316265D01* +X0175807Y0338265D02* +X0181659D01* +X0272939Y0445218D02* +Y0451913D01* +Y0445218D02* +X0277891Y0440265D01* +Y0424265D02* +Y0440265D01* +X0267891Y0437165D02* +Y0441261D01* +X0282939Y0442118D02* +X0287891Y0437165D01* +X0276491Y0469765D02* +X0277991Y0468265D01* +X0277891D02* +X0277991D01* +X0163791Y0526563D02* +Y0550835D01* +X0172244Y0500787D02* +X0173917D01* +X0171544D02* +X017617D01* +X0194311Y0333265D02* +X0203051D01* +X0217446Y0335451D02* +X0222991Y0340996D01* +Y0342332* +X0299943Y0401113D02* +X0302891Y0404061D01* +X0299939Y0401113D02* +X0299943D01* +X0277891Y0377782D02* +Y0386065D01* +Y0377782D02* +X0279532Y0376142D01* +X0272051Y0372771D02* +Y0376142D01* +X0194311Y0328265D02* +X01989D01* +X0225394Y0306496D02* +Y0307776D01* +X023419Y0319386D02* +X023535Y0318226D01* +Y0312725D02* +Y0318226D01* +X023909Y0313945D02* +Y0320993D01* +X023937Y0306496D02* +Y0313665D01* +X023909Y0313945D02* +X023937Y0313665D01* +X0243996Y0321043D02* +Y0326582D01* +X0243814Y0320861D02* +X0243996Y0321043D01* +X024283Y0312725D02* +Y0319992D01* +X0243699Y0320861* +X01989Y0328265D02* +X0214062Y0313103D01* +X0203839Y0327658D02* +Y0331988D01* +Y0327658D02* +X0210998Y0320498D01* +X0213976* +X0175807Y0333265D02* +X0176774D01* +X0179674Y0330365* +X0181659* +X0288591Y0476365D02* +Y0477989D01* +X0280791Y0475803D02* +Y0477989D01* +X0274691Y0473832D02* +Y0476289D01* +X0272991Y0477989D02* +X0274691Y0476289D01* +X0265218Y0475739D02* +Y0477955D01* +X0302939Y0476836D02* +X0304091Y0477989D01* +X0311891D02* +X0312844Y0477036D01* +X0163791Y0558315D02* +X0165591Y0560115D01* +X0282939Y0413518D02* +X0287891Y0408565D01* +Y0406065D02* +Y0408565D01* +Y0413093D02* +X0292844Y040814D01* +X0297891Y0417165D02* +X0302891Y0412165D01* +Y0404061D02* +Y0412165D01* +X0297891Y0418069D02* +X0302891Y0423069D01* +X0297891Y0417165D02* +Y0418069D01* +X0302939Y0454612D02* +Y0476836D01* +X0297891Y0449565D02* +X0302939Y0454612D01* +X0297891Y0447188D02* +Y0449565D01* +X0296351Y0477989D02* +X0297891Y0476449D01* +Y0468265D02* +Y0476449D01* +X0282939Y046375D02* +X0287891Y0468703D01* +X0282939Y0442118D02* +Y046375D01* +X0292844Y0466171D02* +Y0472113D01* +X0287891Y0461218D02* +X0292844Y0466171D01* +X0287891Y044417D02* +Y0461218D01* +X0282939Y0432213D02* +X0287891Y0437165D01* +X0282939Y0413518D02* +Y0432213D01* +X0287891Y0413093D02* +Y0430116D01* +X0292844Y0404014D02* +Y040814D01* +X0286191Y0397361D02* +X0292844Y0404014D01* +X0286191Y0387765D02* +Y0397361D01* +X0307861Y04442D02* +X0309844Y0442217D01* +X0307891Y0430161D02* +X0309844Y0432114D01* +Y0442118D02* +Y0442217D01* +Y0442118D02* +X0309943D01* +X0312844Y0439217* +Y0435114D02* +Y0439217D01* +X0309943Y0432213D02* +X0312844Y0435114D01* +X0309844Y0432213D02* +X0309943D01* +X0309844Y0432114D02* +Y0432213D01* +G54D63* +X0359109Y0469329D02* +X0361991Y0472211D01* +X017016Y0328265D02* +X0174626D01* +X0185773Y0379447D02* +Y0389086D01* +X0184162Y0371591D02* +X0185773Y036998D01* +Y0366645D02* +Y036998D01* +X0272991Y0485465D02* +X0277491Y0489965D01* +X0180117Y0373791D02* +X0185773Y0379447D01* +X0163189Y0335236D02* +X017016Y0328265D01* +X0160989Y0325783D02* +X0166287Y0320484D01* +X0218135Y0325869D02* +X0219491Y0327225D01* +X0218135Y0318824D02* +Y0325869D01* +X0215357Y0316047D02* +X0218135Y0318824D01* +X0215357Y0313091D02* +Y0316047D01* +X0172216Y0373791D02* +X0180117D01* +X0160989Y0362564D02* +X0172216Y0373791D01* +X0160989Y0325783D02* +Y0362564D01* +X0163189Y0361652D02* +X0173128Y0371591D01* +X0163189Y0335236D02* +Y0361652D01* +X0173128Y0371591D02* +X0184162D01* +X0166287Y0320484D02* +X0181902D01* +X0184683Y0323265* +X019313* +X0297491Y0491237D02* +X030403Y0484699D01* +X0265279Y0484665D02* +X0272491Y0491878D01* +X0297491Y0491237D02* +Y0494028D01* +X0272991Y0484761D02* +Y0485465D01* +X0287491Y0485861D02* +X0288591Y0484761D01* +X0287491Y0485861D02* +Y0494028D01* +X0282491Y0486461D02* +Y0494028D01* +X0280791Y0484761D02* +X0282491Y0486461D01* +X0302491Y0494517D02* +X0312069Y0484939D01* +X0277491Y0489965D02* +Y0494028D01* +X0272491Y0491878D02* +Y0494028D01* +X0296351Y0484761D02* +Y0485806D01* +X0292491Y0489665D02* +Y0494028D01* +Y0489665D02* +X0296351Y0485806D01* +X0589567Y0472801D02* +X0594685Y0467683D01* +Y0462304D02* +Y0467683D01* +Y0462304D02* +X0596555Y0460434D01* +X0589567Y0472801D02* +Y0474312D01* +G54D64* +X0356056Y046294D02* +X0359509D01* +X0354724Y0464272D02* +X0356056Y046294D01* +X0591142Y0438494D02* +Y0441338D01* +X0606041Y0428014D02* +X0609763D01* +X0604331Y0429724D02* +X0606041Y0428014D01* +X0604331Y0429724D02* +Y0431989D01* +X0609763Y0428014D02* +X0610082Y0427695D01* +X0613503* +X0617796Y0431989* +X0618209* +X0613503Y0460471D02* +X0617796Y0464764D01* +X0604331Y0439371D02* +X0604724Y0439764D01* +X0594882Y0429331D02* +X0596555Y0427658D01* +X0594882Y0429331D02* +Y0434754D01* +X0591142Y0438494D02* +X0594882Y0434754D01* +X0604331Y0462401D02* +Y0464764D01* +X0609763Y046079D02* +X0610082Y0460471D01* +X0613503* +X0604331Y0462401D02* +X0605942Y046079D01* +X0609763* +G54D65* +X033922Y046294D02* +X0342973D01* +X0336045Y0459765D02* +X033922Y046294D01* +X0333991Y0459765D02* +X0336045D01* +X0268687Y052116D02* +X0272891Y0516955D01* +X0283343Y0524056D02* +X0285797D01* +X0281543Y0525856D02* +X0283343Y0524056D01* +X0280725Y0525856D02* +X0281543D01* +X0282597Y0522256D02* +X0285052D01* +X0280797Y0524056D02* +X0282597Y0522256D01* +X0279741Y0524056D02* +X0280797D01* +X0280052Y0522256D02* +X0281852Y0520456D01* +X027876Y0522256D02* +X0280052D01* +X0279306Y0520456D02* +X0281106Y0518656D01* +X0277801Y0520456D02* +X0279306D01* +X0276802Y0518656D02* +X027856D01* +X0282891Y0514325* +X028356Y0518656D02* +X0287891Y0514325D01* +X0281852Y0520456D02* +X0284306D01* +X0281106Y0518656D02* +X028356D01* +X0287597Y0522256D02* +X0290052D01* +X0285797Y0524056D02* +X0287597Y0522256D01* +X0285052D02* +X0286852Y0520456D01* +X0284306D02* +X0286106Y0518656D01* +X0286852Y0520456D02* +X0289306D01* +X0286106Y0518656D02* +X028856D01* +X0291106D02* +X029356D01* +X028856D02* +X0292891Y0514325D01* +X0291852Y0520456D02* +X0294501D01* +X0290052Y0522256D02* +X0291852Y0520456D01* +X0289306D02* +X0291106Y0518656D01* +X029356D02* +X0297891Y0514325D01* +X0292891Y0512925D02* +Y0514325D01* +X0271994Y0520668D02* +X0277891Y051477D01* +X029856Y0518656D02* +X0302891Y0514325D01* +X0296301Y0518656D02* +X029856D01* +X0294501Y0520456D02* +X0296301Y0518656D01* +X0302861Y0538365D02* +X0304577D01* +X0304677Y0538265* +X0302761D02* +X0302861Y0538365D01* +X0290587Y0538265D02* +X0302761D01* +X0250888Y0572362D02* +X0251916Y0571393D01* +X0245784Y0571758D02* +X0245855Y0571687D01* +X0239244Y0533565D02* +X0239848D01* +X0238204Y0535353D02* +X0238348Y0535498D01* +X0239591Y0512306D02* +Y0527741D01* +X0243653Y0531803* +X0241391Y0510426D02* +Y0526757D01* +X0245045Y0530411* +X0243172Y0563409D02* +X0243553Y0563027D01* +X0242616Y0563965D02* +X0243172Y0563409D01* +X0239692Y0563965D02* +X0242616D01* +X0241543Y0563409D02* +X0243172D01* +X0240895Y0562761D02* +X0241543Y0563409D01* +X028375Y0529624D02* +X028525Y0531124D01* +X0282524Y0529624D02* +X028375D01* +X028625* +X0281723Y0530426D02* +X0282524Y0529624D01* +X0282679Y0527665D02* +X0290691D01* +X0281691D02* +X0282679D01* +X0284488Y0525856D02* +X0289942D01* +X0282679Y0527665D02* +X0284488Y0525856D01* +X0276171Y0524845D02* +X027876Y0522256D01* +X0273457Y0522001D02* +X0276802Y0518656D01* +X0274906Y0523351D02* +X0277801Y0520456D01* +X0277561Y0526235D02* +X0279741Y0524056D01* +X0278953Y0527627D02* +X0280725Y0525856D01* +X0280391Y0528965D02* +X0281691Y0527665D01* +X0254191Y0574661D02* +Y0575265D01* +Y0574661D02* +X0254814Y0574038D01* +X0249424Y0523654D02* +X0250613Y0524844D01* +X0254208Y0520086D02* +X0254789Y0520668D01* +X0254208Y0520086D02* +D01* +X0247424Y0524438D02* +X0249221Y0526235D01* +X0244591Y0527173D02* +X0246437Y0529019D01* +X0241391Y0510126D02* +X024249Y0509027D01* +X0241891Y0508428D02* +X024249Y0509027D01* +X0241891Y0506165D02* +Y0508428D01* +X0240535Y050481D02* +X0241891Y0506165D01* +X0240535Y0502665D02* +Y050481D01* +X0237561Y0509975D02* +X0239591Y0512006D01* +X0237561Y049924D02* +Y0509975D01* +Y049924D02* +X0240535Y0496265D01* +X0239848Y0533565D02* +X0240869Y0534587D01* +X0238348Y0535498D02* +X0239005D01* +X023937Y0535863* +X0240511Y0531445D02* +X0242262Y0533195D01* +X0237504Y0557941D02* +X0238086Y055736D01* +X0237504Y0557941D02* +D01* +X0238896Y0559333D02* +X0239478Y0558752D01* +X0238896Y0559333D02* +Y0559377D01* +X0252816Y0573252D02* +X0253397Y0572671D01* +X0252816Y0573252D02* +D01* +X0248053Y0558527D02* +X0248691Y055789D01* +X0278291Y0558089D02* +X0278729Y0558527D01* +X0278191Y0552565D02* +Y055799D01* +X0242249Y0567116D02* +X0245045Y0564319D01* +X0242249Y0567116D02* +Y0567965D01* +X0256405Y0566879D02* +X0258219Y0565065D01* +X0257841Y0526515D02* +X0258391Y0527065D01* +X0276491Y0535657D02* +X0277337Y0534811D01* +X0240535Y0491769D02* +Y0496265D01* +Y0491769D02* +X024249Y0489814D01* +X0242486Y0541771D02* +X0243886Y0543171D01* +X0246661Y0537595D02* +X0247291Y0538225D01* +X0273291Y0561441D02* +X0274553Y0562703D01* +X0275291Y0560657D02* +X0275945Y0561311D01* +X0272491Y0574561D02* +Y0576265D01* +X0271994Y0574063D02* +X0273491Y0575561D01* +X0267091Y0569161D02* +X0267594Y0569663D01* +X0267091Y0561765D02* +Y0569161D01* +X0265091Y0569944D02* +X0266202Y0571055D01* +X0257847Y0568221D02* +X0260891Y0565177D01* +X0258219Y0563393D02* +Y0565065D01* +X0277561Y0568495D02* +X0280532Y0571465D01* +X0278929Y0567079D02* +X0281216Y0569365D01* +X0285791* +X0280983Y0567665D02* +X0281683Y0566965D01* +X0285391* +X0251424Y052287D02* +X0252005Y0523452D01* +X0245424Y0525222D02* +X0247829Y0527627D01* +X0233991Y0538844D02* +X0235308Y0540161D01* +X0288697Y0537371D02* +X0289603Y0536465D01* +X0303648* +X0290089Y0538763D02* +X0290587Y0538265D01* +X0290089Y0555968D02* +X0290687Y0556565D01* +X0288741Y0557415D02* +X0290091Y0558765D01* +X0285913Y0560144D02* +X0286635Y0560865D01* +X0284521Y0561536D02* +X0285851Y0562865D01* +X0281737Y0564319D02* +X0282283Y0564865D01* +X0283925* +X0273386Y0572671D02* +X028058Y0579865D01* +X0276169Y0569887D02* +X0281948Y0575665D01* +X0274778Y0571279D02* +X0281364Y0577865D01* +X0297891Y0512925D02* +Y0514325D01* +X0287891Y0512925D02* +Y0514325D01* +X0282891Y0512925D02* +Y0514325D01* +X0277891Y0512925D02* +Y051477D01* +X0272891Y0512925D02* +Y0516955D01* +X0241062Y0543132D02* +X0242391Y0544461D01* +X0167252Y0477268D02* +X0175222D01* +X0302891Y0512925D02* +Y0514325D01* +G54D66* +X0196591Y0371565D02* +Y0382265D01* +X0227587Y0335405D02* +X0237441D01* +X023431Y0337106D02* +Y0354847D01* +X022575Y0386461D02* +Y041437D01* +X0201476Y051565D02* +X0206398D01* +X022575Y0457025D02* +Y046787D01* +Y0439961D02* +Y0457025D01* +X0226567Y036259D02* +X023431Y0354847D01* +X0216191Y0353365D02* +X022575Y0362924D01* +Y0386461* +Y041437D02* +X0225752Y0414372D01* +Y0439958* +X0196629Y0339862D02* +Y0353365D01* +X0196591D02* +Y0371565D01* +Y0353365D02* +X0216191D01* +G54D67* +X0227887Y0334005D02* +X0230308Y0331584D01* +X0231988Y033067D02* +X0236324Y0335005D01* +X0229975Y0298228D02* +X0235138D01* +G54D68* +X0279615Y0567665D02* +X0281083D01* +G54D69* +X028605Y0530524D02* +X0288691Y0533165D01* +X0291335* +G54D70* +X0237961Y0327825D02* +X0244071Y0333935D01* +X0219295Y0333767D02* +X0224394Y0328667D01* +G54D71* +X0169957Y0323265D02* +X0175807D01* +G54D72* +X0267491Y0506565D02* +Y0518213D01* +X0356291Y0396025D02* +X0362958D01* +X0415059Y0422199D02* +X041654Y042368D01* +X0415059Y0413176D02* +Y0422199D01* +X0425187Y0403047D02* +X04409D01* +X0415059Y0413176D02* +X0425187Y0403047D01* +G54D73* +X0189203Y0359461D02* +X0196407D01* +G54D74* +X0231544Y0324449D02* +Y033167D01* +G54D75* +X0620964Y0501492D02* +X0644488D01* +Y0591338D02* +X0648622Y0595472D01* +X0644488Y0575173D02* +Y0591338D01* +X04079Y0363489D02* +Y0429366D01* +X0412392Y0433858* +X0481496Y0434191D02* +Y0453248D01* +X0442126Y043822D02* +Y0450406D01* +X0405673Y0361262D02* +X04079Y0363489D01* +X0437764Y0433858D02* +X0442126Y043822D01* +X0412392Y0433858D02* +X0437764D01* +X0469156Y042185D02* +X0481496Y0434191D01* +X0460335Y042185D02* +X0469156D01* +X0587134Y0561571D02* +X0630886D01* +X0644488Y0575173* +X0573622Y0575083D02* +X0587134Y0561571D01* +X055727Y041998D02* +Y051437D01* +G54D76* +X0598425Y0595472D02* +X0626968D01* +X0597244Y0575083D02* +Y0594291D01* +X0598425Y0595472* +X0626968Y0581374D02* +Y0595472D01* +X0620866Y0575272D02* +X0626968Y0581374D01* +X0597244Y0575083D02* +X0620677D01* +X0620866Y0575272* +G54D77* +X047476Y041437D02* +X0498286D01* +X0473515Y0413125D02* +X047476Y041437D01* +X0456595Y0413125D02* +X0473515D01* +G54D78* +X0656773Y0309566D02* +X0679134Y0331926D01* +Y0409326* +X0671506Y0406619D02* +X0677657Y0400467D01* +G54D79* +X0626279Y0395177D02* +Y0417618D01* +Y0395177D02* +X0626713Y0394744D01* +G54D80* +X0677165Y0544898D02* +Y0562917D01* +Y0483933D02* +Y0505693D01* +Y0506086* +X0664264Y0518594D02* +X0677165Y0505693D01* +X0551862Y0510342D02* +X0560114Y0518594D01* +X0664264* +G54D81* +X04535Y0322094D02* +X0457185D01* +X0489815D02* +X04935D01* +G54D82* +X0611713Y0585138D03* +G54D83* +X0653543Y0340059D03* +G54D84* +X0526476Y0392244D03* +G54D85* +X0440024Y0410465D03* +G54D86* +X045719Y040748D03* +G54D87* +X0503498Y0562063D03* +Y0572063D03* +Y0552063D03* +Y0542063D03* +X0421798Y0542463D03* +Y0552463D03* +Y0572463D03* +Y0562463D03* +X0210191Y0577165D03* +X0220191D03* +X0230191D03* +X0240191D03* +X0356891Y0376565D03* +X0366891Y0366565D03* +X0356891D03* +X0366891Y0356565D03* +X0356891D03* +X0366891Y0346565D03* +X0356891D03* +X0366891Y0336565D03* +X0356891D03* +X0307891Y0468265D03* +X0297891D03* +X0287891D03* +X0277891D03* +X0267891D03* +X0307891Y0448265D03* +X0297891D03* +X0287891D03* +X0277891D03* +X0267891D03* +Y0417165D03* +X0277891D03* +X0287891D03* +X0297891D03* +X0307891D03* +X0267891Y0437165D03* +X0277891D03* +X0287891D03* +X0297891D03* +X0307891D03* +Y0406065D03* +X0297891D03* +X0287891D03* +X0277891D03* +X0267891D03* +X0307891Y0386065D03* +X0297891D03* +X0287891D03* +X0277891D03* +X0267891D03* +X0559272Y0294744D03* +Y0284744D03* +X0549272Y0294744D03* +Y0284744D03* +X0539272Y0294744D03* +Y0284744D03* +X0529272Y0294744D03* +Y0284744D03* +X0519272Y0294744D03* +G54D88* +X0503498Y0532063D03* +X0421798Y0532463D03* +X0517851Y0461417D03* +G54D89* +X0145276Y0430315D03* +X0136614Y0433465D03* +X0145276Y0424016D03* +X0136614Y0420866D03* +Y0427165D03* +G54D90* +X0140945Y0410827D03* +Y0443504D03* +G54D91* +X0194291Y0302665D03* +Y0551665D03* +G54D92* +X0369291Y0427165D03* +G54D93* +X0187197Y049969D03* +G54D94* +X0169102Y0517785D03* +G54D95* +X0200191Y0577165D03* +X0519272Y0284744D03* +G54D96* +X0253465Y0287098D03* +X0275118D03* +Y0303633D03* +X0253465D03* +X0626968Y0595472D03* +X0648622D03* +X0405673Y0344727D03* +X0427327D03* +Y0361262D03* +X0405673D03* +X0598425Y0595472D03* +X0576772D03* +G54D97* +X0366891Y0376565D03* +G54D98* +X0208033Y046787D03* +X022575D03* +Y0493461D03* +X0208033D03* +Y041437D03* +X022575D03* +Y0439961D03* +X0208033D03* +Y036087D03* +X022575D03* +Y0386461D03* +X0208033D03* +G54D99* +X024249Y0489814D03* +Y0509027D03* +G54D100* +X0560335Y0392027D03* +X042276Y0387435D03* +X0538287Y0358268D03* +X0479331Y0349803D03* +G54D101* +X054065Y0392027D03* +X0518602Y0358268D03* +X0499016Y0349803D03* +G54D102* +X0606063Y0285138D03* +G54D103* +X0596063Y0285138D03* +X0586063D03* +X0486Y0297094D03* +X0481Y0287094D03* +X0476Y0297094D03* +X0471Y0287094D03* +X0466Y0297094D03* +X0461Y0287094D03* +G54D104* +X0549902Y0508382D03* +X0597244Y0575083D03* +X0573622D03* +X0644488Y0501D03* +X0620866Y0501098D03* +G54D105* +X0549902Y0582555D03* +X0597244Y0500909D03* +X0573622D03* +X0644488Y0575173D03* +X0620866Y0575272D03* +G54D106* +X0517851Y0469291D03* +G54D107* +X0411417Y0287402D03* +Y0470472D03* +X0675197Y059252D03* +Y0287402D03* +G54D108* +X040884Y0401354D03* +G54D109* +X0677165Y0507146D03* +Y0480531D03* +Y0565728D03* +Y0539114D03* +G54D110* +X0625591Y0281496D03* +Y030315D03* +X0642126D03* +Y0281496D03* +G54D111* +X04935Y0322094D03* +X04535D03* +G54D112* +X0446162Y0557972D03* +X0445768Y0550984D03* +X0507087Y051122D03* +X0495866Y0538878D03* +X0515158Y0532382D03* +X048879Y0504572D03* +X0509142Y0504463D03* +X0422441Y0523327D03* +X0445177Y0565945D03* +X0432098Y0573763D03* +X0441898Y0582063D03* +X0421798Y0581863D03* +X0412298Y0567163D03* +X0412402Y0546358D03* +X0513583Y0557382D03* +X0513398Y0567363D03* +X0500689Y0582874D03* +X048688Y0562361D03* +X0480807Y0535138D03* +X0434941Y0561713D03* +X0459252Y0566831D03* +X0436417Y0504429D03* +X0459842D03* +X0443996Y052313D03* +X0470768Y0529232D03* +X0418198Y0513763D03* +X0471358Y0576279D03* +X0448228Y0504429D03* +X0413998Y0505563D03* +X046063Y0582972D03* +X0480709Y0548327D03* +X0484842Y0582972D03* +X0471358Y0563681D03* +X0496555Y0549311D03* +X046122Y052313D03* +X0479134Y0504528D03* +X0461122Y0554528D03* +X0453051Y0529626D03* +X0428151Y0543578D03* +X0435335Y0541142D03* +X0506988Y0518504D03* +X0310291Y0392465D03* +X0300891Y0391665D03* +X026624Y032874D03* +X0348425Y050935D03* +X0361991Y0474665D03* +X0364567Y0468898D03* +X0331371Y0432677D03* +X0333991Y0459765D03* +X0332591Y0467765D03* +X023189Y0409154D03* +X0131004Y0418012D03* +X0150984Y0404035D03* +X0171391Y0402865D03* +X0173891Y0569265D03* +X0342091Y0352765D03* +Y0358665D03* +X0377461Y0328543D03* +X0361891Y0360565D03* +Y0352565D03* +X0313791Y0358265D03* +X0200791Y0400365D03* +X0197191Y0395665D03* +X0344091Y0488065D03* +X0320191Y0517065D03* +X0327891Y0513665D03* +X0339391Y0439965D03* +X0269191Y0310065D03* +X0158366Y0286122D03* +X015876Y0309055D03* +X0161713Y0387795D03* +X0189991Y0376965D03* +X0181591Y0381065D03* +X0179091Y0364765D03* +X0181557Y0330465D03* +X0189191Y0395765D03* +X0322391Y0554565D03* +X0319891Y0504165D03* +X0293091Y0544165D03* +X0269291Y0562465D03* +X0274191Y0555965D03* +X0315491Y0305565D03* +X0324291Y0309265D03* +X0343891Y0302165D03* +X0322491Y0300965D03* +X0322891Y0317765D03* +X0291891Y0325465D03* +X0332591Y0281465D03* +X0323591Y0291765D03* +X0339491Y0286165D03* +X0343891Y0296265D03* +X0320991Y0330265D03* +X0315591Y0337065D03* +X0368012Y0292028D03* +X032668Y0538846D03* +X0202091Y0487565D03* +X0239862Y0357874D03* +X0215491Y0420865D03* +X0166091Y0452565D03* +X0184191Y0452265D03* +X0169407Y0472665D03* +X0219691Y0485465D03* +X0231491Y0503365D03* +X0208691Y0503065D03* +X0201083Y0447835D03* +X0206004Y0432087D03* +X0131004Y0436417D03* +X0166634Y0434055D03* +X0155807Y0437992D03* +X0165591Y0414265D03* +Y0419665D03* +X0153391Y0423965D03* +X0257283Y043061D03* +X0240091Y0421265D03* +X0250491Y0436265D03* +X0246491Y0398665D03* +X0259055Y0394291D03* +X0252591Y0394465D03* +X0257491Y0379465D03* +X0265191Y0377165D03* +X0258661Y033937D03* +X0265091Y0276065D03* +X0269591Y0296665D03* +X0279921Y0322638D03* +X0274705Y0338091D03* +X0268591Y0396565D03* +X0290891Y0391665D03* +X0264191Y0286565D03* +X0252953Y0322638D03* +X0286591Y0284765D03* +X0263391Y0574065D03* +X0232579Y0380906D03* +X0227648Y0344935D03* +X0341339Y0524902D03* +X0212191Y0477965D03* +X0268791Y0503465D03* +X0272791Y0462965D03* +X0258591Y0363365D03* +X0157382Y0497638D03* +X0182091Y0527965D03* +X0201476Y051565D03* +X0300991Y0567465D03* +X0257091Y0466065D03* +X0157776Y0520472D03* +X0195191Y0529865D03* +X0210091Y0562965D03* +X0235991Y0483765D03* +X0170591Y0548165D03* +X0169891Y0530065D03* +X0165791Y0579665D03* +X0156988Y0569291D03* +X0158071Y0543799D03* +X0184191Y0568065D03* +X0156891Y0474265D03* +X0156595Y0349311D03* +Y0329035D03* +X0158366Y0370866D03* +X0180591Y0315965D03* +X0214091Y0381065D03* +X0335728Y0501673D03* +X0373524Y0568209D03* +X0187205Y0284252D03* +X0176476Y0386811D03* +X0377658Y0374902D03* +X0203591Y0367165D03* +X0193799Y0515945D03* +X0272891Y0431865D03* +X023189Y0397933D03* +X0377591Y0411665D03* +X0254791Y0456365D03* +X0349891Y0407465D03* +X0281591Y0391365D03* +X0346891Y0478665D03* +X0181678Y0338365D03* +X0206004Y0423228D03* +X0203391Y0379765D03* +X0224791Y0554665D03* +X0215665Y0524213D03* +X0171544Y0500787D03* +X0167126Y0494095D03* +X0198691Y0499965D03* +X0190891Y0491065D03* +X0215391Y0433565D03* +X0236891Y0465565D03* +X0232191Y0451465D03* +X0246555Y0451575D03* +X0272991Y0579565D03* +X0312991Y0571665D03* +X0242249Y0567965D03* +X0252391Y0473665D03* +X0250791Y0504865D03* +X0263491Y0519565D03* +X0235591Y0514365D03* +X0189191Y0477065D03* +X0199391Y0470365D03* +X0265391Y0540465D03* +X0261591Y0554765D03* +X0279191Y0552565D03* +X0254091Y0536065D03* +X0256691Y0547665D03* +X0248891Y0550365D03* +X0242391Y0547365D03* +X0272191Y0537965D03* +X0263791Y0530765D03* +X0208465Y0535138D03* +X0175491Y0534665D03* +X0180391Y0539065D03* +X0220891Y0563065D03* +X0182991Y0575565D03* +X0191691Y0577165D03* +X0273091Y0546565D03* +X0239401Y0293265D03* +X0213878Y0345571D03* +X0212303Y0308071D03* +X0223091Y0274665D03* +X0198891Y0277065D03* +X0228791Y0284465D03* +X0249691Y0279665D03* +X0287402Y0365748D03* +X0267618Y0353937D03* +X0248819Y035315D03* +X021437Y0390846D03* +X0202891Y0407065D03* +X0251969Y0443405D03* +X0249691Y0423965D03* +X0254091Y0419065D03* +X0373228Y0532972D03* +X0327991Y0519565D03* +X0302191Y0307765D03* +X0302691Y0285465D03* +X0337598Y0321161D03* +X0341691Y0364865D03* +X0302191Y0301365D03* +X0232291Y0432365D03* +X0219691Y0365365D03* +X0232291Y0471365D03* +X0221591Y0536565D03* +X0229491Y0538365D03* +X0222891Y0514065D03* +X0225491Y0519665D03* +X0343602Y0469882D03* +X0348291Y0386665D03* +X0335096Y0507561D03* +X0256891Y0562065D03* +X0252491Y0555065D03* +X0227791Y0570865D03* +X0297391Y0368665D03* +X028563Y0349508D03* +X0369882Y0282382D03* +X0181102Y0351772D03* +X0317591Y0291765D03* +X0301891Y0520865D03* +Y0532565D03* +X0320191Y0527365D03* +X0347091Y0312265D03* +X0343491Y0320065D03* +X0322591Y0341565D03* +X0327191Y0347965D03* +X0318691Y0386665D03* +X0303291Y0368365D03* +X0302091Y0325765D03* +X0333491Y0373565D03* +X0341437Y0342618D03* +X0315091Y0544865D03* +X0318791Y0566865D03* +X0377591Y0443265D03* +X0332677Y0445768D03* +X0351083Y0459154D03* +X0347491Y0580165D03* +X0332891Y0572665D03* +X0356191Y0557465D03* +X0360891Y0544839D03* +X0377791Y0545865D03* +X0344291Y0540565D03* +X0369391Y0404565D03* +X0364469Y0535532D03* +X0364591Y0523965D03* +X0331891Y0454165D03* +X0340591Y0404565D03* +X0325391Y0398965D03* +X0340591Y0399209D03* +X0334691Y0407765D03* +X0327391Y0373465D03* +X0309991Y0373265D03* +X0346291Y0393265D03* +X0331391Y0413065D03* +X0369091Y0452765D03* +X0356201Y0525295D03* +X0333491Y0544265D03* +X0276772Y0364075D03* +X0353642Y0331004D03* +X0355691Y0397465D03* +X0199803Y0320472D03* +X0234485Y0318894D03* +X0222244Y0321555D03* +X0243699Y0320861D03* +X0211024Y0327559D03* +X0212795Y0293898D03* +X0165847Y0326772D03* +X0172933Y0364961D03* +X0186127Y0334442D03* +X0167618Y0351476D03* +X0370472Y0383169D03* +X0233071Y0368602D03* +X0354433Y0519591D03* +X0364567Y0491732D03* +X0282087Y0310236D03* +X0230472Y0558178D03* +X0364075Y0315551D03* +X0364567Y0309449D03* +X0365256Y03D03* +X0352559Y0285138D03* +X0345391Y0285465D03* +X0533071Y0434252D03* +X0452953Y0442126D03* +X0454035Y0462992D03* +X0536614Y0504429D03* +X0656496Y0604331D03* +X0637795D03* +X0683071Y0524606D03* +X0567913Y0474409D03* +X0625Y0487205D03* +X058563Y0488189D03* +X0564173Y0565748D03* +X0566535Y0598032D03* +X0584842Y0587008D03* +X0590551Y0605512D03* +X0574803D03* +X0559055Y0590551D03* +X0543307D03* +X0551181Y0598425D03* +X0559055Y0605512D03* +X0543307D03* +X053622Y0598425D03* +Y0582677D03* +Y0566929D03* +Y0519685D03* +Y0535433D03* +Y0551181D03* +X0543307Y0527559D03* +X0551181Y0535433D03* +X0543307Y0543307D03* +X0551181Y0551181D03* +X0543307Y0559055D03* +Y0574803D03* +X0559055D03* +X0551181Y0566929D03* +X0559055Y0559055D03* +X0574803D03* +X0566929Y0551181D03* +Y0535433D03* +X0582677Y0551181D03* +Y0535433D03* +X0598425Y0551181D03* +Y0535433D03* +X0559055Y0543307D03* +X0574803D03* +X0590551D03* +X0606299D03* +X0661417Y0566929D03* +Y0551181D03* +X0653543Y0543307D03* +Y0559055D03* +X0645669Y0551181D03* +Y0535433D03* +X0637795Y0543307D03* +X0629921Y0551181D03* +Y0535433D03* +X0622047Y0543307D03* +X0614173Y0535433D03* +Y0551181D03* +X0457283Y0378543D03* +X0479626Y0382283D03* +X0547244Y0305315D03* +X0539764Y0320276D03* +X0531102Y0324311D03* +X0557874Y0378838D03* +X054872Y0425098D03* +X0509842Y0338287D03* +X0528543Y0349016D03* +X054855Y0359269D03* +X0551083Y0353445D03* +X0562303Y0378838D03* +X0559842Y0402362D03* +X0577461Y0357874D03* +X0575098Y0386516D03* +X0540158Y0343307D03* +X0544291Y0280413D03* +X0555118Y0289665D03* +X0524311Y0290551D03* +X053435Y0289665D03* +X0525886Y0300886D03* +X0535138Y0305315D03* +X054124Y0304429D03* +X0576575Y028061D03* +X0615748Y0320079D03* +X0618996Y0325098D03* +X0584646Y0330709D03* +X0581693Y0325787D03* +X0584646Y0320866D03* +X0587598Y0325787D03* +X0607283Y0408957D03* +X052185Y048376D03* +X058061Y0415256D03* +X0590551Y0320866D03* +X0596457D03* +X0599409Y0325787D03* +X050689Y0299213D03* +X0599409Y0355315D03* +X0605315D03* +X061122D03* +X0523228Y0275787D03* +X0608464Y0395079D03* +X0565945Y0488189D03* +X0431791Y0376772D03* +X0399606Y0450787D03* +X0413386Y0442913D03* +X0433071Y0482283D03* +X0489961Y0482185D03* +X0452756Y0482283D03* +X0472441D03* +X0430315Y0274902D03* +X0607382Y0275787D03* +X0600394Y0291929D03* +X0576772Y0289862D03* +X0588583Y0308071D03* +X0593504Y0325787D03* +X0559252Y0364173D03* +X0525787Y0358957D03* +X0516732Y0350295D03* +X0520768Y0340453D03* +X0685532Y0468405D03* +X0606398Y0487205D03* +X0524016Y0323721D03* +X0495374Y0298524D03* +X0490748Y0287894D03* +X0504528Y0288484D03* +X0508071Y0312795D03* +X0517913Y0302559D03* +X0574016Y0342323D03* +X0558957Y0311516D03* +X0565846Y0443504D03* +X0566142Y0417717D03* +X0575422Y0435553D03* +X0567913Y0458661D03* +X0590551Y0330709D03* +X0587598Y0355315D03* +X0648622Y0412401D03* +Y0442913D03* +X0626378Y0457678D03* +X0685039Y0452756D03* +X0661417D03* +X0667323D03* +X0673228D03* +X0679134D03* +X0641732Y0393701D03* +X0665354D03* +X0659449D03* +X0653543D03* +X0647638D03* +X0641732Y0366142D03* +X0647638D03* +X0653543D03* +X0659449D03* +X0665354D03* +X0685039Y0425197D03* +X0679134D03* +X0673228D03* +X0667323D03* +X0661417D03* +X0442Y0379095D03* +X0480217Y0396752D03* +X0476378Y0400787D03* +X043248Y044498D03* +X0423228Y0452756D03* +X0439272Y0422933D03* +X0506398Y0353051D03* +X054872Y0456594D03* +X0511417Y0458169D03* +X0526968Y0460335D03* +X0490256Y0275098D03* +X0430512Y0336417D03* +X0452461Y0274902D03* +X04384Y0299095D03* +X0401575Y0312992D03* +X0418602Y031811D03* +X0404Y0331494D03* +X0398524Y0377657D03* +X03986Y0398294D03* +Y0418894D03* +X0482283Y0472441D03* +X0462598D03* +X0442913D03* +X0433071Y0462598D03* +X0472441D03* +X0462598Y0452756D03* +X0472441Y0442913D03* +X0464567Y0431102D03* +X0493209Y0453051D03* +X0484449Y0420669D03* +X0490059Y0436122D03* +X0499016Y0334744D03* +X04787Y0334295D03* +X04515Y0333794D03* +X0433071Y0393701D03* +X0449022Y041618D03* +X04806Y0323195D03* +X0453051Y029065D03* +X0467815Y0317027D03* +X0417323Y036998D03* +X044872Y0431693D03* +X0401575Y0435039D03* +X04327Y0414854D03* +X0422342Y0413484D03* +X0526772Y0450394D03* +X0447703Y0396465D03* +X0454303D03* +X0460803D03* +X0449022Y040948D03* +X04178Y0402394D03* +X0488091Y0344488D03* +X0474213Y035935D03* +X0625984Y0330709D03* +X0620079D03* +X0614173D03* +X0608268D03* +X0602362D03* +X0596457D03* +X0593504Y0355315D03* +X0626968Y0379921D03* +X0628937Y0354331D03* +X0575Y0447835D03* +X0592224Y0393701D03* +X0582874Y0386024D03* +X0610236Y0379921D03* +X0577362Y0372342D03* +X0561909Y034124D03* +X0578839Y045935D03* +X0583858Y0454134D03* +X0619587Y0447638D03* +X058376Y0422047D03* +X0634449Y0380807D03* +X0613091Y0325197D03* +X0611024Y0440256D03* +X0611417Y0473032D03* +X058563Y0503937D03* +X0449122Y040268D03* +X0669291Y0468504D03* +Y046063D03* +X0677165Y0468504D03* +Y046063D03* +X0685039D03* +X0484154Y0400492D03* +X0492126Y0400591D03* +X0488287Y0396654D03* +X0456693Y0431693D03* +X0432185Y0407874D03* +X0481988Y0369094D03* +X0492126Y0369291D03* +X0537795Y0473622D03* +X0534941Y0489665D03* +X0548032Y0489862D03* +X0499213Y0470177D03* +X0492618Y0426181D03* +X0626279Y0416831D03* +X0626378Y0425D03* +X0598917Y040876D03* +X0471654Y0375689D03* +X063061Y0395177D03* +M02* \ No newline at end of file diff --git a/hardware/gerber/unisolder52_full.gto b/hardware/gerber/unisolder52_full.gto new file mode 100644 index 0000000..0e0533d --- /dev/null +++ b/hardware/gerber/unisolder52_full.gto @@ -0,0 +1,14390 @@ +%FSTAX25Y25*% +%MOIN*% +%SFA1B1*% + +%IPPOS*% +%ADD58C,0.012000*% +%ADD65C,0.010000*% +%ADD115C,0.009840*% +%ADD116C,0.023620*% +%ADD117C,0.008000*% +%ADD118C,0.007870*% +%ADD119C,0.005910*% +%ADD120C,0.005910*% +%ADD121R,0.220470X0.031500*% +%LNunisolder52_full-1*% +%LPD*% +G36* +X032509Y0417278D02* +Y0418328D01* +X0326465Y041804* +Y041699* +X0327177Y041684* +X032719* +X0327215Y0416828* +X0327265Y0416815* +X0327327Y0416803* +X0327477Y0416778* +X0327665Y0416728* +X0327852Y0416678* +X0328052Y0416615* +X0328227Y0416553* +X0328302Y0416515* +X0328365Y041649* +X032839Y0416478* +X032844Y0416453* +X0328515Y041639* +X0328615Y0416328* +X0328715Y0416228* +X0328827Y0416115* +X032894Y0415978* +X032904Y0415828* +X0329052Y0415803* +X0329077Y0415753* +X0329115Y0415653* +X0329165Y0415515* +X0329215Y0415353* +X0329252Y0415153* +X0329277Y0414928* +X032929Y0414678* +Y0414665* +Y041464* +Y041459* +Y0414528* +X0329277Y0414453* +Y0414353* +X0329265Y041424* +X0329252Y0414128* +X0329215Y0413853* +X0329152Y041354* +X0329077Y0413203* +X0328977Y0412853* +X032764Y0413215* +Y0413228* +X0327652Y041324* +X0327665Y0413278* +X0327677Y0413328* +X0327715Y0413453* +X0327765Y0413603* +X0327802Y0413778* +X032784Y0413965* +X0327865Y041414* +X0327877Y0414315* +Y0414328* +Y0414365* +X0327865Y0414428* +X0327852Y041449* +X0327827Y0414578* +X032779Y0414653* +X032774Y0414728* +X0327665Y041479* +X0327652* +X032764Y0414815* +X032759Y0414828* +X0327527Y0414865* +X0327427Y041489* +X0327302Y0414928* +X0327152Y0414978* +X0326952Y0415015* +X0326465Y0415115* +Y0413765* +X032509Y0414053* +Y0415403* +X0319502Y0416565* +Y041844* +X032509Y0417278* +G37* +G36* +X0322577Y042654D02* +X0322715D01* +X0322877Y0426515* +X0323065Y042649* +X0323277Y0426465* +X0323502Y0426415* +X032374Y0426353* +X032399Y042629* +X0324252Y0426203* +X0324515Y042609* +X0324765Y0425965* +X0325015Y0425828* +X0325252Y0425653* +X0325477Y0425465* +X032549Y0425453* +X0325527Y0425415* +X032559Y0425353* +X0325665Y0425265* +X0325752Y0425153* +X032584Y0425028* +X0325952Y0424878* +X0326065Y0424703* +X0326165Y0424503* +X0326277Y042429* +X0326365Y0424053* +X0326465Y0423803* +X0326527Y0423528* +X032659Y042324* +X0326627Y0422928* +X032664Y0422603* +Y042259* +Y042254* +Y0422453* +X0326627Y0422353* +X0326615Y0422215* +X032659Y0422065* +X0326565Y0421903* +X0326527Y0421728* +X032649Y042154* +X0326427Y042134* +X0326365Y042114* +X0326277Y042094* +X0326177Y042074* +X0326065Y0420553* +X0325927Y0420365* +X0325777Y0420203* +X0325765Y042019* +X032574Y0420165* +X032569Y0420128* +X0325627Y0420065* +X032554Y0420003* +X0325427Y0419928* +X0325315Y041984* +X0325177Y0419765* +X0325015Y0419678* +X032484Y0419603* +X0324652Y0419528* +X0324452Y0419465* +X032424Y0419403* +X0324002Y0419365* +X0323752Y041934* +X032349Y0419328* +X0323415* +X0323327Y041934* +X0323202* +X0323052Y0419365* +X032289Y041939* +X032269Y0419415* +X032249Y0419465* +X0322265Y0419515* +X0322027Y041959* +X0321777Y0419678* +X032154Y041979* +X0321277Y0419915* +X032104Y0420053* +X032079Y0420228* +X0320552Y0420415* +X032054Y0420428* +X0320502Y0420465* +X032044Y0420528* +X0320365Y0420615* +X0320265Y0420715* +X0320165Y0420853* +X0320052Y0421003* +X031994Y0421178* +X0319827Y0421378* +X0319715Y042159* +X0319615Y0421828* +X0319515Y042209* +X031944Y0422365* +X0319377Y0422665* +X031934Y0422978* +X0319327Y0423315* +Y0423328* +Y0423353* +Y0423415* +X031934Y0423478* +Y0423565* +X0319352Y0423665* +X0319377Y0423903* +X0319427Y0424165* +X031949Y0424465* +X031959Y0424753* +X0319715Y0425053* +Y0425065* +X031974Y042509* +X0319752Y0425128* +X031979Y0425178* +X0319877Y0425315* +X0320002Y0425478* +X0320165Y0425665* +X0320352Y0425853* +X0320577Y0426028* +X0320827Y042619* +X032084* +X0320865Y0426203* +X0320902Y0426228* +X0320952Y042624* +X0321027Y0426278* +X0321102Y0426303* +X032129Y0426365* +X0321527Y042644* +X032179Y042649* +X0322077Y042654* +X032239Y0426553* +X0322477* +X0322577Y042654* +G37* +G36* +X0326465Y041339D02* +Y0412478D01* +X0327577Y041224* +X0328877Y0410103* +X0326465Y041059* +Y040944* +X0325065Y0409728* +Y0410878* +X032214Y0411503* +X0322127* +X0322102Y0411515* +X0322065* +X0322015Y0411528* +X0321877Y0411553* +X0321727Y0411578* +X0321565Y0411615* +X0321427Y041164* +X0321302Y0411653* +X0321265Y0411665* +X0321202* +X0321165Y0411653* +X0321115* +X0321002Y0411603* +X032094Y0411578* +X032089Y0411528* +Y0411515* +X0320877Y0411503* +X0320852Y0411465* +X032084Y0411415* +X0320815Y041134* +X032079Y0411253* +X0320777Y0411153* +Y0411028* +Y0411015* +Y0411003* +Y0410965* +X032079Y0410903* +Y0410815* +X0320802Y0410715* +X0320815Y0410578* +X0320827Y0410403* +X0319427Y0410703* +Y0410728* +X0319415Y041079* +X0319402Y0410878* +X0319377Y0411015* +X0319365Y0411165* +X031934Y0411328* +X0319327Y0411515* +Y0411703* +Y0411715* +Y041174* +Y041179* +X031934Y0411865* +Y041194* +X0319352Y041204* +X0319377Y0412253* +X0319415Y041249* +X031949Y0412728* +X0319577Y0412953* +X031964Y0413053* +X0319702Y041314* +X0319715Y0413165* +X0319777Y0413215* +X0319865Y0413278* +X0319977Y0413365* +X032014Y0413453* +X0320315Y0413515* +X032054Y0413565* +X0320777Y041359* +X0320852* +X032094Y0413578* +X0321002Y0413565* +X032109* +X0321177Y0413553* +X032129Y0413528* +X0321402Y0413515* +X032154Y041349* +X0321702Y0413465* +X0321865Y0413428* +X0322052Y041339* +X0322265Y0413353* +X0325065Y0412753* +Y0413678* +X0326465Y041339* +G37* +G36* +Y039699D02* +Y0396078D01* +X0327577Y039584* +X0328877Y0393703* +X0326465Y039419* +Y039304* +X0325065Y0393328* +Y0394478* +X032214Y0395103* +X0322127* +X0322102Y0395115* +X0322065* +X0322015Y0395128* +X0321877Y0395153* +X0321727Y0395178* +X0321565Y0395215* +X0321427Y039524* +X0321302Y0395253* +X0321265Y0395265* +X0321202* +X0321165Y0395253* +X0321115* +X0321002Y0395203* +X032094Y0395178* +X032089Y0395128* +Y0395115* +X0320877Y0395103* +X0320852Y0395065* +X032084Y0395015* +X0320815Y039494* +X032079Y0394853* +X0320777Y0394753* +Y0394628* +Y0394615* +Y0394603* +Y0394565* +X032079Y0394503* +Y0394415* +X0320802Y0394315* +X0320815Y0394178* +X0320827Y0394003* +X0319427Y0394303* +Y0394328* +X0319415Y039439* +X0319402Y0394478* +X0319377Y0394615* +X0319365Y0394765* +X031934Y0394928* +X0319327Y0395115* +Y0395303* +Y0395315* +Y039534* +Y039539* +X031934Y0395465* +Y039554* +X0319352Y039564* +X0319377Y0395853* +X0319415Y039609* +X031949Y0396328* +X0319577Y0396553* +X031964Y0396653* +X0319702Y039674* +X0319715Y0396765* +X0319777Y0396815* +X0319865Y0396878* +X0319977Y0396965* +X032014Y0397053* +X0320315Y0397115* +X032054Y0397165* +X0320777Y039719* +X0320852* +X032094Y0397178* +X0321002Y0397165* +X032109* +X0321177Y0397153* +X032129Y0397128* +X0321402Y0397115* +X032154Y039709* +X0321702Y0397065* +X0321865Y0397028* +X0322052Y039699* +X0322265Y0396953* +X0325065Y0396353* +Y0397278* +X0326465Y039699* +G37* +G36* +X0329115Y040389D02* +Y0401903D01* +X0321102Y0403578* +Y0398678* +X0319502Y0399015* +Y040589* +X0329115Y040389* +G37* +G36* +X0322702Y0433578D02* +X0322615D01* +X0322552Y0433565* +X0322402Y0433553* +X0322215Y0433528* +X0322002Y043349* +X0321802Y043344* +X0321627Y0433365* +X032154Y0433328* +X0321477Y0433278* +X0321452Y0433253* +X0321402Y043319* +X0321365Y043314* +X0321315Y0433078* +X0321277Y0433003* +X0321227Y0432915* +X0321177Y0432815* +X032114Y043269* +X032109Y0432565* +X0321052Y0432415* +X0321027Y0432253* +X0321002Y0432078* +X0320977Y043189* +Y0431678* +Y0431665* +Y043164* +Y043159* +Y0431515* +X032099Y043144* +Y043134* +X0321015Y043114* +X0321065Y0430903* +X0321115Y0430665* +X0321202Y0430453* +X0321252Y0430353* +X0321315Y0430265* +X0321327Y043024* +X0321377Y043019* +X0321452Y0430128* +X0321552Y043004* +X0321677Y0429965* +X0321827Y042989* +X032199Y042984* +X0322165Y0429828* +X032224* +X0322315Y042984* +X0322415Y0429878* +X0322527Y0429915* +X0322652Y0429978* +X0322777Y0430065* +X032289Y043019* +X0322902Y0430203* +X0322927Y043024* +X0322977Y0430328* +X0323015Y043039* +X0323052Y0430453* +X0323102Y043054* +X0323152Y043064* +X0323215Y0430753* +X0323277Y0430878* +X032334Y0431015* +X0323415Y0431178* +X0323502Y0431365* +X032359Y0431565* +Y0431578* +X0323615Y0431615* +X032364Y0431665* +X0323677Y0431753* +X0323715Y043184* +X0323765Y043194* +X0323877Y043219* +X0324002Y0432453* +X032414Y0432728* +X0324277Y0432978* +X032434Y0433103* +X0324402Y0433203* +X0324415Y0433228* +X0324465Y043329* +X0324527Y0433378* +X0324627Y043349* +X0324752Y0433628* +X032489Y0433765* +X0325052Y043389* +X032524Y0434015* +X0325265Y0434028* +X0325327Y0434065* +X032544Y0434103* +X032559Y0434153* +X0325765Y0434215* +X0325977Y0434253* +X0326215Y043429* +X0326465Y0434303* +X0326577* +X0326665Y043429* +X0326765Y0434278* +X032689Y0434253* +X0327027Y0434228* +X0327177Y043419* +X0327327Y0434153* +X032749Y043409* +X0327652Y0434015* +X0327827Y0433928* +X032799Y0433828* +X0328165Y0433715* +X0328327Y0433578* +X0328477Y0433428* +X032849Y0433415* +X0328515Y043339* +X0328552Y043334* +X0328602Y0433265* +X0328665Y0433178* +X032874Y0433065* +X0328802Y0432928* +X032889Y0432778* +X0328965Y0432615* +X0329027Y0432428* +X0329102Y0432215* +X0329165Y043199* +X0329215Y043174* +X0329252Y0431478* +X0329277Y043119* +X032929Y043089* +Y0430865* +Y0430815* +Y0430728* +X0329277Y0430615* +X0329265Y0430465* +X0329252Y0430303* +X0329227Y0430115* +X032919Y0429928* +X032909Y0429503* +X0329027Y0429278* +X0328952Y0429065* +X0328865Y0428853* +X0328752Y042864* +X0328627Y0428453* +X032849Y0428265* +X0328477Y0428253* +X0328452Y0428228* +X0328415Y0428178* +X0328352Y0428115* +X0328265Y0428053* +X0328177Y0427965* +X0328065Y0427878* +X0327927Y042779* +X032779Y0427703* +X0327627Y0427603* +X0327452Y0427528* +X0327265Y042744* +X0327065Y0427378* +X0326852Y0427315* +X0326615Y0427265* +X0326377Y042724* +X0326302Y042914* +X0326327* +X0326365Y0429153* +X0326415* +X032654Y042919* +X032669Y0429228* +X0326865Y042929* +X032704Y0429378* +X0327202Y042949* +X0327352Y042964* +X0327365Y0429665* +X0327415Y0429715* +X0327477Y0429815* +X032754Y0429953* +X0327615Y043014* +X0327665Y0430353* +X0327715Y0430603* +X0327727Y0430903* +Y0430915* +Y043094* +Y0430978* +Y043104* +X0327715Y0431178* +X032769Y0431353* +X0327652Y043154* +X0327602Y043174* +X0327527Y0431915* +X0327427Y0432065* +X0327415Y0432078* +X0327377Y0432115* +X0327315Y0432178* +X0327227Y043224* +X0327127Y0432303* +X0327002Y0432365* +X0326865Y0432403* +X0326702Y0432415* +X032664* +X0326552Y0432403* +X0326465Y0432378* +X0326352Y043234* +X032624Y0432278* +X0326127Y0432203* +X0326015Y0432103* +X0326002Y043209* +X0325965Y043204* +X0325902Y043194* +X0325865Y0431878* +X0325815Y0431803* +X0325765Y0431715* +X0325715Y0431615* +X0325652Y043149* +X0325577Y0431365* +X0325515Y0431215* +X032544Y0431053* +X0325352Y0430878* +X0325265Y0430678* +X0325252Y0430653* +X0325227Y0430603* +X032519Y0430515* +X032514Y0430415* +X032509Y0430278* +X0325015Y0430128* +X032494Y0429965* +X0324852Y042979* +X0324665Y0429428* +X0324465Y042909* +X0324377Y0428928* +X0324277Y042879* +X032419Y0428665* +X0324102Y0428565* +X032409Y0428553* +X0324077Y042854* +X032404Y0428503* +X0323977Y0428453* +X0323915Y0428403* +X032384Y0428353* +X0323752Y042829* +X032364Y0428215* +X0323402Y042809* +X0323102Y042799* +X0322777Y0427903* +X032259Y042789* +X0322402Y0427878* +X0322352* +X0322277Y042789* +X032219* +X0322077Y0427903* +X0321952Y0427928* +X0321815Y0427965* +X0321652Y0428003* +X032149Y0428053* +X0321315Y0428128* +X0321127Y0428203* +X0320952Y0428303* +X0320765Y0428415* +X0320577Y0428553* +X0320402Y0428715* +X0320227Y042889* +X0320215Y0428903* +X032019Y042894* +X032014Y042899* +X032009Y0429078* +X0320015Y0429178* +X031994Y0429303* +X0319865Y0429453* +X0319777Y0429615* +X031969Y0429803* +X0319615Y0430015* +X031954Y0430253* +X0319465Y0430503* +X0319415Y0430765* +X0319365Y0431053* +X031934Y0431365* +X0319327Y043169* +Y0431703* +Y043174* +Y0431815* +X031934Y0431903* +Y0432003* +X0319352Y0432128* +X0319365Y0432265* +X0319377Y0432428* +X0319427Y0432753* +X0319502Y0433115* +X0319602Y043349* +X031974Y043384* +Y0433853* +X0319765Y0433878* +X0319777Y0433928* +X0319815Y043399* +X0319852Y0434065* +X0319915Y0434153* +X032004Y043434* +X0320202Y0434553* +X0320402Y0434765* +X0320627Y0434965* +X0320752Y0435053* +X032089Y0435128* +X0320902* +X0320927Y043514* +X0320965Y0435165* +X0321027Y043519* +X032109Y0435215* +X0321177Y043524* +X0321277Y0435278* +X032139Y0435315* +X032164Y0435378* +X0321927Y0435428* +X0322252Y0435465* +X0322602* +X0322702Y0433578* +G37* +G36* +X0321515Y0463315D02* +X0321602Y0463303D01* +X0321702Y046329* +X0321927Y0463253* +X0322177Y0463178* +X0322452Y0463065* +X0322577Y0463003* +X0322715Y0462915* +X032284Y0462828* +X0322952Y0462715* +X0322965Y0462703* +X0322977Y046269* +X0323015Y0462653* +X0323052Y046259* +X032309Y0462515* +X0323152Y0462428* +X0323202Y0462328* +X0323265Y0462203* +X0323327Y0462065* +X032339Y0461903* +X0323452Y0461715* +X0323515Y0461515* +X0323565Y046129* +X0323615Y0461053* +X0323652Y046079* +X0323677Y0460503* +Y046049* +Y046044* +X032369Y0460378* +X0323702Y046029* +X0323715Y0460178* +X0323727Y0460053* +X0323752Y0459765* +X032379Y0459465* +X032384Y0459178* +X0323865Y045904* +X032389Y0458903* +X0323927Y0458803* +X0323952Y0458703* +X0323965* +X0324015Y0458678* +X032409Y0458665* +X0324177Y045864* +X0324377Y0458603* +X0324477Y0458578* +X0324627* +X0324677Y045859* +X0324752Y0458603* +X0324827Y045864* +X0324915Y0458678* +X0325002Y045874* +X0325077Y0458828* +X032509Y045884* +X0325115Y0458878* +X032514Y0458928* +X032519Y0459003* +X0325227Y0459103* +X0325252Y0459228* +X0325277Y0459378* +X032529Y0459553* +Y0459578* +Y045964* +X0325277Y0459728* +X0325265Y045984* +X032524Y0459965* +X0325202Y0460103* +X0325152Y0460228* +X0325077Y0460353* +X0325065Y0460365* +X032504Y0460403* +X032499Y0460453* +X0324927Y0460503* +X0324852Y0460578* +X0324752Y046064* +X032464Y046069* +X0324515Y046074* +X0324665Y0462578* +X0324677* +X0324702Y0462565* +X0324752Y046254* +X0324815Y0462515* +X032489Y0462478* +X032499Y046244* +X032519Y0462328* +X0325427Y0462178* +X0325665Y046199* +X0325902Y0461765* +X0326115Y046149* +X0326127Y0461478* +X032614Y0461453* +X0326165Y0461403* +X0326202Y046134* +X032624Y0461265* +X0326277Y0461178* +X0326327Y0461065* +X0326377Y0460928* +X0326427Y046079* +X0326477Y046064* +X0326515Y0460465* +X0326552Y0460278* +X032659Y0460078* +X0326615Y0459865* +X032664Y045964* +Y0459403* +Y045939* +Y045934* +Y0459278* +X0326627Y0459178* +Y0459065* +X0326615Y045894* +X032659Y0458803* +X0326577Y0458653* +X0326502Y0458328* +X0326402Y045799* +X0326277Y0457678* +X032619Y045754* +X032609Y0457415* +Y0457403* +X0326065Y045739* +X032599Y0457315* +X0325877Y0457215* +X0325727Y045709* +X0325527Y0456965* +X0325302Y0456865* +X0325052Y045679* +X0324915Y0456778* +X0324765Y0456765* +X0324652* +X0324565Y0456778* +X0324465* +X0324352Y045679* +X032409Y0456828* +X0324077* +X0324052Y045684* +X0324015* +X0323965Y0456853* +X0323902Y0456865* +X0323827Y0456878* +X0323727Y045689* +X0323615Y0456915* +X032349Y045694* +X032334Y0456978* +X0323165Y0457015* +X0322965Y0457053* +X0322752Y0457103* +X0322502Y0457153* +X032224Y0457215* +X0322227* +X032219Y0457228* +X0322127Y045724* +X032204Y0457253* +X032194Y0457278* +X0321815Y0457303* +X0321552Y0457353* +X0321265Y0457403* +X0320977Y0457453* +X0320715Y0457478* +X032059Y045749* +X0320415* +X0320315Y0457478* +X0320202Y0457465* +X0320052Y0457453* +X031989Y0457428* +X0319702Y045739* +X0319502Y045734* +Y0459165* +X0319515* +X0319565Y0459178* +X031964Y0459203* +X031974Y0459228* +X0319852Y0459253* +X031999Y0459265* +X0320277Y0459303* +X0320252Y0459328* +X0320202Y0459378* +X0320127Y0459465* +X0320027Y0459578* +X0319915Y0459728* +X031979Y045989* +X0319677Y0460065* +X0319577Y0460265* +X0319565Y046029* +X031954Y0460353* +X0319502Y0460465* +X0319452Y0460603* +X0319402Y0460765* +X0319365Y046094* +X031934Y046114* +X0319327Y046134* +Y0461353* +Y0461378* +Y0461428* +X031934Y0461478* +Y0461553* +X0319352Y046164* +X0319402Y046184* +X0319465Y0462065* +X0319565Y0462303* +X0319702Y046254* +X031979Y0462653* +X031989Y0462765* +X0319902* +X0319915Y046279* +X0319952Y0462815* +X031999Y0462853* +X0320115Y046294* +X032029Y046304* +X0320502Y0463153* +X0320752Y046324* +X032104Y0463303* +X032119Y0463315* +X0321352Y0463328* +X0321452* +X0321515Y0463315* +G37* +G36* +X0326465Y0470203D02* +Y0468428D01* +X032574Y0468565* +Y0468553* +X0325765Y046854* +X0325815Y0468465* +X0325902Y0468353* +X0326015Y0468215* +X0326127Y0468053* +X032624Y0467878* +X032634Y046769* +X0326427Y0467503* +X032644Y0467478* +X0326465Y0467415* +X032649Y0467315* +X032654Y0467178* +X0326577Y0467015* +X0326602Y046684* +X0326627Y046664* +X032664Y0466428* +Y0466415* +Y0466378* +Y0466328* +X0326627Y0466253* +X0326615Y0466153* +X0326602Y0466053* +X032654Y0465803* +X0326452Y0465528* +X032639Y0465378* +X0326315Y0465228* +X0326227Y046509* +X0326127Y046494* +X0326015Y0464803* +X0325877Y0464678* +X0325865Y0464665* +X032584Y0464653* +X0325802Y0464615* +X032574Y0464578* +X0325652Y0464515* +X0325565Y0464465* +X0325452Y0464403* +X0325315Y046434* +X0325165Y0464278* +X0325002Y0464215* +X0324815Y0464153* +X0324615Y0464103* +X032439Y0464065* +X0324152Y0464028* +X0323902Y0464015* +X0323627Y0464003* +X032354* +X032344Y0464015* +X0323315* +X0323152Y046404* +X0322965Y0464065* +X0322752Y0464103* +X0322515Y046414* +X0322277Y0464203* +X0322015Y0464278* +X0321752Y0464378* +X0321477Y046449* +X0321215Y0464615* +X032094Y0464778* +X0320677Y0464953* +X0320427Y0465153* +X0320415Y0465165* +X0320377Y0465203* +X0320327Y0465253* +X0320252Y0465328* +X0320177Y0465428* +X0320077Y046554* +X0319977Y0465665* +X0319877Y0465815* +X0319777Y0465978* +X0319677Y0466153* +X0319577Y0466353* +X0319502Y0466553* +X0319427Y0466778* +X0319377Y0467003* +X031934Y046724* +X0319327Y046749* +Y0467503* +Y0467553* +X031934Y0467628* +Y0467715* +X0319365Y0467828* +X031939Y0467965* +X0319415Y0468115* +X0319465Y0468265* +X0319527Y046844* +X0319602Y0468615* +X031969Y0468778* +X0319802Y0468953* +X0319927Y0469128* +X0320077Y046929* +X032024Y046944* +X032044Y0469578* +X0316852Y0470328* +Y0472203* +X0326465Y0470203* +G37* +G36* +Y0454578D02* +Y0452815D01* +X0325127Y0453103* +X032514Y045309* +X032519Y0453053* +X0325265Y0453003* +X0325365Y0452928* +X0325477Y045284* +X0325602Y0452728* +X032574Y0452603* +X032589Y0452465* +X0326027Y0452315* +X0326165Y0452153* +X032629Y0451965* +X0326402Y0451778* +X0326502Y045159* +X0326577Y045139* +X0326627Y0451178* +X032664Y0450965* +Y0450953* +Y045089* +X0326627Y0450815* +X0326615Y0450703* +X032659Y0450578* +X0326552Y0450428* +X0326502Y0450265* +X0326427Y045009* +X032489Y0450815* +Y0450828* +X0324902Y0450865* +X0324927Y0450915* +X032494Y0450978* +X0324965Y0451065* +X0324977Y0451153* +X032499Y0451365* +Y045139* +Y0451453* +X0324965Y045154* +X032494Y0451665* +X0324902Y0451815* +X0324827Y045199* +X032474Y0452165* +X0324615Y0452353* +X0324602Y0452378* +X0324552Y045244* +X0324465Y0452528* +X0324352Y045264* +X0324215Y0452765* +X032404Y045289* +X0323852Y0453028* +X0323627Y045314* +X0323615* +X0323602Y0453153* +X0323565Y0453165* +X0323515Y045319* +X032344Y0453215* +X0323365Y045324* +X0323265Y0453278* +X0323152Y0453315* +X0323027Y0453365* +X0322877Y0453403* +X0322727Y0453453* +X0322552Y0453503* +X0322352Y0453553* +X032214Y0453603* +X0321915Y0453653* +X0321677Y0453703* +X0319502Y0454153* +Y0456028* +X0326465Y0454578* +G37* +G36* +X031829Y0443528D02* +Y0443515D01* +X0318277Y0443465* +X0318265Y0443403* +X031824Y0443315* +X0318227Y0443215* +X0318202Y0443103* +X031819Y0442865* +Y0442853* +Y0442828* +X0318202Y0442778* +X0318215Y0442715* +X0318227Y0442653* +X0318265Y0442565* +X0318302Y0442465* +X0318352Y0442365* +X0318427Y0442253* +X0318515Y044214* +X0318615Y0442015* +X031874Y0441903* +X031889Y0441778* +X0319065Y0441665* +X0319277Y0441553* +X0319502Y044144* +X0326465Y0442653* +Y044079* +X032299Y0440303* +X0322977* +X0322927Y044029* +X0322865* +X0322777Y0440278* +X0322665Y0440265* +X032254Y0440253* +X0322252Y0440215* +X0321952Y044019* +X032164Y0440153* +X032149Y044014* +X0321352Y0440128* +X032124Y0440115* +X032114* +X0321177Y0440103* +X0321227Y0440078* +X0321315Y0440053* +X0321402Y0440015* +X0321527Y0439965* +X0321652Y0439915* +X0321802Y0439853* +X0321965Y043979* +X032214Y0439703* +X0322515Y043954* +X0322927Y0439328* +X0323365Y0439103* +X0326465Y043744* +Y0435453* +X0318815Y043974* +X0318802* +X0318777Y0439765* +X0318727Y043979* +X0318665Y0439828* +X031859Y0439878* +X0318502Y0439928* +X0318302Y0440053* +X0318077Y0440178* +X0317865Y0440328* +X0317665Y0440465* +X0317577Y0440528* +X0317502Y044059* +X031749Y0440603* +X031744Y044064* +X0317365Y0440703* +X0317277Y044079* +X031719Y0440903* +X031709Y0441028* +X031699Y0441165* +X0316902Y0441328* +X031689Y0441353* +X0316865Y0441403* +X0316827Y044149* +X031679Y0441615* +X0316752Y0441765* +X0316715Y044194* +X031669Y044214* +X0316677Y0442353* +Y0442365* +Y0442378* +Y0442415* +Y0442453* +X031669Y0442578* +X0316702Y044274* +X0316727Y044294* +X0316765Y0443165* +X0316815Y0443415* +X031689Y044369* +X031829Y0443528* +G37* +G36* +X0329115Y044874D02* +Y0446853D01* +X032409Y0447903* +X0326465Y0445453* +Y0443003* +X032394Y0445803* +X0319502Y0444303* +Y044619* +X0322715Y0447153* +X0321577Y044844* +X0319502Y0448865* +Y045074* +X0329115Y044874* +G37* +G36* +X0322415Y0393015D02* +X032254D01* +X0322677Y0393003* +X0322852Y0392978* +X0323052Y0392953* +X0323265Y0392903* +X032349Y0392853* +X0323727Y039279* +X0323977Y0392715* +X032424Y0392628* +X0324502Y0392515* +X0324765Y039239* +X0325027Y039224* +X0325277Y0392078* +X032529Y0392065* +X032534Y0392028* +X0325402Y0391978* +X032549Y0391903* +X032559Y0391803* +X0325715Y039169* +X0325827Y0391553* +X0325965Y0391403* +X032609Y0391228* +X0326215Y039104* +X0326327Y0390828* +X0326427Y0390603* +X0326515Y0390353* +X0326577Y0390103* +X0326627Y0389828* +X032664Y038954* +Y0389528* +Y0389478* +X0326627Y0389403* +Y0389303* +X0326602Y038919* +X0326577Y0389053* +X032654Y0388903* +X0326502Y038874* +X032644Y0388578* +X0326365Y0388403* +X0326277Y0388228* +X0326165Y0388053* +X032604Y0387878* +X032589Y0387715* +X0325715Y0387553* +X0325515Y0387415* +X0329115Y0386628* +Y038474* +X0319502Y038684* +Y0388628* +X032024Y0388478* +X0320215Y0388503* +X0320165Y0388565* +X0320077Y0388665* +X0319965Y038879* +X0319852Y0388953* +X031974Y0389115* +X0319627Y0389303* +X031954Y038949* +X0319527Y0389515* +X0319502Y0389578* +X0319477Y0389678* +X031944Y0389815* +X031939Y0389978* +X0319365Y0390165* +X031934Y0390378* +X0319327Y0390603* +Y0390615* +Y0390653* +Y0390703* +X031934Y0390778* +X0319352Y0390878* +X0319365Y0390978* +X0319415Y0391228* +X0319502Y0391515* +X0319565Y0391653* +X031964Y0391803* +X0319727Y0391953* +X0319827Y039209* +X031994Y0392228* +X0320065Y0392365* +X0320077Y0392378* +X0320102Y039239* +X032014Y0392428* +X0320202Y0392465* +X0320277Y0392515* +X0320377Y0392578* +X032049Y039264* +X0320615Y039269* +X0320765Y0392753* +X0320927Y0392815* +X0321102Y0392878* +X0321302Y0392928* +X0321515Y0392965* +X032174Y0393003* +X032199Y0393015* +X0322252Y0393028* +X0322327* +X0322415Y0393015* +G37* +G36* +X0460804Y0305118D02* +X0458928D01* +X0460928Y0314731* +X0462816* +X0460804Y0305118* +G37* +G36* +X0429104Y0309281D02* +Y0309268D01* +X0429091Y0309206* +X0429066Y0309131* +X0429041Y0309018* +X0429003Y0308881* +X0428966Y0308731* +X0428916Y0308556* +X0428866Y0308381* +X0428741Y0307981* +X0428604Y0307568* +X0428441Y0307181* +X0428354Y0306993* +X0428266Y0306831* +Y0306818* +X0428241Y0306793* +X0428216Y0306756* +X0428179Y0306693* +X0428128Y0306618* +X0428066Y0306543* +X0427916Y0306343* +X0427716Y0306131* +X0427479Y0305906* +X0427191Y0305681* +X0426854Y0305468* +X0426841* +X0426816Y0305443* +X0426754Y0305418* +X0426679Y0305381* +X0426591Y0305343* +X0426478Y0305306* +X0426341Y0305256* +X0426191Y0305206* +X0426028Y0305156* +X0425853Y0305106* +X0425654Y0305068* +X0425441Y0305031* +X0425204Y0304993* +X0424966Y0304968* +X0424704Y0304956* +X0424441Y0304943* +X0424278* +X0424154Y0304956* +X0424016Y0304968* +X0423841Y0304993* +X0423654Y0305018* +X0423454Y0305043* +X0423029Y0305143* +X0422803Y0305206* +X0422591Y0305293* +X0422366Y0305381* +X0422154Y0305493* +X0421966Y0305618* +X0421778Y0305768* +X0421766Y0305781* +X0421741Y0305806* +X0421691Y0305856* +X0421629Y0305918* +X0421566Y0305993* +X0421491Y0306093* +X0421404Y0306218* +X0421316Y0306343* +X0421229Y0306493* +X0421141Y0306643* +X0421066Y0306818* +X0421003Y0307006* +X0420941Y0307206* +X0420891Y0307418* +X0420866Y0307643* +X0420854Y0307881* +Y0307893* +Y0307931* +Y0307981* +X0420866Y0308056* +Y0308143* +X0420879Y0308243* +X0420916Y0308468* +Y0308481* +X0420928Y0308518* +X0420941Y0308581* +X0420954Y0308693* +X0420966Y0308768* +X0420991Y0308843* +X0421003Y0308943* +X0421029Y0309056* +X0421066Y0309181* +X0421091Y0309318* +X0421129Y0309481* +X0421166Y0309656* +X0422291Y0314731* +X0424266* +X0423104Y0309493* +X0422828Y0308218* +Y0308206* +Y0308193* +X0422816Y0308156* +X0422803Y0308106* +X0422791Y0307968* +X0422766Y0307793* +Y0307768* +X0422779Y0307706* +X0422791Y0307606* +X0422828Y0307493* +X0422879Y0307356* +X0422954Y0307206* +X0423066Y0307068* +X0423216Y0306931* +X0423241Y0306918* +X0423304Y0306881* +X0423404Y0306818* +X0423554Y0306768* +X0423729Y0306706* +X0423966Y0306643* +X0424228Y0306606* +X0424529Y0306593* +X0424653* +X0424803Y0306606* +X0424978Y0306631* +X0425178Y0306656* +X0425391Y0306706* +X0425603Y0306768* +X0425804Y0306856* +X0425829Y0306868* +X0425891Y0306906* +X0425979Y0306968* +X0426091Y0307056* +X0426216Y0307168* +X0426354Y0307306* +X0426478Y0307468* +X0426591Y0307656* +Y0307668* +X0426604Y0307681* +X0426616Y0307718* +X0426641Y0307756* +X0426666Y0307818* +X0426704Y0307893* +X0426728Y0307981* +X0426766Y0308081* +X0426816Y0308206* +X0426854Y0308331* +X0426903Y0308481* +X0426954Y0308643* +X0427003Y0308831* +X0427053Y0309031* +X0427116Y0309243* +X0427166Y0309468* +X0428266Y0314731* +X0430229* +X0429104Y0309281* +G37* +G36* +X0439941Y0305118D02* +X0438066D01* +X0439516Y0312081* +X0441391* +X0439941Y0305118* +G37* +G36* +X0455216Y0312243D02* +X0455353Y0312231D01* +X0455504Y0312206* +X0455666Y0312181* +X0455841Y0312143* +X0456029Y0312106* +X0456228Y0312043* +X0456428Y0311981* +X0456629Y0311893* +X0456828Y0311793* +X0457016Y0311681* +X0457203Y0311543* +X0457366Y0311393* +X0457378Y0311381* +X0457404Y0311356* +X0457441Y0311306* +X0457504Y0311243* +X0457566Y0311156* +X0457641Y0311043* +X0457728Y0310931* +X0457803Y0310793* +X0457891Y0310631* +X0457966Y0310456* +X0458041Y0310268* +X0458104Y0310068* +X0458166Y0309856* +X0458204Y0309618* +X0458228Y0309368* +X0458241Y0309106* +Y0309081* +Y0309031* +X0458228Y0308943* +Y0308818* +X0458204Y0308668* +X0458179Y0308506* +X0458153Y0308306* +X0458104Y0308106* +X0458053Y0307881* +X0457978Y0307643* +X0457891Y0307393* +X0457779Y0307156* +X0457654Y0306893* +X0457516Y0306656* +X0457341Y0306406* +X0457154Y0306168* +X0457141Y0306156* +X0457103Y0306118* +X0457041Y0306056* +X0456953Y0305981* +X0456853Y0305881* +X0456716Y0305781* +X0456566Y0305668* +X0456391Y0305556* +X0456191Y0305443* +X0455978Y0305331* +X0455741Y0305231* +X0455478Y0305131* +X0455203Y0305056* +X0454904Y0304993* +X0454591Y0304956* +X0454253Y0304943* +X0454153* +X0454091Y0304956* +X0454003* +X0453903Y0304968* +X0453666Y0304993* +X0453404Y0305043* +X0453103Y0305106* +X0452816Y0305206* +X0452516Y0305331* +X0452503* +X0452479Y0305356* +X0452441Y0305368* +X0452391Y0305406* +X0452253Y0305493* +X0452091Y0305618* +X0451903Y0305781* +X0451716Y0305968* +X0451541Y0306193* +X0451378Y0306443* +Y0306456* +X0451366Y0306481* +X0451341Y0306518* +X0451329Y0306568* +X0451291Y0306643* +X0451266Y0306718* +X0451203Y0306906* +X0451128Y0307143* +X0451079Y0307406* +X0451028Y0307693* +X0451016Y0308006* +Y0308031* +Y0308093* +X0451028Y0308193* +Y0308331* +X0451053Y0308493* +X0451079Y0308681* +X0451103Y0308893* +X0451154Y0309118* +X0451216Y0309356* +X0451278Y0309606* +X0451366Y0309868* +X0451478Y0310131* +X0451604Y0310381* +X0451741Y0310631* +X0451916Y0310868* +X0452104Y0311093* +X0452116Y0311106* +X0452153Y0311143* +X0452216Y0311206* +X0452304Y0311281* +X0452416Y0311368* +X0452541Y0311456* +X0452691Y0311568* +X0452866Y0311681* +X0453066Y0311781* +X0453278Y0311893* +X0453516Y0311981* +X0453766Y0312081* +X0454041Y0312143* +X0454328Y0312206* +X0454641Y0312243* +X0454966Y0312256* +X0455116* +X0455216Y0312243* +G37* +G36* +X0475191D02* +X0475304Y0312231D01* +X0475416Y0312218* +X0475566Y0312193* +X0475716Y0312156* +X0476028Y0312056* +X0476203Y0311993* +X0476366Y0311918* +X0476541Y0311831* +X0476704Y0311718* +X0476854Y0311593* +X0477003Y0311456* +X0477016Y0311443* +X0477041Y0311418* +X0477078Y0311368* +X0477129Y0311306* +X0477178Y0311231* +X0477241Y0311131* +X0477316Y0311018* +X0477391Y0310881* +X0477454Y0310731* +X0477528Y0310568* +X0477591Y0310393* +X0477654Y0310193* +X0477691Y0309981* +X0477729Y0309743* +X0477753Y0309506* +X0477766Y0309243* +Y0309231* +Y0309218* +Y0309181* +Y0309131* +X0477753Y0308993* +Y0308831* +X0477729Y0308643* +X0477704Y0308431* +X0477678Y0308231* +X0477629Y0308018* +X0472916* +Y0308006* +Y0307956* +X0472903Y0307893* +Y0307843* +Y0307831* +Y0307818* +Y0307781* +X0472916Y0307731* +X0472928Y0307606* +X0472954Y0307443* +X0473003Y0307256* +X0473078Y0307068* +X0473166Y0306893* +X0473304Y0306718* +X0473316Y0306706* +X0473379Y0306656* +X0473466Y0306581* +X0473579Y0306506* +X0473716Y0306431* +X0473878Y0306356* +X0474066Y0306306* +X0474266Y0306293* +X0474303* +X0474354Y0306306* +X0474416* +X0474504Y0306318* +X0474591Y0306343* +X0474803Y0306418* +X0474916Y0306468* +X0475041Y0306531* +X0475166Y0306606* +X0475279Y0306706* +X0475403Y0306818* +X0475528Y0306943* +X0475641Y0307093* +X0475741Y0307268* +X0477428Y0306981* +Y0306968* +X0477403Y0306931* +X0477379Y0306881* +X0477341Y0306818* +X0477291Y0306731* +X0477228Y0306631* +X0477078Y0306406* +X0476891Y0306156* +X0476653Y0305906* +X0476404Y0305656* +X0476103Y0305443* +X0476091* +X0476066Y0305418* +X0476016Y0305393* +X0475953Y0305368* +X0475878Y0305331* +X0475791Y0305281* +X0475678Y0305243* +X0475566Y0305193* +X0475291Y0305106* +X0474978Y0305018* +X0474641Y0304968* +X0474266Y0304943* +X0474128* +X0474028Y0304956* +X0473916Y0304968* +X0473778Y0304993* +X0473616Y0305018* +X0473454Y0305056* +X0473279Y0305106* +X0473091Y0305156* +X0472891Y0305231* +X0472704Y0305318* +X0472516Y0305418* +X0472329Y0305543* +X0472154Y0305681* +X0471979Y0305831* +X0471966Y0305843* +X0471941Y0305868* +X0471904Y0305918* +X0471841Y0305993* +X0471778Y0306081* +X0471703Y0306193* +X0471629Y0306318* +X0471541Y0306456* +X0471466Y0306618* +X0471379Y0306793* +X0471304Y0306993* +X0471241Y0307193* +X0471178Y0307418* +X0471141Y0307656* +X0471116Y0307918* +X0471103Y0308181* +Y0308193* +Y0308243* +Y0308318* +X0471116Y0308418* +X0471129Y0308543* +X0471141Y0308693* +X0471166Y0308856* +X0471204Y0309043* +X0471241Y0309231* +X0471291Y0309443* +X0471366Y0309656* +X0471441Y0309868* +X0471528Y0310093* +X0471629Y0310306* +X0471754Y0310531* +X0471891Y0310743* +X0471904Y0310756* +X0471941Y0310806* +X0472004Y0310881* +X0472091Y0310981* +X0472203Y0311093* +X0472341Y0311218* +X0472491Y0311356* +X0472679Y0311506* +X0472891Y0311643* +X0473116Y0311781* +X0473366Y0311906* +X0473654Y0312018* +X0473941Y0312118* +X0474266Y0312193* +X0474616Y0312243* +X0474978Y0312256* +X0475104* +X0475191Y0312243* +G37* +G36* +X0483441D02* +X0483554Y0312231D01* +X0483678Y0312206* +X0483828Y0312168* +X0483991Y0312118* +X0484166Y0312043* +X0483441Y0310506* +X0483428* +X0483391Y0310518* +X0483341Y0310543* +X0483279Y0310556* +X0483191Y0310581* +X0483104Y0310593* +X0482891Y0310606* +X0482803* +X0482716Y0310581* +X0482591Y0310556* +X0482441Y0310518* +X0482266Y0310443* +X0482091Y0310356* +X0481904Y0310231* +X0481879Y0310218* +X0481816Y0310168* +X0481729Y0310081* +X0481616Y0309968* +X0481491Y0309831* +X0481366Y0309656* +X0481228Y0309468* +X0481116Y0309243* +Y0309231* +X0481104Y0309218* +X0481091Y0309181* +X0481066Y0309131* +X0481041Y0309056* +X0481016Y0308981* +X0480978Y0308881* +X0480941Y0308768* +X0480891Y0308643* +X0480854Y0308493* +X0480803Y0308343* +X0480754Y0308168* +X0480703Y0307968* +X0480653Y0307756* +X0480604Y0307531* +X0480553Y0307293* +X0480103Y0305118* +X0478229* +X0479678Y0312081* +X0481441* +X0481153Y0310743* +X0481166Y0310756* +X0481204Y0310806* +X0481253Y0310881* +X0481328Y0310981* +X0481416Y0311093* +X0481529Y0311218* +X0481653Y0311356* +X0481791Y0311506* +X0481941Y0311643* +X0482103Y0311781* +X0482291Y0311906* +X0482479Y0312018* +X0482666Y0312118* +X0482866Y0312193* +X0483078Y0312243* +X0483291Y0312256* +X0483366* +X0483441Y0312243* +G37* +G36* +X0441591Y0313031D02* +X0439716D01* +X0440066Y0314731* +X0441954* +X0441591Y0313031* +G37* +G36* +X0321315Y038464D02* +Y0382778D01* +X0319502Y038314* +Y0385003* +X0321315Y038464* +G37* +G36* +X0446953Y0314893D02* +X0447104Y0314881D01* +X0447266Y0314868* +X0447453Y0314843* +X0447641Y0314806* +X0448066Y0314706* +X0448291Y0314643* +X0448503Y0314568* +X0448716Y0314481* +X0448928Y0314368* +X0449116Y0314243* +X0449303Y0314106* +X0449316Y0314093* +X0449341Y0314068* +X0449391Y0314031* +X0449453Y0313968* +X0449516Y0313881* +X0449604Y0313793* +X0449691Y0313681* +X0449779Y0313543* +X0449866Y0313406* +X0449966Y0313243* +X0450041Y0313068* +X0450129Y0312881* +X0450191Y0312681* +X0450253Y0312468* +X0450304Y0312231* +X0450328Y0311993* +X0448428Y0311918* +Y0311931* +Y0311943* +X0448416Y0311981* +Y0312031* +X0448379Y0312156* +X0448341Y0312306* +X0448279Y0312481* +X0448191Y0312656* +X0448078Y0312818* +X0447928Y0312968* +X0447903Y0312981* +X0447854Y0313031* +X0447753Y0313093* +X0447616Y0313156* +X0447429Y0313231* +X0447216Y0313281* +X0446966Y0313331* +X0446666Y0313343* +X0446528* +X0446391Y0313331* +X0446216Y0313306* +X0446029Y0313268* +X0445828Y0313218* +X0445653Y0313143* +X0445504Y0313043* +X0445491Y0313031* +X0445454Y0312993* +X0445391Y0312931* +X0445329Y0312843* +X0445266Y0312743* +X0445203Y0312618* +X0445166Y0312481* +X0445154Y0312318* +Y0312306* +Y0312256* +X0445166Y0312168* +X0445191Y0312081* +X0445228Y0311968* +X0445291Y0311856* +X0445366Y0311743* +X0445466Y0311631* +X0445478Y0311618* +X0445529Y0311581* +X0445628Y0311518* +X0445691Y0311481* +X0445766Y0311431* +X0445854Y0311381* +X0445954Y0311331* +X0446078Y0311268* +X0446204Y0311193* +X0446353Y0311131* +X0446516Y0311056* +X0446691Y0310968* +X0446891Y0310881* +X0446916Y0310868* +X0446966Y0310843* +X0447053Y0310806* +X0447154Y0310756* +X0447291Y0310706* +X0447441Y0310631* +X0447604Y0310556* +X0447779Y0310468* +X0448141Y0310281* +X0448479Y0310081* +X0448641Y0309993* +X0448778Y0309893* +X0448904Y0309806* +X0449004Y0309718* +X0449016Y0309706* +X0449028Y0309693* +X0449066Y0309656* +X0449116Y0309593* +X0449166Y0309531* +X0449216Y0309456* +X0449278Y0309368* +X0449354Y0309256* +X0449478Y0309018* +X0449579Y0308718* +X0449666Y0308393* +X0449679Y0308206* +X0449691Y0308018* +Y0308006* +Y0307968* +X0449679Y0307893* +Y0307806* +X0449666Y0307693* +X0449641Y0307568* +X0449604Y0307431* +X0449566Y0307268* +X0449516Y0307106* +X0449441Y0306931* +X0449366Y0306743* +X0449266Y0306568* +X0449154Y0306381* +X0449016Y0306193* +X0448853Y0306018* +X0448678Y0305843* +X0448666Y0305831* +X0448629Y0305806* +X0448579Y0305756* +X0448491Y0305706* +X0448391Y0305631* +X0448266Y0305556* +X0448116Y0305481* +X0447954Y0305393* +X0447766Y0305306* +X0447553Y0305231* +X0447316Y0305156* +X0447066Y0305081* +X0446804Y0305031* +X0446516Y0304981* +X0446204Y0304956* +X0445879Y0304943* +X0445753* +X0445666Y0304956* +X0445566* +X0445441Y0304968* +X0445303Y0304981* +X0445141Y0304993* +X0444816Y0305043* +X0444453Y0305118* +X0444078Y0305218* +X0443728Y0305356* +X0443716* +X0443691Y0305381* +X0443641Y0305393* +X0443578Y0305431* +X0443504Y0305468* +X0443416Y0305531* +X0443228Y0305656* +X0443016Y0305818* +X0442803Y0306018* +X0442603Y0306243* +X0442516Y0306368* +X0442441Y0306506* +Y0306518* +X0442428Y0306543* +X0442404Y0306581* +X0442379Y0306643* +X0442353Y0306706* +X0442329Y0306793* +X0442291Y0306893* +X0442253Y0307006* +X0442191Y0307256* +X0442141Y0307543* +X0442103Y0307868* +Y0308218* +X0443991Y0308318* +Y0308306* +Y0308281* +Y0308231* +X0444003Y0308168* +X0444016Y0308018* +X0444041Y0307831* +X0444078Y0307618* +X0444129Y0307418* +X0444204Y0307243* +X0444241Y0307156* +X0444291Y0307093* +X0444316Y0307068* +X0444379Y0307018* +X0444428Y0306981* +X0444491Y0306931* +X0444566Y0306893* +X0444654Y0306843* +X0444754Y0306793* +X0444878Y0306756* +X0445004Y0306706* +X0445154Y0306668* +X0445316Y0306643* +X0445491Y0306618* +X0445679Y0306593* +X0446054* +X0446129Y0306606* +X0446229* +X0446428Y0306631* +X0446666Y0306681* +X0446904Y0306731* +X0447116Y0306818* +X0447216Y0306868* +X0447303Y0306931* +X0447329Y0306943* +X0447378Y0306993* +X0447441Y0307068* +X0447529Y0307168* +X0447604Y0307293* +X0447679Y0307443* +X0447728Y0307606* +X0447741Y0307781* +Y0307806* +Y0307856* +X0447728Y0307931* +X0447691Y0308031* +X0447653Y0308143* +X0447591Y0308268* +X0447504Y0308393* +X0447378Y0308506* +X0447366Y0308518* +X0447329Y0308543* +X0447241Y0308593* +X0447179Y0308631* +X0447116Y0308668* +X0447028Y0308718* +X0446929Y0308768* +X0446816Y0308831* +X0446691Y0308893* +X0446554Y0308956* +X0446391Y0309031* +X0446204Y0309118* +X0446003Y0309206* +X0445991* +X0445954Y0309231* +X0445903Y0309256* +X0445816Y0309293* +X0445728Y0309331* +X0445628Y0309381* +X0445378Y0309493* +X0445116Y0309618* +X0444841Y0309756* +X0444591Y0309893* +X0444466Y0309956* +X0444366Y0310018* +X0444341Y0310031* +X0444278Y0310081* +X0444191Y0310143* +X0444078Y0310243* +X0443941Y0310368* +X0443804Y0310506* +X0443679Y0310668* +X0443553Y0310856* +X0443541Y0310881* +X0443504Y0310943* +X0443466Y0311056* +X0443416Y0311206* +X0443354Y0311381* +X0443316Y0311593* +X0443279Y0311831* +X0443266Y0312081* +Y0312093* +Y0312131* +Y0312193* +X0443279Y0312281* +X0443291Y0312381* +X0443316Y0312506* +X0443341Y0312643* +X0443378Y0312793* +X0443416Y0312943* +X0443478Y0313106* +X0443553Y0313268* +X0443641Y0313443* +X0443741Y0313606* +X0443854Y0313781* +X0443991Y0313943* +X0444141Y0314093* +X0444153Y0314106* +X0444178Y0314131* +X0444229Y0314168* +X0444304Y0314218* +X0444391Y0314281* +X0444503Y0314356* +X0444641Y0314418* +X0444791Y0314506* +X0444953Y0314581* +X0445141Y0314643* +X0445354Y0314718* +X0445578Y0314781* +X0445828Y0314831* +X0446091Y0314868* +X0446379Y0314893* +X0446678Y0314906* +X0446841* +X0446953Y0314893* +G37* +G36* +X0469103Y0305118D02* +X0467316D01* +X0467466Y0305856* +X0467441Y0305831* +X0467379Y0305781* +X0467278Y0305693* +X0467154Y0305581* +X0466991Y0305468* +X0466828Y0305356* +X0466641Y0305243* +X0466454Y0305156* +X0466429Y0305143* +X0466366Y0305118* +X0466266Y0305093* +X0466128Y0305056* +X0465966Y0305006* +X0465778Y0304981* +X0465566Y0304956* +X0465341Y0304943* +X0465241* +X0465166Y0304956* +X0465066Y0304968* +X0464966Y0304981* +X0464716Y0305031* +X0464429Y0305118* +X0464291Y0305181* +X0464141Y0305256* +X0463991Y0305343* +X0463854Y0305443* +X0463716Y0305556* +X0463579Y0305681* +X0463566Y0305693* +X0463553Y0305718* +X0463516Y0305756* +X0463479Y0305818* +X0463428Y0305893* +X0463366Y0305993* +X0463304Y0306106* +X0463253Y0306231* +X0463191Y0306381* +X0463129Y0306543* +X0463066Y0306718* +X0463016Y0306918* +X0462979Y0307131* +X0462941Y0307356* +X0462928Y0307606* +X0462916Y0307868* +Y0307893* +Y0307943* +X0462928Y0308031* +Y0308156* +X0462941Y0308293* +X0462966Y0308468* +X0462991Y0308668* +X0463041Y0308881* +X0463091Y0309106* +X0463154Y0309343* +X0463229Y0309593* +X0463316Y0309856* +X0463428Y0310118* +X0463553Y0310381* +X0463703Y0310643* +X0463866Y0310893* +X0463878Y0310906* +X0463916Y0310956* +X0463966Y0311018* +X0464041Y0311106* +X0464141Y0311206* +X0464254Y0311331* +X0464391Y0311443* +X0464541Y0311581* +X0464716Y0311706* +X0464903Y0311831* +X0465116Y0311943* +X0465341Y0312043* +X0465591Y0312131* +X0465841Y0312193* +X0466116Y0312243* +X0466403Y0312256* +X0466466* +X0466541Y0312243* +X0466641* +X0466753Y0312218* +X0466891Y0312193* +X0467041Y0312156* +X0467204Y0312118* +X0467366Y0312056* +X0467541Y0311981* +X0467716Y0311893* +X0467891Y0311781* +X0468066Y0311656* +X0468228Y0311506* +X0468391Y0311331* +X0468529Y0311131* +X0469316Y0314731* +X0471204* +X0469103Y0305118* +G37* +G36* +X0435578Y0312243D02* +X0435653D01* +X0435741Y0312231* +X0435941Y0312193* +X0436154Y0312131* +X0436378Y0312043* +X0436603Y0311918* +X0436803Y0311756* +X0436829Y0311731* +X0436878Y0311668* +X0436966Y0311556* +X0437053Y0311406* +X0437141Y0311218* +X0437228Y0310981* +X0437279Y0310731* +X0437303Y0310431* +Y0310418* +Y0310356* +X0437291Y0310268* +X0437266Y0310118* +X0437254Y0310031* +X0437241Y0309931* +X0437216Y0309818* +X0437204Y0309693* +X0437166Y0309556* +X0437141Y0309393* +X0437104Y0309231* +X0437066Y0309043* +X0436229Y0305118* +X0434353* +X0435204Y0309056* +Y0309068* +X0435216Y0309093* +Y0309143* +X0435228Y0309193* +X0435266Y0309343* +X0435291Y0309518* +X0435328Y0309706* +X0435354Y0309881* +X0435379Y0310018* +X0435391Y0310081* +Y0310118* +Y0310131* +Y0310181* +X0435379Y0310243* +X0435366Y0310331* +X0435341Y0310418* +X0435303Y0310518* +X0435253Y0310606* +X0435179Y0310693* +X0435166Y0310706* +X0435141Y0310731* +X0435091Y0310756* +X0435029Y0310806* +X0434941Y0310843* +X0434841Y0310868* +X0434716Y0310893* +X0434579Y0310906* +X0434504* +X0434416Y0310893* +X0434304Y0310868* +X0434166Y0310818* +X0434003Y0310756* +X0433828Y0310668* +X0433641Y0310556* +X0433616Y0310543* +X0433554Y0310493* +X0433466Y0310418* +X0433354Y0310306* +X0433216Y0310181* +X0433091Y0310018* +X0432954Y0309831* +X0432841Y0309631* +X0432829Y0309606* +X0432803Y0309543* +X0432779Y0309506* +X0432766Y0309443* +X0432728Y0309368* +X0432703Y0309268* +X0432666Y0309168* +X0432628Y0309043* +X0432591Y0308918* +X0432553Y0308756* +X0432504Y0308593* +X0432466Y0308406* +X0432416Y0308193* +X0432366Y0307968* +X0431766Y0305118* +X0429891* +X0431341Y0312081* +X0433128* +X0432954Y0311168* +X0432966Y0311181* +X0432978Y0311193* +X0433016Y0311231* +X0433066Y0311268* +X0433204Y0311368* +X0433366Y0311493* +X0433554Y0311631* +X0433766Y0311768* +X0433991Y0311893* +X0434203Y0312006* +X0434216* +X0434229Y0312018* +X0434304Y0312043* +X0434429Y0312081* +X0434579Y0312131* +X0434766Y0312181* +X0434978Y0312218* +X0435204Y0312243* +X0435441Y0312256* +X0435529* +X0435578Y0312243* +G37* +G36* +X0173267Y0309835D02* +Y0308644D01* +X0172659Y0308761* +X0172668Y0308752* +X0172676Y0308744* +X0172701Y0308719* +X0172726Y0308686* +X0172792Y0308594* +X0172876Y0308486* +X0172968Y0308361* +X0173059Y0308219* +X0173142Y0308069* +X0173217Y0307928* +Y0307919* +X0173226Y0307911* +X0173242Y0307861* +X0173267Y0307778* +X0173301Y0307678* +X0173334Y0307553* +X0173359Y0307411* +X0173376Y0307261* +X0173384Y0307103* +Y0307095* +Y0307078* +Y0307045* +X0173376Y0307011* +Y0306961* +X0173367Y0306903* +X0173342Y030677* +X0173301Y0306628* +X0173242Y0306478* +X0173159Y0306328* +X0173051Y0306195* +X0173034Y0306178* +X0172993Y0306145* +X0172917Y0306087* +X0172818Y0306028* +X0172693Y030597* +X0172534Y0305912* +X0172368Y0305878* +X0172168Y0305862* +X0172118* +X017206Y030587* +X0171959Y0305887* +X0171901Y0305895* +X0171835Y0305904* +X017176Y030592* +X0171676Y0305928* +X0171585Y0305953* +X0171476Y030597* +X0171368Y0305995* +X0171243Y030602* +X0168628Y0306578* +Y0307828* +X0171251Y0307261* +X017126* +X0171276Y0307253* +X017131* +X0171343Y0307245* +X0171443Y030722* +X017156Y0307203* +X0171685Y0307178* +X0171801Y0307161* +X0171893Y0307145* +X0171934Y0307136* +X0172001* +X0172043Y0307145* +X0172101Y0307153* +X017216Y030717* +X0172226Y0307195* +X0172284Y0307228* +X0172343Y0307278* +X0172351Y0307286* +X0172368Y0307303* +X0172384Y0307336* +X0172418Y0307378* +X0172443Y0307436* +X0172459Y0307503* +X0172476Y0307586* +X0172484Y0307678* +Y0307694* +Y0307728* +X0172476Y0307786* +X0172459Y0307861* +X0172426Y0307953* +X0172384Y0308061* +X0172326Y0308178* +X0172251Y0308302* +X0172243Y0308319* +X0172209Y0308361* +X017216Y0308419* +X0172084Y0308494* +X0172001Y0308586* +X0171893Y0308669* +X0171768Y0308761* +X0171635Y0308836* +X0171618Y0308844* +X0171576Y0308861* +X0171551Y0308877* +X017151Y0308886* +X017146Y0308911* +X0171393Y0308927* +X0171326Y0308952* +X0171243Y0308977* +X017116Y0309002* +X0171052Y0309027* +X0170943Y0309061* +X0170818Y0309085* +X0170677Y0309119* +X0170527Y0309152* +X0168628Y0309552* +Y0310802* +X0173267Y0309835* +G37* +G36* +X0170585Y0316816D02* +X0170643D01* +X017071Y0316807* +X017086Y0316782* +X0170868* +X0170893Y0316774* +X0170935Y0316766* +X017101Y0316757* +X017106Y0316749* +X017111Y0316733* +X0171177Y0316724* +X0171251Y0316707* +X0171335Y0316683* +X0171426Y0316666* +X0171535Y0316641* +X0171651Y0316616* +X0175033Y0315866* +Y031455* +X0171543Y0315325* +X0170693Y0315508* +X0170677* +X0170652Y0315516* +X0170618Y0315525* +X0170527Y0315533* +X017041Y031555* +X0170394* +X0170352Y0315541* +X0170285Y0315533* +X017021Y0315508* +X0170119Y0315475* +X0170019Y0315425* +X0169927Y031535* +X0169835Y031525* +X0169827Y0315233* +X0169802Y0315191* +X016976Y0315125* +X0169727Y0315025* +X0169685Y0314908* +X0169644Y031475* +X0169619Y0314575* +X0169611Y0314375* +Y0314367* +Y031435* +Y0314325* +Y0314292* +X0169619Y0314192* +X0169635Y0314075* +X0169652Y0313942* +X0169685Y03138* +X0169727Y0313659* +X0169785Y0313525* +X0169794Y0313509* +X0169819Y0313467* +X016986Y0313409* +X0169919Y0313334* +X0169994Y031325* +X0170085Y0313159* +X0170194Y0313076* +X0170318Y0313001* +X0170327* +X0170335Y0312992* +X017036Y0312984* +X0170385Y0312967* +X0170427Y0312951* +X0170477Y0312926* +X0170535Y0312909* +X0170602Y0312884* +X0170685Y0312851* +X0170768Y0312826* +X0170868Y0312792* +X0170977Y0312759* +X0171101Y0312726* +X0171235Y0312692* +X0171376Y0312651* +X0171526Y0312617* +X0175033Y0311884* +Y0310577* +X0171401Y0311326* +X0171393* +X0171351Y0311335* +X0171301Y0311351* +X0171227Y0311368* +X0171135Y0311393* +X0171035Y0311418* +X0170918Y0311451* +X0170802Y0311485* +X0170535Y0311568* +X017026Y031166* +X0170002Y0311768* +X0169877Y0311826* +X0169769Y0311884* +X016976* +X0169744Y0311901* +X0169719Y0311918* +X0169677Y0311943* +X0169627Y0311976* +X0169577Y0312018* +X0169444Y0312118* +X0169302Y0312251* +X0169152Y0312409* +X0169002Y0312601* +X0168861Y0312826* +Y0312834* +X0168844Y0312851* +X0168827Y0312892* +X0168802Y0312942* +X0168778Y0313001* +X0168753Y0313076* +X0168719Y0313167* +X0168686Y0313267* +X0168652Y0313375* +X0168619Y0313492* +X0168594Y0313625* +X0168569Y0313767* +X0168544Y0313925* +X0168528Y0314084* +X0168519Y0314258* +X0168511Y0314433* +Y031445* +Y0314483* +Y0314542* +X0168519Y0314625* +X0168528Y0314717* +X0168544Y0314833* +X0168561Y0314958* +X0168578Y0315091* +X0168644Y0315375* +X0168686Y0315525* +X0168744Y0315666* +X0168802Y0315816* +X0168877Y0315958* +X0168961Y0316083* +X0169061Y0316208* +X0169069Y0316216* +X0169086Y0316233* +X0169119Y0316266* +X0169161Y0316308* +X0169211Y0316349* +X0169277Y0316399* +X0169361Y0316458* +X0169444Y0316516* +X0169544Y0316574* +X0169644Y0316633* +X016976Y0316683* +X0169885Y0316724* +X0170019Y0316766* +X017016Y0316799* +X017031Y0316816* +X0170468Y0316824* +X0170535* +X0170585Y0316816* +G37* +G36* +X0173267Y0304387D02* +Y0303138D01* +X0168628Y0304104* +Y0305354* +X0173267Y0304387* +G37* +G36* +X017076Y0301405D02* +X0170702D01* +X017066Y0301397* +X017056Y0301389* +X0170435Y0301372* +X0170293Y0301347* +X017016Y0301314* +X0170044Y0301264* +X0169985Y0301239* +X0169944Y0301205* +X0169927Y0301189* +X0169894Y0301147* +X0169869Y0301114* +X0169835Y0301072* +X016981Y0301022* +X0169777Y0300964* +X0169744Y0300897* +X0169719Y0300814* +X0169685Y030073* +X016966Y0300631* +X0169644Y0300522* +X0169627Y0300406* +X0169611Y0300281* +Y0300139* +Y0300131* +Y0300114* +Y0300081* +Y0300031* +X0169619Y0299981* +Y0299914* +X0169635Y0299781* +X0169669Y0299623* +X0169702Y0299464* +X016976Y0299323* +X0169794Y0299256* +X0169835Y0299198* +X0169844Y0299181* +X0169877Y0299148* +X0169927Y0299106* +X0169994Y0299048* +X0170077Y0298998* +X0170177Y0298948* +X0170285Y0298915* +X0170402Y0298906* +X0170452* +X0170502Y0298915* +X0170568Y029894* +X0170643Y0298965* +X0170727Y0299006* +X017081Y0299064* +X0170885Y0299148* +X0170893Y0299156* +X017091Y0299181* +X0170943Y0299239* +X0170968Y0299281* +X0170993Y0299323* +X0171027Y0299381* +X017106Y0299448* +X0171101Y0299523* +X0171143Y0299606* +X0171185Y0299698* +X0171235Y0299806* +X0171293Y0299931* +X0171351Y0300064* +Y0300073* +X0171368Y0300097* +X0171385Y0300131* +X017141Y0300189* +X0171435Y0300247* +X0171468Y0300314* +X0171543Y0300481* +X0171626Y0300656* +X0171718Y0300839* +X017181Y0301005* +X0171851Y0301089* +X0171893Y0301155* +X0171901Y0301172* +X0171934Y0301214* +X0171976Y0301272* +X0172043Y0301347* +X0172126Y0301439* +X0172218Y030153* +X0172326Y0301613* +X0172451Y0301697* +X0172468Y0301705* +X0172509Y030173* +X0172584Y0301755* +X0172684Y0301788* +X0172801Y030183* +X0172942Y0301855* +X0173101Y030188* +X0173267Y0301888* +X0173342* +X0173401Y030188* +X0173467Y0301872* +X0173551Y0301855* +X0173642Y0301838* +X0173742Y0301813* +X0173842Y0301788* +X017395Y0301747* +X0174059Y0301697* +X0174175Y0301639* +X0174284Y0301572* +X01744Y0301497* +X0174509Y0301405* +X0174609Y0301305* +X0174617Y0301297* +X0174634Y030128* +X0174659Y0301247* +X0174692Y0301197* +X0174733Y0301139* +X0174783Y0301064* +X0174825Y0300972* +X0174883Y0300872* +X0174933Y0300764* +X0174975Y0300639* +X0175025Y0300497* +X0175067Y0300347* +X01751Y0300181* +X0175125Y0300006* +X0175142Y0299814* +X017515Y0299614* +Y0299598* +Y0299564* +Y0299506* +X0175142Y0299431* +X0175133Y0299331* +X0175125Y0299223* +X0175108Y0299098* +X0175083Y0298973* +X0175017Y029869* +X0174975Y029854* +X0174925Y0298398* +X0174867Y0298256* +X0174792Y0298115* +X0174708Y029799* +X0174617Y0297865* +X0174609Y0297857* +X0174592Y029784* +X0174567Y0297807* +X0174525Y0297765* +X0174467Y0297723* +X0174409Y0297665* +X0174334Y0297607* +X0174242Y0297549* +X017415Y029749* +X0174042Y0297424* +X0173925Y0297374* +X0173801Y0297315* +X0173667Y0297274* +X0173526Y0297232* +X0173367Y0297199* +X0173209Y0297182* +X0173159Y0298448* +X0173176* +X0173201Y0298456* +X0173234* +X0173317Y0298481* +X0173417Y0298506* +X0173534Y0298548* +X0173651Y0298606* +X0173759Y0298681* +X0173859Y0298781* +X0173867Y0298798* +X01739Y0298831* +X0173942Y0298898* +X0173984Y029899* +X0174034Y0299114* +X0174067Y0299256* +X01741Y0299423* +X0174109Y0299623* +Y0299631* +Y0299648* +Y0299673* +Y0299714* +X01741Y0299806* +X0174084Y0299922* +X0174059Y0300047* +X0174025Y0300181* +X0173975Y0300297* +X0173909Y0300397* +X01739Y0300406* +X0173875Y0300431* +X0173834Y0300472* +X0173775Y0300514* +X0173709Y0300556* +X0173626Y0300597* +X0173534Y0300622* +X0173426Y0300631* +X0173384* +X0173326Y0300622* +X0173267Y0300606* +X0173192Y0300581* +X0173117Y0300539* +X0173042Y0300489* +X0172968Y0300422* +X0172959Y0300414* +X0172934Y0300381* +X0172892Y0300314* +X0172868Y0300272* +X0172834Y0300222* +X0172801Y0300164* +X0172768Y0300097* +X0172726Y0300014* +X0172676Y0299931* +X0172634Y0299831* +X0172584Y0299723* +X0172526Y0299606* +X0172468Y0299473* +X0172459Y0299456* +X0172443Y0299423* +X0172418Y0299364* +X0172384Y0299298* +X0172351Y0299206* +X0172301Y0299106* +X0172251Y0298998* +X0172193Y0298881* +X0172068Y029864* +X0171934Y0298415* +X0171876Y0298306* +X017181Y0298215* +X0171751Y0298132* +X0171693Y0298065* +X0171685Y0298057* +X0171676Y0298048* +X0171651Y0298023* +X017161Y029799* +X0171568Y0297957* +X0171518Y0297923* +X017146Y0297882* +X0171385Y0297832* +X0171227Y0297748* +X0171027Y0297682* +X017081Y0297623* +X0170685Y0297615* +X017056Y0297607* +X0170527* +X0170477Y0297615* +X0170419* +X0170343Y0297623* +X017026Y029764* +X0170169Y0297665* +X017006Y029769* +X0169952Y0297723* +X0169835Y0297773* +X016971Y0297823* +X0169594Y029789* +X0169469Y0297965* +X0169344Y0298057* +X0169227Y0298165* +X0169111Y0298282* +X0169102Y029829* +X0169086Y0298315* +X0169052Y0298348* +X0169019Y0298407* +X0168969Y0298473* +X0168919Y0298556* +X0168869Y0298656* +X0168811Y0298765* +X0168753Y029889* +X0168702Y0299031* +X0168652Y0299189* +X0168603Y0299356* +X0168569Y0299531* +X0168536Y0299723* +X0168519Y0299931* +X0168511Y0300147* +Y0300156* +Y0300181* +Y0300231* +X0168519Y0300289* +Y0300356* +X0168528Y0300439* +X0168536Y0300531* +X0168544Y0300639* +X0168578Y0300855* +X0168628Y0301097* +X0168694Y0301347* +X0168786Y030158* +Y0301589* +X0168802Y0301605* +X0168811Y0301639* +X0168836Y030168* +X0168861Y030173* +X0168902Y0301788* +X0168986Y0301913* +X0169094Y0302055* +X0169227Y0302197* +X0169377Y030233* +X016946Y0302388* +X0169552Y0302438* +X0169561* +X0169577Y0302447* +X0169602Y0302463* +X0169644Y030248* +X0169685Y0302497* +X0169744Y0302513* +X016981Y0302538* +X0169885Y0302563* +X0170052Y0302605* +X0170244Y0302638* +X017046Y0302663* +X0170693* +X017076Y0301405* +G37* +G36* +X0175033Y0304021D02* +Y0302763D01* +X01739Y0303005* +Y0304254* +X0175033Y0304021* +G37* +G36* +X0433478Y0405708D02* +Y0404294D01* +X0434892Y040288* +Y0401466* +X0435953Y0400405* +Y0396869* +X043666Y0396162* +Y0392627* +X0435953Y039192* +Y0388384* +X0434892Y0387323* +Y0385909* +X0433478Y0384495* +Y0383081* +X0427821Y0377424* +X0427114* +X0425346Y0375656* +X0423932* +X0422871Y0374595* +X042075* +X0420043Y0373888* +X0411557* +X041085Y0374595* +X0408729* +X0407668Y0375656* +X0406254* +X040484Y037707* +X0404133* +X0401304Y0379899* +X04158Y0394394* +X0430296Y040889* +X0433478Y0405708* +G37* +G36* +X0522352Y0474354D02* +X0523351D01* +X0526351Y0471354* +Y0470354* +X0527851Y0468854* +Y0466854* +X0528351Y0466354* +Y0465354* +X0519851* +X0521851Y0467354* +Y0470854* +X0519351Y0473354* +X0516352* +X0513851Y0470854* +Y0467854* +X0516352Y0465354* +X0507852* +Y0468354* +X0508851Y0469354* +Y0470854* +X0511852Y0473854* +X0512851* +X0514352Y0475354* +X0521351* +X0522352Y0474354* +G37* +G36* +X0555992Y0411527D02* +X0557992D01* +X0558992Y0410528* +X0560492* +X0562992Y0408028* +X0563992* +X0566492Y0405527* +Y0404528* +X0568992Y0402028* +Y0400527* +X0569992Y0399528* +Y0397528* +X0570992Y0396528* +Y0388527* +X0570492Y0388028* +Y0385527* +X0569492Y0384527* +Y0383028* +X0567992Y0381527* +Y0380527* +X0561992Y0374528* +X0560992* +X0559492Y0373027* +X0557992* +X0556992Y0372027* +X0554992* +X0554492Y0371528* +X0550492* +Y0392027* +Y0412528* +X0554992* +X0555992Y0411527* +G37* +G36* +X0489173Y0349803D02* +Y0329303D01* +X0484673* +X0483673Y0330303* +X0481673* +X0480673Y0331303* +X0479173* +X0476673Y0333803* +X0475673* +X0473173Y0336303* +Y0337303* +X0470673Y0339803* +Y0341303* +X0469673Y0342303* +Y0344303* +X0468673Y0345303* +Y0353303* +X0469173Y0353803* +Y0356303* +X0470173Y0357303* +Y0358803* +X0471673Y0360303* +Y0361303* +X0477673Y0367303* +X0478673* +X0480173Y0368803* +X0481673* +X0482673Y0369803* +X0484673* +X0485173Y0370303* +X0489173* +Y0349803* +G37* +G36* +X0533945Y0377768D02* +X0535945D01* +X0536945Y0376768* +X0538445* +X0540945Y0374268* +X0541945* +X0544445Y0371768* +Y0370768* +X0546945Y0368268* +Y0366768* +X0547945Y0365768* +Y0363768* +X0548945Y0362768* +Y0354768* +X0548445Y0354268* +Y0351768* +X0547445Y0350768* +Y0349268* +X0545945Y0347768* +Y0346768* +X0539945Y0340768* +X0538945* +X0537445Y0339268* +X0535945* +X0534945Y0338268* +X0532945* +X0532445Y0337768* +X0528445* +Y0358268* +Y0378768* +X0532945* +X0533945Y0377768* +G37* +G36* +X0170677Y0296715D02* +X0170768D01* +X0170877Y0296699* +X0171002Y0296682* +X0171143Y0296666* +X0171293Y0296632* +X0171451Y029659* +X0171618Y0296549* +X0171793Y0296491* +X0171968Y0296416* +X0172134Y0296332* +X0172301Y0296241* +X0172459Y0296124* +X0172609Y0295999* +X0172618Y0295991* +X0172643Y0295966* +X0172684Y0295924* +X0172734Y0295866* +X0172792Y0295791* +X0172851Y0295708* +X0172926Y0295608* +X0173001Y0295491* +X0173067Y0295358* +X0173142Y0295216* +X0173201Y0295058* +X0173267Y0294891* +X0173309Y0294708* +X0173351Y0294516* +X0173376Y0294308* +X0173384Y0294092* +Y0294083* +Y029405* +Y0293992* +X0173376Y0293925* +X0173367Y0293833* +X0173351Y0293733* +X0173334Y0293625* +X0173309Y0293508* +X0173284Y0293384* +X0173242Y029325* +X0173201Y0293117* +X0173142Y0292984* +X0173076Y029285* +X0173001Y0292725* +X0172909Y02926* +X0172809Y0292492* +X0172801Y0292484* +X0172784Y0292467* +X0172751Y0292442* +X0172709Y0292401* +X0172651Y0292359* +X0172576Y0292309* +X0172501Y0292251* +X0172409Y0292201* +X0172301Y0292142* +X0172184Y0292092* +X017206Y0292042* +X0171926Y0292001* +X0171785Y0291959* +X0171626Y0291934* +X017146Y0291917* +X0171285Y0291909* +X0171235* +X0171177Y0291917* +X0171093* +X0170993Y0291934* +X0170885Y0291951* +X0170752Y0291967* +X0170618Y0292001* +X0170468Y0292034* +X017031Y0292084* +X0170144Y0292142* +X0169985Y0292217* +X016981Y0292301* +X0169652Y0292392* +X0169485Y0292509* +X0169327Y0292634* +X0169319Y0292642* +X0169294Y0292667* +X0169252Y0292709* +X0169202Y0292767* +X0169136Y0292834* +X0169069Y0292925* +X0168994Y0293025* +X0168919Y0293142* +X0168844Y0293275* +X0168769Y0293417* +X0168702Y0293575* +X0168636Y029375* +X0168586Y0293933* +X0168544Y0294133* +X0168519Y0294341* +X0168511Y0294566* +Y0294575* +Y0294591* +Y0294633* +X0168519Y0294675* +Y0294733* +X0168528Y02948* +X0168544Y0294958* +X0168578Y0295133* +X0168619Y0295333* +X0168686Y0295524* +X0168769Y0295724* +Y0295732* +X0168786Y0295749* +X0168794Y0295774* +X0168819Y0295808* +X0168877Y0295899* +X0168961Y0296007* +X0169069Y0296132* +X0169194Y0296257* +X0169344Y0296374* +X016951Y0296482* +X0169519* +X0169536Y0296491* +X0169561Y0296507* +X0169594Y0296515* +X0169644Y029654* +X0169694Y0296557* +X0169819Y0296599* +X0169977Y0296649* +X0170152Y0296682* +X0170343Y0296715* +X0170552Y0296724* +X017061* +X0170677Y0296715* +G37* +G36* +X0170568Y0288785D02* +X0170652D01* +X0170743Y0288777* +X017086Y028876* +X0170993Y0288744* +X0171135Y028871* +X0171285Y0288677* +X0171443Y0288635* +X017161Y0288585* +X0171785Y0288527* +X0171959Y0288452* +X0172134Y0288369* +X0172309Y0288269* +X0172476Y0288161* +X0172484Y0288152* +X0172518Y0288127* +X0172559Y0288094* +X0172618Y0288044* +X0172684Y0287977* +X0172768Y0287902* +X0172843Y0287811* +X0172934Y0287711* +X0173018Y0287594* +X0173101Y0287469* +X0173176Y0287328* +X0173242Y0287178* +X0173301Y0287011* +X0173342Y0286844* +X0173376Y0286661* +X0173384Y028647* +Y0286461* +Y0286428* +X0173376Y0286378* +Y0286311* +X0173359Y0286236* +X0173342Y0286145* +X0173317Y0286045* +X0173292Y0285936* +X0173251Y0285828* +X0173201Y0285712* +X0173142Y0285595* +X0173067Y0285478* +X0172984Y0285362* +X0172884Y0285253* +X0172768Y0285145* +X0172634Y0285053* +X0175033Y0284529* +Y0283271* +X0168628Y028467* +Y0285861* +X0169119Y0285761* +X0169102Y0285778* +X0169069Y028582* +X0169011Y0285887* +X0168936Y028597* +X0168861Y0286078* +X0168786Y0286186* +X0168711Y0286311* +X0168652Y0286436* +X0168644Y0286453* +X0168628Y0286495* +X0168611Y0286561* +X0168586Y0286653* +X0168553Y0286761* +X0168536Y0286886* +X0168519Y0287028* +X0168511Y0287178* +Y0287186* +Y0287211* +Y0287244* +X0168519Y0287294* +X0168528Y0287361* +X0168536Y0287427* +X0168569Y0287594* +X0168628Y0287786* +X0168669Y0287877* +X0168719Y0287977* +X0168778Y0288077* +X0168844Y0288169* +X0168919Y0288261* +X0169002Y0288352* +X0169011Y0288361* +X0169027Y0288369* +X0169052Y0288394* +X0169094Y0288419* +X0169144Y0288452* +X0169211Y0288494* +X0169286Y0288535* +X0169369Y0288569* +X0169469Y028861* +X0169577Y0288652* +X0169694Y0288694* +X0169827Y0288727* +X0169969Y0288752* +X0170119Y0288777* +X0170285Y0288785* +X017046Y0288794* +X017051* +X0170568Y0288785* +G37* +G36* +X0173267Y0277623D02* +Y0276449D01* +X0172376Y027664* +X0172384Y0276632* +X0172418Y0276607* +X0172468Y0276573* +X0172534Y0276523* +X0172609Y0276465* +X0172693Y027639* +X0172784Y0276307* +X0172884Y0276215* +X0172976Y0276115* +X0173067Y0276007* +X0173151Y0275882* +X0173226Y0275757* +X0173292Y0275632* +X0173342Y0275499* +X0173376Y0275357* +X0173384Y0275216* +Y0275207* +Y0275166* +X0173376Y0275116* +X0173367Y0275041* +X0173351Y0274957* +X0173326Y0274857* +X0173292Y0274749* +X0173242Y0274633* +X0172218Y0275116* +Y0275124* +X0172226Y0275149* +X0172243Y0275182* +X0172251Y0275224* +X0172268Y0275282* +X0172276Y0275341* +X0172284Y0275482* +Y0275499* +Y0275541* +X0172268Y0275599* +X0172251Y0275682* +X0172226Y0275782* +X0172176Y0275899* +X0172118Y0276015* +X0172035Y027614* +X0172026Y0276157* +X0171993Y0276199* +X0171934Y0276257* +X017186Y0276332* +X0171768Y0276415* +X0171651Y0276499* +X0171526Y027659* +X0171376Y0276665* +X0171368* +X017136Y0276674* +X0171335Y0276682* +X0171301Y0276698* +X0171251Y0276715* +X0171202Y0276732* +X0171135Y0276757* +X017106Y0276782* +X0170977Y0276815* +X0170877Y027684* +X0170777Y0276873* +X017066Y0276907* +X0170527Y027694* +X0170385Y0276973* +X0170235Y0277007* +X0170077Y027704* +X0168628Y027734* +Y0278589* +X0173267Y0277623* +G37* +G36* +X0170827Y0283329D02* +X017091Y0283321D01* +X017101Y0283313* +X0171118Y0283296* +X0171243Y0283271* +X0171368Y0283246* +X017151Y0283212* +X0171651Y0283163* +X0171793Y0283113* +X0171943Y0283054* +X0172084Y0282988* +X0172234Y0282904* +X0172376Y0282813* +X0172384Y0282804* +X0172418Y0282779* +X0172468Y0282738* +X0172534Y0282679* +X0172609Y0282604* +X0172693Y0282513* +X0172784Y0282413* +X0172884Y0282288* +X0172976Y0282146* +X0173067Y0281996* +X0173151Y028183* +X0173226Y0281638* +X0173292Y0281447* +X0173342Y028123* +X0173376Y0280997* +X0173384Y0280755* +Y0280747* +Y0280714* +Y0280672* +X0173376Y0280614* +X0173367Y0280539* +X0173359Y0280464* +X0173342Y0280364* +X0173317Y0280264* +X0173251Y0280055* +X0173209Y0279939* +X0173159Y0279831* +X0173101Y0279714* +X0173026Y0279606* +X0172942Y0279506* +X0172851Y0279406* +X0172843Y0279397* +X0172826Y0279381* +X0172792Y0279356* +X0172751Y0279322* +X0172701Y0279289* +X0172634Y0279247* +X0172559Y0279198* +X0172468Y0279148* +X0172368Y0279106* +X0172259Y0279056* +X0172143Y0279014* +X017201Y0278973* +X0171868Y0278948* +X017171Y0278923* +X0171551Y0278906* +X0171376Y0278898* +X0171301* +X017121Y0278906* +X0171101* +X0170977Y0278923* +X0170835Y0278939* +X0170702Y0278956* +X017056Y0278989* +Y028213* +X0170519* +X0170477Y0282138* +X0170402* +X0170369Y028213* +X0170285Y0282121* +X0170177Y0282105* +X0170052Y0282071* +X0169927Y0282021* +X016981Y0281963* +X0169694Y0281871* +X0169685Y0281863* +X0169652Y0281821* +X0169602Y0281763* +X0169552Y0281688* +X0169502Y0281596* +X0169452Y0281488* +X0169419Y0281363* +X0169411Y028123* +Y0281222* +Y0281205* +X0169419Y0281172* +Y028113* +X0169427Y0281072* +X0169444Y0281013* +X0169494Y0280872* +X0169527Y0280797* +X0169569Y0280714* +X0169619Y028063* +X0169685Y0280555* +X016976Y0280472* +X0169844Y0280389* +X0169944Y0280314* +X017006Y0280247* +X0169869Y0279122* +X016986* +X0169835Y0279139* +X0169802Y0279156* +X016976Y0279181* +X0169702Y0279214* +X0169635Y0279256* +X0169485Y0279356* +X0169319Y0279481* +X0169152Y0279639* +X0168986Y0279806* +X0168844Y0280006* +Y0280014* +X0168827Y028003* +X0168811Y0280064* +X0168794Y0280105* +X0168769Y0280155* +X0168736Y0280214* +X0168711Y0280289* +X0168677Y0280364* +X0168619Y0280547* +X0168561Y0280755* +X0168528Y028098* +X0168511Y028123* +Y0281238* +Y0281272* +Y0281322* +X0168519Y0281388* +X0168528Y0281463* +X0168544Y0281555* +X0168561Y0281663* +X0168586Y0281771* +X0168619Y0281888* +X0168652Y0282013* +X0168702Y0282146* +X0168761Y0282271* +X0168827Y0282396* +X0168911Y0282521* +X0169002Y0282638* +X0169102Y0282754* +X0169111Y0282763* +X0169127Y0282779* +X0169161Y0282804* +X0169211Y0282846* +X0169269Y0282888* +X0169344Y0282938* +X0169427Y0282988* +X0169519Y0283046* +X0169627Y0283096* +X0169744Y0283154* +X0169877Y0283204* +X017001Y0283246* +X017016Y0283288* +X0170318Y0283313* +X0170493Y0283329* +X0170668Y0283337* +X017076* +X0170827Y0283329* +G37* +G36* +X0175033Y0290118D02* +Y028886D01* +X0168628Y0290201* +Y0291451* +X0175033Y0290118* +G37* +G36* +X0322702Y047834D02* +X0322615D01* +X0322552Y0478328* +X0322402Y0478315* +X0322215Y047829* +X0322002Y0478253* +X0321802Y0478203* +X0321627Y0478128* +X032154Y047809* +X0321477Y047804* +X0321452Y0478015* +X0321402Y0477953* +X0321365Y0477903* +X0321315Y047784* +X0321277Y0477765* +X0321227Y0477678* +X0321177Y0477578* +X032114Y0477453* +X032109Y0477328* +X0321052Y0477178* +X0321027Y0477015* +X0321002Y047684* +X0320977Y0476653* +Y047644* +Y0476428* +Y0476403* +Y0476353* +Y0476278* +X032099Y0476203* +Y0476103* +X0321015Y0475903* +X0321065Y0475665* +X0321115Y0475428* +X0321202Y0475215* +X0321252Y0475115* +X0321315Y0475028* +X0321327Y0475003* +X0321377Y0474953* +X0321452Y047489* +X0321552Y0474803* +X0321677Y0474728* +X0321827Y0474653* +X032199Y0474603* +X0322165Y047459* +X032224* +X0322315Y0474603* +X0322415Y047464* +X0322527Y0474678* +X0322652Y047474* +X0322777Y0474828* +X032289Y0474953* +X0322902Y0474965* +X0322927Y0475003* +X0322977Y047509* +X0323015Y0475153* +X0323052Y0475215* +X0323102Y0475303* +X0323152Y0475403* +X0323215Y0475515* +X0323277Y047564* +X032334Y0475778* +X0323415Y047594* +X0323502Y0476128* +X032359Y0476328* +Y047634* +X0323615Y0476378* +X032364Y0476428* +X0323677Y0476515* +X0323715Y0476603* +X0323765Y0476703* +X0323877Y0476953* +X0324002Y0477215* +X032414Y047749* +X0324277Y047774* +X032434Y0477865* +X0324402Y0477965* +X0324415Y047799* +X0324465Y0478053* +X0324527Y047814* +X0324627Y0478253* +X0324752Y047839* +X032489Y0478528* +X0325052Y0478653* +X032524Y0478778* +X0325265Y047879* +X0325327Y0478828* +X032544Y0478865* +X032559Y0478915* +X0325765Y0478978* +X0325977Y0479015* +X0326215Y0479053* +X0326465Y0479065* +X0326577* +X0326665Y0479053* +X0326765Y047904* +X032689Y0479015* +X0327027Y047899* +X0327177Y0478953* +X0327327Y0478915* +X032749Y0478853* +X0327652Y0478778* +X0327827Y047869* +X032799Y047859* +X0328165Y0478478* +X0328327Y047834* +X0328477Y047819* +X032849Y0478178* +X0328515Y0478153* +X0328552Y0478103* +X0328602Y0478028* +X0328665Y047794* +X032874Y0477828* +X0328802Y047769* +X032889Y047754* +X0328965Y0477378* +X0329027Y047719* +X0329102Y0476978* +X0329165Y0476753* +X0329215Y0476503* +X0329252Y047624* +X0329277Y0475953* +X032929Y0475653* +Y0475628* +Y0475578* +Y047549* +X0329277Y0475378* +X0329265Y0475228* +X0329252Y0475065* +X0329227Y0474878* +X032919Y047469* +X032909Y0474265* +X0329027Y047404* +X0328952Y0473828* +X0328865Y0473615* +X0328752Y0473403* +X0328627Y0473215* +X032849Y0473028* +X0328477Y0473015* +X0328452Y047299* +X0328415Y047294* +X0328352Y0472878* +X0328265Y0472815* +X0328177Y0472728* +X0328065Y047264* +X0327927Y0472553* +X032779Y0472465* +X0327627Y0472365* +X0327452Y047229* +X0327265Y0472203* +X0327065Y047214* +X0326852Y0472078* +X0326615Y0472028* +X0326377Y0472003* +X0326302Y0473903* +X0326327* +X0326365Y0473915* +X0326415* +X032654Y0473953* +X032669Y047399* +X0326865Y0474053* +X032704Y047414* +X0327202Y0474253* +X0327352Y0474403* +X0327365Y0474428* +X0327415Y0474478* +X0327477Y0474578* +X032754Y0474715* +X0327615Y0474903* +X0327665Y0475115* +X0327715Y0475365* +X0327727Y0475665* +Y0475678* +Y0475703* +Y047574* +Y0475803* +X0327715Y047594* +X032769Y0476115* +X0327652Y0476303* +X0327602Y0476503* +X0327527Y0476678* +X0327427Y0476828* +X0327415Y047684* +X0327377Y0476878* +X0327315Y047694* +X0327227Y0477003* +X0327127Y0477065* +X0327002Y0477128* +X0326865Y0477165* +X0326702Y0477178* +X032664* +X0326552Y0477165* +X0326465Y047714* +X0326352Y0477103* +X032624Y047704* +X0326127Y0476965* +X0326015Y0476865* +X0326002Y0476853* +X0325965Y0476803* +X0325902Y0476703* +X0325865Y047664* +X0325815Y0476565* +X0325765Y0476478* +X0325715Y0476378* +X0325652Y0476253* +X0325577Y0476128* +X0325515Y0475978* +X032544Y0475815* +X0325352Y047564* +X0325265Y047544* +X0325252Y0475415* +X0325227Y0475365* +X032519Y0475278* +X032514Y0475178* +X032509Y047504* +X0325015Y047489* +X032494Y0474728* +X0324852Y0474553* +X0324665Y047419* +X0324465Y0473853* +X0324377Y047369* +X0324277Y0473553* +X032419Y0473428* +X0324102Y0473328* +X032409Y0473315* +X0324077Y0473303* +X032404Y0473265* +X0323977Y0473215* +X0323915Y0473165* +X032384Y0473115* +X0323752Y0473053* +X032364Y0472978* +X0323402Y0472853* +X0323102Y0472753* +X0322777Y0472665* +X032259Y0472653* +X0322402Y047264* +X0322352* +X0322277Y0472653* +X032219* +X0322077Y0472665* +X0321952Y047269* +X0321815Y0472728* +X0321652Y0472765* +X032149Y0472815* +X0321315Y047289* +X0321127Y0472965* +X0320952Y0473065* +X0320765Y0473178* +X0320577Y0473315* +X0320402Y0473478* +X0320227Y0473653* +X0320215Y0473665* +X032019Y0473703* +X032014Y0473753* +X032009Y047384* +X0320015Y047394* +X031994Y0474065* +X0319865Y0474215* +X0319777Y0474378* +X031969Y0474565* +X0319615Y0474778* +X031954Y0475015* +X0319465Y0475265* +X0319415Y0475528* +X0319365Y0475815* +X031934Y0476128* +X0319327Y0476453* +Y0476465* +Y0476503* +Y0476578* +X031934Y0476665* +Y0476765* +X0319352Y047689* +X0319365Y0477028* +X0319377Y047719* +X0319427Y0477515* +X0319502Y0477878* +X0319602Y0478253* +X031974Y0478603* +Y0478615* +X0319765Y047864* +X0319777Y047869* +X0319815Y0478753* +X0319852Y0478828* +X0319915Y0478915* +X032004Y0479103* +X0320202Y0479315* +X0320402Y0479528* +X0320627Y0479728* +X0320752Y0479815* +X032089Y047989* +X0320902* +X0320927Y0479903* +X0320965Y0479928* +X0321027Y0479953* +X032109Y0479978* +X0321177Y0480003* +X0321277Y048004* +X032139Y0480078* +X032164Y048014* +X0321927Y048019* +X0322252Y0480228* +X0322602* +X0322702Y047834* +G37* +%LNunisolder52_full-2*% +%LPC*% +G36* +X0321527Y0461553D02* +X0321477D01* +X0321415Y046154* +X0321327Y0461528* +X032124Y0461503* +X0321152Y0461453* +X0321052Y0461403* +X0320965Y0461328* +X0320952Y0461315* +X0320927Y046129* +X032089Y0461228* +X0320852Y0461165* +X0320815Y0461065* +X0320777Y0460965* +X0320752Y046084* +X032074Y0460703* +Y0460678* +Y0460628* +X0320752Y0460553* +X0320765Y046044* +X032079Y0460315* +X0320827Y046019* +X0320877Y046004* +X032094Y0459903* +X0320952Y045989* +X0320977Y045984* +X0321027Y0459778* +X032109Y045969* +X0321165Y0459603* +X0321252Y0459503* +X0321365Y0459415* +X0321477Y045934* +X032149Y0459328* +X032154Y0459303* +X0321615Y0459278* +X0321727Y0459228* +X0321877Y0459178* +X0322052Y0459115* +X0322265Y0459065* +X0322502Y0459003* +X0322765Y0458953* +Y0458965* +X0322752Y0458978* +Y0459028* +X032274Y0459078* +X0322727Y045914* +X0322702Y0459215* +X0322677Y0459403* +Y0459415* +X0322665Y0459465* +Y045954* +X032264Y0459628* +X0322627Y045974* +X0322602Y0459878* +X0322552Y0460165* +X0322477Y0460478* +X032239Y0460778* +X032234Y0460915* +X032229Y0461053* +X0322227Y0461165* +X0322165Y0461253* +X0322152Y0461265* +X0322127Y0461303* +X0322065Y0461353* +X0322002Y0461403* +X0321902Y0461453* +X0321802Y0461503* +X0321665Y046154* +X0321527Y0461553* +G37* +G36* +X0454979Y0310843D02* +X0454879D01* +X0454766Y0310818* +X0454616Y0310793* +X0454441Y0310743* +X0454266Y0310681* +X0454078Y0310581* +X0453891Y0310456* +X0453866Y0310443* +X0453816Y0310381* +X0453728Y0310293* +X0453616Y0310181* +X0453504Y0310018* +X0453378Y0309831* +X0453266Y0309606* +X0453154Y0309356* +Y0309343* +X0453141Y0309318* +X0453128Y0309281* +X0453116Y0309231* +X0453079Y0309093* +X0453028Y0308918* +X0452979Y0308706* +X0452941Y0308481* +X0452916Y0308256* +X0452904Y0308018* +Y0308006* +Y0307981* +Y0307943* +X0452916Y0307893* +X0452928Y0307756* +X0452953Y0307593* +X0453004Y0307393* +X0453079Y0307206* +X0453166Y0307006* +X0453303Y0306831* +X0453329Y0306818* +X0453378Y0306768* +X0453466Y0306693* +X0453591Y0306618* +X0453741Y0306531* +X0453916Y0306468* +X0454104Y0306418* +X0454328Y0306393* +X0454403* +X0454454Y0306406* +X0454603Y0306431* +X0454778Y0306481* +X0454991Y0306556* +X0455203Y0306668* +X0455316Y0306743* +X0455429Y0306843* +X0455528Y0306943* +X0455628Y0307056* +X0455641Y0307068* +X0455666Y0307093* +X0455703Y0307156* +X0455741Y0307218* +X0455803Y0307318* +X0455866Y0307431* +X0455929Y0307556* +X0456004Y0307693* +X0456078Y0307856* +X0456141Y0308031* +X0456204Y0308218* +X0456266Y0308418* +X0456304Y0308643* +X0456341Y0308868* +X0456366Y0309106* +X0456379Y0309356* +Y0309368* +Y0309381* +Y0309418* +Y0309468* +X0456354Y0309593* +X0456328Y0309743* +X0456279Y0309918* +X0456216Y0310093* +X0456116Y0310268* +X0455978Y0310431* +X0455966Y0310443* +X0455903Y0310493* +X0455829Y0310556* +X0455703Y0310643* +X0455566Y0310718* +X0455391Y0310781* +X0455203Y0310831* +X0454979Y0310843* +G37* +G36* +X0424639Y0392627D02* +X0421103D01* +X0419336Y0390859* +X0417568Y0389091* +Y0385556* +X0421103Y038202* +X0424639* +X0428174Y0385556* +Y0389091* +X0424639Y0392627* +G37* +G36* +X0562992Y0397027D02* +X0557992D01* +X0555492Y0394528* +Y0392027* +Y0389528* +X0557992Y0387028* +X0562992* +X0565492Y0389528* +Y0394528* +X0562992Y0397027* +G37* +G36* +X0466653Y0310868D02* +X0466578D01* +X0466516Y0310856* +X0466441Y0310843* +X0466366Y0310818* +X0466166Y0310756* +X0466066Y0310706* +X0465953Y0310643* +X0465841Y0310568* +X0465716Y0310481* +X0465603Y0310368* +X0465491Y0310243* +X0465379Y0310106* +X0465278Y0309943* +Y0309931* +X0465253Y0309906* +X0465229Y0309856* +X0465191Y0309781* +X0465154Y0309693* +X0465103Y0309593* +X0465066Y0309481* +X0465016Y0309343* +X0464966Y0309206* +X0464916Y0309043* +X0464828Y0308706* +X0464766Y0308343* +X0464753Y0308143* +X0464741Y0307943* +Y0307931* +Y0307906* +Y0307868* +X0464753Y0307818* +X0464766Y0307681* +X0464791Y0307518* +X0464828Y0307331* +X0464903Y0307131* +X0464991Y0306943* +X0465116Y0306768* +X0465129Y0306756* +X0465191Y0306706* +X0465266Y0306643* +X0465379Y0306568* +X0465516Y0306481* +X0465679Y0306418* +X0465854Y0306368* +X0466053Y0306356* +X0466141* +X0466241Y0306381* +X0466378Y0306406* +X0466529Y0306443* +X0466691Y0306506* +X0466854Y0306593* +X0467029Y0306706* +X0467054Y0306718* +X0467103Y0306768* +X0467191Y0306856* +X0467291Y0306968* +X0467404Y0307118* +X0467516Y0307306* +X0467641Y0307531* +X0467741Y0307781* +Y0307793* +X0467754Y0307818* +X0467766Y0307856* +X0467778Y0307906* +X0467829Y0308043* +X0467878Y0308231* +X0467929Y0308443* +X0467978Y0308668* +X0468004Y0308918* +X0468016Y0309168* +Y0309181* +Y0309206* +Y0309243* +Y0309293* +X0467991Y0309431* +X0467966Y0309606* +X0467916Y0309806* +X0467841Y0310006* +X0467741Y0310206* +X0467603Y0310393* +X0467591Y0310418* +X0467528Y0310468* +X0467441Y0310543* +X0467329Y0310631* +X0467191Y0310718* +X0467029Y0310793* +X0466854Y0310843* +X0466653Y0310868* +G37* +G36* +X0322465Y0469078D02* +X032239D01* +X0322327Y0469065* +X0322177Y0469053* +X0322002Y0469028* +X032179Y0468978* +X0321577Y0468903* +X0321377Y0468815* +X032119Y0468678* +X0321165Y0468665* +X0321115Y0468603* +X0321052Y0468528* +X0320965Y0468415* +X0320877Y0468278* +X0320815Y0468115* +X0320765Y046794* +X032074Y046774* +Y0467715* +Y0467665* +X0320752Y0467565* +X0320777Y0467453* +X0320827Y0467315* +X0320877Y0467165* +X0320965Y0467003* +X0321077Y046684* +X032109Y0466815* +X032114Y0466765* +X0321227Y046669* +X032134Y046659* +X0321502Y0466465* +X032169Y0466353* +X0321927Y0466228* +X0322202Y0466115* +X0322215* +X032224Y0466103* +X0322277Y046609* +X032234Y0466065* +X0322402Y0466053* +X032249Y0466028* +X0322677Y0465965* +X0322902Y0465915* +X0323152Y0465878* +X0323415Y046584* +X0323665Y0465828* +X032379* +X032394Y0465853* +X0324115Y0465878* +X0324302Y0465915* +X0324502Y046599* +X032469Y0466078* +X0324865Y0466203* +X0324877Y0466215* +X0324927Y0466265* +X0325002Y0466353* +X0325077Y0466465* +X0325152Y0466603* +X0325227Y0466765* +X0325277Y0466953* +X032529Y0467165* +Y046719* +Y0467253* +X0325265Y0467353* +X032524Y046749* +X032519Y046764* +X0325127Y0467803* +X0325027Y0467978* +X0324902Y0468153* +X032489Y0468178* +X0324827Y0468228* +X032474Y0468303* +X0324615Y0468403* +X0324452Y0468515* +X0324265Y0468628* +X0324027Y046874* +X0323765Y046884* +X0323752* +X0323727Y0468853* +X032369Y0468865* +X032364Y0468878* +X0323502Y0468915* +X0323327Y0468953* +X0323127Y0469003* +X0322902Y046904* +X0322677Y0469065* +X0322465Y0469078* +G37* +G36* +X0474779Y0310906D02* +X0474754D01* +X0474679Y0310893* +X0474566Y0310881* +X0474429Y0310856* +X0474266Y0310793* +X0474091Y0310718* +X0473904Y0310606* +X0473729Y0310456* +X0473703Y0310431* +X0473654Y0310381* +X0473579Y0310268* +X0473479Y0310131* +X0473379Y0309956* +X0473266Y0309731* +X0473178Y0309468* +X0473104Y0309168* +X0476053* +Y0309193* +Y0309231* +Y0309293* +Y0309356* +Y0309368* +Y0309393* +Y0309431* +Y0309481* +X0476041Y0309618* +X0476016Y0309793* +X0475966Y0309981* +X0475904Y0310168* +X0475816Y0310356* +X0475703Y0310518* +X0475691Y0310531* +X0475641Y0310581* +X0475566Y0310643* +X0475454Y0310718* +X0475328Y0310781* +X0475166Y0310843* +X0474978Y0310893* +X0474779Y0310906* +G37* +G36* +X0322327Y0391203D02* +X0322252D01* +X0322202Y039119* +X0322065Y0391178* +X0321902Y0391153* +X0321715Y0391115* +X0321515Y039104* +X0321327Y0390953* +X0321152Y0390828* +X032114Y0390815* +X032109Y0390753* +X0321027Y0390678* +X0320952Y0390565* +X0320865Y0390428* +X0320802Y0390265* +X0320752Y039009* +X032074Y038989* +Y0389865* +Y0389803* +X0320765Y0389703* +X032079Y0389565* +X0320827Y0389415* +X032089Y0389253* +X0320977Y038909* +X032109Y0388915* +X0321102Y038889* +X0321152Y038884* +X032124Y0388753* +X0321352Y0388653* +X0321502Y038854* +X032169Y0388428* +X0321915Y0388303* +X0322165Y0388203* +X0322177* +X0322202Y038819* +X032224Y0388178* +X032229Y0388165* +X0322427Y0388115* +X0322615Y0388065* +X0322827Y0388015* +X0323052Y0387965* +X0323302Y038794* +X0323552Y0387928* +X0323677* +X0323815Y0387953* +X032399Y0387978* +X032419Y0388028* +X032439Y0388103* +X032459Y0388203* +X0324777Y038834* +X0324802Y0388353* +X0324852Y0388415* +X0324927Y0388503* +X0325015Y0388615* +X0325102Y0388753* +X0325177Y0388915* +X0325227Y038909* +X0325252Y038929* +Y0389303* +Y0389328* +Y0389365* +X032524Y0389428* +X0325227Y0389503* +X0325202Y0389578* +X032514Y0389778* +X032509Y0389878* +X0325027Y038999* +X0324952Y0390103* +X0324865Y0390228* +X0324752Y039034* +X0324627Y0390453* +X032449Y0390565* +X0324327Y0390665* +X0324315* +X032429Y039069* +X032424Y0390715* +X0324165Y0390753* +X0324077Y039079* +X0323977Y039084* +X0323865Y0390878* +X0323727Y0390928* +X032359Y0390978* +X0323427Y0391028* +X032309Y0391115* +X0322727Y0391178* +X0322527Y039119* +X0322327Y0391203* +G37* +G36* +X0322402Y0424665D02* +X0322327D01* +X0322277Y0424653* +X032214Y042464* +X0321977Y0424615* +X0321777Y0424565* +X032159Y042449* +X032139Y0424403* +X0321215Y0424265* +X0321202Y042424* +X0321152Y042419* +X0321077Y0424103* +X0321002Y0423978* +X0320915Y0423828* +X0320852Y0423653* +X0320802Y0423465* +X0320777Y042324* +Y0423228* +Y0423203* +Y0423165* +X032079Y0423115* +X0320815Y0422965* +X0320865Y042279* +X032094Y0422578* +X0321052Y0422365* +X0321127Y0422253* +X0321227Y042214* +X0321327Y042204* +X032144Y042194* +X0321452Y0421928* +X0321477Y0421903* +X032154Y0421865* +X0321602Y0421828* +X0321702Y0421765* +X0321815Y0421703* +X032194Y042164* +X0322077Y0421565* +X032224Y042149* +X0322415Y0421428* +X0322602Y0421365* +X0322802Y0421303* +X0323027Y0421265* +X0323252Y0421228* +X032349Y0421203* +X032374Y042119* +X0323852* +X0323977Y0421215* +X0324127Y042124* +X0324302Y042129* +X0324477Y0421353* +X0324652Y0421453* +X0324815Y042159* +X0324827Y0421603* +X0324877Y0421665* +X032494Y042174* +X0325027Y0421865* +X0325102Y0422003* +X0325165Y0422178* +X0325215Y0422365* +X0325227Y042259* +Y0422603* +Y0422615* +Y042269* +X0325202Y0422803* +X0325177Y0422953* +X0325127Y0423128* +X0325065Y0423303* +X0324965Y042349* +X032484Y0423678* +X0324827Y0423703* +X0324765Y0423753* +X0324677Y042384* +X0324565Y0423953* +X0324402Y0424065* +X0324215Y042419* +X032399Y0424303* +X032374Y0424415* +X0323727* +X0323702Y0424428* +X0323665Y042444* +X0323615Y0424453* +X0323477Y042449* +X0323302Y042454* +X032309Y042459* +X0322865Y0424628* +X032264Y0424653* +X0322402Y0424665* +G37* +G36* +X017056Y0295466D02* +X017051D01* +X0170477Y0295458* +X0170385Y0295449* +X0170277Y0295433* +X0170144Y0295399* +X0170019Y0295349* +X0169885Y0295291* +X0169769Y0295199* +X016976Y0295183* +X0169727Y0295149* +X0169677Y0295091* +X0169627Y0295008* +X0169569Y0294908* +X0169527Y0294791* +X0169494Y0294666* +X0169477Y0294516* +Y0294508* +Y0294491* +Y0294466* +X0169485Y0294433* +X0169502Y0294333* +X0169536Y0294216* +X0169586Y0294075* +X016966Y0293933* +X016971Y0293858* +X0169777Y0293783* +X0169844Y0293717* +X0169919Y029365* +X0169927Y0293642* +X0169944Y0293625* +X0169985Y02936* +X0170027Y0293575* +X0170094Y0293533* +X0170169Y0293492* +X0170252Y029345* +X0170343Y02934* +X0170452Y029335* +X0170568Y0293308* +X0170693Y0293267* +X0170827Y0293225* +X0170977Y02932* +X0171126Y0293175* +X0171285Y0293159* +X0171451Y029315* +X0171526* +X017161Y0293167* +X017171Y0293184* +X0171826Y0293217* +X0171943Y0293259* +X017206Y0293325* +X0172168Y0293417* +X0172176Y0293425* +X0172209Y0293467* +X0172251Y0293517* +X0172309Y02936* +X0172359Y0293692* +X0172401Y0293808* +X0172434Y0293933* +X0172443Y0294083* +Y0294092* +Y02941* +Y029415* +X0172426Y0294225* +X0172409Y0294325* +X0172376Y0294441* +X0172334Y0294558* +X0172268Y0294683* +X0172184Y0294808* +X0172176Y0294825* +X0172134Y0294858* +X0172076Y0294916* +X0172001Y0294991* +X0171893Y0295066* +X0171768Y0295149* +X0171618Y0295224* +X0171451Y0295299* +X0171443* +X0171426Y0295308* +X0171401Y0295316* +X0171368Y0295324* +X0171276Y0295349* +X017116Y0295383* +X0171018Y0295416* +X0170868Y0295441* +X0170718Y0295458* +X017056Y0295466* +G37* +G36* +X017051Y0287578D02* +X017046D01* +X0170427Y0287569* +X0170335Y0287561* +X0170227Y0287544* +X0170102Y0287519* +X0169969Y0287469* +X0169844Y0287411* +X0169727Y0287328* +X0169719Y0287319* +X0169685Y0287278* +X0169644Y0287228* +X0169594Y0287153* +X0169536Y0287061* +X0169494Y0286953* +X016946Y0286836* +X0169452Y0286703* +Y0286686* +Y0286645* +X0169469Y0286578* +X0169485Y0286486* +X016951Y0286386* +X0169552Y0286278* +X0169611Y028617* +X0169685Y0286053* +X0169694Y0286036* +X0169727Y0286003* +X0169785Y0285945* +X016986Y0285878* +X016996Y0285803* +X0170085Y0285728* +X0170235Y0285645* +X0170402Y0285578* +X017041* +X0170427Y028557* +X0170452Y0285562* +X0170485Y0285553* +X0170577Y028552* +X0170702Y0285487* +X0170843Y0285453* +X0170993Y028542* +X017116Y0285403* +X0171326Y0285395* +X017141* +X0171501Y0285412* +X0171618Y0285428* +X0171751Y0285462* +X0171885Y0285512* +X0172018Y0285578* +X0172143Y028567* +X017216Y0285678* +X0172193Y028572* +X0172243Y0285778* +X0172301Y0285853* +X0172359Y0285945* +X0172409Y0286053* +X0172443Y028617* +X0172459Y0286303* +Y0286311* +Y0286328* +Y0286353* +X0172451Y0286395* +X0172443Y0286445* +X0172426Y0286495* +X0172384Y0286628* +X0172351Y0286695* +X0172309Y028677* +X0172259Y0286844* +X0172201Y0286928* +X0172126Y0287003* +X0172043Y0287078* +X0171951Y0287153* +X0171843Y0287219* +X0171835* +X0171818Y0287236* +X0171785Y0287253* +X0171735Y0287278* +X0171676Y0287303* +X017161Y0287336* +X0171535Y0287361* +X0171443Y0287394* +X0171351Y0287427* +X0171243Y0287461* +X0171018Y0287519* +X0170777Y0287561* +X0170643Y0287569* +X017051Y0287578* +G37* +G36* +X0540945Y0363268D02* +X0535945D01* +X0533445Y0360768* +Y0358268* +Y0355768* +X0535945Y0353268* +X0540945* +X0543445Y0355768* +Y0360768* +X0540945Y0363268* +G37* +G36* +X0481673Y0354803D02* +X0476673D01* +X0474173Y0352303* +Y0347303* +X0476673Y0344803* +X0481673* +X0484173Y0347303* +Y0349803* +Y0352303* +X0481673Y0354803* +G37* +G36* +X0171326Y0282005D02* +Y0280039D01* +X0171535* +X0171626Y0280047* +X0171743Y0280064* +X0171868Y0280097* +X0171993Y0280139* +X0172118Y0280197* +X0172226Y0280272* +X0172234Y028028* +X0172268Y0280314* +X0172309Y0280364* +X0172359Y0280439* +X0172401Y0280522* +X0172443Y028063* +X0172476Y0280755* +X0172484Y0280889* +Y0280897* +Y0280905* +X0172476Y0280955* +X0172468Y028103* +X0172451Y0281122* +X0172409Y028123* +X0172359Y0281347* +X0172284Y0281472* +X0172184Y0281588* +X0172168Y0281605* +X0172134Y0281638* +X017206Y0281688* +X0171968Y0281755* +X0171851Y0281821* +X0171701Y0281896* +X0171526Y0281955* +X0171326Y0282005* +G37* +%LNunisolder52_full-3*% +%LPD*% +G54D58* +X0213891Y0467665D02* +X0219891D01* +X0213891Y0493665D02* +X0219891D01* +X0229891Y0472665D02* +Y0488665D01* +X0203891Y0472665D02* +Y0488665D01* +X0213891Y0414165D02* +X0219891D01* +X0213891Y0440165D02* +X0219891D01* +X0229891Y0419165D02* +Y0435165D01* +X0203891Y0419165D02* +Y0435165D01* +X0213891Y0360665D02* +X0219891D01* +X0213891Y0386665D02* +X0219891D01* +X0229891Y0365665D02* +Y0381665D01* +X0203891Y0365665D02* +Y0381665D01* +X015187Y0458661D02* +Y0466161D01* +X0143996Y0450787D02* +X015187Y0458661D01* +X0136496Y0450787D02* +X0143996D01* +X015187Y0388169D02* +Y0395669D01* +X0143996Y0403543D02* +X015187Y0395669D01* +X0136496Y0403543D02* +X0143996D01* +X037439Y0584646D02* +X038189D01* +Y0577146D02* +Y0584646D01* +X037439Y0269685D02* +X038189D01* +Y0277185* +X015187Y0269685D02* +Y0277185D01* +Y0269685D02* +X015937D01* +X015187Y0584646D02* +X015937D01* +X015187Y0577146D02* +Y0584646D01* +X0126279Y0450787D02* +X013378D01* +X0126279Y0443287D02* +Y0450787D01* +Y0403543D02* +Y0411043D01* +Y0403543D02* +X013378D01* +X0167027Y0274114D02* +Y0317313D01* +G54D65* +X0172797Y0486439D02* +D01* +X0174403Y0486068* +X0176032Y048581* +X0177674Y0485666* +X0179323Y0485637* +X0180969Y0485723* +X0182606Y0485924* +X0184224Y0486239* +X0185817Y0486666* +X0187376Y0487202* +X0188893Y0487847* +X0190362Y0488595* +X0191776Y0489444* +X0193126Y049039* +X0194408Y0491428* +X0195614Y0492552* +X0196738Y0493758* +X0197776Y0495039* +X0198721Y049639* +X0199571Y0497803* +X0200319Y0499272* +X0200963Y050079* +X02015Y0502349* +X0201729Y0503142* +X0193058Y0528136D02* +D01* +X0191707Y0529081* +X0190294Y052993* +X0188824Y0530679* +X0187307Y0531323* +X0185748Y053186* +X0184155Y0532287* +X0182536Y0532601* +X01809Y0532802* +X0179253Y0532888* +X0177605Y053286* +X0175962Y0532716* +X0174334Y0532458* +X0172727Y0532087* +X017115Y0531605* +X0169611Y0531014* +X0168117Y0530317* +X0166675Y0529518* +X0165292Y052862* +X0163975Y0527627* +X0162731Y0526546* +X0161565Y052538* +X0160483Y0524135* +X0159491Y0522818* +X0158593Y0521436* +X0157794Y0519993* +X0157097Y0518499* +X0156506Y051696* +X0156024Y0515383* +X0155653Y0513776* +X0155395Y0512148* +X0155251Y0510505* +X0155223Y0508857* +X0155309Y050721* +X015551Y0505574* +X0155825Y0503955* +X0156251Y0502363* +X0156788Y0500804* +X0157432Y0499286* +X0158181Y0497817* +X015903Y0496403* +X0159976Y0495053* +X0161014Y0493771* +X0162138Y0492566* +X0163344Y0491441* +X0164626Y0490403* +X0165976Y0489458* +X0167389Y0488609* +X0168859Y0487861* +X0441669Y0372294D02* +D01* +X0441459Y0372286* +X0441251Y0372264* +X0441045Y0372228* +X0440842Y0372177* +X0440642Y0372113* +X0440448Y0372034* +X044026Y0371942* +X0440079Y0371838* +X0439905Y0371721* +X043974Y0371592* +X0439585Y0371452* +X0439439Y0371301* +X0439304Y037114* +X0439181Y0370971* +X043907Y0370794* +X0438972Y0370609* +X0438887Y0370417* +X0438815Y0370221* +X0438758Y0370019* +X0438714Y0369814* +X0438685Y0369607* +X043867Y0369398* +X0438669Y0369295* +X0468669D02* +D01* +X0468661Y0369504* +X0468639Y0369712* +X0468603Y0369918* +X0468552Y0370121* +X0468488Y0370321* +X0468409Y0370515* +X0468317Y0370703* +X0468213Y0370884* +X0468096Y0371058* +X0467967Y0371223* +X0467827Y0371378* +X0467676Y0371524* +X0467515Y0371659* +X0467346Y0371782* +X0467169Y0371893* +X0466984Y0371991* +X0466792Y0372076* +X0466596Y0372148* +X0466394Y0372205* +X0466189Y0372249* +X0465982Y0372278* +X0465773Y0372293* +X0465669Y0372294* +Y0342295D02* +D01* +X0465878Y0342302* +X0466086Y0342324* +X0466292Y034236* +X0466495Y0342411* +X0466695Y0342475* +X0466889Y0342554* +X0467077Y0342646* +X0467258Y034275* +X0467432Y0342867* +X0467597Y0342996* +X0467752Y0343136* +X0467898Y0343287* +X0468033Y0343448* +X0468156Y0343617* +X0468267Y0343795* +X0468365Y0343979* +X046845Y0344171* +X0468522Y0344367* +X0468579Y0344569* +X0468623Y0344774* +X0468652Y0344981* +X0468667Y034519* +X0468669Y0345294* +X0438669D02* +D01* +X0438676Y0345084* +X0438698Y0344876* +X0438734Y034467* +X0438785Y0344467* +X0438849Y0344267* +X0438928Y0344073* +X043902Y0343885* +X0439124Y0343704* +X0439241Y034353* +X043937Y0343365* +X043951Y034321* +X0439661Y0343064* +X0439822Y0342929* +X0439991Y0342806* +X0440169Y0342695* +X0440353Y0342597* +X0440545Y0342512* +X0440741Y034244* +X0440943Y0342383* +X0441148Y0342339* +X0441355Y034231* +X0441564Y0342295* +X0441669Y0342295* +X0488257Y0469394D02* +D01* +X048823Y0470161* +X0488149Y0470924* +X0488016Y0471681* +X048783Y0472426* +X0487593Y0473156* +X0487306Y0473868* +X0486969Y0474558* +X0486585Y0475223* +X0486156Y0475859* +X0485683Y0476464* +X0485169Y0477035* +X0484617Y0477568* +X0484029Y0478062* +X0483408Y0478513* +X0482757Y047892* +X0482079Y047928* +X0481377Y0479593* +X0480656Y0479855* +X0479918Y0480067* +X0479167Y0480226* +X0478406Y0480333* +X047764Y0480387* +X0477256Y0480394* +X0449257D02* +D01* +X0448489Y0480367* +X0447726Y0480286* +X0446969Y0480153* +X0446224Y0479967* +X0445494Y047973* +X0444782Y0479443* +X0444092Y0479106* +X0443427Y0478722* +X0442791Y0478293* +X0442186Y047782* +X0441615Y0477306* +X0441082Y0476754* +X0440588Y0476166* +X0440137Y0475545* +X043973Y0474894* +X043937Y0474216* +X0439057Y0473514* +X0438795Y0472793* +X0438583Y0472055* +X0438424Y0471304* +X0438317Y0470543* +X0438263Y0469777* +X0438257Y0469394* +Y0441394D02* +D01* +X0438283Y0440626* +X0438364Y0439863* +X0438497Y0439106* +X0438683Y0438361* +X043892Y0437631* +X0439207Y0436919* +X0439544Y0436229* +X0439928Y0435564* +X0440357Y0434928* +X044083Y0434323* +X0441344Y0433752* +X0441896Y0433219* +X0442484Y0432725* +X0443105Y0432274* +X0443757Y0431867* +X0444434Y0431507* +X0445136Y0431194* +X0445857Y0430932* +X0446595Y043072* +X0447346Y0430561* +X0448107Y0430454* +X0448873Y04304* +X0449257Y0430394* +X0477256D02* +D01* +X0478023Y043042* +X0478786Y0430501* +X0479543Y0430634* +X0480288Y043082* +X0481018Y0431057* +X048173Y0431344* +X048242Y0431681* +X0483085Y0432065* +X0483721Y0432494* +X0484326Y0432967* +X0484897Y0433481* +X048543Y0434033* +X0485924Y0434621* +X0486375Y0435242* +X0486782Y0435894* +X0487142Y0436571* +X0487455Y0437273* +X0487717Y0437994* +X0487929Y0438732* +X0488088Y0439483* +X0488195Y0440244* +X0488249Y044101* +X0488257Y0441394* +X0465698Y0562935D02* +X0465798D01* +X03437Y050917D02* +X03438D01* +X0283465Y0274705D02* +Y031565D01* +X0252362D02* +X0283465D01* +X0244191Y0306865D02* +Y0308365D01* +X0244238Y0274705D02* +Y0277465D01* +Y0274705D02* +X0283465D01* +X0462169Y0342295D02* +X0465669D01* +X0441669D02* +X0445169D01* +X0462169Y0372294D02* +X0465669D01* +X0441669D02* +X0445169D01* +X0468669Y0345294D02* +Y0369295D01* +X0438669Y0345294D02* +Y0369295D01* +X0539302Y0535282D02* +X0560502D01* +X0539302Y0527382D02* +X0560502D01* +X0549902Y0564482D02* +Y0574782D01* +Y0515982D02* +Y0527382D01* +X0586644Y0548183D02* +X0607844D01* +X0586644Y0556083D02* +X0607844D01* +X0597244Y0508683D02* +Y0518983D01* +Y0556083D02* +Y0567483D01* +X0563022Y0548183D02* +X0584222D01* +X0563022Y0556083D02* +X0584222D01* +X0573622Y0508683D02* +Y0518983D01* +Y0556083D02* +Y0567483D01* +X0633888Y05279D02* +X0655088D01* +X0633888Y052D02* +X0655088D01* +X0644488Y05571D02* +Y05674D01* +Y05086D02* +Y052D01* +X0690265Y0471555D02* +Y0574705D01* +X0664265Y0471555D02* +X0690265D01* +X0664265D02* +Y0574705D01* +X0690265* +X0617717Y0583464D02* +Y0607972D01* +X0657087* +Y0583464D02* +Y0607972D01* +X0617717Y0583464D02* +X0657087D01* +X0654134Y0272244D02* +Y0311614D01* +X0613091D02* +X0654134D01* +X0613091Y0272244D02* +Y0311614D01* +Y0272244D02* +X0654134D01* +X0438257Y0441394D02* +Y0441894D01* +Y0468894D02* +Y0469394D01* +X0488257Y0441394D02* +Y0441894D01* +Y0468894D02* +Y0469394D01* +X0465757Y0480394D02* +X0477256D01* +X0449257D02* +X0465757D01* +X0449257Y0430394D02* +X0477256D01* +X0610266Y0527998D02* +X0631466D01* +X0610266Y0520098D02* +X0631466D01* +X0620866Y0557198D02* +Y0567498D01* +Y0508698D02* +Y0520098D01* +X0396421Y0332719D02* +Y0373762D01* +X0435791* +Y0332719D02* +Y0373762D01* +X0396421Y0332719D02* +X0435791D01* +X056752Y0583464D02* +X060689D01* +Y0607972* +X056752D02* +X060689D01* +X056752Y0583464D02* +Y0607972D01* +X0421949Y0303543D02* +X0497244Y0303642D01* +X05521Y0560082D02* +Y0556083D01* +Y0558082* +X0546102* +X05521Y0554084D02* +X0548101D01* +X0546102Y0552084* +X0548101Y0550085* +X05521* +X05511Y0544087D02* +X05521Y0545087D01* +Y0547086* +X05511Y0548086* +X05501* +X0549101Y0547086* +Y0545087* +X0548101Y0544087* +X0547101* +X0546102Y0545087* +Y0547086* +X0547101Y0548086* +X0546102Y0542088D02* +Y0540088D01* +Y0541088* +X05521* +X05511Y0542088* +G54D115* +X0292728Y054934D02* +D01* +X0292726Y0549374* +X0292723Y0549408* +X0292717Y0549442* +X0292708Y0549475* +X0292698Y0549508* +X0292685Y054954* +X029267Y054957* +X0292653Y05496* +X0292634Y0549629* +X0292612Y0549656* +X0292589Y0549681* +X0292565Y0549705* +X0292538Y0549727* +X0292511Y0549747* +X0292482Y0549766* +X0292451Y0549782* +X029242Y0549796* +X0292388Y0549807* +X0292355Y0549817* +X0292321Y0549824* +X0292287Y0549829* +X0292253Y0549831* +X0292218* +X0292184Y0549829* +X029215Y0549824* +X0292116Y0549817* +X0292083Y0549807* +X0292051Y0549796* +X029202Y0549782* +X029199Y0549766* +X029196Y0549747* +X0291933Y0549727* +X0291906Y0549705* +X0291882Y0549681* +X0291859Y0549656* +X0291837Y0549629* +X0291818Y05496* +X0291801Y054957* +X0291786Y054954* +X0291773Y0549508* +X0291763Y0549475* +X0291754Y0549442* +X0291748Y0549408* +X0291745Y0549374* +X0291744Y054934* +X0291745Y0549305* +X0291748Y0549271* +X0291754Y0549237* +X0291763Y0549204* +X0291773Y0549171* +X0291786Y0549139* +X0291801Y0549109* +X0291818Y0549079* +X0291837Y054905* +X0291859Y0549023* +X0291882Y0548998* +X0291906Y0548974* +X0291933Y0548952* +X029196Y0548932* +X029199Y0548913* +X029202Y0548897* +X0292051Y0548883* +X0292083Y0548872* +X0292116Y0548862* +X029215Y0548855* +X0292184Y054885* +X0292218Y0548848* +X0292253* +X0292287Y054885* +X0292321Y0548855* +X0292355Y0548862* +X0292388Y0548872* +X029242Y0548883* +X0292451Y0548897* +X0292482Y0548913* +X0292511Y0548932* +X0292538Y0548952* +X0292565Y0548974* +X0292589Y0548998* +X0292612Y0549023* +X0292634Y054905* +X0292653Y0549079* +X029267Y0549109* +X0292685Y0549139* +X0292698Y0549171* +X0292708Y0549204* +X0292717Y0549237* +X0292723Y0549271* +X0292726Y0549305* +X0292728Y054934* +X0234583Y0414373D02* +D01* +X0234581Y0414407* +X0234578Y0414441* +X0234572Y0414475* +X0234563Y0414508* +X0234553Y0414541* +X023454Y0414573* +X0234525Y0414603* +X0234508Y0414633* +X0234489Y0414662* +X0234467Y0414689* +X0234444Y0414714* +X023442Y0414738* +X0234393Y041476* +X0234366Y041478* +X0234337Y0414799* +X0234306Y0414815* +X0234275Y0414829* +X0234243Y041484* +X023421Y041485* +X0234176Y0414857* +X0234142Y0414862* +X0234108Y0414864* +X0234073* +X0234039Y0414862* +X0234005Y0414857* +X0233971Y041485* +X0233938Y041484* +X0233906Y0414829* +X0233875Y0414815* +X0233845Y0414799* +X0233815Y041478* +X0233788Y041476* +X0233761Y0414738* +X0233737Y0414714* +X0233714Y0414689* +X0233692Y0414662* +X0233673Y0414633* +X0233656Y0414603* +X0233641Y0414573* +X0233628Y0414541* +X0233618Y0414508* +X0233609Y0414475* +X0233603Y0414441* +X02336Y0414407* +X0233599Y0414373* +X02336Y0414338* +X0233603Y0414304* +X0233609Y041427* +X0233618Y0414237* +X0233628Y0414204* +X0233641Y0414172* +X0233656Y0414142* +X0233673Y0414112* +X0233692Y0414083* +X0233714Y0414056* +X0233737Y0414031* +X0233761Y0414007* +X0233788Y0413985* +X0233815Y0413965* +X0233845Y0413946* +X0233875Y041393* +X0233906Y0413916* +X0233938Y0413905* +X0233971Y0413895* +X0234005Y0413888* +X0234039Y0413883* +X0234073Y0413881* +X0234108* +X0234142Y0413883* +X0234176Y0413888* +X023421Y0413895* +X0234243Y0413905* +X0234275Y0413916* +X0234306Y041393* +X0234337Y0413946* +X0234366Y0413965* +X0234393Y0413985* +X023442Y0414007* +X0234444Y0414031* +X0234467Y0414056* +X0234489Y0414083* +X0234508Y0414112* +X0234525Y0414142* +X023454Y0414172* +X0234553Y0414204* +X0234563Y0414237* +X0234572Y041427* +X0234578Y0414304* +X0234581Y0414338* +X0234583Y0414373* +X0201884Y0386457D02* +D01* +X0201882Y0386491* +X0201879Y0386525* +X0201873Y0386559* +X0201864Y0386592* +X0201854Y0386625* +X0201841Y0386657* +X0201826Y0386687* +X0201809Y0386717* +X020179Y0386746* +X0201768Y0386773* +X0201745Y0386798* +X0201721Y0386822* +X0201694Y0386844* +X0201667Y0386864* +X0201638Y0386883* +X0201607Y0386899* +X0201576Y0386913* +X0201544Y0386924* +X0201511Y0386934* +X0201477Y0386941* +X0201443Y0386946* +X0201409Y0386948* +X0201374* +X020134Y0386946* +X0201306Y0386941* +X0201272Y0386934* +X0201239Y0386924* +X0201207Y0386913* +X0201176Y0386899* +X0201146Y0386883* +X0201116Y0386864* +X0201089Y0386844* +X0201062Y0386822* +X0201038Y0386798* +X0201015Y0386773* +X0200993Y0386746* +X0200974Y0386717* +X0200957Y0386687* +X0200942Y0386657* +X0200929Y0386625* +X0200919Y0386592* +X020091Y0386559* +X0200904Y0386525* +X0200901Y0386491* +X02009Y0386457* +X0200901Y0386422* +X0200904Y0386388* +X020091Y0386354* +X0200919Y0386321* +X0200929Y0386288* +X0200942Y0386256* +X0200957Y0386226* +X0200974Y0386196* +X0200993Y0386167* +X0201015Y038614* +X0201038Y0386115* +X0201062Y0386091* +X0201089Y0386069* +X0201116Y0386049* +X0201146Y038603* +X0201176Y0386014* +X0201207Y0386* +X0201239Y0385989* +X0201272Y0385979* +X0201306Y0385972* +X020134Y0385967* +X0201374Y0385965* +X0201409* +X0201443Y0385967* +X0201477Y0385972* +X0201511Y0385979* +X0201544Y0385989* +X0201576Y0386* +X0201607Y0386014* +X0201638Y038603* +X0201667Y0386049* +X0201694Y0386069* +X0201721Y0386091* +X0201745Y0386115* +X0201768Y038614* +X020179Y0386167* +X0201809Y0386196* +X0201826Y0386226* +X0201841Y0386256* +X0201854Y0386288* +X0201864Y0386321* +X0201873Y0386354* +X0201879Y0386388* +X0201882Y0386422* +X0201884Y0386457* +X0324783Y0288865D02* +D01* +X0324781Y0288899* +X0324778Y0288933* +X0324772Y0288967* +X0324763Y0289* +X0324753Y0289033* +X032474Y0289065* +X0324725Y0289095* +X0324708Y0289125* +X0324689Y0289154* +X0324667Y0289181* +X0324644Y0289206* +X032462Y028923* +X0324593Y0289252* +X0324566Y0289272* +X0324537Y0289291* +X0324506Y0289307* +X0324475Y0289321* +X0324443Y0289332* +X032441Y0289342* +X0324376Y0289349* +X0324342Y0289354* +X0324308Y0289356* +X0324273* +X0324239Y0289354* +X0324205Y0289349* +X0324171Y0289342* +X0324138Y0289332* +X0324106Y0289321* +X0324075Y0289307* +X0324045Y0289291* +X0324015Y0289272* +X0323988Y0289252* +X0323961Y028923* +X0323937Y0289206* +X0323914Y0289181* +X0323892Y0289154* +X0323873Y0289125* +X0323856Y0289095* +X0323841Y0289065* +X0323828Y0289033* +X0323818Y0289* +X0323809Y0288967* +X0323803Y0288933* +X03238Y0288899* +X0323799Y0288865* +X03238Y028883* +X0323803Y0288796* +X0323809Y0288762* +X0323818Y0288729* +X0323828Y0288696* +X0323841Y0288664* +X0323856Y0288634* +X0323873Y0288604* +X0323892Y0288575* +X0323914Y0288548* +X0323937Y0288523* +X0323961Y0288499* +X0323988Y0288477* +X0324015Y0288457* +X0324045Y0288438* +X0324075Y0288422* +X0324106Y0288408* +X0324138Y0288397* +X0324171Y0288387* +X0324205Y028838* +X0324239Y0288375* +X0324273Y0288373* +X0324308* +X0324342Y0288375* +X0324376Y028838* +X032441Y0288387* +X0324443Y0288397* +X0324475Y0288408* +X0324506Y0288422* +X0324537Y0288438* +X0324566Y0288457* +X0324593Y0288477* +X032462Y0288499* +X0324644Y0288523* +X0324667Y0288548* +X0324689Y0288575* +X0324708Y0288604* +X0324725Y0288634* +X032474Y0288664* +X0324753Y0288696* +X0324763Y0288729* +X0324772Y0288762* +X0324778Y0288796* +X0324781Y028883* +X0324783Y0288865* +X030633Y0512925D02* +D01* +X0306328Y0512959* +X0306325Y0512993* +X0306319Y0513027* +X030631Y051306* +X03063Y0513093* +X0306287Y0513125* +X0306272Y0513155* +X0306255Y0513185* +X0306236Y0513214* +X0306214Y0513241* +X0306191Y0513266* +X0306167Y051329* +X030614Y0513312* +X0306113Y0513332* +X0306084Y0513351* +X0306053Y0513367* +X0306022Y0513381* +X030599Y0513392* +X0305957Y0513402* +X0305923Y0513409* +X0305889Y0513414* +X0305855Y0513416* +X030582* +X0305786Y0513414* +X0305752Y0513409* +X0305718Y0513402* +X0305685Y0513392* +X0305653Y0513381* +X0305622Y0513367* +X0305592Y0513351* +X0305562Y0513332* +X0305535Y0513312* +X0305508Y051329* +X0305484Y0513266* +X0305461Y0513241* +X0305439Y0513214* +X030542Y0513185* +X0305403Y0513155* +X0305388Y0513125* +X0305375Y0513093* +X0305365Y051306* +X0305356Y0513027* +X030535Y0512993* +X0305347Y0512959* +X0305346Y0512925* +X0305347Y051289* +X030535Y0512856* +X0305356Y0512822* +X0305365Y0512789* +X0305375Y0512756* +X0305388Y0512724* +X0305403Y0512694* +X030542Y0512664* +X0305439Y0512635* +X0305461Y0512608* +X0305484Y0512583* +X0305508Y0512559* +X0305535Y0512537* +X0305562Y0512517* +X0305592Y0512498* +X0305622Y0512482* +X0305653Y0512468* +X0305685Y0512457* +X0305718Y0512447* +X0305752Y051244* +X0305786Y0512435* +X030582Y0512433* +X0305855* +X0305889Y0512435* +X0305923Y051244* +X0305957Y0512447* +X030599Y0512457* +X0306022Y0512468* +X0306053Y0512482* +X0306084Y0512498* +X0306113Y0512517* +X030614Y0512537* +X0306167Y0512559* +X0306191Y0512583* +X0306214Y0512608* +X0306236Y0512635* +X0306255Y0512664* +X0306272Y0512694* +X0306287Y0512724* +X03063Y0512756* +X030631Y0512789* +X0306319Y0512822* +X0306325Y0512856* +X0306328Y051289* +X030633Y0512925* +X0313883Y0471758D02* +D01* +X0313881Y0471792* +X0313878Y0471826* +X0313872Y047186* +X0313863Y0471893* +X0313853Y0471926* +X031384Y0471958* +X0313825Y0471988* +X0313808Y0472018* +X0313789Y0472047* +X0313767Y0472074* +X0313744Y0472099* +X031372Y0472123* +X0313693Y0472145* +X0313666Y0472165* +X0313637Y0472184* +X0313606Y04722* +X0313575Y0472214* +X0313543Y0472225* +X031351Y0472235* +X0313476Y0472242* +X0313442Y0472247* +X0313408Y0472249* +X0313373* +X0313339Y0472247* +X0313305Y0472242* +X0313271Y0472235* +X0313238Y0472225* +X0313206Y0472214* +X0313175Y04722* +X0313145Y0472184* +X0313115Y0472165* +X0313088Y0472145* +X0313061Y0472123* +X0313037Y0472099* +X0313014Y0472074* +X0312992Y0472047* +X0312973Y0472018* +X0312956Y0471988* +X0312941Y0471958* +X0312928Y0471926* +X0312918Y0471893* +X0312909Y047186* +X0312903Y0471826* +X03129Y0471792* +X0312899Y0471758* +X03129Y0471723* +X0312903Y0471689* +X0312909Y0471655* +X0312918Y0471622* +X0312928Y0471589* +X0312941Y0471557* +X0312956Y0471527* +X0312973Y0471497* +X0312992Y0471468* +X0313014Y0471441* +X0313037Y0471416* +X0313061Y0471392* +X0313088Y047137* +X0313115Y047135* +X0313145Y0471331* +X0313175Y0471315* +X0313206Y0471301* +X0313238Y047129* +X0313271Y047128* +X0313305Y0471273* +X0313339Y0471268* +X0313373Y0471266* +X0313408* +X0313442Y0471268* +X0313476Y0471273* +X031351Y047128* +X0313543Y047129* +X0313575Y0471301* +X0313606Y0471315* +X0313637Y0471331* +X0313666Y047135* +X0313693Y047137* +X031372Y0471392* +X0313744Y0471416* +X0313767Y0471441* +X0313789Y0471468* +X0313808Y0471497* +X0313825Y0471527* +X031384Y0471557* +X0313853Y0471589* +X0313863Y0471622* +X0313872Y0471655* +X0313878Y0471689* +X0313881Y0471723* +X0313883Y0471758* +Y0440658D02* +D01* +X0313881Y0440692* +X0313878Y0440726* +X0313872Y044076* +X0313863Y0440793* +X0313853Y0440826* +X031384Y0440858* +X0313825Y0440888* +X0313808Y0440918* +X0313789Y0440947* +X0313767Y0440974* +X0313744Y0440999* +X031372Y0441023* +X0313693Y0441045* +X0313666Y0441065* +X0313637Y0441084* +X0313606Y04411* +X0313575Y0441114* +X0313543Y0441125* +X031351Y0441135* +X0313476Y0441142* +X0313442Y0441147* +X0313408Y0441149* +X0313373* +X0313339Y0441147* +X0313305Y0441142* +X0313271Y0441135* +X0313238Y0441125* +X0313206Y0441114* +X0313175Y04411* +X0313145Y0441084* +X0313115Y0441065* +X0313088Y0441045* +X0313061Y0441023* +X0313037Y0440999* +X0313014Y0440974* +X0312992Y0440947* +X0312973Y0440918* +X0312956Y0440888* +X0312941Y0440858* +X0312928Y0440826* +X0312918Y0440793* +X0312909Y044076* +X0312903Y0440726* +X03129Y0440692* +X0312899Y0440658* +X03129Y0440623* +X0312903Y0440589* +X0312909Y0440555* +X0312918Y0440522* +X0312928Y0440489* +X0312941Y0440457* +X0312956Y0440427* +X0312973Y0440397* +X0312992Y0440368* +X0313014Y0440341* +X0313037Y0440316* +X0313061Y0440292* +X0313088Y044027* +X0313115Y044025* +X0313145Y0440231* +X0313175Y0440215* +X0313206Y0440201* +X0313238Y044019* +X0313271Y044018* +X0313305Y0440173* +X0313339Y0440168* +X0313373Y0440166* +X0313408* +X0313442Y0440168* +X0313476Y0440173* +X031351Y044018* +X0313543Y044019* +X0313575Y0440201* +X0313606Y0440215* +X0313637Y0440231* +X0313666Y044025* +X0313693Y044027* +X031372Y0440292* +X0313744Y0440316* +X0313767Y0440341* +X0313789Y0440368* +X0313808Y0440397* +X0313825Y0440427* +X031384Y0440457* +X0313853Y0440489* +X0313863Y0440522* +X0313872Y0440555* +X0313878Y0440589* +X0313881Y0440623* +X0313883Y0440658* +Y0409557D02* +D01* +X0313881Y0409591* +X0313878Y0409625* +X0313872Y0409659* +X0313863Y0409692* +X0313853Y0409725* +X031384Y0409757* +X0313825Y0409787* +X0313808Y0409817* +X0313789Y0409846* +X0313767Y0409873* +X0313744Y0409898* +X031372Y0409922* +X0313693Y0409944* +X0313666Y0409964* +X0313637Y0409983* +X0313606Y0409999* +X0313575Y0410013* +X0313543Y0410024* +X031351Y0410034* +X0313476Y0410041* +X0313442Y0410046* +X0313408Y0410048* +X0313373* +X0313339Y0410046* +X0313305Y0410041* +X0313271Y0410034* +X0313238Y0410024* +X0313206Y0410013* +X0313175Y0409999* +X0313145Y0409983* +X0313115Y0409964* +X0313088Y0409944* +X0313061Y0409922* +X0313037Y0409898* +X0313014Y0409873* +X0312992Y0409846* +X0312973Y0409817* +X0312956Y0409787* +X0312941Y0409757* +X0312928Y0409725* +X0312918Y0409692* +X0312909Y0409659* +X0312903Y0409625* +X03129Y0409591* +X0312899Y0409557* +X03129Y0409522* +X0312903Y0409488* +X0312909Y0409454* +X0312918Y0409421* +X0312928Y0409388* +X0312941Y0409356* +X0312956Y0409326* +X0312973Y0409296* +X0312992Y0409267* +X0313014Y040924* +X0313037Y0409215* +X0313061Y0409191* +X0313088Y0409169* +X0313115Y0409149* +X0313145Y040913* +X0313175Y0409114* +X0313206Y04091* +X0313238Y0409089* +X0313271Y0409079* +X0313305Y0409072* +X0313339Y0409067* +X0313373Y0409065* +X0313408* +X0313442Y0409067* +X0313476Y0409072* +X031351Y0409079* +X0313543Y0409089* +X0313575Y04091* +X0313606Y0409114* +X0313637Y040913* +X0313666Y0409149* +X0313693Y0409169* +X031372Y0409191* +X0313744Y0409215* +X0313767Y040924* +X0313789Y0409267* +X0313808Y0409296* +X0313825Y0409326* +X031384Y0409356* +X0313853Y0409388* +X0313863Y0409421* +X0313872Y0409454* +X0313878Y0409488* +X0313881Y0409522* +X0313883Y0409557* +X0325276Y0319465D02* +D01* +X0325274Y0319499* +X0325271Y0319533* +X0325265Y0319567* +X0325256Y03196* +X0325246Y0319633* +X0325233Y0319665* +X0325218Y0319695* +X0325201Y0319725* +X0325182Y0319754* +X032516Y0319781* +X0325137Y0319806* +X0325113Y031983* +X0325086Y0319852* +X0325059Y0319872* +X032503Y0319891* +X0324999Y0319907* +X0324968Y0319921* +X0324936Y0319932* +X0324903Y0319942* +X0324869Y0319949* +X0324835Y0319954* +X0324801Y0319956* +X0324766* +X0324732Y0319954* +X0324698Y0319949* +X0324664Y0319942* +X0324631Y0319932* +X0324599Y0319921* +X0324568Y0319907* +X0324538Y0319891* +X0324508Y0319872* +X0324481Y0319852* +X0324454Y031983* +X032443Y0319806* +X0324407Y0319781* +X0324385Y0319754* +X0324366Y0319725* +X0324349Y0319695* +X0324334Y0319665* +X0324321Y0319633* +X0324311Y03196* +X0324302Y0319567* +X0324296Y0319533* +X0324293Y0319499* +X0324292Y0319465* +X0324293Y031943* +X0324296Y0319396* +X0324302Y0319362* +X0324311Y0319329* +X0324321Y0319296* +X0324334Y0319264* +X0324349Y0319234* +X0324366Y0319204* +X0324385Y0319175* +X0324407Y0319148* +X032443Y0319123* +X0324454Y0319099* +X0324481Y0319077* +X0324508Y0319057* +X0324538Y0319038* +X0324568Y0319022* +X0324599Y0319008* +X0324631Y0318997* +X0324664Y0318987* +X0324698Y031898* +X0324732Y0318975* +X0324766Y0318973* +X0324801* +X0324835Y0318975* +X0324869Y031898* +X0324903Y0318987* +X0324936Y0318997* +X0324968Y0319008* +X0324999Y0319022* +X032503Y0319038* +X0325059Y0319057* +X0325086Y0319077* +X0325113Y0319099* +X0325137Y0319123* +X032516Y0319148* +X0325182Y0319175* +X0325201Y0319204* +X0325218Y0319234* +X0325233Y0319264* +X0325246Y0319296* +X0325256Y0319329* +X0325265Y0319362* +X0325271Y0319396* +X0325274Y031943* +X0325276Y0319465* +X0155237Y0426261D02* +D01* +X0155235Y0426295* +X0155232Y0426329* +X0155226Y0426363* +X0155217Y0426396* +X0155207Y0426429* +X0155194Y0426461* +X0155179Y0426491* +X0155162Y0426521* +X0155143Y042655* +X0155121Y0426577* +X0155098Y0426602* +X0155074Y0426626* +X0155047Y0426648* +X015502Y0426668* +X0154991Y0426687* +X015496Y0426703* +X0154929Y0426717* +X0154897Y0426728* +X0154864Y0426738* +X015483Y0426745* +X0154796Y042675* +X0154762Y0426752* +X0154727* +X0154693Y042675* +X0154659Y0426745* +X0154625Y0426738* +X0154592Y0426728* +X015456Y0426717* +X0154529Y0426703* +X0154499Y0426687* +X0154469Y0426668* +X0154442Y0426648* +X0154415Y0426626* +X0154391Y0426602* +X0154368Y0426577* +X0154346Y042655* +X0154327Y0426521* +X015431Y0426491* +X0154295Y0426461* +X0154282Y0426429* +X0154272Y0426396* +X0154263Y0426363* +X0154257Y0426329* +X0154254Y0426295* +X0154253Y0426261* +X0154254Y0426226* +X0154257Y0426192* +X0154263Y0426158* +X0154272Y0426125* +X0154282Y0426092* +X0154295Y042606* +X015431Y042603* +X0154327Y0426* +X0154346Y0425971* +X0154368Y0425944* +X0154391Y0425919* +X0154415Y0425895* +X0154442Y0425873* +X0154469Y0425853* +X0154499Y0425834* +X0154529Y0425818* +X015456Y0425804* +X0154592Y0425793* +X0154625Y0425783* +X0154659Y0425776* +X0154693Y0425771* +X0154727Y0425769* +X0154762* +X0154796Y0425771* +X015483Y0425776* +X0154864Y0425783* +X0154897Y0425793* +X0154929Y0425804* +X015496Y0425818* +X0154991Y0425834* +X015502Y0425853* +X0155047Y0425873* +X0155074Y0425895* +X0155098Y0425919* +X0155121Y0425944* +X0155143Y0425971* +X0155162Y0426* +X0155179Y042603* +X0155194Y042606* +X0155207Y0426092* +X0155217Y0426125* +X0155226Y0426158* +X0155232Y0426192* +X0155235Y0426226* +X0155237Y0426261* +X0629429Y0364291D02* +D01* +X0629427Y0364325* +X0629424Y0364359* +X0629418Y0364393* +X0629409Y0364426* +X0629399Y0364459* +X0629386Y0364491* +X0629371Y0364521* +X0629354Y0364551* +X0629335Y036458* +X0629313Y0364607* +X062929Y0364632* +X0629266Y0364656* +X0629239Y0364678* +X0629212Y0364698* +X0629183Y0364717* +X0629152Y0364733* +X0629121Y0364747* +X0629089Y0364758* +X0629056Y0364768* +X0629022Y0364775* +X0628988Y036478* +X0628954Y0364782* +X0628919* +X0628885Y036478* +X0628851Y0364775* +X0628817Y0364768* +X0628784Y0364758* +X0628752Y0364747* +X0628721Y0364733* +X0628691Y0364717* +X0628661Y0364698* +X0628634Y0364678* +X0628607Y0364656* +X0628583Y0364632* +X062856Y0364607* +X0628538Y036458* +X0628519Y0364551* +X0628502Y0364521* +X0628487Y0364491* +X0628474Y0364459* +X0628464Y0364426* +X0628455Y0364393* +X0628449Y0364359* +X0628446Y0364325* +X0628445Y0364291* +X0628446Y0364256* +X0628449Y0364222* +X0628455Y0364188* +X0628464Y0364155* +X0628474Y0364122* +X0628487Y036409* +X0628502Y036406* +X0628519Y036403* +X0628538Y0364001* +X062856Y0363974* +X0628583Y0363949* +X0628607Y0363925* +X0628634Y0363903* +X0628661Y0363883* +X0628691Y0363864* +X0628721Y0363848* +X0628752Y0363834* +X0628784Y0363823* +X0628817Y0363813* +X0628851Y0363806* +X0628885Y0363801* +X0628919Y0363799* +X0628954* +X0628988Y0363801* +X0629022Y0363806* +X0629056Y0363813* +X0629089Y0363823* +X0629121Y0363834* +X0629152Y0363848* +X0629183Y0363864* +X0629212Y0363883* +X0629239Y0363903* +X0629266Y0363925* +X062929Y0363949* +X0629313Y0363974* +X0629335Y0364001* +X0629354Y036403* +X0629371Y036406* +X0629386Y036409* +X0629399Y0364122* +X0629409Y0364155* +X0629418Y0364188* +X0629424Y0364222* +X0629427Y0364256* +X0629429Y0364291* +Y0392933D02* +D01* +X0629427Y0392967* +X0629424Y0393001* +X0629418Y0393035* +X0629409Y0393068* +X0629399Y0393101* +X0629386Y0393133* +X0629371Y0393163* +X0629354Y0393193* +X0629335Y0393222* +X0629313Y0393249* +X062929Y0393274* +X0629266Y0393298* +X0629239Y039332* +X0629212Y039334* +X0629183Y0393359* +X0629152Y0393375* +X0629121Y0393389* +X0629089Y03934* +X0629056Y039341* +X0629022Y0393417* +X0628988Y0393422* +X0628954Y0393424* +X0628919* +X0628885Y0393422* +X0628851Y0393417* +X0628817Y039341* +X0628784Y03934* +X0628752Y0393389* +X0628721Y0393375* +X0628691Y0393359* +X0628661Y039334* +X0628634Y039332* +X0628607Y0393298* +X0628583Y0393274* +X062856Y0393249* +X0628538Y0393222* +X0628519Y0393193* +X0628502Y0393163* +X0628487Y0393133* +X0628474Y0393101* +X0628464Y0393068* +X0628455Y0393035* +X0628449Y0393001* +X0628446Y0392967* +X0628445Y0392933* +X0628446Y0392898* +X0628449Y0392864* +X0628455Y039283* +X0628464Y0392797* +X0628474Y0392764* +X0628487Y0392732* +X0628502Y0392702* +X0628519Y0392672* +X0628538Y0392643* +X062856Y0392616* +X0628583Y0392591* +X0628607Y0392567* +X0628634Y0392545* +X0628661Y0392525* +X0628691Y0392506* +X0628721Y039249* +X0628752Y0392476* +X0628784Y0392465* +X0628817Y0392455* +X0628851Y0392448* +X0628885Y0392443* +X0628919Y0392441* +X0628954* +X0628988Y0392443* +X0629022Y0392448* +X0629056Y0392455* +X0629089Y0392465* +X0629121Y0392476* +X0629152Y039249* +X0629183Y0392506* +X0629212Y0392525* +X0629239Y0392545* +X0629266Y0392567* +X062929Y0392591* +X0629313Y0392616* +X0629335Y0392643* +X0629354Y0392672* +X0629371Y0392702* +X0629386Y0392732* +X0629399Y0392764* +X0629409Y0392797* +X0629418Y039283* +X0629424Y0392864* +X0629427Y0392898* +X0629429Y0392933* +X0520476Y0316449D02* +D01* +X0520474Y0316483* +X0520471Y0316517* +X0520465Y0316551* +X0520456Y0316584* +X0520446Y0316617* +X0520433Y0316649* +X0520418Y0316679* +X0520401Y0316709* +X0520382Y0316738* +X052036Y0316765* +X0520337Y031679* +X0520313Y0316814* +X0520286Y0316836* +X0520259Y0316856* +X052023Y0316875* +X0520199Y0316891* +X0520168Y0316905* +X0520136Y0316916* +X0520103Y0316926* +X0520069Y0316933* +X0520035Y0316938* +X0520001Y031694* +X0519966* +X0519932Y0316938* +X0519898Y0316933* +X0519864Y0316926* +X0519831Y0316916* +X0519799Y0316905* +X0519768Y0316891* +X0519738Y0316875* +X0519708Y0316856* +X0519681Y0316836* +X0519654Y0316814* +X051963Y031679* +X0519607Y0316765* +X0519585Y0316738* +X0519566Y0316709* +X0519549Y0316679* +X0519534Y0316649* +X0519521Y0316617* +X0519511Y0316584* +X0519502Y0316551* +X0519496Y0316517* +X0519493Y0316483* +X0519492Y0316449* +X0519493Y0316414* +X0519496Y031638* +X0519502Y0316346* +X0519511Y0316313* +X0519521Y031628* +X0519534Y0316248* +X0519549Y0316218* +X0519566Y0316188* +X0519585Y0316159* +X0519607Y0316132* +X051963Y0316107* +X0519654Y0316083* +X0519681Y0316061* +X0519708Y0316041* +X0519738Y0316022* +X0519768Y0316006* +X0519799Y0315992* +X0519831Y0315981* +X0519864Y0315971* +X0519898Y0315964* +X0519932Y0315959* +X0519966Y0315957* +X0520001* +X0520035Y0315959* +X0520069Y0315964* +X0520103Y0315971* +X0520136Y0315981* +X0520168Y0315992* +X0520199Y0316006* +X052023Y0316022* +X0520259Y0316041* +X0520286Y0316061* +X0520313Y0316083* +X0520337Y0316107* +X052036Y0316132* +X0520382Y0316159* +X0520401Y0316188* +X0520418Y0316218* +X0520433Y0316248* +X0520446Y031628* +X0520456Y0316313* +X0520465Y0316346* +X0520471Y031638* +X0520474Y0316414* +X0520476Y0316449* +X0649114Y0422067D02* +D01* +X0649112Y0422101* +X0649109Y0422135* +X0649103Y0422169* +X0649094Y0422202* +X0649084Y0422235* +X0649071Y0422267* +X0649056Y0422297* +X0649039Y0422327* +X064902Y0422356* +X0648998Y0422383* +X0648975Y0422408* +X0648951Y0422432* +X0648924Y0422454* +X0648897Y0422474* +X0648868Y0422493* +X0648837Y0422509* +X0648806Y0422523* +X0648774Y0422534* +X0648741Y0422544* +X0648707Y0422551* +X0648673Y0422556* +X0648639Y0422558* +X0648604* +X064857Y0422556* +X0648536Y0422551* +X0648502Y0422544* +X0648469Y0422534* +X0648437Y0422523* +X0648406Y0422509* +X0648376Y0422493* +X0648346Y0422474* +X0648319Y0422454* +X0648292Y0422432* +X0648268Y0422408* +X0648245Y0422383* +X0648223Y0422356* +X0648204Y0422327* +X0648187Y0422297* +X0648172Y0422267* +X0648159Y0422235* +X0648149Y0422202* +X064814Y0422169* +X0648134Y0422135* +X0648131Y0422101* +X064813Y0422067* +X0648131Y0422032* +X0648134Y0421998* +X064814Y0421964* +X0648149Y0421931* +X0648159Y0421898* +X0648172Y0421866* +X0648187Y0421836* +X0648204Y0421806* +X0648223Y0421777* +X0648245Y042175* +X0648268Y0421725* +X0648292Y0421701* +X0648319Y0421679* +X0648346Y0421659* +X0648376Y042164* +X0648406Y0421624* +X0648437Y042161* +X0648469Y0421599* +X0648502Y0421589* +X0648536Y0421582* +X064857Y0421577* +X0648604Y0421575* +X0648639* +X0648673Y0421577* +X0648707Y0421582* +X0648741Y0421589* +X0648774Y0421599* +X0648806Y042161* +X0648837Y0421624* +X0648868Y042164* +X0648897Y0421659* +X0648924Y0421679* +X0648951Y0421701* +X0648975Y0421725* +X0648998Y042175* +X064902Y0421777* +X0649039Y0421806* +X0649056Y0421836* +X0649071Y0421866* +X0649084Y0421898* +X0649094Y0421931* +X0649103Y0421964* +X0649109Y0421998* +X0649112Y0422032* +X0649114Y0422067* +Y0451988D02* +D01* +X0649112Y0452022* +X0649109Y0452056* +X0649103Y045209* +X0649094Y0452123* +X0649084Y0452156* +X0649071Y0452188* +X0649056Y0452218* +X0649039Y0452248* +X064902Y0452277* +X0648998Y0452304* +X0648975Y0452329* +X0648951Y0452353* +X0648924Y0452375* +X0648897Y0452395* +X0648868Y0452414* +X0648837Y045243* +X0648806Y0452444* +X0648774Y0452455* +X0648741Y0452465* +X0648707Y0452472* +X0648673Y0452477* +X0648639Y0452479* +X0648604* +X064857Y0452477* +X0648536Y0452472* +X0648502Y0452465* +X0648469Y0452455* +X0648437Y0452444* +X0648406Y045243* +X0648376Y0452414* +X0648346Y0452395* +X0648319Y0452375* +X0648292Y0452353* +X0648268Y0452329* +X0648245Y0452304* +X0648223Y0452277* +X0648204Y0452248* +X0648187Y0452218* +X0648172Y0452188* +X0648159Y0452156* +X0648149Y0452123* +X064814Y045209* +X0648134Y0452056* +X0648131Y0452022* +X064813Y0451988* +X0648131Y0451953* +X0648134Y0451919* +X064814Y0451885* +X0648149Y0451852* +X0648159Y0451819* +X0648172Y0451787* +X0648187Y0451757* +X0648204Y0451727* +X0648223Y0451698* +X0648245Y0451671* +X0648268Y0451646* +X0648292Y0451622* +X0648319Y04516* +X0648346Y045158* +X0648376Y0451561* +X0648406Y0451545* +X0648437Y0451531* +X0648469Y045152* +X0648502Y045151* +X0648536Y0451503* +X064857Y0451498* +X0648604Y0451496* +X0648639* +X0648673Y0451498* +X0648707Y0451503* +X0648741Y045151* +X0648774Y045152* +X0648806Y0451531* +X0648837Y0451545* +X0648868Y0451561* +X0648897Y045158* +X0648924Y04516* +X0648951Y0451622* +X0648975Y0451646* +X0648998Y0451671* +X064902Y0451698* +X0649039Y0451727* +X0649056Y0451757* +X0649071Y0451787* +X0649084Y0451819* +X0649094Y0451852* +X0649103Y0451885* +X0649109Y0451919* +X0649112Y0451953* +X0649114Y0451988* +X0443019Y0421547D02* +D01* +X0443017Y0421581* +X0443014Y0421615* +X0443008Y0421649* +X0442999Y0421682* +X0442989Y0421715* +X0442976Y0421747* +X0442961Y0421777* +X0442944Y0421807* +X0442925Y0421836* +X0442903Y0421863* +X044288Y0421888* +X0442856Y0421912* +X0442829Y0421934* +X0442802Y0421954* +X0442773Y0421973* +X0442742Y0421989* +X0442711Y0422003* +X0442679Y0422014* +X0442646Y0422024* +X0442612Y0422031* +X0442578Y0422036* +X0442544Y0422038* +X0442509* +X0442475Y0422036* +X0442441Y0422031* +X0442407Y0422024* +X0442374Y0422014* +X0442342Y0422003* +X0442311Y0421989* +X0442281Y0421973* +X0442251Y0421954* +X0442224Y0421934* +X0442197Y0421912* +X0442173Y0421888* +X044215Y0421863* +X0442128Y0421836* +X0442109Y0421807* +X0442092Y0421777* +X0442077Y0421747* +X0442064Y0421715* +X0442054Y0421682* +X0442045Y0421649* +X0442039Y0421615* +X0442036Y0421581* +X0442035Y0421547* +X0442036Y0421512* +X0442039Y0421478* +X0442045Y0421444* +X0442054Y0421411* +X0442064Y0421378* +X0442077Y0421346* +X0442092Y0421316* +X0442109Y0421286* +X0442128Y0421257* +X044215Y042123* +X0442173Y0421205* +X0442197Y0421181* +X0442224Y0421159* +X0442251Y0421139* +X0442281Y042112* +X0442311Y0421104* +X0442342Y042109* +X0442374Y0421079* +X0442407Y0421069* +X0442441Y0421062* +X0442475Y0421057* +X0442509Y0421055* +X0442544* +X0442578Y0421057* +X0442612Y0421062* +X0442646Y0421069* +X0442679Y0421079* +X0442711Y042109* +X0442742Y0421104* +X0442773Y042112* +X0442802Y0421139* +X0442829Y0421159* +X0442856Y0421181* +X044288Y0421205* +X0442903Y042123* +X0442925Y0421257* +X0442944Y0421286* +X0442961Y0421316* +X0442976Y0421346* +X0442989Y0421378* +X0442999Y0421411* +X0443008Y0421444* +X0443014Y0421478* +X0443017Y0421512* +X0443019Y0421547* +G54D116* +X0282668Y0547365D02* +D01* +X0282665Y0547447* +X0282656Y0547529* +X0282642Y054761* +X0282622Y054769* +X0282596Y0547768* +X0282565Y0547845* +X0282529Y0547919* +X0282488Y054799* +X0282442Y0548059* +X0282391Y0548124* +X0282336Y0548185* +X0282277Y0548242* +X0282214Y0548295* +X0282147Y0548344* +X0282077Y0548387* +X0282004Y0548426* +X0281929Y054846* +X0281851Y0548488* +X0281772Y054851* +X0281692Y0548528* +X028161Y0548539* +X0281528Y0548545* +X0281445* +X0281363Y0548539* +X0281281Y0548528* +X0281201Y054851* +X0281122Y0548488* +X0281044Y054846* +X0280969Y0548426* +X0280896Y0548387* +X0280826Y0548344* +X0280759Y0548295* +X0280696Y0548242* +X0280637Y0548185* +X0280582Y0548124* +X0280531Y0548059* +X0280485Y054799* +X0280444Y0547919* +X0280408Y0547845* +X0280377Y0547768* +X0280351Y054769* +X0280331Y054761* +X0280317Y0547529* +X0280308Y0547447* +X0280306Y0547365* +X0280308Y0547282* +X0280317Y05472* +X0280331Y0547119* +X0280351Y0547039* +X0280377Y0546961* +X0280408Y0546884* +X0280444Y054681* +X0280485Y0546739* +X0280531Y054667* +X0280582Y0546605* +X0280637Y0546544* +X0280696Y0546487* +X0280759Y0546434* +X0280826Y0546385* +X0280896Y0546342* +X0280969Y0546303* +X0281044Y0546269* +X0281122Y0546241* +X0281201Y0546219* +X0281281Y0546201* +X0281363Y054619* +X0281445Y0546184* +X0281528* +X028161Y054619* +X0281692Y0546201* +X0281772Y0546219* +X0281851Y0546241* +X0281929Y0546269* +X0282004Y0546303* +X0282077Y0546342* +X0282147Y0546385* +X0282214Y0546434* +X0282277Y0546487* +X0282336Y0546544* +X0282391Y0546605* +X0282442Y054667* +X0282488Y0546739* +X0282529Y054681* +X0282565Y0546884* +X0282596Y0546961* +X0282622Y0547039* +X0282642Y0547119* +X0282656Y05472* +X0282665Y0547282* +X0282668Y0547365* +G54D117* +X0243291Y0292165D02* +D01* +X024329Y0292178* +X0243289Y0292192* +X0243286Y0292206* +X0243283Y029222* +X0243278Y0292233* +X0243273Y0292246* +X0243267Y0292258* +X024326Y029227* +X0243252Y0292282* +X0243244Y0292293* +X0243234Y0292303* +X0243224Y0292313* +X0243214Y0292322* +X0243202Y029233* +X0243191Y0292338* +X0243178Y0292344* +X0243165Y029235* +X0243152Y0292355* +X0243139Y0292359* +X0243125Y0292361* +X0243111Y0292363* +X0243097Y0292364* +X0243084* +X024307Y0292363* +X0243056Y0292361* +X0243042Y0292359* +X0243029Y0292355* +X0243016Y029235* +X0243003Y0292344* +X0242991Y0292338* +X0242979Y029233* +X0242967Y0292322* +X0242957Y0292313* +X0242947Y0292303* +X0242937Y0292293* +X0242929Y0292282* +X0242921Y029227* +X0242914Y0292258* +X0242908Y0292246* +X0242903Y0292233* +X0242898Y029222* +X0242895Y0292206* +X0242892Y0292192* +X0242891Y0292178* +X0242891Y0292165* +X0242891Y0292151* +X0242892Y0292137* +X0242895Y0292123* +X0242898Y0292109* +X0242903Y0292096* +X0242908Y0292083* +X0242914Y0292071* +X0242921Y0292059* +X0242929Y0292047* +X0242937Y0292036* +X0242947Y0292026* +X0242957Y0292016* +X0242967Y0292007* +X0242979Y0291999* +X0242991Y0291991* +X0243003Y0291985* +X0243016Y0291979* +X0243029Y0291974* +X0243042Y029197* +X0243056Y0291968* +X024307Y0291966* +X0243084Y0291965* +X0243097* +X0243111Y0291966* +X0243125Y0291968* +X0243139Y029197* +X0243152Y0291974* +X0243165Y0291979* +X0243178Y0291985* +X0243191Y0291991* +X0243202Y0291999* +X0243214Y0292007* +X0243224Y0292016* +X0243234Y0292026* +X0243244Y0292036* +X0243252Y0292047* +X024326Y0292059* +X0243267Y0292071* +X0243273Y0292083* +X0243278Y0292096* +X0243283Y0292109* +X0243286Y0292123* +X0243289Y0292137* +X024329Y0292151* +X0243291Y0292165* +X0214846Y0523351D02* +D01* +X0214845Y0523364* +X0214844Y0523378* +X0214841Y0523392* +X0214838Y0523406* +X0214833Y0523419* +X0214828Y0523432* +X0214822Y0523444* +X0214815Y0523456* +X0214807Y0523468* +X0214799Y0523479* +X0214789Y0523489* +X0214779Y0523499* +X0214769Y0523508* +X0214757Y0523516* +X0214746Y0523524* +X0214733Y052353* +X021472Y0523536* +X0214707Y0523541* +X0214694Y0523545* +X021468Y0523547* +X0214666Y0523549* +X0214652Y052355* +X0214639* +X0214625Y0523549* +X0214611Y0523547* +X0214597Y0523545* +X0214584Y0523541* +X0214571Y0523536* +X0214558Y052353* +X0214546Y0523524* +X0214534Y0523516* +X0214522Y0523508* +X0214512Y0523499* +X0214502Y0523489* +X0214492Y0523479* +X0214484Y0523468* +X0214476Y0523456* +X0214469Y0523444* +X0214463Y0523432* +X0214458Y0523419* +X0214453Y0523406* +X021445Y0523392* +X0214447Y0523378* +X0214446Y0523364* +X0214446Y0523351* +X0214446Y0523337* +X0214447Y0523323* +X021445Y0523309* +X0214453Y0523295* +X0214458Y0523282* +X0214463Y0523269* +X0214469Y0523257* +X0214476Y0523245* +X0214484Y0523233* +X0214492Y0523222* +X0214502Y0523212* +X0214512Y0523202* +X0214522Y0523193* +X0214534Y0523185* +X0214546Y0523177* +X0214558Y0523171* +X0214571Y0523165* +X0214584Y052316* +X0214597Y0523156* +X0214611Y0523154* +X0214625Y0523152* +X0214639Y0523151* +X0214652* +X0214666Y0523152* +X021468Y0523154* +X0214694Y0523156* +X0214707Y052316* +X021472Y0523165* +X0214733Y0523171* +X0214746Y0523177* +X0214757Y0523185* +X0214769Y0523193* +X0214779Y0523202* +X0214789Y0523212* +X0214799Y0523222* +X0214807Y0523233* +X0214815Y0523245* +X0214822Y0523257* +X0214828Y0523269* +X0214833Y0523282* +X0214838Y0523295* +X0214841Y0523309* +X0214844Y0523323* +X0214845Y0523337* +X0214846Y0523351* +X0346741Y0468061D02* +D01* +X034674Y0468081* +X0346738Y0468102* +X0346734Y0468123* +X0346729Y0468143* +X0346722Y0468163* +X0346715Y0468183* +X0346705Y0468201* +X0346695Y0468219* +X0346683Y0468237* +X034667Y0468253* +X0346656Y0468269* +X0346641Y0468283* +X0346625Y0468297* +X0346608Y0468309* +X0346591Y046832* +X0346572Y046833* +X0346553Y0468339* +X0346533Y0468346* +X0346513Y0468352* +X0346493Y0468356* +X0346472Y0468359* +X0346451Y046836* +X034643* +X0346409Y0468359* +X0346388Y0468356* +X0346368Y0468352* +X0346348Y0468346* +X0346328Y0468339* +X0346309Y046833* +X0346291Y046832* +X0346273Y0468309* +X0346256Y0468297* +X034624Y0468283* +X0346225Y0468269* +X0346211Y0468253* +X0346198Y0468237* +X0346186Y0468219* +X0346176Y0468201* +X0346166Y0468183* +X0346159Y0468163* +X0346152Y0468143* +X0346147Y0468123* +X0346143Y0468102* +X0346141Y0468081* +X0346141Y0468061* +X0346141Y046804* +X0346143Y0468019* +X0346147Y0467998* +X0346152Y0467978* +X0346159Y0467958* +X0346166Y0467938* +X0346176Y046792* +X0346186Y0467902* +X0346198Y0467884* +X0346211Y0467868* +X0346225Y0467852* +X034624Y0467838* +X0346256Y0467824* +X0346273Y0467812* +X0346291Y0467801* +X0346309Y0467791* +X0346328Y0467782* +X0346348Y0467775* +X0346368Y0467769* +X0346388Y0467765* +X0346409Y0467762* +X034643Y0467761* +X0346451* +X0346472Y0467762* +X0346493Y0467765* +X0346513Y0467769* +X0346533Y0467775* +X0346553Y0467782* +X0346572Y0467791* +X0346591Y0467801* +X0346608Y0467812* +X0346625Y0467824* +X0346641Y0467838* +X0346656Y0467852* +X034667Y0467868* +X0346683Y0467884* +X0346695Y0467902* +X0346705Y046792* +X0346715Y0467938* +X0346722Y0467958* +X0346729Y0467978* +X0346734Y0467998* +X0346738Y0468019* +X034674Y046804* +X0346741Y0468061* +X025139Y0511921D02* +D01* +X0251368Y0512541* +X0251303Y0513159* +X0251195Y0513771* +X0251045Y0514374* +X0250853Y0514964* +X025062Y051554* +X0250348Y0516099* +X0250037Y0516637* +X024969Y0517152* +X0249307Y0517641* +X0248892Y0518103* +X0248445Y0518534* +X0247969Y0518934* +X0247466Y0519299* +X024694Y0519628* +X0246391Y051992* +X0245823Y0520172* +X024524Y0520385* +X0244643Y0520556* +X0244035Y0520685* +X024342Y0520772* +X02428Y0520815* +X0242179* +X0241559Y0520772* +X0240944Y0520685* +X0240336Y0520556* +X0239739Y0520385* +X0239446Y0520284* +X0234782Y0516371D02* +D01* +X023449Y0515822* +X0234237Y0515254* +X0234025Y0514671* +X0233854Y0514074* +X0233724Y0513466* +X0233638Y0512851* +X0233595Y0512231* +X023359Y0511921* +Y0486921D02* +D01* +X0233611Y04863* +X0233676Y0485682* +X0233784Y048507* +X0233934Y0484467* +X0234126Y0483877* +X0234359Y0483301* +X0234631Y0482742* +X0234942Y0482204* +X0235289Y0481689* +X0235672Y04812* +X0236087Y0480738* +X0236534Y0480307* +X023701Y0479907* +X0237513Y0479542* +X023804Y0479213* +X0238588Y0478921* +X0239156Y0478669* +X0239739Y0478456* +X0240336Y0478285* +X0240944Y0478156* +X0241559Y0478069* +X0242179Y0478026* +X02428* +X024342Y0478069* +X0244035Y0478156* +X0244643Y0478285* +X024524Y0478456* +X0245823Y0478669* +X0246391Y0478921* +X024694Y0479213* +X0247466Y0479542* +X0247969Y0479907* +X0248445Y0480307* +X0248892Y0480738* +X0249307Y04812* +X024969Y0481689* +X0250037Y0482204* +X0250348Y0482742* +X025062Y0483301* +X0250853Y0483877* +X0251045Y0484467* +X0251195Y048507* +X0251303Y0485682* +X0251368Y04863* +X025139Y0486921* +X0266098Y032001D02* +X0266885D01* +X0276728D02* +Y0338121D01* +X0256255Y032001D02* +Y0338121D01* +X0272003D02* +X0276728D01* +X0256255D02* +X026098D01* +X0256255Y032001D02* +X025783D01* +X0275153D02* +X0276728D01* +X0251378Y0486909D02* +Y0491732D01* +X023359Y0486909D02* +Y0511821D01* +X0251378Y050376D02* +Y0511909D01* +X0336732Y049874D02* +X0338041Y0500049D01* +X0332598Y049874D02* +X0336732D01* +X0328839D02* +X0332598D01* +X029124Y0352658D02* +X0296575D01* +X0297244Y0351988* +X0289409Y0354488D02* +X029124Y0352658D01* +X0346215Y05775D02* +X0350886Y0575984D01* +X0543307Y045748D02* +X0547146Y0459744D01* +X0548917Y0437795D02* +X0552362Y0442323D01* +X054065Y0438484D02* +X0541339Y0437795D01* +X0548819* +X0692927Y0279514D02* +Y0293774D01* +X0683084Y0269698D02* +X0692924Y0279538D01* +X0668824Y0269698D02* +X0683084D01* +X06929Y0586147D02* +Y0600407D01* +X068306Y0610247D02* +X06929Y0600407D01* +X06701Y0610247D02* +X068306D01* +X0531485Y0587423D02* +Y0600383D01* +X0541325Y0610223* +X0555585* +X0393714Y0279514D02* +Y0293774D01* +Y0279514D02* +X0403554Y0269674D01* +X0416514* +X0531496Y0494095D02* +Y0510991D01* +X0525604Y0488202D02* +X0531507Y0494105D01* +X0507407Y0488202D02* +X0525604D01* +X039369Y0465376D02* +Y0478336D01* +X040353Y0488176* +X041779* +X0488962Y0557374D02* +X0489629Y055804D01* +Y0559373* +X0488962Y0560039* +X0486296* +X048563Y0559373* +Y055804* +X0486296Y0557374* +X0489629Y0553375D02* +X0488962Y0554708D01* +X0487629Y0556041* +X0486296* +X048563Y0555374* +Y0554041* +X0486296Y0553375* +X0486963* +X0487629Y0554041* +Y0556041* +X0488962Y0552042D02* +X0489629Y0551375D01* +Y0550043* +X0488962Y0549376* +X0488296* +X0487629Y0550043* +X0486963Y0549376* +X0486296* +X048563Y0550043* +Y0551375* +X0486296Y0552042* +X0486963* +X0487629Y0551375* +X0488296Y0552042* +X0488962* +X0487629Y0551375D02* +Y0550043D01* +X0413667Y0556783D02* +X0414333Y0557449D01* +Y0558782* +X0413667Y0559449* +X0411001* +X0410335Y0558782* +Y0557449* +X0411001Y0556783* +X0414333Y055545D02* +Y0552784D01* +X0413667* +X0411001Y055545* +X0410335* +Y0549452D02* +X0414333D01* +X0412334Y0551451* +Y0548785* +X0515045Y0531881D02* +X0515711Y0532548D01* +Y0533881* +X0515045Y0534547* +X0512379* +X0511713Y0533881* +Y0532548* +X0512379Y0531881* +X0515711Y0530548D02* +Y0527883D01* +X0515045* +X0512379Y0530548* +X0511713* +X0515045Y052655D02* +X0515711Y0525883D01* +Y052455* +X0515045Y0523884* +X0514378* +X0513712Y052455* +Y0525217* +Y052455* +X0513046Y0523884* +X0512379* +X0511713Y052455* +Y0525883* +X0512379Y052655* +X0419277Y0523122D02* +X0419944Y0523788D01* +Y0525121* +X0419277Y0525787* +X0416611* +X0415945Y0525121* +Y0523788* +X0416611Y0523122* +X0419944Y0521789D02* +Y0519123D01* +X0419277* +X0416611Y0521789* +X0415945* +X0419944Y051779D02* +Y0515124D01* +X0419277* +X0416611Y051779* +X0415945* +X0496662Y0511882D02* +Y0507883D01* +X0494663* +X0493996Y050855* +Y0509882* +X0494663Y0510549* +X0496662* +X0492663Y0511882D02* +X0491331D01* +X0491997* +Y0507883* +X0492663Y050855* +X0435231Y0511501D02* +Y0507502D01* +X0433231* +X0432565Y0508169* +Y0509501* +X0433231Y0510168* +X0435231* +X0428566Y0511501D02* +X0431232D01* +X0428566Y0508835* +Y0508169* +X0429233Y0507502* +X0430566* +X0431232Y0508169* +X0483526Y056122D02* +X0480194D01* +X0479528Y0560554* +Y0559221* +X0480194Y0558555* +X0483526* +X0479528Y0557222D02* +Y0555889D01* +Y0556555* +X0483526* +X048286Y0557222* +X0480194Y055389D02* +X0479528Y0553223D01* +Y055189* +X0480194Y0551224* +X048286* +X0483526Y055189* +Y0553223* +X048286Y055389* +X0482193* +X0481527Y0553223* +Y0551224* +X0483169Y0532972D02* +Y0536971D01* +X0485169* +X0485835Y0536305* +Y0534972* +X0485169Y0534305* +X0483169* +X0484502D02* +X0485835Y0532972D01* +X0489834Y0536971D02* +X0488501Y0536305D01* +X0487168Y0534972* +Y0533639* +X0487834Y0532972* +X0489167* +X0489834Y0533639* +Y0534305* +X0489167Y0534972* +X0487168* +X0491167Y0536305D02* +X0491833Y0536971D01* +X0493166* +X0493832Y0536305* +Y0535638* +X0493166Y0534972* +X0493832Y0534305* +Y0533639* +X0493166Y0532972* +X0491833* +X0491167Y0533639* +Y0534305* +X0491833Y0534972* +X0491167Y0535638* +Y0536305* +X0491833Y0534972D02* +X0493166D01* +X0437894Y055D02* +X0441892D01* +Y0548* +X0441226Y0547334* +X0439893* +X0439227Y0548* +Y055* +Y0548667D02* +X0437894Y0547334D01* +X0441892Y0543335D02* +X0441226Y0544668D01* +X0439893Y0546001* +X043856* +X0437894Y0545335* +Y0544002* +X043856Y0543335* +X0439227* +X0439893Y0544002* +Y0546001* +X0441892Y0542002D02* +Y0539336D01* +X0441226* +X043856Y0542002* +X0437894* +X0463681Y0531693D02* +X046768D01* +Y0529694* +X0467013Y0529027* +X046568* +X0465014Y0529694* +Y0531693* +Y053036D02* +X0463681Y0529027D01* +X046768Y0525028D02* +X0467013Y0526361D01* +X046568Y0527694* +X0464348* +X0463681Y0527028* +Y0525695* +X0464348Y0525028* +X0465014* +X046568Y0525695* +Y0527694* +X046768Y052103D02* +X0467013Y0522363D01* +X046568Y0523695* +X0464348* +X0463681Y0523029* +Y0521696* +X0464348Y052103* +X0465014* +X046568Y0521696* +Y0523695* +X0418239Y0506656D02* +X0416907D01* +X041624Y050599* +Y0503324* +X0416907Y0502657* +X0418239* +X0418906Y0503324* +Y050599* +X0418239Y0506656* +X0420239D02* +Y0502657D01* +X0422905* +X0426903Y0506656D02* +X0424238D01* +Y0502657* +X0426903* +X0424238Y0504657D02* +X042557D01* +X0428236Y0506656D02* +Y0502657D01* +X0430236* +X0430902Y0503324* +Y050599* +X0430236Y0506656* +X0428236* +X0432235Y0502657D02* +X0433568D01* +X0432901* +Y0506656* +X0432235Y050599* +X0468602Y057516D02* +Y0571161D01* +X0471268* +X0472601Y0574494D02* +X0473268Y057516D01* +X04746* +X0475267Y0574494* +Y0573827* +X04746Y0573161* +X0473934* +X04746* +X0475267Y0572494* +Y0571828* +X04746Y0571161* +X0473268* +X0472601Y0571828* +X0447404Y0579331D02* +X0443405D01* +Y0577331* +X0444072Y0576665* +X0446738* +X0447404Y0577331* +Y0579331* +X0443405Y0572666D02* +Y0575332D01* +X0446071Y0572666* +X0446738* +X0447404Y0573333* +Y0574665* +X0446738Y0575332* +X0443405Y0568667D02* +Y0571333D01* +X0446071Y0568667* +X0446738* +X0447404Y0569334* +Y0570667* +X0446738Y0571333* +X0432171Y0547432D02* +X0432837Y0548099D01* +Y0549432* +X0432171Y0550098* +X0429505* +X0428838Y0549432* +Y0548099* +X0429505Y0547432* +X0432837Y05461D02* +Y0543434D01* +X0432171* +X0429505Y05461* +X0428838* +X0432837Y0539435D02* +Y0542101D01* +X0430838* +X0431504Y0540768* +Y0540101* +X0430838Y0539435* +X0429505* +X0428838Y0540101* +Y0541434* +X0429505Y0542101* +X05005Y0582072D02* +X0499834Y0582739D01* +X0498501* +X0497835Y0582072* +Y0579407* +X0498501Y057874* +X0499834* +X05005Y0579407* +X0504499Y0582739D02* +X0503166Y0582072D01* +X0501833Y0580739* +Y0579407* +X05025Y057874* +X0503833* +X0504499Y0579407* +Y0580073* +X0503833Y0580739* +X0501833* +X0505832Y0579407D02* +X0506498Y057874D01* +X0507831* +X0508498Y0579407* +Y0582072* +X0507831Y0582739* +X0506498* +X0505832Y0582072* +Y0581406* +X0506498Y0580739* +X0508498* +X0484162Y0583549D02* +X0483495Y0584215D01* +X0482163* +X0481496Y0583549* +Y0580883* +X0482163Y0580217* +X0483495* +X0484162Y0580883* +X0488161Y0584215D02* +X0486828Y0583549D01* +X0485495Y0582216* +Y0580883* +X0486161Y0580217* +X0487494* +X0488161Y0580883* +Y0581549* +X0487494Y0582216* +X0485495* +X0489494Y0584215D02* +X0492159D01* +Y0583549* +X0489494Y0580883* +Y0580217* +X0458549Y0528732D02* +X0459215Y0529398D01* +Y0530731* +X0458549Y0531398* +X0455883* +X0455217Y0530731* +Y0529398* +X0455883Y0528732* +X0459215Y0527399D02* +Y0524733D01* +X0458549* +X0455883Y0527399* +X0455217* +Y05234D02* +Y0522067D01* +Y0522734* +X0459215* +X0458549Y05234* +X0450084Y0531291D02* +X0450751Y0531957D01* +Y053329* +X0450084Y0533957* +X0447418* +X0446752Y053329* +Y0531957* +X0447418Y0531291* +X0450751Y0529958D02* +Y0527292D01* +X0450084* +X0447418Y0529958* +X0446752* +X0450084Y0525959D02* +X0450751Y0525293D01* +Y052396* +X0450084Y0523293* +X0447418* +X0446752Y052396* +Y0525293* +X0447418Y0525959* +X0450084* +X0510728Y0560335D02* +X0514727D01* +Y0558335* +X0514061Y0557669* +X0512728* +X0512061Y0558335* +Y0560335* +Y0559002D02* +X0510728Y0557669D01* +X0514727Y055367D02* +X0514061Y0555003D01* +X0512728Y0556336* +X0511395* +X0510728Y0555669* +Y0554337* +X0511395Y055367* +X0512061* +X0512728Y0554337* +Y0556336* +X0511395Y0552337D02* +X0510728Y0551671D01* +Y0550338* +X0511395Y0549671* +X0514061* +X0514727Y0550338* +Y0551671* +X0514061Y0552337* +X0513394* +X0512728Y0551671* +Y0549671* +X0476659Y0529027D02* +X0477325Y0529694D01* +Y0531026* +X0476659Y0531693* +X0473993* +X0473327Y0531026* +Y0529694* +X0473993Y0529027* +X0477325Y0527694D02* +Y0525028D01* +X0476659* +X0473993Y0527694* +X0473327* +X0477325Y052103D02* +X0476659Y0522363D01* +X0475326Y0523695* +X0473993* +X0473327Y0523029* +Y0521696* +X0473993Y052103* +X047466* +X0475326Y0521696* +Y0523695* +X0344381Y044342D02* +X0345048Y0442753D01* +X0346381* +X0347047Y044342* +Y0446086* +X0346381Y0446752* +X0345048* +X0344381Y0446086* +X0340383Y0442753D02* +X0341716Y044342D01* +X0343049Y0444753* +Y0446086* +X0342382Y0446752* +X0341049* +X0340383Y0446086* +Y0445419* +X0341049Y0444753* +X0343049* +X0336384Y0442753D02* +X033905D01* +Y0444753* +X0337717Y0444086* +X0337051* +X0336384Y0444753* +Y0446086* +X0337051Y0446752* +X0338383* +X033905Y0446086* +X0293988Y0308577D02* +X0294654Y0307911D01* +X0295987* +X0296654Y0308577* +Y0311243* +X0295987Y031191* +X0294654* +X0293988Y0311243* +X0292655Y0308577D02* +X0291988Y0307911D01* +X0290655* +X0289989Y0308577* +Y0309244* +X0290655Y030991* +X0291322* +X0290655* +X0289989Y0310577* +Y0311243* +X0290655Y031191* +X0291988* +X0292655Y0311243* +X028599Y0307911D02* +X0287323Y0308577D01* +X0288656Y030991* +Y0311243* +X028799Y031191* +X0286657* +X028599Y0311243* +Y0310577* +X0286657Y030991* +X0288656* +X017912Y0561114D02* +X0179786Y056178D01* +Y0563113* +X017912Y0563779* +X0176454* +X0175787Y0563113* +Y056178* +X0176454Y0561114* +X0179786Y0557115D02* +Y0559781D01* +X0177787* +X0178453Y0558448* +Y0557782* +X0177787Y0557115* +X0176454* +X0175787Y0557782* +Y0559114* +X0176454Y0559781* +X0179786Y0555782D02* +Y0553116D01* +X017912* +X0176454Y0555782* +X0175787* +X0333465Y0561319D02* +Y055732D01* +X0331465* +X0330799Y0557987* +Y0559319* +X0331465Y0559986* +X0333465* +X0332132D02* +X0330799Y0561319D01* +X0327467D02* +Y055732D01* +X0329466Y0559319* +X03268* +X0322801Y055732D02* +X0325467D01* +Y0559319* +X0324134Y0558653* +X0323468* +X0322801Y0559319* +Y0560652* +X0323468Y0561319* +X0324801* +X0325467Y0560652* +X0325188Y0578164D02* +X0325855Y0577497D01* +X0327188* +X0327854Y0578164* +Y058083* +X0327188Y0581496* +X0325855* +X0325188Y058083* +X032119Y0577497D02* +X0323856D01* +Y0579497* +X0322523Y057883* +X0321856* +X032119Y0579497* +Y058083* +X0321856Y0581496* +X0323189* +X0323856Y058083* +X0319857D02* +X0319191Y0581496D01* +X0317858* +X0317191Y058083* +Y0578164* +X0317858Y0577497* +X0319191* +X0319857Y0578164* +Y057883* +X0319191Y0579497* +X0317191* +X0305315Y0317913D02* +Y0313915D01* +X0303316* +X0302649Y0314581* +Y0315914* +X0303316Y0316581* +X0305315* +X0303982D02* +X0302649Y0317913D01* +X029865Y0313915D02* +X0301316D01* +Y0315914* +X0299983Y0315248* +X0299317* +X029865Y0315914* +Y0317247* +X0299317Y0317913* +X030065* +X0301316Y0317247* +X0295318Y0317913D02* +Y0313915D01* +X0297318Y0315914* +X0294652* +X0299887Y028444D02* +X0300554Y0285107D01* +Y028644* +X0299887Y0287106* +X0297222* +X0296555Y028644* +Y0285107* +X0297222Y028444* +X0299887Y0283108D02* +X0300554Y0282441D01* +Y0281108* +X0299887Y0280442* +X0299221* +X0298554Y0281108* +Y0281775* +Y0281108* +X0297888Y0280442* +X0297222* +X0296555Y0281108* +Y0282441* +X0297222Y0283108* +X0299887Y0279109D02* +X0300554Y0278442D01* +Y027711* +X0299887Y0276443* +X0299221* +X0298554Y027711* +Y0277776* +Y027711* +X0297888Y0276443* +X0297222* +X0296555Y027711* +Y0278442* +X0297222Y0279109* +X0337106Y0427953D02* +X0341105D01* +Y0425953* +X0340439Y0425287* +X0339106* +X0338439Y0425953* +Y0427953* +Y042662D02* +X0337106Y0425287D01* +X0341105Y0421288D02* +Y0423954D01* +X0339106* +X0339772Y0422621* +Y0421955* +X0339106Y0421288* +X0337773* +X0337106Y0421955* +Y0423288* +X0337773Y0423954* +X0341105Y0417289D02* +X0340439Y0418622D01* +X0339106Y0419955* +X0337773* +X0337106Y0419289* +Y0417956* +X0337773Y0417289* +X0338439* +X0339106Y0417956* +Y0419955* +X0263991Y0353902D02* +Y0349903D01* +X0261992* +X0261326Y0350569* +Y0351902* +X0261992Y0352569* +X0263991* +X0262658D02* +X0261326Y0353902D01* +X0257327Y0349903D02* +X0259993D01* +Y0351902* +X025866Y0351236* +X0257993* +X0257327Y0351902* +Y0353235* +X0257993Y0353902* +X0259326* +X0259993Y0353235* +X0255994D02* +X0255328Y0353902D01* +X0253995* +X0253328Y0353235* +Y0350569* +X0253995Y0349903* +X0255328* +X0255994Y0350569* +Y0351236* +X0255328Y0351902* +X0253328* +X0279225Y0577633D02* +X0279892Y0576967D01* +X0281225* +X0281891Y0577633* +Y0580299* +X0281225Y0580965* +X0279892* +X0279225Y0580299* +X0275893Y0580965D02* +Y0576967D01* +X0277893Y0578966* +X0275227* +X0271895Y0580965D02* +Y0576967D01* +X0273894Y0578966* +X0271228* +X0254225Y0579433D02* +X0254892Y0578767D01* +X0256225* +X0256891Y0579433* +Y0582099* +X0256225Y0582765* +X0254892* +X0254225Y0582099* +X0250227Y0578767D02* +X0252893D01* +Y0580766* +X025156Y05801* +X0250893* +X0250227Y0580766* +Y0582099* +X0250893Y0582765* +X0252226* +X0252893Y0582099* +X0246228Y0582765D02* +X0248894D01* +X0246228Y05801* +Y0579433* +X0246895Y0578767* +X0248228* +X0248894Y0579433* +X0228234Y0566035D02* +X02289Y0566701D01* +Y0568034* +X0228234Y0568701* +X0225568* +X0224902Y0568034* +Y0566701* +X0225568Y0566035* +X02289Y0562036D02* +Y0564702D01* +X0226901* +X0227567Y0563369* +Y0562703* +X0226901Y0562036* +X0225568* +X0224902Y0562703* +Y0564036* +X0225568Y0564702* +X0224902Y0560703D02* +Y0559371D01* +Y0560037* +X02289* +X0228234Y0560703* +X0232466Y0525188D02* +X0233133Y0525855D01* +Y0527188* +X0232466Y0527854* +X02298* +X0229134Y0527188* +Y0525855* +X02298Y0525188* +X0233133Y052119D02* +Y0523856D01* +X0231133* +X02318Y0522523* +Y0521856* +X0231133Y052119* +X02298* +X0229134Y0521856* +Y0523189* +X02298Y0523856* +X0232466Y0519857D02* +X0233133Y0519191D01* +Y0517858* +X0232466Y0517191* +X02298* +X0229134Y0517858* +Y0519191* +X02298Y0519857* +X0232466* +X029859Y0550465D02* +X0295258D01* +X0294591Y0549799* +Y0548466* +X0295258Y05478* +X029859* +Y0543801D02* +Y0546467D01* +X0296591* +X0297257Y0545134* +Y0544467* +X0296591Y0543801* +X0295258* +X0294591Y0544467* +Y05458* +X0295258Y0546467* +X0341816Y0564755D02* +X0342483Y0565422D01* +Y0566755* +X0341816Y0567421* +X0339151* +X0338484Y0566755* +Y0565422* +X0339151Y0564755* +X0342483Y0560757D02* +X0341816Y056209D01* +X0340484Y0563423* +X0339151* +X0338484Y0562756* +Y0561423* +X0339151Y0560757* +X0339817* +X0340484Y0561423* +Y0563423* +X0338484Y0559424D02* +Y0558091D01* +Y0558757* +X0342483* +X0341816Y0559424* +X0348509Y0307472D02* +X0349176Y0308138D01* +Y0309471* +X0348509Y0310138* +X0345844* +X0345177Y0309471* +Y0308138* +X0345844Y0307472* +X0349176Y0303473D02* +X0348509Y0304806D01* +X0347177Y0306139* +X0345844* +X0345177Y0305473* +Y030414* +X0345844Y0303473* +X034651* +X0347177Y030414* +Y0306139* +X0345177Y0300141D02* +X0349176D01* +X0347177Y030214* +Y0299475* +X035973Y0286704D02* +X0360396Y0287371D01* +Y0288704* +X035973Y028937* +X0357064* +X0356398Y0288704* +Y0287371* +X0357064Y0286704* +X0360396Y0282706D02* +X035973Y0284038D01* +X0358397Y0285371* +X0357064* +X0356398Y0284705* +Y0283372* +X0357064Y0282706* +X0357731* +X0358397Y0283372* +Y0285371* +X035973Y0281373D02* +X0360396Y0280706D01* +Y0279373* +X035973Y0278707* +X0359064* +X0358397Y0279373* +Y028004* +Y0279373* +X0357731Y0278707* +X0357064* +X0356398Y0279373* +Y0280706* +X0357064Y0281373* +X0307368Y0564559D02* +X0308034Y0565225D01* +Y0566558* +X0307368Y0567224* +X0304702* +X0304035Y0566558* +Y0565225* +X0304702Y0564559* +X0308034Y056056D02* +X0307368Y0561893D01* +X0306035Y0563226* +X0304702* +X0304035Y0562559* +Y0561226* +X0304702Y056056* +X0305368* +X0306035Y0561226* +Y0563226* +X0304035Y0556561D02* +Y0559227D01* +X0306701Y0556561* +X0307368* +X0308034Y0557228* +Y0558561* +X0307368Y0559227* +X0245563Y036153D02* +X0246229Y0360863D01* +X0247562* +X0248228Y036153* +Y0364196* +X0247562Y0364862* +X0246229* +X0245563Y0364196* +X024423Y036153D02* +X0243563Y0360863D01* +X024223* +X0241564Y036153* +Y0362196* +X024223Y0362863* +X0242897* +X024223* +X0241564Y0363529* +Y0364196* +X024223Y0364862* +X0243563* +X024423Y0364196* +X0237565Y0364862D02* +X0240231D01* +X0237565Y0362196* +Y036153* +X0238232Y0360863* +X0239564* +X0240231Y036153* +X0200188Y0357888D02* +X0200855Y0357222D01* +X0202188* +X0202854Y0357888* +Y0360554* +X0202188Y0361221* +X0200855* +X0200188Y0360554* +X019619Y0357222D02* +X0198855D01* +Y0359221* +X0197523Y0358555* +X0196856* +X019619Y0359221* +Y0360554* +X0196856Y0361221* +X0198189* +X0198855Y0360554* +X0194857Y0357888D02* +X019419Y0357222D01* +X0192857* +X0192191Y0357888* +Y0358555* +X0192857Y0359221* +X0192191Y0359888* +Y0360554* +X0192857Y0361221* +X019419* +X0194857Y0360554* +Y0359888* +X019419Y0359221* +X0194857Y0358555* +Y0357888* +X019419Y0359221D02* +X0192857D01* +X0243325Y0441233D02* +X0243992Y0440567D01* +X0245325* +X0245991Y0441233* +Y0443899* +X0245325Y0444565* +X0243992* +X0243325Y0443899* +X0241993Y0441233D02* +X0241326Y0440567D01* +X0239993* +X0239327Y0441233* +Y04419* +X0239993Y0442566* +X024066* +X0239993* +X0239327Y0443232* +Y0443899* +X0239993Y0444565* +X0241326* +X0241993Y0443899* +X0237994Y0444565D02* +X0236661D01* +X0237328* +Y0440567* +X0237994Y0441233* +X0249705Y0402596D02* +Y0405928D01* +X0249038Y0406595* +X0247705* +X0247039Y0405928* +Y0402596* +X0245706Y0403262D02* +X024504Y0402596D01* +X0243707* +X024304Y0403262* +Y0403929* +X0243707Y0404595* +X024304Y0405262* +Y0405928* +X0243707Y0406595* +X024504* +X0245706Y0405928* +Y0405262* +X024504Y0404595* +X0245706Y0403929* +Y0403262* +X024504Y0404595D02* +X0243707D01* +X0218594Y039401D02* +X0219261Y0393344D01* +X0220593* +X022126Y039401* +Y0396676* +X0220593Y0397342* +X0219261* +X0218594Y0396676* +X0214595Y0397342D02* +X0217261D01* +X0214595Y0394677* +Y039401* +X0215262Y0393344* +X0216595* +X0217261Y039401* +X0213262Y0396676D02* +X0212596Y0397342D01* +X0211263* +X0210597Y0396676* +Y039401* +X0211263Y0393344* +X0212596* +X0213262Y039401* +Y0394677* +X0212596Y0395343* +X0210597* +X0169648Y0339272D02* +X0166316D01* +X016565Y0338605* +Y0337272* +X0166316Y0336606* +X0169648* +X016565Y0335273D02* +Y033394D01* +Y0334607* +X0169648* +X0168982Y0335273* +X016565Y0329275D02* +Y0331941D01* +X0168315Y0329275* +X0168982* +X0169648Y0329941* +Y0331274* +X0168982Y0331941* +X0179192Y0379331D02* +X0176027D01* +X0175394Y0378698* +Y0377431* +X0176027Y0376798* +X0179192* +X0175394Y0375532D02* +Y0374266D01* +Y0374899* +X0179192* +X0178559Y0375532* +Y0372366D02* +X0179192Y0371733D01* +Y0370467* +X0178559Y0369834* +X0176027* +X0175394Y0370467* +Y0371733* +X0176027Y0372366* +X0178559* +X0179429Y0349249D02* +Y0352582D01* +X0178763Y0353248* +X017743* +X0176763Y0352582* +Y0349249* +X017543Y0353248D02* +X0174098D01* +X0174764* +Y0349249* +X017543Y0349916* +X0170099Y0353248D02* +Y0349249D01* +X0172098Y0351249* +X0169432* +X0166437Y0360236D02* +Y0356238D01* +X0164437* +X0163771Y0356904* +Y0358237* +X0164437Y0358903* +X0166437* +X0165104D02* +X0163771Y0360236D01* +X0162438Y0356904D02* +X0161772Y0356238D01* +X0160439* +X0159772Y0356904* +Y035757* +X0160439Y0358237* +X0161105* +X0160439* +X0159772Y0358903* +Y035957* +X0160439Y0360236* +X0161772* +X0162438Y035957* +X015644Y0360236D02* +Y0356238D01* +X0158439Y0358237* +X0155773* +X025Y0337008D02* +X0253999D01* +Y0335009* +X0253332Y0334342* +X0251999* +X0251333Y0335009* +Y0337008* +Y0335675D02* +X025Y0334342D01* +X0253332Y0333009D02* +X0253999Y0332343D01* +Y033101* +X0253332Y0330343* +X0252666* +X0251999Y033101* +Y0331676* +Y033101* +X0251333Y0330343* +X0250666* +X025Y033101* +Y0332343* +X0250666Y0333009* +Y0329011D02* +X025Y0328344D01* +Y0327011* +X0250666Y0326345* +X0253332* +X0253999Y0327011* +Y0328344* +X0253332Y0329011* +X0252666* +X0251999Y0328344* +Y0326345* +X0209154Y0340354D02* +X0213152D01* +Y0338355* +X0212486Y0337688* +X0211153* +X0210486Y0338355* +Y0340354* +Y0339021D02* +X0209154Y0337688D01* +X0212486Y0336356D02* +X0213152Y0335689D01* +Y0334356* +X0212486Y033369* +X0211819* +X0211153Y0334356* +Y0335023* +Y0334356* +X0210486Y033369* +X020982* +X0209154Y0334356* +Y0335689* +X020982Y0336356* +X0209154Y0332357D02* +Y0331024D01* +Y0331691* +X0213152* +X0212486Y0332357* +X0229626Y0339665D02* +X0233625D01* +Y0337666* +X0232958Y0337* +X0231625* +X0230959Y0337666* +Y0339665* +Y0338333D02* +X0229626Y0337D01* +X0232958Y0335667D02* +X0233625Y0335D01* +Y0333667* +X0232958Y0333001* +X0232292* +X0231625Y0333667* +Y0334334* +Y0333667* +X0230959Y0333001* +X0230292* +X0229626Y0333667* +Y0335* +X0230292Y0335667* +X0233625Y0329002D02* +Y0331668D01* +X0231625* +X0232292Y0330335* +Y0329669* +X0231625Y0329002* +X0230292* +X0229626Y0329669* +Y0331001* +X0230292Y0331668* +X0226083Y0324114D02* +X0230081D01* +Y0322115* +X0229415Y0321448* +X0228082* +X0227416Y0322115* +Y0324114* +Y0322781D02* +X0226083Y0321448D01* +X0229415Y0320115D02* +X0230081Y0319449D01* +Y0318116* +X0229415Y031745* +X0228748* +X0228082Y0318116* +Y0318783* +Y0318116* +X0227416Y031745* +X0226749* +X0226083Y0318116* +Y0319449* +X0226749Y0320115* +X0229415Y0316117D02* +X0230081Y031545D01* +Y0314117* +X0229415Y0313451* +X0226749* +X0226083Y0314117* +Y031545* +X0226749Y0316117* +X0229415* +X024732Y0317315D02* +X0249986D01* +X0250652Y0317981* +Y0319314* +X0249986Y031998* +X024732* +X0246654Y0319314* +Y0317981* +X0247986Y0318647D02* +X0246654Y0317315D01* +Y0317981D02* +X024732Y0317315D01* +X0246654Y0313316D02* +Y0315982D01* +X0249319Y0313316* +X0249986* +X0250652Y0313982* +Y0315315* +X0249986Y0315982* +X0246654Y0309317D02* +Y0311983D01* +X0249319Y0309317* +X0249986* +X0250652Y0309984* +Y0311316* +X0249986Y0311983* +X0206769Y0319086D02* +X0209435D01* +X0210101Y0319753* +Y0321086* +X0209435Y0321752* +X0206769* +X0206102Y0321086* +Y0319753* +X0207435Y0320419D02* +X0206102Y0319086D01* +Y0319753D02* +X0206769Y0319086D01* +X0206102Y0317753D02* +Y031642D01* +Y0317087* +X0210101* +X0209435Y0317753* +X0206769Y0314421D02* +X0206102Y0313755D01* +Y0312422* +X0206769Y0311755* +X0209435* +X0210101Y0312422* +Y0313755* +X0209435Y0314421* +X0208768* +X0208102Y0313755* +Y0311755* +X0247222Y0347137D02* +X0249887D01* +X0250554Y0347804* +Y0349137* +X0249887Y0349803* +X0247222* +X0246555Y0349137* +Y0347804* +X0247888Y034847D02* +X0246555Y0347137D01* +Y0347804D02* +X0247222Y0347137D01* +X0246555Y0343139D02* +Y0345804D01* +X0249221Y0343139* +X0249887* +X0250554Y0343805* +Y0345138* +X0249887Y0345804* +X0246555Y0341806D02* +Y0340473D01* +Y0341139* +X0250554* +X0249887Y0341806* +X0213412Y0355176D02* +X0216078D01* +X0216744Y0355843* +Y0357176* +X0216078Y0357842* +X0213412* +X0212746Y0357176* +Y0355843* +X0214079Y0356509D02* +X0212746Y0355176D01* +Y0355843D02* +X0213412Y0355176D01* +X0212746Y0353843D02* +Y035251D01* +Y0353177* +X0216744* +X0216078Y0353843* +Y0350511D02* +X0216744Y0349845D01* +Y0348512* +X0216078Y0347845* +X0215411* +X0214745Y0348512* +X0214079Y0347845* +X0213412* +X0212746Y0348512* +Y0349845* +X0213412Y0350511* +X0214079* +X0214745Y0349845* +X0215411Y0350511* +X0216078* +X0214745Y0349845D02* +Y0348512D01* +X0278543Y0338386D02* +X0282542D01* +Y0336386* +X0281876Y033572* +X0280543* +X0279876Y0336386* +Y0338386* +Y0337053D02* +X0278543Y033572D01* +X0281209Y0331721D02* +Y0333721D01* +X0280543Y0334387* +X027921* +X0278543Y0333721* +Y0331721* +Y0327723D02* +Y0330388D01* +X0281209Y0327723* +X0281876* +X0282542Y0328389* +Y0329722* +X0281876Y0330388* +X032149Y0284065D02* +X0318158D01* +X0317491Y0283399* +Y0282066* +X0318158Y02814* +X032149* +X0317491Y0280067D02* +Y0278734D01* +Y02794* +X032149* +X0320824Y0280067* +X032149Y0274069D02* +X0320824Y0275401D01* +X0319491Y0276734* +X0318158* +X0317491Y0276068* +Y0274735* +X0318158Y0274069* +X0318824* +X0319491Y0274735* +Y0276734* +X0339665Y0541339D02* +Y053734D01* +X0337666* +X0337Y0538006* +Y0539339* +X0337666Y0540006* +X0339665* +X0338333D02* +X0337Y0541339D01* +X0333001D02* +X0335667D01* +X0333001Y0538673* +Y0538006* +X0333667Y053734* +X0335* +X0335667Y0538006* +X0331668Y053734D02* +X0329002D01* +Y0538006* +X0331668Y0540672* +Y0541339* +X0322835Y0534449D02* +Y053045D01* +X0320835* +X0320169Y0531117* +Y0532449* +X0320835Y0533116* +X0322835* +X0321502D02* +X0320169Y0534449D01* +X031617D02* +X0318836D01* +X031617Y0531783* +Y0531117* +X0316837Y053045* +X0318169* +X0318836Y0531117* +X0314837D02* +X0314171Y053045D01* +X0312838* +X0312171Y0531117* +Y0531783* +X0312838Y0532449* +X0312171Y0533116* +Y0533782* +X0312838Y0534449* +X0314171* +X0314837Y0533782* +Y0533116* +X0314171Y0532449* +X0314837Y0531783* +Y0531117* +X0314171Y0532449D02* +X0312838D01* +X0326341Y0520965D02* +X0323009D01* +X0322342Y0520298* +Y0518965* +X0323009Y0518299* +X0326341* +X0322342Y0516966D02* +Y0515633D01* +Y0516299* +X0326341* +X0325675Y0516966* +X0322342Y0513634D02* +Y0512301D01* +Y0512967* +X0326341* +X0325675Y0513634* +X0297384Y0519076D02* +X0298051Y0518409D01* +X0299384* +X030005Y0519076* +Y0521742* +X0299384Y0522408* +X0298051* +X0297384Y0521742* +X0294052Y0522408D02* +Y0518409D01* +X0296051Y0520409* +X0293386* +X0292053Y0519076D02* +X0291386Y0518409D01* +X0290053* +X0289387Y0519076* +Y0521742* +X0290053Y0522408* +X0291386* +X0292053Y0521742* +Y0519076* +X0353937Y0559646D02* +Y0555647D01* +X0351938* +X0351271Y0556313* +Y0557646* +X0351938Y0558313* +X0353937* +X0352604D02* +X0351271Y0559646D01* +X0347272Y0555647D02* +X0349938D01* +Y0557646* +X0348605Y055698* +X0347939* +X0347272Y0557646* +Y0558979* +X0347939Y0559646* +X0349272* +X0349938Y0558979* +X034594Y0559646D02* +X0344607D01* +X0345273* +Y0555647* +X034594Y0556313* +X0362795Y0553839D02* +X0366794D01* +Y0551839* +X0366127Y0551173* +X0364795* +X0364128Y0551839* +Y0553839* +Y0552506D02* +X0362795Y0551173D01* +Y054784D02* +X0366794D01* +X0364795Y054984* +Y0547174* +X0366794Y0545841D02* +Y0543175D01* +X0366127* +X0363462Y0545841* +X0362795* +X0172418Y058011D02* +X0175084D01* +X0175751Y0580776* +Y0582109* +X0175084Y0582776* +X0172418* +X0171752Y0582109* +Y0580776* +X0173085Y0581443D02* +X0171752Y058011D01* +Y0580776D02* +X0172418Y058011D01* +X0171752Y0576111D02* +Y0578777D01* +X0174418Y0576111* +X0175084* +X0175751Y0576778* +Y057811* +X0175084Y0578777* +Y0574778D02* +X0175751Y0574112D01* +Y0572779* +X0175084Y0572112* +X0172418* +X0171752Y0572779* +Y0574112* +X0172418Y0574778* +X0175084* +X031039Y0506676D02* +X0307058D01* +X0306391Y050601* +Y0504677* +X0307058Y050401* +X031039* +X0307058Y0502678D02* +X0306391Y0502011D01* +Y0500678* +X0307058Y0500012* +X0309724* +X031039Y0500678* +Y0502011* +X0309724Y0502678* +X0309057* +X0308391Y0502011* +Y0500012* +X0238068Y037824D02* +X0240734D01* +X02414Y0378906* +Y0380239* +X0240734Y0380906* +X0238068* +X0237402Y0380239* +Y0378906* +X0238735Y0379573D02* +X0237402Y037824D01* +Y0378906D02* +X0238068Y037824D01* +X0237402Y0376907D02* +Y0375574D01* +Y037624* +X02414* +X0240734Y0376907* +X02414Y0370909D02* +X0240734Y0372242D01* +X0239401Y0373574* +X0238068* +X0237402Y0372908* +Y0371575* +X0238068Y0370909* +X0238735* +X0239401Y0371575* +Y0373574* +X0323524Y0371592D02* +Y0374924D01* +X0322857Y0375591* +X0321524* +X0320858Y0374924* +Y0371592* +X0319525Y0375591D02* +X0318192D01* +X0318858* +Y0371592* +X0319525Y0372258* +X0316193D02* +X0315526Y0371592D01* +X0314193* +X0313527Y0372258* +Y0372925* +X0314193Y0373591* +X031486* +X0314193* +X0313527Y0374258* +Y0374924* +X0314193Y0375591* +X0315526* +X0316193Y0374924* +X0161824Y05135D02* +X016249Y0514166D01* +Y0515499* +X0161824Y0516165* +X0161157* +X0160491Y0515499* +Y0514166* +X0159824Y05135* +X0159158* +X0158491Y0514166* +Y0515499* +X0159158Y0516165* +X0158491Y0512167D02* +X016249D01* +Y0510167* +X0161824Y0509501* +X0160491* +X0159824Y0510167* +Y0512167* +X016249Y0508168D02* +X0158491D01* +X0159824* +X016249Y0505502* +X0160491Y0507502* +X0158491Y0505502* +Y0504169D02* +Y0502836D01* +Y0503503* +X016249* +X0161824Y0504169* +X0290936Y0318715D02* +X0291603Y0318049D01* +X0292936* +X0293602Y0318715* +Y0321381* +X0292936Y0322047* +X0291603* +X0290936Y0321381* +X0286938Y0322047D02* +X0289604D01* +X0286938Y0319381* +Y0318715* +X0287604Y0318049* +X0288937* +X0289604Y0318715* +X0282939Y0318049D02* +X0285605D01* +Y0320048* +X0284272Y0319381* +X0283606* +X0282939Y0320048* +Y0321381* +X0283606Y0322047* +X0284939* +X0285605Y0321381* +X0200295Y0572638D02* +Y0568639D01* +X0198296* +X0197629Y0569306* +Y0570639* +X0198296Y0571305* +X0200295* +X0196297Y0568639D02* +Y0572638D01* +X0194297* +X0193631Y0571971* +Y0569306* +X0194297Y0568639* +X0196297* +X0192298Y0572638D02* +X0190965D01* +X0191631* +Y0568639* +X0192298Y0569306* +X0212691Y0565065D02* +X021669D01* +Y0563066* +X0216024Y05624* +X0214691* +X0214024Y0563066* +Y0565065* +Y0563732D02* +X0212691Y05624D01* +Y0561067D02* +Y0559734D01* +Y05604* +X021669* +X0216024Y0561067* +X0212691Y0557734D02* +Y0556401D01* +Y0557068* +X021669* +X0216024Y0557734* +X0379688Y057313D02* +Y0570464D01* +X0379021* +X0376355Y057313* +X0375689* +Y0570464* +X0379688Y0569131D02* +X0375689D01* +Y0567132* +X0376355Y0566465* +X0379021* +X0379688Y0567132* +Y0569131* +X0375689Y0563133D02* +X0379688D01* +X0377688Y0565133* +Y0562467* +X0155591Y0559665D02* +X015959D01* +Y0557666* +X0158924Y0557* +X0157591* +X0156924Y0557666* +Y0559665* +Y0558332D02* +X0155591Y0557D01* +X0158924Y0555667D02* +X015959Y0555D01* +Y0553667* +X0158924Y0553001* +X0158257* +X0157591Y0553667* +Y0554334* +Y0553667* +X0156924Y0553001* +X0156258* +X0155591Y0553667* +Y0555* +X0156258Y0555667* +X0155591Y0549002D02* +Y0551668D01* +X0158257Y0549002* +X0158924* +X015959Y0549669* +Y0551002* +X0158924Y0551668* +X0232185Y0406398D02* +Y0402399D01* +X0230186* +X0229519Y0403065* +Y0404398* +X0230186Y0405065* +X0232185* +X0230852D02* +X0229519Y0406398D01* +X0226187D02* +Y0402399D01* +X0228186Y0404398* +X022552* +X0224188Y0403065D02* +X0223521Y0402399D01* +X0222188* +X0221522Y0403065* +Y0405731* +X0222188Y0406398* +X0223521* +X0224188Y0405731* +Y0403065* +X0228839Y0451673D02* +Y0447675D01* +X0226839* +X0226173Y0448341* +Y0449674* +X0226839Y045034* +X0228839* +X0227506D02* +X0226173Y0451673D01* +X022284D02* +Y0447675D01* +X022484Y0449674* +X0222174* +X0220841Y0451673D02* +X0219508D01* +X0220175* +Y0447675* +X0220841Y0448341* +X022815Y046063D02* +Y0456631D01* +X022615* +X0225484Y0457298* +Y0458631* +X022615Y0459297* +X022815* +X0226817D02* +X0225484Y046063D01* +X0224151Y0457298D02* +X0223484Y0456631D01* +X0222151* +X0221485Y0457298* +Y0457964* +X0222151Y0458631* +X0222818* +X0222151* +X0221485Y0459297* +Y0459964* +X0222151Y046063* +X0223484* +X0224151Y0459964* +X0217486Y0456631D02* +X0218819Y0457298D01* +X0220152Y0458631* +Y0459964* +X0219486Y046063* +X0218153* +X0217486Y0459964* +Y0459297* +X0218153Y0458631* +X0220152* +X0344882Y0582579D02* +Y057858D01* +X0342882* +X0342216Y0579247* +Y0580579* +X0342882Y0581246* +X0344882* +X0343549D02* +X0342216Y0582579D01* +X0338884D02* +Y057858D01* +X0340883Y0580579* +X0338217* +X0334219Y057858D02* +X0335552Y0579247D01* +X0336884Y0580579* +Y0581912* +X0336218Y0582579* +X0334885* +X0334219Y0581912* +Y0581246* +X0334885Y0580579* +X0336884* +X0340291Y0335165D02* +X034429D01* +Y0333166* +X0343624Y03325* +X0342291* +X0341624Y0333166* +Y0335165* +Y0333833D02* +X0340291Y03325D01* +X034429Y0328501D02* +Y0331167D01* +X0342291* +X0342957Y0329834* +Y0329167* +X0342291Y0328501* +X0340958* +X0340291Y0329167* +Y03305* +X0340958Y0331167* +X0340291Y0324502D02* +Y0327168D01* +X0342957Y0324502* +X0343624* +X034429Y0325169* +Y0326501* +X0343624Y0327168* +X028563Y0334646D02* +X0289629D01* +Y0332646* +X0288962Y033198* +X0287629* +X0286963Y0332646* +Y0334646* +Y0333313D02* +X028563Y033198D01* +X0289629Y0327981D02* +X0288962Y0329314D01* +X0287629Y0330647* +X0286296* +X028563Y032998* +Y0328648* +X0286296Y0327981* +X0286963* +X0287629Y0328648* +Y0330647* +X028563Y0323983D02* +Y0326648D01* +X0288296Y0323983* +X0288962* +X0289629Y0324649* +Y0325982* +X0288962Y0326648* +X0375689Y0559055D02* +X0379688D01* +Y0557056* +X0379021Y0556389* +X0377688* +X0377022Y0557056* +Y0559055* +Y0557722D02* +X0375689Y0556389D01* +Y0553057D02* +X0379688D01* +X0377688Y0555056* +Y0552391* +X0379021Y0551058D02* +X0379688Y0550391D01* +Y0549058* +X0379021Y0548392* +X0378355* +X0377688Y0549058* +Y0549725* +Y0549058* +X0377022Y0548392* +X0376355* +X0375689Y0549058* +Y0550391* +X0376355Y0551058* +X0348622Y0335925D02* +X0352621D01* +Y0333926* +X0351954Y0333259* +X0350621* +X0349955Y0333926* +Y0335925* +Y0334592D02* +X0348622Y0333259D01* +X0352621Y0329261D02* +X0351954Y0330594D01* +X0350621Y0331926* +X0349289* +X0348622Y033126* +Y0329927* +X0349289Y0329261* +X0349955* +X0350621Y0329927* +Y0331926* +X0348622Y0325928D02* +X0352621D01* +X0350621Y0327928* +Y0325262* +X0374691Y0322528D02* +X037869D01* +Y0320528* +X0378024Y0319862* +X0376691* +X0376024Y0320528* +Y0322528* +Y0321195D02* +X0374691Y0319862D01* +X037869Y0315863D02* +X0378024Y0317196D01* +X0376691Y0318529* +X0375358* +X0374691Y0317863* +Y031653* +X0375358Y0315863* +X0376024* +X0376691Y031653* +Y0318529* +X0374691Y031453D02* +Y0313197D01* +Y0313864* +X037869* +X0378024Y031453* +X0341002Y0551889D02* +X0343829Y0554716D01* +X0345243Y0553302* +Y055236* +X0344301Y0551417* +X0343358* +X0341944Y0552831* +X0342887Y0551889D02* +Y0550004D01* +X0345714Y0547176D02* +X0343829Y0549061D01* +X0347599* +X0348071Y0549532* +Y0550475* +X0347128Y0551417* +X0346186* +X0349013Y054859D02* +X0349956D01* +X0350898Y0547647* +Y0546705* +X0350427Y0546234* +X0349484* +X0349013Y0546705* +X0349484Y0546234* +Y0545291* +X0349013Y054482* +X0348071* +X0347128Y0545762* +Y0546705* +X0374803Y039439D02* +X0378802D01* +Y039239* +X0378135Y0391724* +X0376802* +X0376136Y039239* +Y039439* +Y0393057D02* +X0374803Y0391724D01* +Y0390391D02* +Y0389058D01* +Y0389725* +X0378802* +X0378135Y0390391* +X0374803Y0384393D02* +Y0387059D01* +X0377469Y0384393* +X0378135* +X0378802Y0385059* +Y0386392* +X0378135Y0387059* +X0283366Y0378839D02* +X0287365D01* +Y0376839* +X0286698Y0376173* +X0285366* +X0284699Y0376839* +Y0378839* +Y0377506D02* +X0283366Y0376173D01* +Y0372174D02* +Y037484D01* +X0286032Y0372174* +X0286698* +X0287365Y037284* +Y0374173* +X0286698Y037484* +X0284033Y0370841D02* +X0283366Y0370175D01* +Y0368842* +X0284033Y0368175* +X0286698* +X0287365Y0368842* +Y0370175* +X0286698Y0370841* +X0286032* +X0285366Y0370175* +Y0368175* +X0256988Y0487402D02* +X0260987D01* +Y0485402* +X026032Y0484736* +X0258987* +X0258321Y0485402* +Y0487402* +Y0486069D02* +X0256988Y0484736D01* +X0260987Y0480737D02* +X0256988D01* +Y0482736* +X0257655Y0483403* +X0258987* +X0259654Y0482736* +Y0480737* +X0310591Y0495765D02* +X031459D01* +Y0493766* +X0313924Y04931* +X0312591* +X0311924Y0493766* +Y0495765* +Y0494432D02* +X0310591Y04931D01* +X0313257Y04911D02* +Y0489767D01* +X0312591Y0489101* +X0310591* +Y04911* +X0311258Y0491767* +X0311924Y04911* +Y0489101* +X0241724Y0399235D02* +Y0396569D01* +X024239Y0395903* +X0243723* +X024439Y0396569* +Y0399235* +X0243723Y0399902* +X024239* +X0243057Y0398569D02* +X0241724Y0399902D01* +X024239D02* +X0241724Y0399235D01* +X0240391Y0399902D02* +X0239058D01* +X0239725* +Y0395903* +X0240391Y0396569* +X0234393Y0395903D02* +X0237059D01* +Y0397902* +X0235726Y0397236* +X0235059* +X0234393Y0397902* +Y0399235* +X0235059Y0399902* +X0236392* +X0237059Y0399235* +X0240725Y0468791D02* +X0243391D01* +X0244058Y0469457* +Y047079* +X0243391Y0471457* +X0240725* +X0240059Y047079* +Y0469457* +X0241392Y0470124D02* +X0240059Y0468791D01* +Y0469457D02* +X0240725Y0468791D01* +X0240059Y0467458D02* +Y0466125D01* +Y0466791* +X0244058* +X0243391Y0467458* +X0240059Y0462126D02* +X0244058D01* +X0242058Y0464126* +Y046146* +X0262008Y0300984D02* +X0266007D01* +Y0298985* +X026534Y0298319* +X0264007* +X0263341Y0298985* +Y0300984* +X0266007Y0296986D02* +X0262008D01* +X0263341Y0295653* +X0262008Y029432* +X0266007* +X0262008Y0292987D02* +X0266007D01* +Y0290987* +X026534Y0290321* +X0264007* +X0263341Y0290987* +Y0292987* +Y0291654D02* +X0262008Y0290321D01* +X0266105Y0309539D02* +Y0310872D01* +Y0310205* +X0262773* +X0262106Y0310872* +Y0311538* +X0262773Y0312205* +Y0308206D02* +X0262106Y030754D01* +Y0306207* +X0262773Y030554* +X0265439* +X0266105Y0306207* +Y030754* +X0265439Y0308206* +X0264772* +X0264106Y030754* +Y030554* +X0351833Y0323327D02* +X0347835D01* +Y0321327* +X0348501Y0320661* +X0351167* +X0351833Y0321327* +Y0323327* +X0347835Y0316662D02* +Y0319328D01* +X03505Y0316662* +X0351167* +X0351833Y0317329* +Y0318662* +X0351167Y0319328* +X0347835Y0315329D02* +Y0313997D01* +Y0314663* +X0351833* +X0351167Y0315329* +X0375554Y0412205D02* +X0371555D01* +Y0410205* +X0372222Y0409539* +X0374887* +X0375554Y0410205* +Y0412205* +X0371555Y0408206D02* +Y0406873D01* +Y040754* +X0375554* +X0374887Y0408206* +X0375554Y0402208D02* +X0374887Y0403541D01* +X0373554Y0404874* +X0372222* +X0371555Y0404207* +Y0402874* +X0372222Y0402208* +X0372888* +X0373554Y0402874* +Y0404874* +X0374303Y0579247D02* +X0374969Y057858D01* +X0376302* +X0376969Y0579247* +Y0581912* +X0376302Y0582579* +X0374969* +X0374303Y0581912* +X0370304Y057858D02* +X0371637Y0579247D01* +X037297Y0580579* +Y0581912* +X0372303Y0582579* +X037097* +X0370304Y0581912* +Y0581246* +X037097Y0580579* +X037297* +X0368971Y0579247D02* +X0368305Y057858D01* +X0366972* +X0366305Y0579247* +Y0581912* +X0366972Y0582579* +X0368305* +X0368971Y0581912* +Y0579247* +X0323903Y0549303D02* +X032457Y0549969D01* +Y0551302* +X0323903Y0551968* +X0321237* +X0320571Y0551302* +Y0549969* +X0321237Y0549303* +X0320571Y054597D02* +X032457D01* +X032257Y054797* +Y0545304* +X032457Y0541305D02* +Y0543971D01* +X032257* +X0323237Y0542638* +Y0541972* +X032257Y0541305* +X0321237* +X0320571Y0541972* +Y0543305* +X0321237Y0543971* +X0203529Y0285917D02* +X0204196Y0286583D01* +Y0287916* +X0203529Y0288583* +X0200863* +X0200197Y0287916* +Y0286583* +X0200863Y0285917* +X0200197Y0282585D02* +X0204196D01* +X0202196Y0284584* +Y0281918* +X0204196Y0280585D02* +Y027792D01* +X0203529* +X0200863Y0280585* +X0200197* +X0301224Y0374D02* +X030189Y0374666D01* +Y0375999* +X0301224Y0376665* +X0298558* +X0297891Y0375999* +Y0374666* +X0298558Y0374* +X0297891Y0370001D02* +Y0372667D01* +X0300557Y0370001* +X0301224* +X030189Y0370667* +Y0372* +X0301224Y0372667* +X0297891Y0366669D02* +X030189D01* +X0299891Y0368668* +Y0366002* +X0217124Y05063D02* +X021779Y0506966D01* +Y0508299* +X0217124Y0508965* +X0214458* +X0213791Y0508299* +Y0506966* +X0214458Y05063* +X0213791Y0502301D02* +Y0504967D01* +X0216457Y0502301* +X0217124* +X021779Y0502967* +Y05043* +X0217124Y0504967* +Y0500968D02* +X021779Y0500302D01* +Y0498969* +X0217124Y0498302* +X0216457* +X0215791Y0498969* +Y0499635* +Y0498969* +X0215124Y0498302* +X0214458* +X0213791Y0498969* +Y0500302* +X0214458Y0500968* +X0301173Y0537022D02* +X0301839Y0536356D01* +X0303172* +X0303839Y0537022* +Y0539688* +X0303172Y0540354* +X0301839* +X0301173Y0539688* +X029784Y0540354D02* +Y0536356D01* +X029984Y0538355* +X0297174* +X0295841Y0539688D02* +X0295175Y0540354D01* +X0293842* +X0293175Y0539688* +Y0537022* +X0293842Y0536356* +X0295175* +X0295841Y0537022* +Y0537688* +X0295175Y0538355* +X0293175* +X0290641Y0571865D02* +X0291308Y0571198D01* +X0292641* +X0293307Y0571865* +Y057453* +X0292641Y0575197* +X0291308* +X0290641Y057453* +X0287309Y0575197D02* +Y0571198D01* +X0289308Y0573198* +X0286643* +X028531Y0571865D02* +X0284643Y0571198D01* +X028331* +X0282644Y0571865* +Y0572531* +X028331Y0573198* +X0282644Y0573864* +Y057453* +X028331Y0575197* +X0284643* +X028531Y057453* +Y0573864* +X0284643Y0573198* +X028531Y0572531* +Y0571865* +X0284643Y0573198D02* +X028331D01* +X025859Y0477465D02* +X0254591D01* +Y0475466* +X0255258Y04748* +X0257924* +X025859Y0475466* +Y0477465* +X0257924Y0470801D02* +X025859Y0471467D01* +Y04728* +X0257924Y0473467* +X0257257* +X0256591Y04728* +Y0471467* +X0255924Y0470801* +X0255258* +X0254591Y0471467* +Y04728* +X0255258Y0473467* +X0254591Y0469468D02* +Y0468135D01* +Y0468801* +X025859* +X0257924Y0469468* +X025869Y0444565D02* +X0254691D01* +Y0442566* +X0255358Y04419* +X0258024* +X025869Y0442566* +Y0444565* +X0258024Y0437901D02* +X025869Y0438567D01* +Y04399* +X0258024Y0440567* +X0257357* +X0256691Y04399* +Y0438567* +X0256024Y0437901* +X0255358* +X0254691Y0438567* +Y04399* +X0255358Y0440567* +X0254691Y0433902D02* +Y0436568D01* +X0257357Y0433902* +X0258024* +X025869Y0434569* +Y0435901* +X0258024Y0436568* +X025869Y0407865D02* +X0254691D01* +Y0405866* +X0255358Y04052* +X0258024* +X025869Y0405866* +Y0407865* +X0258024Y0401201D02* +X025869Y0401867D01* +Y04032* +X0258024Y0403867* +X0257357* +X0256691Y04032* +Y0401867* +X0256024Y0401201* +X0255358* +X0254691Y0401867* +Y04032* +X0255358Y0403867* +X0258024Y0399868D02* +X025869Y0399201D01* +Y0397869* +X0258024Y0397202* +X0257357* +X0256691Y0397869* +Y0398535* +Y0397869* +X0256024Y0397202* +X0255358* +X0254691Y0397869* +Y0399201* +X0255358Y0399868* +X0201364Y04807D02* +X020203Y0481367D01* +Y04827* +X0201364Y0483366* +X0200697* +X0200031Y04827* +Y0481367* +X0199364Y04807* +X0198698* +X0198031Y0481367* +Y04827* +X0198698Y0483366* +X0198031Y0479367D02* +Y0478034D01* +Y0478701* +X020203* +X0201364Y0479367* +X0201324Y04269D02* +X020199Y0427566D01* +Y0428899* +X0201324Y0429565* +X0200657* +X0199991Y0428899* +Y0427566* +X0199324Y04269* +X0198658* +X0197991Y0427566* +Y0428899* +X0198658Y0429565* +X0201324Y0425567D02* +X020199Y04249D01* +Y0423567* +X0201324Y0422901* +X0200657* +X0199991Y0423567* +Y0424234* +Y0423567* +X0199324Y0422901* +X0198658* +X0197991Y0423567* +Y04249* +X0198658Y0425567* +X0227742Y0395464D02* +X0228408Y0396131D01* +Y0397463* +X0227742Y039813* +X0227075* +X0226409Y0397463* +Y0396131* +X0225742Y0395464* +X0225076* +X0224409Y0396131* +Y0397463* +X0225076Y039813* +X0224409Y0391465D02* +Y0394131D01* +X0227075Y0391465* +X0227742* +X0228408Y0392132* +Y0393465* +X0227742Y0394131* +X0379097Y0309547D02* +X0375098D01* +Y0307548* +X0375765Y0306881* +X0378431* +X0379097Y0307548* +Y0309547* +X0375098Y0302883D02* +Y0305549D01* +X0377764Y0302883* +X0378431* +X0379097Y0303549* +Y0304882* +X0378431Y0305549* +Y030155D02* +X0379097Y0300883D01* +Y0299551* +X0378431Y0298884* +X0375765* +X0375098Y0299551* +Y0300883* +X0375765Y030155* +X0378431* +X0206389Y0349424D02* +X0207056Y0348757D01* +X0208389* +X0209055Y0349424* +Y035209* +X0208389Y0352756* +X0207056* +X0206389Y035209* +X0202391Y0352756D02* +X0205056D01* +X0202391Y035009* +Y0349424* +X0203057Y0348757* +X020439* +X0205056Y0349424* +X0198392Y0348757D02* +X0199725Y0349424D01* +X0201058Y0350757* +Y035209* +X0200391Y0352756* +X0199058* +X0198392Y035209* +Y0351423* +X0199058Y0350757* +X0201058* +X0269758Y03675D02* +X0272424D01* +X027309Y0368166* +Y0369499* +X0272424Y0370165* +X0269758* +X0269091Y0369499* +Y0368166* +X0270424Y0368832D02* +X0269091Y03675D01* +Y0368166D02* +X0269758Y03675D01* +X0269091Y0366167D02* +Y0364834D01* +Y03655* +X027309* +X0272424Y0366167* +X027309Y0362834D02* +Y0360169D01* +X0272424* +X0269758Y0362834* +X0269091* +X0202748Y0532494D02* +X0203414Y0531828D01* +X0204747* +X0205413Y0532494* +Y053516* +X0204747Y0535827* +X0203414* +X0202748Y053516* +X0199415Y0535827D02* +Y0531828D01* +X0201415Y0533827* +X0198749* +X0197416Y0535827D02* +X0196083D01* +X0196749* +Y0531828* +X0197416Y0532494* +X0228037Y0548909D02* +X0228703Y0549576D01* +Y0550908* +X0228037Y0551575* +X0225371* +X0224705Y0550908* +Y0549576* +X0225371Y0548909* +X0224705Y0545577D02* +X0228703D01* +X0226704Y0547576* +Y054491* +X0224705Y0540912D02* +Y0543577D01* +X0227371Y0540912* +X0228037* +X0228703Y0541578* +Y0542911* +X0228037Y0543577* +X0227424Y0533858D02* +X0224092D01* +X0223425Y0533192* +Y0531859* +X0224092Y0531192* +X0227424* +Y0527194D02* +X0226758Y0528527D01* +X0225425Y052986* +X0224092* +X0223425Y0529193* +Y052786* +X0224092Y0527194* +X0224758* +X0225425Y052786* +Y052986* +X0327165Y0500984D02* +Y0496985D01* +X0325166* +X03245Y0497652* +Y0498985* +X0325166Y0499651* +X0327165* +X0325833D02* +X03245Y0500984D01* +X0321167D02* +Y0496985D01* +X0323167Y0498985* +X0320501* +X0319168Y0500318D02* +X0318501Y0500984D01* +X0317169* +X0316502Y0500318* +Y0497652* +X0317169Y0496985* +X0318501* +X0319168Y0497652* +Y0498318* +X0318501Y0498985* +X0316502* +X0373091Y0497835D02* +Y0493836D01* +X0371092* +X0370426Y0494502* +Y0495835* +X0371092Y0496502* +X0373091* +X0371758D02* +X0370426Y0497835D01* +X0366427Y0493836D02* +X0369093D01* +Y0495835* +X036776Y0495169* +X0367093* +X0366427Y0495835* +Y0497168* +X0367093Y0497835* +X0368426* +X0369093Y0497168* +X0365094Y0494502D02* +X0364427Y0493836D01* +X0363095* +X0362428Y0494502* +Y0497168* +X0363095Y0497835* +X0364427* +X0365094Y0497168* +Y0494502* +X0355195Y0540224D02* +Y0536226D01* +X0353196* +X0352529Y0536892* +Y0538225* +X0353196Y0538891* +X0355195* +X0353862D02* +X0352529Y0540224D01* +X034853Y0536226D02* +X0351196D01* +Y0538225* +X0349863Y0537559* +X0349197* +X034853Y0538225* +Y0539558* +X0349197Y0540224* +X035053* +X0351196Y0539558* +X0344532Y0536226D02* +X0347197D01* +Y0538225* +X0345865Y0537559* +X0345198* +X0344532Y0538225* +Y0539558* +X0345198Y0540224* +X0346531* +X0347197Y0539558* +X0332874Y0495276D02* +Y0491277D01* +X0330875* +X0330208Y0491943* +Y0493276* +X0330875Y0493943* +X0332874* +X0331541D02* +X0330208Y0495276D01* +X0326209Y0491277D02* +X0327542Y0491943D01* +X0328875Y0493276* +Y0494609* +X0328209Y0495276* +X0326876* +X0326209Y0494609* +Y0493943* +X0326876Y0493276* +X0328875* +X0324877Y0491943D02* +X032421Y0491277D01* +X0322877* +X0322211Y0491943* +Y0494609* +X0322877Y0495276* +X032421* +X0324877Y0494609* +Y0491943* +X036199Y0455761D02* +X0358658D01* +X0357991Y0455094* +Y0453761* +X0358658Y0453095* +X036199* +X0357991Y0451762D02* +Y0450429D01* +Y0451095* +X036199* +X0361324Y0451762* +X036199Y0445764D02* +Y044843D01* +X0359991* +X0360657Y0447097* +Y044643* +X0359991Y0445764* +X0358658* +X0357991Y044643* +Y0447763* +X0358658Y044843* +X0331755Y0489567D02* +X0328422D01* +X0327756Y0488901* +Y0487568* +X0328422Y0486901* +X0331755* +X0327756Y0485568D02* +Y0484235D01* +Y0484902* +X0331755* +X0331088Y0485568* +X0331755Y0482236D02* +Y047957D01* +X0331088* +X0328422Y0482236* +X0327756* +X0351862Y0524424D02* +X0352528Y0523757D01* +X0353861* +X0354528Y0524424* +Y052709* +X0353861Y0527756* +X0352528* +X0351862Y052709* +X0347863Y0527756D02* +X0350529D01* +X0347863Y052509* +Y0524424* +X034853Y0523757* +X0349862* +X0350529Y0524424* +X034653Y0523757D02* +X0343864D01* +Y0524424* +X034653Y052709* +Y0527756* +X0369179Y0485622D02* +X0369845Y0486288D01* +Y0487621* +X0369179Y0488287* +X0366513* +X0365846Y0487621* +Y0486288* +X0366513Y0485622* +X0365846Y0481623D02* +Y0484289D01* +X0368512Y0481623* +X0369179* +X0369845Y0482289* +Y0483622* +X0369179Y0484289* +Y048029D02* +X0369845Y0479624D01* +Y0478291* +X0369179Y0477624* +X0368512* +X0367846Y0478291* +X0367179Y0477624* +X0366513* +X0365846Y0478291* +Y0479624* +X0366513Y048029* +X0367179* +X0367846Y0479624* +X0368512Y048029* +X0369179* +X0367846Y0479624D02* +Y0478291D01* +X03245Y0506806D02* +X0325166Y0506139D01* +X0326499* +X0327165Y0506806* +Y0509471* +X0326499Y0510138* +X0325166* +X03245Y0509471* +X0321167Y0510138D02* +Y0506139D01* +X0323167Y0508139* +X0320501* +X0319168Y0506806D02* +X0318501Y0506139D01* +X0317169* +X0316502Y0506806* +Y0507472* +X0317169Y0508139* +X0317835* +X0317169* +X0316502Y0508805* +Y0509471* +X0317169Y0510138* +X0318501* +X0319168Y0509471* +X0217778Y0306398D02* +X0213779D01* +Y0304398* +X0214446Y0303732* +X0217112* +X0217778Y0304398* +Y0306398* +X0213779Y0302399D02* +Y0301066D01* +Y0301732* +X0217778* +X0217112Y0302399* +Y0299067D02* +X0217778Y02984D01* +Y0297067* +X0217112Y0296401* +X0216445* +X0215779Y0297067* +X0215112Y0296401* +X0214446* +X0213779Y0297067* +Y02984* +X0214446Y0299067* +X0215112* +X0215779Y02984* +X0216445Y0299067* +X0217112* +X0215779Y02984D02* +Y0297067D01* +X0245571Y0297699D02* +Y0293701D01* +X024757* +X0248237Y0294367* +Y0297033* +X024757Y0297699* +X0245571* +X024957Y0293701D02* +X0250902D01* +X0250236* +Y0297699* +X024957Y0297033* +X0252902Y0294367D02* +X0253568Y0293701D01* +X0254901* +X0255568Y0294367* +Y0297033* +X0254901Y0297699* +X0253568* +X0252902Y0297033* +Y0296367* +X0253568Y02957* +X0255568* +X0192708Y0480526D02* +X0193375Y047986D01* +X0194708* +X0195374Y0480526* +Y0483192* +X0194708Y0483858* +X0193375* +X0192708Y0483192* +X0191375Y0480526D02* +X0190709Y047986D01* +X0189376* +X0188709Y0480526* +Y0481192* +X0189376Y0481859* +X0190042* +X0189376* +X0188709Y0482525* +Y0483192* +X0189376Y0483858* +X0190709* +X0191375Y0483192* +X0187377Y0480526D02* +X018671Y047986D01* +X0185377* +X0184711Y0480526* +Y0483192* +X0185377Y0483858* +X018671* +X0187377Y0483192* +Y0480526* +X0158723Y0490158D02* +X0155391D01* +X0154724Y0489491* +Y0488158* +X0155391Y0487492* +X0158723* +X0154724Y0484159D02* +X0158723D01* +X0156724Y0486159* +Y0483493* +X0256881Y0498833D02* +X0257548Y0498167D01* +X0258881* +X0259547Y0498833* +Y0501499* +X0258881Y0502165* +X0257548* +X0256881Y0501499* +X0252883Y0498167D02* +X0255549D01* +Y0500166* +X0254216Y04995* +X0253549* +X0252883Y0500166* +Y0501499* +X0253549Y0502165* +X0254882* +X0255549Y0501499* +X0248884Y0498167D02* +X025155D01* +Y0500166* +X0250217Y04995* +X0249551* +X0248884Y0500166* +Y0501499* +X0249551Y0502165* +X0250883* +X025155Y0501499* +X0256881Y0493124D02* +X0257548Y0492458D01* +X0258881* +X0259547Y0493124* +Y049579* +X0258881Y0496457* +X0257548* +X0256881Y049579* +X0252883Y0492458D02* +X0255549D01* +Y0494457* +X0254216Y0493791* +X0253549* +X0252883Y0494457* +Y049579* +X0253549Y0496457* +X0254882* +X0255549Y049579* +X0248884Y0492458D02* +X0250217Y0493124D01* +X025155Y0494457* +Y049579* +X0250883Y0496457* +X0249551* +X0248884Y049579* +Y0495124* +X0249551Y0494457* +X025155* +X024409Y0518365D02* +X0243424D01* +X0242091Y0517032* +X0243424Y05157* +X024409* +X0242091Y0517032D02* +X0240091D01* +Y0514367D02* +Y0513034D01* +Y05137* +X024409* +X0243424Y0514367* +X0168369Y0506595D02* +X016437D01* +Y0504595* +X0165036Y0503929* +X0167702* +X0168369Y0504595* +Y0506595* +X016437Y0502596D02* +Y0501263D01* +Y0501929* +X0168369* +X0167702Y0502596* +X0168369Y0499263D02* +Y0496598D01* +X0167702* +X0165036Y0499263* +X016437* +X0280217Y0353937D02* +Y0349938D01* +X0278217* +X0277551Y0350605* +Y0351938* +X0278217Y0352604* +X0280217* +X0278884D02* +X0277551Y0353937D01* +X0273552Y0349938D02* +X0276218D01* +Y0351938* +X0274885Y0351271* +X0274219* +X0273552Y0351938* +Y035327* +X0274219Y0353937* +X0275551* +X0276218Y035327* +X0272219Y0349938D02* +X0269553D01* +Y0350605* +X0272219Y035327* +Y0353937* +X0367028Y0518307D02* +Y0514308D01* +X0365028* +X0364362Y0514975* +Y0516308* +X0365028Y0516974* +X0367028* +X0365695D02* +X0364362Y0518307D01* +X0360363Y0514308D02* +X0363029D01* +Y0516308* +X0361696Y0515641* +X036103* +X0360363Y0516308* +Y0517641* +X036103Y0518307* +X0362362* +X0363029Y0517641* +X035903Y0514975D02* +X0358364Y0514308D01* +X0357031* +X0356364Y0514975* +Y0515641* +X0357031Y0516308* +X0356364Y0516974* +Y0517641* +X0357031Y0518307* +X0358364* +X035903Y0517641* +Y0516974* +X0358364Y0516308* +X035903Y0515641* +Y0514975* +X0358364Y0516308D02* +X0357031D01* +X0293299Y0288302D02* +X0293965Y0287635D01* +X0295298* +X0295965Y0288302* +Y0290967* +X0295298Y0291634* +X0293965* +X0293299Y0290967* +X0291966Y0288302D02* +X0291299Y0287635D01* +X0289967* +X02893Y0288302* +Y0288968* +X0289967Y0289634* +X0290633* +X0289967* +X02893Y0290301* +Y0290967* +X0289967Y0291634* +X0291299* +X0291966Y0290967* +X0287967Y0287635D02* +X0285301D01* +Y0288302* +X0287967Y0290967* +Y0291634* +X0338962Y0347236D02* +X0339629Y0347902D01* +Y0349235* +X0338962Y0349902* +X0336296* +X033563Y0349235* +Y0347902* +X0336296Y0347236* +X0338962Y0345903D02* +X0339629Y0345236D01* +Y0343903* +X0338962Y0343237* +X0338296* +X0337629Y0343903* +Y034457* +Y0343903* +X0336963Y0343237* +X0336296* +X033563Y0343903* +Y0345236* +X0336296Y0345903* +X0338962Y0341904D02* +X0339629Y0341238D01* +Y0339905* +X0338962Y0339238* +X0338296* +X0337629Y0339905* +X0336963Y0339238* +X0336296* +X033563Y0339905* +Y0341238* +X0336296Y0341904* +X0336963* +X0337629Y0341238* +X0338296Y0341904* +X0338962* +X0337629Y0341238D02* +Y0339905D01* +X0343988Y0290369D02* +X0344654Y0289702D01* +X0345987* +X0346654Y0290369* +Y0293034* +X0345987Y0293701* +X0344654* +X0343988Y0293034* +X0342655Y0290369D02* +X0341988Y0289702D01* +X0340655* +X0339989Y0290369* +Y0291035* +X0340655Y0291702* +X0341322* +X0340655* +X0339989Y0292368* +Y0293034* +X0340655Y0293701* +X0341988* +X0342655Y0293034* +X0338656D02* +X033799Y0293701D01* +X0336657* +X033599Y0293034* +Y0290369* +X0336657Y0289702* +X033799* +X0338656Y0290369* +Y0291035* +X033799Y0291702* +X033599* +X0290183Y0371867D02* +X0294182D01* +Y0369868* +X0293516Y0369201* +X0292183* +X0291516Y0369868* +Y0371867* +Y0370534D02* +X0290183Y0369201D01* +X0294182Y0365202D02* +Y0367868D01* +X0292183* +X0292849Y0366535* +Y0365869* +X0292183Y0365202* +X029085* +X0290183Y0365869* +Y0367202* +X029085Y0367868* +X0293516Y036387D02* +X0294182Y0363203D01* +Y036187* +X0293516Y0361204* +X0292849* +X0292183Y036187* +Y0362537* +Y036187* +X0291516Y0361204* +X029085* +X0290183Y036187* +Y0363203* +X029085Y036387* +X0283661Y0362795D02* +X028766D01* +Y0360796* +X0286994Y0360129* +X0285661* +X0284994Y0360796* +Y0362795* +Y0361462D02* +X0283661Y0360129D01* +X028766Y0356131D02* +X0286994Y0357464D01* +X0285661Y0358797* +X0284328* +X0283661Y035813* +Y0356797* +X0284328Y0356131* +X0284994* +X0285661Y0356797* +Y0358797* +X028766Y0352132D02* +Y0354798D01* +X0285661* +X0286327Y0353465* +Y0352799* +X0285661Y0352132* +X0284328* +X0283661Y0352799* +Y0354131* +X0284328Y0354798* +X0284449Y0347047D02* +X0288447D01* +Y0345048* +X0287781Y0344381* +X0286448* +X0285782Y0345048* +Y0347047* +Y0345714D02* +X0284449Y0344381D01* +X0288447Y0340383D02* +X0287781Y0341716D01* +X0286448Y0343049* +X0285115* +X0284449Y0342382* +Y0341049* +X0285115Y0340383* +X0285782* +X0286448Y0341049* +Y0343049* +X0287781Y033905D02* +X0288447Y0338383D01* +Y0337051* +X0287781Y0336384* +X0287115* +X0286448Y0337051* +Y0337717* +Y0337051* +X0285782Y0336384* +X0285115* +X0284449Y0337051* +Y0338383* +X0285115Y033905* +X0336909Y0315391D02* +Y0318723D01* +X0336243Y031939* +X033491* +X0334244Y0318723* +Y0315391* +X0332911Y031939D02* +X0331578D01* +X0332244* +Y0315391* +X0332911Y0316057* +X0329578D02* +X0328912Y0315391D01* +X0327579* +X0326913Y0316057* +Y0316724* +X0327579Y031739* +X0326913Y0318057* +Y0318723* +X0327579Y031939* +X0328912* +X0329578Y0318723* +Y0318057* +X0328912Y031739* +X0329578Y0316724* +Y0316057* +X0328912Y031739D02* +X0327579D01* +X0192741Y0470933D02* +X0193408Y0470267D01* +X0194741* +X0195407Y0470933* +Y0473599* +X0194741Y0474265* +X0193408* +X0192741Y0473599* +X0189409Y0474265D02* +Y0470267D01* +X0191408Y0472266* +X0188743* +X0184744Y0470267D02* +X0186077Y0470933D01* +X018741Y0472266* +Y0473599* +X0186743Y0474265* +X018541* +X0184744Y0473599* +Y0472932* +X018541Y0472266* +X018741* +X0156679Y04182D02* +X0157345Y0418867D01* +Y04202* +X0156679Y0420866* +X0154013* +X0153347Y04202* +Y0418867* +X0154013Y04182* +X0157345Y0414202D02* +Y0416867D01* +X0155346* +X0156012Y0415534* +Y0414868* +X0155346Y0414202* +X0154013* +X0153347Y0414868* +Y0416201* +X0154013Y0416867* +X0156679Y0412869D02* +X0157345Y0412202D01* +Y0410869* +X0156679Y0410203* +X0156012* +X0155346Y0410869* +Y0411536* +Y0410869* +X0154679Y0410203* +X0154013* +X0153347Y0410869* +Y0412202* +X0154013Y0412869* +X0172324Y0408D02* +X017299Y0408666D01* +Y0409999* +X0172324Y0410665* +X0169658* +X0168991Y0409999* +Y0408666* +X0169658Y0408* +X017299Y0404001D02* +Y0406667D01* +X0170991* +X0171657Y0405334* +Y0404667* +X0170991Y0404001* +X0169658* +X0168991Y0404667* +Y0406* +X0169658Y0406667* +X0168991Y0400669D02* +X017299D01* +X0170991Y0402668* +Y0400002* +X0176191Y0406565D02* +X018019D01* +Y0404566* +X0179524Y04039* +X0178191* +X0177524Y0404566* +Y0406565* +Y0405232D02* +X0176191Y04039D01* +Y0399901D02* +Y0402567D01* +X0178857Y0399901* +X0179524* +X018019Y0400567* +Y04019* +X0179524Y0402567* +X018019Y0395902D02* +Y0398568D01* +X0178191* +X0178857Y0397235* +Y0396569* +X0178191Y0395902* +X0176858* +X0176191Y0396569* +Y0397902* +X0176858Y0398568* +X0190277Y0419291D02* +X0194276D01* +Y0417292* +X0193609Y0416625* +X0192277* +X019161Y0417292* +Y0419291* +Y0417958D02* +X0190277Y0416625D01* +Y0412627D02* +Y0415293D01* +X0192943Y0412627* +X0193609* +X0194276Y0413293* +Y0414626* +X0193609Y0415293* +X0194276Y0408628D02* +X0193609Y0409961D01* +X0192277Y0411294* +X0190944* +X0190277Y0410628* +Y0409295* +X0190944Y0408628* +X019161* +X0192277Y0409295* +Y0411294* +X0201932Y0458071D02* +X01986D01* +X0197933Y0457404* +Y0456072* +X01986Y0455405* +X0201932* +Y0454072D02* +Y0451406D01* +X0201265* +X01986Y0454072* +X0197933* +X0170472Y0397539D02* +X0174471D01* +Y039554* +X0173805Y0394874* +X0172472* +X0171805Y039554* +Y0397539* +Y0396206D02* +X0170472Y0394874D01* +X016914Y0392208D02* +Y0391541D01* +X0169806Y0390875* +X0173138* +Y0392874* +X0172472Y0393541* +X0171139* +X0170472Y0392874* +Y0390875* +Y0389542D02* +X0173138D01* +Y0387543* +X0172472Y0386876* +X0170472* +X0174471Y0382877D02* +X0170472D01* +Y0384877* +X0171139Y0385543* +X0172472* +X0173138Y0384877* +Y0382877* +X0170472Y0381544D02* +Y0380212D01* +Y0380878* +X0174471* +X0173805Y0381544* +X0208661Y032815D02* +Y0324151D01* +X0206662* +X0205996Y0324817* +Y032615* +X0206662Y0326817* +X0208661* +X0207329D02* +X0205996Y032815D01* +X0204663Y0324817D02* +X0203996Y0324151D01* +X0202663* +X0201997Y0324817* +Y0325484* +X0202663Y032615* +X020333* +X0202663* +X0201997Y0326817* +Y0327483* +X0202663Y032815* +X0203996* +X0204663Y0327483* +X0200664Y0324817D02* +X0199997Y0324151D01* +X0198665* +X0197998Y0324817* +Y0325484* +X0198665Y032615* +X0199331* +X0198665* +X0197998Y0326817* +Y0327483* +X0198665Y032815* +X0199997* +X0200664Y0327483* +X0168897Y0346654D02* +Y0342655D01* +X0166898* +X0166232Y0343321* +Y0344654* +X0166898Y0345321* +X0168897* +X0167564D02* +X0166232Y0346654D01* +X0162899D02* +Y0342655D01* +X0164899Y0344654* +X0162233* +X0158901Y0346654D02* +Y0342655D01* +X01609Y0344654* +X0158234* +X0373291Y0340565D02* +X037729D01* +Y0338566* +X0376624Y03379* +X0375291* +X0374624Y0338566* +Y0340565* +Y0339232D02* +X0373291Y03379D01* +X0376624Y0336567D02* +X037729Y03359D01* +Y0334567* +X0376624Y0333901* +X0375957* +X0375291Y0334567* +Y0335234* +Y0334567* +X0374624Y0333901* +X0373958* +X0373291Y0334567* +Y03359* +X0373958Y0336567* +X037729Y0332568D02* +Y0329902D01* +X0376624* +X0373958Y0332568* +X0373291* +X034439Y0360728D02* +X0348389D01* +Y0358729* +X0347722Y0358063* +X0346389* +X0345723Y0358729* +Y0360728* +Y0359395D02* +X034439Y0358063D01* +X0347722Y035673D02* +X0348389Y0356063D01* +Y035473* +X0347722Y0354064* +X0347056* +X0346389Y035473* +Y0355397* +Y035473* +X0345723Y0354064* +X0345056* +X034439Y035473* +Y0356063* +X0345056Y035673* +X0347722Y0352731D02* +X0348389Y0352064D01* +Y0350732* +X0347722Y0350065* +X0347056* +X0346389Y0350732* +X0345723Y0350065* +X0345056* +X034439Y0350732* +Y0352064* +X0345056Y0352731* +X0345723* +X0346389Y0352064* +X0347056Y0352731* +X0347722* +X0346389Y0352064D02* +Y0350732D01* +X0371161Y0381004D02* +X037516D01* +Y0379005* +X0374494Y0378338* +X0373161* +X0372494Y0379005* +Y0381004* +Y0379671D02* +X0371161Y0378338D01* +Y0375006D02* +X037516D01* +X0373161Y0377005* +Y0374339* +X0371161Y0370341D02* +Y0373007D01* +X0373827Y0370341* +X0374494* +X037516Y0371007* +Y037234* +X0374494Y0373007* +X0339469Y037815D02* +X0343467D01* +Y037615* +X0342801Y0375484* +X0341468* +X0340801Y037615* +Y037815* +Y0376817D02* +X0339469Y0375484D01* +Y0372151D02* +X0343467D01* +X0341468Y0374151* +Y0371485* +X0342801Y0370152D02* +X0343467Y0369486D01* +Y0368153* +X0342801Y0367486* +X0342134* +X0341468Y0368153* +X0340801Y0367486* +X0340135* +X0339469Y0368153* +Y0369486* +X0340135Y0370152* +X0340801* +X0341468Y0369486* +X0342134Y0370152* +X0342801* +X0341468Y0369486D02* +Y0368153D01* +X0348425Y0404724D02* +X0352424D01* +Y0402725* +X0351758Y0402059* +X0350425* +X0349758Y0402725* +Y0404724* +Y0403392D02* +X0348425Y0402059D01* +Y039806D02* +Y0400726D01* +X0351091Y039806* +X0351758* +X0352424Y0398726* +Y0400059* +X0351758Y0400726* +X0348425Y0394728D02* +X0352424D01* +X0350425Y0396727* +Y0394061* +X0237092Y0457177D02* +X0237759Y0457843D01* +Y0459176* +X0237092Y0459842* +X0234426* +X023376Y0459176* +Y0457843* +X0234426Y0457177* +X0237092Y0455844D02* +X0237759Y0455177D01* +Y0453844* +X0237092Y0453178* +X0236426* +X0235759Y0453844* +Y0454511* +Y0453844* +X0235093Y0453178* +X0234426* +X023376Y0453844* +Y0455177* +X0234426Y0455844* +X023376Y0449846D02* +X0237759D01* +X0235759Y0451845* +Y0449179* +X0234238Y0391527D02* +X0234904Y0392194D01* +Y0393527* +X0234238Y0394193* +X0231572* +X0230906Y0393527* +Y0392194* +X0231572Y0391527* +X0234238Y0390194D02* +X0234904Y0389528D01* +Y0388195* +X0234238Y0387528* +X0233571* +X0232905Y0388195* +Y0388861* +Y0388195* +X0232238Y0387528* +X0231572* +X0230906Y0388195* +Y0389528* +X0231572Y0390194* +X0234904Y038353D02* +Y0386195D01* +X0232905* +X0233571Y0384863* +Y0384196* +X0232905Y038353* +X0231572* +X0230906Y0384196* +Y0385529* +X0231572Y0386195* +X0376271Y0501097D02* +X0376938Y050043D01* +X0378271* +X0378937Y0501097* +Y0503763* +X0378271Y0504429* +X0376938* +X0376271Y0503763* +X0372272Y050043D02* +X0373605Y0501097D01* +X0374938Y050243* +Y0503763* +X0374272Y0504429* +X0372939* +X0372272Y0503763* +Y0503096* +X0372939Y050243* +X0374938* +X0368274Y050043D02* +X0369607Y0501097D01* +X037094Y050243* +Y0503763* +X0370273Y0504429* +X036894* +X0368274Y0503763* +Y0503096* +X036894Y050243* +X037094* +X055867Y0369868D02* +X0558003Y0370534D01* +X055667* +X0556004Y0369868* +Y0367202* +X055667Y0366535* +X0558003* +X055867Y0367202* +X0562668Y0366535D02* +X0560003D01* +X0562668Y0369201* +Y0369868* +X0562002Y0370534* +X0560669* +X0560003Y0369868* +X0566667Y0366535D02* +X0564001D01* +X0566667Y0369201* +Y0369868* +X0566001Y0370534* +X0564668* +X0564001Y0369868* +X0612106Y0418467D02* +Y0414468D01* +X0614106* +X0614772Y0415135* +Y0417801* +X0614106Y0418467* +X0612106* +X0616105Y0414468D02* +X0617438D01* +X0616771* +Y0418467* +X0616105Y0417801* +X0622103Y0418467D02* +X0619437D01* +Y0416468* +X062077Y0417134* +X0621437* +X0622103Y0416468* +Y0415135* +X0621437Y0414468* +X0620104* +X0619437Y0415135* +X0557677Y0329823D02* +Y0333822D01* +X0559677* +X0560343Y0333155* +Y0331822* +X0559677Y0331156* +X0557677* +X055901D02* +X0560343Y0329823D01* +X0564342D02* +X0561676D01* +X0564342Y0332489* +Y0333155* +X0563675Y0333822* +X0562342* +X0561676Y0333155* +X056834Y0329823D02* +X0565675D01* +X056834Y0332489* +Y0333155* +X0567674Y0333822* +X0566341* +X0565675Y0333155* +X0501968Y0316043D02* +Y0320042D01* +X0503968* +X0504634Y0319375* +Y0318043* +X0503968Y0317376* +X0501968* +X0503301D02* +X0504634Y0316043D01* +X0508633D02* +X0505967D01* +X0508633Y0318709* +Y0319375* +X0507967Y0320042* +X0506634* +X0505967Y0319375* +X0509966Y0316043D02* +X0511299D01* +X0510632* +Y0320042* +X0509966Y0319375* +X0511993Y0331291D02* +X0512659Y0331957D01* +Y033329* +X0511993Y0333957* +X0509327* +X0508661Y033329* +Y0331957* +X0509327Y0331291* +X0508661Y0327292D02* +Y0329958D01* +X0511327Y0327292* +X0511993* +X0512659Y0327959* +Y0329292* +X0511993Y0329958* +X0508661Y0325959D02* +Y0324626D01* +Y0325293* +X0512659* +X0511993Y0325959* +X054813Y0484314D02* +X0550796D01* +Y0483647* +X054813Y0480981* +Y0480315* +X0550796* +X0552129Y0484314D02* +Y0480315D01* +X0554128* +X0554794Y0480981* +Y0483647* +X0554128Y0484314* +X0552129* +X0558793Y0480315D02* +X0556127D01* +X0558793Y0482981* +Y0483647* +X0558127Y0484314* +X0556794* +X0556127Y0483647* +X0585517Y0316822D02* +X0586184Y0317489D01* +Y0318822* +X0585517Y0319488* +X0584851* +X0584184Y0318822* +Y0317489* +X0583518Y0316822* +X0582852* +X0582185Y0317489* +Y0318822* +X0582852Y0319488* +X0586184Y0312824D02* +Y0315489D01* +X0582185* +Y0312824* +X0584184Y0315489D02* +Y0314157D01* +X0582185Y0311491D02* +X0586184D01* +X0582185Y0308825* +X0586184* +X0585517Y0304826D02* +X0586184Y0305493D01* +Y0306826* +X0585517Y0307492* +X0584851* +X0584184Y0306826* +Y0305493* +X0583518Y0304826* +X0582852* +X0582185Y0305493* +Y0306826* +X0582852Y0307492* +X0586184Y0301494D02* +Y0302827D01* +X0585517Y0303493* +X0582852* +X0582185Y0302827* +Y0301494* +X0582852Y0300828* +X0585517* +X0586184Y0301494* +X0582185Y0299495D02* +X0586184D01* +Y0297495* +X0585517Y0296829* +X0584184* +X0583518Y0297495* +Y0299495* +Y0298162D02* +X0582185Y0296829D01* +X0591892Y0300779D02* +Y0302112D01* +Y0301446* +X058856* +X0587894Y0302112* +Y0302778* +X058856Y0303445* +X0591892Y029678D02* +X0591226Y0298113D01* +X0589893Y0299446* +X058856* +X0587894Y029878* +Y0297447* +X058856Y029678* +X0589227* +X0589893Y0297447* +Y0299446* +X0624508Y038579D02* +Y0382458D01* +X0625174Y0381791* +X0626507* +X0627174Y0382458* +Y038579* +X0631172Y0381791D02* +X0628507D01* +X0631172Y0384457* +Y0385123* +X0630506Y038579* +X0629173* +X0628507Y0385123* +X0672154Y0349387D02* +Y0352053D01* +X0671488Y0352719* +X0670155* +X0669488Y0352053* +Y0349387* +X0670155Y034872* +X0671488* +X0670821Y0350053D02* +X0672154Y034872D01* +X0671488D02* +X0672154Y0349387D01* +X0673487Y034872D02* +X067482D01* +X0674153* +Y0352719* +X0673487Y0352053* +X0676819Y034872D02* +X0678152D01* +X0677486* +Y0352719* +X0676819Y0352053* +X0672055Y0378619D02* +Y0381285D01* +X0671389Y0381951* +X0670056* +X066939Y0381285* +Y0378619* +X0670056Y0377953* +X0671389* +X0670723Y0379286D02* +X0672055Y0377953D01* +X0671389D02* +X0672055Y0378619D01* +X0673388Y0377953D02* +X0674721D01* +X0674055* +Y0381951* +X0673388Y0381285* +X0676721D02* +X0677387Y0381951D01* +X067872* +X0679387Y0381285* +Y0378619* +X067872Y0377953* +X0677387* +X0676721Y0378619* +Y0381285* +X063061Y0452227D02* +X0633276D01* +Y0451561* +X063061Y0448895* +Y0448228* +X0633276* +X0634609Y0452227D02* +Y0448228D01* +X0636608* +X0637275Y0448895* +Y0451561* +X0636608Y0452227* +X0634609* +X0638608D02* +X0641273D01* +Y0451561* +X0638608Y0448895* +Y0448228* +X054498Y0341203D02* +Y0337871D01* +X0545647Y0337205* +X054698* +X0547646Y0337871* +Y0341203* +X0548979Y0340537D02* +X0549645Y0341203D01* +X0550978* +X0551645Y0340537* +Y0339871* +X0550978Y0339204* +X0550312* +X0550978* +X0551645Y0338538* +Y0337871* +X0550978Y0337205* +X0549645* +X0548979Y0337871* +X0570177Y0348524D02* +Y0352522D01* +X0572177* +X0572843Y0351856* +Y0350523* +X0572177Y0349856* +X0570177* +X057151D02* +X0572843Y0348524D01* +X0574176D02* +X0576175D01* +X0576842Y034919* +X0576175Y0349856* +X0574842* +X0574176Y0350523* +X0574842Y0351189* +X0576842* +X0578175Y0348524D02* +X0579507D01* +X0578841* +Y0352522* +X0578175Y0351856* +X0567618Y0437401D02* +Y04414D01* +X0569617* +X0570284Y0440734* +Y0439401* +X0569617Y0438734* +X0567618* +X0568951D02* +X0570284Y0437401D01* +X0571617D02* +X057295D01* +X0572283* +Y04414* +X0571617Y0440734* +X0574949D02* +X0575616Y04414D01* +X0576948* +X0577615Y0440734* +Y0440067* +X0576948Y0439401* +X0577615Y0438734* +Y0438068* +X0576948Y0437401* +X0575616* +X0574949Y0438068* +Y0438734* +X0575616Y0439401* +X0574949Y0440067* +Y0440734* +X0575616Y0439401D02* +X0576948D01* +X0569291Y0478346D02* +Y0482345D01* +X0571291* +X0571957Y0481679* +Y0480346* +X0571291Y0479679* +X0569291* +X0570624D02* +X0571957Y0478346D01* +X057329D02* +X0574623D01* +X0573956* +Y0482345* +X057329Y0481679* +X0576622Y0482345D02* +X0579288D01* +Y0481679* +X0576622Y0479013* +Y0478346* +X0567421Y044311D02* +Y0447109D01* +X0569421* +X0570087Y0446443* +Y044511* +X0569421Y0444443* +X0567421* +X0568754D02* +X0570087Y044311D01* +X057142D02* +X0572753D01* +X0572086* +Y0447109* +X057142Y0446443* +X0577418Y0447109D02* +X0576085Y0446443D01* +X0574752Y044511* +Y0443777* +X0575419Y044311* +X0576752* +X0577418Y0443777* +Y0444443* +X0576752Y044511* +X0574752* +X0586713Y0452165D02* +Y0456164D01* +X0588712* +X0589378Y0455498* +Y0454165* +X0588712Y0453498* +X0586713* +X0588046D02* +X0589378Y0452165D01* +X0590711D02* +X0592044D01* +X0591378* +Y0456164* +X0590711Y0455498* +X0596709Y0456164D02* +X0594043D01* +Y0454165* +X0595376Y0454831* +X0596043* +X0596709Y0454165* +Y0452832* +X0596043Y0452165* +X059471* +X0594043Y0452832* +X062372Y0419193D02* +Y0423192D01* +X062572* +X0626386Y0422525* +Y0421192* +X062572Y0420526* +X062372* +X0625053D02* +X0626386Y0419193D01* +X0627719D02* +X0629052D01* +X0628386* +Y0423192* +X0627719Y0422525* +X0633051Y0419193D02* +Y0423192D01* +X0631051Y0421192* +X0633717* +X0630413Y0438583D02* +X0634412D01* +Y0436583* +X0633746Y0435917* +X0632413* +X0631746Y0436583* +Y0438583* +Y043725D02* +X0630413Y0435917D01* +Y0434584D02* +Y0433251D01* +Y0433918* +X0634412* +X0633746Y0434584* +Y0431252D02* +X0634412Y0430585D01* +Y0429252* +X0633746Y0428586* +X0633079* +X0632413Y0429252* +Y0429919* +Y0429252* +X0631746Y0428586* +X063108* +X0630413Y0429252* +Y0430585* +X063108Y0431252* +X0577863Y0425568D02* +Y0428234D01* +X0577196Y04289* +X0575863* +X0575197Y0428234* +Y0425568* +X0575863Y0424901* +X0577196* +X057653Y0426234D02* +X0577863Y0424901D01* +X0577196D02* +X0577863Y0425568D01* +X0579195Y0424901D02* +X0580528D01* +X0579862* +Y04289* +X0579195Y0428234* +X0585194Y0424901D02* +X0582528D01* +X0585194Y0427567* +Y0428234* +X0584527Y04289* +X0583194* +X0582528Y0428234* +X0601583Y0420056D02* +Y0422722D01* +X0600917Y0423388* +X0599584* +X0598917Y0422722* +Y0420056* +X0599584Y041939* +X0600917* +X060025Y0420723D02* +X0601583Y041939D01* +X0600917D02* +X0601583Y0420056D01* +X0602916D02* +X0603582Y041939D01* +X0604915* +X0605582Y0420056* +Y0422722* +X0604915Y0423388* +X0603582* +X0602916Y0422722* +Y0422055* +X0603582Y0421389* +X0605582* +X0647843Y0404407D02* +Y0407072D01* +X0647177Y0407739* +X0645844* +X0645177Y0407072* +Y0404407* +X0645844Y040374* +X0647177* +X064651Y0405073D02* +X0647843Y040374D01* +X0647177D02* +X0647843Y0404407D01* +X0649176Y0407072D02* +X0649842Y0407739D01* +X0651175* +X0651842Y0407072* +Y0406406* +X0651175Y0405739* +X0651842Y0405073* +Y0404407* +X0651175Y040374* +X0649842* +X0649176Y0404407* +Y0405073* +X0649842Y0405739* +X0649176Y0406406* +Y0407072* +X0649842Y0405739D02* +X0651175D01* +X0666536Y0320928D02* +Y0316929D01* +X0668535* +X0669201Y0317596* +Y0320261* +X0668535Y0320928* +X0666536* +X0670534Y0316929D02* +X0671867D01* +X0671201* +Y0320928* +X0670534Y0320261* +X0673866D02* +X0674533Y0320928D01* +X0675866* +X0676532Y0320261* +Y0319595* +X0675866Y0318929* +X0675199* +X0675866* +X0676532Y0318262* +Y0317596* +X0675866Y0316929* +X0674533* +X0673866Y0317596* +X058928Y0422722D02* +X0588614Y0423388D01* +X0587281* +X0586614Y0422722* +Y0420056* +X0587281Y041939* +X0588614* +X058928Y0420056* +X0590613Y041939D02* +X0591946D01* +X0591279* +Y0423388* +X0590613Y0422722* +X0593945D02* +X0594612Y0423388D01* +X0595944* +X0596611Y0422722* +Y0422055* +X0595944Y0421389* +X0596611Y0420723* +Y0420056* +X0595944Y041939* +X0594612* +X0593945Y0420056* +Y0420723* +X0594612Y0421389* +X0593945Y0422055* +Y0422722* +X0594612Y0421389D02* +X0595944D01* +X0656603Y0335812D02* +X0655936Y0336479D01* +X0654603* +X0653937Y0335812* +Y0333147* +X0654603Y033248* +X0655936* +X0656603Y0333147* +X0657936Y033248D02* +X0659269D01* +X0658602* +Y0336479* +X0657936Y0335812* +X0661268Y0336479D02* +X0663934D01* +Y0335812* +X0661268Y0333147* +Y033248* +X0565166Y0312486D02* +X0564499Y0313152D01* +X0563166* +X05625Y0312486* +Y030982* +X0563166Y0309154* +X0564499* +X0565166Y030982* +X0566499Y0309154D02* +Y0313152D01* +X0569165Y0309154* +Y0313152* +X0570497D02* +X0573163D01* +X057183* +Y0309154* +X0574496D02* +Y0313152D01* +X0576496* +X0577162Y0312486* +Y0311153* +X0576496Y0310486* +X0574496* +X0575829D02* +X0577162Y0309154D01* +X0573237Y0318959D02* +X0571904D01* +X057257* +Y0315627* +X0571904Y0314961* +X0571237* +X0570571Y0315627* +X0576569Y0314961D02* +Y0318959D01* +X057457Y031696* +X0577235* +X0500894Y0378619D02* +Y0381285D01* +X0500228Y0381951* +X0498895* +X0498228Y0381285* +Y0378619* +X0498895Y0377953* +X0500228* +X0499561Y0379286D02* +X0500894Y0377953D01* +X0500228D02* +X0500894Y0378619D01* +X0502227Y0381951D02* +X0504893D01* +Y0381285* +X0502227Y0378619* +Y0377953* +X0471438Y0322999D02* +Y0325664D01* +X0470771Y0326331* +X0469438* +X0468772Y0325664* +Y0322999* +X0469438Y0322332* +X0470771* +X0470105Y0323665D02* +X0471438Y0322332D01* +X0470771D02* +X0471438Y0322999D01* +X0475436Y0326331D02* +X0474103Y0325664D01* +X047277Y0324331* +Y0322999* +X0473437Y0322332* +X047477* +X0475436Y0322999* +Y0323665* +X047477Y0324331* +X047277* +X0446555Y038018D02* +Y0376181D01* +X0449221* +X045322D02* +X0450554D01* +X045322Y0378847* +Y0379513* +X0452553Y038018* +X045122* +X0450554Y0379513* +X0428574Y0324263D02* +X0427907Y0324929D01* +X0426574* +X0425908Y0324263* +Y0321597* +X0426574Y0320931* +X0427907* +X0428574Y0321597* +X0429907Y0320931D02* +X0431239D01* +X0430573* +Y0324929* +X0429907Y0324263* +X0435905Y0324929D02* +X0433239D01* +Y032293* +X0434572Y0323596* +X0435238* +X0435905Y032293* +Y0321597* +X0435238Y0320931* +X0433905* +X0433239Y0321597* +X0459041Y0390149D02* +X0459707Y0390816D01* +Y0392148* +X0459041Y0392815* +X0456375* +X0455709Y0392148* +Y0390816* +X0456375Y0390149* +X0455709Y0388816D02* +Y0387483D01* +Y038815* +X0459707* +X0459041Y0388816* +X0455709Y0383485D02* +X0459707D01* +X0457708Y0385484* +Y0382818* +X0548622Y0475751D02* +X0551288D01* +Y0475084* +X0548622Y0472418* +Y0471752* +X0551288* +X0552621Y0475751D02* +Y0471752D01* +X055462* +X0555287Y0472418* +Y0475084* +X055462Y0475751* +X0552621* +X0556619Y0471752D02* +X0557952D01* +X0557286* +Y0475751* +X0556619Y0475084* +X0548524Y0464173D02* +Y0468172D01* +X0550523* +X0551189Y0467505* +Y0466173* +X0550523Y0465506* +X0548524* +X0549857D02* +X0551189Y0464173D01* +X0552522D02* +X0553855D01* +X0553189* +Y0468172* +X0552522Y0467505* +X0555855D02* +X0556521Y0468172D01* +X0557854* +X055852Y0467505* +Y046484* +X0557854Y0464173* +X0556521* +X0555855Y046484* +Y0467505* +X0549902Y0450098D02* +Y0454097D01* +X0551901* +X0552567Y0453431* +Y0452098* +X0551901Y0451431* +X0549902* +X0551234D02* +X0552567Y0450098D01* +X05539Y0450765D02* +X0554567Y0450098D01* +X05559* +X0556566Y0450765* +Y0453431* +X05559Y0454097* +X0554567* +X05539Y0453431* +Y0452764* +X0554567Y0452098* +X0556566* +X0551485Y0459131D02* +Y0461797D01* +X0550818Y0462463* +X0549485* +X0548819Y0461797* +Y0459131* +X0549485Y0458464* +X0550818* +X0550152Y0459797D02* +X0551485Y0458464D01* +X0550818D02* +X0551485Y0459131D01* +X0555483Y0462463D02* +X0552818D01* +Y0460464* +X055415Y046113* +X0554817* +X0555483Y0460464* +Y0459131* +X0554817Y0458464* +X0553484* +X0552818Y0459131* +X0491535Y04414D02* +Y0437401D01* +X0493535* +X0494201Y0438068* +Y0440734* +X0493535Y04414* +X0491535* +X0495534Y0437401D02* +X0496867D01* +X0496201* +Y04414* +X0495534Y0440734* +X0501532Y0437401D02* +X0498866D01* +X0501532Y0440067* +Y0440734* +X0500866Y04414* +X0499533* +X0498866Y0440734* +X0516741Y0480596D02* +X0516074Y0481262D01* +X0514741* +X0514075Y0480596* +Y047793* +X0514741Y0477264* +X0516074* +X0516741Y047793* +X0518074Y0477264D02* +X0519406D01* +X051874* +Y0481262* +X0518074Y0480596* +X0521406D02* +X0522072Y0481262D01* +X0523405* +X0524072Y0480596* +Y0479929* +X0523405Y0479263* +X0522739* +X0523405* +X0524072Y0478597* +Y047793* +X0523405Y0477264* +X0522072* +X0521406Y047793* +X055552Y0446935D02* +X0554854Y0447601D01* +X0553521* +X0552854Y0446935* +Y0444269* +X0553521Y0443602* +X0554854* +X055552Y0444269* +X0556853Y0443602D02* +X0558186D01* +X0557519* +Y0447601* +X0556853Y0446935* +X0562851Y0443602D02* +X0560185D01* +X0562851Y0446268* +Y0446935* +X0562185Y0447601* +X0560852* +X0560185Y0446935* +X0639764Y0461516D02* +Y0465514D01* +X0641763* +X064243Y0464848* +Y0463515* +X0641763Y0462849* +X0639764* +X0641097D02* +X064243Y0461516D01* +X0643762D02* +X0645095D01* +X0644429* +Y0465514* +X0643762Y0464848* +X0656603Y0477053D02* +X0655936Y0477719D01* +X0654603* +X0653937Y0477053* +Y0474387* +X0654603Y047372* +X0655936* +X0656603Y0474387* +X0657936Y047372D02* +X0659269D01* +X0658602* +Y0477719* +X0657936Y0477053* +X0574221Y0455596D02* +X0573554Y0456262D01* +X0572222* +X0571555Y0455596* +Y045293* +X0572222Y0452264* +X0573554* +X0574221Y045293* +X0575554Y0452264D02* +X0576887D01* +X057622* +Y0456262* +X0575554Y0455596* +X0578886D02* +X0579553Y0456262D01* +X0580885* +X0581552Y0455596* +Y045293* +X0580885Y0452264* +X0579553* +X0578886Y045293* +Y0455596* +X0426068Y0438968D02* +X0426735Y0439635D01* +Y0440967* +X0426068Y0441634* +X0423403* +X0422736Y0440967* +Y0439635* +X0423403Y0438968* +X0422736Y0434969D02* +Y0437635D01* +X0425402Y0434969* +X0426068* +X0426735Y0435636* +Y0436969* +X0426068Y0437635* +X0433746Y0438968D02* +X0434412Y0439635D01* +Y0440967* +X0433746Y0441634* +X043108* +X0430413Y0440967* +Y0439635* +X043108Y0438968* +X0433746Y0437635D02* +X0434412Y0436969D01* +Y0435636* +X0433746Y0434969* +X0433079* +X0432413Y0435636* +Y0436302* +Y0435636* +X0431746Y0434969* +X043108* +X0430413Y0435636* +Y0436969* +X043108Y0437635* +X0404437Y0418588D02* +X0403771Y0419255D01* +X0402438* +X0401772Y0418588* +Y0415922* +X0402438Y0415256* +X0403771* +X0404437Y0415922* +X040777Y0415256D02* +Y0419255D01* +X040577Y0417255* +X0408436* +X0441642Y0428529D02* +X0440976Y0429195D01* +X0439643* +X0438976Y0428529* +Y0425863* +X0439643Y0425197* +X0440976* +X0441642Y0425863* +X0445641Y0429195D02* +X0442975D01* +Y0427196* +X0444308Y0427863* +X0444974* +X0445641Y0427196* +Y0425863* +X0444974Y0425197* +X0443642* +X0442975Y0425863* +X0481777Y042194D02* +X0482444Y0422607D01* +Y042394* +X0481777Y0424606* +X0479111* +X0478445Y042394* +Y0422607* +X0479111Y042194* +X0482444Y0417942D02* +X0481777Y0419275D01* +X0480444Y0420608* +X0479111* +X0478445Y0419941* +Y0418608* +X0479111Y0417942* +X0479778* +X0480444Y0418608* +Y0420608* +X0595481Y0317013D02* +X0594814Y031768D01* +X0593481* +X0592815Y0317013* +Y0314348* +X0593481Y0313681* +X0594814* +X0595481Y0314348* +X0596814D02* +X059748Y0313681D01* +X0598813* +X0599479Y0314348* +Y0317013* +X0598813Y031768* +X059748* +X0596814Y0317013* +Y0316347* +X059748Y031568* +X0599479* +X0490143Y042194D02* +X049081Y0422607D01* +Y042394* +X0490143Y0424606* +X0487477* +X0486811Y042394* +Y0422607* +X0487477Y042194* +X049081Y0420608D02* +Y0417942D01* +X0490143* +X0487477Y0420608* +X0486811* +X0520776Y0383647D02* +X052011Y0384314D01* +X0518777* +X051811Y0383647* +Y0380981* +X0518777Y0380315* +X052011* +X0520776Y0380981* +X0522109Y0383647D02* +X0522775Y0384314D01* +X0524108* +X0524775Y0383647* +Y0382981* +X0524108Y0382314* +X0524775Y0381648* +Y0380981* +X0524108Y0380315* +X0522775* +X0522109Y0380981* +Y0381648* +X0522775Y0382314* +X0522109Y0382981* +Y0383647* +X0522775Y0382314D02* +X0524108D01* +X059455Y053937D02* +X0590551D01* +Y0537371* +X0591218Y0536704* +X0593883* +X059455Y0537371* +Y053937* +X0590551Y0533372D02* +X059455D01* +X0592551Y0535371* +Y0532705* +X0574865Y053937D02* +X0570866D01* +Y0537371* +X0571533Y0536704* +X0574198* +X0574865Y0537371* +Y053937* +X0574198Y0535371D02* +X0574865Y0534705D01* +Y0533372* +X0574198Y0532705* +X0573532* +X0572865Y0533372* +Y0534038* +Y0533372* +X0572199Y0532705* +X0571533* +X0570866Y0533372* +Y0534705* +X0571533Y0535371* +X0641794Y053937D02* +X0637795D01* +Y0537371* +X0638462Y0536704* +X0641127* +X0641794Y0537371* +Y053937* +X0637795Y0532705D02* +Y0535371D01* +X0640461Y0532705* +X0641127* +X0641794Y0533372* +Y0534705* +X0641127Y0535371* +X0613091Y0317778D02* +Y0313779D01* +X061509* +X0615756Y0314446* +Y0317112* +X061509Y0317778* +X0613091* +X0617089Y0314446D02* +X0617756Y0313779D01* +X0619089* +X0619755Y0314446* +Y0317112* +X0619089Y0317778* +X0617756* +X0617089Y0317112* +Y0316445* +X0617756Y0315779* +X0619755* +X0494882Y0435692D02* +Y0431693D01* +X0496881* +X0497548Y0432359* +Y0435025* +X0496881Y0435692* +X0494882* +X0501546D02* +X0498881D01* +Y0433692* +X0500213Y0434359* +X050088* +X0501546Y0433692* +Y0432359* +X050088Y0431693* +X0499547* +X0498881Y0432359* +X0465945Y0415022D02* +Y0411024D01* +X0467944* +X0468611Y041169* +Y0414356* +X0467944Y0415022* +X0465945* +X0469944D02* +X0472609D01* +Y0414356* +X0469944Y041169* +Y0411024* +X0632776Y0477129D02* +Y047313D01* +X0634775* +X0635441Y0473796* +Y0476462* +X0634775Y0477129* +X0632776* +X0636774Y0476462D02* +X0637441Y0477129D01* +X0638774* +X063944Y0476462* +Y0475796* +X0638774Y0475129* +X063944Y0474463* +Y0473796* +X0638774Y047313* +X0637441* +X0636774Y0473796* +Y0474463* +X0637441Y0475129* +X0636774Y0475796* +Y0476462* +X0637441Y0475129D02* +X0638774D01* +X0632776Y0444451D02* +Y0440453D01* +X0634775* +X0635441Y0441119* +Y0443785* +X0634775Y0444451* +X0632776* +X0636774Y0440453D02* +X0638107D01* +X0637441* +Y0444451* +X0636774Y0443785* +X0640106D02* +X0640773Y0444451D01* +X0642106* +X0642772Y0443785* +Y0441119* +X0642106Y0440453* +X0640773* +X0640106Y0441119* +Y0443785* +X0678802Y052381D02* +Y0526476D01* +X0676802* +X0677469Y0525143* +Y0524477* +X0676802Y052381* +X067547* +X0674803Y0524477* +Y052581* +X067547Y0526476* +X0674803Y0522478D02* +X0677469D01* +X0678802Y0521145* +X0677469Y0519812* +X0674803* +X0676802* +Y0522478* +X0662463Y0528338D02* +Y0531004D01* +X0660464* +Y0529671* +Y0531004* +X0658464* +X0662463Y0527005D02* +X0659131D01* +X0658464Y0526339* +Y0525006* +X0659131Y0524339* +X0662463* +X0661797Y0520341D02* +X0662463Y0521007D01* +Y052234* +X0661797Y0523006* +X066113* +X0660464Y052234* +Y0521007* +X0659797Y0520341* +X0659131* +X0658464Y0521007* +Y052234* +X0659131Y0523006* +X0662463Y0516342D02* +Y0519008D01* +X0658464* +Y0516342* +X0660464Y0519008D02* +Y0517675D01* +X0658464Y0515009D02* +Y0513676D01* +Y0514343* +X0662463* +X0661797Y0515009* +X061122Y0602649D02* +Y0605315D01* +X0613886Y0602649* +X0614553* +X0615219Y0603316* +Y0604648* +X0614553Y0605315* +X061122Y0599317D02* +X0615219D01* +X061322Y0601316* +Y059865* +X0615219Y0597318D02* +X0612553D01* +X061122Y0595985* +X0612553Y0594652* +X0615219* +X061122Y0593319D02* +X0613886D01* +X0615219Y0591986* +X0613886Y0590653* +X061122* +X061322* +Y0593319* +X0614553Y0586654D02* +X0615219Y0587321D01* +Y0588654* +X0614553Y058932* +X0611887* +X061122Y0588654* +Y0587321* +X0611887Y0586654* +X0634063Y0581459D02* +X063273D01* +X0633397* +Y0578127* +X063273Y0577461* +X0632064* +X0631398Y0578127* +X0635396Y0577461D02* +X0636729D01* +X0636063* +Y0581459* +X0635396Y0580793* +X0656496Y0311085D02* +X0657829D01* +X0657163* +Y0307087* +X0656496* +X0657829* +X0659828D02* +Y0311085D01* +X0661828* +X0662494Y0310419* +Y0309086* +X0661828Y0308419* +X0659828* +X0661161D02* +X0662494Y0307087D01* +X0665826Y0311085D02* +X0664494D01* +X0663827Y0310419* +Y0307753* +X0664494Y0307087* +X0665826* +X0666493Y0307753* +Y0310419* +X0665826Y0311085* +X0667826Y0307087D02* +Y0311085D01* +X0670492Y0307087* +Y0311085* +X0658571Y0304392D02* +X0657238D01* +X0657905* +Y030106* +X0657238Y0300394* +X0656572* +X0655905Y030106* +X066257Y0300394D02* +X0659904D01* +X066257Y030306* +Y0303726* +X0661903Y0304392* +X0660571* +X0659904Y0303726* +X043376Y0481066D02* +Y0477067D01* +X0436426* +X0437758D02* +X0439091D01* +X0438425* +Y0481066* +X0437758Y0480399* +X0647941Y0435017D02* +Y0437683D01* +X0647275Y0438349* +X0645942* +X0645276Y0437683* +Y0435017* +X0645942Y043435* +X0647275* +X0646608Y0435683D02* +X0647941Y043435D01* +X0647275D02* +X0647941Y0435017D01* +X065194Y043435D02* +X0649274D01* +X065194Y0437016* +Y0437683* +X0651274Y0438349* +X0649941* +X0649274Y0437683* +X0601583Y0452832D02* +Y0455498D01* +X0600917Y0456164* +X0599584* +X0598917Y0455498* +Y0452832* +X0599584Y0452165* +X0600917* +X060025Y0453498D02* +X0601583Y0452165D01* +X0600917D02* +X0601583Y0452832D01* +X0602916Y0455498D02* +X0603582Y0456164D01* +X0604915* +X0605582Y0455498* +Y0454831* +X0604915Y0454165* +X0604249* +X0604915* +X0605582Y0453498* +Y0452832* +X0604915Y0452165* +X0603582* +X0602916Y0452832* +X057363Y0471434D02* +Y04741D01* +X0572964Y0474766* +X0571631* +X0570964Y04741* +Y0471434* +X0571631Y0470768* +X0572964* +X0572297Y0472101D02* +X057363Y0470768D01* +X0572964D02* +X057363Y0471434D01* +X0576963Y0470768D02* +Y0474766D01* +X0574963Y0472767* +X0577629* +X0499221Y0421532D02* +Y0424198D01* +X0498554Y0424865* +X0497222* +X0496555Y0424198* +Y0421532* +X0497222Y0420866* +X0498554* +X0497888Y0422199D02* +X0499221Y0420866D01* +X0498554D02* +X0499221Y0421532D01* +X0500554Y0420866D02* +X0501887D01* +X050122* +Y0424865* +X0500554Y0424198* +X0631595Y0455413D02* +Y0459412D01* +X0633594* +X063426Y0458746* +Y0457413* +X0633594Y0456746* +X0631595* +X0632927D02* +X063426Y0455413D01* +X0638259Y0459412D02* +X0636926Y0458746D01* +X0635593Y0457413* +Y045608* +X063626Y0455413* +X0637593* +X0638259Y045608* +Y0456746* +X0637593Y0457413* +X0635593* +X0630217Y0469882D02* +X0634215D01* +Y0467882* +X0633549Y0467216* +X0632216* +X0631549Y0467882* +Y0469882* +Y0468549D02* +X0630217Y0467216D01* +X0634215Y0463217D02* +Y0465883D01* +X0632216* +X0632882Y046455* +Y0463884* +X0632216Y0463217* +X0630883* +X0630217Y0463884* +Y0465217* +X0630883Y0465883* +X0525984Y0429035D02* +Y0433034D01* +X0527984* +X052865Y0432368* +Y0431035* +X0527984Y0430368* +X0525984* +X0527317D02* +X052865Y0429035D01* +X0532649D02* +X0529983D01* +X0532649Y0431701* +Y0432368* +X0531982Y0433034* +X0530649* +X0529983Y0432368* +X0570964Y0463386D02* +Y0467384D01* +X0572964* +X057363Y0466718* +Y0465385* +X0572964Y0464719* +X0570964* +X0572297D02* +X057363Y0463386D01* +X0574963Y0466718D02* +X057563Y0467384D01* +X0576963* +X0577629Y0466718* +Y0466052* +X0576963Y0465385* +X0577629Y0464719* +Y0464052* +X0576963Y0463386* +X057563* +X0574963Y0464052* +Y0464719* +X057563Y0465385* +X0574963Y0466052* +Y0466718* +X057563Y0465385D02* +X0576963D01* +X0415453Y0441634D02* +X0419452D01* +Y0439635* +X0418785Y0438968* +X0417452* +X0416786Y0439635* +Y0441634* +Y0440301D02* +X0415453Y0438968D01* +X0418785Y0437635D02* +X0419452Y0436969D01* +Y0435636* +X0418785Y0434969* +X0418118* +X0417452Y0435636* +Y0436302* +Y0435636* +X0416786Y0434969* +X0416119* +X0415453Y0435636* +Y0436969* +X0416119Y0437635* +X04376Y0381261D02* +Y038526D01* +X0439599* +X0440266Y0384594* +Y0383261* +X0439599Y0382594* +X04376* +X0438933D02* +X0440266Y0381261D01* +X0443598D02* +Y038526D01* +X0441599Y0383261* +X0444265* +X0596555Y0484941D02* +Y048894D01* +X0598554* +X0599221Y0488273* +Y048694* +X0598554Y0486274* +X0596555* +X0597888D02* +X0599221Y0484941D01* +X0600554Y048894D02* +X060322D01* +Y0488273* +X0600554Y0485607* +Y0484941* +X0447146Y0394156D02* +Y0390824D01* +X0447812Y0390157* +X0449145* +X0449811Y0390824* +Y0394156* +X0451144Y0390157D02* +X0452477D01* +X0451811* +Y0394156* +X0451144Y039349* +X0610433Y0488841D02* +X0613099D01* +Y0488175* +X0610433Y0485509* +Y0484842* +X0613099* +X0614432Y0488841D02* +Y0484842D01* +X0616431* +X0617098Y0485509* +Y0488175* +X0616431Y0488841* +X0614432* +X0621096D02* +X0619763Y0488175D01* +X0618431Y0486842* +Y0485509* +X0619097Y0484842* +X062043* +X0621096Y0485509* +Y0486175* +X062043Y0486842* +X0618431* +X0511085Y0485335D02* +Y0482669D01* +X0510419* +X0507753Y0485335* +X0507087* +Y0482669* +X0511085Y0481336D02* +X0507087D01* +Y0479337* +X0507753Y047867* +X0510419* +X0511085Y0479337* +Y0481336* +X0510419Y0477337D02* +X0511085Y0476671D01* +Y0475338* +X0510419Y0474671* +X0509752* +X0509086Y0475338* +Y0476004* +Y0475338* +X050842Y0474671* +X0507753* +X0507087Y0475338* +Y0476671* +X0507753Y0477337* +X0622109Y053937D02* +X061811D01* +Y0537371* +X0618777Y0536704* +X0621443* +X0622109Y0537371* +Y053937* +X061811Y0535371D02* +Y0534038D01* +Y0534705* +X0622109* +X0621443Y0535371* +X0450304Y028766D02* +X0448971D01* +X0449637* +Y0284328* +X0448971Y0283661* +X0448304* +X0447638Y0284328* +X0454302Y028766D02* +X0451637D01* +Y0285661* +X0452969Y0286327* +X0453636* +X0454302Y0285661* +Y0284328* +X0453636Y0283661* +X0452303* +X0451637Y0284328* +X0472941Y0373312D02* +X0472275Y0373979D01* +X0470942* +X0470276Y0373312* +Y0370647* +X0470942Y036998* +X0472275* +X0472941Y0370647* +X0474274Y036998D02* +X0475607D01* +X0474941* +Y0373979* +X0474274Y0373312* +X0480272Y0373979D02* +X0478939Y0373312D01* +X0477606Y037198* +Y0370647* +X0478273Y036998* +X0479606* +X0480272Y0370647* +Y0371313* +X0479606Y037198* +X0477606* +X039626Y0324409D02* +Y0328408D01* +X0398259* +X0398926Y0327742* +Y0326409* +X0398259Y0325742* +X039626* +X0400258Y0328408D02* +Y0324409D01* +X0401591Y0325742* +X0402924Y0324409* +Y0328408* +X0404257Y0324409D02* +Y0328408D01* +X0406257* +X0406923Y0327742* +Y0326409* +X0406257Y0325742* +X0404257* +X040559D02* +X0406923Y0324409D01* +X0416052Y0330869D02* +X0414719D01* +X0415385* +Y0327537* +X0414719Y032687* +X0414052* +X0413386Y0327537* +X0417384Y0330202D02* +X0418051Y0330869D01* +X0419384* +X042005Y0330202* +Y0329536* +X0419384Y0328869* +X0418717* +X0419384* +X042005Y0328203* +Y0327537* +X0419384Y032687* +X0418051* +X0417384Y0327537* +X0632882Y0410911D02* +X0632216Y0411577D01* +X0630883* +X0630217Y0410911* +Y0408245* +X0630883Y0407579* +X0632216* +X0632882Y0408245* +X0634215Y0407579D02* +X0635548D01* +X0634882* +Y0411577* +X0634215Y0410911* +X0637547Y0408245D02* +X0638214Y0407579D01* +X0639547* +X0640213Y0408245* +Y0410911* +X0639547Y0411577* +X0638214* +X0637547Y0410911* +Y0410245* +X0638214Y0409578* +X0640213* +X0633001Y0402763D02* +X0632335Y0403429D01* +X0631002* +X0630335Y0402763* +Y0400097* +X0631002Y039943* +X0632335* +X0633001Y0400097* +X0637Y039943D02* +X0634334D01* +X0637Y0402096* +Y0402763* +X0636334Y0403429* +X0635001* +X0634334Y0402763* +X0638333D02* +X0638999Y0403429D01* +X0640332* +X0640999Y0402763* +Y0400097* +X0640332Y039943* +X0638999* +X0638333Y0400097* +Y0402763* +X0571662Y0411001D02* +Y0413667D01* +X0570995Y0414333* +X0569663* +X0568996Y0413667* +Y0411001* +X0569663Y0410335* +X0570995* +X0570329Y0411667D02* +X0571662Y0410335D01* +X0570995D02* +X0571662Y0411001D01* +X0572995Y0410335D02* +X0574328D01* +X0573661* +Y0414333* +X0572995Y0413667* +X0576327D02* +X0576994Y0414333D01* +X0578326* +X0578993Y0413667* +Y0413* +X0578326Y0412334* +X057766* +X0578326* +X0578993Y0411667* +Y0411001* +X0578326Y0410335* +X0576994* +X0576327Y0411001* +X0571752Y0380315D02* +Y0384314D01* +X0573751* +X0574418Y0383647* +Y0382314* +X0573751Y0381648* +X0571752* +X0573085D02* +X0574418Y0380315D01* +X0575751D02* +X0577084D01* +X0576417* +Y0384314* +X0575751Y0383647* +X0579083Y0380981D02* +X0579749Y0380315D01* +X0581082* +X0581749Y0380981* +Y0383647* +X0581082Y0384314* +X0579749* +X0579083Y0383647* +Y0382981* +X0579749Y0382314* +X0581749* +X0584547Y0383329D02* +X0587213D01* +Y0382663* +X0584547Y0379997* +Y0379331* +X0587213* +X0588546Y0383329D02* +Y0379331D01* +X0590545* +X0591212Y0379997* +Y0382663* +X0590545Y0383329* +X0588546* +X059521D02* +X0592545D01* +Y038133* +X0593878Y0381996* +X0594544* +X059521Y038133* +Y0379997* +X0594544Y0379331* +X0593211* +X0592545Y0379997* +X0573228Y042014D02* +Y0416142D01* +X0575228* +X0575894Y0416808* +Y0419474* +X0575228Y042014* +X0573228* +X0577227Y0416142D02* +X057856D01* +X0577893* +Y042014* +X0577227Y0419474* +X0582559Y0416142D02* +Y042014D01* +X0580559Y0418141* +X0583225* +X0569488Y0404626D02* +Y0408625D01* +X0571488* +X0572154Y0407958* +Y0406625* +X0571488Y0405959* +X0569488* +X0570821D02* +X0572154Y0404626D01* +X0576153D02* +X0573487D01* +X0576153Y0407292* +Y0407958* +X0575486Y0408625* +X0574153* +X0573487Y0407958* +X0577486D02* +X0578152Y0408625D01* +X0579485* +X0580151Y0407958* +Y0405292* +X0579485Y0404626* +X0578152* +X0577486Y0405292* +Y0407958* +X0555807Y0441499D02* +Y04375D01* +X0557806* +X0558473Y0438166* +Y0440832* +X0557806Y0441499* +X0555807* +X0559806Y04375D02* +X0561139D01* +X0560472* +Y0441499* +X0559806Y0440832* +X0563138Y04375D02* +X0564471D01* +X0563804* +Y0441499* +X0563138Y0440832* +X0501485Y0372919D02* +X0500818Y0373585D01* +X0499485* +X0498819Y0372919* +Y0370253* +X0499485Y0369587* +X0500818* +X0501485Y0370253* +X0502818Y0369587D02* +X050415D01* +X0503484* +Y0373585* +X0502818Y0372919* +X050615Y0369587D02* +X0507483D01* +X0506816* +Y0373585* +X050615Y0372919* +X056565Y0424963D02* +Y0420964D01* +X0567649* +X0568315Y0421631* +Y0424297* +X0567649Y0424963* +X056565* +X0572314D02* +X0570981Y0424297D01* +X0569648Y0422964* +Y0421631* +X0570315Y0420964* +X0571648* +X0572314Y0421631* +Y0422297* +X0571648Y0422964* +X0569648* +X0561024Y0601665D02* +Y0604331D01* +X0563689Y0601665* +X0564356* +X0565022Y0602331* +Y0603664* +X0564356Y0604331* +X0561024Y0598333D02* +X0565022D01* +X0563023Y0600332* +Y0597666* +X0565022Y0596333D02* +X0562357D01* +X0561024Y0595* +X0562357Y0593667* +X0565022* +Y0592335D02* +X0561024D01* +Y0590335* +X056169Y0589669* +X0564356* +X0565022Y0590335* +Y0592335* +X0564356Y058567D02* +X0565022Y0586337D01* +Y0587669* +X0564356Y0588336* +X056169* +X0561024Y0587669* +Y0586337* +X056169Y058567* +X0585245Y0580967D02* +X0583912D01* +X0584578* +Y0577635* +X0583912Y0576968* +X0583245* +X0582579Y0577635* +X0586577Y0580967D02* +X0589243D01* +Y0580301* +X0586577Y0577635* +Y0576968* +X0165052Y0298909D02* +Y0301575D01* +X0163053* +X0163719Y0300242* +Y0299575* +X0163053Y0298909* +X016172* +X0161054Y0299575* +Y0300908* +X016172Y0301575* +X0161054Y0297576D02* +X016172D01* +Y029691* +X0161054* +Y0297576* +Y0291578D02* +Y0294244D01* +X0163719Y0291578* +X0164386* +X0165052Y0292245* +Y0293577* +X0164386Y0294244* +X0489182Y030951D02* +X0486516D01* +Y0307511* +X0487849Y0308178* +X0488515* +X0489182Y0307511* +Y0306178* +X0488515Y0305512* +X0487182* +X0486516Y0306178* +X0490514Y0305512D02* +Y0306178D01* +X0491181* +Y0305512* +X0490514* +X0496513D02* +X0493847D01* +X0496513Y0308178* +Y0308844* +X0495846Y030951* +X0494513* +X0493847Y0308844* +X0431693Y0281755D02* +Y0277756D01* +Y0279755* +X0434359* +Y0281755* +Y0277756* +X0437691Y0281755D02* +X0436358D01* +X0435692Y0281088* +Y0278422* +X0436358Y0277756* +X0437691* +X0438357Y0278422* +Y0281088* +X0437691Y0281755* +X043969D02* +Y0277756D01* +X0442356* +X0443689Y0281755D02* +Y0277756D01* +X0445688* +X0446355Y0278422* +Y0281088* +X0445688Y0281755* +X0443689* +X0450353D02* +X0447688D01* +Y0277756* +X0450353* +X0447688Y0279755D02* +X0449021D01* +X0451686Y0277756D02* +Y0281755D01* +X0453686* +X0454352Y0281088* +Y0279755* +X0453686Y0279089* +X0451686* +X0453019D02* +X0454352Y0277756D01* +G54D118* +X0571161Y0392027D02* +D01* +X057111Y0393468* +X0570959Y0394903* +X0570709Y0396324* +X057036Y0397724* +X0569914Y0399096* +X0569374Y0400433* +X0568741Y040173* +X056802Y0402979* +X0567213Y0404175* +X0566325Y0405312* +X056536Y0406384* +X0564322Y0407387* +X0563217Y0408314* +X0562049Y0409162* +X0560826Y0409926* +X0559552Y0410604* +X0558234Y041119* +X0556879Y0411684* +X0555492Y0412082* +X0554081Y0412381* +X0552652Y0412582* +X0551213Y0412683* +X054977* +X0548331Y0412582* +X0546902Y0412381* +X0545491Y0412082* +X0544104Y0411684* +X0542749Y041119* +X0541431Y0410604* +X0540157Y0409926* +X0538934Y0409162* +X0537766Y0408314* +X0536661Y0407387* +X0535623Y0406384* +X0534658Y0405312* +X053377Y0404175* +X0532963Y0402979* +X0532242Y040173* +X0531609Y0400433* +X0531069Y0399096* +X0530623Y0397724* +X0530274Y0396324* +X0530024Y0394903* +X0529873Y0393468* +X0529823Y0392027* +X0529873Y0390585* +X0530024Y038915* +X0530274Y0387729* +X0530623Y0386329* +X0531069Y0384957* +X0531609Y038362* +X0532242Y0382323* +X0532963Y0381074* +X053377Y0379878* +X0534658Y0378741* +X0535623Y0377669* +X0536661Y0376666* +X0537766Y0375739* +X0538934Y0374891* +X0540157Y0374127* +X0541431Y0373449* +X0542749Y0372863* +X0544104Y0372369* +X0545491Y0371971* +X0546902Y0371672* +X0548331Y0371471* +X054977Y037137* +X0551213* +X0552652Y0371471* +X0554081Y0371672* +X0555492Y0371971* +X0556879Y0372369* +X0558234Y0372863* +X0559552Y0373449* +X0560826Y0374127* +X0562049Y0374891* +X0563217Y0375739* +X0564322Y0376666* +X056536Y0377669* +X0566325Y0378741* +X0567213Y0379878* +X056802Y0381074* +X0568741Y0382323* +X0569374Y038362* +X0569914Y0384957* +X057036Y0386329* +X0570709Y0387729* +X0570959Y038915* +X057111Y0390585* +X0571161Y0392027* +X0528087Y0465355D02* +D01* +X0528062Y0466069* +X0527987Y0466779* +X0527863Y0467483* +X052769Y0468176* +X0527469Y0468855* +X0527202Y0469518* +X0526888Y047016* +X0526531Y0470779* +X0526132Y0471371* +X0525692Y0471934* +X0525214Y0472465* +X05247Y0472961* +X0524152Y0473421* +X0523574Y0473841* +X0522969Y0474219* +X0522338Y0474555* +X0521685Y0474845* +X0521014Y047509* +X0520327Y0475286* +X0519628Y0475435* +X051892Y0475534* +X0518208Y0475584* +X0517493* +X0516781Y0475534* +X0516073Y0475435* +X0515374Y0475286* +X0514687Y047509* +X0514016Y0474845* +X0513363Y0474555* +X0512733Y0474219* +X0512127Y0473841* +X0511549Y0473421* +X0511001Y0472961* +X0510487Y0472465* +X0510009Y0471934* +X0509569Y0471371* +X050917Y0470779* +X0508813Y047016* +X0508499Y0469518* +X0508232Y0468855* +X0508011Y0468176* +X0507838Y0467483* +X0507714Y0466779* +X0507639Y0466069* +X0507615Y0465355* +X0507639Y046464* +X0507714Y046393* +X0507838Y0463226* +X0508011Y0462533* +X0508232Y0461854* +X0508499Y0461191* +X0508813Y0460549* +X050917Y045993* +X0509569Y0459338* +X0510009Y0458775* +X0510487Y0458244* +X0511001Y0457748* +X0511549Y0457288* +X0512127Y0456868* +X0512733Y045649* +X0513363Y0456154* +X0514016Y0455864* +X0514687Y0455619* +X0515374Y0455423* +X0516073Y0455274* +X0516781Y0455175* +X0517493Y0455125* +X0518208* +X051892Y0455175* +X0519628Y0455274* +X0520327Y0455423* +X0521014Y0455619* +X0521685Y0455864* +X0522338Y0456154* +X0522969Y045649* +X0523574Y0456868* +X0524152Y0457288* +X05247Y0457748* +X0525214Y0458244* +X0525692Y0458775* +X0526132Y0459338* +X0526531Y045993* +X0526888Y0460549* +X0527202Y0461191* +X0527469Y0461854* +X052769Y0462533* +X0527863Y0463226* +X0527987Y046393* +X0528062Y046464* +X0528087Y0465355* +X0436469Y0394394D02* +D01* +X0436418Y0395835* +X0436267Y039727* +X0436017Y0398691* +X0435668Y0400091* +X0435222Y0401463* +X0434682Y04028* +X0434049Y0404097* +X0433328Y0405346* +X0432521Y0406542* +X0431633Y0407679* +X0430668Y0408751* +X042963Y0409754* +X0428525Y0410681* +X0427357Y0411529* +X0426134Y0412293* +X042486Y0412971* +X0423542Y0413557* +X0422187Y0414051* +X04208Y0414449* +X0419389Y0414748* +X041796Y0414949* +X0416521Y041505* +X0415078* +X0413639Y0414949* +X041221Y0414748* +X0410799Y0414449* +X0409412Y0414051* +X0408057Y0413557* +X0406739Y0412971* +X0405465Y0412293* +X0404242Y0411529* +X0403074Y0410681* +X0401969Y0409754* +X0400931Y0408751* +X0399966Y0407679* +X0399078Y0406542* +X0398271Y0405346* +X039755Y0404097* +X0396917Y04028* +X0396377Y0401463* +X0395931Y0400091* +X0395582Y0398691* +X0395332Y039727* +X0395181Y0395835* +X0395131Y0394394* +X0395181Y0392952* +X0395332Y0391517* +X0395582Y0390096* +X0395931Y0388696* +X0396377Y0387324* +X0396917Y0385987* +X039755Y038469* +X0398271Y0383441* +X0399078Y0382245* +X0399966Y0381108* +X0400931Y0380036* +X0401969Y0379033* +X0403074Y0378106* +X0404242Y0377258* +X0405465Y0376494* +X0406739Y0375816* +X0408057Y037523* +X0409412Y0374736* +X0410799Y0374338* +X041221Y0374039* +X0413639Y0373838* +X0415078Y0373737* +X0416521* +X041796Y0373838* +X0419389Y0374039* +X04208Y0374338* +X0422187Y0374736* +X0423542Y037523* +X042486Y0375816* +X0426134Y0376494* +X0427357Y0377258* +X0428525Y0378106* +X042963Y0379033* +X0430668Y0380036* +X0431633Y0381108* +X0432521Y0382245* +X0433328Y0383441* +X0434049Y038469* +X0434682Y0385987* +X0435222Y0387324* +X0435668Y0388696* +X0436017Y0390096* +X0436267Y0391517* +X0436418Y0392952* +X0436469Y0394394* +X0549114Y0358268D02* +D01* +X0549063Y0359709* +X0548912Y0361144* +X0548662Y0362565* +X0548313Y0363965* +X0547867Y0365337* +X0547327Y0366674* +X0546694Y0367971* +X0545973Y036922* +X0545166Y0370416* +X0544278Y0371553* +X0543313Y0372625* +X0542275Y0373628* +X054117Y0374555* +X0540002Y0375403* +X0538779Y0376167* +X0537505Y0376845* +X0536187Y0377431* +X0534832Y0377925* +X0533445Y0378323* +X0532034Y0378622* +X0530605Y0378823* +X0529166Y0378924* +X0527723* +X0526284Y0378823* +X0524855Y0378622* +X0523444Y0378323* +X0522057Y0377925* +X0520702Y0377431* +X0519384Y0376845* +X051811Y0376167* +X0516887Y0375403* +X0515719Y0374555* +X0514614Y0373628* +X0513576Y0372625* +X0512611Y0371553* +X0511723Y0370416* +X0510916Y036922* +X0510195Y0367971* +X0509562Y0366674* +X0509022Y0365337* +X0508576Y0363965* +X0508227Y0362565* +X0507977Y0361144* +X0507826Y0359709* +X0507776Y0358268* +X0507826Y0356826* +X0507977Y0355391* +X0508227Y035397* +X0508576Y035257* +X0509022Y0351198* +X0509562Y0349861* +X0510195Y0348564* +X0510916Y0347315* +X0511723Y0346119* +X0512611Y0344982* +X0513576Y034391* +X0514614Y0342907* +X0515719Y034198* +X0516887Y0341132* +X051811Y0340368* +X0519384Y033969* +X0520702Y0339104* +X0522057Y033861* +X0523444Y0338212* +X0524855Y0337913* +X0526284Y0337712* +X0527723Y0337611* +X0529166* +X0530605Y0337712* +X0532034Y0337913* +X0533445Y0338212* +X0534832Y033861* +X0536187Y0339104* +X0537505Y033969* +X0538779Y0340368* +X0540002Y0341132* +X054117Y034198* +X0542275Y0342907* +X0543313Y034391* +X0544278Y0344982* +X0545166Y0346119* +X0545973Y0347315* +X0546694Y0348564* +X0547327Y0349861* +X0547867Y0351198* +X0548313Y035257* +X0548662Y035397* +X0548912Y0355391* +X0549063Y0356826* +X0549114Y0358268* +X0509842Y0349803D02* +D01* +X0509791Y0351244* +X050964Y0352679* +X050939Y03541* +X0509041Y03555* +X0508595Y0356872* +X0508055Y0358209* +X0507422Y0359506* +X0506701Y0360755* +X0505894Y0361951* +X0505006Y0363088* +X0504041Y036416* +X0503003Y0365163* +X0501898Y036609* +X050073Y0366938* +X0499507Y0367702* +X0498233Y036838* +X0496915Y0368966* +X049556Y036946* +X0494173Y0369858* +X0492762Y0370157* +X0491333Y0370358* +X0489894Y0370459* +X0488451* +X0487012Y0370358* +X0485583Y0370157* +X0484172Y0369858* +X0482785Y036946* +X048143Y0368966* +X0480112Y036838* +X0478838Y0367702* +X0477615Y0366938* +X0476447Y036609* +X0475342Y0365163* +X0474304Y036416* +X0473339Y0363088* +X0472451Y0361951* +X0471644Y0360755* +X0470923Y0359506* +X047029Y0358209* +X046975Y0356872* +X0469304Y03555* +X0468955Y03541* +X0468705Y0352679* +X0468554Y0351244* +X0468504Y0349803* +X0468554Y0348361* +X0468705Y0346926* +X0468955Y0345505* +X0469304Y0344105* +X046975Y0342733* +X047029Y0341396* +X0470923Y0340099* +X0471644Y033885* +X0472451Y0337654* +X0473339Y0336517* +X0474304Y0335445* +X0475342Y0334442* +X0476447Y0333515* +X0477615Y0332667* +X0478838Y0331903* +X0480112Y0331225* +X048143Y0330639* +X0482785Y0330145* +X0484172Y0329747* +X0485583Y0329448* +X0487012Y0329247* +X0488451Y0329146* +X0489894* +X0491333Y0329247* +X0492762Y0329448* +X0494173Y0329747* +X049556Y0330145* +X0496915Y0330639* +X0498233Y0331225* +X0499507Y0331903* +X050073Y0332667* +X0501898Y0333515* +X0503003Y0334442* +X0504041Y0335445* +X0505006Y0336517* +X0505894Y0337654* +X0506701Y033885* +X0507422Y0340099* +X0508055Y0341396* +X0508595Y0342733* +X0509041Y0344105* +X050939Y0345505* +X050964Y0346926* +X0509791Y0348361* +X0509842Y0349803* +X0498498Y0527063D02* +X0508498D01* +X0498498D02* +Y0577063D01* +X0508498* +Y0527063D02* +Y0577063D01* +X0426798Y0527463D02* +Y0577463D01* +X0416798D02* +X0426798D01* +X0416798Y0527463D02* +Y0577463D01* +Y0527463D02* +X0426798D01* +X0472776Y0563028D02* +X0474154D01* +X0472183Y0562435D02* +X0472776Y0563028D01* +X0468643D02* +X047002D01* +X0470613Y0562435* +X0468643Y0550035D02* +X0474154D01* +X0470613Y0562435D02* +X0472183D01* +X0450827Y0552329D02* +X045752D01* +X0459291Y0554101* +X0449055D02* +X0450827Y0552329D01* +X0459291Y057052D02* +Y058115D01* +X0449055Y057052D02* +Y058115D01* +X0459291* +Y055418D02* +Y056304D01* +X0449055Y055408D02* +Y056304D01* +X0455118Y053937D02* +Y0542519D01* +X0461417Y053937D02* +Y0542519D01* +X0131345Y0417665D02* +Y0436665D01* +X0150945Y0416665D02* +Y0437665D01* +X0263391Y0571028D02* +X0287054Y0547365D01* +X0239728D02* +X0263391Y0523702D01* +X0287054Y0547365* +X0239728D02* +X0263391Y0571028D01* +X0254934Y0416928D02* +Y0424802D01* +X0236091Y0419739D02* +Y0421991D01* +X0235249Y0424802D02* +X0254934D01* +X0235249Y0416928D02* +X0254934D01* +X0235249Y0418897D02* +X0236091Y0419739D01* +X0235249Y0416928D02* +Y0418897D01* +Y0422834D02* +X0236091Y0421991D01* +X0235249Y0422834D02* +Y0424802D01* +X0185847Y0340608D02* +X0187815D01* +X0185004Y0339765D02* +X0185847Y0340608D01* +X0179941D02* +X018191D01* +X0182752Y0339765* +X0179941Y0320923D02* +Y0340608D01* +X0187815Y0320923D02* +Y0340608D01* +X0182752Y0339765D02* +X0185004D01* +X0179941Y0320923D02* +X0187815D01* +X0200931Y0371566D02* +Y0374716D01* +X0199391Y0376255D02* +X0200931Y0374716D01* +Y0381015D02* +Y0384165D01* +X0199391Y0379476D02* +X0200931Y0381015D01* +X0180852Y0371566D02* +Y0384165D01* +X0199391Y0376255D02* +Y0379476D01* +X0180852Y0371566D02* +X0200931D01* +X0180852Y0384165D02* +X0200931D01* +X0183952Y0346181D02* +X0187101D01* +X0183952D02* +Y0348937D01* +X0192613Y0346181D02* +X0195763D01* +Y0348937* +X0241846Y0319615D02* +X0244995D01* +Y0316859D02* +Y0319615D01* +X0233184D02* +X0236334D01* +X0233184Y0316859D02* +Y0319615D01* +X0220866Y0310852D02* +Y0314002D01* +X021811Y0310852D02* +X0220866D01* +Y0319513D02* +Y0322663D01* +X021811D02* +X0220866D01* +X0233086Y0343709D02* +X0236235D01* +X0233086D02* +Y0346465D01* +X0241747Y0343709D02* +X0244897D01* +Y0346465* +X0217086Y0343709D02* +X0220235D01* +X0217086D02* +Y0346465D01* +X0225747Y0343709D02* +X0228897D01* +Y0346465* +X0313892Y0286565D02* +X031694D01* +X031784Y0287465* +X0323443Y0286565D02* +X032649D01* +X0322543Y0287465D02* +X0323443Y0286565D01* +X0313892Y0311965D02* +X032649D01* +X031784Y0287465D02* +X0322543D01* +X0313892Y0286565D02* +Y0311965D01* +X032649Y0286565D02* +Y0311965D01* +X0335344Y0509077D02* +X0336722D01* +X0337315Y050967* +X0339478Y0509077D02* +X0340856D01* +X0338885Y050967D02* +X0339478Y0509077D01* +X0335344Y0522069D02* +X0340856D01* +X0337315Y050967D02* +X0338885D01* +X0159686Y056671D02* +X0162835D01* +X0159686D02* +Y0569465D01* +X0168347Y056671D02* +X0171497D01* +Y0569465* +X0265306Y0507276D02* +X0304676D01* +X0265306Y0499676D02* +X0304676D01* +X0304091Y0502061D02* +Y0504891D01* +X0265306Y0499676D02* +Y0507276D01* +X0304091Y0504891D02* +X0304676Y0505476D01* +Y0507276* +X0304091Y0502061D02* +X0304676Y0501476D01* +Y0499676D02* +Y0501476D01* +X0252147Y036986D02* +Y0373009D01* +X0249391Y036986D02* +X0252147D01* +Y0378521D02* +Y0381671D01* +X0249391D02* +X0252147D01* +X0324834Y0353628D02* +Y0361502D01* +X0305991Y0356439D02* +Y0358691D01* +X0305149Y0361502D02* +X0324834D01* +X0305149Y0353628D02* +X0324834D01* +X0305149Y0355597D02* +X0305991Y0356439D01* +X0305149Y0353628D02* +Y0355597D01* +Y0359534D02* +X0305991Y0358691D01* +X0305149Y0359534D02* +Y0361502D01* +X0368074Y0565093D02* +X037398D01* +X0368027Y0564691D02* +X0374027D01* +X0368027D02* +Y0570691D01* +X0374027Y0564691D02* +Y0570691D01* +X0252147Y038366D02* +Y0386809D01* +X0249391Y038366D02* +X0252147D01* +Y0392321D02* +Y0395471D01* +X0249391D02* +X0252147D01* +X025112Y0466671D02* +X0253875D01* +Y0463521D02* +Y0466671D01* +X025112Y045486D02* +X0253875D01* +Y0458009* +X0365354Y0314665D02* +Y0317421D01* +X0362205Y0314665D02* +X0365354D01* +X0353543D02* +Y0317421D01* +Y0314665D02* +X0356693D01* +X0369847Y039386D02* +Y0397009D01* +X0367091Y039386D02* +X0369847D01* +Y0402521D02* +Y0405671D01* +X0367091D02* +X0369847D01* +X0240591Y0291365D02* +Y0294365D01* +Y0274365D02* +Y0277365D01* +X0231591Y0276365D02* +Y0292365D01* +X0210591Y0291365D02* +Y0294365D01* +Y0274365D02* +Y0277365D01* +Y0274365D02* +X0240591D01* +X0210591Y0294365D02* +X0240591D01* +X0182146Y0525551D02* +X0212146D01* +X0182146Y0505551D02* +X0212146D01* +X0182146D02* +Y0508551D01* +Y0522551D02* +Y0525551D01* +X0203146Y0507551D02* +Y0523551D01* +X0212146Y0505551D02* +Y0508551D01* +Y0522551D02* +Y0525551D01* +X0260391Y0442714D02* +X0315391D01* +X0260391D02* +Y0473816D01* +X0315391* +Y0442714D02* +Y0473816D01* +Y0411614D02* +Y0442717D01* +X0260391D02* +X0315391D01* +X0260391Y0411614D02* +Y0442717D01* +Y0411614D02* +X0315391D01* +X0260391Y0380514D02* +X0315391D01* +X0260391D02* +Y0411617D01* +X0315391* +Y0380514D02* +Y0411617D01* +X0364335Y0307384D02* +Y0310533D01* +X0367091* +X0364335Y0298722D02* +Y0301872D01* +Y0298722D02* +X0367091D01* +X0258335Y0371321D02* +Y0374471D01* +X0261091* +X0258335Y036266D02* +Y0365809D01* +Y036266D02* +X0261091D01* +X0219649Y0537795D02* +X0222798D01* +Y0535039D02* +Y0537795D01* +X0210987D02* +X0214137D01* +X0210987Y0535039D02* +Y0537795D01* +X0352914Y0467763D02* +X0354588D01* +X0352012Y0466861D02* +X0352914Y0467763D01* +X0347895D02* +X0349568D01* +X035047Y0466861* +X0347895Y0455558D02* +Y0467763D01* +X0354588Y0455558D02* +Y0467763D01* +X035047Y0466861D02* +X0352012D01* +X0347895Y0455558D02* +X0354588D01* +X034811Y0489508D02* +X0350078D01* +X0347267Y0488665D02* +X034811Y0489508D01* +X0342204D02* +X0344173D01* +X0345015Y0488665* +X0342204Y0469823D02* +Y0489508D01* +X0350078Y0469823D02* +Y0489508D01* +X0345015Y0488665D02* +X0347267D01* +X0342204Y0469823D02* +X0350078D01* +X022815Y0305118D02* +X0231299D01* +Y0302362D02* +Y0305118D01* +X0219488D02* +X0222638D01* +X0219488Y0302362D02* +Y0305118D01* +X0242126D02* +X0245276D01* +Y0302362D02* +Y0305118D01* +X0233465D02* +X0236614D01* +X0233465Y0302362D02* +Y0305118D01* +X0160362Y0483764D02* +Y0486913D01* +X0163118* +X0160362Y0475102D02* +Y0478252D01* +Y0475102D02* +X0163118D01* +X0170065Y0495553D02* +Y0498309D01* +X0173214* +X0181876Y0495553D02* +Y0498309D01* +X0178726D02* +X0181876D01* +X0314354Y0320623D02* +X0316323D01* +X0317165Y0321465* +X032026Y0320623D02* +X0322228D01* +X0319417Y0321465D02* +X032026Y0320623D01* +X0322228D02* +Y0340308D01* +X0314354Y0320623D02* +Y0340308D01* +X0317165Y0321465D02* +X0319417D01* +X0314354Y0340308D02* +X0322228D01* +X0154922Y0451261D02* +Y0457758D01* +Y0451261D02* +X0157875Y0448309D01* +X0154922Y0431773D02* +Y0438269D01* +X0157875Y0441222* +X0154922Y0431773D02* +X0196261D01* +X0154922Y0457758D02* +X0196261D01* +X0157875Y0441222D02* +Y0448309D01* +X0196261Y0431773D02* +Y0457758D01* +X0154491Y0385165D02* +Y0397165D01* +X0167491Y0385165D02* +Y0397165D01* +X0604528Y0405866D02* +X0610433D01* +X060448Y0405465D02* +X061048D01* +X060448D02* +Y0411465D01* +X061048Y0405465D02* +Y0411465D01* +X054Y0479331D02* +Y0485236D01* +X0540402Y0479283D02* +Y0485283D01* +X0534402Y0479283D02* +X0540402D01* +X0534402Y0485283D02* +X0540402D01* +X0581263Y0291538D02* +X0610963D01* +X0581063Y0295138D02* +X0611063D01* +X0581063Y0272138D02* +Y0295138D01* +Y0272138D02* +X0611063D01* +Y0295138* +X0606299Y0377953D02* +X0614173D01* +X060911Y0396795D02* +X0611362D01* +X0614173Y0377953D02* +Y0397638D01* +X0606299Y0377953D02* +Y0397638D01* +X0608268D02* +X060911Y0396795D01* +X0606299Y0397638D02* +X0608268D01* +X0611362Y0396795D02* +X0612205Y0397638D01* +X0614173* +X0637402Y033809D02* +Y0364468D01* +Y0366732D02* +Y039311D01* +X062248Y0444587D02* +Y0450492D01* +X0622882Y044454D02* +Y045054D01* +X0616882Y044454D02* +X0622882D01* +X0616882Y045054D02* +X0622882D01* +X0521161Y0318898D02* +X0555807D01* +X0521161Y0325984D02* +X0555807D01* +X0521984Y0321492D02* +Y032339D01* +X0555807Y0318898D02* +Y0325984D01* +X0521161Y0320669D02* +X0521984Y0321492D01* +X0521161Y0318898D02* +Y0320669D01* +Y0324213D02* +X0521984Y032339D01* +X0521161Y0324213D02* +Y0325984D01* +X0593701Y0443701D02* +X0596457D01* +Y0440552D02* +Y0443701D01* +X0593701Y043189D02* +X0596457D01* +Y043504* +X0613976Y0425099D02* +Y0427855D01* +X0610827Y0425099D02* +X0613976D01* +X0602166D02* +Y0427855D01* +Y0425099D02* +X0605315D01* +X0657087Y0395866D02* +Y0422244D01* +X0664845Y0315551D02* +Y0322244D01* +X0663073Y0324016D02* +X0664845Y0322244D01* +X0663073Y0313779D02* +X0664845Y0315551D01* +X0636024Y0324016D02* +X0646654D01* +X0636024Y0313779D02* +X0646654D01* +X0636024D02* +Y0324016D01* +X0654134D02* +X0662994D01* +X0654134Y0313779D02* +X0663094D01* +X0514297Y0272144D02* +X0531272D01* +Y0277144* +X0547272Y0272144D02* +Y0277144D01* +Y0272144D02* +X0559072D01* +X0499272D02* +X0514297D01* +X0559072D02* +X0579272D01* +X0531272Y0277144D02* +X0547272D01* +X0499272Y0307444D02* +X0579272D01* +X0499272Y0272144D02* +Y0307444D01* +X0579272Y0272144D02* +Y0307444D01* +X047825Y0378294D02* +Y0388494D01* +X049635Y0378294D02* +Y0388494D01* +X049245Y0378294D02* +X049635D01* +X047825D02* +X048205D01* +X049595Y0388494D02* +X049635D01* +X047825D02* +X047855D01* +X0460366Y0327976D02* +X0463516D01* +X0460366D02* +Y0330732D01* +X0469028Y0327976D02* +X0472177D01* +Y0330732* +X0437555Y0326703D02* +Y0329853D01* +X0443854Y0326703D02* +Y0329853D01* +X0461392Y0382042D02* +Y0385191D01* +X0467691Y0382042D02* +Y0385191D01* +X053484Y0470782D02* +Y0476687D01* +X0534438Y0470735D02* +Y0476735D01* +X0540438* +X0534438Y0470735D02* +X0540438D01* +X0538878Y0564366D02* +X0560925D01* +Y0526571D02* +Y0564366D01* +X0538878Y0526571D02* +Y0564366D01* +X0537402Y046811D02* +X0540551D01* +X0537402Y0461811D02* +X0540551D01* +X0541417Y0448717D02* +Y0451867D01* +X0538661Y0448717D02* +X0541417D01* +Y0457379D02* +Y0460528D01* +X0538661D02* +X0541417D01* +X0513694Y0443151D02* +X0522653D01* +X0513694Y0453387D02* +X0522553D01* +X0495583Y0443151D02* +Y0453387D01* +Y0443151D02* +X0506213D01* +X0495583Y0453387D02* +X0506213D01* +X0522633Y0443151D02* +X0524404Y0444923D01* +X0522633Y0453387D02* +X0524404Y0451616D01* +Y0444923D02* +Y0451616D01* +X0653051Y0464272D02* +X0656201D01* +X0653051Y0457972D02* +X0656201D01* +X058622Y0519098D02* +X0608268D01* +X058622D02* +Y0556894D01* +X0608268Y0519098D02* +Y0556894D01* +X0562598Y0519098D02* +X0584646D01* +X0562598D02* +Y0556894D01* +X0584646Y0519098D02* +Y0556894D01* +X0633464Y0556984D02* +X0655512D01* +Y0519189D02* +Y0556984D01* +X0633464Y0519189D02* +Y0556984D01* +X0602953Y0296671D02* +X0609646D01* +X0611417Y0298443* +X0601181D02* +X0602953Y0296671D01* +X0611417Y0314862D02* +Y0325492D01* +X0601181Y0314862D02* +Y0325492D01* +X0611417* +Y0298522D02* +Y0307382D01* +X0601181Y0298422D02* +Y0307382D01* +X0516083Y0434449D02* +Y0440354D01* +X0516484Y0434402D02* +Y0440402D01* +X0510484Y0434402D02* +X0516484D01* +X0510484Y0440402D02* +X0516484D01* +X0474145Y0416803D02* +Y0425763D01* +X0463909Y0416803D02* +Y0425663D01* +Y0398693D02* +X0474145D01* +Y0409323* +X0463909Y0398693D02* +Y0409323D01* +X0472373Y0427514D02* +X0474145Y0425743D01* +X0463909D02* +X046568Y0427514D01* +X0472373* +X0609114Y0469587D02* +Y0475493D01* +X0608713Y046954D02* +Y047554D01* +X0614713* +X0608713Y046954D02* +X0614713D01* +X0609114Y0436811D02* +Y0442717D01* +X0608713Y0436764D02* +Y0442764D01* +X0614713* +X0608713Y0436764D02* +X0614713D01* +X0657087Y0425787D02* +Y0452165D01* +X0602166Y0457874D02* +X0605315D01* +X0602166D02* +Y046063D01* +X0610827Y0457874D02* +X0613976D01* +Y046063* +X0593701Y0476477D02* +X0596457D01* +Y0473327D02* +Y0476477D01* +X0593701Y0464666D02* +X0596457D01* +Y0467815* +X0445082Y0400705D02* +X0452956D01* +X0447893Y0419547D02* +X0450145D01* +X0452956Y0400705D02* +Y042039D01* +X0445082Y0400705D02* +Y042039D01* +X044705D02* +X0447893Y0419547D01* +X0445082Y042039D02* +X044705D01* +X0450145Y0419547D02* +X0450987Y042039D01* +X0452956* +X0621693Y0477166D02* +Y0483071D01* +X0622094Y0477119D02* +Y0483119D01* +X0616094Y0477119D02* +X0622094D01* +X0616094Y0483119D02* +X0622094D01* +X0493188Y0456915D02* +Y046549D01* +X0505393Y0456915D02* +Y046549D01* +Y0474939D02* +Y0485176D01* +X0493188Y0474939D02* +Y0485176D01* +X049496Y0455073D02* +X0503621D01* +X0505393Y0456845* +X0493188D02* +X049496Y0455073D01* +X0493188Y0485176D02* +X0505393D01* +X0609842Y0557083D02* +X063189D01* +Y0519287D02* +Y0557083D01* +X0609842Y0519287D02* +Y0557083D01* +X0619095Y0412795D02* +X0622244D01* +X0619095Y0406496D02* +X0622244D01* +X0584251Y0413287D02* +Y0416437D01* +X0587007* +X0584251Y0404626D02* +Y0407776D01* +Y0404626D02* +X0587007D01* +X0587401Y0396693D02* +X0593307D01* +X0587354Y0397094D02* +X0593354D01* +Y0391094D02* +Y0397094D01* +X0587354Y0391094D02* +Y0397094D01* +X0595965Y0405866D02* +X060187D01* +X0595917Y0405465D02* +X0601917D01* +X0595917D02* +Y0411465D01* +X0601917Y0405465D02* +Y0411465D01* +X0553346Y0425591D02* +X0562306D01* +X0553346Y0435827D02* +X0562206D01* +X0535236Y0425591D02* +Y0435827D01* +Y0425591D02* +X0545866D01* +X0535236Y0435827D02* +X0545866D01* +X0562286Y0425591D02* +X0564057Y0427362D01* +X0562286Y0435827D02* +X0564057Y0434055D01* +Y0427362D02* +Y0434055D01* +X0536906Y0423425D02* +X0545866D01* +X0537006Y0413189D02* +X0545866D01* +X0563976D02* +Y0423425D01* +X0553346D02* +X0563976D01* +X0553346Y0413189D02* +X0563976D01* +X0535155Y0421654D02* +X0536927Y0423425D01* +X0535155Y0414961D02* +X0536927Y0413189D01* +X0535155Y0414961D02* +Y0421654D01* +X0456Y0273495D02* +X0486D01* +X0456D02* +Y0297594D01* +X04694Y0293495D02* +X04726D01* +X04709Y0297694D02* +X04711D01* +X0456Y0297594D02* +X04611D01* +X04809D02* +X04811D01* +X0486Y0273495D02* +Y0292094D01* +X04794Y0293495D02* +X04826D01* +X04562D02* +X04626D01* +X0622392Y0474815D02* +X0623068Y0475492D01* +X0631102* +X0621358Y0460925D02* +X0621949Y0460335D01* +X0629626D02* +X063002Y0459941D01* +X0621949Y0460335D02* +X0629626D01* +X0623068Y0442716D02* +X0631102D01* +X0622392Y044204D02* +X0623068Y0442716D01* +X0582382Y0457087D02* +X0585293Y0458801D01* +X0593995Y0417717D02* +X0594291Y0417421D01* +X0586318Y0417717D02* +X0593995D01* +X0584842Y0418307D02* +X0585728D01* +X0586318Y0417717* +X047386Y0378032D02* +X0475295Y0375689D01* +G54D119* +X0527658Y0403641D02* +X0531593D01* +X0529625Y0405609D02* +Y0401673D01* +X03971Y0412146D02* +X0401036D01* +X0399068Y0414114D02* +Y0410178D01* +X0515673Y0349851D02* +X0511737D01* +X0513705Y0347883D02* +Y0351819D01* +G54D120* +X0509351Y045315D02* +Y0457085D01* +X0507383Y0455117D02* +X0511319D01* +G54D121* +X0549903Y0527751D03* +X0597244Y0555712D03* +X0573622D03* +X0644488Y052037D03* +X0620866Y0520469D03* +M02* \ No newline at end of file diff --git a/hardware/gerber/unisolder52_full.gtp b/hardware/gerber/unisolder52_full.gtp new file mode 100644 index 0000000..4578859 --- /dev/null +++ b/hardware/gerber/unisolder52_full.gtp @@ -0,0 +1,1214 @@ +%FSTAX25Y25*% +%MOIN*% +%SFA1B1*% + +%IPPOS*% +%AMD10* +4,1,8,0.021800,0.025600,-0.021800,0.025600,-0.029500,0.017900,-0.029500,-0.017900,-0.021800,-0.025600,0.021800,-0.025600,0.029500,-0.017900,0.029500,0.017900,0.021800,0.025600,0.0* +1,1,0.015360,0.021800,0.017900* +1,1,0.015360,-0.021800,0.017900* +1,1,0.015360,-0.021800,-0.017900* +1,1,0.015360,0.021800,-0.017900* +% +%AMD11* +4,1,8,-0.021700,0.010200,-0.021700,-0.010200,-0.019100,-0.012800,0.019100,-0.012800,0.021700,-0.010200,0.021700,0.010200,0.019100,0.012800,-0.019100,0.012800,-0.021700,0.010200,0.0* +1,1,0.005120,-0.019100,0.010200* +1,1,0.005120,-0.019100,-0.010200* +1,1,0.005120,0.019100,-0.010200* +1,1,0.005120,0.019100,0.010200* +% +%AMD12* +4,1,8,0.025600,-0.021800,0.025600,0.021800,0.017900,0.029500,-0.017900,0.029500,-0.025600,0.021800,-0.025600,-0.021800,-0.017900,-0.029500,0.017900,-0.029500,0.025600,-0.021800,0.0* +1,1,0.015360,0.017900,-0.021800* +1,1,0.015360,0.017900,0.021800* +1,1,0.015360,-0.017900,0.021800* +1,1,0.015360,-0.017900,-0.021800* +% +%AMD13* +4,1,8,0.005600,0.059100,-0.005600,0.059100,-0.008100,0.056600,-0.008100,-0.056600,-0.005600,-0.059100,0.005600,-0.059100,0.008100,-0.056600,0.008100,0.056600,0.005600,0.059100,0.0* +1,1,0.004840,0.005600,0.056600* +1,1,0.004840,-0.005600,0.056600* +1,1,0.004840,-0.005600,-0.056600* +1,1,0.004840,0.005600,-0.056600* +% +%AMD15* +4,1,8,0.035400,-0.040200,0.035400,0.040200,0.028300,0.047200,-0.028300,0.047200,-0.035400,0.040200,-0.035400,-0.040200,-0.028300,-0.047200,0.028300,-0.047200,0.035400,-0.040200,0.0* +1,1,0.014180,0.028300,-0.040200* +1,1,0.014180,0.028300,0.040200* +1,1,0.014180,-0.028300,0.040200* +1,1,0.014180,-0.028300,-0.040200* +% +%AMD16* +4,1,8,0.027800,0.025600,-0.027800,0.025600,-0.035400,0.017900,-0.035400,-0.017900,-0.027800,-0.025600,0.027800,-0.025600,0.035400,-0.017900,0.035400,0.017900,0.027800,0.025600,0.0* +1,1,0.015360,0.027800,0.017900* +1,1,0.015360,-0.027800,0.017900* +1,1,0.015360,-0.027800,-0.017900* +1,1,0.015360,0.027800,-0.017900* +% +%AMD17* +4,1,8,-0.012600,-0.017100,0.012600,-0.017100,0.017700,-0.012000,0.017700,0.012000,0.012600,0.017100,-0.012600,0.017100,-0.017700,0.012000,-0.017700,-0.012000,-0.012600,-0.017100,0.0* +1,1,0.010280,-0.012600,-0.012000* +1,1,0.010280,0.012600,-0.012000* +1,1,0.010280,0.012600,0.012000* +1,1,0.010280,-0.012600,0.012000* +% +%AMD18* +4,1,8,-0.017100,0.012600,-0.017100,-0.012600,-0.012000,-0.017700,0.012000,-0.017700,0.017100,-0.012600,0.017100,0.012600,0.012000,0.017700,-0.012000,0.017700,-0.017100,0.012600,0.0* +1,1,0.010280,-0.012000,0.012600* +1,1,0.010280,-0.012000,-0.012600* +1,1,0.010280,0.012000,-0.012600* +1,1,0.010280,0.012000,0.012600* +% +%AMD19* +4,1,8,-0.021000,-0.003200,-0.003200,-0.021000,0.004000,-0.021000,0.021000,-0.004000,0.021000,0.003200,0.003200,0.021000,-0.004000,0.021000,-0.021000,0.004000,-0.021000,-0.003200,0.0* +1,1,0.010280,-0.017400,0.000400* +1,1,0.010280,0.000400,-0.017400* +1,1,0.010280,0.017400,-0.000400* +1,1,0.010280,-0.000400,0.017400* +% +%AMD20* +4,1,4,0.025000,0.017000,0.017000,0.025000,-0.025000,-0.017000,-0.017000,-0.025000,0.025000,0.017000,0.0* +1,1,0.011420,0.021000,0.021000* +1,1,0.011420,-0.021000,-0.021000* +% +%AMD21* +4,1,4,0.017000,-0.025000,0.025000,-0.017000,-0.017000,0.025000,-0.025000,0.017000,0.017000,-0.025000,0.0* +1,1,0.011420,0.021000,-0.021000* +1,1,0.011420,-0.021000,0.021000* +% +%AMD23* +4,1,8,-0.037400,0.008300,-0.037400,-0.008300,-0.033900,-0.011800,0.033900,-0.011800,0.037400,-0.008300,0.037400,0.008300,0.033900,0.011800,-0.033900,0.011800,-0.037400,0.008300,0.0* +1,1,0.007080,-0.033900,0.008300* +1,1,0.007080,-0.033900,-0.008300* +1,1,0.007080,0.033900,-0.008300* +1,1,0.007080,0.033900,0.008300* +% +%AMD26* +4,1,8,0.008300,0.025600,-0.008300,0.025600,-0.011800,0.022000,-0.011800,-0.022000,-0.008300,-0.025600,0.008300,-0.025600,0.011800,-0.022000,0.011800,0.022000,0.008300,0.025600,0.0* +1,1,0.007080,0.008300,0.022000* +1,1,0.007080,-0.008300,0.022000* +1,1,0.007080,-0.008300,-0.022000* +1,1,0.007080,0.008300,-0.022000* +% +%AMD27* +4,1,8,-0.025600,0.008300,-0.025600,-0.008300,-0.022000,-0.011800,0.022000,-0.011800,0.025600,-0.008300,0.025600,0.008300,0.022000,0.011800,-0.022000,0.011800,-0.025600,0.008300,0.0* +1,1,0.007080,-0.022000,0.008300* +1,1,0.007080,-0.022000,-0.008300* +1,1,0.007080,0.022000,-0.008300* +1,1,0.007080,0.022000,0.008300* +% +%AMD28* +4,1,8,-0.020500,-0.039400,0.020500,-0.039400,0.025600,-0.034200,0.025600,0.034200,0.020500,0.039400,-0.020500,0.039400,-0.025600,0.034200,-0.025600,-0.034200,-0.020500,-0.039400,0.0* +1,1,0.010240,-0.020500,-0.034200* +1,1,0.010240,0.020500,-0.034200* +1,1,0.010240,0.020500,0.034200* +1,1,0.010240,-0.020500,0.034200* +% +%AMD29* +4,1,8,-0.031500,-0.039400,0.031500,-0.039400,0.039400,-0.031500,0.039400,0.031500,0.031500,0.039400,-0.031500,0.039400,-0.039400,0.031500,-0.039400,-0.031500,-0.031500,-0.039400,0.0* +1,1,0.015740,-0.031500,-0.031500* +1,1,0.015740,0.031500,-0.031500* +1,1,0.015740,0.031500,0.031500* +1,1,0.015740,-0.031500,0.031500* +% +%AMD32* +4,1,8,-0.008300,-0.037400,0.008300,-0.037400,0.011800,-0.033900,0.011800,0.033900,0.008300,0.037400,-0.008300,0.037400,-0.011800,0.033900,-0.011800,-0.033900,-0.008300,-0.037400,0.0* +1,1,0.007080,-0.008300,-0.033900* +1,1,0.007080,0.008300,-0.033900* +1,1,0.007080,0.008300,0.033900* +1,1,0.007080,-0.008300,0.033900* +% +%AMD33* +4,1,8,0.026100,0.024600,-0.026100,0.024600,-0.033500,0.017200,-0.033500,-0.017200,-0.026100,-0.024600,0.026100,-0.024600,0.033500,-0.017200,0.033500,0.017200,0.026100,0.024600,0.0* +1,1,0.014760,0.026100,0.017200* +1,1,0.014760,-0.026100,0.017200* +1,1,0.014760,-0.026100,-0.017200* +1,1,0.014760,0.026100,-0.017200* +% +%AMD34* +4,1,8,0.002700,-0.033500,0.033500,-0.002700,0.033500,0.008200,0.008200,0.033500,-0.002700,0.033500,-0.033500,0.002700,-0.033500,-0.008200,-0.008200,-0.033500,0.002700,-0.033500,0.0* +1,1,0.015360,-0.002800,-0.028100* +1,1,0.015360,0.028100,0.002800* +1,1,0.015360,0.002800,0.028100* +1,1,0.015360,-0.028100,-0.002800* +% +%AMD35* +4,1,8,0.020800,0.029100,-0.020800,0.029100,-0.029500,0.020400,-0.029500,-0.020400,-0.020800,-0.029100,0.020800,-0.029100,0.029500,-0.020400,0.029500,0.020400,0.020800,0.029100,0.0* +1,1,0.017480,0.020800,0.020400* +1,1,0.017480,-0.020800,0.020400* +1,1,0.017480,-0.020800,-0.020400* +1,1,0.017480,0.020800,-0.020400* +% +%AMD36* +4,1,8,-0.048400,-0.053100,0.048400,-0.053100,0.059100,-0.042500,0.059100,0.042500,0.048400,0.053100,-0.048400,0.053100,-0.059100,0.042500,-0.059100,-0.042500,-0.048400,-0.053100,0.0* +1,1,0.021260,-0.048400,-0.042500* +1,1,0.021260,0.048400,-0.042500* +1,1,0.021260,0.048400,0.042500* +1,1,0.021260,-0.048400,0.042500* +% +%AMD39* +4,1,8,0.056300,0.035400,-0.056300,0.035400,-0.066900,0.024800,-0.066900,-0.024800,-0.056300,-0.035400,0.056300,-0.035400,0.066900,-0.024800,0.066900,0.024800,0.056300,0.035400,0.0* +1,1,0.021260,0.056300,0.024800* +1,1,0.021260,-0.056300,0.024800* +1,1,0.021260,-0.056300,-0.024800* +1,1,0.021260,0.056300,-0.024800* +% +%AMD40* +4,1,8,0.016100,0.009000,-0.016100,0.009000,-0.017000,0.008100,-0.017000,-0.008100,-0.016100,-0.009000,0.016100,-0.009000,0.017000,-0.008100,0.017000,0.008100,0.016100,0.009000,0.0* +1,1,0.001800,0.016100,0.008100* +1,1,0.001800,-0.016100,0.008100* +1,1,0.001800,-0.016100,-0.008100* +1,1,0.001800,0.016100,-0.008100* +% +%AMD41* +4,1,8,-0.024600,0.026100,-0.024600,-0.026100,-0.017200,-0.033500,0.017200,-0.033500,0.024600,-0.026100,0.024600,0.026100,0.017200,0.033500,-0.017200,0.033500,-0.024600,0.026100,0.0* +1,1,0.014760,-0.017200,0.026100* +1,1,0.014760,-0.017200,-0.026100* +1,1,0.014760,0.017200,-0.026100* +1,1,0.014760,0.017200,0.026100* +% +%AMD42* +4,1,8,-0.145700,0.102900,-0.145700,-0.102900,-0.140300,-0.108300,0.140300,-0.108300,0.145700,-0.102900,0.145700,0.102900,0.140300,0.108300,-0.140300,0.108300,-0.145700,0.102900,0.0* +1,1,0.010820,-0.140300,0.102900* +1,1,0.010820,-0.140300,-0.102900* +1,1,0.010820,0.140300,-0.102900* +1,1,0.010820,0.140300,0.102900* +% +%AMD43* +4,1,8,-0.037400,0.015000,-0.037400,-0.015000,-0.033700,-0.018700,0.033700,-0.018700,0.037400,-0.015000,0.037400,0.015000,0.033700,0.018700,-0.033700,0.018700,-0.037400,0.015000,0.0* +1,1,0.007480,-0.033700,0.015000* +1,1,0.007480,-0.033700,-0.015000* +1,1,0.007480,0.033700,-0.015000* +1,1,0.007480,0.033700,0.015000* +% +%AMD44* +4,1,8,-0.029400,-0.084100,0.029400,-0.084100,0.032700,-0.080800,0.032700,0.080800,0.029400,0.084100,-0.029400,0.084100,-0.032700,0.080800,-0.032700,-0.080800,-0.029400,-0.084100,0.0* +1,1,0.006540,-0.029400,-0.080800* +1,1,0.006540,0.029400,-0.080800* +1,1,0.006540,0.029400,0.080800* +1,1,0.006540,-0.029400,0.080800* +% +%AMD45* +4,1,8,-0.142000,-0.084100,0.142000,-0.084100,0.150400,-0.075600,0.150400,0.075600,0.142000,0.084100,-0.142000,0.084100,-0.150400,0.075600,-0.150400,-0.075600,-0.142000,-0.084100,0.0* +1,1,0.016820,-0.142000,-0.075600* +1,1,0.016820,0.142000,-0.075600* +1,1,0.016820,0.142000,0.075600* +1,1,0.016820,-0.142000,0.075600* +% +%AMD46* +4,1,8,0.040200,0.035400,-0.040200,0.035400,-0.047200,0.028300,-0.047200,-0.028300,-0.040200,-0.035400,0.040200,-0.035400,0.047200,-0.028300,0.047200,0.028300,0.040200,0.035400,0.0* +1,1,0.014180,0.040200,0.028300* +1,1,0.014180,-0.040200,0.028300* +1,1,0.014180,-0.040200,-0.028300* +1,1,0.014180,0.040200,-0.028300* +% +%AMD47* +4,1,8,-0.006900,-0.026600,0.006900,-0.026600,0.013800,-0.019700,0.013800,0.019700,0.006900,0.026600,-0.006900,0.026600,-0.013800,0.019700,-0.013800,-0.019700,-0.006900,-0.026600,0.0* +1,1,0.013780,-0.006900,-0.019700* +1,1,0.013780,0.006900,-0.019700* +1,1,0.013780,0.006900,0.019700* +1,1,0.013780,-0.006900,0.019700* +% +%AMD48* +4,1,8,-0.006900,-0.040400,0.006900,-0.040400,0.013800,-0.033500,0.013800,0.033500,0.006900,0.040400,-0.006900,0.040400,-0.013800,0.033500,-0.013800,-0.033500,-0.006900,-0.040400,0.0* +1,1,0.013780,-0.006900,-0.033500* +1,1,0.013780,0.006900,-0.033500* +1,1,0.013780,0.006900,0.033500* +1,1,0.013780,-0.006900,0.033500* +% +%AMD49* +4,1,8,-0.018700,-0.065000,0.018700,-0.065000,0.037400,-0.046300,0.037400,0.046300,0.018700,0.065000,-0.018700,0.065000,-0.037400,0.046300,-0.037400,-0.046300,-0.018700,-0.065000,0.0* +1,1,0.037400,-0.018700,-0.046300* +1,1,0.037400,0.018700,-0.046300* +1,1,0.037400,0.018700,0.046300* +1,1,0.037400,-0.018700,0.046300* +% +%AMD50* +4,1,8,0.052000,0.060000,-0.052000,0.060000,-0.064000,0.048000,-0.064000,-0.048000,-0.052000,-0.060000,0.052000,-0.060000,0.064000,-0.048000,0.064000,0.048000,0.052000,0.060000,0.0* +1,1,0.024000,0.052000,0.048000* +1,1,0.024000,-0.052000,0.048000* +1,1,0.024000,-0.052000,-0.048000* +1,1,0.024000,0.052000,-0.048000* +% +%AMD51* +4,1,8,0.025600,-0.027800,0.025600,0.027800,0.017900,0.035400,-0.017900,0.035400,-0.025600,0.027800,-0.025600,-0.027800,-0.017900,-0.035400,0.017900,-0.035400,0.025600,-0.027800,0.0* +1,1,0.015360,0.017900,-0.027800* +1,1,0.015360,0.017900,0.027800* +1,1,0.015360,-0.017900,0.027800* +1,1,0.015360,-0.017900,-0.027800* +% +%AMD52* +4,1,8,-0.067500,0.103500,-0.067500,-0.103500,-0.060700,-0.110200,0.060700,-0.110200,0.067500,-0.103500,0.067500,0.103500,0.060700,0.110200,-0.060700,0.110200,-0.067500,0.103500,0.0* +1,1,0.013500,-0.060700,0.103500* +1,1,0.013500,-0.060700,-0.103500* +1,1,0.013500,0.060700,-0.103500* +1,1,0.013500,0.060700,0.103500* +% +%AMD53* +4,1,8,0.104700,0.147600,-0.104700,0.147600,-0.110200,0.142100,-0.110200,-0.142100,-0.104700,-0.147600,0.104700,-0.147600,0.110200,-0.142100,0.110200,0.142100,0.104700,0.147600,0.0* +1,1,0.011020,0.104700,0.142100* +1,1,0.011020,-0.104700,0.142100* +1,1,0.011020,-0.104700,-0.142100* +1,1,0.011020,0.104700,-0.142100* +% +%AMD54* +4,1,8,0.013800,0.045000,-0.013800,0.045000,-0.019700,0.039100,-0.019700,-0.039100,-0.013800,-0.045000,0.013800,-0.045000,0.019700,-0.039100,0.019700,0.039100,0.013800,0.045000,0.0* +1,1,0.011820,0.013800,0.039100* +1,1,0.011820,-0.013800,0.039100* +1,1,0.011820,-0.013800,-0.039100* +1,1,0.011820,0.013800,-0.039100* +% +%AMD55* +4,1,8,0.045300,-0.036200,0.045300,0.036200,0.036200,0.045300,-0.036200,0.045300,-0.045300,0.036200,-0.045300,-0.036200,-0.036200,-0.045300,0.036200,-0.045300,0.045300,-0.036200,0.0* +1,1,0.018120,0.036200,-0.036200* +1,1,0.018120,0.036200,0.036200* +1,1,0.018120,-0.036200,0.036200* +1,1,0.018120,-0.036200,-0.036200* +% +G04~CAMADD=10~8~0.0~0.0~590.6~511.8~76.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~590.6~511.8* +%ADD10D10*% +G04~CAMADD=11~8~0.0~0.0~255.9~433.1~25.6~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~434.0~256.0* +%ADD11D11*% +G04~CAMADD=12~8~0.0~0.0~590.6~511.8~76.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~512.0~590.0* +%ADD12D12*% +G04~CAMADD=13~8~0.0~0.0~161.4~1181.1~24.2~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~161.4~1181.1* +%ADD13D13*% +%ADD14R,0.035430X0.098430*% +G04~CAMADD=15~8~0.0~0.0~944.9~708.7~70.9~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~708.0~944.0* +%ADD15D15*% +G04~CAMADD=16~8~0.0~0.0~708.7~511.8~76.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~708.7~511.8* +%ADD16D16*% +G04~CAMADD=17~8~0.0~0.0~354.3~342.5~51.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~354.0~343.0* +%ADD17D17*% +G04~CAMADD=18~8~0.0~0.0~354.3~342.5~51.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~343.0~354.0* +%ADD18D18*% +G04~CAMADD=19~8~0.0~0.0~354.3~342.5~51.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~135.0~450.0~450.0* +%ADD19D19*% +G04~CAMADD=20~3~0.0~0.0~114.2~708.7~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~315.0~534.0~534.0* +%ADD20D20*% +G04~CAMADD=21~3~0.0~0.0~114.2~708.7~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~225.0~534.0~534.0* +%ADD21D21*% +%ADD22O,0.023620X0.074800*% +G04~CAMADD=23~8~0.0~0.0~236.2~748.0~35.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~748.0~236.0* +%ADD23D23*% +%ADD24O,0.074800X0.023620*% +%ADD25O,0.013780X0.066930*% +G04~CAMADD=26~8~0.0~0.0~236.2~511.8~35.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~236.2~511.8* +%ADD26D26*% +G04~CAMADD=27~8~0.0~0.0~236.2~511.8~35.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~512.0~236.0* +%ADD27D27*% +G04~CAMADD=28~8~0.0~0.0~511.8~787.4~51.2~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~512.0~788.0* +%ADD28D28*% +G04~CAMADD=29~8~0.0~0.0~787.4~787.4~78.7~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~788.0~788.0* +%ADD29D29*% +%ADD30O,0.066930X0.013780*% +%ADD31O,0.023620X0.086610*% +G04~CAMADD=32~8~0.0~0.0~236.2~748.0~35.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~236.0~748.0* +%ADD32D32*% +G04~CAMADD=33~8~0.0~0.0~669.3~492.1~73.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~669.3~492.1* +%ADD33D33*% +G04~CAMADD=34~8~0.0~0.0~590.6~511.8~76.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~225.0~717.0~715.0* +%ADD34D34*% +G04~CAMADD=35~8~0.0~0.0~590.6~582.7~87.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~590.6~582.7* +%ADD35D35*% +G04~CAMADD=36~8~0.0~0.0~1181.1~1063.0~106.3~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~1182.0~1063.0* +%ADD36D36*% +%ADD37O,0.066930X0.016000*% +%ADD38O,0.023620X0.078740*% +G04~CAMADD=39~8~0.0~0.0~1338.6~708.7~106.3~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~1338.6~708.7* +%ADD39D39*% +G04~CAMADD=40~8~0.0~0.0~340.0~180.0~9.0~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~340.0~180.0* +%ADD40D40*% +G04~CAMADD=41~8~0.0~0.0~669.3~492.1~73.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~492.0~670.0* +%ADD41D41*% +G04~CAMADD=42~8~0.0~0.0~2165.4~2913.4~54.1~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~2914.0~2166.0* +%ADD42D42*% +G04~CAMADD=43~8~0.0~0.0~374.0~748.0~37.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~748.0~374.0* +%ADD43D43*% +G04~CAMADD=44~8~0.0~0.0~653.5~1681.1~32.7~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~654.0~1682.0* +%ADD44D44*% +G04~CAMADD=45~8~0.0~0.0~3007.9~1681.1~84.1~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~3008.0~1681.0* +%ADD45D45*% +G04~CAMADD=46~8~0.0~0.0~944.9~708.7~70.9~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~944.9~708.7* +%ADD46D46*% +G04~CAMADD=47~8~0.0~0.0~275.6~531.5~68.9~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~276.0~532.0* +%ADD47D47*% +G04~CAMADD=48~8~0.0~0.0~275.6~808.7~68.9~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~276.0~809.0* +%ADD48D48*% +G04~CAMADD=49~8~0.0~0.0~748.0~1299.2~187.0~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~749.0~1300.0* +%ADD49D49*% +G04~CAMADD=50~8~0.0~0.0~1279.5~1200.0~120.0~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~1279.5~1200.0* +%ADD50D50*% +G04~CAMADD=51~8~0.0~0.0~708.7~511.8~76.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~512.0~708.0* +%ADD51D51*% +G04~CAMADD=52~8~0.0~0.0~2204.7~1350.0~67.5~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~1350.0~2204.0* +%ADD52D52*% +G04~CAMADD=53~8~0.0~0.0~2204.7~2952.8~55.1~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~2204.7~2952.8* +%ADD53D53*% +G04~CAMADD=54~8~0.0~0.0~393.7~900.0~59.1~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~393.7~900.0* +%ADD54D54*% +G04~CAMADD=55~8~0.0~0.0~905.5~905.5~90.6~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~906.0~906.0* +%ADD55D55*% +%ADD117C,0.008000*% +%LNunisolder52_full-1*% +%LPD*% +G36* +X048006Y0570207D02* +Y0569321D01* +X0476812Y0566073* +X0473859* +Y0569813* +X0475139* +X0476516Y0571191* +X048006Y0570207* +G37* +G36* +X0467658Y0569813D02* +X0468938D01* +Y0566073* +X0465985* +X0462737Y0569321* +Y0570207* +X046628Y0571191* +X0467658Y0569813* +G37* +G36* +X048006Y0580148D02* +Y0579262D01* +X0476516Y0578278* +X0475139Y0579656* +X0473859* +Y0583396* +X0476812* +X048006Y0580148* +G37* +G36* +X0468938Y0579656D02* +X0467658D01* +X046628Y0578278* +X0462737Y0579262* +Y0580148* +X0465985Y0583396* +X0468938* +Y0579656* +G37* +G54D10* +X0493799Y0555905D03* +Y0563386D03* +X0412598Y0532423D03* +Y0539903D03* +X0513798Y0512423D03* +Y0519903D03* +X0411698Y0511723D03* +Y0519203D03* +X0438909Y0527984D03* +Y0535464D03* +X0466608Y0535546D03* +Y0543027D03* +X0431109Y0527984D03* +Y0535464D03* +X0493598Y0577803D03* +Y0570323D03* +X0484998Y0568723D03* +Y0576203D03* +X0449909Y0545258D03* +Y0537778D03* +X0512697Y0538386D03* +Y0545866D03* +X0474409Y0535531D03* +Y0543012D03* +X0171591Y0555125D03* +Y0562605D03* +X0332874Y0426575D03* +Y0419095D03* +X0353445Y0303346D03* +Y0310827D03* +X0312291Y0557925D03* +Y0565406D03* +X024574Y0335405D03* +Y0327925D03* +X0217391Y0335405D03* +Y0327925D03* +X0237841Y0335405D03* +Y0327925D03* +X0225291Y0335405D03* +Y0327925D03* +X0334841Y0533533D03* +Y0526053D03* +X0327041Y0533433D03* +Y0525953D03* +X0362608Y055767D03* +Y056515D03* +X0163791Y0558315D03* +Y0550835D03* +X0353883Y0572193D03* +Y0579674D03* +X0336091Y0334705D03* +Y0327225D03* +X0371376Y0546338D03* +Y0553819D03* +X0370491Y0313987D03* +Y0321468D03* +X0362108Y057965D03* +Y057217D03* +X0300491Y0348406D03* +Y0340925D03* +X0292691D03* +Y0348406D03* +X0177491Y0417906D03* +Y0410425D03* +X0185291Y0417906D03* +Y0410425D03* +X020315Y0339469D03* +Y0331988D03* +X0375491Y0351905D03* +Y0344425D03* +Y0366506D03* +Y0359025D03* +X0356091Y0391406D03* +Y0383925D03* +X0560335Y0325984D03* +Y0318504D03* +X0515255Y0318799D03* +Y0311319D03* +X0516928Y0325787D03* +Y0333268D03* +X058189Y0432776D03* +Y0440256D03* +X0618209Y0431989D03* +Y0424508D03* +X0625984Y0438878D03* +Y0431398D03* +X0545635Y0441558D03* +Y0449038D03* +X04247Y042368D03* +Y0431161D03* +X04325Y042368D03* +Y0431161D03* +X0480628Y0406636D03* +Y0414116D03* +X0596949Y0309842D03* +Y0302362D03* +X0488347Y0406636D03* +Y0414116D03* +X0618209Y0464764D03* +Y0457284D03* +X0625984Y0471654D03* +Y0464174D03* +X0531004Y0417717D03* +Y0425197D03* +X058189Y0465453D03* +Y0472934D03* +X04409Y0389121D03* +Y0396602D03* +X047286Y0389303D03* +Y0381823D03* +G54D11* +X0476123Y0560275D03* +Y0556535D03* +Y0552795D03* +X0466674D03* +Y0556535D03* +Y0560275D03* +X0333376Y0511829D03* +Y051557D03* +Y051931D03* +X0342825D03* +Y051557D03* +Y0511829D03* +G54D12* +X0481791Y0541634D03* +X0489272D03* +X0337795Y0450984D03* +X0345276D03* +X0287402Y0303642D03* +X0294882D03* +X0324833Y0565506D03* +X0332314D03* +X0326431Y0573265D03* +X0318951D03* +X0309151Y0316465D03* +X0316632D03* +X0254451Y0345702D03* +X0261931D03* +X0339051Y0571665D03* +X0346532D03* +X0350492Y0293602D03* +X0357972D03* +X0177833Y0358265D03* +X0170353D03* +X0298131Y0526665D03* +X0290651D03* +X0355231Y0563865D03* +X0347751D03* +X0209651Y0569365D03* +X0217131D03* +X02176Y0404365D03* +X021012D03* +X0215667Y0449565D03* +X0208187D03* +X02136Y0458365D03* +X020612D03* +X0293451Y0332365D03* +X0300932D03* +X0359744Y0328838D03* +X0367225D03* +X0363451Y0389665D03* +X0370932D03* +X0272051Y0376142D03* +X0279532D03* +X0341831Y0502264D03* +X0349311D03* +X0351101Y0494465D03* +X0358581D03* +X035374Y0531988D03* +X034626D03* +X0336701Y0494465D03* +X0344181D03* +X0268851Y0345702D03* +X0276331D03* +X0362697Y0510039D03* +X0355216D03* +X0287402Y0295866D03* +X0294882D03* +X0293851Y0356965D03* +X0301331D03* +X0180197Y0344765D03* +X0172717D03* +X0328651Y0356665D03* +X0336132D03* +X0328051Y0367065D03* +X0335531D03* +X0364469Y0502264D03* +X0356988D03* +X059065Y0480315D03* +X0583169D03* +X0588681Y0447638D03* +X0581201D03* +X0595669Y0447933D03* +X060315D03* +X0596555Y0427658D03* +X0589075D03* +X0654841Y0328235D03* +X0662321D03* +X052933Y0440453D03* +X0536811D03* +X0660335Y0469488D03* +X0652854D03* +X0596555Y0460434D03* +X0589075D03* +X0457181Y0424588D03* +X0449701D03* +X0597638Y0480709D03* +X0605118D03* +X062628Y0401279D03* +X0618799D03* +X0582579Y0392618D03* +X0575098D03* +X0582579Y0400393D03* +X0575098D03* +G54D13* +X0422648Y0513794D03* +X0425404D03* +X042816D03* +X0430916D03* +X0433672D03* +X0469498D03* +X0472254D03* +X047501D03* +X0477766D03* +X0480522D03* +X0483278D03* +X0486034D03* +X048879D03* +X0491546D03* +X0494302D03* +X0497057D03* +X0499813D03* +X0502569D03* +X0436427D03* +X0439183D03* +X0441939D03* +X0444695D03* +X0447451D03* +X0450207D03* +X0452963D03* +X0455719D03* +X0458475D03* +X0461231D03* +X0463987D03* +X0466743D03* +G54D14* +X0464509Y0574735D03* +X0478288D03* +G54D15* +X0454173Y0558709D03* +Y0574851D03* +X0606299Y0303051D03* +Y0319193D03* +X0469027Y0404992D03* +Y0421134D03* +G54D16* +X0458268Y0535236D03* +Y0546653D03* +X0440705Y0322569D03* +Y0333986D03* +X0464542Y0377908D03* +Y0389325D03* +G54D17* +X0301391Y029648D03* +Y0291251D03* +X0236191Y0525179D03* +Y0519951D03* +X0234547Y0362933D03* +Y0357705D03* +X0327633Y0549114D03* +Y0554342D03* +X0221692Y0546825D03* +Y0541597D03* +X03486Y0520746D03* +Y0515518D03* +X0362795Y0486472D03* +Y0481244D03* +X0330217Y0506945D03* +Y0501717D03* +X0338991Y030188D03* +Y0296651D03* +X0160391Y041878D03* +Y0413551D03* +X0170823Y0413651D03* +Y041888D03* +X0240846Y0456945D03* +Y0451717D03* +X0237992Y0385772D03* +Y0391D03* +G54D18* +X0261977Y0579265D03* +X0267206D03* +X0231877Y0565965D03* +X0237105D03* +X0189203Y0359461D03* +X0183975D03* +X0243005Y0437465D03* +X0237777D03* +X0202377Y0395165D03* +X0207606D03* +X0296577Y0320965D03* +X0301805D03* +X0302406Y0363565D03* +X0297177D03* +X0296406Y0533265D03* +X0291177D03* +X0285677Y0568165D03* +X0290905D03* +X0205961Y0345669D03* +X0200732D03* +X0208417Y0528821D03* +X0203188D03* +X0181671Y047968D03* +X0176443D03* +X0240677Y0502665D03* +X0245905D03* +Y0496265D03* +X0240677D03* +X0327377Y0342765D03* +X0332606D03* +X0181705Y0471965D03* +X0176477D03* +G54D19* +X024944Y0575414D03* +X0245743Y0571717D03* +G54D20* +X0289282Y0552376D03* +X028789Y0553768D03* +X0286498Y055516D03* +X0285106Y0556552D03* +X0283714Y0557944D03* +X0282322Y0559336D03* +X028093Y0560728D03* +X0279538Y056212D03* +X0278146Y0563512D03* +X0276754Y0564904D03* +X0275362Y0566296D03* +X027397Y0567688D03* +X0272578Y056908D03* +X0271186Y0570472D03* +X0269794Y0571864D03* +X0268402Y0573255D03* +X0237501Y0542354D03* +X0238893Y0540962D03* +X0240285Y0539571D03* +X0241677Y0538178D03* +X0243069Y0536787D03* +X0244461Y0535395D03* +X0245853Y0534003D03* +X0247245Y0532611D03* +X0248637Y0531219D03* +X0250029Y0529827D03* +X0251421Y0528435D03* +X0252813Y0527043D03* +X0254205Y0525651D03* +X0255596Y0524259D03* +X0256988Y0522867D03* +X025838Y0521475D03* +G54D21* +X025838Y0573255D03* +X0256988Y0571864D03* +X0255596Y0570472D03* +X0254205Y056908D03* +X0252813Y0567688D03* +X0251421Y0566296D03* +X0250029Y0564904D03* +X0248637Y0563512D03* +X0247245Y056212D03* +X0245853Y0560728D03* +X0244461Y0559336D03* +X0243069Y0557944D03* +X0241677Y0556552D03* +X0240285Y055516D03* +X0238893Y0553768D03* +X0237501Y0552376D03* +X0268402Y0521475D03* +X0269794Y0522867D03* +X0271186Y0524259D03* +X0272578Y0525651D03* +X027397Y0527043D03* +X0275362Y0528435D03* +X0276754Y0529827D03* +X0278146Y0531219D03* +X0279538Y0532611D03* +X028093Y0534003D03* +X0282322Y0535395D03* +X0283714Y0536787D03* +X0285106Y0538178D03* +X0286498Y0539571D03* +X028789Y0540962D03* +X0289282Y0542354D03* +G54D22* +X0252591Y0430117D03* +X0247591D03* +X0242591D03* +X0237591D03* +X0252591Y0411613D03* +X0247591D03* +X0242591D03* +X0237591D03* +X0322491Y0366817D03* +X0317491D03* +X0312491D03* +X0307491D03* +X0322491Y0348313D03* +X0317491D03* +X0312491D03* +G54D23* +X0174626Y0338265D03* +X0336889Y0487165D03* +X0600984Y0395295D03* +G54D24* +X0174626Y0333265D03* +Y0328265D03* +Y0323265D03* +X019313Y0338265D03* +Y0333265D03* +Y0328265D03* +Y0323265D03* +X0336889Y0482165D03* +Y0477165D03* +Y0472165D03* +X0355393Y0487165D03* +Y0482165D03* +Y0477165D03* +Y0472165D03* +X0327543Y0322965D03* +Y0327965D03* +Y0332965D03* +Y0337965D03* +X0309039Y0322965D03* +Y0327965D03* +Y0332965D03* +Y0337965D03* +X0619488Y0380295D03* +Y0385295D03* +Y0390295D03* +Y0395295D03* +X0600984Y0380295D03* +Y0385295D03* +Y0390295D03* +X0458271Y0403047D03* +Y0408047D03* +Y0413047D03* +Y0418047D03* +X0439767Y0403047D03* +Y0408047D03* +Y0413047D03* +Y0418047D03* +G54D25* +X0183214Y0366645D03* +X0185773D03* +X0188332D03* +X0190891D03* +X019345D03* +X0196009D03* +X0198568D03* +X0183214Y0389086D03* +X0185773D03* +X0188332D03* +X0190891D03* +X019345D03* +X0196009D03* +X0198568D03* +G54D26* +X0189857Y0344803D03* +X0186117Y0353071D03* +X0193597D03* +X023909Y0320993D03* +X024283Y0312725D03* +X023535D03* +X0238991Y0342332D03* +X0235251Y0350599D03* +X0242731D03* +X0222991Y0342332D03* +X0219251Y0350599D03* +X0226731D03* +X0165591Y0565332D03* +X0161851Y0573599D03* +X0169332D03* +X0363189Y0321555D03* +X0355709D03* +X0359449Y0313287D03* +X0216893Y0539173D03* +X0220633Y0530905D03* +X0213153D03* +X0225394Y0306496D03* +X0229134Y0298228D03* +X0221654D03* +X023937Y0306496D03* +X024311Y0298228D03* +X023563D03* +X017223Y049142D03* +X017971D03* +X017597Y0499687D03* +X0611811Y0431989D03* +X0604331D03* +X0608071Y0423721D03* +X0466272Y0326598D03* +X0462532Y0334866D03* +X0470012D03* +X0608071Y0456496D03* +X0604331Y0464764D03* +X0611811D03* +G54D27* +X0222244Y0316757D03* +X0213976Y0313017D03* +Y0320498D03* +X0253525Y0375765D03* +X0245257Y0372025D03* +Y0379505D03* +X0253525Y0389565D03* +X0245257Y0385825D03* +Y0393305D03* +X0246986Y0464505D03* +Y0457025D03* +X0255254Y0460765D03* +X0371225Y0399765D03* +X0362958Y0396025D03* +Y0403506D03* +Y0304628D03* +X0371225Y0308368D03* +Y0300887D03* +X0256958Y0368565D03* +X0265225Y0372305D03* +Y0364825D03* +X0158984Y0481008D03* +X0167252Y0484748D03* +Y0477268D03* +X0589567Y0441536D03* +Y0434056D03* +X0597835Y0437796D03* +X0542795Y0454623D03* +X0534527Y0450883D03* +Y0458363D03* +X0589567Y0474312D03* +Y0466831D03* +X0597835Y0470571D03* +X0582873Y0410532D03* +X0591141Y0414272D03* +Y0406791D03* +G54D28* +X0261964Y0321191D03* +X0271019D03* +G54D29* +X0266491Y0336939D03* +G54D30* +X0308971Y028775D03* +Y0290309D03* +Y0292868D03* +Y0295427D03* +X0331412Y0308222D03* +Y0310781D03* +X0308971D03* +Y0308222D03* +Y0305663D03* +Y0303104D03* +Y0300545D03* +Y0297986D03* +X0331412Y0305663D03* +Y0303104D03* +Y0300545D03* +Y0297986D03* +Y0295427D03* +Y0292868D03* +Y0290309D03* +Y028775D03* +G54D31* +X0302491Y0512925D03* +X0297491D03* +X0292491D03* +X0287491D03* +X0282491D03* +X0277491D03* +X0272491D03* +X0267491D03* +X0302491Y0494028D03* +X0297491D03* +X0292491D03* +X0287491D03* +X0282491D03* +X0277491D03* +X0272491D03* +X0267491D03* +X0523484Y0312992D03* +X0528484D03* +X0533484D03* +X0538484D03* +X0543484D03* +X0548484D03* +X0553484D03* +X0523484Y033189D03* +X0528484D03* +X0533484D03* +X0538484D03* +X0543484D03* +X0548484D03* +X0553484D03* +G54D32* +X0307491Y0348313D03* +G54D33* +X0371027Y0560703D03* +Y0574679D03* +X060748Y0401476D03* +Y0415453D03* +X0590354Y0401083D03* +Y0387106D03* +X0598917Y0401476D03* +Y0415453D03* +G54D34* +X0341036Y0545821D03* +X0335747Y055111D03* +G54D35* +X0280791Y0477989D03* +Y0484761D03* +X0288591Y0477989D03* +Y0484761D03* +X0272991Y0477989D03* +Y0484761D03* +X0265218Y0477955D03* +Y0484727D03* +X0296351Y0477989D03* +Y0484761D03* +X0304091Y0477989D03* +Y0484761D03* +X0311891Y0477989D03* +Y0484761D03* +X04169Y0430806D03* +Y0424035D03* +G54D36* +X0239765Y0284365D03* +X0211418D03* +X0182973Y0515551D03* +X0211319D03* +G54D37* +X0342973Y0465499D03* +Y046294D03* +Y0460381D03* +Y0457822D03* +X0359509Y0465499D03* +Y046294D03* +Y0460381D03* +Y0457822D03* +G54D38* +X0158091Y0426261D03* +X0163091D03* +X0168091D03* +X0173091D03* +X0178091D03* +X0183091D03* +X0188091D03* +X0193091D03* +X0158091Y0463269D03* +X0163091D03* +X0168091D03* +X0173091D03* +X0178091D03* +X0183091D03* +X0188091D03* +X0193091D03* +G54D39* +X0160991Y0379165D03* +Y0403165D03* +G54D40* +X0294707Y0504765D03* +Y0502165D03* +X0289506D03* +Y0504765D03* +X0273901D03* +Y0502165D03* +X0279102D03* +Y0504765D03* +X0284304D03* +Y0502165D03* +X03Y0502243D03* +Y0504843D03* +G54D41* +X054439Y0482283D03* +X0530413D03* +X062687Y044754D03* +X0612894D03* +X053045Y0473735D03* +X0544426D03* +X0520472Y0437402D03* +X0506496D03* +X0604725Y047254D03* +X0618701D03* +X0604724Y0439764D03* +X0618701D03* +X0626083Y0480119D03* +X0612106D03* +G54D42* +X0653543Y0351279D03* +Y0379921D03* +X0673228Y0409055D03* +Y0438976D03* +G54D43* +X0628937Y0342303D03* +Y0360256D03* +Y0370945D03* +Y0388898D03* +X0648622Y0418032D03* +Y0400079D03* +Y0447953D03* +Y043D03* +G54D44* +X0584202Y0367421D03* +Y0343209D03* +G54D45* +X0604862Y0367421D03* +Y0343209D03* +G54D46* +X0658465Y0318898D03* +X0642323D03* +X0501883Y0448269D03* +X0518024D03* +X0541535Y0430709D03* +X0557677D03* +Y0418307D03* +X0541535D03* +G54D47* +X0481345Y039042D03* +X0493156D03* +G54D48* +X048725Y0389094D03* +G54D49* +X048725Y0379495D03* +G54D50* +X0453669Y0345696D03* +Y0368893D03* +G54D51* +X0533268Y046496D03* +X0544685D03* +X0648917Y0461122D03* +X0660335D03* +X0614961Y0409646D03* +X0626378D03* +G54D52* +X0443572Y0455394D03* +X0482941D03* +G54D53* +X0513681Y0403805D03* +G54D54* +X0522736Y0427716D03* +X0513681D03* +X0504626D03* +G54D55* +X049929Y0461357D03* +Y0479073D03* +G54D117* +X0507407Y0488202D02* +X0525604D01* +X0531507Y0494105* +X0531496Y0494095D02* +Y0510991D01* +X0413386Y05D02* +X041811D01* +X0405512Y0507874D02* +X0413386Y05D01* +X0405512Y0507874D02* +Y0512303D01* +X0519685Y0507874D02* +Y0512598D01* +X0511811Y05D02* +X0519685Y0507874D01* +X0507382Y05D02* +X0511811D01* +X0507087Y0587402D02* +X0511811D01* +X0519685Y0579528* +Y0575098D02* +Y0579528D01* +X0413386Y0587402D02* +X0417815D01* +X0405512Y0579528D02* +X0413386Y0587402D01* +X0405512Y0574803D02* +Y0579528D01* +X0541338Y0610236D02* +X0555598D01* +X0531498Y0600396D02* +X0541338Y0610236D01* +X0531498Y0587436D02* +Y0600396D01* +X0692913Y0586134D02* +Y0600394D01* +X0683073Y0610234D02* +X0692913Y0600394D01* +X0670113Y0610234D02* +X0683073D01* +X0668811Y0269685D02* +X0683071D01* +X0692911Y0279525* +Y0292485* +X0403554Y0269674D02* +X0416514D01* +X0393714Y0279514D02* +X0403554Y0269674D01* +X0393714Y0279514D02* +Y0293774D01* +X038189Y0577165D02* +Y0584646D01* +X0374311D02* +X038189D01* +X037441Y0269685D02* +X038189D01* +Y0277264* +X015187Y0269685D02* +Y0277165D01* +Y0269685D02* +X0159449D01* +X015187Y0577067D02* +Y0584646D01* +X015935* +X039369Y0465376D02* +Y0478336D01* +X040353Y0488176* +X041779* +M02* \ No newline at end of file diff --git a/hardware/gerber/unisolder52_full.gts b/hardware/gerber/unisolder52_full.gts new file mode 100644 index 0000000..1889f3b --- /dev/null +++ b/hardware/gerber/unisolder52_full.gts @@ -0,0 +1,1855 @@ +%FSTAX25Y25*% +%MOIN*% +%SFA1B1*% + +%IPPOS*% +%AMD128* +4,1,8,0.021800,0.029600,-0.021800,0.029600,-0.033500,0.017900,-0.033500,-0.017900,-0.021800,-0.029600,0.021800,-0.029600,0.033500,-0.017900,0.033500,0.017900,0.021800,0.029600,0.0* +1,1,0.023360,0.021800,0.017900* +1,1,0.023360,-0.021800,0.017900* +1,1,0.023360,-0.021800,-0.017900* +1,1,0.023360,0.021800,-0.017900* +% +%AMD129* +4,1,8,-0.025700,0.010200,-0.025700,-0.010200,-0.019100,-0.016800,0.019100,-0.016800,0.025700,-0.010200,0.025700,0.010200,0.019100,0.016800,-0.019100,0.016800,-0.025700,0.010200,0.0* +1,1,0.013120,-0.019100,0.010200* +1,1,0.013120,-0.019100,-0.010200* +1,1,0.013120,0.019100,-0.010200* +1,1,0.013120,0.019100,0.010200* +% +%AMD130* +4,1,8,0.029600,-0.021800,0.029600,0.021800,0.017900,0.033500,-0.017900,0.033500,-0.029600,0.021800,-0.029600,-0.021800,-0.017900,-0.033500,0.017900,-0.033500,0.029600,-0.021800,0.0* +1,1,0.023360,0.017900,-0.021800* +1,1,0.023360,0.017900,0.021800* +1,1,0.023360,-0.017900,0.021800* +1,1,0.023360,-0.017900,-0.021800* +% +%AMD131* +4,1,8,0.005600,0.063100,-0.005600,0.063100,-0.012100,0.056600,-0.012100,-0.056600,-0.005600,-0.063100,0.005600,-0.063100,0.012100,-0.056600,0.012100,0.056600,0.005600,0.063100,0.0* +1,1,0.012840,0.005600,0.056600* +1,1,0.012840,-0.005600,0.056600* +1,1,0.012840,-0.005600,-0.056600* +1,1,0.012840,0.005600,-0.056600* +% +%AMD133* +4,1,8,0.039400,-0.040200,0.039400,0.040200,0.028300,0.051200,-0.028300,0.051200,-0.039400,0.040200,-0.039400,-0.040200,-0.028300,-0.051200,0.028300,-0.051200,0.039400,-0.040200,0.0* +1,1,0.022180,0.028300,-0.040200* +1,1,0.022180,0.028300,0.040200* +1,1,0.022180,-0.028300,0.040200* +1,1,0.022180,-0.028300,-0.040200* +% +%AMD134* +4,1,8,0.027800,0.029600,-0.027800,0.029600,-0.039400,0.017900,-0.039400,-0.017900,-0.027800,-0.029600,0.027800,-0.029600,0.039400,-0.017900,0.039400,0.017900,0.027800,0.029600,0.0* +1,1,0.023360,0.027800,0.017900* +1,1,0.023360,-0.027800,0.017900* +1,1,0.023360,-0.027800,-0.017900* +1,1,0.023360,0.027800,-0.017900* +% +%AMD135* +4,1,8,-0.012600,-0.021100,0.012600,-0.021100,0.021700,-0.012000,0.021700,0.012000,0.012600,0.021100,-0.012600,0.021100,-0.021700,0.012000,-0.021700,-0.012000,-0.012600,-0.021100,0.0* +1,1,0.018280,-0.012600,-0.012000* +1,1,0.018280,0.012600,-0.012000* +1,1,0.018280,0.012600,0.012000* +1,1,0.018280,-0.012600,0.012000* +% +%AMD136* +4,1,8,-0.021100,0.012600,-0.021100,-0.012600,-0.012000,-0.021700,0.012000,-0.021700,0.021100,-0.012600,0.021100,0.012600,0.012000,0.021700,-0.012000,0.021700,-0.021100,0.012600,0.0* +1,1,0.018280,-0.012000,0.012600* +1,1,0.018280,-0.012000,-0.012600* +1,1,0.018280,0.012000,-0.012600* +1,1,0.018280,0.012000,0.012600* +% +%AMD137* +4,1,8,-0.023800,-0.006000,-0.006000,-0.023800,0.006900,-0.023800,0.023800,-0.006900,0.023800,0.006000,0.006000,0.023800,-0.006900,0.023800,-0.023800,0.006900,-0.023800,-0.006000,0.0* +1,1,0.018280,-0.017400,0.000400* +1,1,0.018280,0.000400,-0.017400* +1,1,0.018280,0.017400,-0.000400* +1,1,0.018280,-0.000400,0.017400* +% +%AMD138* +4,1,4,0.028400,0.013600,0.013600,0.028400,-0.028400,-0.013600,-0.013600,-0.028400,0.028400,0.013600,0.0* +1,1,0.020870,0.021000,0.021000* +1,1,0.020870,-0.021000,-0.021000* +% +%AMD139* +4,1,4,0.013600,-0.028400,0.028400,-0.013600,-0.013600,0.028400,-0.028400,0.013600,0.013600,-0.028400,0.0* +1,1,0.020870,0.021000,-0.021000* +1,1,0.020870,-0.021000,0.021000* +% +%AMD141* +4,1,8,-0.041400,0.008300,-0.041400,-0.008300,-0.033900,-0.015800,0.033900,-0.015800,0.041400,-0.008300,0.041400,0.008300,0.033900,0.015800,-0.033900,0.015800,-0.041400,0.008300,0.0* +1,1,0.015080,-0.033900,0.008300* +1,1,0.015080,-0.033900,-0.008300* +1,1,0.015080,0.033900,-0.008300* +1,1,0.015080,0.033900,0.008300* +% +%AMD144* +4,1,8,0.008300,0.029600,-0.008300,0.029600,-0.015800,0.022000,-0.015800,-0.022000,-0.008300,-0.029600,0.008300,-0.029600,0.015800,-0.022000,0.015800,0.022000,0.008300,0.029600,0.0* +1,1,0.015080,0.008300,0.022000* +1,1,0.015080,-0.008300,0.022000* +1,1,0.015080,-0.008300,-0.022000* +1,1,0.015080,0.008300,-0.022000* +% +%AMD145* +4,1,8,-0.029600,0.008300,-0.029600,-0.008300,-0.022000,-0.015800,0.022000,-0.015800,0.029600,-0.008300,0.029600,0.008300,0.022000,0.015800,-0.022000,0.015800,-0.029600,0.008300,0.0* +1,1,0.015080,-0.022000,0.008300* +1,1,0.015080,-0.022000,-0.008300* +1,1,0.015080,0.022000,-0.008300* +1,1,0.015080,0.022000,0.008300* +% +%AMD146* +4,1,8,-0.020500,-0.043400,0.020500,-0.043400,0.029600,-0.034200,0.029600,0.034200,0.020500,0.043400,-0.020500,0.043400,-0.029600,0.034200,-0.029600,-0.034200,-0.020500,-0.043400,0.0* +1,1,0.018240,-0.020500,-0.034200* +1,1,0.018240,0.020500,-0.034200* +1,1,0.018240,0.020500,0.034200* +1,1,0.018240,-0.020500,0.034200* +% +%AMD147* +4,1,8,-0.031500,-0.043400,0.031500,-0.043400,0.043400,-0.031500,0.043400,0.031500,0.031500,0.043400,-0.031500,0.043400,-0.043400,0.031500,-0.043400,-0.031500,-0.031500,-0.043400,0.0* +1,1,0.023740,-0.031500,-0.031500* +1,1,0.023740,0.031500,-0.031500* +1,1,0.023740,0.031500,0.031500* +1,1,0.023740,-0.031500,0.031500* +% +%AMD150* +4,1,8,-0.008300,-0.041400,0.008300,-0.041400,0.015800,-0.033900,0.015800,0.033900,0.008300,0.041400,-0.008300,0.041400,-0.015800,0.033900,-0.015800,-0.033900,-0.008300,-0.041400,0.0* +1,1,0.015080,-0.008300,-0.033900* +1,1,0.015080,0.008300,-0.033900* +1,1,0.015080,0.008300,0.033900* +1,1,0.015080,-0.008300,0.033900* +% +%AMD151* +4,1,8,0.026100,0.028600,-0.026100,0.028600,-0.037500,0.017200,-0.037500,-0.017200,-0.026100,-0.028600,0.026100,-0.028600,0.037500,-0.017200,0.037500,0.017200,0.026100,0.028600,0.0* +1,1,0.022760,0.026100,0.017200* +1,1,0.022760,-0.026100,0.017200* +1,1,0.022760,-0.026100,-0.017200* +1,1,0.022760,0.026100,-0.017200* +% +%AMD152* +4,1,8,0.005500,-0.036300,0.036300,-0.005500,0.036300,0.011000,0.011000,0.036300,-0.005500,0.036300,-0.036300,0.005500,-0.036300,-0.011000,-0.011000,-0.036300,0.005500,-0.036300,0.0* +1,1,0.023360,-0.002800,-0.028100* +1,1,0.023360,0.028100,0.002800* +1,1,0.023360,0.002800,0.028100* +1,1,0.023360,-0.028100,-0.002800* +% +%AMD153* +4,1,8,0.020800,0.033100,-0.020800,0.033100,-0.033500,0.020400,-0.033500,-0.020400,-0.020800,-0.033100,0.020800,-0.033100,0.033500,-0.020400,0.033500,0.020400,0.020800,0.033100,0.0* +1,1,0.025480,0.020800,0.020400* +1,1,0.025480,-0.020800,0.020400* +1,1,0.025480,-0.020800,-0.020400* +1,1,0.025480,0.020800,-0.020400* +% +%AMD154* +4,1,8,-0.048400,-0.057100,0.048400,-0.057100,0.063100,-0.042500,0.063100,0.042500,0.048400,0.057100,-0.048400,0.057100,-0.063100,0.042500,-0.063100,-0.042500,-0.048400,-0.057100,0.0* +1,1,0.029260,-0.048400,-0.042500* +1,1,0.029260,0.048400,-0.042500* +1,1,0.029260,0.048400,0.042500* +1,1,0.029260,-0.048400,0.042500* +% +%AMD157* +4,1,8,0.056300,0.039400,-0.056300,0.039400,-0.070900,0.024800,-0.070900,-0.024800,-0.056300,-0.039400,0.056300,-0.039400,0.070900,-0.024800,0.070900,0.024800,0.056300,0.039400,0.0* +1,1,0.029260,0.056300,0.024800* +1,1,0.029260,-0.056300,0.024800* +1,1,0.029260,-0.056300,-0.024800* +1,1,0.029260,0.056300,-0.024800* +% +%AMD158* +4,1,8,0.016100,0.013000,-0.016100,0.013000,-0.021000,0.008100,-0.021000,-0.008100,-0.016100,-0.013000,0.016100,-0.013000,0.021000,-0.008100,0.021000,0.008100,0.016100,0.013000,0.0* +1,1,0.009800,0.016100,0.008100* +1,1,0.009800,-0.016100,0.008100* +1,1,0.009800,-0.016100,-0.008100* +1,1,0.009800,0.016100,-0.008100* +% +%AMD159* +4,1,8,-0.028600,0.026100,-0.028600,-0.026100,-0.017200,-0.037500,0.017200,-0.037500,0.028600,-0.026100,0.028600,0.026100,0.017200,0.037500,-0.017200,0.037500,-0.028600,0.026100,0.0* +1,1,0.022760,-0.017200,0.026100* +1,1,0.022760,-0.017200,-0.026100* +1,1,0.022760,0.017200,-0.026100* +1,1,0.022760,0.017200,0.026100* +% +%AMD160* +4,1,8,-0.149700,0.102900,-0.149700,-0.102900,-0.140300,-0.112300,0.140300,-0.112300,0.149700,-0.102900,0.149700,0.102900,0.140300,0.112300,-0.140300,0.112300,-0.149700,0.102900,0.0* +1,1,0.018820,-0.140300,0.102900* +1,1,0.018820,-0.140300,-0.102900* +1,1,0.018820,0.140300,-0.102900* +1,1,0.018820,0.140300,0.102900* +% +%AMD161* +4,1,8,-0.041400,0.015000,-0.041400,-0.015000,-0.033700,-0.022700,0.033700,-0.022700,0.041400,-0.015000,0.041400,0.015000,0.033700,0.022700,-0.033700,0.022700,-0.041400,0.015000,0.0* +1,1,0.015480,-0.033700,0.015000* +1,1,0.015480,-0.033700,-0.015000* +1,1,0.015480,0.033700,-0.015000* +1,1,0.015480,0.033700,0.015000* +% +%AMD162* +4,1,8,-0.029400,-0.088100,0.029400,-0.088100,0.036700,-0.080800,0.036700,0.080800,0.029400,0.088100,-0.029400,0.088100,-0.036700,0.080800,-0.036700,-0.080800,-0.029400,-0.088100,0.0* +1,1,0.014540,-0.029400,-0.080800* +1,1,0.014540,0.029400,-0.080800* +1,1,0.014540,0.029400,0.080800* +1,1,0.014540,-0.029400,0.080800* +% +%AMD163* +4,1,8,-0.142000,-0.088100,0.142000,-0.088100,0.154400,-0.075600,0.154400,0.075600,0.142000,0.088100,-0.142000,0.088100,-0.154400,0.075600,-0.154400,-0.075600,-0.142000,-0.088100,0.0* +1,1,0.024820,-0.142000,-0.075600* +1,1,0.024820,0.142000,-0.075600* +1,1,0.024820,0.142000,0.075600* +1,1,0.024820,-0.142000,0.075600* +% +%AMD164* +4,1,8,0.040200,0.039400,-0.040200,0.039400,-0.051200,0.028300,-0.051200,-0.028300,-0.040200,-0.039400,0.040200,-0.039400,0.051200,-0.028300,0.051200,0.028300,0.040200,0.039400,0.0* +1,1,0.022180,0.040200,0.028300* +1,1,0.022180,-0.040200,0.028300* +1,1,0.022180,-0.040200,-0.028300* +1,1,0.022180,0.040200,-0.028300* +% +%AMD165* +4,1,8,-0.006900,-0.030600,0.006900,-0.030600,0.017800,-0.019700,0.017800,0.019700,0.006900,0.030600,-0.006900,0.030600,-0.017800,0.019700,-0.017800,-0.019700,-0.006900,-0.030600,0.0* +1,1,0.021780,-0.006900,-0.019700* +1,1,0.021780,0.006900,-0.019700* +1,1,0.021780,0.006900,0.019700* +1,1,0.021780,-0.006900,0.019700* +% +%AMD166* +4,1,8,-0.006900,-0.044400,0.006900,-0.044400,0.017800,-0.033500,0.017800,0.033500,0.006900,0.044400,-0.006900,0.044400,-0.017800,0.033500,-0.017800,-0.033500,-0.006900,-0.044400,0.0* +1,1,0.021780,-0.006900,-0.033500* +1,1,0.021780,0.006900,-0.033500* +1,1,0.021780,0.006900,0.033500* +1,1,0.021780,-0.006900,0.033500* +% +%AMD167* +4,1,8,-0.018700,-0.069000,0.018700,-0.069000,0.041400,-0.046300,0.041400,0.046300,0.018700,0.069000,-0.018700,0.069000,-0.041400,0.046300,-0.041400,-0.046300,-0.018700,-0.069000,0.0* +1,1,0.045400,-0.018700,-0.046300* +1,1,0.045400,0.018700,-0.046300* +1,1,0.045400,0.018700,0.046300* +1,1,0.045400,-0.018700,0.046300* +% +%AMD168* +4,1,8,0.052000,0.064000,-0.052000,0.064000,-0.068000,0.048000,-0.068000,-0.048000,-0.052000,-0.064000,0.052000,-0.064000,0.068000,-0.048000,0.068000,0.048000,0.052000,0.064000,0.0* +1,1,0.032000,0.052000,0.048000* +1,1,0.032000,-0.052000,0.048000* +1,1,0.032000,-0.052000,-0.048000* +1,1,0.032000,0.052000,-0.048000* +% +%AMD169* +4,1,8,0.029600,-0.027800,0.029600,0.027800,0.017900,0.039400,-0.017900,0.039400,-0.029600,0.027800,-0.029600,-0.027800,-0.017900,-0.039400,0.017900,-0.039400,0.029600,-0.027800,0.0* +1,1,0.023360,0.017900,-0.027800* +1,1,0.023360,0.017900,0.027800* +1,1,0.023360,-0.017900,0.027800* +1,1,0.023360,-0.017900,-0.027800* +% +%AMD170* +4,1,8,-0.071500,0.103500,-0.071500,-0.103500,-0.060700,-0.114200,0.060700,-0.114200,0.071500,-0.103500,0.071500,0.103500,0.060700,0.114200,-0.060700,0.114200,-0.071500,0.103500,0.0* +1,1,0.021500,-0.060700,0.103500* +1,1,0.021500,-0.060700,-0.103500* +1,1,0.021500,0.060700,-0.103500* +1,1,0.021500,0.060700,0.103500* +% +%AMD171* +4,1,8,0.104700,0.151600,-0.104700,0.151600,-0.114200,0.142100,-0.114200,-0.142100,-0.104700,-0.151600,0.104700,-0.151600,0.114200,-0.142100,0.114200,0.142100,0.104700,0.151600,0.0* +1,1,0.019020,0.104700,0.142100* +1,1,0.019020,-0.104700,0.142100* +1,1,0.019020,-0.104700,-0.142100* +1,1,0.019020,0.104700,-0.142100* +% +%AMD172* +4,1,8,0.013800,0.049000,-0.013800,0.049000,-0.023700,0.039100,-0.023700,-0.039100,-0.013800,-0.049000,0.013800,-0.049000,0.023700,-0.039100,0.023700,0.039100,0.013800,0.049000,0.0* +1,1,0.019820,0.013800,0.039100* +1,1,0.019820,-0.013800,0.039100* +1,1,0.019820,-0.013800,-0.039100* +1,1,0.019820,0.013800,-0.039100* +% +%AMD173* +4,1,8,0.049300,-0.036200,0.049300,0.036200,0.036200,0.049300,-0.036200,0.049300,-0.049300,0.036200,-0.049300,-0.036200,-0.036200,-0.049300,0.036200,-0.049300,0.049300,-0.036200,0.0* +1,1,0.026120,0.036200,-0.036200* +1,1,0.026120,0.036200,0.036200* +1,1,0.026120,-0.036200,0.036200* +1,1,0.026120,-0.036200,-0.036200* +% +%AMD175* +4,1,8,-0.033500,0.020700,-0.033500,-0.020700,-0.020700,-0.033500,0.020700,-0.033500,0.033500,-0.020700,0.033500,0.020700,0.020700,0.033500,-0.020700,0.033500,-0.033500,0.020700,0.0* +1,1,0.025720,-0.020700,0.020700* +1,1,0.025720,-0.020700,-0.020700* +1,1,0.025720,0.020700,-0.020700* +1,1,0.025720,0.020700,0.020700* +% +%AMD180* +4,1,8,0.045400,0.010300,0.010300,0.045400,-0.010300,0.045400,-0.045400,0.010300,-0.045400,-0.010300,-0.010300,-0.045400,0.010300,-0.045400,0.045400,-0.010300,0.045400,0.010300,0.0* +1,1,0.029260,0.035100,0.000000* +1,1,0.029260,0.000000,0.035100* +1,1,0.029260,-0.035100,0.000000* +1,1,0.029260,0.000000,-0.035100* +% +%AMD188* +4,1,8,0.025500,0.040400,-0.025500,0.040400,-0.040400,0.025500,-0.040400,-0.025500,-0.025500,-0.040400,0.025500,-0.040400,0.040400,-0.025500,0.040400,0.025500,0.025500,0.040400,0.0* +1,1,0.029860,0.025500,0.025500* +1,1,0.029860,-0.025500,0.025500* +1,1,0.029860,-0.025500,-0.025500* +1,1,0.029860,0.025500,-0.025500* +% +%AMD189* +4,1,8,-0.017500,-0.039000,0.017500,-0.039000,0.039000,-0.017500,0.039000,0.017500,0.017500,0.039000,-0.017500,0.039000,-0.039000,0.017500,-0.039000,-0.017500,-0.017500,-0.039000,0.0* +1,1,0.043000,-0.017500,-0.017500* +1,1,0.043000,0.017500,-0.017500* +1,1,0.043000,0.017500,0.017500* +1,1,0.043000,-0.017500,0.017500* +% +%AMD191* +4,1,8,0.059100,-0.038600,0.059100,0.038600,0.038600,0.059100,-0.038600,0.059100,-0.059100,0.038600,-0.059100,-0.038600,-0.038600,-0.059100,0.038600,-0.059100,0.059100,-0.038600,0.0* +1,1,0.041080,0.038600,-0.038600* +1,1,0.041080,0.038600,0.038600* +1,1,0.041080,-0.038600,0.038600* +1,1,0.041080,-0.038600,-0.038600* +% +%AMD195* +4,1,8,0.046600,0.010500,0.010500,0.046600,-0.010500,0.046600,-0.046600,0.010500,-0.046600,-0.010500,-0.010500,-0.046600,0.010500,-0.046600,0.046600,-0.010500,0.046600,0.010500,0.0* +1,1,0.029860,0.036100,0.000000* +1,1,0.029860,0.000000,0.036100* +1,1,0.029860,-0.036100,0.000000* +1,1,0.029860,0.000000,-0.036100* +% +%AMD196* +4,1,8,-0.072900,0.055100,-0.072900,-0.055100,-0.055100,-0.072900,0.055100,-0.072900,0.072900,-0.055100,0.072900,0.055100,0.055100,0.072900,-0.055100,0.072900,-0.072900,0.055100,0.0* +1,1,0.035560,-0.055100,0.055100* +1,1,0.035560,-0.055100,-0.055100* +1,1,0.035560,0.055100,-0.055100* +1,1,0.035560,0.055100,0.055100* +% +%ADD122R,0.043000X0.089000*% +%ADD123R,0.045000X0.088000*% +%ADD124R,0.799210X0.115160*% +%ADD125R,0.066000X0.028000*% +%ADD126R,0.042000X0.022000*% +%ADD127R,0.046000X0.104000*% +G04~CAMADD=128~8~0.0~0.0~670.6~591.8~116.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~670.6~591.8* +%ADD128D128*% +G04~CAMADD=129~8~0.0~0.0~335.9~513.1~65.6~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~514.0~336.0* +%ADD129D129*% +G04~CAMADD=130~8~0.0~0.0~670.6~591.8~116.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~592.0~670.0* +%ADD130D130*% +G04~CAMADD=131~8~0.0~0.0~241.4~1261.1~64.2~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~241.4~1261.1* +%ADD131D131*% +%ADD132R,0.043430X0.106420*% +G04~CAMADD=133~8~0.0~0.0~1024.9~788.7~110.9~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~788.0~1024.0* +%ADD133D133*% +G04~CAMADD=134~8~0.0~0.0~788.7~591.8~116.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~788.7~591.8* +%ADD134D134*% +G04~CAMADD=135~8~0.0~0.0~434.3~422.5~91.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~434.0~422.0* +%ADD135D135*% +G04~CAMADD=136~8~0.0~0.0~434.3~422.5~91.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~423.0~434.0* +%ADD136D136*% +G04~CAMADD=137~8~0.0~0.0~434.3~422.5~91.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~135.0~528.0~529.0* +%ADD137D137*% +G04~CAMADD=138~3~0.0~0.0~208.7~803.2~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~315.0~628.0~628.0* +%ADD138D138*% +G04~CAMADD=139~3~0.0~0.0~208.7~803.2~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~225.0~628.0~628.0* +%ADD139D139*% +%ADD140O,0.031620X0.082800*% +G04~CAMADD=141~8~0.0~0.0~316.2~828.0~75.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~828.0~316.0* +%ADD141D141*% +%ADD142O,0.082800X0.031620*% +%ADD143O,0.025780X0.078930*% +G04~CAMADD=144~8~0.0~0.0~316.2~591.8~75.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~316.2~591.8* +%ADD144D144*% +G04~CAMADD=145~8~0.0~0.0~316.2~591.8~75.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~592.0~316.0* +%ADD145D145*% +G04~CAMADD=146~8~0.0~0.0~591.8~867.4~91.2~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~592.0~868.0* +%ADD146D146*% +G04~CAMADD=147~8~0.0~0.0~867.4~867.4~118.7~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~868.0~868.0* +%ADD147D147*% +%ADD148O,0.078930X0.025780*% +%ADD149O,0.031620X0.094610*% +G04~CAMADD=150~8~0.0~0.0~316.2~828.0~75.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~316.0~828.0* +%ADD150D150*% +G04~CAMADD=151~8~0.0~0.0~749.3~572.1~113.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~749.3~572.1* +%ADD151D151*% +G04~CAMADD=152~8~0.0~0.0~670.6~591.8~116.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~225.0~797.0~795.0* +%ADD152D152*% +G04~CAMADD=153~8~0.0~0.0~670.6~662.7~127.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~670.6~662.7* +%ADD153D153*% +G04~CAMADD=154~8~0.0~0.0~1261.1~1143.0~146.3~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~1262.0~1143.0* +%ADD154D154*% +%ADD155O,0.077170X0.026240*% +%ADD156O,0.031620X0.086740*% +G04~CAMADD=157~8~0.0~0.0~1418.6~788.7~146.3~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~1418.6~788.7* +%ADD157D157*% +G04~CAMADD=158~8~0.0~0.0~420.0~260.0~49.0~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~420.0~260.0* +%ADD158D158*% +G04~CAMADD=159~8~0.0~0.0~749.3~572.1~113.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~572.0~750.0* +%ADD159D159*% +G04~CAMADD=160~8~0.0~0.0~2245.3~2993.4~94.1~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~2994.0~2246.0* +%ADD160D160*% +G04~CAMADD=161~8~0.0~0.0~454.0~828.0~77.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~828.0~454.0* +%ADD161D161*% +G04~CAMADD=162~8~0.0~0.0~733.5~1761.1~72.7~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~734.0~1762.0* +%ADD162D162*% +G04~CAMADD=163~8~0.0~0.0~3087.9~1761.1~124.1~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~3088.0~1761.0* +%ADD163D163*% +G04~CAMADD=164~8~0.0~0.0~1024.9~788.7~110.9~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~1024.9~788.7* +%ADD164D164*% +G04~CAMADD=165~8~0.0~0.0~355.6~611.5~108.9~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~356.0~612.0* +%ADD165D165*% +G04~CAMADD=166~8~0.0~0.0~355.6~888.7~108.9~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~356.0~889.0* +%ADD166D166*% +G04~CAMADD=167~8~0.0~0.0~828.0~1379.2~227.0~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~829.0~1380.0* +%ADD167D167*% +G04~CAMADD=168~8~0.0~0.0~1359.5~1280.0~160.0~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~1359.5~1280.0* +%ADD168D168*% +G04~CAMADD=169~8~0.0~0.0~788.7~591.8~116.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~592.0~788.0* +%ADD169D169*% +G04~CAMADD=170~8~0.0~0.0~2284.7~1430.0~107.5~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~1430.0~2284.0* +%ADD170D170*% +G04~CAMADD=171~8~0.0~0.0~2284.7~3032.8~95.1~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~2284.7~3032.8* +%ADD171D171*% +G04~CAMADD=172~8~0.0~0.0~473.7~980.0~99.1~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~473.7~980.0* +%ADD172D172*% +G04~CAMADD=173~8~0.0~0.0~985.5~985.5~130.6~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~986.0~986.0* +%ADD173D173*% +%ADD174C,0.067060*% +G04~CAMADD=175~8~0.0~0.0~670.6~670.6~128.6~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~670.0~670.0* +%ADD175D175*% +%ADD176O,0.059180X0.051310*% +%ADD177O,0.206850X0.114330*% +%ADD178C,0.263900*% +%ADD179C,0.244220*% +G04~CAMADD=180~8~0.0~0.0~788.7~788.7~146.3~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~315.0~992.0~991.0* +%ADD180D180*% +%ADD181C,0.078870*% +%ADD182R,0.067060X0.067060*% +%ADD183O,0.126110X0.086740*% +%ADD184R,0.067060X0.067060*% +%ADD185C,0.086740*% +%ADD186C,0.063120*% +%ADD187C,0.080830*% +G04~CAMADD=188~8~0.0~0.0~808.3~808.3~149.3~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~808.3~808.3* +%ADD188D188*% +G04~CAMADD=189~8~0.0~0.0~780.0~780.0~215.0~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~780.0~780.0* +%ADD189D189*% +%ADD190C,0.078000*% +G04~CAMADD=191~8~0.0~0.0~1182.4~1182.4~205.4~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~1182.0~1182.0* +%ADD191D191*% +%ADD192C,0.118240*% +%ADD193C,0.067060*% +%ADD194C,0.322000*% +G04~CAMADD=195~8~0.0~0.0~808.3~808.3~149.3~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~315.0~1018.0~1017.0* +%ADD195D195*% +G04~CAMADD=196~8~0.0~0.0~1457.9~1457.9~177.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~1458.0~1458.0* +%ADD196D196*% +%ADD197O,0.086740X0.126110*% +%LNunisolder52_full-1*% +%LPD*% +G36* +X0466304Y0571591D02* +X0466329Y0571589D01* +X0466331* +X0466333* +X0466356Y0571584* +X0466381Y057158* +X0466382Y0571579* +X0466384* +X0466407Y0571571* +X046643Y0571563* +X0466432Y0571562* +X0466434* +X0466456Y0571551* +X0466477Y057154* +X0466479Y0571539* +X0466481Y0571538* +X0466501Y0571525* +X0466521Y0571512* +X0466523Y057151* +X0466524Y0571509* +X0466543Y0571493* +X0466561Y0571477* +X0466562Y0571476* +X0466564Y0571475* +X0467824Y0570214* +X0468938* +X046899Y0570211* +X0469041Y0570201* +X0469091Y0570184* +X0469138Y0570161* +X0469182Y0570131* +X0469221Y0570097* +X0469256Y0570057* +X0469285Y0570014* +X0469308Y0569967* +X0469325Y0569917* +X0469335Y0569866* +X0469339Y0569813* +Y0566073* +X0469335Y0566021* +X0469325Y056597* +X0469308Y056592* +X0469285Y0565873* +X0469256Y0565829* +X0469221Y056579* +X0469182Y0565755* +X0469138Y0565726* +X0469091Y0565703* +X0469041Y0565686* +X046899Y0565676* +X0468938Y0565672* +X0465985* +X0465933Y0565676* +X0465881Y0565686* +X0465832Y0565703* +X0465785Y0565726* +X0465741Y0565755* +X0465702Y056579* +X0462454Y0569038* +X0462419Y0569077* +X046239Y0569121* +X0462367Y0569168* +X046235Y0569217* +X0462339Y0569269* +X0462336Y0569321* +Y0570207* +X0462338Y0570232* +X0462339Y0570256* +Y0570258* +Y0570259* +X0462344Y0570284* +X0462349Y0570307* +Y0570309* +X046235Y0570311* +X0462358Y0570334* +X0462365Y0570357* +X0462366Y0570359* +X0462367Y0570361* +X0462378Y0570382* +X0462388Y0570404* +X0462389Y0570406* +X046239Y0570407* +X0462403Y0570428* +X0462417Y0570448* +X0462418Y057045* +X0462419Y0570451* +X0462435Y057047* +X0462451Y0570488* +X0462452Y0570489* +X0462454Y0570491* +X0462472Y0570507* +X046249Y0570523* +X0462492Y0570524* +X0462493Y0570525* +X0462513Y0570539* +X0462533Y0570552* +X0462535Y0570553* +X0462536Y0570554* +X0462558Y0570565* +X046258Y0570576* +X0462582Y0570577* +X0462584* +X0462606Y0570585* +X046263Y0570593* +X0466173Y0571578* +X0466175* +X0466177Y0571579* +X04662Y0571583* +X0466224Y0571588* +X0466226* +X0466228Y0571589* +X0466253Y057159* +X0466277Y0571592* +X0466278* +X046628* +X0466304Y0571591* +G37* +G36* +X0476518Y0571592D02* +X047652D01* +X0476544Y057159* +X0476569Y0571589* +X0476571Y0571588* +X0476573* +X0476596Y0571583* +X047662Y0571579* +X0476622Y0571578* +X0476624* +X0480167Y0570593* +X048019Y0570585* +X0480213Y0570577* +X0480215* +X0480217Y0570576* +X0480239Y0570565* +X048026Y0570554* +X0480262Y0570553* +X0480263Y0570552* +X0480284Y0570539* +X0480304Y0570525* +X0480305Y0570524* +X0480307Y0570523* +X0480325Y0570507* +X0480343Y0570491* +X0480344Y0570489* +X0480346Y0570488* +X0480362Y057047* +X0480378Y0570451* +X0480379Y057045* +X048038Y0570448* +X0480394Y0570428* +X0480407Y0570407* +X0480408Y0570406* +X0480409Y0570404* +X0480419Y0570382* +X048043Y0570361* +X0480431Y0570359* +X0480432Y0570357* +X0480439Y0570334* +X0480447Y0570311* +Y0570309* +X0480448Y0570307* +X0480452Y0570284* +X0480457Y0570259* +Y0570258* +X0480458Y0570256* +X0480459Y0570232* +X0480461Y0570207* +Y0569321* +X0480457Y0569269* +X0480447Y0569217* +X048043Y0569168* +X0480407Y0569121* +X0480378Y0569077* +X0480343Y0569038* +X0477095Y056579* +X0477056Y0565755* +X0477012Y0565726* +X0476965Y0565703* +X0476916Y0565686* +X0476864Y0565676* +X0476812Y0565672* +X0473859* +X0473807Y0565676* +X0473755Y0565686* +X0473706Y0565703* +X0473659Y0565726* +X0473615Y0565755* +X0473576Y056579* +X0473541Y0565829* +X0473512Y0565873* +X0473489Y056592* +X0473472Y056597* +X0473462Y0566021* +X0473458Y0566073* +Y0569813* +X0473462Y0569866* +X0473472Y0569917* +X0473489Y0569967* +X0473512Y0570014* +X0473541Y0570057* +X0473576Y0570097* +X0473615Y0570131* +X0473659Y0570161* +X0473706Y0570184* +X0473755Y0570201* +X0473807Y0570211* +X0473859Y0570214* +X0474972* +X0476233Y0571475* +X0476234Y0571476* +X0476236Y0571477* +X0476254Y0571493* +X0476272Y0571509* +X0476274Y057151* +X0476275Y0571512* +X0476296Y0571525* +X0476316Y0571538* +X0476318Y0571539* +X0476319Y057154* +X0476341Y0571551* +X0476363Y0571562* +X0476365* +X0476367Y0571563* +X047639Y0571571* +X0476413Y0571579* +X0476414* +X0476416Y057158* +X0476441Y0571584* +X0476464Y0571589* +X0476466* +X0476468* +X0476493Y0571591* +X0476516Y0571592* +X0476518* +G37* +G36* +X0476864Y0583793D02* +X0476916Y0583783D01* +X0476965Y0583766* +X0477012Y0583743* +X0477056Y0583714* +X0477095Y058368* +X0480343Y0580432* +X0480378Y0580392* +X0480407Y0580348* +X048043Y0580302* +X0480447Y0580252* +X0480457Y05802* +X0480461Y0580148* +Y0579262* +X0480459Y0579238* +X0480458Y0579214* +X0480457Y0579212* +Y057921* +X0480452Y0579186* +X0480448Y0579162* +X0480447Y057916* +Y0579158* +X0480439Y0579135* +X0480432Y0579112* +X0480431Y0579111* +X048043Y0579109* +X0480419Y0579087* +X0480409Y0579065* +X0480408Y0579063* +X0480407Y0579062* +X0480394Y0579042* +X048038Y0579021* +X0480379Y057902* +X0480378Y0579018* +X0480362Y0579* +X0480346Y0578981* +X0480344Y057898* +X0480343Y0578979* +X0480325Y0578963* +X0480307Y0578946* +X0480305Y0578945* +X0480304Y0578944* +X0480284Y0578931* +X0480263Y0578917* +X0480262Y0578916* +X048026Y0578915* +X0480239Y0578904* +X0480217Y0578893* +X0480215* +X0480213Y0578892* +X048019Y0578884* +X0480167Y0578876* +X0476624Y0577892* +X0476622Y0577891* +X047662* +X0476596Y0577886* +X0476573Y0577881* +X0476571* +X0476569* +X0476544Y0577879* +X047652Y0577877* +X0476518* +X0476516* +X0476493Y0577879* +X0476468Y057788* +X0476466* +X0476464Y0577881* +X0476441Y0577885* +X0476416Y057789* +X0476414* +X0476413Y0577891* +X047639Y0577899* +X0476367Y0577906* +X0476365Y0577907* +X0476363Y0577908* +X0476341Y0577919* +X0476319Y0577929* +X0476318Y057793* +X0476316Y0577931* +X0476296Y0577945* +X0476275Y0577958* +X0476274Y0577959* +X0476272Y057796* +X0476254Y0577976* +X0476236Y0577992* +X0476234Y0577993* +X0476233Y0577994* +X0474972Y0579255* +X0473859* +X0473807Y0579258* +X0473755Y0579269* +X0473706Y0579286* +X0473659Y0579309* +X0473615Y0579338* +X0473576Y0579373* +X0473541Y0579412* +X0473512Y0579456* +X0473489Y0579502* +X0473472Y0579552* +X0473462Y0579604* +X0473458Y0579656* +Y0583396* +X0473462Y0583448* +X0473472Y05835* +X0473489Y0583549* +X0473512Y0583597* +X0473541Y058364* +X0473576Y058368* +X0473615Y0583714* +X0473659Y0583743* +X0473706Y0583766* +X0473755Y0583783* +X0473807Y0583793* +X0473859Y0583797* +X0476812* +X0476864Y0583793* +G37* +G36* +X046899D02* +X0469041Y0583783D01* +X0469091Y0583766* +X0469138Y0583743* +X0469182Y0583714* +X0469221Y058368* +X0469256Y058364* +X0469285Y0583597* +X0469308Y0583549* +X0469325Y05835* +X0469335Y0583448* +X0469339Y0583396* +Y0579656* +X0469335Y0579604* +X0469325Y0579552* +X0469308Y0579502* +X0469285Y0579456* +X0469256Y0579412* +X0469221Y0579373* +X0469182Y0579338* +X0469138Y0579309* +X0469091Y0579286* +X0469041Y0579269* +X046899Y0579258* +X0468938Y0579255* +X0467824* +X0466564Y0577994* +X0466562Y0577993* +X0466561Y0577992* +X0466543Y0577976* +X0466524Y057796* +X0466523Y0577959* +X0466521Y0577958* +X0466501Y0577945* +X0466481Y0577931* +X0466479Y057793* +X0466477Y0577929* +X0466456Y0577919* +X0466434Y0577908* +X0466432Y0577907* +X046643Y0577906* +X0466407Y0577899* +X0466384Y0577891* +X0466382Y057789* +X0466381* +X0466356Y0577885* +X0466333Y0577881* +X0466331Y057788* +X0466329* +X0466304Y0577879* +X046628Y0577877* +X0466278* +X0466277* +X0466253Y0577879* +X0466228Y0577881* +X0466226* +X0466224* +X04662Y0577886* +X0466177Y0577891* +X0466175* +X0466173Y0577892* +X046263Y0578876* +X0462606Y0578884* +X0462584Y0578892* +X0462582Y0578893* +X046258* +X0462558Y0578904* +X0462536Y0578915* +X0462535Y0578916* +X0462533Y0578917* +X0462513Y0578931* +X0462493Y0578944* +X0462492Y0578945* +X046249Y0578946* +X0462472Y0578963* +X0462454Y0578979* +X0462452Y057898* +X0462451Y0578981* +X0462435Y0579* +X0462419Y0579018* +X0462418Y057902* +X0462417Y0579021* +X0462403Y0579042* +X046239Y0579062* +X0462389Y0579063* +X0462388Y0579065* +X0462378Y0579087* +X0462367Y0579109* +X0462366Y0579111* +X0462365Y0579112* +X0462358Y0579135* +X046235Y0579158* +X0462349Y057916* +Y0579162* +X0462344Y0579186* +X0462339Y057921* +Y0579212* +Y0579214* +X0462338Y0579238* +X0462336Y0579262* +Y0580148* +X0462339Y05802* +X046235Y0580252* +X0462367Y0580302* +X046239Y0580348* +X0462419Y0580392* +X0462454Y0580432* +X0465702Y058368* +X0465741Y0583714* +X0465785Y0583743* +X0465832Y0583766* +X0465881Y0583783* +X0465933Y0583793* +X0465985Y0583797* +X0468938* +X046899Y0583793* +G37* +G54D122* +X0476148Y0556588D03* +G54D123* +X0466648Y0556542D03* +G54D124* +X0462609Y0513829D03* +G54D125* +X0280791Y0481375D03* +X0288591D03* +X0272991D03* +X0265218Y0481342D03* +X0296351Y0481375D03* +X0304091D03* +X0311891D03* +X04169Y0427421D03* +G54D126* +X0294707Y0503465D03* +X0289506D03* +X0273901D03* +X0279102D03* +X0284304D03* +X03Y0503544D03* +G54D127* +X0333391Y0515565D03* +X0342791D03* +G54D128* +X0493799Y0555905D03* +Y0563386D03* +X0412598Y0532423D03* +Y0539903D03* +X0513798Y0512423D03* +Y0519903D03* +X0411698Y0511723D03* +Y0519203D03* +X0438909Y0527984D03* +Y0535464D03* +X0466608Y0535546D03* +Y0543027D03* +X0431109Y0527984D03* +Y0535464D03* +X0493598Y0577803D03* +Y0570323D03* +X0484998Y0568723D03* +Y0576203D03* +X0449909Y0545258D03* +Y0537778D03* +X0512697Y0538386D03* +Y0545866D03* +X0474409Y0535531D03* +Y0543012D03* +X0171591Y0555125D03* +Y0562605D03* +X0332874Y0426575D03* +Y0419095D03* +X0353445Y0303346D03* +Y0310827D03* +X0312291Y0557925D03* +Y0565406D03* +X024574Y0335405D03* +Y0327925D03* +X0217391Y0335405D03* +Y0327925D03* +X0237841Y0335405D03* +Y0327925D03* +X0225291Y0335405D03* +Y0327925D03* +X0334841Y0533533D03* +Y0526053D03* +X0327041Y0533433D03* +Y0525953D03* +X0362608Y055767D03* +Y056515D03* +X0163791Y0558315D03* +Y0550835D03* +X0353883Y0572193D03* +Y0579674D03* +X0336091Y0334705D03* +Y0327225D03* +X0371376Y0546338D03* +Y0553819D03* +X0370491Y0313987D03* +Y0321468D03* +X0362108Y057965D03* +Y057217D03* +X0300491Y0348406D03* +Y0340925D03* +X0292691D03* +Y0348406D03* +X0177491Y0417906D03* +Y0410425D03* +X0185291Y0417906D03* +Y0410425D03* +X020315Y0339469D03* +Y0331988D03* +X0375491Y0351905D03* +Y0344425D03* +Y0366506D03* +Y0359025D03* +X0356091Y0391406D03* +Y0383925D03* +X0560335Y0325984D03* +Y0318504D03* +X0515255Y0318799D03* +Y0311319D03* +X0516928Y0325787D03* +Y0333268D03* +X058189Y0432776D03* +Y0440256D03* +X0618209Y0431989D03* +Y0424508D03* +X0625984Y0438878D03* +Y0431398D03* +X0545635Y0441558D03* +Y0449038D03* +X04247Y042368D03* +Y0431161D03* +X04325Y042368D03* +Y0431161D03* +X0480628Y0406636D03* +Y0414116D03* +X0596949Y0309842D03* +Y0302362D03* +X0488347Y0406636D03* +Y0414116D03* +X0618209Y0464764D03* +Y0457284D03* +X0625984Y0471654D03* +Y0464174D03* +X0531004Y0417717D03* +Y0425197D03* +X058189Y0465453D03* +Y0472934D03* +X04409Y0389121D03* +Y0396602D03* +X047286Y0389303D03* +Y0381823D03* +G54D129* +X0476123Y0560275D03* +Y0556535D03* +Y0552795D03* +X0466674D03* +Y0556535D03* +Y0560275D03* +X0333376Y0511829D03* +Y051557D03* +Y051931D03* +X0342825D03* +Y051557D03* +Y0511829D03* +G54D130* +X0481791Y0541634D03* +X0489272D03* +X0337795Y0450984D03* +X0345276D03* +X0287402Y0303642D03* +X0294882D03* +X0324833Y0565506D03* +X0332314D03* +X0326431Y0573265D03* +X0318951D03* +X0309151Y0316465D03* +X0316632D03* +X0254451Y0345702D03* +X0261931D03* +X0339051Y0571665D03* +X0346532D03* +X0350492Y0293602D03* +X0357972D03* +X0177833Y0358265D03* +X0170353D03* +X0298131Y0526665D03* +X0290651D03* +X0355231Y0563865D03* +X0347751D03* +X0209651Y0569365D03* +X0217131D03* +X02176Y0404365D03* +X021012D03* +X0215667Y0449565D03* +X0208187D03* +X02136Y0458365D03* +X020612D03* +X0293451Y0332365D03* +X0300932D03* +X0359744Y0328838D03* +X0367225D03* +X0363451Y0389665D03* +X0370932D03* +X0272051Y0376142D03* +X0279532D03* +X0341831Y0502264D03* +X0349311D03* +X0351101Y0494465D03* +X0358581D03* +X035374Y0531988D03* +X034626D03* +X0336701Y0494465D03* +X0344181D03* +X0268851Y0345702D03* +X0276331D03* +X0362697Y0510039D03* +X0355216D03* +X0287402Y0295866D03* +X0294882D03* +X0293851Y0356965D03* +X0301331D03* +X0180197Y0344765D03* +X0172717D03* +X0328651Y0356665D03* +X0336132D03* +X0328051Y0367065D03* +X0335531D03* +X0364469Y0502264D03* +X0356988D03* +X059065Y0480315D03* +X0583169D03* +X0588681Y0447638D03* +X0581201D03* +X0595669Y0447933D03* +X060315D03* +X0596555Y0427658D03* +X0589075D03* +X0654841Y0328235D03* +X0662321D03* +X052933Y0440453D03* +X0536811D03* +X0660335Y0469488D03* +X0652854D03* +X0596555Y0460434D03* +X0589075D03* +X0457181Y0424588D03* +X0449701D03* +X0597638Y0480709D03* +X0605118D03* +X062628Y0401279D03* +X0618799D03* +X0582579Y0392618D03* +X0575098D03* +X0582579Y0400393D03* +X0575098D03* +G54D131* +X0422648Y0513794D03* +X0425404D03* +X042816D03* +X0430916D03* +X0433672D03* +X0469498D03* +X0472254D03* +X047501D03* +X0477766D03* +X0480522D03* +X0483278D03* +X0486034D03* +X048879D03* +X0491546D03* +X0494302D03* +X0497057D03* +X0499813D03* +X0502569D03* +X0436427D03* +X0439183D03* +X0441939D03* +X0444695D03* +X0447451D03* +X0450207D03* +X0452963D03* +X0455719D03* +X0458475D03* +X0461231D03* +X0463987D03* +X0466743D03* +G54D132* +X0464509Y0574735D03* +X0478288D03* +G54D133* +X0454173Y0558709D03* +Y0574851D03* +X0606299Y0303051D03* +Y0319193D03* +X0469027Y0404992D03* +Y0421134D03* +G54D134* +X0458268Y0535236D03* +Y0546653D03* +X0440705Y0322569D03* +Y0333986D03* +X0464542Y0377908D03* +Y0389325D03* +G54D135* +X0301391Y029648D03* +Y0291251D03* +X0236191Y0525179D03* +Y0519951D03* +X0234547Y0362933D03* +Y0357705D03* +X0327633Y0549114D03* +Y0554342D03* +X0221692Y0546825D03* +Y0541597D03* +X03486Y0520746D03* +Y0515518D03* +X0362795Y0486472D03* +Y0481244D03* +X0330217Y0506945D03* +Y0501717D03* +X0338991Y030188D03* +Y0296651D03* +X0160391Y041878D03* +Y0413551D03* +X0170823Y0413651D03* +Y041888D03* +X0240846Y0456945D03* +Y0451717D03* +X0237992Y0385772D03* +Y0391D03* +G54D136* +X0261977Y0579265D03* +X0267206D03* +X0231877Y0565965D03* +X0237105D03* +X0189203Y0359461D03* +X0183975D03* +X0243005Y0437465D03* +X0237777D03* +X0202377Y0395165D03* +X0207606D03* +X0296577Y0320965D03* +X0301805D03* +X0302406Y0363565D03* +X0297177D03* +X0296406Y0533265D03* +X0291177D03* +X0285677Y0568165D03* +X0290905D03* +X0205961Y0345669D03* +X0200732D03* +X0208417Y0528821D03* +X0203188D03* +X0181671Y047968D03* +X0176443D03* +X0240677Y0502665D03* +X0245905D03* +Y0496265D03* +X0240677D03* +X0327377Y0342765D03* +X0332606D03* +X0181705Y0471965D03* +X0176477D03* +G54D137* +X024944Y0575414D03* +X0245743Y0571717D03* +G54D138* +X0289282Y0552376D03* +X028789Y0553768D03* +X0286498Y055516D03* +X0285106Y0556552D03* +X0283714Y0557944D03* +X0282322Y0559336D03* +X028093Y0560728D03* +X0279538Y056212D03* +X0278146Y0563512D03* +X0276754Y0564904D03* +X0275362Y0566296D03* +X027397Y0567688D03* +X0272578Y056908D03* +X0271186Y0570472D03* +X0269794Y0571864D03* +X0268402Y0573255D03* +X0237501Y0542354D03* +X0238893Y0540962D03* +X0240285Y0539571D03* +X0241677Y0538178D03* +X0243069Y0536787D03* +X0244461Y0535395D03* +X0245853Y0534003D03* +X0247245Y0532611D03* +X0248637Y0531219D03* +X0250029Y0529827D03* +X0251421Y0528435D03* +X0252813Y0527043D03* +X0254205Y0525651D03* +X0255596Y0524259D03* +X0256988Y0522867D03* +X025838Y0521475D03* +G54D139* +X025838Y0573255D03* +X0256988Y0571864D03* +X0255596Y0570472D03* +X0254205Y056908D03* +X0252813Y0567688D03* +X0251421Y0566296D03* +X0250029Y0564904D03* +X0248637Y0563512D03* +X0247245Y056212D03* +X0245853Y0560728D03* +X0244461Y0559336D03* +X0243069Y0557944D03* +X0241677Y0556552D03* +X0240285Y055516D03* +X0238893Y0553768D03* +X0237501Y0552376D03* +X0268402Y0521475D03* +X0269794Y0522867D03* +X0271186Y0524259D03* +X0272578Y0525651D03* +X027397Y0527043D03* +X0275362Y0528435D03* +X0276754Y0529827D03* +X0278146Y0531219D03* +X0279538Y0532611D03* +X028093Y0534003D03* +X0282322Y0535395D03* +X0283714Y0536787D03* +X0285106Y0538178D03* +X0286498Y0539571D03* +X028789Y0540962D03* +X0289282Y0542354D03* +G54D140* +X0252591Y0430117D03* +X0247591D03* +X0242591D03* +X0237591D03* +X0252591Y0411613D03* +X0247591D03* +X0242591D03* +X0237591D03* +X0322491Y0366817D03* +X0317491D03* +X0312491D03* +X0307491D03* +X0322491Y0348313D03* +X0317491D03* +X0312491D03* +G54D141* +X0174626Y0338265D03* +X0336889Y0487165D03* +X0600984Y0395295D03* +G54D142* +X0174626Y0333265D03* +Y0328265D03* +Y0323265D03* +X019313Y0338265D03* +Y0333265D03* +Y0328265D03* +Y0323265D03* +X0336889Y0482165D03* +Y0477165D03* +Y0472165D03* +X0355393Y0487165D03* +Y0482165D03* +Y0477165D03* +Y0472165D03* +X0327543Y0322965D03* +Y0327965D03* +Y0332965D03* +Y0337965D03* +X0309039Y0322965D03* +Y0327965D03* +Y0332965D03* +Y0337965D03* +X0619488Y0380295D03* +Y0385295D03* +Y0390295D03* +Y0395295D03* +X0600984Y0380295D03* +Y0385295D03* +Y0390295D03* +X0458271Y0403047D03* +Y0408047D03* +Y0413047D03* +Y0418047D03* +X0439767Y0403047D03* +Y0408047D03* +Y0413047D03* +Y0418047D03* +G54D143* +X0183214Y0366645D03* +X0185773D03* +X0188332D03* +X0190891D03* +X019345D03* +X0196009D03* +X0198568D03* +X0183214Y0389086D03* +X0185773D03* +X0188332D03* +X0190891D03* +X019345D03* +X0196009D03* +X0198568D03* +G54D144* +X0189857Y0344803D03* +X0186117Y0353071D03* +X0193597D03* +X023909Y0320993D03* +X024283Y0312725D03* +X023535D03* +X0238991Y0342332D03* +X0235251Y0350599D03* +X0242731D03* +X0222991Y0342332D03* +X0219251Y0350599D03* +X0226731D03* +X0165591Y0565332D03* +X0161851Y0573599D03* +X0169332D03* +X0363189Y0321555D03* +X0355709D03* +X0359449Y0313287D03* +X0216893Y0539173D03* +X0220633Y0530905D03* +X0213153D03* +X0225394Y0306496D03* +X0229134Y0298228D03* +X0221654D03* +X023937Y0306496D03* +X024311Y0298228D03* +X023563D03* +X017223Y049142D03* +X017971D03* +X017597Y0499687D03* +X0611811Y0431989D03* +X0604331D03* +X0608071Y0423721D03* +X0466272Y0326598D03* +X0462532Y0334866D03* +X0470012D03* +X0608071Y0456496D03* +X0604331Y0464764D03* +X0611811D03* +G54D145* +X0222244Y0316757D03* +X0213976Y0313017D03* +Y0320498D03* +X0253525Y0375765D03* +X0245257Y0372025D03* +Y0379505D03* +X0253525Y0389565D03* +X0245257Y0385825D03* +Y0393305D03* +X0246986Y0464505D03* +Y0457025D03* +X0255254Y0460765D03* +X0371225Y0399765D03* +X0362958Y0396025D03* +Y0403506D03* +Y0304628D03* +X0371225Y0308368D03* +Y0300887D03* +X0256958Y0368565D03* +X0265225Y0372305D03* +Y0364825D03* +X0158984Y0481008D03* +X0167252Y0484748D03* +Y0477268D03* +X0589567Y0441536D03* +Y0434056D03* +X0597835Y0437796D03* +X0542795Y0454623D03* +X0534527Y0450883D03* +Y0458363D03* +X0589567Y0474312D03* +Y0466831D03* +X0597835Y0470571D03* +X0582873Y0410532D03* +X0591141Y0414272D03* +Y0406791D03* +G54D146* +X0261964Y0321191D03* +X0271019D03* +G54D147* +X0266491Y0336939D03* +G54D148* +X0308971Y028775D03* +Y0290309D03* +Y0292868D03* +Y0295427D03* +X0331412Y0308222D03* +Y0310781D03* +X0308971D03* +Y0308222D03* +Y0305663D03* +Y0303104D03* +Y0300545D03* +Y0297986D03* +X0331412Y0305663D03* +Y0303104D03* +Y0300545D03* +Y0297986D03* +Y0295427D03* +Y0292868D03* +Y0290309D03* +Y028775D03* +G54D149* +X0302491Y0512925D03* +X0297491D03* +X0292491D03* +X0287491D03* +X0282491D03* +X0277491D03* +X0272491D03* +X0267491D03* +X0302491Y0494028D03* +X0297491D03* +X0292491D03* +X0287491D03* +X0282491D03* +X0277491D03* +X0272491D03* +X0267491D03* +X0523484Y0312992D03* +X0528484D03* +X0533484D03* +X0538484D03* +X0543484D03* +X0548484D03* +X0553484D03* +X0523484Y033189D03* +X0528484D03* +X0533484D03* +X0538484D03* +X0543484D03* +X0548484D03* +X0553484D03* +G54D150* +X0307491Y0348313D03* +G54D151* +X0371027Y0560703D03* +Y0574679D03* +X060748Y0401476D03* +Y0415453D03* +X0590354Y0401083D03* +Y0387106D03* +X0598917Y0401476D03* +Y0415453D03* +G54D152* +X0341036Y0545821D03* +X0335747Y055111D03* +G54D153* +X0280791Y0477989D03* +Y0484761D03* +X0288591Y0477989D03* +Y0484761D03* +X0272991Y0477989D03* +Y0484761D03* +X0265218Y0477955D03* +Y0484727D03* +X0296351Y0477989D03* +Y0484761D03* +X0304091Y0477989D03* +Y0484761D03* +X0311891Y0477989D03* +Y0484761D03* +X04169Y0430806D03* +Y0424035D03* +G54D154* +X0239765Y0284365D03* +X0211418D03* +X0182973Y0515551D03* +X0211319D03* +G54D155* +X0342973Y0465499D03* +Y046294D03* +Y0460381D03* +Y0457822D03* +X0359509Y0465499D03* +Y046294D03* +Y0460381D03* +Y0457822D03* +G54D156* +X0158091Y0426261D03* +X0163091D03* +X0168091D03* +X0173091D03* +X0178091D03* +X0183091D03* +X0188091D03* +X0193091D03* +X0158091Y0463269D03* +X0163091D03* +X0168091D03* +X0173091D03* +X0178091D03* +X0183091D03* +X0188091D03* +X0193091D03* +G54D157* +X0160991Y0379165D03* +Y0403165D03* +G54D158* +X0294707Y0504765D03* +Y0502165D03* +X0289506D03* +Y0504765D03* +X0273901D03* +Y0502165D03* +X0279102D03* +Y0504765D03* +X0284304D03* +Y0502165D03* +X03Y0502243D03* +Y0504843D03* +G54D159* +X054439Y0482283D03* +X0530413D03* +X062687Y044754D03* +X0612894D03* +X053045Y0473735D03* +X0544426D03* +X0520472Y0437402D03* +X0506496D03* +X0604725Y047254D03* +X0618701D03* +X0604724Y0439764D03* +X0618701D03* +X0626083Y0480119D03* +X0612106D03* +G54D160* +X0653543Y0351279D03* +Y0379921D03* +X0673228Y0409055D03* +Y0438976D03* +G54D161* +X0628937Y0342303D03* +Y0360256D03* +Y0370945D03* +Y0388898D03* +X0648622Y0418032D03* +Y0400079D03* +Y0447953D03* +Y043D03* +G54D162* +X0584202Y0367421D03* +Y0343209D03* +G54D163* +X0604862Y0367421D03* +Y0343209D03* +G54D164* +X0658465Y0318898D03* +X0642323D03* +X0501883Y0448269D03* +X0518024D03* +X0541535Y0430709D03* +X0557677D03* +Y0418307D03* +X0541535D03* +G54D165* +X0481345Y039042D03* +X0493156D03* +G54D166* +X048725Y0389094D03* +G54D167* +X048725Y0379495D03* +G54D168* +X0453669Y0345696D03* +Y0368893D03* +G54D169* +X0533268Y046496D03* +X0544685D03* +X0648917Y0461122D03* +X0660335D03* +X0614961Y0409646D03* +X0626378D03* +G54D170* +X0443572Y0455394D03* +X0482941D03* +G54D171* +X0513681Y0403805D03* +G54D172* +X0522736Y0427716D03* +X0513681D03* +X0504626D03* +G54D173* +X049929Y0461357D03* +Y0479073D03* +G54D174* +X0503498Y0562063D03* +Y0572063D03* +Y0552063D03* +Y0542063D03* +X0421798Y0542463D03* +Y0552463D03* +Y0572463D03* +Y0562463D03* +X0210191Y0577165D03* +X0220191D03* +X0230191D03* +X0240191D03* +X0356891Y0376565D03* +X0366891Y0366565D03* +X0356891D03* +X0366891Y0356565D03* +X0356891D03* +X0366891Y0346565D03* +X0356891D03* +X0366891Y0336565D03* +X0356891D03* +X0307891Y0468265D03* +X0297891D03* +X0287891D03* +X0277891D03* +X0267891D03* +X0307891Y0448265D03* +X0297891D03* +X0287891D03* +X0277891D03* +X0267891D03* +Y0417165D03* +X0277891D03* +X0287891D03* +X0297891D03* +X0307891D03* +X0267891Y0437165D03* +X0277891D03* +X0287891D03* +X0297891D03* +X0307891D03* +Y0406065D03* +X0297891D03* +X0287891D03* +X0277891D03* +X0267891D03* +X0307891Y0386065D03* +X0297891D03* +X0287891D03* +X0277891D03* +X0267891D03* +X0559272Y0294744D03* +Y0284744D03* +X0549272Y0294744D03* +Y0284744D03* +X0539272Y0294744D03* +Y0284744D03* +X0529272Y0294744D03* +Y0284744D03* +X0519272Y0294744D03* +G54D175* +X0503498Y0532063D03* +X0421798Y0532463D03* +X0517851Y0461417D03* +G54D176* +X0145276Y0430315D03* +X0136614Y0433465D03* +X0145276Y0424016D03* +X0136614Y0420866D03* +Y0427165D03* +G54D177* +X0140945Y0410827D03* +Y0443504D03* +G54D178* +X0194291Y0302665D03* +Y0551665D03* +G54D179* +X0369291Y0427165D03* +G54D180* +X0187197Y049969D03* +G54D181* +X0169102Y0517785D03* +G54D182* +X0200191Y0577165D03* +X0519272Y0284744D03* +G54D183* +X0253465Y0287098D03* +X0275118D03* +Y0303633D03* +X0253465D03* +X0626968Y0595472D03* +X0648622D03* +X0405673Y0344727D03* +X0427327D03* +Y0361262D03* +X0405673D03* +X0598425Y0595472D03* +X0576772D03* +G54D184* +X0366891Y0376565D03* +G54D185* +X0208033Y046787D03* +X022575D03* +Y0493461D03* +X0208033D03* +Y041437D03* +X022575D03* +Y0439961D03* +X0208033D03* +Y036087D03* +X022575D03* +Y0386461D03* +X0208033D03* +G54D186* +X024249Y0489814D03* +Y0509027D03* +G54D187* +X0560335Y0392027D03* +X042276Y0387435D03* +X0538287Y0358268D03* +X0479331Y0349803D03* +G54D188* +X054065Y0392027D03* +X0518602Y0358268D03* +X0499016Y0349803D03* +G54D189* +X0606063Y0285138D03* +G54D190* +X0596063Y0285138D03* +X0586063D03* +X0486Y0297094D03* +X0481Y0287094D03* +X0476Y0297094D03* +X0471Y0287094D03* +X0466Y0297094D03* +X0461Y0287094D03* +G54D191* +X0549902Y0508382D03* +X0597244Y0575083D03* +X0573622D03* +X0644488Y0501D03* +X0620866Y0501098D03* +G54D192* +X0549902Y0582555D03* +X0597244Y0500909D03* +X0573622D03* +X0644488Y0575173D03* +X0620866Y0575272D03* +G54D193* +X0517851Y0469291D03* +G54D194* +X0411417Y0287402D03* +Y0470472D03* +X0675197Y059252D03* +Y0287402D03* +G54D195* +X040884Y0401354D03* +G54D196* +X0677165Y0507146D03* +Y0480531D03* +Y0565728D03* +Y0539114D03* +G54D197* +X0625591Y0281496D03* +Y030315D03* +X0642126D03* +Y0281496D03* +M02* \ No newline at end of file diff --git a/hardware/gerber/unisolder52_full.txt b/hardware/gerber/unisolder52_full.txt new file mode 100644 index 0000000..fcd8978 --- /dev/null +++ b/hardware/gerber/unisolder52_full.txt @@ -0,0 +1,751 @@ +%FSTAX25Y25*% +%MOIN*% +%SFA1B1*% + +%IPPOS*% +%ADD9500C,0.027990*% +%ADD9501C,0.031500*% +%ADD9502C,0.035430*% +%ADD9503C,0.039370*% +%ADD9504C,0.043310*% +%ADD9505C,0.047240*% +%ADD9506C,0.055120*% +%ADD9507C,0.066930*% +%ADD9508C,0.068900*% +%ADD9509C,0.090550*% +%ADD9510C,0.098430*% +%ADD9511C,0.125200*% +%ADD9512C,0.137800*% +%ADD9513C,0.145670*% +%LNunisolder52_full-1*% +%LPD*% +G54D9500* +X0136614Y0420866D03* +Y0427165D03* +Y0433465D03* +X0145276Y0430315D03* +Y0424016D03* +X0490256Y0275098D03* +X0490748Y0287894D03* +X0504528Y0288484D03* +X050689Y0299213D03* +X0495374Y0298524D03* +X0517913Y0302559D03* +X0525886Y0300886D03* +X0524311Y0290551D03* +X053435Y0289665D03* +X0535138Y0305315D03* +X054124Y0304429D03* +X0547244Y0305315D03* +X0558957Y0311516D03* +X0555118Y0289665D03* +X0544291Y0280413D03* +X0523228Y0275787D03* +X0576575Y028061D03* +X0576772Y0289862D03* +X0600394Y0291929D03* +X0607382Y0275787D03* +X0588583Y0308071D03* +X0453051Y029065D03* +X0452461Y0274902D03* +X0430315D03* +X04384Y0299095D03* +X0365256Y03D03* +X0364567Y0309449D03* +X0347091Y0312265D03* +X0343891Y0302165D03* +Y0296265D03* +X0345391Y0285465D03* +X0339491Y0286165D03* +X0332591Y0281465D03* +X0323591Y0291765D03* +X0317591D03* +X0322491Y0300965D03* +X0324291Y0309265D03* +X0315491Y0305565D03* +X0352559Y0285138D03* +X0369882Y0282382D03* +X0368012Y0292028D03* +X0302691Y0285465D03* +X0302191Y0301365D03* +Y0307765D03* +X0282087Y0310236D03* +X0269191Y0310065D03* +X0269591Y0296665D03* +X0264191Y0286565D03* +X0265091Y0276065D03* +X0249691Y0279665D03* +X0239401Y0293265D03* +X0228791Y0284465D03* +X0223091Y0274665D03* +X0198891Y0277065D03* +X0187205Y0284252D03* +X0158366Y0286122D03* +X015876Y0309055D03* +X0212303Y0308071D03* +X0212795Y0293898D03* +X0286591Y0284765D03* +X0150984Y0404035D03* +X0153391Y0423965D03* +X0155807Y0437992D03* +X0131004Y0436417D03* +Y0418012D03* +X0165591Y0419665D03* +Y0414265D03* +X0171391Y0402865D03* +X0176476Y0386811D03* +X0181591Y0381065D03* +X0189991Y0376965D03* +X0203391Y0379765D03* +X0214091Y0381065D03* +X021437Y0390846D03* +X0197191Y0395665D03* +X0189191Y0395765D03* +X0200791Y0400365D03* +X0202891Y0407065D03* +X0206004Y0423228D03* +Y0432087D03* +X0215391Y0433565D03* +X0215491Y0420865D03* +X0240091Y0421265D03* +X0249691Y0423965D03* +X0254091Y0419065D03* +X0257283Y043061D03* +X0250491Y0436265D03* +X0251969Y0443405D03* +X0246555Y0451575D03* +X0254791Y0456365D03* +X0257091Y0466065D03* +X0272791Y0462965D03* +X0272891Y0431865D03* +X0268591Y0396565D03* +X0259055Y0394291D03* +X0252591Y0394465D03* +X0246491Y0398665D03* +X023189Y0397933D03* +Y0409154D03* +X0232291Y0432365D03* +X0232191Y0451465D03* +X0236891Y0465565D03* +X0201083Y0447835D03* +X0184191Y0452265D03* +X0166091Y0452565D03* +X0166634Y0434055D03* +X0161713Y0387795D03* +X0158366Y0370866D03* +X0172933Y0364961D03* +X0179091Y0364765D03* +X0181102Y0351772D03* +X0167618Y0351476D03* +X0156595Y0349311D03* +Y0329035D03* +X0165847Y0326772D03* +X0181557Y0330465D03* +X0181678Y0338365D03* +X0186127Y0334442D03* +X0180591Y0315965D03* +X0199803Y0320472D03* +X0211024Y0327559D03* +X0222244Y0321555D03* +X0234485Y0318894D03* +X0243699Y0320861D03* +X0252953Y0322638D03* +X026624Y032874D03* +X0274705Y0338091D03* +X0258661Y033937D03* +X0267618Y0353937D03* +X0258591Y0363365D03* +X0257491Y0379465D03* +X0265191Y0377165D03* +X0276772Y0364075D03* +X0287402Y0365748D03* +X0297391Y0368665D03* +X0303291Y0368365D03* +X0309991Y0373265D03* +X0310291Y0392465D03* +X0300891Y0391665D03* +X0290891D03* +X0281591Y0391365D03* +X028563Y0349508D03* +X0291891Y0325465D03* +X0302091Y0325765D03* +X0279921Y0322638D03* +X0248819Y035315D03* +X0239862Y0357874D03* +X0233071Y0368602D03* +X0232579Y0380906D03* +X0219691Y0365365D03* +X0203591Y0367165D03* +X0213878Y0345571D03* +X0227648Y0344935D03* +X0315591Y0337065D03* +X0322591Y0341565D03* +X0327191Y0347965D03* +X0341437Y0342618D03* +X0342091Y0352765D03* +Y0358665D03* +X0341691Y0364865D03* +X0333491Y0373565D03* +X0327391Y0373465D03* +X0318691Y0386665D03* +X0325391Y0398965D03* +X0340591Y0399209D03* +Y0404565D03* +X0334691Y0407765D03* +X0331391Y0413065D03* +X0331371Y0432677D03* +X0332677Y0445768D03* +X0331891Y0454165D03* +X0333991Y0459765D03* +X0332591Y0467765D03* +X0351083Y0459154D03* +X0369091Y0452765D03* +X0377591Y0443265D03* +X0399606Y0450787D03* +X0401575Y0435039D03* +X03986Y0418894D03* +Y0398294D03* +X0398524Y0377657D03* +X0377658Y0374902D03* +X0370472Y0383169D03* +X0369391Y0404565D03* +X0377591Y0411665D03* +X0349891Y0407465D03* +X0355691Y0397465D03* +X0346291Y0393265D03* +X0348291Y0386665D03* +X0361891Y0360565D03* +Y0352565D03* +X0353642Y0331004D03* +X0343491Y0320065D03* +X0337598Y0321161D03* +X0322891Y0317765D03* +X0320991Y0330265D03* +X0313791Y0358265D03* +X0364075Y0315551D03* +X0377461Y0328543D03* +X0404Y0331494D03* +X0401575Y0312992D03* +X0418602Y031811D03* +X0430512Y0336417D03* +X04515Y0333794D03* +X0467815Y0317027D03* +X0457283Y0378543D03* +X0442Y0379095D03* +X0431791Y0376772D03* +X0433071Y0393701D03* +X0432185Y0407874D03* +X04327Y0414854D03* +X0422342Y0413484D03* +X04178Y0402394D03* +X0449122Y040268D03* +X0449022Y040948D03* +Y041618D03* +X044872Y0431693D03* +X0456693D03* +X0464567Y0431102D03* +X0452953Y0442126D03* +X0462598Y0452756D03* +X0454035Y0462992D03* +X0433071Y0462598D03* +X043248Y044498D03* +X0423228Y0452756D03* +X0413386Y0442913D03* +X0439272Y0422933D03* +X0447703Y0396465D03* +X0454303D03* +X0460803D03* +X0417323Y036998D03* +X0339391Y0439965D03* +X0472441Y0442913D03* +Y0462598D03* +X0493209Y0453051D03* +X0490059Y0436122D03* +X0492618Y0426181D03* +X0484449Y0420669D03* +X0484154Y0400492D03* +X0480217Y0396752D03* +X0476378Y0400787D03* +X0492126Y0400591D03* +X0488287Y0396654D03* +X0479626Y0382283D03* +X0471654Y0375689D03* +X0481988Y0369094D03* +X0492126Y0369291D03* +X0474213Y035935D03* +X0488091Y0344488D03* +X04787Y0334295D03* +X04806Y0323195D03* +X0499016Y0334744D03* +X0509842Y0338287D03* +X0520768Y0340453D03* +X0516732Y0350295D03* +X0506398Y0353051D03* +X0525787Y0358957D03* +X0528543Y0349016D03* +X0540158Y0343307D03* +X0551083Y0353445D03* +X054855Y0359269D03* +X0559252Y0364173D03* +X0557874Y0378838D03* +X0562303D03* +X0575098Y0386516D03* +X0582874Y0386024D03* +X0592224Y0393701D03* +X0608464Y0395079D03* +X0607283Y0408957D03* +X0598917Y040876D03* +X058061Y0415256D03* +X058376Y0422047D03* +X0575422Y0435553D03* +X0575Y0447835D03* +X0565846Y0443504D03* +X0567913Y0458661D03* +X0578839Y045935D03* +X0583858Y0454134D03* +X054872Y0456594D03* +X0526968Y0460335D03* +X0526772Y0450394D03* +X0533071Y0434252D03* +X054872Y0425098D03* +X0566142Y0417717D03* +X0559842Y0402362D03* +X0577362Y0372342D03* +X0577461Y0357874D03* +X0587598Y0355315D03* +X0593504D03* +X0599409D03* +X0605315D03* +X061122D03* +X0610236Y0379921D03* +X0608268Y0330709D03* +X0614173D03* +X0620079D03* +X0618996Y0325098D03* +X0613091Y0325197D03* +X0615748Y0320079D03* +X0596457Y0320866D03* +X0590551D03* +X0584646D03* +X0581693Y0325787D03* +X0587598D03* +X0593504D03* +X0599409D03* +X0602362Y0330709D03* +X0596457D03* +X0590551D03* +X0584646D03* +X0574016Y0342323D03* +X0561909Y034124D03* +X0539764Y0320276D03* +X0531102Y0324311D03* +X0524016Y0323721D03* +X0508071Y0312795D03* +X0511417Y0458169D03* +X0611024Y0440256D03* +X0619587Y0447638D03* +X0626378Y0457678D03* +Y0425D03* +X0626279Y0416831D03* +X063061Y0395177D03* +X0641732Y0393701D03* +X0647638D03* +X0653543D03* +X0659449D03* +X0665354D03* +Y0366142D03* +X0659449D03* +X0653543D03* +X0647638D03* +X0641732D03* +X0634449Y0380807D03* +X0626968Y0379921D03* +X0628937Y0354331D03* +X0625984Y0330709D03* +X0648622Y0412401D03* +X0661417Y0425197D03* +X0667323D03* +X0673228D03* +X0679134D03* +X0685039D03* +Y0452756D03* +X0679134D03* +X0673228D03* +X0667323D03* +X0661417D03* +X0669291Y046063D03* +X0677165D03* +Y0468504D03* +X0669291D03* +X0685532Y0468405D03* +X0685039Y046063D03* +X0648622Y0442913D03* +X0625Y0487205D03* +X0629921Y0535433D03* +X0645669D03* +Y0551181D03* +X0637795Y0543307D03* +X0653543D03* +X0661417Y0551181D03* +Y0566929D03* +X0653543Y0559055D03* +X0629921Y0551181D03* +X0637795Y0604331D03* +X0656496D03* +X0683071Y0524606D03* +X0614173Y0535433D03* +X0598425D03* +X0582677D03* +Y0551181D03* +X0590551Y0543307D03* +X0598425Y0551181D03* +X0606299Y0543307D03* +X0622047D03* +X0614173Y0551181D03* +X0574803Y0543307D03* +Y0559055D03* +X0559055D03* +X0564173Y0565748D03* +X0559055Y0574803D03* +Y0590551D03* +X0566535Y0598032D03* +X0559055Y0605512D03* +X0551181Y0598425D03* +X0543307Y0605512D03* +X053622Y0598425D03* +X0543307Y0590551D03* +X053622Y0582677D03* +X0543307Y0574803D03* +X053622Y0566929D03* +X0543307Y0559055D03* +X053622Y0551181D03* +X0543307Y0543307D03* +X053622Y0535433D03* +X0543307Y0527559D03* +X053622Y0519685D03* +X0536614Y0504429D03* +X0534941Y0489665D03* +X0548032Y0489862D03* +X0565945Y0488189D03* +X0567913Y0474409D03* +X0537795Y0473622D03* +X052185Y048376D03* +X0509142Y0504463D03* +X0507087Y051122D03* +X0506988Y0518504D03* +X0515158Y0532382D03* +X0495866Y0538878D03* +X0496555Y0549311D03* +X0480709Y0548327D03* +X0480807Y0535138D03* +X0470768Y0529232D03* +X0479134Y0504528D03* +X048879Y0504572D03* +X0489961Y0482185D03* +X0482283Y0472441D03* +X0499213Y0470177D03* +X0472441Y0482283D03* +X0471358Y0563681D03* +Y0576279D03* +X0484842Y0582972D03* +X0500689Y0582874D03* +X0513398Y0567363D03* +X0513583Y0557382D03* +X048688Y0562361D03* +X0551181Y0566929D03* +Y0551181D03* +Y0535433D03* +X0566929D03* +Y0551181D03* +X0559055Y0543307D03* +X058563Y0503937D03* +Y0488189D03* +X0606398Y0487205D03* +X0611417Y0473032D03* +X0584842Y0587008D03* +X0590551Y0605512D03* +X0574803D03* +X046063Y0582972D03* +X0459252Y0566831D03* +X0461122Y0554528D03* +X0446162Y0557972D03* +X0445768Y0550984D03* +X0445177Y0565945D03* +X0434941Y0561713D03* +X0432098Y0573763D03* +X0441898Y0582063D03* +X0421798Y0581863D03* +X0412298Y0567163D03* +X0412402Y0546358D03* +X0428151Y0543578D03* +X0435335Y0541142D03* +X0443996Y052313D03* +X0453051Y0529626D03* +X046122Y052313D03* +X0459842Y0504429D03* +X0448228D03* +X0436417D03* +X0413998Y0505563D03* +X0418198Y0513763D03* +X0422441Y0523327D03* +X0433071Y0482283D03* +X0452756D03* +X0462598Y0472441D03* +X0442913D03* +X0364567Y0468898D03* +X0361991Y0474665D03* +X0346891Y0478665D03* +X0343602Y0469882D03* +X0344091Y0488065D03* +X0335728Y0501673D03* +X0335096Y0507561D03* +X0327891Y0513665D03* +X0327991Y0519565D03* +X0320191Y0517065D03* +Y0527365D03* +X032668Y0538846D03* +X0333491Y0544265D03* +X0344291Y0540565D03* +X0341339Y0524902D03* +X0356201Y0525295D03* +X0354433Y0519591D03* +X0364591Y0523965D03* +X0364469Y0535532D03* +X0373228Y0532972D03* +X0377791Y0545865D03* +X0360891Y0544839D03* +X0356191Y0557465D03* +X0373524Y0568209D03* +X0347491Y0580165D03* +X0332891Y0572665D03* +X0318791Y0566865D03* +X0312991Y0571665D03* +X0322391Y0554565D03* +X0315091Y0544865D03* +X0319891Y0504165D03* +X0348425Y050935D03* +X0364567Y0491732D03* +X0301891Y0520865D03* +Y0532565D03* +X0293091Y0544165D03* +X0279191Y0552565D03* +X0274191Y0555965D03* +X0273091Y0546565D03* +X0272191Y0537965D03* +X0265391Y0540465D03* +X0263791Y0530765D03* +X0263491Y0519565D03* +X0268791Y0503465D03* +X0250791Y0504865D03* +X0231491Y0503365D03* +X0235591Y0514365D03* +X0222891Y0514065D03* +X0225491Y0519665D03* +X0215665Y0524213D03* +X0208465Y0535138D03* +X0221591Y0536565D03* +X0229491Y0538365D03* +X0230472Y0558178D03* +X0224791Y0554665D03* +X0220891Y0563065D03* +X0210091Y0562965D03* +X0227791Y0570865D03* +X0242249Y0567965D03* +X0256891Y0562065D03* +X0252491Y0555065D03* +X0248891Y0550365D03* +X0242391Y0547365D03* +X0256691Y0547665D03* +X0261591Y0554765D03* +X0269291Y0562465D03* +X0263391Y0574065D03* +X0272991Y0579565D03* +X0300991Y0567465D03* +X0254091Y0536065D03* +X0252391Y0473665D03* +X0232291Y0471365D03* +X0235991Y0483765D03* +X0219691Y0485465D03* +X0212191Y0477965D03* +X0202091Y0487565D03* +X0190891Y0491065D03* +X0189191Y0477065D03* +X0199391Y0470365D03* +X0198691Y0499965D03* +X0208691Y0503065D03* +X0201476Y051565D03* +X0193799Y0515945D03* +X0195191Y0529865D03* +X0182091Y0527965D03* +X0180391Y0539065D03* +X0175491Y0534665D03* +X0169891Y0530065D03* +X0170591Y0548165D03* +X0158071Y0543799D03* +X0157776Y0520472D03* +X0157382Y0497638D03* +X0167126Y0494095D03* +X0171544Y0500787D03* +X0169407Y0472665D03* +X0156891Y0474265D03* +X0156988Y0569291D03* +X0173891Y0569265D03* +X0184191Y0568065D03* +X0182991Y0575565D03* +X0191691Y0577165D03* +X0165791Y0579665D03* +G54D9501* +X024249Y0489814D03* +Y0509027D03* +G54D9502* +X0519272Y0284744D03* +X0529272D03* +X0539272D03* +X0549272D03* +X0559272D03* +Y0294744D03* +X0549272D03* +X0539272D03* +X0529272D03* +X0519272D03* +X0307891Y0386065D03* +X0297891D03* +X0287891D03* +X0277891D03* +X0267891D03* +Y0406065D03* +X0277891D03* +X0287891D03* +X0297891D03* +X0307891D03* +Y0417165D03* +X0297891D03* +X0287891D03* +X0277891D03* +X0267891D03* +Y0437165D03* +X0277891D03* +X0287891D03* +X0297891D03* +X0307891D03* +Y0448265D03* +X0297891D03* +X0287891D03* +X0277891D03* +X0267891D03* +Y0468265D03* +X0277891D03* +X0287891D03* +X0297891D03* +X0307891D03* +X0356891Y0376565D03* +X0366891D03* +Y0366565D03* +X0356891D03* +Y0356565D03* +X0366891D03* +Y0346565D03* +X0356891D03* +Y0336565D03* +X0366891D03* +X0517851Y0461417D03* +Y0469291D03* +X0503498Y0532063D03* +Y0542063D03* +Y0552063D03* +Y0562063D03* +Y0572063D03* +X0421798Y0572463D03* +Y0562463D03* +Y0552463D03* +Y0542463D03* +Y0532463D03* +X0240191Y0577165D03* +X0230191D03* +X0220191D03* +X0210191D03* +X0200191D03* +X0187197Y049969D03* +X0169102Y0517785D03* +G54D9503* +X0208033Y036087D03* +X022575D03* +Y0386461D03* +X0208033D03* +Y041437D03* +X022575D03* +Y0439961D03* +X0208033D03* +Y046787D03* +X022575D03* +Y0493461D03* +X0208033D03* +G54D9504* +X040884Y0401354D03* +X042276Y0387435D03* +X0479331Y0349803D03* +X0499016D03* +X0518602Y0358268D03* +X0538287D03* +X054065Y0392027D03* +X0560335D03* +G54D9505* +X0471Y0287094D03* +X0481D03* +X0486Y0297094D03* +X0476D03* +X0586063Y0285138D03* +X0596063D03* +X0606063D03* +X0461Y0287094D03* +X0466Y0297094D03* +G54D9506* +X0625591Y0281496D03* +X0642126D03* +Y030315D03* +X0625591D03* +X0275118Y0303633D03* +Y0287098D03* +X0253465D03* +Y0303633D03* +X0405673Y0344727D03* +Y0361262D03* +X0427327D03* +Y0344727D03* +X0626968Y0595472D03* +X0648622D03* +X0598425D03* +X0576772D03* +G54D9507* +X0644488Y0501D03* +Y0575173D03* +X0620866Y0575272D03* +X0597244Y0575083D03* +X0573622D03* +X0549902Y0582555D03* +Y0508382D03* +X0573622Y0500909D03* +X0597244D03* +X0620866Y0501098D03* +G54D9508* +X0677165Y0507146D03* +Y0539114D03* +G54D9509* +X0140945Y0410827D03* +Y0443504D03* +G54D9510* +X0677165Y0480531D03* +Y0565728D03* +G54D9511* +X04535Y0322094D03* +X04935D03* +G54D9512* +X0194291Y0302665D03* +X0369291Y0427165D03* +X0194291Y0551665D03* +G54D9513* +X0675197Y0287402D03* +X0411417D03* +X0675197Y059252D03* +X0411417Y0470472D03* +M02* \ No newline at end of file diff --git a/hardware/gerber/unisolder52_oled.gbl b/hardware/gerber/unisolder52_oled.gbl new file mode 100644 index 0000000..0f46647 --- /dev/null +++ b/hardware/gerber/unisolder52_oled.gbl @@ -0,0 +1,397 @@ +%FSTAX26Y26*% +%MOIN*% +%SFA1B1*% + +%IPPOS*% +%ADD17C,0.050000*% +%ADD21C,0.059060*% +%ADD22R,0.059060X0.059060*% +%ADD23C,0.050000*% +%LNunisolder52_oled-1*% +%LPD*% +G36* +X0055118Y0032283D02* +Y-0037008D01* +X0050424Y-0041702* +X0049955Y-0041464* +X0049856Y-0040712* +X0049514Y-0039885* +X0048969Y-0039175* +X0048259Y-003863* +X0047431Y-0038287* +X0046544Y-0038171* +X002772* +X0016625Y-0027075* +X0015915Y-002653* +X0015088Y-0026188* +X00142Y-0026071* +X-002348* +X-0036947Y-0012603* +Y-0009747* +X-0044653* +Y-0017453* +X-0041797* +X-0027325Y-0031925* +X-0026615Y-003247* +X-0025788Y-0032812* +X-00249Y-0032929* +X0012779* +X0023445Y-0043595* +X0023238Y-0044094* +X-0048425* +X-0055118Y-0037402* +Y0032283* +X-0048031Y003937* +X0048031* +X0055118Y0032283* +G37* +%LNunisolder52_oled-2*% +%LPC*% +G36* +X-0037013Y-000435D02* +X-004005D01* +Y-0007387* +X-0039794Y-0007354* +X-0038857Y-0006965* +X-0038052Y-0006348* +X-0037435Y-0005543* +X-0037046Y-0004606* +X-0037013Y-000435* +G37* +G36* +X-004155Y0000187D02* +X-0041806Y0000154D01* +X-0042743Y-0000235* +X-0043548Y-0000852* +X-0044165Y-0001657* +X-0044554Y-0002594* +X-0044587Y-000285* +X-004155* +Y0000187* +G37* +G36* +X-004005D02* +Y-000285D01* +X-0037013* +X-0037046Y-0002594* +X-0037435Y-0001657* +X-0038052Y-0000852* +X-0038857Y-0000235* +X-0039794Y0000154* +X-004005Y0000187* +G37* +G36* +X0044753Y-0010147D02* +X0037047D01* +Y-0017853* +X0044753* +Y-0010147* +G37* +G36* +X00409Y-0000114D02* +X0039894Y-0000246D01* +X0038957Y-0000635* +X0038152Y-0001252* +X0037535Y-0002057* +X0037146Y-0002994* +X0037014Y-0004* +X0037146Y-0005006* +X0037535Y-0005943* +X0038152Y-0006748* +X0038957Y-0007365* +X0039894Y-0007754* +X00409Y-0007886* +X0041906Y-0007754* +X0042843Y-0007365* +X0043648Y-0006748* +X0044265Y-0005943* +X0044654Y-0005006* +X0044786Y-0004* +X0044654Y-0002994* +X0044265Y-0002057* +X0043648Y-0001252* +X0042843Y-0000635* +X0041906Y-0000246* +X00409Y-0000114* +G37* +G36* +X-004155Y-000435D02* +X-0044587D01* +X-0044554Y-0004606* +X-0044165Y-0005543* +X-0043548Y-0006348* +X-0042743Y-0006965* +X-0041806Y-0007354* +X-004155Y-0007387* +Y-000435* +G37* +G36* +X-001811Y0015339D02* +X-001854Y0015282D01* +X-0018898Y0015329* +X-0022647* +X-0023535Y0015213* +X-0024362Y001487* +X-0025072Y0014325* +X-0035004Y0004393* +X-0035549Y0003683* +X-0035891Y0002856* +X-0036008Y0001969* +X-0035891Y0001081* +X-0035549Y0000254* +X-0035004Y-0000456* +X-0034293Y-0001001* +X-0033466Y-0001344* +X-0032579Y-0001461* +X-0031691Y-0001344* +X-0030864Y-0001001* +X-0030154Y-0000456* +X-0021227Y0008471* +X-0018898* +X-0018468Y0008527* +X-001811Y000848* +X-0017223Y0008597* +X-0016396Y000894* +X-0015685Y0009484* +X-001514Y0010195* +X-0014798Y0011022* +X-0014681Y0011909* +X-0014798Y0012797* +X-001514Y0013624* +X-0015685Y0014334* +X-0016396Y0014879* +X-0017223Y0015222* +X-001811Y0015339* +G37* +G36* +X00409Y0029886D02* +X0039894Y0029754D01* +X0038957Y0029365* +X0038152Y0028748* +X0037535Y0027943* +X0037146Y0027006* +X0037014Y0026* +X0037146Y0024994* +X0037535Y0024057* +X0038152Y0023252* +X0038957Y0022635* +X0039894Y0022246* +X00409Y0022114* +X0041906Y0022246* +X0042843Y0022635* +X0043648Y0023252* +X0044265Y0024057* +X0044654Y0024994* +X0044786Y0026* +X0044654Y0027006* +X0044265Y0027943* +X0043648Y0028748* +X0042843Y0029365* +X0041906Y0029754* +X00409Y0029886* +G37* +G36* +X-00408Y0030286D02* +X-0041806Y0030154D01* +X-0042743Y0029765* +X-0043548Y0029148* +X-0044165Y0028343* +X-0044554Y0027406* +X-0044686Y00264* +X-0044554Y0025394* +X-0044165Y0024457* +X-0043548Y0023652* +X-0042743Y0023035* +X-0041806Y0022646* +X-00408Y0022514* +X-0039794Y0022646* +X-0038857Y0023035* +X-0038052Y0023652* +X-0037435Y0024457* +X-0037046Y0025394* +X-0036914Y00264* +X-0037046Y0027406* +X-0037435Y0028343* +X-0038052Y0029148* +X-0038857Y0029765* +X-0039794Y0030154* +X-00408Y0030286* +G37* +G36* +Y0020286D02* +X-0041806Y0020154D01* +X-0042743Y0019765* +X-0043548Y0019148* +X-0044165Y0018343* +X-0044554Y0017406* +X-0044686Y00164* +X-0044554Y0015394* +X-0044165Y0014457* +X-0043548Y0013652* +X-0042743Y0013035* +X-0041806Y0012646* +X-00408Y0012514* +X-0039794Y0012646* +X-0038857Y0013035* +X-0038052Y0013652* +X-0037435Y0014457* +X-0037046Y0015394* +X-0036914Y00164* +X-0037046Y0017406* +X-0037435Y0018343* +X-0038052Y0019148* +X-0038857Y0019765* +X-0039794Y0020154* +X-00408Y0020286* +G37* +G36* +X00409Y0009886D02* +X0039894Y0009754D01* +X0038957Y0009365* +X0038152Y0008748* +X0037535Y0007943* +X0037146Y0007006* +X0037014Y0006* +X0037146Y0004994* +X0037535Y0004057* +X0038152Y0003252* +X0038957Y0002635* +X0039894Y0002246* +X00409Y0002114* +X0041906Y0002246* +X0042843Y0002635* +X0043648Y0003252* +X0044265Y0004057* +X0044654Y0004994* +X0044786Y0006* +X0044654Y0007006* +X0044265Y0007943* +X0043648Y0008748* +X0042843Y0009365* +X0041906Y0009754* +X00409Y0009886* +G37* +G36* +X-00408Y0010286D02* +X-0041806Y0010154D01* +X-0042743Y0009765* +X-0043548Y0009148* +X-0044165Y0008343* +X-0044554Y0007406* +X-0044686Y00064* +X-0044554Y0005394* +X-0044165Y0004457* +X-0043548Y0003652* +X-0042743Y0003035* +X-0041806Y0002646* +X-00408Y0002514* +X-0039794Y0002646* +X-0038857Y0003035* +X-0038052Y0003652* +X-0037435Y0004457* +X-0037046Y0005394* +X-0036914Y00064* +X-0037046Y0007406* +X-0037435Y0008343* +X-0038052Y0009148* +X-0038857Y0009765* +X-0039794Y0010154* +X-00408Y0010286* +G37* +G36* +X00409Y0019886D02* +X0039894Y0019754D01* +X0038957Y0019365* +X0038152Y0018748* +X0037535Y0017943* +X0037146Y0017006* +X0037014Y0016* +X0037146Y0014994* +X0037535Y0014057* +X0038152Y0013252* +X0038957Y0012635* +X0039894Y0012246* +X00409Y0012114* +X0041906Y0012246* +X0042843Y0012635* +X0043648Y0013252* +X0044265Y0014057* +X0044654Y0014994* +X0044786Y0016* +X0044654Y0017006* +X0044265Y0017943* +X0043648Y0018748* +X0042843Y0019365* +X0041906Y0019754* +X00409Y0019886* +G37* +%LNunisolder52_oled-3*% +%LPD*% +G54D17* +X-0022647Y00119D02* +X-0018898D01* +X-0032579Y0001969D02* +X-0022647Y00119D01* +X00263Y-00416D02* +X0046544D01* +X00142Y-00295D02* +X00263Y-00416D01* +X-00249Y-00295D02* +X00142D01* +X-00408Y-00136D02* +X-00249Y-00295D01* +G54D21* +X00409Y0026D03* +Y0016D03* +Y0006D03* +Y-0004D03* +X-00408Y00264D03* +Y00164D03* +Y00064D03* +Y-00036D03* +G54D22* +X00409Y-0014D03* +X-00408Y-00136D03* +G54D23* +X-0001969Y0008169D03* +X-001811Y0011909D03* +X-00184Y0006D03* +X-0026476Y-0000689D03* +X0044488Y-0034843D03* +X0016535Y-0041535D03* +X-0032579Y0001969D03* +X0033268Y-0007185D03* +X0052067Y-0015354D03* +X0026191Y-0041491D03* +X0046544Y-00416D03* +X-00448Y-00211D03* +X-0002854Y-0018799D03* +X-0017421Y0019882D03* +X-00305Y00277D03* +X-00207Y0036D03* +X-00408Y00358D03* +X-00503Y00211D03* +X-005Y00047D03* +X0050984Y0011319D03* +X00508Y00213D03* +X00402Y00355D03* +X0024281Y0016298D03* +X0018898Y-0010827D03* +X-0027657Y001565D03* +X-0004724Y0019783D03* +X-00309Y-00416D03* +X-0002756Y-0041634D03* +X00443Y-00262D03* +X-0017815Y-0018996D03* +X0004724Y-0013287D03* +X-00444Y-00323D03* +X000876Y0030217D03* +X-00177Y-00417D03* +X-00486Y-00405D03* +X-0001969Y0036909D03* +X001811Y0002264D03* +X-0008465Y-00125D03* +X0022244Y0036909D03* +X000876Y0017618D03* +X0033957Y0003248D03* +M02* \ No newline at end of file diff --git a/hardware/gerber/unisolder52_oled.gbs b/hardware/gerber/unisolder52_oled.gbs new file mode 100644 index 0000000..b7eed41 --- /dev/null +++ b/hardware/gerber/unisolder52_oled.gbs @@ -0,0 +1,22 @@ +%FSTAX26Y26*% +%MOIN*% +%SFA1B1*% + +%IPPOS*% +%ADD36C,0.067060*% +%ADD37R,0.067060X0.067060*% +%LNunisolder52_oled-1*% +%LPD*% +G54D36* +X00409Y0026D03* +Y0016D03* +Y0006D03* +Y-0004D03* +X-00408Y00264D03* +Y00164D03* +Y00064D03* +Y-00036D03* +G54D37* +X00409Y-0014D03* +X-00408Y-00136D03* +M02* \ No newline at end of file diff --git a/hardware/gerber/unisolder52_oled.gko b/hardware/gerber/unisolder52_oled.gko new file mode 100644 index 0000000..1ac2def --- /dev/null +++ b/hardware/gerber/unisolder52_oled.gko @@ -0,0 +1,23 @@ +%FSTAX26Y26*% +%MOIN*% +%SFA1B1*% + +%IPPOS*% +%ADD24C,0.007870*% +%LNunisolder52_oled-1*% +%LPD*% +G54D24* +X-0057087Y-0038189D02* +Y0033465D01* +X-0049213Y0041339* +X0049213* +X0057087Y0033465* +Y-0038189D02* +Y0033465D01* +X0049213Y-0046063D02* +X0057087Y-0038189D01* +X-0049213Y-0046063D02* +X0049213D01* +X-0057087Y-0038189D02* +X-0049213Y-0046063D01* +M02* \ No newline at end of file diff --git a/hardware/gerber/unisolder52_oled.gtl b/hardware/gerber/unisolder52_oled.gtl new file mode 100644 index 0000000..cd77556 --- /dev/null +++ b/hardware/gerber/unisolder52_oled.gtl @@ -0,0 +1,1657 @@ +%FSTAX26Y26*% +%MOIN*% +%SFA1B1*% + +%IPPOS*% +%AMD10* +4,1,8,0.035400,-0.040200,0.035400,0.040200,0.028300,0.047200,-0.028300,0.047200,-0.035400,0.040200,-0.035400,-0.040200,-0.028300,-0.047200,0.028300,-0.047200,0.035400,-0.040200,0.0* +1,1,0.014180,0.028300,-0.040200* +1,1,0.014180,0.028300,0.040200* +1,1,0.014180,-0.028300,0.040200* +1,1,0.014180,-0.028300,-0.040200* +% +%AMD11* +4,1,8,-0.021800,-0.025600,0.021800,-0.025600,0.029500,-0.017900,0.029500,0.017900,0.021800,0.025600,-0.021800,0.025600,-0.029500,0.017900,-0.029500,-0.017900,-0.021800,-0.025600,0.0* +1,1,0.015360,-0.021800,-0.017900* +1,1,0.015360,0.021800,-0.017900* +1,1,0.015360,0.021800,0.017900* +1,1,0.015360,-0.021800,0.017900* +% +%AMD13* +4,1,8,0.025600,-0.021800,0.025600,0.021800,0.017900,0.029500,-0.017900,0.029500,-0.025600,0.021800,-0.025600,-0.021800,-0.017900,-0.029500,0.017900,-0.029500,0.025600,-0.021800,0.0* +1,1,0.015360,0.017900,-0.021800* +1,1,0.015360,0.017900,0.021800* +1,1,0.015360,-0.017900,0.021800* +1,1,0.015360,-0.017900,-0.021800* +% +%AMD14* +4,1,8,-0.021700,0.010200,-0.021700,-0.010200,-0.019100,-0.012800,0.019100,-0.012800,0.021700,-0.010200,0.021700,0.010200,0.019100,0.012800,-0.019100,0.012800,-0.021700,0.010200,0.0* +1,1,0.005120,-0.019100,0.010200* +1,1,0.005120,-0.019100,-0.010200* +1,1,0.005120,0.019100,-0.010200* +1,1,0.005120,0.019100,0.010200* +% +%AMD15* +4,1,8,0.005600,0.078700,-0.005600,0.078700,-0.008100,0.076300,-0.008100,-0.076300,-0.005600,-0.078700,0.005600,-0.078700,0.008100,-0.076300,0.008100,0.076300,0.005600,0.078700,0.0* +1,1,0.004840,0.005600,0.076300* +1,1,0.004840,-0.005600,0.076300* +1,1,0.004840,-0.005600,-0.076300* +1,1,0.004840,0.005600,-0.076300* +% +G04~CAMADD=10~8~0.0~0.0~944.9~708.7~70.9~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~708.0~944.0* +%ADD10D10*% +G04~CAMADD=11~8~0.0~0.0~590.6~511.8~76.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~591.0~512.0* +%ADD11D11*% +%ADD12R,0.035430X0.098430*% +G04~CAMADD=13~8~0.0~0.0~590.6~511.8~76.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~512.0~590.0* +%ADD13D13*% +G04~CAMADD=14~8~0.0~0.0~255.9~433.1~25.6~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~434.0~256.0* +%ADD14D14*% +G04~CAMADD=15~8~0.0~0.0~161.4~1574.8~24.2~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~161.4~1574.8* +%ADD15D15*% +%ADD16C,0.012000*% +%ADD17C,0.050000*% +%ADD18C,0.025000*% +%ADD19C,0.016000*% +%ADD20C,0.020000*% +%ADD21C,0.059060*% +%ADD22R,0.059060X0.059060*% +%ADD23C,0.050000*% +%LNunisolder52_oled-1*% +%LPD*% +G36* +X0055118Y0032283D02* +Y-0023061D01* +X0054618Y-0023212* +X0054587Y-0023166* +X0054036Y-0022798* +X0053385Y-0022668* +X005195* +Y-002616* +X00512* +Y-002691* +X0047315* +Y-0027951* +X0047444Y-0028602* +X0047813Y-0029153* +X0048364Y-0029522* +X0049015Y-0029652* +Y-0030148* +X0048364Y-0030278* +X0047813Y-0030646* +X0047444Y-0031198* +X0047315Y-0031849* +Y-0035432* +X0047405Y-0035888* +X0044119Y-0039175* +X0043574Y-0039885* +X0043231Y-0040712* +X0043115Y-00416* +X0043231Y-0042488* +X0043574Y-0043315* +X0043789Y-0043595* +X0043542Y-0044094* +X002911* +X0028863Y-0043595* +X0029161Y-0043206* +X0029504Y-0042379* +X0029621Y-0041491* +X0029504Y-0040604* +X0029161Y-0039777* +X0028983Y-0039545* +X0029204Y-0039096* +X0029512* +X0029958Y-0039008* +X0030325Y-0038762* +X0030693Y-0039008* +X0031138Y-0039096* +X0032268* +X0032714Y-0039008* +X0033081Y-0038762* +X0033448Y-0039008* +X0033894Y-0039096* +X0035024* +X003547Y-0039008* +X0035837Y-0038762* +X0036204Y-0039008* +X003665Y-0039096* +X003778* +X0038225Y-0039008* +X0038593Y-0038762* +X003896Y-0039008* +X0039221Y-003906* +Y-00303* +X0039971* +Y-002955* +X00417* +Y-0022668* +X0041875Y-0022455* +X0044829* +X0045415Y-0022339* +X0045911Y-0022007* +X0048434Y-0019484* +X0048766Y-0018988* +X0048882Y-0018403* +Y-0011169* +X0052284* +X0052934Y-0011039* +X0053486Y-0010671* +X0053854Y-0010119* +X0053984Y-0009469* +Y-0005886* +X0053854Y-0005235* +X0053486Y-0004684* +X0052934Y-0004315* +X0052284Y-0004185* +Y-0003689* +X0052934Y-0003559* +X0053486Y-000319* +X0053854Y-0002639* +X0053984Y-0001988* +Y0001595* +X0053854Y0002245* +X0053486Y0002797* +X0052934Y0003165* +X0052284Y0003295* +X0047913* +X0047263Y0003165* +X0046711Y0002797* +X0046172Y0002891* +X0044482Y0004581* +X0044654Y0004994* +X0044786Y0006* +X0044654Y0007006* +X0044265Y0007943* +X0043648Y0008748* +X0042843Y0009365* +X0041906Y0009754* +X00409Y0009886* +X0039894Y0009754* +X0038957Y0009365* +X0038152Y0008748* +X0037535Y0007943* +X0037146Y0007006* +X0037014Y0006* +X0037146Y0004994* +X0037535Y0004057* +X0038152Y0003252* +X0038957Y0002635* +X0039894Y0002246* +X00409Y0002114* +X0041906Y0002246* +X0042319Y0002418* +X0043823Y0000914* +Y-0000757* +X0043323Y-0001003* +X0042843Y-0000635* +X0041906Y-0000246* +X00409Y-0000114* +X0039894Y-0000246* +X0038957Y-0000635* +X0038152Y-0001252* +X0037535Y-0002057* +X0037146Y-0002994* +X0037014Y-0004* +X0037146Y-0005006* +X0037535Y-0005943* +X003806Y-0006628* +X0031291Y-0013397* +X0016908* +X0016322Y-0013513* +X0015826Y-0013845* +X0014274Y-0015397* +X0006713* +X0006127Y-0015513* +X0005631Y-0015845* +X0000307Y-0021169* +X-0000025Y-0021665* +X-0000163Y-0021722* +X-0000357Y-0021592* +X-0000618Y-002154* +Y-00303* +Y-003906* +X-0000357Y-0039008* +X000001Y-0038762* +X0000378Y-0039008* +X0000823Y-0039096* +X0001953* +X0002399Y-0039008* +X0002766Y-0038762* +X0003133Y-0039008* +X0003579Y-0039096* +X0004709* +X0005155Y-0039008* +X0005522Y-0038762* +X0005889Y-0039008* +X0006335Y-0039096* +X0007465* +X0007911Y-0039008* +X0008278Y-0038762* +X0008645Y-0039008* +X0008906Y-003906* +Y-00303* +X0010406* +Y-003906* +X0010667Y-0039008* +X0011034Y-0038762* +X0011401Y-0039008* +X0011662Y-003906* +Y-00303* +X0013162* +Y-003906* +X0013422Y-0039008* +X001379Y-0038762* +X0014157Y-0039008* +X0014418Y-003906* +Y-00303* +X0015918* +Y-003906* +X0016178Y-0039008* +X0016546Y-0038762* +X0016913Y-0039008* +X0017359Y-0039096* +X0018489* +X0018934Y-0039008* +X0019302Y-0038762* +X0019669Y-0039008* +X0019929Y-003906* +Y-00303* +X0021429* +Y-003906* +X002169Y-0039008* +X0022058Y-0038762* +X0022425Y-0039008* +X0022871Y-0039096* +X0023178* +X0023399Y-0039545* +X0023221Y-0039777* +X0022879Y-0040604* +X0022762Y-0041491* +X0022879Y-0042379* +X0023221Y-0043206* +X0023519Y-0043595* +X0023273Y-0044094* +X-0048425* +X-0054894Y-0037626* +X-0054871Y-0037157* +X-0054352Y-0037238* +X-0054287Y-0037334* +X-0053736Y-0037702* +X-0053085Y-0037832* +X-0048715* +X-0048064Y-0037702* +X-0047749Y-0037492* +X-0043914Y-0041326* +X-0043352Y-0041701* +X-0042689Y-0041833* +X-00357* +X-0035037Y-0041701* +X-0034474Y-0041326* +X-0033213Y-0040064* +X-0032837Y-0039502* +X-0032831Y-0039471* +X-0032248Y-0039096* +X-0031118* +X-0030672Y-0039008* +X-0030305Y-0038762* +X-0029937Y-0039008* +X-0029492Y-0039096* +X-0028362* +X-0027916Y-0039008* +X-0027549Y-0038762* +X-0027182Y-0039008* +X-0026921Y-003906* +Y-00303* +Y-0021354* +X-0027163Y-0021158* +X-0027191Y-0020754* +X-0024169Y-0017732* +X-0020815* +X-0020164Y-0017602* +X-0019613Y-0017234* +X-0019244Y-0016682* +X-0019115Y-0016032* +Y-0014778* +X-0018653Y-0014587* +X-0012236Y-0021004* +X-0012443Y-0021504* +X-0012956* +X-0013402Y-0021592* +X-0013769Y-0021838* +X-0014137Y-0021592* +X-0014397Y-002154* +Y-00303* +Y-003906* +X-0014137Y-0039008* +X-0013769Y-0038762* +X-0013402Y-0039008* +X-0012956Y-0039096* +X-0011826* +X-0011381Y-0039008* +X-0011013Y-0038762* +X-0010646Y-0039008* +X-00102Y-0039096* +X-000907* +X-0008625Y-0039008* +X-0008258Y-0038762* +X-000789Y-0039008* +X-0007445Y-0039096* +X-0006315* +X-0005869Y-0039008* +X-0005502Y-0038762* +X-0005134Y-0039008* +X-0004874Y-003906* +Y-00303* +Y-002154* +X-0004983Y-0021562* +X-0005066Y-0021579* +X-0005134Y-0021592* +X-000542Y-0021783* +X-0005725Y-0021424* +X-0005742Y-0021398* +X-0005798Y-0021314* +X-0006106Y-0021006* +Y-0020613* +X-0006222Y-0020027* +X-0006554Y-0019531* +X-0014923Y-0011162* +Y-0010467* +X-0014423Y-0010056* +X-0014185Y-0010104* +X-001275* +Y-0006612* +X-001125* +Y-0010104* +X-0009815* +X-0009164Y-0009974* +X-0008613Y-0009606* +X-0008422Y-000932* +X-0007891Y-0009425* +X-000789Y-000943* +X-0007521Y-0009982* +X-000697Y-0010351* +X-0006319Y-001048* +X-0004884* +Y-0006988* +X-0003384* +Y-001048* +X-0001949* +X-0001298Y-0010351* +X-0000746Y-0009982* +X-0000555Y-0009695* +X-0000293Y-0009703* +X-0000003Y-0009769* +X0000327Y-0010262* +X0000878Y-0010631* +X0001529Y-001076* +X0005899* +X000655Y-0010631* +X000704Y-0010303* +X000763* +Y-0011339* +X000776Y-0011989* +X0008128Y-0012541* +X000868Y-001291* +X0009331Y-0013039* +X0013701* +X0014351Y-001291* +X0014903Y-0012541* +X0015272Y-0011989* +X0015401Y-0011339* +Y-0007964* +X0015901Y-0007812* +X0015904Y-0007817* +X0016456Y-0008185* +X0017106Y-0008315* +X0020689* +X002134Y-0008185* +X0021891Y-0007817* +X002226Y-0007265* +X0022389Y-0006614* +X0022886* +X0023016Y-0007265* +X0023384Y-0007817* +X0023936Y-0008185* +X0024587Y-0008315* +X0025628* +Y-0004429* +Y-0000544* +X0024587* +X0023936Y-0000673* +X0023384Y-0001042* +X0023016Y-0001593* +X0022886Y-0002244* +X0022389* +X002226Y-0001593* +X0021891Y-0001042* +X002134Y-0000673* +X0020689Y-0000544* +X0017106* +X0016456Y-0000673* +X0015904Y-0001042* +X0015901Y-0001046* +X0015401Y-0000894* +Y-0000276* +X0015272Y0000375* +X0014903Y0000927* +X0014351Y0001295* +X0013701Y0001425* +X0009331* +X000868Y0001295* +X0008168Y0000953* +X00076* +Y0002003* +X000747Y0002654* +X0007102Y0003206* +X000655Y0003574* +X0006013Y0003681* +Y0004535* +X0006436Y0004619* +X0006818Y0004875* +X0007074Y0005257* +X0007164Y0005708* +Y0007755* +X0007074Y0008206* +X0006818Y0008589* +Y0008615* +X0007074Y0008997* +X0007164Y0009448* +Y0009722* +X0000988* +Y0009448* +X0001077Y0008997* +X0001333Y0008615* +Y0008589* +X0001077Y0008206* +X0000988Y0007755* +Y0005708* +X0001077Y0005257* +X0001333Y0004875* +X0001715Y0004619* +X0002138Y0004535* +Y0003704* +X0001529* +X0000878Y0003574* +X0000327Y0003206* +X0000135Y0002919* +X-0000126Y0002926* +X-0000417Y0002992* +X-0000746Y0003486* +X-0001298Y0003854* +X-0001949Y0003984* +X-0002491* +X-0003246Y0004297* +X-0004134Y0004413* +X-0006486* +Y0006362* +X-0006006Y0006683* +X-000565Y0007215* +X-0005525Y0007843* +Y0015875* +X-000565Y0016502* +X-0006006Y0017034* +X-0006538Y001739* +X-0007165Y0017515* +X-0012835* +X-0013462Y001739* +X-0013994Y0017034* +X-001435Y0016502* +X-0014475Y0015875* +Y0015339* +X-001811* +X-0018998Y0015222* +X-0019825Y0014879* +X-0020535Y0014334* +X-002108Y0013624* +X-0021423Y0012797* +X-002154Y0011909* +X-0021423Y0011022* +X-002108Y0010195* +X-0020535Y0009484* +X-0019825Y000894* +X-0018998Y0008597* +X-001811Y000848* +X-0014475* +Y0007843* +X-001435Y0007215* +X-0013994Y0006683* +X-0013462Y0006328* +X-0013345Y0006305* +Y000436* +X-0014185* +X-0014836Y0004231* +X-0015387Y0003862* +X-0015756Y0003311* +X-0015885Y000266* +Y000063* +X-0016347Y0000439* +X-0030371Y0014462* +Y00196* +X-0030487Y0020185* +X-0030819Y0020681* +X-0036524Y0026387* +X-003695Y0026671* +X-0037046Y0027406* +X-0037435Y0028343* +X-0038052Y0029148* +X-0038857Y0029765* +X-0039794Y0030154* +X-00408Y0030286* +X-0041806Y0030154* +X-0042743Y0029765* +X-0043548Y0029148* +X-0044165Y0028343* +X-0044554Y0027406* +X-0044686Y00264* +X-0044554Y0025394* +X-0044165Y0024457* +X-0043548Y0023652* +X-0042743Y0023035* +X-0041806Y0022646* +X-00408Y0022514* +X-0039794Y0022646* +X-0038857Y0023035* +X-0038088Y0023625* +X-0033429Y0018967* +Y0013828* +X-003335Y0013429* +X-0033659Y0012929* +X-0038173* +X-0038342Y0013429* +X-0038052Y0013652* +X-0037435Y0014457* +X-0037046Y0015394* +X-0036914Y00164* +X-0037046Y0017406* +X-0037435Y0018343* +X-0038052Y0019148* +X-0038857Y0019765* +X-0039794Y0020154* +X-00408Y0020286* +X-0041806Y0020154* +X-0042743Y0019765* +X-0043548Y0019148* +X-0044165Y0018343* +X-0044554Y0017406* +X-0044686Y00164* +X-0044554Y0015394* +X-0044165Y0014457* +X-0043548Y0013652* +X-0042743Y0013035* +X-0042329Y0012863* +Y0009937* +X-0042743Y0009765* +X-0043548Y0009148* +X-0044165Y0008343* +X-0044554Y0007406* +X-0044686Y00064* +X-0044554Y0005394* +X-0044165Y0004457* +X-0043548Y0003652* +X-0042743Y0003035* +X-0041806Y0002646* +X-00408Y0002514* +X-0039794Y0002646* +X-0038857Y0003035* +X-0038052Y0003652* +X-0037435Y0004457* +X-0037046Y0005394* +X-0036914Y00064* +X-0037046Y0007406* +X-0037435Y0008343* +X-0038052Y0009148* +X-0038342Y0009371* +X-0038173Y0009871* +X-0032934* +X-0020248Y-0002815* +X-00204Y-0003293* +X-0020482Y-0003334* +X-0020815Y-0003268* +X-002225* +Y-000676* +X-002375* +Y-0003268* +X-0025185* +X-0025836Y-0003398* +X-0026387Y-0003766* +X-0026615Y-0004107* +X-0027185* +X-0027413Y-0003766* +X-0027964Y-0003398* +X-0028615Y-0003268* +X-003005* +Y-000676* +X-003155* +Y-0003268* +X-0032985* +X-003322Y-0003315* +X-003372Y-0002904* +Y-0001721* +X-0033328Y-0001362* +X-0032579Y-0001461* +X-0031691Y-0001344* +X-0030864Y-0001001* +X-0030154Y-0000456* +X-0029609Y0000254* +X-0029266Y0001081* +X-0029149Y0001969* +X-0029266Y0002856* +X-0029609Y0003683* +X-0030154Y0004393* +X-0030864Y0004938* +X-0031691Y0005281* +X-0032579Y0005398* +X-0033466Y0005281* +X-0034293Y0004938* +X-0035004Y0004393* +X-0035549Y0003683* +X-0035891Y0002856* +X-0036008Y0001969* +X-0035894Y0001104* +X-0036678Y000032* +X-0037054Y-0000242* +X-0037186Y-0000905* +Y-000116* +X-0037686Y-0001329* +X-0038052Y-0000852* +X-0038857Y-0000235* +X-0039794Y0000154* +X-004005Y0000187* +Y-00036* +Y-0007387* +X-0039794Y-0007354* +X-0038857Y-0006965* +X-0038052Y-0006348* +X-0037686Y-0005871* +X-0037186Y-000604* +Y-0009747* +X-0044653* +Y-0010171* +X-0047703* +X-0047815Y-0010148* +Y-0009652* +X-0047164Y-0009522* +X-0046613Y-0009154* +X-0046244Y-0008602* +X-0046115Y-0007951* +Y-000691* +X-0053885* +Y-0007951* +X-0053756Y-0008602* +X-0053387Y-0009154* +X-0052836Y-0009522* +X-0052185Y-0009652* +Y-0010148* +X-0052836Y-0010278* +X-0053387Y-0010646* +X-0053756Y-0011198* +X-0053885Y-0011849* +Y-0015431* +X-0053756Y-0016082* +X-0053387Y-0016634* +X-0052836Y-0017002* +X-0052185Y-0017132* +X-0047815* +X-00473Y-0017029* +X-0044653* +Y-0017453* +X-0037107* +X-0037054Y-0017717* +X-0036678Y-0018279* +X-0036172Y-0018786* +Y-0021085* +X-0036445Y-0021334* +Y-00303* +X-0037944* +Y-002154* +X-0038205Y-0021592* +X-0038572Y-0021838* +X-003894Y-0021592* +X-00392Y-002154* +Y-00303* +X-003995* +Y-003105* +X-004168* +Y-0037932* +X-0041675Y-0037955* +X-0042136Y-0038202* +X-0047015Y-0033323* +Y-0032549* +X-0047144Y-0031898* +X-0047513Y-0031346* +X-0048064Y-0030978* +X-0048715Y-0030848* +Y-0030352* +X-0048064Y-0030222* +X-0047513Y-0029853* +X-0047144Y-0029302* +X-0047015Y-0028651* +Y-002761* +X-00509* +Y-002686* +X-005165* +Y-0023368* +X-0053085* +X-0053736Y-0023498* +X-0054287Y-0023866* +X-0054352Y-0023963* +X-0055023Y-0024066* +X-0055118Y-002399* +Y0032283* +X-0048031Y003937* +X0048031* +X0055118Y0032283* +G37* +%LNunisolder52_oled-2*% +%LPC*% +G36* +X-0002118Y-002154D02* +X-0002378Y-0021592D01* +X-0002746Y-0021838* +X-0003113Y-0021592* +X-0003374Y-002154* +Y-00303* +Y-003906* +X-0003113Y-0039008* +X-0002746Y-0038762* +X-0002378Y-0039008* +X-0002118Y-003906* +Y-00303* +Y-002154* +G37* +G36* +X-0021409D02* +X-002167Y-0021592D01* +X-0022037Y-0021838* +X-0022404Y-0021592* +X-0022665Y-002154* +Y-00303* +Y-003906* +X-0022404Y-0039008* +X-0022037Y-0038762* +X-002167Y-0039008* +X-0021409Y-003906* +Y-00303* +Y-002154* +G37* +G36* +X002987Y-0005179D02* +X0027128D01* +Y-0008315* +X0028169* +X002882Y-0008185* +X0029372Y-0007817* +X002974Y-0007265* +X002987Y-0006614* +Y-0005179* +G37* +G36* +X-0047815Y-0002668D02* +X-004925D01* +Y-000541* +X-0046115* +Y-0004369* +X-0046244Y-0003718* +X-0046613Y-0003166* +X-0047164Y-0002798* +X-0047815Y-0002668* +G37* +G36* +X-005075D02* +X-0052185D01* +X-0052836Y-0002798* +X-0053387Y-0003166* +X-0053756Y-0003718* +X-0053885Y-0004369* +Y-000541* +X-005075* +Y-0002668* +G37* +G36* +X-004155Y-000435D02* +X-0044587D01* +X-0044554Y-0004606* +X-0044165Y-0005543* +X-0043548Y-0006348* +X-0042743Y-0006965* +X-0041806Y-0007354* +X-004155Y-0007387* +Y-000435* +G37* +G36* +X-0015897Y-002154D02* +X-0016158Y-0021592D01* +X-0016525Y-0021838* +X-0016893Y-0021592* +X-0017153Y-002154* +Y-00303* +Y-003906* +X-0016893Y-0039008* +X-0016525Y-0038762* +X-0016158Y-0039008* +X-0015897Y-003906* +Y-00303* +Y-002154* +G37* +G36* +X-0048715Y-0023368D02* +X-005015D01* +Y-002611* +X-0047015* +Y-0025069* +X-0047144Y-0024418* +X-0047513Y-0023866* +X-0048064Y-0023498* +X-0048715Y-0023368* +G37* +G36* +X-00407Y-002154D02* +X-0040961Y-0021592D01* +X-0041339Y-0021845* +X-0041591Y-0022222* +X-004168Y-0022668* +Y-002955* +X-00407* +Y-002154* +G37* +G36* +X00417Y-003105D02* +X0040721D01* +Y-003906* +X0040982Y-0039008* +X0041359Y-0038755* +X0041612Y-0038377* +X00417Y-0037932* +Y-003105* +G37* +G36* +X-0018653Y-002154D02* +X-0018914Y-0021592D01* +X-0019281Y-0021838* +X-0019648Y-0021592* +X-0019909Y-002154* +Y-00303* +Y-003906* +X-0019648Y-0039008* +X-0019281Y-0038762* +X-0018914Y-0039008* +X-0018653Y-003906* +Y-00303* +Y-002154* +G37* +G36* +X-0024165D02* +X-0024426Y-0021592D01* +X-0024793Y-0021838* +X-002516Y-0021592* +X-0025421Y-002154* +Y-00303* +Y-003906* +X-002516Y-0039008* +X-0024793Y-0038762* +X-0024426Y-0039008* +X-0024165Y-003906* +Y-00303* +Y-002154* +G37* +G36* +X005045Y-0022668D02* +X0049015D01* +X0048364Y-0022798* +X0047813Y-0023166* +X0047444Y-0023718* +X0047315Y-0024369* +Y-002541* +X005045* +Y-0022668* +G37* +G36* +X0033185Y0035232D02* +X003175D01* +Y003249* +X0034885* +Y0033531* +X0034756Y0034182* +X0034387Y0034734* +X0033836Y0035102* +X0033185Y0035232* +G37* +G36* +X0006339Y0038251D02* +X0003387D01* +X0003036Y0038181* +X0002738Y0037982* +X-000051Y0034734* +X-0000671Y0034493* +X-0000761* +Y0034174* +X-0000779Y0034085* +Y0033199* +X-0000768Y0033144* +X-0000772Y0033088* +X-0000761Y0033055* +Y0032513* +X-0005624* +X-000565Y0032644* +X-0006006Y0033176* +X-0006538Y0033532* +X-0007165Y0033657* +X-0012835* +X-0013462Y0033532* +X-0013994Y0033176* +X-001435Y0032644* +X-0014475Y0032016* +Y0023985* +X-001435Y0023357* +X-0013994Y0022825* +X-0013462Y002247* +X-0012835Y0022345* +X-0007165* +X-0006538Y002247* +X-0006006Y0022825* +X-000565Y0023357* +X-0005525Y0023985* +Y0025654* +X-0000761* +Y0024289* +X-0000772Y0024256* +X-0000768Y0024199* +X-0000779Y0024144* +Y0023342* +Y0023258* +X-0000761Y0022851* +X-0000575Y0022427* +Y0015517* +X-0000585Y0015443* +X-0000468Y0014555* +X-0000125Y0013728* +X000042Y0013018* +X000113Y0012473* +X0001081Y0011952* +X0001077Y0011946* +X0000988Y0011495* +Y0011222* +X0007164* +Y0011495* +X0007074Y0011946* +X0006818Y0012329* +Y0012355* +X0007074Y0012737* +X0007164Y0013188* +Y0015236* +X0007074Y0015687* +X0006818Y0016069* +X0006436Y0016324* +X0006284Y0016355* +Y0019093* +X0006339* +X000669Y0019162* +X0006988Y0019362* +X0007187Y0019659* +X0007257Y002001* +Y0023751* +X0007187Y0024102* +X0006988Y0024399* +X000669Y0024598* +X0006339Y0024668* +X000544* +X0005401Y0024707* +X0005279Y0024866* +X000512Y0024988* +X0004582Y0025526* +Y0031817* +X000544Y0032675* +X0006339* +X000669Y0032745* +X0006988Y0032944* +X0007187Y0033242* +X0007257Y0033593* +Y0037333* +X0007187Y0037684* +X0006988Y0037982* +X000669Y0038181* +X0006339Y0038251* +G37* +G36* +X0014213D02* +X0011261D01* +X0010909Y0038181* +X0010612Y0037982* +X0010413Y0037684* +X0010343Y0037333* +Y0033593* +X0010413Y0033242* +X0010612Y0032944* +X0010909Y0032745* +X0011261Y0032675* +X001216* +X0013018Y0031817* +Y0025526* +X001216Y0024668* +X0011261* +X0010909Y0024598* +X0010612Y0024399* +X0010413Y0024102* +X0010343Y0023751* +Y002001* +X0010413Y0019659* +X0010612Y0019362* +X0010909Y0019162* +X0011261Y0019093* +X0011473* +Y0016386* +X0011164Y0016324* +X0010782Y0016069* +X0010526Y0015687* +X0010436Y0015236* +Y0013188* +X0010526Y0012737* +X0010782Y0012355* +Y0012329* +X0010526Y0011946* +X0010436Y0011495* +Y0011222* +X0013524* +Y0009722* +X0010436* +Y0009448* +X0010526Y0008997* +X0010782Y0008615* +Y0008589* +X0010526Y0008206* +X0010436Y0007755* +Y0005708* +X0010526Y0005257* +X0010782Y0004875* +X0011164Y0004619* +X0011615Y0004529* +X0015434* +X0015885Y0004619* +X0016267Y0004875* +X0016523Y0005257* +X0016612Y0005708* +Y0005981* +X0018271Y0007639* +X0018603Y0008135* +X0018719Y0008721* +Y0012223* +X0018603Y0012808* +X0018271Y0013304* +X0017873Y0013703* +X0018215Y0014529* +X0018332Y0015417* +Y0018862* +X0027315* +Y0015531* +X0027445Y0014881* +X0027813Y0014329* +X0028365Y0013961* +X0029016Y0013831* +Y0013334* +X0028365Y0013205* +X0027813Y0012836* +X0027445Y0012285* +X0027315Y0011634* +Y0010593* +X0035086* +Y0011634* +X0034957Y0012285* +X0034588Y0012836* +X0034036Y0013205* +X0033386Y0013334* +Y0013831* +X0034036Y0013961* +X0034588Y0014329* +X0034957Y0014881* +X0035086Y0015531* +Y001894* +X0035379Y0018979* +X0036206Y0019321* +X0036916Y0019866* +X0039471Y0022422* +X0039894Y0022246* +X00409Y0022114* +X0041906Y0022246* +X0042843Y0022635* +X0043648Y0023252* +X0044265Y0024057* +X0044654Y0024994* +X0044786Y0026* +X0044654Y0027006* +X0044265Y0027943* +X0043648Y0028748* +X0042843Y0029365* +X0041906Y0029754* +X00409Y0029886* +X0039894Y0029754* +X0039111Y0029429* +X00382* +X0037312Y0029313* +X0036485Y002897* +X0035775Y0028425* +X0034584Y0027234* +X0034387Y0027254* +X0033836Y0027622* +X0033185Y0027752* +Y0028248* +X0033836Y0028378* +X0034387Y0028747* +X0034756Y0029298* +X0034885Y0029949* +Y003099* +X0027115* +Y0029949* +X0027244Y0029298* +X0027613Y0028747* +X0028164Y0028378* +X0028815Y0028248* +Y0027752* +X0028164Y0027622* +X0027613Y0027253* +X0027244Y0026702* +X0027115Y0026051* +Y0025721* +X0025687* +X0025236Y0026022* +X0024585Y0026152* +Y0026648* +X0025236Y0026778* +X0025787Y0027147* +X0026156Y0027698* +X0026285Y0028349* +Y002939* +X00224* +Y003014* +X002165* +Y0033632* +X0020215* +X0019564Y0033502* +X0019013Y0033134* +X0018861Y0032908* +X0018395Y0033045* +X0018372Y0033088* +X0018368Y0033144* +X0018379Y0033199* +Y0034085* +X0018361Y0034174* +Y0034493* +X0018271* +X001811Y0034734* +X0014862Y0037982* +X0014564Y0038181* +X0014213Y0038251* +G37* +G36* +X003025Y0035232D02* +X0028815D01* +X0028164Y0035102* +X0027613Y0034734* +X0027244Y0034182* +X0027115Y0033531* +Y003249* +X003025* +Y0035232* +G37* +G36* +X0024585Y0033632D02* +X002315D01* +Y003089* +X0026285* +Y0031931* +X0026156Y0032582* +X0025787Y0033134* +X0025236Y0033502* +X0024585Y0033632* +G37* +G36* +X-004155Y0000187D02* +X-0041806Y0000154D01* +X-0042743Y-0000235* +X-0043548Y-0000852* +X-0044165Y-0001657* +X-0044554Y-0002594* +X-0044587Y-000285* +X-004155* +Y0000187* +G37* +G36* +X0028169Y-0000544D02* +X0027128D01* +Y-0003679* +X002987* +Y-0002244* +X002974Y-0001593* +X0029372Y-0001042* +X002882Y-0000673* +X0028169Y-0000544* +G37* +G36* +X0030451Y0009093D02* +X0027315D01* +Y0008051* +X0027445Y0007401* +X0027813Y0006849* +X0028365Y000648* +X0029016Y0006351* +X0030451* +Y0009093* +G37* +G36* +X00409Y0019886D02* +X0039894Y0019754D01* +X0038957Y0019365* +X0038152Y0018748* +X0037535Y0017943* +X0037146Y0017006* +X0037014Y0016* +X0037146Y0014994* +X0037535Y0014057* +X0038152Y0013252* +X0038957Y0012635* +X0039894Y0012246* +X00409Y0012114* +X0041906Y0012246* +X0042843Y0012635* +X0043648Y0013252* +X0044265Y0014057* +X0044654Y0014994* +X0044786Y0016* +X0044654Y0017006* +X0044265Y0017943* +X0043648Y0018748* +X0042843Y0019365* +X0041906Y0019754* +X00409Y0019886* +G37* +G36* +X0035086Y0009093D02* +X0031951D01* +Y0006351* +X0033386* +X0034036Y000648* +X0034588Y0006849* +X0034957Y0007401* +X0035086Y0008051* +Y0009093* +G37* +%LNunisolder52_oled-3*% +%LPD*% +G36* +X0017461Y0034085D02* +Y0033199D01* +X0013918Y0032215* +X001254Y0033593* +X0011261* +Y0037333* +X0014213* +X0017461Y0034085* +G37* +G36* +X000506Y0023751D02* +X0006339D01* +Y002001* +X0003387* +X0000139Y0023258* +Y0024144* +X0003682Y0025128* +X000506Y0023751* +G37* +G36* +X0017461Y0024144D02* +Y0023258D01* +X0014213Y002001* +X0011261* +Y0023751* +X001254* +X0013918Y0025128* +X0017461Y0024144* +G37* +G36* +X0006339Y0033593D02* +X000506D01* +X0003682Y0032215* +X0000139Y0033199* +Y0034085* +X0003387Y0037333* +X0006339* +Y0033593* +G37* +G54D10* +X-001Y0028001D03* +Y0011859D03* +G54D11* +X0011516Y-0002067D03* +Y-0009547D03* +X-005Y-000616D03* +Y-001364D03* +X0031201Y0017323D03* +Y0009843D03* +X0031Y002426D03* +Y003174D03* +X-0004134Y0000492D03* +Y-0006988D03* +X-0023Y-000676D03* +Y-001424D03* +X0050098Y-0000197D03* +Y-0007677D03* +X0003714Y0000212D03* +Y-0007268D03* +X-0012Y-0006612D03* +Y0000868D03* +X00224Y003014D03* +Y002266D03* +X-00308Y-000676D03* +Y-001424D03* +X-00509Y-002686D03* +Y-003434D03* +X00512Y-002616D03* +Y-003364D03* +G54D12* +X001569Y0028672D03* +X000191D03* +G54D13* +X0026378Y-0004429D03* +X0018898D03* +G54D14* +X0004076Y0014212D03* +Y0010472D03* +Y0006732D03* +X0013524D03* +Y0010472D03* +Y0014212D03* +G54D15* +X-003995Y-00303D03* +X-0037194D03* +X-0034439D03* +X-0031683D03* +X-0028927D03* +X00069D03* +X0009656D03* +X0012412D03* +X0015168D03* +X0017924D03* +X002068D03* +X0023435D03* +X0026191D03* +X0028947D03* +X0031703D03* +X0034459D03* +X0037215D03* +X0039971D03* +X-0026171D03* +X-0023415D03* +X-0020659D03* +X-0017903D03* +X-0015147D03* +X-0012391D03* +X-0009635D03* +X-000688D03* +X-0004124D03* +X-0001368D03* +X0001388D03* +X0004144D03* +G54D16* +X-0018453Y-0012624D02* +Y-0002447D01* +X-0009635Y-00303D02* +Y-0021441D01* +X-0018453Y-0012624D02* +X-0009635Y-0021441D01* +X-0007635Y-0021639D02* +Y-0020613D01* +X-0016453Y-0011795D02* +X-0007635Y-0020613D01* +X-0016453Y-0011795D02* +Y-0001619D01* +X-00319Y0013828D02* +X-0016453Y-0001619D01* +X-00323Y00114D02* +X-0018453Y-0002447D01* +X-000688Y-00303D02* +Y-0022395D01* +X-0007635Y-0021639D02* +X-000688Y-0022395D01* +X0016908Y-0014926D02* +X0031924D01* +X0014908Y-0016926D02* +X0016908Y-0014926D01* +X0031924D02* +X00409Y-000595D01* +X0017736Y-0016926D02* +X0037974D01* +X0015736Y-0018926D02* +X0017736Y-0016926D01* +X0018564Y-0018926D02* +X0044001D01* +X0016565Y-0020926D02* +X0018564Y-0018926D01* +X0019393Y-0020926D02* +X0044829D01* +X0017924Y-0022395D02* +X0019393Y-0020926D01* +X0006713Y-0016926D02* +X0014908D01* +X0017924Y-00303D02* +Y-0022395D01* +X0045451Y-0000197D02* +X0050098D01* +X0047353Y-0010423D02* +X0050098Y-0007677D01* +X0047353Y-0018403D02* +Y-0010423D01* +X0044829Y-0020926D02* +X0047353Y-0018403D01* +X00409Y-000595D02* +Y-0004D01* +X0037974Y-0016926D02* +X00409Y-0014D01* +X0044001Y-0018926D02* +X0045353Y-0017574D01* +X0026191Y-00303D02* +Y-0020965D01* +X0004144Y-0022323D02* +X0007541Y-0018926D01* +X0004144Y-00303D02* +Y-0022323D01* +X00069Y-0022395D02* +X0008369Y-0020926D01* +X00069Y-00303D02* +Y-0022395D01* +X0001388Y-00303D02* +Y-002225D01* +X0007541Y-0018926D02* +X0015736D01* +X0001388Y-002225D02* +X0006713Y-0016926D01* +X0008369Y-0020926D02* +X0016565D01* +X0031Y0022291D02* +X00317Y0021591D01* +X-0028927Y-0020327D02* +X-002292Y-001432D01* +X-0028927Y-00303D02* +Y-0020327D01* +X0026191Y-0041491D02* +Y-00303D01* +X-0031683D02* +Y-0014323D01* +X0045353Y-0017574D02* +Y0001547D01* +X00409Y0006D02* +X0045353Y0001547D01* +X-00408Y00064D02* +Y00164D01* +Y00114D02* +X-00323D01* +X-00408Y0025306D02* +X-0037606D01* +X-00319Y00196* +Y0013828D02* +Y00196D01* +X0013524Y0014212D02* +X0015201D01* +X001719Y0012223* +X0015201Y0006732D02* +X001719Y0008721D01* +X0013524Y0006732D02* +X0015201D01* +X001719Y0008721D02* +Y0012223D01* +G54D17* +X-0009933Y0007944D02* +Y00119D01* +X-001811Y0011909D02* +X-0012009D01* +X-0009916Y0000984D02* +Y0007927D01* +X00512Y-0036944D02* +Y-003364D01* +X00382Y0026D02* +X00409D01* +X0034491Y0022291D02* +X00382Y0026D01* +X0031Y0022291D02* +X0034491D01* +X00159D02* +X0031D01* +X-004996Y-00136D02* +X-00408D01* +X-005Y-001364D02* +X-004996Y-00136D01* +X-0008Y0029083D02* +X00011D01* +X0046544Y-00416D02* +X00512Y-0036944D01* +X-0011983Y0000984D02* +X-0004134D01* +X0002844Y0015443D02* +X0002854Y0015453D01* +Y0022441* +X0014902Y0015417D02* +Y0022441D01* +G54D18* +X-0012Y-0010933D02* +Y-0006514D01* +X-0004134Y-0011319D02* +Y-0006496D01* +X-0012Y-0006514D02* +X-0004151D01* +X0023778Y0031026D02* +X0028809D01* +X0031Y0033709D02* +Y00382D01* +X-00308Y-000676D02* +D01* +Y-0002461D01* +X-0023Y-000676D02* +Y-00023D01* +X004434Y-002616D02* +X00512D01* +Y-00192* +X-00509Y-002686D02* +Y-002D01* +Y-002686D02* +X-004446D01* +X-0004134Y0000466D02* +Y0000492D01* +Y0000466D02* +X-0001389Y-0002279D01* +X0000969Y-0004523D02* +X0003714Y-0007268D01* +X0031Y003174D02* +X0036567D01* +X0022244Y0030296D02* +X00223Y003024D01* +X0022244Y0030296D02* +Y0036909D01* +X0007948Y0010472D02* +X0013524D01* +X-0000197Y0010492D02* +X0007928D01* +X-005Y-000616D02* +Y-0000689D01* +G54D19* +X-0035453Y-0000905D02* +X-0032579Y0001969D01* +X-0035453Y-0017054D02* +Y-0000905D01* +X-0042689Y-00401D02* +X-00357D01* +X-0048449Y-003434D02* +X-0042689Y-00401D01* +X-00509Y-003434D02* +X-0048449D01* +X-0034439Y-0038839D02* +Y-00303D01* +X-00357Y-00401D02* +X-0034439Y-0038839D01* +Y-00303D02* +Y-0018068D01* +X-0035453Y-0017054D02* +X-0034439Y-0018068D01* +X-0001275Y-0002279D02* +X0000969Y-0004523D01* +G54D20* +X0013386Y-000315D02* +X0019783D01* +X0005796Y-0000984D02* +X001122D01* +X0004076Y0000212D02* +Y0006732D01* +X0005698Y-0008366D02* +X0011122D01* +G54D21* +X00409Y0026D03* +Y0016D03* +Y0006D03* +Y-0004D03* +X-00408Y00264D03* +Y00164D03* +Y00064D03* +Y-00036D03* +G54D22* +X00409Y-0014D03* +X-00408Y-00136D03* +G54D23* +X-0001969Y0008169D03* +X-001811Y0011909D03* +X-00184Y0006D03* +X-0026476Y-0000689D03* +X0044488Y-0034843D03* +X0016535Y-0041535D03* +X-0032579Y0001969D03* +X0033268Y-0007185D03* +X0052067Y-0015354D03* +X0026191Y-0041491D03* +X0046544Y-00416D03* +X-00448Y-00211D03* +X-0002854Y-0018799D03* +X-0017421Y0019882D03* +X-00305Y00277D03* +X-00207Y0036D03* +X-00408Y00358D03* +X-00503Y00211D03* +X-005Y00047D03* +X0050984Y0011319D03* +X00508Y00213D03* +X00402Y00355D03* +X0024281Y0016298D03* +X0018898Y-0010827D03* +X-0027657Y001565D03* +X-0004724Y0019783D03* +X-00309Y-00416D03* +X-0002756Y-0041634D03* +X00443Y-00262D03* +X-0017815Y-0018996D03* +X0004724Y-0013287D03* +X-00444Y-00323D03* +X000876Y0030217D03* +X-00177Y-00417D03* +X-00486Y-00405D03* +X-0001969Y0036909D03* +X001811Y0002264D03* +X-0008465Y-00125D03* +X0022244Y0036909D03* +X000876Y0017618D03* +X0033957Y0003248D03* +M02* \ No newline at end of file diff --git a/hardware/gerber/unisolder52_oled.gto b/hardware/gerber/unisolder52_oled.gto new file mode 100644 index 0000000..9b6e7cf --- /dev/null +++ b/hardware/gerber/unisolder52_oled.gto @@ -0,0 +1,527 @@ +%FSTAX26Y26*% +%MOIN*% +%SFA1B1*% + +%IPPOS*% +%ADD24C,0.007870*% +%ADD25C,0.010000*% +%ADD26C,0.008000*% +%LNunisolder52_oled-1*% +%LPD*% +G54D24* +X-0015118Y000723D02* +Y001619D01* +X-0004882Y000733D02* +Y001619D01* +X-0015118Y00343D02* +X-0004882D01* +X-0015118Y002367D02* +Y00343D01* +X-0004882Y002367D02* +Y00343D01* +X-0015118Y000725D02* +X-0013347Y0005479D01* +X-0006654D02* +X-0004882Y000725D01* +X-0013347Y0005479D02* +X-0006654D01* +X00359Y-0019D02* +X00459D01* +X00359D02* +Y0031D01* +X00459Y-0019D02* +Y0031D01* +X00359D02* +X00459D01* +X-00458Y-00186D02* +X-00358D01* +X-00458D02* +Y00314D01* +X-00358Y-00186D02* +Y00314D01* +X-00458D02* +X-00358D01* +X0008015Y0016372D02* +X0009585D01* +X0006044Y0003972D02* +X0011556D01* +X0007422Y0016965D02* +X0008015Y0016372D01* +X0006044Y0016965D02* +X0007422D01* +X0009585Y0016372D02* +X0010178Y0016965D01* +X0011556* +G54D25* +X00031Y0016872D02* +X00032D01* +G54D26* +X0033549Y0003338D02* +X0034215Y0004005D01* +Y0005337* +X0033549Y0006004* +X0030883* +X0030217Y0005337* +Y0004005* +X0030883Y0003338* +X0034215Y-0000661D02* +X0033549Y0000672D01* +X0032216Y0002005* +X0030883* +X0030217Y0001339* +Y0000006* +X0030883Y-0000661* +X0031549* +X0032216Y0000006* +Y0002005* +X0033549Y-0001994D02* +X0034215Y-000266D01* +Y-0003993* +X0033549Y-0004659* +X0032882* +X0032216Y-0003993* +X0031549Y-0004659* +X0030883* +X0030217Y-0003993* +Y-000266* +X0030883Y-0001994* +X0031549* +X0032216Y-000266* +X0032882Y-0001994* +X0033549* +X0032216Y-000266D02* +Y-0003993D01* +X-0048932Y00057D02* +X-0048265Y0006367D01* +Y00077* +X-0048932Y0008366* +X-0051597* +X-0052264Y00077* +Y0006367* +X-0051597Y00057* +X-0048265Y0004367D02* +Y0001702D01* +X-0048932* +X-0051597Y0004367* +X-0052264* +Y-0001631D02* +X-0048265D01* +X-0050264Y0000369* +Y-0002297* +X0052446Y-0014182D02* +X0053113Y-0013515D01* +Y-0012182* +X0052446Y-0011516* +X0049781* +X0049114Y-0012182* +Y-0013515* +X0049781Y-0014182* +X0053113Y-0015515D02* +Y-001818D01* +X0052446* +X0049781Y-0015515* +X0049114* +X0052446Y-0019513D02* +X0053113Y-002018D01* +Y-0021512* +X0052446Y-0022179* +X005178* +X0051113Y-0021512* +Y-0020846* +Y-0021512* +X0050447Y-0022179* +X0049781* +X0049114Y-0021512* +Y-002018* +X0049781Y-0019513* +X-0043321Y-0022941D02* +X-0042655Y-0022275D01* +Y-0020942* +X-0043321Y-0020276* +X-0045987* +X-0046654Y-0020942* +Y-0022275* +X-0045987Y-0022941* +X-0042655Y-0024274D02* +Y-002694D01* +X-0043321* +X-0045987Y-0024274* +X-0046654* +X-0042655Y-0028273D02* +Y-0030939D01* +X-0043321* +X-0045987Y-0028273* +X-0046654* +X0047736Y0026181D02* +Y003018D01* +X0049736* +X0050402Y0029513* +Y0028181* +X0049736Y0027514* +X0047736* +X0051735Y0026181D02* +X0053068D01* +X0052401* +Y003018* +X0051735Y0029513* +X-0054232Y0027362D02* +Y0031361D01* +X-0052233* +X-0051566Y0030694* +Y0029362* +X-0052233Y0028695* +X-0054232* +X-0047568Y0027362D02* +X-0050234D01* +X-0047568Y0030028* +Y0030694* +X-0048234Y0031361* +X-0049567* +X-0050234Y0030694* +X0016929Y0006361D02* +Y0003029D01* +X0017596Y0002362* +X0018928* +X0019595Y0003029* +Y0006361* +X0020928Y0002362D02* +X0022261D01* +X0021594* +Y0006361* +X0020928Y0005694* +X002426Y0003029D02* +X0024927Y0002362D01* +X0026259* +X0026926Y0003029* +Y0005694* +X0026259Y0006361* +X0024927* +X002426Y0005694* +Y0005028* +X0024927Y0004361* +X0026926* +X0021161Y-0012697D02* +Y-0008698D01* +X0023161* +X0023827Y-0009365* +Y-0010697* +X0023161Y-0011364* +X0021161* +X0022494D02* +X0023827Y-0012697D01* +X0027826Y-0008698D02* +X0026493Y-0009365D01* +X002516Y-0010697* +Y-001203* +X0025826Y-0012697* +X0027159* +X0027826Y-001203* +Y-0011364* +X0027159Y-0010697* +X002516* +X0029159Y-0009365D02* +X0029825Y-0008698D01* +X0031158* +X0031825Y-0009365* +Y-0010031* +X0031158Y-0010697* +X0031825Y-0011364* +Y-001203* +X0031158Y-0012697* +X0029825* +X0029159Y-001203* +Y-0011364* +X0029825Y-0010697* +X0029159Y-0010031* +Y-0009365* +X0029825Y-0010697D02* +X0031158D01* +X-0025197Y0007874D02* +X-0021198D01* +Y0005875* +X-0021865Y0005208* +X-0023198* +X-0023864Y0005875* +Y0007874* +Y0006541D02* +X-0025197Y0005208D01* +X-0021198Y0001209D02* +X-0021865Y0002542D01* +X-0023198Y0003875* +X-002453* +X-0025197Y0003209* +Y0001876* +X-002453Y0001209* +X-0023864* +X-0023198Y0001876* +Y0003875* +X-0021198Y-0000123D02* +Y-0002789D01* +X-0021865* +X-002453Y-0000123* +X-0025197* +X-0003347Y-0015059D02* +Y-001106D01* +X-0001347* +X-0000681Y-0011727* +Y-001306* +X-0001347Y-0013726* +X-0003347* +X-0002014D02* +X-0000681Y-0015059D01* +X0003318Y-001106D02* +X0001985Y-0011727D01* +X0000652Y-001306* +Y-0014393* +X0001319Y-0015059* +X0002652* +X0003318Y-0014393* +Y-0013726* +X0002652Y-001306* +X0000652* +X0007317Y-001106D02* +X0005984Y-0011727D01* +X0004651Y-001306* +Y-0014393* +X0005317Y-0015059* +X000665* +X0007317Y-0014393* +Y-0013726* +X000665Y-001306* +X0004651* +X-0038101Y-0040001D02* +X-0039434D01* +X-00401Y-0040668* +Y-0043334* +X-0039434Y-0044* +X-0038101* +X-0037434Y-0043334* +Y-0040668* +X-0038101Y-0040001* +X-0036101D02* +Y-0044D01* +X-0033435* +X-0029437Y-0040001D02* +X-0032103D01* +Y-0044* +X-0029437* +X-0032103Y-0042001D02* +X-003077D01* +X-0028104Y-0040001D02* +Y-0044D01* +X-0026105* +X-0025438Y-0043334* +Y-0040668* +X-0026105Y-0040001* +X-0028104* +X-0024105Y-0044D02* +X-0022772D01* +X-0023439* +Y-0040001* +X-0024105Y-0040668* +X000561Y0029196D02* +Y0025197D01* +X0008276* +X0009609Y0028529D02* +X0010275Y0029196D01* +X0011608* +X0012275Y0028529* +Y0027863* +X0011608Y0027196* +X0010942* +X0011608* +X0012275Y002653* +Y0025863* +X0011608Y0025197* +X0010275* +X0009609Y0025863* +X-0016769Y0034252D02* +X-0020768D01* +Y0032253* +X-0020101Y0031586* +X-0017436* +X-0016769Y0032253* +Y0034252* +X-0020768Y0027588D02* +Y0030253D01* +X-0018102Y0027588* +X-0017436* +X-0016769Y0028254* +Y0029587* +X-0017436Y0030253* +X-0020768Y0023589D02* +Y0026255D01* +X-0018102Y0023589* +X-0017436* +X-0016769Y0024255* +Y0025588* +X-0017436Y0026255* +X-0029739Y0005208D02* +X-0029072Y0005875D01* +Y0007208* +X-0029739Y0007874* +X-0032404* +X-0033071Y0007208* +Y0005875* +X-0032404Y0005208* +X-0029072Y0003875D02* +Y0001209D01* +X-0029739* +X-0032404Y0003875* +X-0033071* +X-0029072Y-0002789D02* +Y-0000123D01* +X-0031071* +X-0030405Y-0001456* +Y-0002123* +X-0031071Y-0002789* +X-0032404* +X-0033071Y-0002123* +Y-000079* +X-0032404Y-0000123* +X0038493Y0036206D02* +X0037826Y0036873D01* +X0036493* +X0035827Y0036206* +Y003354* +X0036493Y0032874* +X0037826* +X0038493Y003354* +X0042491Y0036873D02* +X0041158Y0036206D01* +X0039825Y0034873* +Y003354* +X0040492Y0032874* +X0041825* +X0042491Y003354* +Y0034207* +X0041825Y0034873* +X0039825* +X0043824Y003354D02* +X0044491Y0032874D01* +X0045823* +X004649Y003354* +Y0036206* +X0045823Y0036873* +X0044491* +X0043824Y0036206* +Y003554* +X0044491Y0034873* +X004649* +X0023805Y0016133D02* +X0024471Y00168D01* +Y0018133* +X0023805Y0018799* +X0021139* +X0020472Y0018133* +Y00168* +X0021139Y0016133* +X0024471Y0012135D02* +X0023805Y0013468D01* +X0022472Y00148* +X0021139* +X0020472Y0014134* +Y0012801* +X0021139Y0012135* +X0021805* +X0022472Y0012801* +Y00148* +X0024471Y0010802D02* +Y0008136D01* +X0023805* +X0021139Y0010802* +X0020472* +X-0005723Y-0013493D02* +X-0005056Y-0012826D01* +Y-0011493* +X-0005723Y-0010827* +X-0008389* +X-0009055Y-0011493* +Y-0012826* +X-0008389Y-0013493* +X-0005056Y-0014826D02* +Y-0017491D01* +X-0005723* +X-0008389Y-0014826* +X-0009055* +Y-0018824D02* +Y-0020157D01* +Y-0019491* +X-0005056* +X-0005723Y-0018824* +X-0011391Y-0013137D02* +X-0010724Y-0012471D01* +Y-0011138* +X-0011391Y-0010471* +X-0014057* +X-0014723Y-0011138* +Y-0012471* +X-0014057Y-0013137* +X-0010724Y-001447D02* +Y-0017136D01* +X-0011391* +X-0014057Y-001447* +X-0014723* +X-0011391Y-0018469D02* +X-0010724Y-0019135D01* +Y-0020468* +X-0011391Y-0021135* +X-0014057* +X-0014723Y-0020468* +Y-0019135* +X-0014057Y-0018469* +X-0011391* +X004813Y0014272D02* +X0052129D01* +Y0012272* +X0051462Y0011606* +X0050129* +X0049463Y0012272* +Y0014272* +Y0012939D02* +X004813Y0011606D01* +X0052129Y0007607D02* +X0051462Y000894D01* +X0050129Y0010273* +X0048796* +X004813Y0009606* +Y0008274* +X0048796Y0007607* +X0049463* +X0050129Y0008274* +Y0010273* +X0048796Y0006274D02* +X004813Y0005608D01* +Y0004275* +X0048796Y0003608* +X0051462* +X0052129Y0004275* +Y0005608* +X0051462Y0006274* +X0050796* +X0050129Y0005608* +Y0003608* +X0011721Y-0014286D02* +X0011054Y-0013619D01* +X0009721* +X0009055Y-0014286* +Y-0016952* +X0009721Y-0017618* +X0011054* +X0011721Y-0016952* +X0013054Y-0013619D02* +X001572D01* +Y-0014286* +X0013054Y-0016952* +Y-0017618* +X0019718Y-0013619D02* +X0018385Y-0014286D01* +X0017052Y-0015619* +Y-0016952* +X0017719Y-0017618* +X0019052* +X0019718Y-0016952* +Y-0016285* +X0019052Y-0015619* +X0017052* +M02* \ No newline at end of file diff --git a/hardware/gerber/unisolder52_oled.gts b/hardware/gerber/unisolder52_oled.gts new file mode 100644 index 0000000..134fb47 --- /dev/null +++ b/hardware/gerber/unisolder52_oled.gts @@ -0,0 +1,623 @@ +%FSTAX26Y26*% +%MOIN*% +%SFA1B1*% + +%IPPOS*% +%AMD30* +4,1,8,0.039400,-0.040200,0.039400,0.040200,0.028300,0.051200,-0.028300,0.051200,-0.039400,0.040200,-0.039400,-0.040200,-0.028300,-0.051200,0.028300,-0.051200,0.039400,-0.040200,0.0* +1,1,0.022180,0.028300,-0.040200* +1,1,0.022180,0.028300,0.040200* +1,1,0.022180,-0.028300,0.040200* +1,1,0.022180,-0.028300,-0.040200* +% +%AMD31* +4,1,8,-0.021800,-0.029600,0.021800,-0.029600,0.033500,-0.017900,0.033500,0.017900,0.021800,0.029600,-0.021800,0.029600,-0.033500,0.017900,-0.033500,-0.017900,-0.021800,-0.029600,0.0* +1,1,0.023360,-0.021800,-0.017900* +1,1,0.023360,0.021800,-0.017900* +1,1,0.023360,0.021800,0.017900* +1,1,0.023360,-0.021800,0.017900* +% +%AMD33* +4,1,8,0.029600,-0.021800,0.029600,0.021800,0.017900,0.033500,-0.017900,0.033500,-0.029600,0.021800,-0.029600,-0.021800,-0.017900,-0.033500,0.017900,-0.033500,0.029600,-0.021800,0.0* +1,1,0.023360,0.017900,-0.021800* +1,1,0.023360,0.017900,0.021800* +1,1,0.023360,-0.017900,0.021800* +1,1,0.023360,-0.017900,-0.021800* +% +%AMD34* +4,1,8,-0.025700,0.010200,-0.025700,-0.010200,-0.019100,-0.016800,0.019100,-0.016800,0.025700,-0.010200,0.025700,0.010200,0.019100,0.016800,-0.019100,0.016800,-0.025700,0.010200,0.0* +1,1,0.013120,-0.019100,0.010200* +1,1,0.013120,-0.019100,-0.010200* +1,1,0.013120,0.019100,-0.010200* +1,1,0.013120,0.019100,0.010200* +% +%AMD35* +4,1,8,0.005600,0.082700,-0.005600,0.082700,-0.012100,0.076300,-0.012100,-0.076300,-0.005600,-0.082700,0.005600,-0.082700,0.012100,-0.076300,0.012100,0.076300,0.005600,0.082700,0.0* +1,1,0.012840,0.005600,0.076300* +1,1,0.012840,-0.005600,0.076300* +1,1,0.012840,-0.005600,-0.076300* +1,1,0.012840,0.005600,-0.076300* +% +%ADD27R,0.043000X0.089000*% +%ADD28R,0.045000X0.088000*% +%ADD29R,0.812000X0.162000*% +G04~CAMADD=30~8~0.0~0.0~1024.9~788.7~110.9~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~788.0~1024.0* +%ADD30D30*% +G04~CAMADD=31~8~0.0~0.0~670.6~591.8~116.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~180.0~671.0~592.0* +%ADD31D31*% +%ADD32R,0.043430X0.106420*% +G04~CAMADD=33~8~0.0~0.0~670.6~591.8~116.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~592.0~670.0* +%ADD33D33*% +G04~CAMADD=34~8~0.0~0.0~335.9~513.1~65.6~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~514.0~336.0* +%ADD34D34*% +G04~CAMADD=35~8~0.0~0.0~241.4~1654.8~64.2~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~241.4~1654.8* +%ADD35D35*% +%ADD36C,0.067060*% +%ADD37R,0.067060X0.067060*% +%LNunisolder52_oled-1*% +%LPD*% +G36* +X0003706Y0025528D02* +X0003731Y0025526D01* +X0003732* +X0003734* +X0003758Y0025521* +X0003782Y0025517* +X0003784Y0025516* +X0003786* +X0003809Y0025508* +X0003832Y00255* +X0003833Y0025499* +X0003835* +X0003858Y0025488* +X0003879Y0025477* +X0003881Y0025476* +X0003882* +X0003903Y0025462* +X0003923Y0025449* +X0003924Y0025447* +X0003926Y0025446* +X0003944Y002543* +X0003963Y0025414* +X0003964Y0025413* +X0003965Y0025412* +X0005226Y0024151* +X0006339* +X0006392Y0024148* +X0006443Y0024138* +X0006493Y0024121* +X000654Y0024098* +X0006583Y0024069* +X0006623Y0024034* +X0006657Y0023994* +X0006686Y0023951* +X000671Y0023904* +X0006727Y0023854* +X0006737Y0023803* +X000674Y0023751* +Y002001* +X0006737Y0019958* +X0006727Y0019907* +X000671Y0019857* +X0006686Y001981* +X0006657Y0019766* +X0006623Y0019727* +X0006583Y0019692* +X000654Y0019663* +X0006493Y001964* +X0006443Y0019623* +X0006392Y0019613* +X0006339Y001961* +X0003387* +X0003334Y0019613* +X0003283Y0019623* +X0003233Y001964* +X0003186Y0019663* +X0003143Y0019692* +X0003103Y0019727* +X-0000145Y0022975* +X-0000179Y0023014* +X-0000209Y0023058* +X-0000232Y0023105* +X-0000249Y0023155* +X-0000259Y0023206* +X-0000262Y0023258* +Y0024144* +X-0000261Y0024169* +X-0000259Y0024193* +Y0024195* +Y0024196* +X-0000254Y0024221* +X-0000249Y0024244* +Y0024246* +Y0024248* +X-0000241Y0024271* +X-0000233Y0024294* +X-0000232Y0024296* +Y0024298* +X-0000221Y002432* +X-000021Y0024341* +X-0000209Y0024343* +Y0024345* +X-0000195Y0024365* +X-0000182Y0024385* +X-0000181Y0024387* +X-0000179Y0024388* +X-0000163Y0024407* +X-0000147Y0024425* +X-0000146Y0024426* +X-0000145Y0024428* +X-0000126Y0024444* +X-0000108Y002446* +X-0000107Y0024461* +X-0000105Y0024462* +X-0000085Y0024475* +X-0000065Y0024489* +X-0000063Y002449* +X-0000062Y0024491* +X-000004Y0024502* +X-0000018Y0024513* +X-0000017Y0024514* +X-0000015* +X0000008Y0024522* +X0000031Y002453* +X0003575Y0025515* +X0003576* +X0003578Y0025516* +X0003602Y002552* +X0003626Y0025525* +X0003628Y0025526* +X000363* +X0003654Y0025528* +X0003678Y0025529* +X000368* +X0003682* +X0003706Y0025528* +G37* +G36* +X001392Y0025529D02* +X0013922D01* +X0013946Y0025528* +X001397Y0025526* +X0013972* +X0013974Y0025525* +X0013998Y002552* +X0014022Y0025516* +X0014024Y0025515* +X0014025* +X0017569Y002453* +X0017592Y0024522* +X0017615Y0024514* +X0017616* +X0017618Y0024513* +X001764Y0024502* +X0017662Y0024491* +X0017663Y002449* +X0017665Y0024489* +X0017685Y0024475* +X0017705Y0024462* +X0017707Y0024461* +X0017708Y002446* +X0017726Y0024444* +X0017745Y0024428* +X0017746Y0024426* +X0017748Y0024425* +X0017763Y0024407* +X0017779Y0024388* +X0017781Y0024387* +X0017782Y0024385* +X0017795Y0024365* +X0017809Y0024345* +Y0024343* +X001781Y0024341* +X0017821Y002432* +X0017832Y0024298* +Y0024296* +X0017833Y0024294* +X0017841Y0024271* +X0017849Y0024248* +Y0024246* +X001785Y0024244* +X0017854Y0024221* +X0017859Y0024196* +Y0024195* +Y0024193* +X0017861Y0024169* +X0017862Y0024144* +Y0023258* +X0017859Y0023206* +X0017849Y0023155* +X0017832Y0023105* +X0017809Y0023058* +X0017779Y0023014* +X0017745Y0022975* +X0014497Y0019727* +X0014457Y0019692* +X0014414Y0019663* +X0014367Y001964* +X0014317Y0019623* +X0014266Y0019613* +X0014213Y001961* +X0011261* +X0011208Y0019613* +X0011157Y0019623* +X0011107Y001964* +X001106Y0019663* +X0011017Y0019692* +X0010977Y0019727* +X0010943Y0019766* +X0010914Y001981* +X001089Y0019857* +X0010873Y0019907* +X0010863Y0019958* +X001086Y002001* +Y0023751* +X0010863Y0023803* +X0010873Y0023854* +X001089Y0023904* +X0010914Y0023951* +X0010943Y0023994* +X0010977Y0024034* +X0011017Y0024069* +X001106Y0024098* +X0011107Y0024121* +X0011157Y0024138* +X0011208Y0024148* +X0011261Y0024151* +X0012374* +X0013635Y0025412* +X0013636Y0025413* +X0013637Y0025414* +X0013656Y002543* +X0013674Y0025446* +X0013676Y0025447* +X0013677Y0025449* +X0013697Y0025462* +X0013718Y0025476* +X0013719* +X0013721Y0025477* +X0013742Y0025488* +X0013765Y0025499* +X0013767* +X0013768Y00255* +X0013791Y0025508* +X0013814Y0025516* +X0013816* +X0013818Y0025517* +X0013842Y0025521* +X0013866Y0025526* +X0013868* +X0013869* +X0013894Y0025528* +X0013918Y0025529* +X001392* +G37* +G36* +X0014266Y0037731D02* +X0014317Y003772D01* +X0014367Y0037703* +X0014414Y003768* +X0014457Y0037651* +X0014497Y0037617* +X0017745Y0034369* +X0017779Y0034329* +X0017809Y0034286* +X0017832Y0034238* +X0017849Y0034189* +X0017859Y0034137* +X0017862Y0034085* +Y0033199* +X0017861Y0033175* +X0017859Y0033151* +Y0033149* +Y0033147* +X0017854Y0033123* +X001785Y0033099* +X0017849Y0033097* +Y0033095* +X0017841Y0033072* +X0017833Y0033049* +X0017832Y0033048* +Y0033046* +X0017821Y0033024* +X001781Y0033002* +X0017809Y0033* +Y0032999* +X0017795Y0032979* +X0017782Y0032958* +X0017781Y0032957* +X0017779Y0032955* +X0017763Y0032937* +X0017748Y0032919* +X0017746Y0032917* +X0017745Y0032916* +X0017726Y0032899* +X0017708Y0032884* +X0017707Y0032882* +X0017705Y0032881* +X0017685Y0032868* +X0017665Y0032854* +X0017663Y0032853* +X0017662Y0032852* +X001764Y0032842* +X0017618Y003283* +X0017616* +X0017615Y0032829* +X0017592Y0032821* +X0017569Y0032813* +X0014025Y0031829* +X0014024Y0031828* +X0014022* +X0013998Y0031823* +X0013974Y0031818* +X0013972* +X001397* +X0013946Y0031816* +X0013922Y0031814* +X001392* +X0013918* +X0013894Y0031816* +X0013869Y0031817* +X0013868* +X0013866Y0031818* +X0013842Y0031822* +X0013818Y0031827* +X0013816Y0031828* +X0013814* +X0013791Y0031836* +X0013768Y0031843* +X0013767Y0031844* +X0013765Y0031845* +X0013742Y0031856* +X0013721Y0031866* +X0013719Y0031867* +X0013718Y0031868* +X0013697Y0031882* +X0013677Y0031895* +X0013676Y0031896* +X0013674Y0031897* +X0013656Y0031913* +X0013637Y0031929* +X0013636Y003193* +X0013635Y0031932* +X0012374Y0033192* +X0011261* +X0011208Y0033196* +X0011157Y0033206* +X0011107Y0033223* +X001106Y0033246* +X0011017Y0033275* +X0010977Y003331* +X0010943Y0033349* +X0010914Y0033393* +X001089Y003344* +X0010873Y0033489* +X0010863Y0033541* +X001086Y0033593* +Y0037333* +X0010863Y0037385* +X0010873Y0037437* +X001089Y0037487* +X0010914Y0037534* +X0010943Y0037577* +X0010977Y0037617* +X0011017Y0037651* +X001106Y003768* +X0011107Y0037703* +X0011157Y003772* +X0011208Y0037731* +X0011261Y0037734* +X0014213* +X0014266Y0037731* +G37* +G36* +X0006392D02* +X0006443Y003772D01* +X0006493Y0037703* +X000654Y003768* +X0006583Y0037651* +X0006623Y0037617* +X0006657Y0037577* +X0006686Y0037534* +X000671Y0037487* +X0006727Y0037437* +X0006737Y0037385* +X000674Y0037333* +Y0033593* +X0006737Y0033541* +X0006727Y0033489* +X000671Y003344* +X0006686Y0033393* +X0006657Y0033349* +X0006623Y003331* +X0006583Y0033275* +X000654Y0033246* +X0006493Y0033223* +X0006443Y0033206* +X0006392Y0033196* +X0006339Y0033192* +X0005226* +X0003965Y0031932* +X0003964Y003193* +X0003963Y0031929* +X0003944Y0031913* +X0003926Y0031897* +X0003924Y0031896* +X0003923Y0031895* +X0003903Y0031882* +X0003882Y0031868* +X0003881Y0031867* +X0003879Y0031866* +X0003858Y0031856* +X0003835Y0031845* +X0003833Y0031844* +X0003832Y0031843* +X0003809Y0031836* +X0003786Y0031828* +X0003784* +X0003782Y0031827* +X0003758Y0031822* +X0003734Y0031818* +X0003732Y0031817* +X0003731* +X0003706Y0031816* +X0003682Y0031814* +X000368* +X0003678* +X0003654Y0031816* +X000363Y0031818* +X0003628* +X0003626* +X0003602Y0031823* +X0003578Y0031828* +X0003576* +X0003575Y0031829* +X0000031Y0032813* +X0000008Y0032821* +X-0000015Y0032829* +X-0000017Y003283* +X-0000018* +X-000004Y0032842* +X-0000062Y0032852* +X-0000063Y0032853* +X-0000065Y0032854* +X-0000085Y0032868* +X-0000105Y0032881* +X-0000107Y0032882* +X-0000108Y0032884* +X-0000126Y0032899* +X-0000145Y0032916* +X-0000146Y0032917* +X-0000147Y0032919* +X-0000163Y0032937* +X-0000179Y0032955* +X-0000181Y0032957* +X-0000182Y0032958* +X-0000195Y0032979* +X-0000209Y0032999* +Y0033* +X-000021Y0033002* +X-0000221Y0033024* +X-0000232Y0033046* +Y0033048* +X-0000233Y0033049* +X-0000241Y0033072* +X-0000249Y0033095* +Y0033097* +Y0033099* +X-0000254Y0033123* +X-0000259Y0033147* +Y0033149* +Y0033151* +X-0000261Y0033175* +X-0000262Y0033199* +Y0034085* +X-0000259Y0034137* +X-0000249Y0034189* +X-0000232Y0034238* +X-0000209Y0034286* +X-0000179Y0034329* +X-0000145Y0034369* +X0003103Y0037617* +X0003143Y0037651* +X0003186Y003768* +X0003233Y0037703* +X0003283Y003772* +X0003334Y0037731* +X0003387Y0037734* +X0006339* +X0006392Y0037731* +G37* +G54D27* +X001355Y000895D03* +G54D28* +X000405Y00092D03* +G54D29* +X-00003Y-00303D03* +G54D30* +X-001Y0028001D03* +Y0011859D03* +G54D31* +X0011516Y-0002067D03* +Y-0009547D03* +X-005Y-000616D03* +Y-001364D03* +X0031201Y0017323D03* +Y0009843D03* +X0031Y002426D03* +Y003174D03* +X-0004134Y0000492D03* +Y-0006988D03* +X-0023Y-000676D03* +Y-001424D03* +X0050098Y-0000197D03* +Y-0007677D03* +X0003714Y0000212D03* +Y-0007268D03* +X-0012Y-0006612D03* +Y0000868D03* +X00224Y003014D03* +Y002266D03* +X-00308Y-000676D03* +Y-001424D03* +X-00509Y-002686D03* +Y-003434D03* +X00512Y-002616D03* +Y-003364D03* +G54D32* +X001569Y0028672D03* +X000191D03* +G54D33* +X0026378Y-0004429D03* +X0018898D03* +G54D34* +X0004076Y0014212D03* +Y0010472D03* +Y0006732D03* +X0013524D03* +Y0010472D03* +Y0014212D03* +G54D35* +X-003995Y-00303D03* +X-0037194D03* +X-0034439D03* +X-0031683D03* +X-0028927D03* +X00069D03* +X0009656D03* +X0012412D03* +X0015168D03* +X0017924D03* +X002068D03* +X0023435D03* +X0026191D03* +X0028947D03* +X0031703D03* +X0034459D03* +X0037215D03* +X0039971D03* +X-0026171D03* +X-0023415D03* +X-0020659D03* +X-0017903D03* +X-0015147D03* +X-0012391D03* +X-0009635D03* +X-000688D03* +X-0004124D03* +X-0001368D03* +X0001388D03* +X0004144D03* +G54D36* +X00409Y0026D03* +Y0016D03* +Y0006D03* +Y-0004D03* +X-00408Y00264D03* +Y00164D03* +Y00064D03* +Y-00036D03* +G54D37* +X00409Y-0014D03* +X-00408Y-00136D03* +M02* \ No newline at end of file diff --git a/hardware/gerber/unisolder52_oled.txt b/hardware/gerber/unisolder52_oled.txt new file mode 100644 index 0000000..9098370 --- /dev/null +++ b/hardware/gerber/unisolder52_oled.txt @@ -0,0 +1,63 @@ +%FSTAX26Y26*% +%MOIN*% +%SFA1B1*% + +%IPPOS*% +%ADD9500C,0.028000*% +%ADD9501C,0.035430*% +%LNunisolder52_oled-1*% +%LPD*% +G54D9500* +X-00486Y-00405D03* +X-00444Y-00323D03* +X-00448Y-00211D03* +X-0017815Y-0018996D03* +X-0002854Y-0018799D03* +X-0008465Y-00125D03* +X0004724Y-0013287D03* +X0018898Y-0010827D03* +X001811Y0002264D03* +X0033957Y0003248D03* +X0033268Y-0007185D03* +X0052067Y-0015354D03* +X00443Y-00262D03* +X0044488Y-0034843D03* +X0046544Y-00416D03* +X0026191Y-0041491D03* +X0016535Y-0041535D03* +X-0002756Y-0041634D03* +X-00177Y-00417D03* +X-00309Y-00416D03* +X-0032579Y0001969D03* +X-0026476Y-0000689D03* +X-00184Y0006D03* +X-001811Y0011909D03* +X-0017421Y0019882D03* +X-0004724Y0019783D03* +X-0001969Y0008169D03* +X000876Y0017618D03* +Y0030217D03* +X-0001969Y0036909D03* +X-00207Y0036D03* +X-00305Y00277D03* +X-0027657Y001565D03* +X-00503Y00211D03* +X-005Y00047D03* +X-00408Y00358D03* +X0022244Y0036909D03* +X00402Y00355D03* +X00508Y00213D03* +X0050984Y0011319D03* +X0024281Y0016298D03* +G54D9501* +X-00408Y-00136D03* +Y-00036D03* +Y00064D03* +Y00164D03* +Y00264D03* +X00409Y0026D03* +Y0016D03* +Y0006D03* +Y-0004D03* +Y-0014D03* +M02* \ No newline at end of file diff --git a/hardware/gerber/unisolder_sensor.gbl b/hardware/gerber/unisolder_sensor.gbl new file mode 100644 index 0000000..0d57c34 --- /dev/null +++ b/hardware/gerber/unisolder_sensor.gbl @@ -0,0 +1,4232 @@ +%FSTAX26Y26*% +%MOIN*% +%SFA1B1*% + +%IPPOS*% +%ADD14C,0.025000*% +%ADD16C,0.150000*% +%ADD18C,0.010000*% +%ADD20C,0.060000*% +%ADD21R,0.059060X0.059060*% +%ADD22C,0.059060*% +%ADD23C,0.314960*% +%ADD24C,0.125200*% +%ADD25C,0.070000*% +%ADD26C,0.050000*% +%LNunisolder_sensor-1*% +%LPD*% +G36* +X0198869Y02203D02* +X0197875D01* +X0197681Y0221266* +X0198674* +X0198869Y02203* +G37* +G36* +X0212D02* +X0210946D01* +X0210507Y022242* +X0210074* +X0209946Y0222415* +X0209836Y0222404* +X0209747Y0222387* +X0209675Y022237* +X0209619Y0222348* +X020958Y0222331* +X0209558Y022232* +X0209552Y0222315* +X0209508Y0222281* +X0209464Y0222237* +X020938Y0222137* +X0209303Y0222026* +X020923Y0221915* +X0209175Y0221815* +X0209153Y0221771* +X0209136Y0221726* +X020912Y0221693* +X0209108Y0221671* +X0209097Y0221654* +Y0221649* +X0209025Y0221482* +X0208959Y0221327* +X0208898Y0221182* +X0208842Y0221049* +X0208798Y0220933* +X0208753Y0220822* +X0208714Y0220722* +X0208676Y0220633* +X0208648Y0220555* +X0208626Y0220483* +X0208603Y0220428* +X0208587Y0220383* +X0208576Y0220344* +X0208565Y0220322* +X0208559Y0220305* +Y02203* +X0207427* +X020751Y02205* +X0207588Y0220689* +X020766Y0220861* +X0207732Y0221027* +X0207804Y0221177* +X0207871Y0221316* +X0207932Y0221443* +X0207987Y0221554* +X0208037Y022166* +X0208082Y0221743* +X0208121Y0221821* +X0208154Y0221882* +X0208182Y0221932* +X0208198Y0221965* +X0208209Y0221987* +X0208215Y0221993* +X0208281Y0222098* +X0208348Y0222193* +X0208415Y0222276* +X020847Y0222348* +X0208526Y0222404* +X0208565Y0222442* +X0208587Y022247* +X0208598Y0222476* +X0208453Y0222498* +X020832Y0222526* +X0208193Y0222559* +X0208076Y0222598* +X0207971Y0222642* +X0207871Y0222687* +X0207788Y0222731* +X0207704Y0222775* +X0207638Y022282* +X0207577Y0222859* +X0207527Y0222897* +X0207482Y0222931* +X0207449Y0222958* +X0207427Y0222981* +X0207416Y0222992* +X020741Y0222997* +X0207338Y022308* +X0207282Y0223169* +X0207227Y0223258* +X0207183Y0223347* +X0207144Y0223436* +X020711Y022353* +X0207088Y0223613* +X0207066Y0223697* +X0207049Y022378* +X0207038Y0223852* +X0207027Y0223913* +X0207022Y0223969* +X0207016Y0224019* +Y0224052* +Y0224074* +Y022408* +X0207027Y0224246* +X0207049Y0224396* +X0207083Y0224523* +X0207116Y022464* +X0207138Y022469* +X0207155Y0224729* +X0207172Y0224768* +X0207188Y0224801* +X0207205Y0224823* +X020721Y022484* +X0207222Y0224851* +Y0224857* +X0207299Y0224968* +X0207388Y0225062* +X0207477Y022514* +X020756Y0225201* +X0207632Y0225245* +X0207693Y0225278* +X0207715Y0225289* +X0207732Y0225295* +X0207743Y0225301* +X0207749* +X020781Y0225323* +X0207882Y0225339* +X0208026Y0225373* +X0208176Y0225395* +X0208326Y0225406* +X0208393Y0225412* +X0208453Y0225417* +X0208515* +X0208559Y0225423* +X0210934* +X0212Y02203* +G37* +G36* +X0204863Y0224085D02* +X0205046Y0224063D01* +X0205218Y0224024* +X0205379Y0223969* +X0205523Y0223907* +X0205656Y0223841* +X0205784Y0223769* +X0205889Y0223697* +X0205989Y0223619* +X0206073Y0223547* +X0206145Y022348* +X0206206Y0223419* +X020625Y0223364* +X0206283Y0223325* +X0206306Y0223303* +X0206311Y0223291* +X0206383Y0223175* +X020645Y0223058* +X0206505Y0222942* +X0206556Y0222825* +X0206594Y0222709* +X0206628Y0222598* +X0206655Y0222492* +X0206678Y0222387* +X02067Y0222292* +X0206711Y0222204* +X0206722Y0222126* +X0206728Y0222059* +Y0222004* +X0206733Y0221965* +Y0221943* +Y0221932* +X0206728Y0221787* +X0206711Y0221654* +X0206689Y0221527* +X0206661Y0221404* +X0206622Y0221293* +X0206583Y0221194* +X0206544Y0221099* +X02065Y022101* +X0206455Y0220933* +X0206417Y0220866* +X0206372Y0220811* +X0206339Y0220766* +X0206311Y0220727* +X0206289Y02207* +X0206272Y0220683* +X0206267Y0220677* +X0206178Y0220594* +X0206078Y0220522* +X0205984Y0220461* +X0205878Y0220406* +X0205779Y0220361* +X0205679Y0220322* +X0205579Y0220289* +X0205484Y0220267* +X0205396Y0220245* +X0205312Y0220233* +X020524Y0220222* +X0205173Y0220211* +X0205123* +X0205085Y0220206* +X0205051* +X0204952Y0220211* +X0204852Y0220217* +X0204668Y022025* +X0204502Y0220289* +X0204424Y0220317* +X0204358Y0220339* +X0204291Y0220367* +X0204236Y0220389* +X0204186Y0220411* +X0204147Y0220433* +X0204113Y022045* +X0204091Y0220461* +X0204075Y0220466* +X0204069Y0220472* +X0203991Y0220528* +X0203914Y0220583* +X0203775Y0220716* +X0203653Y0220849* +X0203553Y0220983* +X0203508Y0221044* +X020347Y0221099* +X0203442Y0221155* +X0203414Y0221199* +X0203392Y0221238* +X0203375Y0221266* +X020337Y0221282* +X0203364Y0221288* +X0204263Y0221438* +X0204319Y0221349* +X020438Y0221266* +X0204441Y0221199* +X0204507Y0221138* +X0204569Y0221088* +X0204635Y0221049* +X0204696Y0221016* +X0204763Y0220988* +X0204818Y0220966* +X0204874Y0220949* +X0204924Y0220938* +X0204963Y0220927* +X0204996* +X0205024Y0220922* +X0205046* +X0205157Y0220933* +X0205257Y0220955* +X0205346Y0220994* +X0205418Y0221033* +X0205479Y0221072* +X0205523Y022111* +X0205551Y0221132* +X0205562Y0221144* +X0205634Y0221232* +X0205684Y0221332* +X0205723Y0221432* +X0205745Y0221527* +X0205762Y0221615* +X0205767Y0221649* +Y0221682* +X0205773Y022171* +Y0221726* +Y0221737* +Y0221743* +Y0221771* +X0205767Y0221804* +Y0221826* +Y0221837* +X0203253* +X0203231Y0221948* +X0203209Y0222059* +X0203198Y022217* +X0203192Y0222276* +X0203187Y0222359* +X0203181Y0222398* +Y0222431* +Y0222459* +Y0222476* +Y0222487* +Y0222492* +X0203187Y0222631* +X0203198Y0222759* +X020322Y0222881* +X0203242Y0222997* +X0203275Y0223097* +X0203309Y0223197* +X0203348Y0223286* +X0203381Y0223364* +X020342Y0223436* +X0203458Y0223497* +X0203492Y0223547* +X0203525Y0223591* +X0203547Y0223624* +X020357Y0223652* +X0203581Y0223663* +X0203586Y0223669* +X0203664Y0223746* +X0203747Y0223808* +X0203836Y0223869* +X0203925Y0223919* +X0204014Y0223957* +X0204102Y0223991* +X0204191Y0224019* +X0204274Y0224041* +X0204358Y0224063* +X020443Y0224074* +X0204496Y0224085* +X0204557Y0224091* +X0204602Y0224096* +X0204668* +X0204863Y0224085* +G37* +G36* +X0190916Y02203D02* +X0189922D01* +X0189728Y0221266* +X0190721* +X0190916Y02203* +G37* +G36* +X0195125Y02291D02* +X0193883D01* +X0193591Y0230481* +X0192731Y0231244* +X0192085Y02291* +X0190829* +X0191829Y0232063* +X0189962Y0233743* +X0191593* +X0193244Y0232154* +X0192543Y0235506* +X0193793* +X0195125Y02291* +G37* +G36* +X0201059Y023384D02* +X0201204Y0233833D01* +X020135Y0233812* +X0201482Y0233791* +X0201607Y0233764* +X0201718Y0233736* +X0201822Y0233701* +X0201919Y0233674* +X0202003Y0233639* +X0202079Y0233604* +X0202141Y0233576* +X020219Y0233548* +X0202232Y0233528* +X0202266Y0233507* +X020228Y02335* +X0202287Y0233493* +X0202384Y0233424* +X0202468Y0233354* +X0202551Y0233278* +X020262Y0233195* +X0202745Y0233035* +X0202849Y0232882* +X0202926Y0232744* +X0202953Y0232681* +X0202974Y0232632* +X0202995Y0232591* +X0203009Y0232556* +X0203016Y0232535* +Y0232528* +X0201794Y0232431* +X020176Y0232515* +X0201725Y0232591* +X0201683Y023266* +X0201635Y0232716* +X0201593Y0232757* +X0201558Y0232785* +X0201538Y0232806* +X0201531Y0232813* +X0201454Y0232861* +X0201364Y0232896* +X0201274Y0232917* +X0201191Y0232938* +X0201114Y0232945* +X0201052Y0232952* +X0200996* +X0200885Y0232945* +X0200788Y0232931* +X0200705Y023291* +X0200636Y0232882* +X0200587Y0232855* +X0200545Y0232834* +X0200524Y023282* +X0200518Y0232813* +X0200462Y0232757* +X020042Y0232702* +X0200393Y0232646* +X0200372Y0232591* +X0200358Y0232542* +X0200351Y0232507* +Y023248* +Y0232473* +Y023241* +X0200365Y0232341* +X0200379Y0232272* +X0200393Y0232202* +X0200406Y0232147* +X020042Y0232098* +X0200427Y023207* +X0200434Y0232056* +X0200497Y0232036* +X0200573Y0232015* +X0200656Y0232001* +X0200746Y023198* +X0200941Y0231952* +X0201142Y0231925* +X0201239Y0231911* +X0201329Y0231904* +X0201413Y0231897* +X0201482Y023189* +X0201545Y0231883* +X0201586Y0231876* +X0201628* +X0201822Y0231855* +X0201996Y0231834* +X0202155Y02318* +X0202308Y0231765* +X020244Y0231723* +X0202565Y0231689* +X0202669Y0231647* +X0202766Y0231605* +X0202849Y0231564* +X0202919Y0231522* +X0202974Y0231487* +X0203023Y0231453* +X0203058Y0231425* +X0203085Y0231411* +X0203099Y0231397* +X0203106Y023139* +X0203175Y0231314* +X0203238Y0231231* +X0203293Y0231147* +X0203342Y0231057* +X0203384Y0230967* +X0203418Y0230884* +X0203467Y023071* +X0203481Y0230634* +X0203495Y0230557* +X0203502Y0230495* +X0203509Y0230439* +X0203516Y0230391* +Y0230356* +Y0230335* +Y0230328* +X0203509Y0230217* +X0203502Y023012* +X020346Y0229926* +X0203398Y0229759* +X0203328Y0229621* +X0203293Y0229565* +X0203259Y0229509* +X0203224Y0229461* +X0203196Y0229426* +X0203175Y0229398* +X0203155Y0229378* +X0203148Y0229364* +X0203141Y0229357* +X0203071Y0229294* +X0202995Y0229232* +X0202912Y0229183* +X0202835Y0229142* +X0202676Y0229072* +X0202523Y0229031* +X0202391Y0229003* +X0202336Y0228996* +X0202287Y0228989* +X0202245Y0228982* +X020219* +X0202058Y0228989* +X0201926Y022901* +X0201801Y0229037* +X020169Y0229065* +X02016Y0229093* +X0201531Y0229121* +X0201503Y0229135* +X0201482Y0229142* +X0201475Y0229149* +X0201468* +X0201336Y0229218* +X0201218Y0229294* +X0201107Y0229371* +X020101Y0229447* +X0200934Y0229516* +X0200878Y0229572* +X0200844Y0229607* +X020083Y0229621* +X0200823Y0229523* +X0200809Y0229426* +X0200795Y0229336* +X0200781Y022926* +X0200767Y022919* +X0200753Y0229142* +X020074Y0229114* +Y02291* +X0199525* +X019956Y0229232* +X0199581Y0229357* +X0199601Y0229468* +X0199608Y0229565* +X0199615Y0229648* +X0199622Y0229711* +Y0229745* +Y0229759* +Y0229829* +X0199615Y0229905* +X0199608Y0229988* +X0199594Y0230079* +X0199567Y0230273* +X0199532Y023046* +X0199518Y0230551* +X0199497Y0230641* +X0199483Y0230717* +X0199469Y0230786* +X0199456Y0230842* +X0199449Y0230884* +X0199442Y0230911* +Y0230918* +X01994Y0231099* +X0199365Y0231258* +X0199338Y0231404* +X019931Y0231536* +X0199282Y0231654* +X0199261Y0231751* +X0199248Y0231841* +X0199227Y0231918* +X019922Y023198* +X0199206Y0232036* +X0199199Y0232077* +X0199192Y0232105* +Y0232133* +X0199185Y0232147* +Y023216* +X0199157Y0232327* +X019915Y0232403* +Y0232473* +X0199143Y0232528* +Y023257* +Y0232598* +Y0232605* +X019915Y0232702* +X0199164Y0232792* +X0199185Y0232882* +X0199213Y0232966* +X0199282Y0233111* +X0199358Y0233243* +X0199435Y0233347* +X0199477Y0233389* +X0199504Y0233424* +X0199532Y0233451* +X0199553Y0233472* +X0199567Y0233479* +X0199574Y0233486* +X0199657Y0233548* +X0199754Y0233604* +X0199858Y0233653* +X0199962Y0233694* +X0200184Y0233757* +X0200399Y0233805* +X0200497Y0233819* +X0200594Y0233826* +X0200677Y0233833* +X0200753Y023384* +X0200816Y0233847* +X0200899* +X0201059Y023384* +G37* +G36* +X0166823Y0225439D02* +X0166934Y0225423D01* +X016704Y02254* +X0167139Y0225373* +X0167239Y0225334* +X0167334Y0225295* +X0167417Y0225251* +X01675Y0225206* +X0167572Y0225162* +X0167633Y0225117* +X0167689Y0225079* +X0167739Y022504* +X0167778Y0225012* +X0167805Y022499* +X0167822Y0224973* +X0167827Y0224968* +X0167922Y0224873* +X0168005Y0224768* +X0168094Y0224662* +X0168172Y0224546* +X016831Y0224307* +X0168371Y0224185* +X0168432Y0224074* +X0168482Y0223963* +X0168527Y0223863* +X0168566Y0223769* +X0168594Y0223691* +X0168621Y0223624* +X0168638Y0223574* +X0168649Y0223541* +X0168655Y0223536* +Y022353* +X0168699Y022338* +X0168738Y0223236* +X0168804Y0222947* +X0168832Y0222814* +X0168849Y0222681* +X0168871Y0222559* +X0168882Y0222448* +X0168893Y0222342* +X0168899Y0222248* +X016891Y0222165* +Y0222093* +X0168915Y0222037* +Y0221993* +Y0221971* +Y0221959* +X016891Y0221804* +X0168899Y022166* +X0168877Y0221521* +X0168854Y0221393* +X0168821Y0221277* +X0168788Y0221171* +X0168754Y0221072* +X0168716Y0220988* +X0168677Y0220911* +X0168643Y0220844* +X016861Y0220788* +X0168577Y0220739* +X0168555Y0220705* +X0168532Y0220677* +X0168521Y0220661* +X0168516Y0220655* +X0168438Y0220578* +X0168355Y0220505* +X0168272Y0220444* +X0168183Y0220394* +X0168094Y022035* +X0168011Y0220317* +X0167927Y0220283* +X016785Y0220261* +X0167772Y0220245* +X0167705Y0220228* +X0167639Y0220222* +X0167589Y0220211* +X0167544* +X0167511Y0220206* +X0167483* +X0167367Y0220211* +X0167256Y0220228* +X016715Y022025* +X0167045Y0220278* +X0166951Y0220317* +X0166856Y0220356* +X0166773Y0220394* +X016669Y0220439* +X0166623Y0220483* +X0166557Y0220522* +X0166501Y0220566* +X0166457Y02206* +X0166418Y0220627* +X016639Y022065* +X0166374Y0220666* +X0166368Y0220672* +X0166279Y0220766* +X016619Y0220866* +X0166107Y0220971* +X0166035Y0221077* +X0165963Y0221188* +X0165896Y0221305* +X0165835Y022141* +X0165785Y0221521* +X0165735Y0221621* +X0165691Y0221715* +X0165657Y0221798* +X016563Y0221871* +X0165602Y0221932* +X0165585Y0221976* +X016558Y0222004* +X0165574Y0222015* +X0165524Y0222176* +X0165474Y0222337* +X0165436Y0222492* +X0165402Y0222648* +X0165375Y0222792* +X0165352Y0222925* +X016533Y0223058* +X0165319Y0223175* +X0165302Y0223286* +X0165297Y0223386* +X0165291Y0223469* +X0165286Y0223541* +X016528Y0223602* +Y0223647* +Y0223669* +Y022368* +X0165286Y0223835* +X0165297Y0223985* +X0165319Y0224118* +X0165341Y0224246* +X0165375Y0224363* +X0165408Y0224474* +X0165447Y0224568* +X016548Y0224657* +X0165519Y0224734* +X0165558Y0224801* +X0165591Y0224862* +X0165624Y0224906* +X0165646Y0224945* +X0165669Y0224968* +X016568Y0224984* +X0165685Y022499* +X0165763Y0225067* +X0165846Y022514* +X0165929Y0225201* +X0166013Y0225251* +X0166102Y0225295* +X0166185Y0225334* +X0166268Y0225362* +X0166346Y0225389* +X0166418Y0225406* +X016649Y0225423* +X0166551Y0225434* +X0166601Y0225439* +X0166645* +X0166679Y0225445* +X0166706* +X0166823Y0225439* +G37* +G36* +X0170919D02* +X0171035Y0225428D01* +X0171147Y0225412* +X0171246Y0225384* +X0171341Y0225356* +X017143Y0225323* +X0171513Y0225289* +X017159Y0225256* +X0171657Y0225217* +X0171718Y0225184* +X0171768Y0225151* +X0171812Y0225123* +X0171846Y0225095* +X0171868Y0225079* +X0171885Y0225067* +X017189Y0225062* +X0171968Y022499* +X017204Y0224906* +X0172101Y0224823* +X0172157Y0224734* +X0172206Y022464* +X0172256Y0224551* +X0172295Y0224463* +X0172329Y0224374* +X0172356Y022429* +X0172379Y0224213* +X0172401Y0224146* +X0172412Y0224085* +X0172429Y0224035* +X0172434Y0224002* +X017244Y0223974* +Y0223969* +X0171463Y0223824* +X0171446Y0223907* +X0171424Y0223985* +X0171407Y0224057* +X0171385Y0224124* +X0171363Y0224185* +X0171341Y0224235* +X0171318Y0224285* +X0171296Y0224324* +X0171257Y022439* +X0171224Y022444* +X0171202Y0224463* +X0171196Y0224474* +X017113Y0224535* +X0171058Y0224579* +X0170985Y0224612* +X0170919Y0224635* +X0170863Y0224646* +X0170819Y0224657* +X017078* +X0170697Y0224651* +X0170619Y0224635* +X0170558Y0224607* +X0170503Y0224579* +X0170458Y0224546* +X0170425Y0224523* +X0170403Y0224501* +X0170397Y0224496* +X0170347Y0224429* +X0170308Y0224363* +X0170281Y022429* +X0170258Y0224224* +X0170247Y0224163* +X0170242Y0224118* +Y0224085* +Y022408* +Y0224074* +X0170247Y0224013* +X0170258Y0223952* +X017027Y0223891* +X0170286Y0223835* +X0170308Y0223785* +X0170319Y0223746* +X0170331Y0223724* +X0170336Y0223713* +X0170375Y0223636* +X0170425Y0223558* +X017048Y0223475* +X0170536Y0223402* +X0170586Y0223336* +X017063Y0223286* +X0170658Y0223253* +X0170664Y0223247* +X0170669Y0223241* +X0170697Y0223208* +X0170736Y0223169* +X017078Y0223125* +X017083Y022308* +X0170935Y022297* +X0171047Y0222864* +X0171152Y0222764* +X0171202Y0222714* +X0171241Y0222675* +X0171274Y0222642* +X0171302Y022262* +X0171318Y0222603* +X0171324Y0222598* +X0171446Y0222481* +X0171563Y022237* +X0171663Y0222265* +X0171757Y0222176* +X0171846Y0222087* +X0171923Y0222009* +X017199Y0221937* +X0172051Y0221876* +X0172107Y0221821* +X0172151Y0221776* +X0172184Y0221737* +X0172218Y0221704* +X017224Y0221682* +X0172256Y0221665* +X0172262Y0221654* +X0172268Y0221649* +X0172362Y0221538* +X0172445Y0221427* +X0172517Y0221316* +X0172578Y0221221* +X0172628Y0221132* +X0172651Y0221099* +X0172667Y0221072* +X0172684Y0221044* +X0172695Y0221027* +X0172701Y0221016* +Y022101* +X0172761Y0220883* +X0172806Y0220755* +X0172845Y0220638* +X0172872Y0220528* +X0172895Y0220433* +X01729Y0220394* +X0172906Y0220361* +X0172911Y0220339* +X0172917Y0220317* +Y0220305* +Y02203* +X0169803* +X0169615Y0221216* +X0171391* +X0171285Y0221343* +X0171241Y0221399* +X0171196Y0221449* +X0171158Y0221488* +X017113Y0221521* +X0171108Y0221543* +X0171102Y0221549* +X0171069Y0221582* +X017103Y0221621* +X0170941Y022171* +X0170836Y022181* +X017073Y0221904* +X0170636Y0221998* +X0170591Y0222037* +X0170558Y022207* +X0170525Y0222104* +X0170503Y0222126* +X0170486Y0222137* +X017048Y0222143* +X0170397Y022222* +X0170319Y0222298* +X0170247Y022237* +X0170181Y0222431* +X017012Y0222492* +X0170064Y0222548* +X0170014Y0222598* +X016997Y0222648* +X0169898Y022272* +X0169848Y0222775* +X016982Y0222809* +X0169809Y022282* +X0169709Y0222942* +X016962Y0223058* +X0169548Y0223169* +X0169493Y0223264* +X0169448Y0223341* +X0169415Y0223408* +X0169404Y022343* +X0169398Y0223447* +X0169393Y0223452* +Y0223458* +X0169348Y0223574* +X016932Y022368* +X0169298Y0223785* +X0169282Y022388* +X0169271Y0223957* +X0169265Y0224019* +Y0224041* +Y0224057* +Y0224063* +Y0224068* +X0169271Y0224179* +X0169282Y0224285* +X0169304Y0224385* +X0169332Y0224474* +X0169359Y0224562* +X0169393Y0224646* +X0169431Y0224718* +X016947Y022479* +X0169509Y0224851* +X0169548Y0224901* +X0169581Y0224951* +X0169609Y0224984* +X0169637Y0225017* +X0169659Y022504* +X016967Y0225051* +X0169676Y0225056* +X0169753Y0225123* +X0169842Y0225184* +X0169931Y0225234* +X0170025Y0225284* +X017012Y0225317* +X0170214Y022535* +X0170303Y0225378* +X0170392Y0225395* +X0170475Y0225412* +X0170553Y0225423* +X0170625Y0225434* +X0170686Y0225439* +X0170736Y0225445* +X0170802* +X0170919Y0225439* +G37* +G36* +X0158975D02* +X0159097Y0225428D01* +X0159208Y02254* +X0159319Y0225373* +X0159419Y0225339* +X0159519Y0225301* +X0159602Y0225262* +X0159686Y0225217* +X0159758Y0225173* +X0159825Y0225134* +X0159874Y0225095* +X0159924Y0225062* +X0159958Y0225034* +X0159985Y0225012* +X0160002Y0224995* +X0160008Y022499* +X0160063Y0224929* +X0160119Y0224862* +X0160213Y0224723* +X0160296Y0224579* +X0160363Y022444* +X0160396Y0224374* +X0160418Y0224313* +X0160441Y0224257* +X0160457Y0224213* +X0160474Y0224174* +X0160485Y0224146* +X0160491Y0224124* +Y0224118* +X0159575Y0223941* +X0159536Y0224074* +X0159492Y0224185* +X0159447Y0224279* +X0159403Y0224357* +X0159364Y0224413* +X015933Y0224451* +X0159308Y0224479* +X0159303Y0224485* +X0159236Y022454* +X015917Y0224579* +X0159103Y0224607* +X0159042Y0224623* +X0158992Y022464* +X0158953Y0224646* +X0158914* +X0158831Y022464* +X0158759Y0224623* +X0158698Y0224596* +X0158642Y0224573* +X0158598Y0224546* +X015857Y0224518* +X0158548Y0224501* +X0158542Y0224496* +X0158493Y022444* +X0158459Y0224374* +X0158431Y0224307* +X0158415Y0224246* +X0158404Y022419* +X0158398Y0224141* +Y0224113* +Y0224107* +Y0224102* +X0158409Y022398* +X0158431Y0223869* +X0158465Y0223774* +X0158503Y0223691* +X0158542Y022363* +X0158576Y0223586* +X0158598Y0223558* +X0158609Y0223547* +X0158698Y022348* +X0158792Y022343* +X0158898Y0223391* +X0158997Y0223369* +X0159086Y0223353* +X0159125Y0223347* +X0159158* +X0159186Y0223341* +X0159264* +X0159292Y0223347* +X0159325* +X0159497Y0222509* +X0159436Y022252* +X0159386Y0222526* +X0159342* +X0159231Y022252* +X0159131Y0222498* +X0159047Y0222464* +X0158975Y0222431* +X015892Y0222398* +X0158881Y0222365* +X0158853Y0222342* +X0158848Y0222337* +X0158787Y0222265* +X0158742Y0222181* +X0158709Y0222098* +X0158687Y0222021* +X0158676Y0221948* +X0158665Y0221893* +Y0221871* +Y022186* +Y0221849* +Y0221843* +X0158676Y0221715* +X0158698Y0221599* +X0158737Y0221499* +X0158775Y022141* +X015882Y0221343* +X0158859Y0221293* +X0158881Y022126* +X0158892Y0221249* +X0158981Y0221171* +X0159075Y0221116* +X0159175Y0221077* +X0159264Y0221049* +X0159342Y0221033* +X0159408Y0221027* +X015943Y0221022* +X0159464* +X0159558Y0221027* +X0159641Y0221044* +X0159708Y0221072* +X0159769Y0221099* +X0159819Y0221127* +X0159852Y0221155* +X0159874Y0221171* +X015988Y0221177* +X0159908Y022121* +X0159935Y0221244* +X015998Y0221332* +X0160013Y0221427* +X0160041Y0221521* +X0160063Y0221604* +X0160074Y0221643* +X016008Y0221676* +X0160085Y0221704* +Y0221726* +X0160091Y0221737* +Y0221743* +X0161051Y0221626* +X0161029Y0221504* +X0161001Y0221388* +X0160973Y0221277* +X0160934Y0221171* +X0160896Y0221077* +X0160851Y0220994* +X0160807Y0220916* +X0160762Y0220844* +X0160718Y0220783* +X0160679Y0220727* +X016064Y0220677* +X0160607Y0220638* +X0160579Y0220611* +X0160557Y0220589* +X0160546Y0220578* +X016054Y0220572* +X0160457Y0220505* +X0160374Y022045* +X0160285Y02204* +X0160196Y0220361* +X0160108Y0220322* +X0160019Y0220294* +X0159847Y022025* +X0159769Y0220239* +X0159697Y0220228* +X015963Y0220217* +X0159575Y0220211* +X015953Y0220206* +X0159469* +X0159308Y0220211* +X0159158Y0220233* +X015902Y0220267* +X0158881Y0220305* +X0158759Y0220356* +X0158642Y0220411* +X0158531Y0220472* +X0158437Y0220533* +X0158348Y0220589* +X0158276Y022065* +X0158209Y0220705* +X0158154Y0220755* +X0158109Y0220794* +X0158082Y0220827* +X015806Y0220849* +X0158054Y0220855* +X0157982Y0220944* +X0157921Y0221038* +X0157865Y0221127* +X0157821Y0221221* +X0157782Y022131* +X0157749Y0221393* +X0157721Y0221477* +X0157699Y0221554* +X0157682Y0221626* +X0157671Y0221693* +X015766Y0221754* +X0157654Y0221804* +X0157649Y0221843* +Y0221871* +Y0221893* +Y0221898* +X0157654Y0222009* +X0157671Y0222109* +X0157699Y0222209* +X0157727Y0222292* +X0157754Y0222365* +X0157782Y022242* +X0157788Y0222437* +X0157799Y0222453* +X0157804Y0222459* +Y0222464* +X0157871Y0222564* +X0157943Y0222653* +X0158021Y0222731* +X0158098Y0222792* +X0158171Y0222847* +X0158226Y0222881* +X0158248Y0222897* +X0158265Y0222908* +X0158276Y0222914* +X0158282* +X0158137Y0222975* +X015801Y0223053* +X0157904Y022313* +X015781Y0223208* +X0157738Y0223275* +X0157688Y0223336* +X0157666Y0223358* +X0157654Y0223369* +X0157643Y022338* +Y0223386* +X0157599Y0223447* +X0157566Y0223508* +X0157504Y0223636* +X015746Y0223758* +X0157432Y0223869* +X0157416Y0223963* +X015741Y0224007* +Y0224041* +X0157405Y0224068* +Y0224091* +Y0224102* +Y0224107* +X015741Y0224207* +X0157421Y0224307* +X0157438Y0224396* +X015746Y0224485* +X0157493Y0224568* +X0157521Y0224646* +X0157554Y0224718* +X0157588Y0224784* +X0157627Y0224845* +X015766Y0224895* +X0157688Y0224945* +X0157715Y0224979* +X0157743Y0225012* +X015776Y0225034* +X0157771Y0225045* +X0157776Y0225051* +X0157849Y0225123* +X0157926Y0225179* +X015801Y0225234* +X0158098Y0225278* +X0158187Y0225317* +X0158276Y022535* +X0158365Y0225373* +X0158448Y0225395* +X0158531Y0225412* +X0158603Y0225423* +X015867Y0225434* +X0158731Y0225439* +X0158781Y0225445* +X0158848* +X0158975Y0225439* +G37* +G36* +X0120241Y0357884D02* +X0120727Y0353118D01* +X0121656Y0348045* +X0122985Y0343062* +X0124704Y03382* +X0126804Y0333489* +X0129271Y032896* +X0132089Y0324641* +X0135241Y0320559* +X0138707Y031674* +X0142465Y0313209* +X0146491Y0309986* +X015076Y0307093* +X0155246Y0304547* +X0159919Y0302366* +X016475Y0300562* +X016971Y0299147* +X0174766Y029813* +X0179886Y0297517* +X0185039Y0297312* +X0190192Y0297517* +X0195313Y029813* +X0200369Y0299147* +X0205328Y0300562* +X021016Y0302366* +X0214833Y0304547* +X0219318Y0307093* +X0223587Y0309986* +X0227614Y0313209* +X0231372Y031674* +X0234838Y0320559* +X023799Y0324641* +X0240808Y032896* +X0243275Y0333489* +X0245375Y03382* +X0247094Y0343062* +X0248423Y0348045* +X0249352Y0353118* +X0249838Y0357884* +X0250236Y0358186* +X0252833Y0357738* +X0255679Y0356784* +X0256059Y0356588* +X0256038Y0356089* +X0255857Y0356014* +X0255021Y0355373* +X025438Y0354537* +X0253977Y0353564* +X0253839Y035252* +X0253977Y0351476* +X025438Y0350502* +X0255021Y0349667* +X0255857Y0349026* +X025683Y0348623* +X0257874Y0348485* +X0258918Y0348623* +X0259891Y0349026* +X0260727Y0349667* +X0261368Y0350502* +X0261771Y0351476* +X0261835Y0351961* +X0262308Y0352122* +X0262905Y035153* +X026469Y0349117* +X0266088Y0346461* +X0267065Y0343623* +X0267599Y0340669* +X0276Y0245* +X02705Y02395* +X0243614* +X0242643Y0239979* +X0240564Y0240685* +X0238411Y0241113* +X0236221Y0241256* +X023403Y0241113* +X0231876Y0240685* +X0229798Y0239979* +X0228827Y02395* +X0141124* +X0140281Y0239916* +X0138202Y0240621* +X0136049Y024105* +X0133858Y0241193* +X0131667Y024105* +X0129514Y0240621* +X0127435Y0239916* +X0126592Y02395* +X00995* +X0094Y0245* +X0102479Y0340669* +X0103014Y0343623* +X0103991Y0346461* +X0105388Y0349117* +X0107173Y035153* +X0109304Y0353644* +X0111732Y0355409* +X01144Y0356784* +X0117246Y0357738* +X0119843Y0358186* +X0120241Y0357884* +G37* +G36* +X019232Y0225312D02* +X019247Y0225179D01* +X0192631Y0225051* +X0192791Y0224929* +X0192958Y0224812* +X0193124Y0224701* +X0193291Y0224601* +X0193446Y0224512* +X0193596Y0224429* +X0193735Y0224352* +X0193857Y022429* +X0193968Y0224235* +X0194057Y022419* +X019409Y0224174* +X0194123Y0224163* +X0194146Y0224152* +X0194162Y0224141* +X0194173Y0224135* +X0194179* +X0194368Y0223241* +X0194246Y0223269* +X0194118Y0223308* +X0193996Y0223347* +X0193885Y0223386* +X0193785Y0223419* +X0193746Y0223436* +X0193707Y0223447* +X0193679Y0223458* +X0193657Y0223469* +X0193646Y0223475* +X0193641* +X0193491Y0223541* +X0193352Y0223602* +X019323Y0223663* +X0193124Y0223724* +X0193041Y0223774* +X0193002Y0223797* +X0192975Y0223813* +X0192952Y0223824* +X0192936Y0223835* +X0192925Y0223847* +X0192919* +X0193657Y02203* +X0192653* +X0191576Y022545* +X0192181* +X019232Y0225312* +G37* +G36* +X0201893Y02203D02* +X0201028D01* +X0198747Y0224013* +X0199829* +X020075Y0222437* +X0200761Y022242* +X0200778Y0222392* +X0200811Y0222331* +X0200856Y0222254* +X02009Y022217* +X0200944Y0222093* +X0200983Y0222026* +X0200994Y0222004* +X0201005Y0221982* +X0201017Y0221971* +Y0221965* +X0201055Y0221893* +X0201089Y0221832* +X0201116Y0221776* +X0201144Y0221732* +X0201166Y0221688* +X0201189Y0221654* +X0201216Y0221593* +X0201239Y022156* +X020125Y0221538* +X0201261Y0221527* +Y0221521* +X0201266Y0221565* +X0201272Y0221621* +X0201283Y0221682* +X0201289Y0221743* +X0201311Y0221887* +X0201333Y0222032* +X0201344Y0222104* +X0201355Y022217* +X0201366Y0222231* +X0201377Y0222281* +X0201383Y0222326* +X0201388Y0222359* +X0201394Y0222381* +Y0222387* +X0201649Y0224013* +X0202632* +X0201893Y02203* +G37* +G36* +X0162494Y0225312D02* +X0162644Y0225179D01* +X0162805Y0225051* +X0162966Y0224929* +X0163132Y0224812* +X0163299Y0224701* +X0163465Y0224601* +X0163621Y0224512* +X016377Y0224429* +X0163909Y0224352* +X0164031Y022429* +X0164142Y0224235* +X0164231Y022419* +X0164265Y0224174* +X0164298Y0224163* +X016432Y0224152* +X0164337Y0224141* +X0164348Y0224135* +X0164353* +X0164542Y0223241* +X016442Y0223269* +X0164292Y0223308* +X016417Y0223347* +X0164059Y0223386* +X0163959Y0223419* +X016392Y0223436* +X0163882Y0223447* +X0163854Y0223458* +X0163831Y0223469* +X0163821Y0223475* +X0163815* +X0163665Y0223541* +X0163526Y0223602* +X0163404Y0223663* +X0163299Y0223724* +X0163215Y0223774* +X0163177Y0223797* +X0163149Y0223813* +X0163127Y0223824* +X016311Y0223835* +X0163099Y0223847* +X0163093* +X0163831Y02203* +X0162827* +X016175Y022545* +X0162355* +X0162494Y0225312* +G37* +G36* +X0186353D02* +X0186503Y0225179D01* +X0186664Y0225051* +X0186825Y0224929* +X0186992Y0224812* +X0187158Y0224701* +X0187325Y0224601* +X018748Y0224512* +X018763Y0224429* +X0187769Y0224352* +X0187891Y022429* +X0188002Y0224235* +X0188091Y022419* +X0188124Y0224174* +X0188157Y0224163* +X0188179Y0224152* +X0188196Y0224141* +X0188207Y0224135* +X0188213* +X0188401Y0223241* +X0188279Y0223269* +X0188152Y0223308* +X018803Y0223347* +X0187919Y0223386* +X0187819Y0223419* +X018778Y0223436* +X0187741Y0223447* +X0187713Y0223458* +X0187691Y0223469* +X018768Y0223475* +X0187674* +X0187524Y0223541* +X0187386Y0223602* +X0187264Y0223663* +X0187158Y0223724* +X0187075Y0223774* +X0187036Y0223797* +X0187008Y0223813* +X0186986Y0223824* +X0186969Y0223835* +X0186958Y0223847* +X0186953* +X0187691Y02203* +X0186686* +X018561Y022545* +X0186215* +X0186353Y0225312* +G37* +G36* +X0188928Y02291D02* +X0188997Y0228947D01* +X0189073Y0228808* +X0189157Y0228691* +X0189233Y0228593* +X0189316Y0228503* +X0189393Y0228434* +X0189469Y0228378* +X0189545Y022833* +X0189615Y0228295* +X0189677Y0228267* +X0189733Y0228246* +X0189781Y0228233* +X0189823Y0228226* +X0189851Y0228219* +X0189878* +X0190038Y0228233* +X0190114Y0228239* +X0190177Y0228253* +X0190232Y0228267* +X0190274Y0228274* +X0190309Y0228288* +X0190316* +X019042Y0227358* +X0190239Y0227309* +X0190073Y0227275* +X018992Y0227247* +X0189788Y0227233* +X0189684Y0227219* +X0189636* +X0189601Y0227212* +X0189532* +X0189386Y0227219* +X0189254Y0227233* +X0189136Y0227261* +X0189039Y0227289* +X0188955Y0227309* +X0188893Y0227337* +X0188858Y0227351* +X0188844Y0227358* +X018874Y022742* +X018865Y0227483* +X0188567Y0227552* +X0188497Y0227615* +X0188435Y022767* +X0188393Y0227719* +X0188365Y0227747* +X0188359Y0227761* +X0188317Y0227816* +X0188275Y0227872* +X0188185Y022801* +X0188088Y0228156* +X0187998Y0228302* +X0187921Y0228434* +X0187887Y0228496* +X0187852Y0228545* +X0187831Y0228586* +X018781Y0228621* +X0187803Y0228642* +X0187796Y0228649* +X018493Y0233743* +X0186256* +X0187366Y0231675* +X0187519Y0231383* +X0187651Y0231106* +X0187713Y0230974* +X0187769Y0230856* +X0187824Y0230738* +X0187866Y0230627* +X0187908Y023053* +X0187942Y0230439* +X0187977Y0230363* +X0187998Y0230301* +X0188019Y0230245* +X0188032Y023021* +X0188046Y0230183* +Y0230176* +X0188053Y0230252* +Y0230335* +X018806Y0230426* +X0188074Y0230523* +X0188095Y0230731* +X0188116Y0230939* +X018813Y0231036* +X0188136Y0231126* +X018815Y023121* +X0188157Y0231279* +X0188164Y0231342* +X0188171Y0231383* +X0188178Y0231418* +Y0231425* +X018849Y0233743* +X0189733* +X0188928Y02291* +G37* +G36* +X0211927Y0235603D02* +X0212114Y0235589D01* +X0212295Y0235561* +X0212461Y0235526* +X0212607Y0235485* +X0212746Y0235443* +X0212878Y0235395* +X0212989Y0235346* +X0213086Y0235291* +X0213176Y0235242* +X0213252Y02352* +X0213308Y0235159* +X0213356Y0235124* +X0213391Y0235096* +X0213412Y0235082* +X0213419Y0235075* +X0213523Y0234971* +X0213613Y0234867* +X021369Y0234756* +X0213759Y0234638* +X0213814Y0234527* +X0213856Y0234416* +X0213898Y0234305* +X0213926Y0234201* +X0213953Y0234104* +X0213974Y0234014* +X0213981Y0233937* +X0213995Y0233868* +Y0233805* +X0214002Y0233764* +Y0233736* +Y0233729* +X0213995Y0233562* +X0213974Y023341* +X0213939Y0233271* +X0213905Y0233153* +X021387Y0233056* +X0213835Y0232986* +X0213828Y0232959* +X0213814Y0232938* +X0213808Y0232931* +Y0232924* +X0213731Y0232799* +X0213641Y0232688* +X0213551Y0232591* +X0213468Y0232515* +X0213391Y0232445* +X0213329Y0232403* +X0213287Y0232369* +X021328Y0232362* +X0213273* +X0213204Y023232* +X0213127Y0232278* +X0212954Y0232188* +X0212773Y0232098* +X02126Y0232008* +X0212517Y0231973* +X0212434Y0231939* +X0212364Y0231904* +X0212302Y0231876* +X0212253Y0231855* +X0212218Y0231834* +X0212191Y0231827* +X0212184Y0231821* +X0212052Y0231765* +X0211927Y0231709* +X0211823Y0231661* +X0211726Y0231612* +X0211635Y0231571* +X0211566Y0231536* +X0211497Y0231501* +X0211441Y0231467* +X0211399Y0231439* +X0211358Y0231418* +X021133Y0231397* +X0211302Y0231383* +X0211275Y0231362* +X0211267Y0231356* +X0211191Y0231279* +X0211129Y0231196* +X0211087Y0231113* +X0211059Y0231036* +X0211046Y0230974* +X0211032Y0230918* +Y0230884* +Y023087* +X0211046Y0230752* +X021108Y0230648* +X0211122Y0230551* +X0211177Y0230467* +X0211233Y0230405* +X0211275Y0230356* +X0211309Y0230328* +X0211323Y0230314* +X0211379Y0230273* +X0211448Y0230238* +X0211587Y0230183* +X0211746Y0230141* +X0211899Y0230113* +X0212038Y0230099* +X02121Y0230092* +X0212156* +X0212197Y0230085* +X021226* +X0212399Y0230092* +X0212524Y0230099* +X0212642Y023012* +X0212753Y0230141* +X021285Y0230162* +X0212933Y0230196* +X021301Y0230224* +X0213079Y0230259* +X0213141Y0230287* +X021319Y0230321* +X0213232Y0230349* +X0213266Y023037* +X0213287Y0230398* +X0213308Y0230412* +X0213315Y0230419* +X0213322Y0230426* +X0213356Y0230467* +X0213384Y0230523* +X0213426Y0230641* +X0213468Y0230772* +X0213488Y0230911* +X0213509Y0231036* +Y0231092* +X0213516Y023114* +X0213523Y0231182* +Y023121* +Y0231231* +Y0231238* +X0214779Y0231168* +X0214772Y0230932* +X0214751Y0230717* +X0214717Y0230523* +X0214696Y0230439* +X0214675Y0230356* +X0214647Y0230287* +X0214627Y0230217* +X0214606Y0230162* +X0214592Y023012* +X0214571Y0230079* +X0214564Y0230051* +X021455Y0230037* +Y023003* +X0214502Y022994* +X0214439Y0229856* +X0214314Y0229704* +X0214169Y0229572* +X021403Y0229461* +X0213898Y0229371* +X0213842Y0229336* +X0213794Y0229308* +X0213752Y0229287* +X0213724Y0229274* +X0213703Y022926* +X0213697* +X0213461Y0229169* +X0213218Y02291* +X0212982Y0229051* +X0212864Y0229031* +X0212753Y0229017* +X0212655Y0229003* +X0212558Y0228996* +X0212475Y0228989* +X0212406* +X021235Y0228982* +X0212267* +X0212052Y0228989* +X0211844Y022901* +X0211649Y0229037* +X0211469Y0229072* +X0211302Y0229121* +X021115Y0229169* +X0211011Y0229225* +X0210886Y022928* +X0210775Y0229336* +X0210678Y0229392* +X0210594Y022944* +X0210525Y0229489* +X0210469Y0229523* +X0210428Y0229551* +X0210407Y0229572* +X02104Y0229579* +X0210282Y0229697* +X0210178Y0229815* +X0210088Y022994* +X0210011Y0230058* +X0209942Y0230183* +X0209893Y0230301* +X0209845Y0230419* +X020981Y023053* +X0209782Y0230634* +X0209762Y0230731* +X0209748Y0230814* +X0209734Y023089* +Y0230946* +X0209727Y0230995* +Y0231022* +Y0231029* +X0209734Y0231154* +X0209748Y0231272* +X0209769Y023139* +X0209796Y0231494* +X0209831Y0231592* +X0209873Y0231689* +X0209907Y0231772* +X0209949Y0231848* +X0209998Y0231918* +X0210032Y023198* +X0210074Y0232029* +X0210109Y0232077* +X0210136Y0232112* +X0210157Y0232133* +X0210171Y0232147* +X0210178Y0232154* +X021024Y0232209* +X0210324Y0232272* +X0210421Y0232334* +X0210525Y0232403* +X0210643Y0232466* +X0210761Y0232528* +X0210997Y0232653* +X0211115Y0232709* +X0211219Y0232764* +X0211323Y0232813* +X0211406Y0232855* +X0211483Y0232882* +X0211538Y023291* +X0211573Y0232924* +X0211587Y0232931* +X0211719Y0232986* +X0211837Y0233042* +X0211948Y0233097* +X0212045Y0233146* +X0212135Y0233188* +X0212211Y0233229* +X0212281Y0233264* +X0212336Y0233299* +X0212385Y0233333* +X0212434Y0233354* +X0212468Y0233382* +X0212489Y0233396* +X0212524Y0233424* +X0212538Y0233431* +X0212607Y02335* +X0212655Y0233576* +X0212697Y0233653* +X0212718Y0233729* +X0212732Y0233791* +X0212739Y023384* +X0212746Y0233875* +Y0233889* +X0212739Y0233993* +X0212711Y023409* +X0212676Y0234173* +X0212628Y0234243* +X0212586Y0234298* +X0212551Y023434* +X0212524Y0234367* +X0212517Y0234374* +X0212468Y0234409* +X0212413Y0234437* +X0212295Y0234485* +X0212163Y023452* +X0212038Y0234548* +X021192Y0234562* +X0211864* +X0211823Y0234569* +X0211733* +X0211538Y0234555* +X0211365Y0234527* +X0211226Y0234492* +X0211101Y0234444* +X0211011Y0234395* +X0210948Y0234361* +X0210907Y0234333* +X0210893Y0234319* +X0210796Y0234222* +X0210719Y0234104* +X0210664Y0233993* +X0210622Y0233875* +X0210587Y0233778* +X0210574Y0233694* +X0210567Y023366* +X021056Y0233639* +Y0233625* +Y0233618* +X0209297Y0233674* +X0209317Y0233833* +X0209345Y0233986* +X020938Y0234125* +X0209428Y0234263* +X0209484Y0234388* +X020954Y0234499* +X0209602Y023461* +X0209658Y0234701* +X020972Y0234791* +X0209775Y023486* +X0209831Y023493* +X0209879Y0234978* +X0209921Y023502* +X0209949Y0235054* +X020997Y0235068* +X0209977Y0235075* +X0210095Y0235173* +X0210226Y0235249* +X0210365Y0235325* +X0210511Y0235388* +X0210657Y0235436* +X0210803Y0235478* +X0210941Y0235513* +X021108Y023554* +X0211212Y0235568* +X0211337Y0235582* +X0211441Y0235596* +X0211538Y0235603* +X0211614Y023561* +X0211726* +X0211927Y0235603* +G37* +G36* +X016529Y02291D02* +X0164048D01* +X0162708Y0235506* +X0163958* +X016529Y02291* +G37* +G36* +X0171258Y0235603D02* +X0171411Y0235582D01* +X0171543Y0235554* +X0171654Y0235526* +X0171744Y0235499* +X0171807Y0235471* +X0171848Y023545* +X0171855Y0235443* +X0171862* +X0171966Y0235374* +X0172056Y0235304* +X0172126Y0235228* +X0172188Y0235159* +X0172237Y0235096* +X0172272Y0235048* +X0172292Y0235013* +X0172299Y0234999* +X017232Y0234957* +X0172341Y0234909* +X0172383Y0234791* +X0172417Y0234666* +X0172452Y0234534* +X0172487Y0234409* +X0172501Y0234354* +X0172508Y0234312* +X0172515Y023427* +X0172521Y0234243* +X0172529Y0234222* +Y0234215* +X0172633Y0233743* +X0173327* +X0173521Y0232827* +X017282* +X0173597Y02291* +X0172355* +X0171578Y0232827* +X0170676* +X0170481Y0233743* +X0171383* +X0171314Y0234062* +X0171286Y0234187* +X0171258Y0234291* +X0171231Y0234374* +X017121Y0234437* +X0171196Y0234478* +X0171182Y0234506* +X0171168Y023452* +Y0234527* +X0171127Y0234576* +X0171071Y023461* +X0171022Y0234631* +X0170967Y0234652* +X0170925Y0234659* +X0170884Y0234666* +X0170849* +X0170738Y0234659* +X0170613Y0234638* +X0170488Y0234617* +X0170377Y023459* +X0170273Y0234555* +X0170224Y0234541* +X017019Y0234534* +X0170155Y023452* +X0170134Y0234513* +X017012Y0234506* +X0170113* +X016987Y0235402* +X0170106Y0235471* +X0170328Y023552* +X0170537Y0235561* +X0170627Y0235575* +X0170717Y0235582* +X01708Y0235596* +X017087* +X0170932Y0235603* +X0170988Y023561* +X0171085* +X0171258Y0235603* +G37* +G36* +X0182085D02* +X0182272Y0235589D01* +X0182453Y0235561* +X0182619Y0235526* +X0182765Y0235485* +X0182904Y0235443* +X0183036Y0235395* +X0183147Y0235346* +X0183244Y0235291* +X0183334Y0235242* +X018341Y02352* +X0183466Y0235159* +X0183514Y0235124* +X0183549Y0235096* +X018357Y0235082* +X0183577Y0235075* +X0183681Y0234971* +X0183771Y0234867* +X0183848Y0234756* +X0183917Y0234638* +X0183973Y0234527* +X0184014Y0234416* +X0184056Y0234305* +X0184084Y0234201* +X0184111Y0234104* +X0184132Y0234014* +X0184139Y0233937* +X0184153Y0233868* +Y0233805* +X018416Y0233764* +Y0233736* +Y0233729* +X0184153Y0233562* +X0184132Y023341* +X0184097Y0233271* +X0184063Y0233153* +X0184028Y0233056* +X0183993Y0232986* +X0183986Y0232959* +X0183973Y0232938* +X0183966Y0232931* +Y0232924* +X0183889Y0232799* +X0183799Y0232688* +X0183709Y0232591* +X0183625Y0232515* +X0183549Y0232445* +X0183487Y0232403* +X0183445Y0232369* +X0183438Y0232362* +X0183431* +X0183362Y023232* +X0183285Y0232278* +X0183112Y0232188* +X0182931Y0232098* +X0182758Y0232008* +X0182675Y0231973* +X0182591Y0231939* +X0182522Y0231904* +X018246Y0231876* +X0182411Y0231855* +X0182376Y0231834* +X0182349Y0231827* +X0182342Y0231821* +X018221Y0231765* +X0182085Y0231709* +X0181981Y0231661* +X0181884Y0231612* +X0181793Y0231571* +X0181724Y0231536* +X0181655Y0231501* +X0181599Y0231467* +X0181557Y0231439* +X0181516Y0231418* +X0181488Y0231397* +X018146Y0231383* +X0181432Y0231362* +X0181425Y0231356* +X0181349Y0231279* +X0181287Y0231196* +X0181245Y0231113* +X0181217Y0231036* +X0181203Y0230974* +X018119Y0230918* +Y0230884* +Y023087* +X0181203Y0230752* +X0181238Y0230648* +X018128Y0230551* +X0181335Y0230467* +X0181391Y0230405* +X0181432Y0230356* +X0181467Y0230328* +X0181481Y0230314* +X0181537Y0230273* +X0181606Y0230238* +X0181745Y0230183* +X0181904Y0230141* +X0182057Y0230113* +X0182196Y0230099* +X0182258Y0230092* +X0182314* +X0182355Y0230085* +X0182418* +X0182557Y0230092* +X0182682Y0230099* +X01828Y023012* +X0182911Y0230141* +X0183008Y0230162* +X0183091Y0230196* +X0183168Y0230224* +X0183237Y0230259* +X0183299Y0230287* +X0183348Y0230321* +X018339Y0230349* +X0183424Y023037* +X0183445Y0230398* +X0183466Y0230412* +X0183473Y0230419* +X018348Y0230426* +X0183514Y0230467* +X0183542Y0230523* +X0183584Y0230641* +X0183625Y0230772* +X0183646Y0230911* +X0183667Y0231036* +Y0231092* +X0183674Y023114* +X0183681Y0231182* +Y023121* +Y0231231* +Y0231238* +X0184937Y0231168* +X018493Y0230932* +X0184909Y0230717* +X0184875Y0230523* +X0184854Y0230439* +X0184833Y0230356* +X0184805Y0230287* +X0184784Y0230217* +X0184764Y0230162* +X018475Y023012* +X0184729Y0230079* +X0184722Y0230051* +X0184708Y0230037* +Y023003* +X018466Y022994* +X0184597Y0229856* +X0184472Y0229704* +X0184327Y0229572* +X0184188Y0229461* +X0184056Y0229371* +X0184Y0229336* +X0183952Y0229308* +X018391Y0229287* +X0183882Y0229274* +X0183861Y022926* +X0183854* +X0183619Y0229169* +X0183376Y02291* +X018314Y0229051* +X0183022Y0229031* +X0182911Y0229017* +X0182814Y0229003* +X0182716Y0228996* +X0182633Y0228989* +X0182564* +X0182508Y0228982* +X0182425* +X018221Y0228989* +X0182002Y022901* +X0181807Y0229037* +X0181627Y0229072* +X018146Y0229121* +X0181308Y0229169* +X0181169Y0229225* +X0181044Y022928* +X0180933Y0229336* +X0180836Y0229392* +X0180752Y022944* +X0180683Y0229489* +X0180627Y0229523* +X0180586Y0229551* +X0180565Y0229572* +X0180558Y0229579* +X018044Y0229697* +X0180336Y0229815* +X0180246Y022994* +X0180169Y0230058* +X01801Y0230183* +X0180051Y0230301* +X0180003Y0230419* +X0179968Y023053* +X017994Y0230634* +X017992Y0230731* +X0179906Y0230814* +X0179892Y023089* +Y0230946* +X0179885Y0230995* +Y0231022* +Y0231029* +X0179892Y0231154* +X0179906Y0231272* +X0179927Y023139* +X0179954Y0231494* +X0179989Y0231592* +X0180031Y0231689* +X0180065Y0231772* +X0180107Y0231848* +X0180156Y0231918* +X018019Y023198* +X0180232Y0232029* +X0180267Y0232077* +X0180294Y0232112* +X0180315Y0232133* +X0180329Y0232147* +X0180336Y0232154* +X0180398Y0232209* +X0180482Y0232272* +X0180579Y0232334* +X0180683Y0232403* +X0180801Y0232466* +X0180919Y0232528* +X0181155Y0232653* +X0181273Y0232709* +X0181377Y0232764* +X0181481Y0232813* +X0181564Y0232855* +X0181641Y0232882* +X0181696Y023291* +X0181731Y0232924* +X0181745Y0232931* +X0181877Y0232986* +X0181995Y0233042* +X0182106Y0233097* +X0182203Y0233146* +X0182293Y0233188* +X0182369Y0233229* +X0182439Y0233264* +X0182494Y0233299* +X0182543Y0233333* +X0182591Y0233354* +X0182626Y0233382* +X0182647Y0233396* +X0182682Y0233424* +X0182696Y0233431* +X0182765Y02335* +X0182814Y0233576* +X0182855Y0233653* +X0182876Y0233729* +X018289Y0233791* +X0182897Y023384* +X0182904Y0233875* +Y0233889* +X0182897Y0233993* +X0182869Y023409* +X0182834Y0234173* +X0182786Y0234243* +X0182744Y0234298* +X0182709Y023434* +X0182682Y0234367* +X0182675Y0234374* +X0182626Y0234409* +X0182571Y0234437* +X0182453Y0234485* +X0182321Y023452* +X0182196Y0234548* +X0182078Y0234562* +X0182022* +X0181981Y0234569* +X018189* +X0181696Y0234555* +X0181523Y0234527* +X0181384Y0234492* +X0181259Y0234444* +X0181169Y0234395* +X0181106Y0234361* +X0181065Y0234333* +X0181051Y0234319* +X0180954Y0234222* +X0180877Y0234104* +X0180822Y0233993* +X018078Y0233875* +X0180745Y0233778* +X0180731Y0233694* +X0180725Y023366* +X0180718Y0233639* +Y0233625* +Y0233618* +X0179455Y0233674* +X0179475Y0233833* +X0179503Y0233986* +X0179538Y0234125* +X0179586Y0234263* +X0179642Y0234388* +X0179698Y0234499* +X017976Y023461* +X0179815Y0234701* +X0179878Y0234791* +X0179933Y023486* +X0179989Y023493* +X0180037Y0234978* +X0180079Y023502* +X0180107Y0235054* +X0180128Y0235068* +X0180135Y0235075* +X0180253Y0235173* +X0180385Y0235249* +X0180523Y0235325* +X0180669Y0235388* +X0180815Y0235436* +X0180961Y0235478* +X0181099Y0235513* +X0181238Y023554* +X018137Y0235568* +X0181495Y0235582* +X0181599Y0235596* +X0181696Y0235603* +X0181772Y023561* +X0181884* +X0182085Y0235603* +G37* +G36* +X0205722Y023384D02* +X0205854Y0233826D01* +X0205979Y0233805* +X0206083Y0233778* +X0206174Y023375* +X0206243Y0233729* +X0206264Y0233722* +X0206285Y0233715* +X0206292Y0233708* +X0206298* +X0206423Y0233653* +X0206548Y0233583* +X0206666Y0233507* +X0206777Y0233431* +X0206868Y0233368* +X0206944Y0233313* +X0206972Y0233285* +X0206993Y0233271* +X0206999Y0233264* +X0207006Y0233257* +X0206909Y0233743* +X0208089* +X0209428Y022733* +X0208186* +X0207686Y0229725* +X0207596Y0229593* +X0207492Y0229482* +X0207381Y0229378* +X020727Y0229294* +X0207152Y0229225* +X0207034Y0229163* +X0206923Y0229114* +X0206812Y0229072* +X0206708Y0229045* +X0206611Y0229024* +X0206521Y0229003* +X0206444Y0228996* +X0206382Y0228989* +X0206333Y0228982* +X0206292* +X0206125Y0228989* +X0205965Y0229017* +X0205813Y0229051* +X0205667Y02291* +X0205528Y0229155* +X0205403Y0229218* +X0205285Y022928* +X0205174Y022935* +X0205077Y0229419* +X0204994Y0229482* +X0204917Y0229544* +X0204855Y02296* +X0204806Y0229648* +X0204765Y0229683* +X0204744Y0229711* +X0204737Y0229718* +X0204598Y0229884* +X020448Y0230058* +X0204383Y0230238* +X0204293Y0230419* +X0204217Y0230592* +X0204154Y0230772* +X0204105Y0230939* +X0204064Y0231106* +X0204029Y0231258* +X0204008Y0231397* +X0203988Y0231522* +X020398Y0231633* +X0203974Y0231723* +X0203967Y0231786* +Y0231827* +Y0231841* +X0203974Y0232022* +X0203988Y0232195* +X0204008Y0232348* +X0204036Y0232501* +X0204071Y0232632* +X0204105Y0232757* +X0204147Y0232868* +X0204189Y0232966* +X020423Y0233056* +X0204272Y0233132* +X0204307Y0233195* +X0204341Y023325* +X0204369Y0233285* +X020439Y0233319* +X0204404Y0233333* +X0204411Y023334* +X0204494Y0233431* +X0204591Y0233507* +X0204681Y0233576* +X0204779Y0233632* +X0204883Y023368* +X020498Y0233722* +X020507Y0233757* +X020516Y0233785* +X0205251Y0233805* +X0205327Y0233819* +X0205403Y0233833* +X0205466Y023384* +X0205514Y0233847* +X0205584* +X0205722Y023384* +G37* +G36* +X0155907Y0233104D02* +X0155997Y0233236D01* +X0156102Y0233347* +X0156212Y0233451* +X0156331Y0233535* +X0156448Y0233604* +X0156567Y0233666* +X0156684Y0233715* +X0156796Y0233757* +X0156906Y0233785* +X0157004Y0233805* +X0157094Y0233826* +X015717Y0233833* +X015724Y023384* +X0157288Y0233847* +X015733* +X0157524Y023384* +X0157705Y0233805* +X0157871Y0233764* +X0158038Y0233708* +X0158184Y0233639* +X0158322Y0233562* +X0158454Y0233479* +X0158565Y0233396* +X0158669Y0233313* +X0158759Y0233229* +X0158836Y0233153* +X0158898Y0233084* +X0158947Y0233028* +X0158988Y0232986* +X0159009Y0232952* +X0159016Y0232945* +X0159127Y0232771* +X0159224Y0232598* +X0159308Y0232424* +X0159384Y0232251* +X015944Y0232077* +X0159495Y0231911* +X0159537Y0231751* +X0159572Y0231598* +X0159592Y0231453* +X0159613Y0231328* +X0159627Y023121* +X0159641Y0231113* +Y0231036* +X0159648Y0230974* +Y0230939* +Y0230925* +X0159641Y0230752* +X0159627Y0230585* +X0159606Y0230433* +X0159578Y0230294* +X0159544Y0230162* +X0159509Y0230044* +X0159467Y0229933* +X0159426Y0229836* +X0159384Y0229752* +X0159343Y0229676* +X0159308Y0229614* +X0159273Y0229558* +X0159245Y0229516* +X0159224Y0229489* +X0159211Y0229475* +X0159204Y0229468* +X0159113Y0229384* +X0159023Y0229308* +X0158926Y0229246* +X0158829Y022919* +X0158732Y0229142* +X0158635Y02291* +X0158544Y0229065* +X0158454Y0229045* +X0158364Y0229024* +X0158288Y022901* +X0158218Y0228996* +X0158156Y0228989* +X0158107Y0228982* +X0158038* +X0157885Y0228989* +X0157746Y0229003* +X0157621Y0229024* +X015751Y0229051* +X015742Y0229079* +X0157351Y02291* +X015733Y0229107* +X0157309Y0229114* +X0157302Y0229121* +X0157295* +X015717Y0229183* +X0157045Y022926* +X0156934Y0229336* +X015683Y0229412* +X015674Y0229482* +X0156677Y0229537* +X015665Y0229565* +X0156629Y0229579* +X0156622Y0229586* +X0156615Y0229593* +X0156719Y02291* +X0155539* +X0154138Y0235506* +X0155387* +X0155907Y0233104* +G37* +G36* +X0176575Y023384D02* +X0176783Y0233812D01* +X0176977Y0233778* +X0177157Y0233729* +X0177331Y0233666* +X0177484Y0233604* +X0177629Y0233535* +X0177761Y0233465* +X0177879Y0233389* +X0177983Y0233319* +X0178067Y0233257* +X0178143Y0233195* +X0178198Y0233146* +X017824Y0233111* +X0178268Y0233084* +X0178275Y0233077* +X01784Y0232924* +X0178511Y0232764* +X0178608Y0232598* +X0178691Y0232431* +X0178761Y0232258* +X0178823Y0232084* +X0178865Y0231918* +X0178906Y0231758* +X0178934Y0231605* +X0178955Y0231467* +X0178976Y0231342* +X0178983Y0231231* +X017899Y023114* +X0178997Y0231071* +Y0231029* +Y0231022* +Y0231015* +X0178983Y0230814* +X0178955Y023062* +X017892Y0230446* +X0178872Y0230294* +X0178851Y0230224* +X017883Y0230162* +X0178809Y0230113* +X0178788Y0230065* +X0178774Y023003* +X0178761Y0230002* +X0178754Y0229988* +Y0229981* +X0178649Y0229815* +X0178532Y0229662* +X0178407Y0229537* +X0178282Y0229433* +X0178171Y022935* +X0178122Y0229315* +X017808Y0229287* +X0178046Y0229267* +X0178018Y0229253* +X0178004Y0229239* +X0177997* +X0177803Y0229155* +X0177602Y0229093* +X0177407Y0229045* +X0177227Y0229017* +X0177144Y0229003* +X0177067Y0228996* +X0176998Y0228989* +X0176942* +X0176894Y0228982* +X0176831* +X0176609Y0228989* +X0176401Y0229017* +X0176207Y0229058* +X0176019Y0229107* +X0175846Y0229169* +X0175693Y0229239* +X0175547Y0229315* +X0175416Y0229392* +X0175297Y0229468* +X0175193Y0229544* +X0175103Y0229614* +X0175034Y0229676* +X0174978Y0229725* +X0174937Y0229766* +X0174909Y0229794* +X0174902Y0229801* +X0174777Y0229961* +X0174666Y023012* +X0174569Y0230287* +X0174486Y0230453* +X0174416Y023062* +X0174354Y023078* +X0174305Y0230939* +X017427Y0231085* +X0174243Y0231224* +X0174215Y0231349* +X0174201Y0231467* +X0174194Y0231564* +X0174187Y023164* +X017418Y0231702* +Y0231737* +Y0231751* +X0174187Y0231925* +X0174208Y0232091* +X0174236Y0232251* +X017427Y0232397* +X0174312Y0232528* +X0174368Y0232653* +X0174416Y0232771* +X0174472Y0232875* +X0174527Y0232966* +X0174576Y0233049* +X0174624Y0233118* +X0174673Y0233174* +X0174708Y0233222* +X0174735Y023325* +X0174756Y0233271* +X0174763Y0233278* +X0174874Y0233375* +X0174999Y0233465* +X0175124Y0233542* +X0175256Y0233604* +X0175388Y023366* +X017552Y0233708* +X0175652Y0233743* +X0175776Y0233778* +X0175894Y0233798* +X0176005Y0233819* +X0176103Y0233833* +X0176193Y023384* +X0176262* +X0176311Y0233847* +X0176359* +X0176575Y023384* +G37* +G36* +X0161522Y0234478D02* +X0161674Y0233743D01* +X0162285* +X0162479Y0232813* +X0161862* +X0162264Y0230939* +X0162292Y02308* +X016232Y0230675* +X016234Y0230564* +X0162354Y023046* +X0162368Y023037* +X0162382Y0230287* +X0162396Y0230217* +X0162403Y0230155* +X016241Y0230106* +X0162417Y0230065* +Y023003* +X0162424Y0230002* +Y0229981* +Y0229967* +Y0229954* +X0162417Y022987* +X016241Y0229794* +X0162375Y0229648* +X0162327Y0229523* +X0162271Y0229426* +X0162223Y0229343* +X0162174Y0229287* +X0162139Y0229253* +X0162125Y0229239* +X0162063Y0229197* +X0161994Y0229155* +X0161848Y0229093* +X0161681Y0229045* +X0161522Y0229017* +X0161383Y0228996* +X016132Y0228989* +X0161265* +X0161216Y0228982* +X0161029* +X0160904Y0228996* +X0160793Y0229003* +X0160696Y0229017* +X0160606Y0229031* +X0160543Y0229037* +X0160501Y0229051* +X0160488* +X0160293Y0229981* +X0160411Y0229967* +X0160501Y0229961* +X0160578Y0229954* +X0160633* +X0160675Y0229947* +X0160717* +X01608Y0229954* +X0160869Y0229961* +X0160925Y0229974* +X0160973Y0229988* +X0161008Y0230002* +X0161029Y0230009* +X0161043Y0230023* +X016105* +X0161077Y0230058* +X0161098Y0230092* +X0161126Y0230169* +X0161133Y0230204* +X016114Y0230231* +Y0230245* +Y0230252* +Y0230273* +X0161133Y0230301* +X0161126Y0230335* +X0161119Y0230377* +X0161105Y0230474* +X0161084Y0230585* +X0161064Y0230682* +X0161043Y0230772* +X0161036Y0230807* +Y0230835* +X0161029Y0230849* +Y0230856* +X0160612Y0232813* +X0159849* +X0159655Y0233743* +X0160425* +X0160092Y0235346* +X0161522Y0234478* +G37* +G36* +X0169468D02* +X0169621Y0233743D01* +X0170231* +X0170426Y0232813* +X0169808* +X0170211Y0230939* +X0170238Y02308* +X0170266Y0230675* +X0170287Y0230564* +X0170301Y023046* +X0170315Y023037* +X0170328Y0230287* +X0170342Y0230217* +X0170349Y0230155* +X0170356Y0230106* +X0170363Y0230065* +Y023003* +X017037Y0230002* +Y0229981* +Y0229967* +Y0229954* +X0170363Y022987* +X0170356Y0229794* +X0170322Y0229648* +X0170273Y0229523* +X0170217Y0229426* +X0170169Y0229343* +X017012Y0229287* +X0170086Y0229253* +X0170072Y0229239* +X0170009Y0229197* +X016994Y0229155* +X0169794Y0229093* +X0169627Y0229045* +X0169468Y0229017* +X0169329Y0228996* +X0169267Y0228989* +X0169211* +X0169163Y0228982* +X0168975* +X016885Y0228996* +X0168739Y0229003* +X0168642Y0229017* +X0168552Y0229031* +X0168489Y0229037* +X0168448Y0229051* +X0168434* +X0168239Y0229981* +X0168358Y0229967* +X0168448Y0229961* +X0168524Y0229954* +X016858* +X0168621Y0229947* +X0168663* +X0168746Y0229954* +X0168816Y0229961* +X0168871Y0229974* +X016892Y0229988* +X0168954Y0230002* +X0168975Y0230009* +X0168989Y0230023* +X0168996* +X0169024Y0230058* +X0169045Y0230092* +X0169072Y0230169* +X0169079Y0230204* +X0169086Y0230231* +Y0230245* +Y0230252* +Y0230273* +X0169079Y0230301* +X0169072Y0230335* +X0169065Y0230377* +X0169052Y0230474* +X0169031Y0230585* +X016901Y0230682* +X0168989Y0230772* +X0168982Y0230807* +Y0230835* +X0168975Y0230849* +Y0230856* +X0168559Y0232813* +X0167795* +X0167601Y0233743* +X0168371* +X0168038Y0235346* +X0169468Y0234478* +G37* +G36* +X0195423Y0233833D02* +X0195562Y0233805D01* +X0195701Y0233757* +X0195826Y0233687* +X0195951Y0233611* +X0196069Y0233528* +X019618Y0233437* +X0196277Y023334* +X0196374Y0233243* +X0196451Y0233153* +X0196527Y023307* +X0196589Y0232993* +X0196638Y0232931* +X0196673Y0232875* +X0196694Y0232848* +X0196701Y0232834* +X0196513Y0233743* +X0197686* +X0198651Y02291* +X0197408* +X0197103Y0230551* +X0197068Y023071* +X0197034Y0230863* +X0196999Y0231002* +X0196971Y0231126* +X0196936Y0231244* +X0196909Y0231349* +X0196881Y0231446* +X0196853Y0231529* +X0196825Y0231605* +X0196805Y0231668* +X0196784Y0231723* +X019677Y0231765* +X0196756Y02318* +X0196742Y0231821* +X0196735Y0231834* +Y0231841* +X0196659Y0231987* +X0196569Y0232119* +X0196485Y023223* +X0196395Y023232* +X0196326Y0232397* +X0196263Y0232452* +X0196222Y023248* +X0196215Y0232494* +X0196208* +X0196083Y0232577* +X0195965Y0232639* +X0195854Y0232681* +X019575Y0232716* +X0195666Y023273* +X0195604Y0232737* +X0195562Y0232744* +X0195548* +X019541Y0232737* +X0195347Y0232723* +X0195292Y0232716* +X0195243Y0232702* +X0195208Y0232688* +X0195188Y0232681* +X0195181* +X0194702Y0233708* +X0194813Y0233757* +X0194924Y0233791* +X0195021Y0233812* +X0195111Y0233833* +X0195181Y023384* +X0195236Y0233847* +X0195285* +X0195423Y0233833* +G37* +%LNunisolder_sensor-2*% +%LPC*% +G36* +X0206111Y0232952D02* +X0206076D01* +X0205938Y0232938* +X0205813Y023291* +X0205702Y0232861* +X0205611Y0232813* +X0205535Y0232757* +X020548Y0232709* +X0205452Y0232681* +X0205438Y0232667* +X0205355Y0232556* +X0205292Y0232424* +X0205251Y0232292* +X0205216Y0232168* +X0205202Y0232049* +X0205195Y0232001* +Y0231952* +X0205188Y0231918* +Y023189* +Y0231876* +Y0231869* +X0205195Y0231702* +X0205216Y0231529* +X0205251Y0231369* +X0205285Y0231217* +X0205306Y0231147* +X020532Y0231085* +X0205334Y0231036* +X0205355Y0230988* +X0205362Y0230946* +X0205376Y0230918* +X0205382Y0230904* +Y0230897* +X0205459Y0230717* +X0205535Y0230564* +X0205618Y0230433* +X0205695Y0230328* +X0205757Y0230245* +X0205813Y023019* +X0205847Y0230162* +X0205861Y0230148* +X0205965Y0230072* +X0206076Y0230023* +X0206174Y0229981* +X0206264Y0229954* +X0206347Y022994* +X0206403Y0229933* +X0206444Y0229926* +X0206458* +X0206527Y0229933* +X020659Y022994* +X0206708Y0229974* +X0206812Y0230023* +X0206902Y0230079* +X0206979Y0230127* +X0207034Y0230176* +X0207069Y023021* +X0207083Y0230224* +X0207173Y0230349* +X0207235Y0230488* +X0207284Y0230627* +X0207312Y0230766* +X0207333Y023089* +X020734Y0230939* +Y0230988* +X0207346Y0231022* +Y0231057* +Y0231071* +Y0231078* +X020734Y0231224* +X0207319Y0231369* +X0207298Y0231515* +X0207263Y0231647* +X0207235Y0231765* +X0207222Y0231814* +X0207215Y0231855* +X0207201Y023189* +X0207194Y0231918* +X0207187Y0231931* +Y0231939* +X0207117Y0232112* +X0207048Y0232265* +X0206972Y0232397* +X0206895Y0232507* +X0206833Y0232591* +X0206777Y0232646* +X0206743Y0232681* +X0206729Y0232695* +X0206618Y0232778* +X02065Y0232841* +X0206389Y0232889* +X0206292Y0232917* +X0206201Y0232938* +X0206139Y0232945* +X0206111Y0232952* +G37* +G36* +X0224Y02485D02* +X0217254D01* +X0217345Y0247577* +X021776Y0246208* +X0218435Y0244947* +X0219342Y0243842* +X0220447Y0242934* +X0221708Y024226* +X0223077Y0241845* +X0224Y0241754* +Y02485* +G37* +G36* +X0176401Y0232903D02* +X0176359D01* +X0176214Y0232889* +X0176075Y0232861* +X0175964Y023282* +X0175867Y0232771* +X017579Y0232716* +X0175735Y0232674* +X01757Y0232646* +X0175686Y0232632* +X0175596Y0232521* +X0175533Y0232403* +X0175485Y0232285* +X0175457Y0232174* +X0175436Y023207* +X0175429Y0231994* +X0175422Y0231959* +Y0231939* +Y0231925* +Y0231918* +X0175429Y0231751* +X0175443Y0231592* +X0175471Y0231439* +X0175499Y02313* +X017554Y0231161* +X0175582Y0231036* +X0175624Y0230925* +X0175672Y0230814* +X0175721Y0230724* +X0175762Y0230634* +X0175804Y0230564* +X0175846Y0230502* +X0175873Y0230453* +X0175901Y0230419* +X0175915Y0230398* +X0175922Y0230391* +X0175991Y0230314* +X0176061Y0230245* +X017613Y023019* +X0176207Y0230141* +X0176283Y0230099* +X0176352Y0230058* +X0176491Y0230009* +X0176609Y0229974* +X0176658Y0229967* +X0176706Y0229961* +X0176741Y0229954* +X017679* +X0176935Y0229967* +X0177067Y0230002* +X0177185Y0230044* +X0177282Y0230099* +X0177366Y0230155* +X0177421Y0230196* +X0177456Y0230231* +X017747Y0230245* +X017756Y0230363* +X0177629Y0230495* +X0177671Y0230627* +X0177706Y0230752* +X0177726Y0230863* +X0177734Y0230911* +Y0230953* +X017774Y0230988* +Y0231015* +Y0231029* +Y0231036* +X0177734Y0231189* +X0177713Y0231342* +X0177685Y0231494* +X017765Y0231626* +X0177622Y0231744* +X0177609Y0231793* +X0177595Y0231834* +X0177581Y0231869* +X0177574Y0231897* +X0177567Y0231911* +Y0231918* +X0177497Y0232084* +X0177414Y0232237* +X0177338Y0232362* +X0177261Y0232459* +X0177192Y0232542* +X017713Y0232598* +X0177095Y0232632* +X0177081Y0232646* +X0176956Y023273* +X0176831Y0232792* +X0176713Y0232841* +X0176602Y0232868* +X0176505Y0232889* +X0176429Y0232896* +X0176401Y0232903* +G37* +G36* +X0204807Y022338D02* +X0204779D01* +X0204668Y0223369* +X0204569Y0223347* +X0204485Y0223314* +X0204413Y0223275* +X0204358Y0223236* +X0204319Y0223203* +X0204291Y0223181* +X0204286Y0223169* +X0204224Y0223086* +X0204174Y0222986* +X0204141Y0222881* +X0204119Y0222781* +X0204108Y0222692* +X0204102Y0222653* +X0204097Y0222614* +Y0222587* +Y0222564* +Y0222553* +Y0222548* +Y022252* +Y0222487* +Y0222459* +Y0222453* +Y0222448* +X0205667* +X0205629Y0222609* +X0205579Y0222753* +X0205523Y022287* +X0205468Y022297* +X0205418Y0223042* +X0205373Y0223097* +X0205346Y022313* +X0205334Y0223142* +X020529Y0223186* +X020524Y0223219* +X0205146Y022328* +X0205051Y0223325* +X0204963Y0223353* +X020489Y0223369* +X0204829Y0223375* +X0204807Y022338* +G37* +G36* +X0166756Y0224646D02* +X0166745D01* +X0166668Y022464* +X0166601Y0224618* +X016654Y022459* +X016649Y0224562* +X0166451Y0224529* +X0166418Y0224501* +X0166401Y0224479* +X0166396Y0224474* +X0166351Y0224401* +X0166318Y0224313* +X016629Y0224224* +X0166274Y022413* +X0166262Y0224046* +X0166257Y022398* +Y0223957* +Y0223935* +Y0223924* +Y0223919* +Y0223824* +X0166262Y0223724* +X0166285Y0223519* +X0166312Y0223303* +X0166329Y0223197* +X0166346Y0223097* +X0166368Y0223003* +X0166384Y0222914* +X0166396Y0222836* +X0166412Y0222764* +X0166423Y0222709* +X0166435Y0222664* +X016644Y0222642* +Y0222631* +X0166484Y0222448* +X0166529Y0222281* +X0166573Y0222126* +X0166618Y0221987* +X0166662Y022186* +X0166706Y0221748* +X0166745Y0221649* +X0166784Y0221565* +X0166823Y0221488* +X0166856Y0221427* +X0166884Y0221371* +X0166912Y0221332* +X0166934Y0221299* +X0166951Y0221277* +X0166956Y0221266* +X0166962Y022126* +X0167001Y0221216* +X0167045Y0221177* +X0167128Y022111* +X0167217Y0221066* +X0167295Y0221038* +X0167361Y0221016* +X0167411Y022101* +X0167434Y0221005* +X0167461* +X0167539Y022101* +X0167605Y0221033* +X0167661Y022106* +X0167711Y0221088* +X016775Y0221121* +X0167783Y0221144* +X01678Y0221166* +X0167805Y0221171* +X0167827Y0221205* +X016785Y0221244* +X0167883Y0221332* +X0167905Y0221427* +X0167922Y0221527* +X0167933Y0221615* +Y0221654* +X0167939Y0221688* +Y0221715* +Y0221737* +Y0221748* +Y0221754* +Y0221854* +X0167933Y0221959* +X0167911Y0222176* +X0167877Y0222398* +X0167861Y0222503* +X0167844Y0222609* +X0167827Y0222703* +X0167811Y0222792* +X0167794Y022287* +X0167778Y0222942* +X0167766Y0222997* +X0167755Y0223042* +X016775Y0223064* +Y0223075* +X0167705Y0223247* +X0167661Y0223402* +X0167617Y0223547* +X0167572Y0223674* +X0167528Y0223797* +X0167483Y0223902* +X0167445Y0223996* +X01674Y022408* +X0167367Y0224157* +X0167328Y0224218* +X01673Y0224268* +X0167273Y0224313* +X016725Y0224346* +X0167234Y0224368* +X0167228Y0224379* +X0167223Y0224385* +X0167184Y0224429* +X0167139Y0224474* +X0167056Y0224535* +X0166978Y0224585* +X0166906Y0224612* +X016684Y0224635* +X016679Y022464* +X0166756Y0224646* +G37* +G36* +X0210057Y0224568D02* +X0208814D01* +X0208737Y0224562* +X020867* +X0208603Y0224557* +X0208548Y0224546* +X0208504Y022454* +X0208459Y0224535* +X020842Y0224523* +X0208359Y0224507* +X020832Y0224496* +X0208298Y0224485* +X0208293Y0224479* +X0208215Y0224424* +X0208159Y0224357* +X0208121Y0224285* +X0208093Y0224218* +X0208076Y0224157* +X0208071Y0224107* +X0208065Y0224074* +Y0224068* +Y0224063* +X0208071Y0223974* +X0208087Y0223891* +X0208115Y0223813* +X0208143Y0223741* +X0208176Y0223686* +X0208198Y0223641* +X020822Y0223613* +X0208226Y0223602* +X0208287Y0223524* +X0208359Y0223464* +X0208431Y0223408* +X0208498Y0223364* +X0208565Y022333* +X0208614Y0223303* +X0208648Y0223291* +X0208653Y0223286* +X0208659* +X0208714Y0223269* +X0208787Y0223253* +X0208864Y0223241* +X0208953Y022323* +X0209136Y0223208* +X0209325Y0223197* +X0209419* +X0209503Y0223192* +X020958* +X0209647Y0223186* +X0210346* +X0210057Y0224568* +G37* +G36* +X0200608Y0231258D02* +X0200601D01* +X0200636Y0231092* +X020067Y0230932* +X0200712Y0230786* +X0200746Y0230675* +X0200781Y0230578* +X0200816Y0230502* +X0200837Y0230453* +X0200851Y0230419* +X0200857Y0230412* +X0200906Y0230335* +X0200969Y0230266* +X0201031Y0230204* +X0201087Y0230155* +X0201142Y0230113* +X0201191Y0230085* +X0201218Y0230065* +X0201232Y0230058* +X0201329Y0230016* +X020142Y0229981* +X020151Y0229961* +X0201593Y022994* +X0201663Y0229933* +X0201718Y0229926* +X0201767* +X0201857Y0229933* +X020194Y0229947* +X020201Y0229974* +X0202072Y0230002* +X0202121Y0230023* +X0202155Y0230051* +X0202176Y0230065* +X0202183Y0230072* +X0202232Y0230134* +X0202273Y0230196* +X0202301Y0230252* +X0202315Y0230314* +X0202329Y0230363* +X0202336Y0230405* +Y0230433* +Y0230439* +X0202329Y0230537* +X0202301Y023062* +X0202273Y0230689* +X0202232Y0230752* +X0202197Y02308* +X0202162Y0230835* +X0202141Y0230856* +X0202134Y0230863* +X0202072Y0230904* +X0201996Y0230939* +X0201912Y0230974* +X0201815Y0231009* +X0201614Y0231064* +X0201406Y0231113* +X0201309Y0231133* +X0201212Y0231147* +X0201128Y0231161* +X0201052Y0231175* +X0200989Y0231182* +X0200941Y0231189* +X0200913Y0231196* +X0200899* +X020083Y023121* +X0200774Y0231217* +X0200719Y0231231* +X0200677Y0231238* +X0200642Y0231244* +X0200622Y0231251* +X0200608Y0231258* +G37* +G36* +X0157184Y0232924D02* +X0157094D01* +X0157025Y023291* +X0156906Y0232875* +X0156802Y0232827* +X0156712Y0232771* +X0156636Y0232709* +X015658Y023266* +X0156546Y0232626* +X0156532Y0232619* +Y0232612* +X0156441Y0232487* +X0156372Y0232355* +X0156324Y0232216* +X0156289Y0232084* +X0156268Y0231973* +X0156261Y0231918* +Y0231876* +X0156254Y0231841* +Y0231814* +Y02318* +Y0231793* +X0156261Y0231626* +X0156282Y0231467* +X015631Y0231307* +X0156344Y0231168* +X0156379Y023105* +X0156393Y0230995* +X0156407Y0230953* +X0156421Y0230918* +X0156428Y023089* +X0156435Y0230877* +Y023087* +X0156504Y0230703* +X015658Y0230557* +X0156657Y0230433* +X0156733Y0230335* +X0156802Y0230252* +X0156858Y0230196* +X0156893Y0230169* +X01569Y0230155* +X0156906* +X0157018Y0230079* +X0157135Y0230023* +X015724Y0229981* +X0157344Y0229954* +X0157427Y022994* +X015749Y0229933* +X0157517Y0229926* +X0157552* +X0157684Y022994* +X0157802Y0229967* +X0157913Y0230016* +X0158003Y0230065* +X0158072Y0230113* +X0158128Y0230162* +X0158163Y023019* +X0158177Y0230204* +X015826Y0230314* +X0158322Y0230439* +X0158364Y0230571* +X0158392Y0230696* +X0158413Y0230807* +X0158419Y0230856* +Y0230897* +X0158426Y0230932* +Y023096* +Y0230974* +Y0230981* +X0158419Y0231113* +X0158413Y0231244* +X0158371Y0231487* +X0158315Y0231716* +X0158281Y0231814* +X0158246Y0231911* +X0158218Y0232001* +X0158184Y0232077* +X0158156Y023214* +X0158128Y0232202* +X0158107Y0232244* +X0158086Y0232278* +X0158079Y0232299* +X0158072Y0232306* +X0158003Y0232417* +X0157927Y0232507* +X015785Y0232591* +X0157774Y023266* +X0157698Y0232723* +X0157621Y0232771* +X0157552Y0232813* +X0157476Y0232848* +X0157413Y0232875* +X0157351Y0232889* +X0157295Y0232903* +X0157247Y0232917* +X0157212* +X0157184Y0232924* +G37* +G36* +X0231746Y02485D02* +X0225D01* +Y0241754* +X0225923Y0241845* +X0227292Y024226* +X0228553Y0242934* +X0229658Y0243842* +X0230566Y0244947* +X023124Y0246208* +X0231655Y0247577* +X0231746Y02485* +G37* +G36* +X0224Y02885D02* +X0217254D01* +X0217345Y0287577* +X021776Y0286208* +X0218435Y0284947* +X0219342Y0283842* +X0220447Y0282934* +X0221708Y028226* +X0223077Y0281845* +X0224Y0281754* +Y02885* +G37* +G36* +X02495Y0286039D02* +X0248325Y0285884D01* +X0247231Y0285431* +X0246291Y0284709* +X0245569Y0283769* +X0245116Y0282675* +X0244961Y02815* +X0245116Y0280325* +X0245569Y0279231* +X0246291Y0278291* +X0247231Y0277569* +X0248325Y0277116* +X02495Y0276961* +X0250675Y0277116* +X0251769Y0277569* +X0252709Y0278291* +X0253431Y0279231* +X0253884Y0280325* +X0254039Y02815* +X0253884Y0282675* +X0253431Y0283769* +X0252709Y0284709* +X0251769Y0285431* +X0250675Y0285884* +X02495Y0286039* +G37* +G36* +X0224Y0296246D02* +X0223077Y0296155D01* +X0221708Y029574* +X0220447Y0295065* +X0219342Y0294158* +X0218435Y0293053* +X021776Y0291792* +X0217345Y0290423* +X0217254Y02895* +X0224* +Y0296246* +G37* +G36* +X0231746Y02885D02* +X0225D01* +Y0281754* +X0225923Y0281845* +X0227292Y028226* +X0228553Y0282934* +X0229658Y0283842* +X0230566Y0284947* +X023124Y0286208* +X0231655Y0287577* +X0231746Y02885* +G37* +G36* +X02595Y0281039D02* +X0258325Y0280884D01* +X0257231Y0280431* +X0256291Y0279709* +X0255569Y0278769* +X0255116Y0277675* +X0254961Y02765* +X0255116Y0275325* +X0255569Y0274231* +X0256291Y0273291* +X0257231Y0272569* +X0258325Y0272116* +X02595Y0271961* +X0260675Y0272116* +X0261769Y0272569* +X0262709Y0273291* +X0263431Y0274231* +X0263884Y0275325* +X0264039Y02765* +X0263884Y0277675* +X0263431Y0278769* +X0262709Y0279709* +X0261769Y0280431* +X0260675Y0280884* +X02595Y0281039* +G37* +G36* +X0253973Y0271D02* +X025D01* +Y0267027* +X0250675Y0267116* +X0251769Y0267569* +X0252709Y0268291* +X0253431Y0269231* +X0253884Y0270325* +X0253973Y0271* +G37* +G36* +X025Y0275973D02* +Y0272D01* +X0253973* +X0253884Y0272675* +X0253431Y0273769* +X0252709Y0274709* +X0251769Y0275431* +X0250675Y0275884* +X025Y0275973* +G37* +G36* +X0249D02* +X0248325Y0275884D01* +X0247231Y0275431* +X0246291Y0274709* +X0245569Y0273769* +X0245116Y0272675* +X0245027Y0272* +X0249* +Y0275973* +G37* +G36* +X0257374Y0346488D02* +X025683Y0346417D01* +X0255857Y0346014* +X0255021Y0345373* +X025438Y0344537* +X0253977Y0343564* +X0253905Y034302* +X0257374* +Y0346488* +G37* +G36* +X0261843Y034202D02* +X0258374D01* +Y0338551* +X0258918Y0338623* +X0259891Y0339026* +X0260727Y0339667* +X0261368Y0340502* +X0261771Y0341476* +X0261843Y034202* +G37* +G36* +X0114173Y0351554D02* +X0113129Y0351417D01* +X0112156Y0351014* +X011132Y0350373* +X0110679Y0349537* +X0110276Y0348564* +X0110139Y034752* +X0110276Y0346476* +X0110679Y0345502* +X011132Y0344667* +X0112156Y0344026* +X0113129Y0343623* +X0114173Y0343485* +X0115217Y0343623* +X0116191Y0344026* +X0117026Y0344667* +X0117667Y0345502* +X011807Y0346476* +X0118208Y034752* +X011807Y0348564* +X0117667Y0349537* +X0117026Y0350373* +X0116191Y0351014* +X0115217Y0351417* +X0114173Y0351554* +G37* +G36* +X0258374Y0346488D02* +Y034302D01* +X0261843* +X0261771Y0343564* +X0261368Y0344537* +X0260727Y0345373* +X0259891Y0346014* +X0258918Y0346417* +X0258374Y0346488* +G37* +G36* +X0257874Y0336554D02* +X025683Y0336417D01* +X0255857Y0336014* +X0255021Y0335372* +X025438Y0334537* +X0253977Y0333564* +X0253839Y033252* +X0253977Y0331475* +X025438Y0330502* +X0255021Y0329667* +X0255857Y0329026* +X025683Y0328623* +X0257874Y0328485* +X0258918Y0328623* +X0259891Y0329026* +X0260727Y0329667* +X0261368Y0330502* +X0261771Y0331475* +X0261909Y033252* +X0261771Y0333564* +X0261368Y0334537* +X0260727Y0335372* +X0259891Y0336014* +X0258918Y0336417* +X0257874Y0336554* +G37* +G36* +X0225Y0296246D02* +Y02895D01* +X0231746* +X0231655Y0290423* +X023124Y0291792* +X0230566Y0293053* +X0229658Y0294158* +X0228553Y0295065* +X0227292Y029574* +X0225923Y0296155* +X0225Y0296246* +G37* +G36* +X0257374Y034202D02* +X0253905D01* +X0253977Y0341476* +X025438Y0340502* +X0255021Y0339667* +X0255857Y0339026* +X025683Y0338623* +X0257374Y0338551* +Y034202* +G37* +G36* +X0114173Y0341554D02* +X0113129Y0341417D01* +X0112156Y0341014* +X011132Y0340372* +X0110679Y0339537* +X0110276Y0338564* +X0110139Y033752* +X0110276Y0336475* +X0110679Y0335502* +X011132Y0334667* +X0112156Y0334026* +X0113129Y0333623* +X0114173Y0333485* +X0115217Y0333623* +X0116191Y0334026* +X0117026Y0334667* +X0117667Y0335502* +X011807Y0336475* +X0118208Y033752* +X011807Y0338564* +X0117667Y0339537* +X0117026Y0340372* +X0116191Y0341014* +X0115217Y0341417* +X0114173Y0341554* +G37* +G36* +X0249Y0271D02* +X0245027D01* +X0245116Y0270325* +X0245569Y0269231* +X0246291Y0268291* +X0247231Y0267569* +X0248325Y0267116* +X0249Y0267027* +Y0271* +G37* +G36* +X0125Y0255D02* +X0121579D01* +X0121649Y0254468* +X0122047Y0253507* +X0122681Y0252681* +X0123507Y0252047* +X0124468Y0251649* +X0125Y0251579* +Y0255* +G37* +G36* +X0149453Y0259453D02* +X0141547D01* +Y0251547* +X0149453* +Y0259453* +G37* +G36* +X02595Y0261039D02* +X0258325Y0260884D01* +X0257231Y0260431* +X0256291Y0259709* +X0255569Y0258769* +X0255116Y0257675* +X0254961Y02565* +X0255116Y0255325* +X0255569Y0254231* +X0256291Y0253291* +X0257231Y0252569* +X0258325Y0252116* +X02595Y0251961* +X0260675Y0252116* +X0261769Y0252569* +X0262709Y0253291* +X0263431Y0254231* +X0263884Y0255325* +X0264039Y02565* +X0263884Y0257675* +X0263431Y0258769* +X0262709Y0259709* +X0261769Y0260431* +X0260675Y0260884* +X02595Y0261039* +G37* +G36* +X0129421Y0255D02* +X0126D01* +Y0251579* +X0126532Y0251649* +X0127493Y0252047* +X0128319Y0252681* +X0128953Y0253507* +X0129351Y0254468* +X0129421Y0255* +G37* +G36* +X0225Y0256246D02* +Y02495D01* +X0231746* +X0231655Y0250423* +X023124Y0251792* +X0230566Y0253053* +X0229658Y0254158* +X0228553Y0255065* +X0227292Y025574* +X0225923Y0256155* +X0225Y0256246* +G37* +G36* +X0224D02* +X0223077Y0256155D01* +X0221708Y025574* +X0220447Y0255065* +X0219342Y0254158* +X0218435Y0253053* +X021776Y0251792* +X0217345Y0250423* +X0217254Y02495* +X0224* +Y0256246* +G37* +G36* +X01155Y0259487D02* +X0114468Y0259351D01* +X0113507Y0258953* +X0112681Y0258319* +X0112047Y0257493* +X0111649Y0256532* +X0111513Y02555* +X0111649Y0254468* +X0112047Y0253507* +X0112681Y0252681* +X0113507Y0252047* +X0114468Y0251649* +X01155Y0251513* +X0116532Y0251649* +X0117493Y0252047* +X0118319Y0252681* +X0118953Y0253507* +X0119351Y0254468* +X0119487Y02555* +X0119351Y0256532* +X0118953Y0257493* +X0118319Y0258319* +X0117493Y0258953* +X0116532Y0259351* +X01155Y0259487* +G37* +G36* +X01055D02* +X0104468Y0259351D01* +X0103507Y0258953* +X0102681Y0258319* +X0102047Y0257493* +X0101649Y0256532* +X0101513Y02555* +X0101649Y0254468* +X0102047Y0253507* +X0102681Y0252681* +X0103507Y0252047* +X0104468Y0251649* +X01055Y0251513* +X0106532Y0251649* +X0107493Y0252047* +X0108319Y0252681* +X0108953Y0253507* +X0109351Y0254468* +X0109487Y02555* +X0109351Y0256532* +X0108953Y0257493* +X0108319Y0258319* +X0107493Y0258953* +X0106532Y0259351* +X01055Y0259487* +G37* +G36* +X0263973Y0266D02* +X026D01* +Y0262027* +X0260675Y0262116* +X0261769Y0262569* +X0262709Y0263291* +X0263431Y0264231* +X0263884Y0265325* +X0263973Y0266* +G37* +G36* +X0259D02* +X0255027D01* +X0255116Y0265325* +X0255569Y0264231* +X0256291Y0263291* +X0257231Y0262569* +X0258325Y0262116* +X0259Y0262027* +Y0266* +G37* +G36* +X026Y0270973D02* +Y0267D01* +X0263973* +X0263884Y0267675* +X0263431Y0268769* +X0262709Y0269709* +X0261769Y0270431* +X0260675Y0270884* +X026Y0270973* +G37* +G36* +X0259D02* +X0258325Y0270884D01* +X0257231Y0270431* +X0256291Y0269709* +X0255569Y0268769* +X0255116Y0267675* +X0255027Y0267* +X0259* +Y0270973* +G37* +G36* +X0126Y0259421D02* +Y0256D01* +X0129421* +X0129351Y0256532* +X0128953Y0257493* +X0128319Y0258319* +X0127493Y0258953* +X0126532Y0259351* +X0126Y0259421* +G37* +G36* +X0125D02* +X0124468Y0259351D01* +X0123507Y0258953* +X0122681Y0258319* +X0122047Y0257493* +X0121649Y0256532* +X0121579Y0256* +X0125* +Y0259421* +G37* +G36* +X02495Y0266039D02* +X0248325Y0265884D01* +X0247231Y0265431* +X0246291Y0264709* +X0245569Y0263769* +X0245116Y0262675* +X0244961Y02615* +X0245116Y0260325* +X0245569Y0259231* +X0246291Y0258291* +X0247231Y0257569* +X0248325Y0257116* +X02495Y0256961* +X0250675Y0257116* +X0251769Y0257569* +X0252709Y0258291* +X0253431Y0259231* +X0253884Y0260325* +X0254039Y02615* +X0253884Y0262675* +X0253431Y0263769* +X0252709Y0264709* +X0251769Y0265431* +X0250675Y0265884* +X02495Y0266039* +G37* +G36* +X01515Y0265794D02* +X01379D01* +X0137022Y0265619* +X0136278Y0265122* +X0133878Y0262722* +X013338Y0261978* +X0133206Y02611* +Y0258722* +X0132681Y0258319* +X0132047Y0257493* +X0131649Y0256532* +X0131513Y02555* +X0131649Y0254468* +X0132047Y0253507* +X0132681Y0252681* +X0133507Y0252047* +X0134468Y0251649* +X01355Y0251513* +X0136532Y0251649* +X0137493Y0252047* +X0138319Y0252681* +X0138953Y0253507* +X0139351Y0254468* +X0139487Y02555* +X0139351Y0256532* +X0138953Y0257493* +X0138319Y0258319* +X0137794Y0258722* +Y026015* +X013885Y0261206* +X015055* +X0151503Y0260253* +X015147Y026* +X015159Y0259086* +X0151943Y0258235* +X0152504Y0257504* +X0153235Y0256943* +X0154086Y025659* +X0155Y025647* +X0155914Y025659* +X0156765Y0256943* +X0157496Y0257504* +X0158057Y0258235* +X015841Y0259086* +X015853Y026* +X015841Y0260914* +X0158057Y0261765* +X0157496Y0262496* +X0156765Y0263057* +X0155914Y026341* +X0155Y026353* +X0154747Y0263497* +X0153122Y0265122* +X0152378Y0265619* +X01515Y0265794* +G37* +%LNunisolder_sensor-3*% +%LPD*% +G54D14* +X01355Y02555D02* +Y02611D01* +X01379Y02635* +X01515* +X0155Y026* +G54D16* +X022275Y0289D02* +X022625D01* +X022275Y0249D02* +X022625D01* +G54D18* +X0087795Y0219291D02* +X0089Y0233D01* +X00878Y02193D02* +X0102Y02051D01* +X01165* +X0253594Y0205074D02* +X0268094D01* +X0282294Y0219274* +X0281098Y0232974D02* +X0282303Y0219265D01* +X0119Y03621D02* +X0124Y03623D01* +X01242Y03575* +X02461Y03623D02* +X02511Y03621D01* +X02459Y03575D02* +X02461Y03623D01* +G54D20* +X0114173Y033752D03* +Y034752D03* +X0257874Y033252D03* +Y034252D03* +Y035252D03* +G54D21* +X01455Y02555D03* +G54D22* +X01355Y02555D03* +X01255D03* +X01155D03* +X01055D03* +G54D23* +X0236221Y0224472D03* +X0133858Y022441D03* +G54D24* +X02245Y0289D03* +Y0249D03* +G54D25* +X02495Y02815D03* +X02595Y02765D03* +X02495Y02715D03* +X02595Y02665D03* +X02495Y02615D03* +X02595Y02565D03* +G54D26* +X0192Y02537D03* +X0164Y02569D03* +X00993Y02615D03* +X01722Y02861D03* +X02456Y03321D03* +X02246Y03065D03* +X02061Y02969D03* +X021Y02828D03* +X0105Y0335D03* +X0127Y03241D03* +X01423Y0295D03* +X01626Y02957D03* +X021Y0255D03* +X01969Y02726D03* +X02233Y02685D03* +X0256Y02872D03* +X02414Y03018D03* +X025Y032D03* +X02645Y03239D03* +X02625Y03022D03* +X01247Y02949D03* +X01183Y0313D03* +X01042Y03101D03* +X01015Y02805D03* +X01851Y02622D03* +X0172Y02623D03* +X026Y0245D03* +X024D03* +X02D03* +X016D03* +X014D03* +X012D03* +X01D03* +X0116Y02783D03* +X01105Y0266D03* +X01215Y02635D03* +X0138Y027D03* +X0129921Y0271654D03* +X0155Y026D03* +M02* \ No newline at end of file diff --git a/hardware/gerber/unisolder_sensor.gbo b/hardware/gerber/unisolder_sensor.gbo new file mode 100644 index 0000000..01ecf98 --- /dev/null +++ b/hardware/gerber/unisolder_sensor.gbo @@ -0,0 +1,59 @@ +%FSTAX26Y26*% +%MOIN*% +%SFA1B1*% + +%IPPOS*% +%ADD18C,0.010000*% +%ADD27C,0.008000*% +%LNunisolder_sensor-1*% +%LPD*% +G54D18* +X02045Y02955D02* +X02195D01* +X02295D02* +X0265D01* +X02295Y02425D02* +X0265D01* +X02045D02* +X02195D01* +X02045D02* +Y02955D01* +X0265Y02425D02* +Y02955D01* +X0087799Y0219283D02* +X0089003Y0232991D01* +X0087803Y0219291D02* +X0102003Y0205091D01* +X0116503* +X0253601D02* +X0268101D01* +X0282301Y0219291* +X0281101Y0232991D02* +X0282306Y0219283D01* +X0119Y03621D02* +X0124Y03623D01* +X01242Y03575* +X02461Y03623D02* +X02511Y03621D01* +X02459Y03575D02* +X02461Y03623D01* +G54D27* +X0262034Y0302799D02* +X0263367D01* +X0262701* +Y0299466* +X0263367Y02988* +X0264034* +X02647Y0299466* +X0260701D02* +X0260035Y02988D01* +X0258702* +X0258035Y0299466* +Y0302132* +X0258702Y0302799* +X0260035* +X0260701Y0302132* +Y0301466* +X0260035Y0300799* +X0258035* +M02* \ No newline at end of file diff --git a/hardware/gerber/unisolder_sensor.gbs b/hardware/gerber/unisolder_sensor.gbs new file mode 100644 index 0000000..f3147e2 --- /dev/null +++ b/hardware/gerber/unisolder_sensor.gbs @@ -0,0 +1,58 @@ +%FSTAX26Y26*% +%MOIN*% +%SFA1B1*% + +%IPPOS*% +%ADD18C,0.010000*% +%ADD34C,0.068000*% +%ADD35R,0.067060X0.067060*% +%ADD36C,0.067060*% +%ADD37C,0.322960*% +%ADD38C,0.078000*% +%ADD39R,0.630000X0.180000*% +%LNunisolder_sensor-1*% +%LPD*% +G54D18* +X0087801Y0219265D02* +X0089006Y0232974D01* +X0087802Y0219274D02* +X0102002Y0205074D01* +X0116502* +X0253598Y0205083D02* +X0268098D01* +X0282298Y0219283* +X0281098Y0232983D02* +X0282302Y0219274D01* +X0124Y03623D02* +X01242Y03575D01* +X0119Y03621D02* +X0124Y03623D01* +X01242Y03575* +X02461Y03623D02* +X02511Y03621D01* +G54D34* +X0114173Y033752D03* +Y034752D03* +X0257874Y033252D03* +Y034252D03* +Y035252D03* +G54D35* +X01455Y02555D03* +G54D36* +X01355Y02555D03* +X01255D03* +X01155D03* +X01055D03* +G54D37* +X0236221Y0224472D03* +X0133858Y022441D03* +G54D38* +X02495Y02815D03* +X02595Y02765D03* +X02495Y02715D03* +X02595Y02665D03* +X02495Y02615D03* +X02595Y02565D03* +G54D39* +X01844Y02276D03* +M02* \ No newline at end of file diff --git a/hardware/gerber/unisolder_sensor.gko b/hardware/gerber/unisolder_sensor.gko new file mode 100644 index 0000000..3b21ccf --- /dev/null +++ b/hardware/gerber/unisolder_sensor.gko @@ -0,0 +1,81 @@ +%FSTAX26Y26*% +%MOIN*% +%SFA1B1*% + +%IPPOS*% +%ADD18C,0.010000*% +%LNunisolder_sensor-1*% +%LPD*% +G54D18* +X026811Y0205118D02* +X0282283Y0219291D01* +X0101969Y0205118D02* +X026811D01* +X0087795Y0219291D02* +X0101969Y0205118D01* +X0087795Y0219291D02* +X009856Y0341045D01* +X0099091Y0344163* +X0100033Y0347182* +X010137Y0350048* +X0103078Y0352711* +X0105127Y035512* +X0107479Y0357235* +X0110092Y0359017* +X011292Y0360433* +X0115912Y0361459* +X0119014Y0362076* +X0122171Y0362273* +X0124016* +X0124224Y0357234* +X0124848Y0352229* +X0125883Y0347292* +X0127322Y0342459* +X0129156Y033776* +X0131371Y0333229* +X0133952Y0328896* +X0136883Y0324791* +X0140143Y0320943* +X0143709Y0317376* +X0147558Y0314117* +X0151663Y0311186* +X0155995Y0308604* +X0160527Y0306389* +X0165225Y0304556* +X0170059Y0303117* +X0174995Y0302081* +X018Y0301458* +X0185039Y0301249* +X0190079Y0301458* +X0195084Y0302081* +X020002Y0303117* +X0204854Y0304556* +X0209552Y0306389* +X0214083Y0308604* +X0218416Y0311186* +X0222521Y0314117* +X022637Y0317376* +X0229936Y0320943* +X0233196Y0324791* +X0236126Y0328896* +X0238708Y0333229* +X0240923Y033776* +X0242757Y0342459* +X0244196Y0347292* +X0245231Y0352229* +X0245855Y0357234* +X0246063Y0362273* +X0247908* +X0251064Y0362076* +X0254167Y0361459* +X0257158Y0360433* +X0259986Y0359017* +X02626Y0357235* +X0264952Y035512* +X0267001Y0352711* +X0268709Y0350048* +X0270046Y0347182* +X0270988Y0344163* +X0271519Y0341045* +X0282283Y0219291* +M02* \ No newline at end of file diff --git a/hardware/gerber/unisolder_sensor.gtl b/hardware/gerber/unisolder_sensor.gtl new file mode 100644 index 0000000..16a8e8b --- /dev/null +++ b/hardware/gerber/unisolder_sensor.gtl @@ -0,0 +1,1470 @@ +%FSTAX26Y26*% +%MOIN*% +%SFA1B1*% + +%IPPOS*% +%AMD10* +4,1,8,0.043300,-0.042500,0.043300,0.042500,0.034600,0.051200,-0.034600,0.051200,-0.043300,0.042500,-0.043300,-0.042500,-0.034600,-0.051200,0.034600,-0.051200,0.043300,-0.042500,0.0* +1,1,0.017320,0.034600,-0.042500* +1,1,0.017320,0.034600,0.042500* +1,1,0.017320,-0.034600,0.042500* +1,1,0.017320,-0.034600,-0.042500* +% +%AMD11* +4,1,8,-0.025600,0.021800,-0.025600,-0.021800,-0.017900,-0.029500,0.017900,-0.029500,0.025600,-0.021800,0.025600,0.021800,0.017900,0.029500,-0.017900,0.029500,-0.025600,0.021800,0.0* +1,1,0.015360,-0.017900,0.021800* +1,1,0.015360,-0.017900,-0.021800* +1,1,0.015360,0.017900,-0.021800* +1,1,0.015360,0.017900,0.021800* +% +%AMD13* +4,1,8,0.021800,0.025600,-0.021800,0.025600,-0.029500,0.017900,-0.029500,-0.017900,-0.021800,-0.025600,0.021800,-0.025600,0.029500,-0.017900,0.029500,0.017900,0.021800,0.025600,0.0* +1,1,0.015360,0.021800,0.017900* +1,1,0.015360,-0.021800,0.017900* +1,1,0.015360,-0.021800,-0.017900* +1,1,0.015360,0.021800,-0.017900* +% +G04~CAMADD=10~8~0.0~0.0~1023.6~866.1~86.6~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~867.0~1024.0* +%ADD10D10*% +G04~CAMADD=11~8~0.0~0.0~590.6~511.8~76.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~512.0~591.0* +%ADD11D11*% +%ADD12O,0.074800X0.023620*% +G04~CAMADD=13~8~0.0~0.0~590.6~511.8~76.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~590.6~511.8* +%ADD13D13*% +%ADD14C,0.025000*% +%ADD15C,0.020000*% +%ADD16C,0.150000*% +%ADD17C,0.050000*% +%ADD18C,0.010000*% +%ADD19R,0.060000X0.035000*% +%ADD20C,0.060000*% +%ADD21R,0.059060X0.059060*% +%ADD22C,0.059060*% +%ADD23C,0.314960*% +%ADD24C,0.125200*% +%ADD25C,0.070000*% +%ADD26C,0.050000*% +%LNunisolder_sensor-1*% +%LPD*% +G36* +X0120241Y0357884D02* +X0120727Y0353118D01* +X0121656Y0348045* +X0122985Y0343062* +X0124704Y03382* +X0126804Y0333489* +X0129271Y032896* +X0132089Y0324641* +X0135241Y0320559* +X0138707Y031674* +X0142465Y0313209* +X0146491Y0309986* +X015076Y0307093* +X0155246Y0304547* +X0159919Y0302366* +X016475Y0300562* +X016971Y0299147* +X0174766Y029813* +X0179886Y0297517* +X0185039Y0297312* +X0190192Y0297517* +X0195313Y029813* +X0200369Y0299147* +X0205328Y0300562* +X021016Y0302366* +X0214833Y0304547* +X0219318Y0307093* +X0223587Y0309986* +X0227614Y0313209* +X0231372Y031674* +X0234838Y0320559* +X023799Y0324641* +X0240808Y032896* +X0243275Y0333489* +X0245375Y03382* +X0247094Y0343062* +X0248423Y0348045* +X0249352Y0353118* +X0249838Y0357884* +X0250236Y0358186* +X0252833Y0357738* +X0255679Y0356784* +X0256059Y0356588* +X0256038Y0356089* +X0255857Y0356014* +X0255021Y0355373* +X025438Y0354537* +X0253977Y0353564* +X0253839Y035252* +X0253973Y0351503* +X0249058Y0346588* +X0248616Y0345926* +X0248461Y0345146* +Y0330845* +X0236818Y0319202* +X0236376Y031854* +X0236221Y031776* +Y0315938* +X0235779Y031585* +X0235194Y0315459* +X0234803Y0314875* +X0234666Y0314185* +Y031129* +X0226415Y0303039* +X02195* +X021872Y0302884* +X0218058Y0302442* +X0208455Y0292839* +X01688* +X016802Y0292684* +X0167358Y0292242* +X0163655Y0288539* +X0156685* +X0156662Y0288555* +X0155811Y0288724* +X0150693* +X0149842Y0288555* +X014912Y0288072* +X0148638Y0287351* +X0148469Y02865* +X0148638Y0285649* +X014912Y0284928* +X0149842Y0284445* +X0150693Y0284276* +X0155811* +X0156662Y0284445* +X0156685Y0284461* +X01645* +X016528Y0284616* +X0165942Y0285058* +X0169645Y0288761* +X02093* +X021008Y0288916* +X0210742Y0289358* +X0220345Y0298961* +X022726* +X022804Y0299116* +X0228702Y0299558* +X0237156Y0308013* +X0240051* +X0240741Y030815* +X0241326Y0308541* +X0241716Y0309125* +X024175Y0309295* +X024225* +X0242284Y0309125* +X0242674Y0308541* +X0243259Y030815* +X0243949Y0308013* +X0246483* +X0248706Y030579* +Y03015* +X0248881Y0300622* +X0249378Y0299878* +X0265706Y028355* +Y026145* +X0263523Y0259267* +X0263024Y02593* +X0262709Y0259709* +X0261769Y0260431* +X0260675Y0260884* +X02595Y0261039* +X0258325Y0260884* +X0257231Y0260431* +X0256709Y026003* +X0255962* +X025397Y0262022* +X0253884Y0262675* +X0253431Y0263769* +X0252709Y0264709* +X0251769Y0265431* +X0250675Y0265884* +X02495Y0266039* +X0248325Y0265884* +X0247231Y0265431* +X0246709Y026503* +X0197462* +X0187654Y0274839* +X0186923Y02754* +X0186071Y0275752* +X0185158Y0275873* +X0183367* +Y0276594* +X0183222Y0277323* +X018281Y027794* +X0182193Y0278352* +X0181465Y0278497* +X0174535* +X0173807Y0278352* +X0173698Y0278279* +X0167438* +X016735Y0278721* +X0167151Y027902* +X0167386Y0279461* +X0199155* +X0206058Y0272558* +X020672Y0272116* +X02075Y0271961* +X02315* +X023228Y0272116* +X0232942Y0272558* +X0239845Y0279461* +X0245474* +X0245569Y0279231* +X0246291Y0278291* +X0247231Y0277569* +X0248325Y0277116* +X02495Y0276961* +X0250675Y0277116* +X0251769Y0277569* +X0252709Y0278291* +X0253397Y0279187* +X0253517Y0279195* +X0254207Y0278909* +X0255211Y0277905* +X0255116Y0277675* +X0254961Y02765* +X0255116Y0275325* +X0255569Y0274231* +X0256291Y0273291* +X0257231Y0272569* +X0258325Y0272116* +X02595Y0271961* +X0260675Y0272116* +X0261769Y0272569* +X0262709Y0273291* +X0263431Y0274231* +X0263884Y0275325* +X0264039Y02765* +X0263884Y0277675* +X0263431Y0278769* +X0262709Y0279709* +X0261769Y0280431* +X0260675Y0280884* +X02595Y0281039* +X0258325Y0280884* +X0258095Y0280789* +X0255942Y0282942* +X025528Y0283384* +X02545Y0283539* +X0253526* +X0253431Y0283769* +X0252709Y0284709* +X0251769Y0285431* +X0250675Y0285884* +X02495Y0286039* +X0248325Y0285884* +X0247231Y0285431* +X0246291Y0284709* +X0245569Y0283769* +X0245474Y0283539* +X0239* +X023822Y0283384* +X0237558Y0282942* +X0230655Y0276039* +X0208345* +X0201442Y0282942* +X020078Y0283384* +X02Y0283539* +X0156685* +X0156662Y0283555* +X0155811Y0283724* +X0150693* +X0149842Y0283555* +X014912Y0283072* +X0148638Y0282351* +X0148469Y02815* +X0148638Y0280649* +X014912Y0279927* +X0149842Y0279445* +X0150693Y0279276* +X0155811* +X0156662Y0279445* +X0156685Y0279461* +X0159614* +X0159849Y027902* +X015965Y0278721* +X0159614Y0278539* +X0156685* +X0156662Y0278555* +X0155811Y0278724* +X0150693* +X0149842Y0278555* +X014912Y0278073* +X0148638Y0277351* +X0148469Y02765* +X0148638Y0275649* +X014912Y0274927* +X0149842Y0274445* +X0150693Y0274276* +X0151213* +Y027094* +X0150759Y027085* +X0150174Y027046* +X0149784Y0269875* +X014975Y0269706* +X014925* +X0149216Y0269875* +X0148826Y027046* +X0148241Y027085* +X0147799Y0270938* +Y0288415* +X0148845Y0289461* +X0149819* +X0149842Y0289445* +X0150693Y0289276* +X0155811* +X0156662Y0289445* +X0157384Y0289928* +X0157866Y0290649* +X0158035Y02915* +X0157866Y0292351* +X0157384Y0293073* +X0156662Y0293555* +X0155811Y0293724* +X0150693* +X0149842Y0293555* +X0149819Y0293539* +X0148* +X014722Y0293384* +X0146558Y0292942* +X0144318Y0290702* +X0143876Y029004* +X0143721Y028926* +Y0270938* +X0143279Y027085* +X0142694Y027046* +X0142303Y0269875* +X0142166Y0269185* +Y0264815* +X0142303Y0264125* +X0142694Y0263541* +X0143279Y026315* +X0143721Y0263062* +Y0259453* +X0141547* +Y0251547* +X0149453* +Y0259453* +X0147799* +Y0263062* +X0148241Y026315* +X0148826Y0263541* +X0149216Y0264125* +X014925Y0264295* +X014975* +X0149784Y0264125* +X0150174Y0263541* +X0150759Y026315* +X0150939Y0263114* +X015113Y0262652* +X0151121Y0262638* +X0150946Y026176* +X0151121Y0260882* +X0151509Y02603* +X015147Y026* +X015159Y0259086* +X0151943Y0258235* +X0152504Y0257504* +X0153235Y0256943* +X0154086Y025659* +X0155Y025647* +X0155914Y025659* +X0156765Y0256943* +X0157496Y0257504* +X0158057Y0258235* +X015841Y0259086* +X015853Y026* +X015841Y0260914* +X0158057Y0261765* +X0157496Y0262496* +X0156765Y0263057* +X0156517Y026316* +X0156371Y0263639* +X0156697Y0264125* +X0156834Y0264815* +Y0269185* +X0156697Y0269875* +X0156306Y027046* +X0155721Y027085* +X0155291Y0270936* +Y0274276* +X0155811* +X0156662Y0274445* +X0156685Y0274461* +X0159513* +Y0274449* +X015965Y0273759* +X016004Y0273174* +X0160625Y0272784* +X0160794Y027275* +Y027225* +X0160625Y0272216* +X016004Y0271826* +X015965Y0271241* +X0159513Y0270551* +Y026926* +X0167487* +Y0270551* +X016735Y0271241* +X016696Y0271826* +X0166375Y0272216* +X0166206Y027225* +Y027275* +X0166375Y0272784* +X016696Y0273174* +X016735Y0273759* +X0167438Y0274201* +X0172633* +Y0268091* +X0172778Y0267362* +X017319Y0266745* +X0173807Y0266333* +X0174535Y0266188* +X0181465* +X0182193Y0266333* +X018281Y0266745* +X0183222Y0267362* +X0183367Y0268091* +Y0268487* +X0183829Y0268678* +X0193504Y0259004* +X0194235Y0258443* +X0195086Y025809* +X0196Y025797* +X0246709* +X0247231Y0257569* +X0248325Y0257116* +X0248978Y025703* +X0252004Y0254004* +X0252735Y0253443* +X0253586Y025309* +X02545Y025297* +X0256709* +X0257231Y0252569* +X0258325Y0252116* +X02595Y0251961* +X0260675Y0252116* +X0261769Y0252569* +X0262709Y0253291* +X0263412Y0254206* +X0264* +X0264878Y025438* +X0265622Y0254878* +X0269622Y0258878* +X027012Y0259622* +X0270294Y02605* +Y02845* +X027012Y0285378* +X0269622Y0286122* +X0253294Y030245* +Y030579* +X0255517Y0308013* +X0258051* +X0258741Y030815* +X0259326Y0308541* +X0259716Y0309125* +X025975Y0309295* +X026025* +X0260284Y0309125* +X0260674Y0308541* +X0261259Y030815* +X0261949Y0308013* +X026324* +Y0312* +Y0315987* +X0261949* +X0261259Y031585* +X0260674Y0315459* +X0260284Y0314875* +X026025Y0314705* +X025975* +X0259716Y0314875* +X0259326Y0315459* +X0258741Y031585* +X0258554Y0315887* +Y031681* +X0259496Y0317752* +X0259994Y0318496* +X0260168Y0319374* +Y0329238* +X0260727Y0329667* +X0261368Y0330502* +X0261771Y0331475* +X0261909Y033252* +X0261771Y0333564* +X0261368Y0334537* +X0260727Y0335372* +X0259891Y0336014* +X0258918Y0336417* +X0257874Y0336554* +X025683Y0336417* +X0255857Y0336014* +X0255021Y0335372* +X025438Y0334537* +X0253977Y0333564* +X0253839Y033252* +X0253977Y0331475* +X025438Y0330502* +X0255021Y0329667* +X025558Y0329238* +Y0320324* +X0254638Y0319382* +X025414Y0318638* +X0253966Y031776* +Y0315887* +X0253779Y031585* +X0253194Y0315459* +X0252803Y0314875* +X0252688Y0314294* +X0249312* +X0249197Y0314875* +X0248806Y0315459* +X0248221Y031585* +X0247532Y0315987* +X0243949* +X0243259Y031585* +X0242674Y0315459* +X0242284Y0314875* +X024225Y0314705* +X024175* +X0241716Y0314875* +X0241326Y0315459* +X0240741Y031585* +X0240299Y0315938* +Y0316915* +X0251942Y0328558* +X0252384Y032922* +X0252539Y033* +Y0344301* +X0256857Y0348619* +X0257874Y0348485* +X0258918Y0348623* +X0259891Y0349026* +X0260727Y0349667* +X0261368Y0350502* +X0261771Y0351476* +X0261835Y0351961* +X0262308Y0352122* +X0262905Y035153* +X026469Y0349117* +X0266088Y0346461* +X0267065Y0343623* +X0267599Y0340669* +X0276Y0245* +X02705Y02395* +X0243614* +X0242643Y0239979* +X0240564Y0240685* +X0238411Y0241113* +X0236221Y0241256* +X023403Y0241113* +X0231876Y0240685* +X0229798Y0239979* +X0228827Y02395* +X0141124* +X0140281Y0239916* +X0138202Y0240621* +X0136049Y024105* +X0133858Y0241193* +X0131667Y024105* +X0129514Y0240621* +X0127435Y0239916* +X0126592Y02395* +X00995* +X0094Y0245* +X0102479Y0340669* +X0103014Y0343623* +X0103991Y0346461* +X0105388Y0349117* +X0107173Y035153* +X0109304Y0353644* +X0111732Y0355409* +X01144Y0356784* +X0117246Y0357738* +X0119843Y0358186* +X0120241Y0357884* +G37* +%LNunisolder_sensor-2*% +%LPC*% +G36* +X0126Y0259421D02* +Y0256D01* +X0129421* +X0129351Y0256532* +X0128953Y0257493* +X0128319Y0258319* +X0127493Y0258953* +X0126532Y0259351* +X0126Y0259421* +G37* +G36* +X0259Y0266D02* +X0255027D01* +X0255116Y0265325* +X0255569Y0264231* +X0256291Y0263291* +X0257231Y0262569* +X0258325Y0262116* +X0259Y0262027* +Y0266* +G37* +G36* +X0181465Y0258812D02* +X01785D01* +Y0253157* +X0183367* +Y0256909* +X0183222Y0257638* +X018281Y0258255* +X0182193Y0258667* +X0181465Y0258812* +G37* +G36* +X0125Y0259421D02* +X0124468Y0259351D01* +X0123507Y0258953* +X0122681Y0258319* +X0122047Y0257493* +X0121649Y0256532* +X0121579Y0256* +X0125* +Y0259421* +G37* +G36* +X0263973Y0266D02* +X026D01* +Y0262027* +X0260675Y0262116* +X0261769Y0262569* +X0262709Y0263291* +X0263431Y0264231* +X0263884Y0265325* +X0263973Y0266* +G37* +G36* +X0259Y0270973D02* +X0258325Y0270884D01* +X0257231Y0270431* +X0256291Y0269709* +X0255569Y0268769* +X0255116Y0267675* +X0255027Y0267* +X0259* +Y0270973* +G37* +G36* +X026D02* +Y0267D01* +X0263973* +X0263884Y0267675* +X0263431Y0268769* +X0262709Y0269709* +X0261769Y0270431* +X0260675Y0270884* +X026Y0270973* +G37* +G36* +X0163Y026826D02* +X0159513D01* +Y0266968* +X015965Y0266279* +X016004Y0265694* +X0160625Y0265303* +X0161315Y0265166* +X0163* +Y026826* +G37* +G36* +X0167487D02* +X0164D01* +Y0265166* +X0165685* +X0166375Y0265303* +X016696Y0265694* +X016735Y0266279* +X0167487Y0266968* +Y026826* +G37* +G36* +X01775Y0258812D02* +X0174535D01* +X0173807Y0258667* +X017319Y0258255* +X0172778Y0257638* +X0172633Y0256909* +Y0253157* +X01775* +Y0258812* +G37* +G36* +Y0252157D02* +X0172633D01* +Y0248406* +X0172778Y0247677* +X017319Y024706* +X0173807Y0246648* +X0174535Y0246503* +X01775* +Y0252157* +G37* +G36* +X0183367D02* +X01785D01* +Y0246503* +X0181465* +X0182193Y0246648* +X018281Y024706* +X0183222Y0247677* +X0183367Y0248406* +Y0252157* +G37* +G36* +X0224Y02485D02* +X0217254D01* +X0217345Y0247577* +X021776Y0246208* +X0218435Y0244947* +X0219342Y0243842* +X0220447Y0242934* +X0221708Y024226* +X0223077Y0241845* +X0224Y0241754* +Y02485* +G37* +G36* +X0231746D02* +X0225D01* +Y0241754* +X0225923Y0241845* +X0227292Y024226* +X0228553Y0242934* +X0229658Y0243842* +X0230566Y0244947* +X023124Y0246208* +X0231655Y0247577* +X0231746Y02485* +G37* +G36* +X0224Y0256246D02* +X0223077Y0256155D01* +X0221708Y025574* +X0220447Y0255065* +X0219342Y0254158* +X0218435Y0253053* +X021776Y0251792* +X0217345Y0250423* +X0217254Y02495* +X0224* +Y0256246* +G37* +G36* +X0125Y0255D02* +X0121579D01* +X0121649Y0254468* +X0122047Y0253507* +X0122681Y0252681* +X0123507Y0252047* +X0124468Y0251649* +X0125Y0251579* +Y0255* +G37* +G36* +X0129421D02* +X0126D01* +Y0251579* +X0126532Y0251649* +X0127493Y0252047* +X0128319Y0252681* +X0128953Y0253507* +X0129351Y0254468* +X0129421Y0255* +G37* +G36* +X0225Y0256246D02* +Y02495D01* +X0231746* +X0231655Y0250423* +X023124Y0251792* +X0230566Y0253053* +X0229658Y0254158* +X0228553Y0255065* +X0227292Y025574* +X0225923Y0256155* +X0225Y0256246* +G37* +G36* +X01355Y0259487D02* +X0134468Y0259351D01* +X0133507Y0258953* +X0132681Y0258319* +X0132047Y0257493* +X0131649Y0256532* +X0131513Y02555* +X0131649Y0254468* +X0132047Y0253507* +X0132681Y0252681* +X0133507Y0252047* +X0134468Y0251649* +X01355Y0251513* +X0136532Y0251649* +X0137493Y0252047* +X0138319Y0252681* +X0138953Y0253507* +X0139351Y0254468* +X0139487Y02555* +X0139351Y0256532* +X0138953Y0257493* +X0138319Y0258319* +X0137493Y0258953* +X0136532Y0259351* +X01355Y0259487* +G37* +G36* +X0267334Y03115D02* +X026424D01* +Y0308013* +X0265531* +X0266221Y030815* +X0266806Y0308541* +X0267197Y0309125* +X0267334Y0309815* +Y03115* +G37* +G36* +X0265531Y0315987D02* +X026424D01* +Y03125* +X0267334* +Y0314185* +X0267197Y0314875* +X0266806Y0315459* +X0266221Y031585* +X0265531Y0315987* +G37* +G36* +X0225Y0296246D02* +Y02895D01* +X0231746* +X0231655Y0290423* +X023124Y0291792* +X0230566Y0293053* +X0229658Y0294158* +X0228553Y0295065* +X0227292Y029574* +X0225923Y0296155* +X0225Y0296246* +G37* +G36* +X0231746Y02885D02* +X0225D01* +Y0281754* +X0225923Y0281845* +X0227292Y028226* +X0228553Y0282934* +X0229658Y0283842* +X0230566Y0284947* +X023124Y0286208* +X0231655Y0287577* +X0231746Y02885* +G37* +G36* +X0224Y0296246D02* +X0223077Y0296155D01* +X0221708Y029574* +X0220447Y0295065* +X0219342Y0294158* +X0218435Y0293053* +X021776Y0291792* +X0217345Y0290423* +X0217254Y02895* +X0224* +Y0296246* +G37* +G36* +X0257374Y0346488D02* +X025683Y0346417D01* +X0255857Y0346014* +X0255021Y0345373* +X025438Y0344537* +X0253977Y0343564* +X0253905Y034302* +X0257374* +Y0346488* +G37* +G36* +X0258374D02* +Y034302D01* +X0261843* +X0261771Y0343564* +X0261368Y0344537* +X0260727Y0345373* +X0259891Y0346014* +X0258918Y0346417* +X0258374Y0346488* +G37* +G36* +X0114173Y0351554D02* +X0113129Y0351417D01* +X0112156Y0351014* +X011132Y0350373* +X0110679Y0349537* +X0110276Y0348564* +X0110139Y034752* +X0110276Y0346476* +X0110679Y0345502* +X011132Y0344667* +X0112156Y0344026* +X0113129Y0343623* +X0114173Y0343485* +X0114872Y0343577* +X0117706Y0340743* +Y0340264* +X0117232Y0340104* +X0117026Y0340372* +X0116191Y0341014* +X0115217Y0341417* +X0114173Y0341554* +X0113129Y0341417* +X0112156Y0341014* +X011132Y0340372* +X0110679Y0339537* +X0110276Y0338564* +X0110139Y033752* +X0110239Y033676* +X010988Y0336224* +X0109706Y0335347* +Y029975* +X0107678Y0297722* +X0107181Y0296978* +X0107006Y02961* +Y0290395* +X0106779Y029035* +X0106194Y028996* +X0105803Y0289375* +X0105666Y0288685* +Y0284315* +X0105803Y0283625* +X0106194Y028304* +X0106779Y028265* +X0107468Y0282513* +X0109979* +X0110171Y0282051* +X0104058Y0275938* +X0103616Y0275276* +X0103461Y0274496* +Y0258918* +X0102681Y0258319* +X0102047Y0257493* +X0101649Y0256532* +X0101513Y02555* +X0101649Y0254468* +X0102047Y0253507* +X0102681Y0252681* +X0103507Y0252047* +X0104468Y0251649* +X01055Y0251513* +X0106532Y0251649* +X0107493Y0252047* +X0108319Y0252681* +X0108953Y0253507* +X0109351Y0254468* +X0109487Y02555* +X0109351Y0256532* +X0108953Y0257493* +X0108319Y0258319* +X0107539Y0258918* +Y0273651* +X01164Y0282513* +X0118532* +X0119221Y028265* +X0119806Y028304* +X0120197Y0283625* +X0120334Y0284315* +Y0284461* +X0131315* +X0131338Y0284445* +X0132189Y0284276* +X0137307* +X0138158Y0284445* +X013888Y0284928* +X0139362Y0285649* +X0139531Y02865* +X0139362Y0287351* +X013888Y0288072* +X0138158Y0288555* +X0137307Y0288724* +X0132189* +X0131338Y0288555* +X0131315Y0288539* +X0120334* +Y0288685* +X0120197Y0289375* +X0119806Y028996* +X0119221Y029035* +X0118532Y0290487* +X0114949* +X0114259Y029035* +X0113674Y028996* +X0113284Y0289375* +X011325Y0289206* +X011275* +X0112716Y0289375* +X0112326Y028996* +X0111741Y029035* +X0111594Y0290379* +Y029515* +X0113622Y0297178* +X011412Y0297922* +X0114294Y02988* +Y0333501* +X0115217Y0333623* +X0116191Y0334026* +X0117026Y0334667* +X0117232Y0334936* +X0117706Y0334775* +Y0321* +X011788Y0320122* +X0118378Y0319378* +X0132454Y0305302* +Y0293724* +X0132189* +X0131338Y0293555* +X0130616Y0293073* +X0130134Y0292351* +X0129965Y02915* +X0130134Y0290649* +X0130616Y0289928* +X0131338Y0289445* +X0132189Y0289276* +X0137307* +X0138158Y0289445* +X013888Y0289928* +X0139362Y0290649* +X0139531Y02915* +X0139362Y0292351* +X013888Y0293073* +X0138158Y0293555* +X0137307Y0293724* +X0137042* +Y0306252* +X0136867Y030713* +X013637Y0307874* +X0122294Y032195* +Y0341693* +X0122119Y0342571* +X0121622Y0343315* +X0118116Y0346821* +X0118208Y034752* +X011807Y0348564* +X0117667Y0349537* +X0117026Y0350373* +X0116191Y0351014* +X0115217Y0351417* +X0114173Y0351554* +G37* +G36* +X0257374Y034202D02* +X0253905D01* +X0253977Y0341476* +X025438Y0340502* +X0255021Y0339667* +X0255857Y0339026* +X025683Y0338623* +X0257374Y0338551* +Y034202* +G37* +G36* +X0261843D02* +X0258374D01* +Y0338551* +X0258918Y0338623* +X0259891Y0339026* +X0260727Y0339667* +X0261368Y0340502* +X0261771Y0341476* +X0261843Y034202* +G37* +G36* +X025Y0275973D02* +Y0272D01* +X0253973* +X0253884Y0272675* +X0253431Y0273769* +X0252709Y0274709* +X0251769Y0275431* +X0250675Y0275884* +X025Y0275973* +G37* +G36* +X0134248Y0276D02* +X0130065D01* +X0130134Y0275649* +X0130616Y0274927* +X0131338Y0274445* +X0132189Y0274276* +X0134248* +Y0276* +G37* +G36* +X0249Y0275973D02* +X0248325Y0275884D01* +X0247231Y0275431* +X0246291Y0274709* +X0245569Y0273769* +X0245116Y0272675* +X0245027Y0272* +X0249* +Y0275973* +G37* +G36* +Y0271D02* +X0245027D01* +X0245116Y0270325* +X0245569Y0269231* +X0246291Y0268291* +X0247231Y0267569* +X0248325Y0267116* +X0249Y0267027* +Y0271* +G37* +G36* +X0253973D02* +X025D01* +Y0267027* +X0250675Y0267116* +X0251769Y0267569* +X0252709Y0268291* +X0253431Y0269231* +X0253884Y0270325* +X0253973Y0271* +G37* +G36* +X0137307Y0283724D02* +X0132189D01* +X0131338Y0283555* +X0131315Y0283539* +X01265* +X012572Y0283384* +X0125058Y0282942* +X0114058Y0271942* +X0113616Y027128* +X0113461Y02705* +Y0258918* +X0112681Y0258319* +X0112047Y0257493* +X0111649Y0256532* +X0111513Y02555* +X0111649Y0254468* +X0112047Y0253507* +X0112681Y0252681* +X0113507Y0252047* +X0114468Y0251649* +X01155Y0251513* +X0116532Y0251649* +X0117493Y0252047* +X0118319Y0252681* +X0118953Y0253507* +X0119351Y0254468* +X0119487Y02555* +X0119351Y0256532* +X0118953Y0257493* +X0118319Y0258319* +X0117539Y0258918* +Y0269655* +X0127345Y0279461* +X0131315* +X0131338Y0279445* +X0132189Y0279276* +X0137307* +X0138158Y0279445* +X013888Y0279927* +X0139362Y0280649* +X0139531Y02815* +X0139362Y0282351* +X013888Y0283072* +X0138158Y0283555* +X0137307Y0283724* +G37* +G36* +X0224Y02885D02* +X0217254D01* +X0217345Y0287577* +X021776Y0286208* +X0218435Y0284947* +X0219342Y0283842* +X0220447Y0282934* +X0221708Y028226* +X0223077Y0281845* +X0224Y0281754* +Y02885* +G37* +G36* +X0137307Y0278724D02* +X0135248D01* +Y0277* +X0139431* +X0139362Y0277351* +X013888Y0278073* +X0138158Y0278555* +X0137307Y0278724* +G37* +G36* +X0139431Y0276D02* +X0135248D01* +Y0274276* +X0137307* +X0138158Y0274445* +X013888Y0274927* +X0139362Y0275649* +X0139431Y0276* +G37* +G36* +X0134248Y0278724D02* +X0132189D01* +X0131338Y0278555* +X0130616Y0278073* +X0130134Y0277351* +X0130065Y0277* +X0134248* +Y0278724* +G37* +%LNunisolder_sensor-3*% +%LPD*% +G54D10* +X0178Y0272342D03* +Y0252658D03* +G54D11* +X025626Y0312D03* +X026374D03* +X024574D03* +X023826D03* +X015324Y0267D03* +X014576D03* +X011674Y02865D03* +X010926D03* +G54D12* +X0153252Y02765D03* +Y02815D03* +Y02865D03* +Y02915D03* +X0134748Y02765D03* +Y02815D03* +Y02865D03* +Y02915D03* +G54D13* +X01635Y027624D03* +Y026876D03* +G54D14* +X010926Y02865D02* +X01093Y028654D01* +Y02961* +X0112Y02988* +X015324Y026176D02* +X0155Y026D01* +X0268Y02605D02* +Y02845D01* +X0251Y03015D02* +X0268Y02845D01* +X0251Y03015D02* +Y030674D01* +X0114173Y034752D02* +X012Y0341693D01* +Y0321D02* +Y0341693D01* +Y0321D02* +X0134748Y0306252D01* +X0264Y02565D02* +X0268Y02605D01* +X02595Y02565D02* +X0264D01* +X011674Y0285736D02* +Y02865D01* +X0134748Y02925D02* +Y0306252D01* +X0112Y0335347D02* +X0114173Y033752D01* +X0112Y02988D02* +Y0335347D01* +X0257874Y0319374D02* +Y033252D01* +X025626Y031776D02* +X0257874Y0319374D01* +X025626Y0312D02* +Y031776D01* +X024574Y0312D02* +X025626D01* +X0251Y030674D02* +D01* +X025626Y0312D01* +X024574D02* +X0251Y030674D01* +G54D15* +X02093Y02908D02* +X02195Y0301D01* +X01688Y02908D02* +X02093D01* +X01645Y02865D02* +X01688Y02908D01* +X01265Y02815D02* +X0134748D01* +X01155Y02705D02* +X01265Y02815D01* +X01155Y02555D02* +Y02705D01* +X015324Y026176D02* +Y0267D01* +X02195Y0301D02* +X022726D01* +X02505Y0345146D02* +X0257874Y035252D01* +X02505Y033D02* +Y0345146D01* +X023826Y031776D02* +X02505Y033D01* +X02075Y0274D02* +X02315D01* +X02Y02815D02* +X02075Y0274D01* +X0153252Y02815D02* +X02D01* +X01455Y02555D02* +X014576Y025576D01* +Y0267* +X01055Y0274496D02* +X011674Y0285736D01* +X01055Y02555D02* +Y0274496D01* +X011674Y02865D02* +X0134748D01* +X023826Y0312D02* +Y031776D01* +X022726Y0301D02* +X023826Y0312D01* +X0153252Y02865D02* +X01645D01* +X02315Y0274D02* +X0239Y02815D01* +X02545* +X02595Y02765* +X0174102Y027624D02* +X0178Y0272342D01* +X01635Y027624D02* +X0174102D01* +X015324Y0267D02* +X0153252Y0267012D01* +Y02765* +X016324D02* +X01635Y027624D01* +X0153252Y02765D02* +X016324D01* +X0148Y02915D02* +X0153252D01* +X014576Y028926D02* +X0148Y02915D01* +X014576Y0267D02* +Y028926D01* +G54D16* +X022275Y0249D02* +X022625D01* +X0223Y0289D02* +X02265D01* +G54D17* +X02545Y02565D02* +X02595D01* +X02495Y02615D02* +X02545Y02565D01* +X0196Y02615D02* +X02495D01* +X0185158Y0272342D02* +X0196Y02615D01* +X0178Y0272342D02* +X0185158D01* +G54D18* +X0087797Y0219265D02* +X0089002Y0232974D01* +X0102006Y0205074D02* +X0116506D01* +X0087806Y0219274D02* +X0102006Y0205074D01* +X02536Y02051D02* +X02681D01* +X02823Y02193* +X02811Y0233D02* +X0282305Y0219291D01* +X0119Y03621D02* +X0124Y03623D01* +X01242Y03575* +X02461Y03623D02* +X02511Y03621D01* +X02459Y03575D02* +X02461Y03623D01* +G54D19* +X0251Y031025D03* +G54D20* +X0114173Y033752D03* +Y034752D03* +X0257874Y033252D03* +Y034252D03* +Y035252D03* +G54D21* +X01455Y02555D03* +G54D22* +X01355Y02555D03* +X01255D03* +X01155D03* +X01055D03* +G54D23* +X0236221Y0224472D03* +X0133858Y022441D03* +G54D24* +X02245Y0289D03* +Y0249D03* +G54D25* +X02495Y02815D03* +X02595Y02765D03* +X02495Y02715D03* +X02595Y02665D03* +X02495Y02615D03* +X02595Y02565D03* +G54D26* +X0192Y02537D03* +X0164Y02569D03* +X00993Y02615D03* +X01722Y02861D03* +X02456Y03321D03* +X02246Y03065D03* +X02061Y02969D03* +X021Y02828D03* +X0105Y0335D03* +X0127Y03241D03* +X01423Y0295D03* +X01626Y02957D03* +X021Y0255D03* +X01969Y02726D03* +X02233Y02685D03* +X0256Y02872D03* +X02414Y03018D03* +X025Y032D03* +X02645Y03239D03* +X02625Y03022D03* +X01247Y02949D03* +X01183Y0313D03* +X01042Y03101D03* +X01015Y02805D03* +X01851Y02622D03* +X0172Y02623D03* +X026Y0245D03* +X024D03* +X02D03* +X016D03* +X014D03* +X012D03* +X01D03* +X0116Y02783D03* +X01105Y0266D03* +X01215Y02635D03* +X0138Y027D03* +X0129921Y0271654D03* +X0155Y026D03* +M02* \ No newline at end of file diff --git a/hardware/gerber/unisolder_sensor.gto b/hardware/gerber/unisolder_sensor.gto new file mode 100644 index 0000000..5df34a3 --- /dev/null +++ b/hardware/gerber/unisolder_sensor.gto @@ -0,0 +1,590 @@ +%FSTAX26Y26*% +%MOIN*% +%SFA1B1*% + +%IPPOS*% +%ADD18C,0.010000*% +%ADD27C,0.008000*% +%ADD28C,0.009840*% +%ADD29C,0.007870*% +%LNunisolder_sensor-1*% +%LPD*% +G54D18* +X0118728Y0339643D02* +D01* +X01189236Y03397933* +X01191084Y03399569* +X01192812Y03401331* +X01194414Y03403208* +X0119588Y03405193* +X01197205Y03407275* +X01198381Y03409445* +X01199403Y03411691* +X01200265Y03414003* +X01200965Y0341637* +X01201497Y03418779* +X0120186Y0342122* +X01202052Y03423681* +X01202072Y03426148* +X0120192Y03428611* +X01201596Y03431058* +X01201103Y03433476* +X01200442Y03435853* +X01199616Y03438179* +X01198631Y03440441* +X0119749Y0344263* +X01196199Y03444733* +X01194765Y03446741* +X01193194Y03448644* +X01191494Y03450433* +X01189673Y03452099* +X01187741Y03453634* +X0118728Y0345397* +X0248367Y0350549D02* +D01* +X02478118Y03503894* +X02472691Y03501915* +X02467415Y03499562* +X02462316Y03496847* +X02457419Y03493783* +X02452748Y03490385* +X02448325Y03486669* +X02444172Y03482654* +X02440309Y03478359* +X02436756Y03473804* +X02433528Y03469013* +X02430643Y03464009* +X02428114Y03458816* +X02425953Y03453458* +X02424171Y03447963* +X02422777Y03442358* +X02421778Y03436668* +X02421177Y03430923* +X02420979Y0342515* +X02421184Y03419377* +X02421791Y03413632* +X02422798Y03407944* +X02424199Y0340234* +X02425987Y03396847* +X02428154Y03391492* +X0243069Y03386302* +X02433581Y03381301* +X02436814Y03376514* +X02440373Y03371964* +X02444241Y03367673* +X02448399Y03363663* +X02452826Y03359953* +X02457502Y0335656* +X02462403Y03353502* +X02467505Y03350793* +X02472783Y03348447* +X02478213Y03346474* +X0248367Y033449* +X0110673Y034102D02* +Y034402D01* +Y033352D02* +X0111173D01* +X0110673Y035152D02* +X0111173D01* +X0117673Y034102D02* +Y034402D01* +X0117173Y033352D02* +X0117673D01* +X0117173Y035152D02* +X0117673D01* +Y035102D02* +Y035152D01* +Y033352D02* +Y033402D01* +X0110673Y033352D02* +Y033402D01* +Y035102D02* +Y035152D01* +X0248374Y033002D02* +X0253374D01* +X0248374D02* +Y035452D01* +X0253374* +X0261874Y034552D02* +Y034952D01* +Y033552D02* +Y033952D01* +X0087795Y0219283D02* +X0088999Y0232991D01* +X0087799Y0219291D02* +X0101999Y0205091D01* +X0116499* +X0253597D02* +X0268097D01* +X0282297Y0219291* +X0281097Y0232991D02* +X0282301Y0219283D01* +X0119Y03621D02* +X0124Y03623D01* +X01242Y03575* +X02461Y03623D02* +X02511Y03621D01* +X02459Y03575D02* +X02461Y03623D01* +G54D27* +X01849Y02773D02* +D01* +X01848995Y02773139* +X0184898Y02773278* +X01848956Y02773415* +X01848922Y02773551* +X01848879Y02773684* +X01848827Y02773813* +X01848765Y02773938* +X01848696Y02774059* +X01848618Y02774175* +X01848532Y02774285* +X01848438Y02774389* +X01848338Y02774486* +X01848231Y02774576* +X01848118Y02774658* +X01848Y02774732* +X01847876Y02774797* +X01847749Y02774854* +X01847618Y02774902* +X01847483Y0277494* +X01847347Y02774969* +X01847209Y02774989* +X01847069Y02774998* +X0184693* +X0184679Y02774989* +X01846652Y02774969* +X01846516Y0277494* +X01846381Y02774902* +X0184625Y02774854* +X01846123Y02774797* +X01846Y02774732* +X01845881Y02774658* +X01845768Y02774576* +X01845661Y02774486* +X01845561Y02774389* +X01845467Y02774285* +X01845381Y02774175* +X01845303Y02774059* +X01845234Y02773938* +X01845172Y02773813* +X0184512Y02773684* +X01845077Y02773551* +X01845043Y02773415* +X01845019Y02773278* +X01845004Y02773139* +X01845Y02773* +X01845004Y0277286* +X01845019Y02772721* +X01845043Y02772584* +X01845077Y02772448* +X0184512Y02772315* +X01845172Y02772186* +X01845234Y02772061* +X01845303Y0277194* +X01845381Y02771824* +X01845467Y02771714* +X01845561Y0277161* +X01845661Y02771513* +X01845768Y02771423* +X01845881Y02771341* +X01846Y02771267* +X01846123Y02771202* +X0184625Y02771145* +X01846381Y02771097* +X01846516Y02771059* +X01846652Y0277103* +X0184679Y0277101* +X0184693Y02771001* +X01847069* +X01847209Y0277101* +X01847347Y0277103* +X01847483Y02771059* +X01847618Y02771097* +X01847749Y02771145* +X01847876Y02771202* +X01848Y02771267* +X01848118Y02771341* +X01848231Y02771423* +X01848338Y02771513* +X01848438Y0277161* +X01848532Y02771714* +X01848618Y02771824* +X01848696Y0277194* +X01848765Y02772061* +X01848827Y02772186* +X01848879Y02772315* +X01848922Y02772448* +X01848956Y02772584* +X0184898Y02772721* +X01848995Y0277286* +X01849Y02773* +X0189666Y0262832D02* +X0188999Y0263499D01* +X0187666* +X0187Y0262832* +Y0260166* +X0187666Y02595* +X0188999* +X0189666Y0260166* +X0193665Y02595D02* +X0190999D01* +X0193665Y0262166* +Y0262832* +X0192998Y0263499* +X0191665* +X0190999Y0262832* +X0196997Y02595D02* +Y0263499D01* +X0194997Y0261499* +X0197663* +X0116929Y0331558D02* +Y0327559D01* +X0118929* +X0119595Y0328225* +Y0330891* +X0118929Y0331558* +X0116929* +X0120928Y0327559D02* +X0122261D01* +X0121594* +Y0331558* +X0120928Y0330891* +X0126926Y0331558D02* +X012426D01* +Y0329558* +X0125593Y0330225* +X0126259* +X0126926Y0329558* +Y0328225* +X0126259Y0327559* +X0124926* +X012426Y0328225* +X0101Y02625D02* +Y0266499D01* +X0102999* +X0103666Y0265832* +Y0264499* +X0102999Y0263833* +X0101* +X0104999Y0266499D02* +Y02625D01* +X0106998* +X0107665Y0263166* +Y0265832* +X0106998Y0266499* +X0104999* +X0111663Y02625D02* +X0108997D01* +X0111663Y0265166* +Y0265832* +X0110997Y0266499* +X0109664* +X0108997Y0265832* +X0236614Y0316535D02* +Y0320534D01* +X0238614* +X023928Y0319868* +Y0318535* +X0238614Y0317868* +X0236614* +X0237947D02* +X023928Y0316535D01* +X0240613Y0319868D02* +X0241279Y0320534D01* +X0242612* +X0243279Y0319868* +Y0319201* +X0242612Y0318535* +X0241946* +X0242612* +X0243279Y0317868* +Y0317202* +X0242612Y0316535* +X0241279* +X0240613Y0317202* +X0244612Y0319868D02* +X0245278Y0320534D01* +X0246611* +X0247277Y0319868* +Y0319201* +X0246611Y0318535* +X0245944* +X0246611* +X0247277Y0317868* +Y0317202* +X0246611Y0316535* +X0245278* +X0244612Y0317202* +X0108268Y0277953D02* +Y0281951D01* +X0110267* +X0110933Y0281285* +Y0279952* +X0110267Y0279286* +X0108268* +X0109601D02* +X0110933Y0277953D01* +X0112266Y0281285D02* +X0112933Y0281951D01* +X0114266* +X0114932Y0281285* +Y0280619* +X0114266Y0279952* +X0113599* +X0114266* +X0114932Y0279286* +Y0278619* +X0114266Y0277953* +X0112933* +X0112266Y0278619* +X0118264Y0277953D02* +Y0281951D01* +X0116265Y0279952* +X0118931* +X0130709Y0264961D02* +Y0268959D01* +X0132708* +X0133375Y0268293* +Y026696* +X0132708Y0266294* +X0130709* +X0132042D02* +X0133375Y0264961D01* +X0134707Y0268293D02* +X0135374Y0268959D01* +X0136707* +X0137373Y0268293* +Y0267626* +X0136707Y026696* +X013604* +X0136707* +X0137373Y0266294* +Y0265627* +X0136707Y0264961* +X0135374* +X0134707Y0265627* +X0141372Y0268959D02* +X0140039Y0268293D01* +X0138706Y026696* +Y0265627* +X0139373Y0264961* +X0140705* +X0141372Y0265627* +Y0266294* +X0140705Y026696* +X0138706* +X0248Y0327999D02* +Y0324666D01* +X0248666Y0324* +X0249999* +X0250666Y0324666* +Y0327999* +X0254664D02* +X0251999D01* +Y0325999* +X0253332Y0326666* +X0253998* +X0254664Y0325999* +Y0324666* +X0253998Y0324* +X0252665* +X0251999Y0324666* +X01405Y0299999D02* +Y0296666D01* +X0141166Y0296* +X0142499* +X0143166Y0296666* +Y0299999* +X0147164D02* +X0145832Y0299332D01* +X0144499Y0297999* +Y0296666* +X0145165Y0296* +X0146498* +X0147164Y0296666* +Y0297333* +X0146498Y0297999* +X0144499* +X0257784Y0319868D02* +X0257118Y0320534D01* +X0255785* +X0255118Y0319868* +Y0317202* +X0255785Y0316535* +X0257118* +X0257784Y0317202* +X0261783Y0316535D02* +X0259117D01* +X0261783Y0319201* +Y0319868* +X0261116Y0320534* +X0259783* +X0259117Y0319868* +X0263116D02* +X0263782Y0320534D01* +X0265115* +X0265781Y0319868* +Y0319201* +X0265115Y0318535* +X0264448* +X0265115* +X0265781Y0317868* +Y0317202* +X0265115Y0316535* +X0263782* +X0263116Y0317202* +X0161327Y0283647D02* +X0160661Y0284314D01* +X0159328* +X0158661Y0283647* +Y0280981* +X0159328Y0280315* +X0160661* +X0161327Y0280981* +X0165326Y0280315D02* +X016266D01* +X0165326Y0282981* +Y0283647* +X016466Y0284314* +X0163327* +X016266Y0283647* +X0169325Y0284314D02* +X0166659D01* +Y0282314* +X0167992Y0282981* +X0168658* +X0169325Y0282314* +Y0280981* +X0168658Y0280315* +X0167325* +X0166659Y0280981* +G54D28* +X0150984Y0273D02* +D01* +X01509828Y02730343* +X01509792Y02730684* +X01509732Y02731022* +X01509649Y02731356* +X01509543Y02731682* +X01509414Y02732001* +X01509264Y02732309* +X01509092Y02732607* +X015089Y02732891* +X01508688Y02733162* +X01508459Y02733417* +X01508212Y02733656* +X01507949Y02733877* +X01507671Y02734078* +X0150738Y0273426* +X01507076Y02734422* +X01506763Y02734561* +X0150644Y02734679* +X0150611Y02734773* +X01505774Y02734845* +X01505434Y02734893* +X01505091Y02734917* +X01504748* +X01504405Y02734893* +X01504065Y02734845* +X01503729Y02734773* +X01503399Y02734679* +X01503076Y02734561* +X01502763Y02734422* +X0150246Y0273426* +X01502168Y02734078* +X0150189Y02733877* +X01501627Y02733656* +X0150138Y02733417* +X01501151Y02733162* +X01500939Y02732891* +X01500747Y02732607* +X01500575Y02732309* +X01500425Y02732001* +X01500296Y02731682* +X0150019Y02731356* +X01500107Y02731022* +X01500047Y02730684* +X01500011Y02730343* +X015Y0273* +X01500011Y02729656* +X01500047Y02729315* +X01500107Y02728977* +X0150019Y02728643* +X01500296Y02728317* +X01500425Y02727998* +X01500575Y0272769* +X01500747Y02727392* +X01500939Y02727108* +X01501151Y02726837* +X0150138Y02726582* +X01501627Y02726343* +X0150189Y02726122* +X01502168Y02725921* +X0150246Y02725739* +X01502763Y02725577* +X01503076Y02725438* +X01503399Y0272532* +X01503729Y02725226* +X01504065Y02725154* +X01504405Y02725106* +X01504748Y02725082* +X01505091* +X01505434Y02725106* +X01505774Y02725154* +X0150611Y02725226* +X0150644Y0272532* +X01506763Y02725438* +X01507076Y02725577* +X0150738Y02725739* +X01507671Y02725921* +X01507949Y02726122* +X01508212Y02726343* +X01508459Y02726582* +X01508688Y02726837* +X015089Y02727108* +X01509092Y02727392* +X01509264Y0272769* +X01509414Y02727998* +X01509543Y02728317* +X01509649Y02728643* +X01509732Y02728977* +X01509792Y02729315* +X01509828Y02729656* +X0150984Y0273* +G54D29* +X01005Y02505D02* +Y02605D01* +X01505* +X01005Y02505D02* +X01505D01* +Y02605* +X017111Y0274902D02* +X0171307D01* +X0184693D02* +X018489D01* +X017111Y026565D02* +X018489D01* +X017111Y0250098D02* +X0171307D01* +X0184693D02* +X018489D01* +Y0274902* +X017111Y0250098D02* +Y0274902D01* +X0140063Y0274158D02* +X0142032D01* +X0142874Y0275* +X0145968Y0274158D02* +X0147937D01* +X0145126Y0275D02* +X0145968Y0274158D01* +X0147937D02* +Y0293843D01* +X0140063Y0274158D02* +Y0293843D01* +X0142874Y0275D02* +X0145126D01* +X0140063Y0293843D02* +X0147937D01* +M02* \ No newline at end of file diff --git a/hardware/gerber/unisolder_sensor.gts b/hardware/gerber/unisolder_sensor.gts new file mode 100644 index 0000000..c6c5ad8 --- /dev/null +++ b/hardware/gerber/unisolder_sensor.gts @@ -0,0 +1,108 @@ +%FSTAX26Y26*% +%MOIN*% +%SFA1B1*% + +%IPPOS*% +%AMD30* +4,1,8,0.047300,-0.042500,0.047300,0.042500,0.034600,0.055200,-0.034600,0.055200,-0.047300,0.042500,-0.047300,-0.042500,-0.034600,-0.055200,0.034600,-0.055200,0.047300,-0.042500,0.0* +1,1,0.025320,0.034600,-0.042500* +1,1,0.025320,0.034600,0.042500* +1,1,0.025320,-0.034600,0.042500* +1,1,0.025320,-0.034600,-0.042500* +% +%AMD31* +4,1,8,-0.029600,0.021800,-0.029600,-0.021800,-0.017900,-0.033500,0.017900,-0.033500,0.029600,-0.021800,0.029600,0.021800,0.017900,0.033500,-0.017900,0.033500,-0.029600,0.021800,0.0* +1,1,0.023360,-0.017900,0.021800* +1,1,0.023360,-0.017900,-0.021800* +1,1,0.023360,0.017900,-0.021800* +1,1,0.023360,0.017900,0.021800* +% +%AMD33* +4,1,8,0.021800,0.029600,-0.021800,0.029600,-0.033500,0.017900,-0.033500,-0.017900,-0.021800,-0.029600,0.021800,-0.029600,0.033500,-0.017900,0.033500,0.017900,0.021800,0.029600,0.0* +1,1,0.023360,0.021800,0.017900* +1,1,0.023360,-0.021800,0.017900* +1,1,0.023360,-0.021800,-0.017900* +1,1,0.023360,0.021800,-0.017900* +% +%ADD18C,0.010000*% +G04~CAMADD=30~8~0.0~0.0~1103.6~946.1~126.6~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~947.0~1104.0* +%ADD30D30*% +G04~CAMADD=31~8~0.0~0.0~670.6~591.8~116.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~90.0~592.0~671.0* +%ADD31D31*% +%ADD32O,0.082800X0.031620*% +G04~CAMADD=33~8~0.0~0.0~670.6~591.8~116.8~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~670.6~591.8* +%ADD33D33*% +%ADD34C,0.068000*% +%ADD35R,0.067060X0.067060*% +%ADD36C,0.067060*% +%ADD37C,0.322960*% +%ADD38C,0.078000*% +%LNunisolder_sensor-1*% +%LPD*% +G54D18* +X0087798Y0219274D02* +X0089002Y0232983D01* +X0087802Y0219283D02* +X0102002Y0205083D01* +X0116502* +X0253598Y0205074D02* +X0268098D01* +X0282298Y0219274* +X0281094Y0232974D02* +X0282299Y0219265D01* +X0119Y03621D02* +X0124Y03623D01* +X02461D02* +X02511Y03621D01* +X02459Y03575D02* +X02461Y03623D01* +X02459Y03575D02* +X02461Y03623D01* +G54D30* +X0178Y0272342D03* +Y0252658D03* +G54D31* +X025626Y0312D03* +X026374D03* +X024574D03* +X023826D03* +X015324Y0267D03* +X014576D03* +X011674Y02865D03* +X010926D03* +G54D32* +X0153252Y02765D03* +Y02815D03* +Y02865D03* +Y02915D03* +X0134748Y02765D03* +Y02815D03* +Y02865D03* +Y02915D03* +G54D33* +X01635Y027624D03* +Y026876D03* +G54D34* +X0114173Y033752D03* +Y034752D03* +X0257874Y033252D03* +Y034252D03* +Y035252D03* +G54D35* +X01455Y02555D03* +G54D36* +X01355Y02555D03* +X01255D03* +X01155D03* +X01055D03* +G54D37* +X0236221Y0224472D03* +X0133858Y022441D03* +G54D38* +X02495Y02815D03* +X02595Y02765D03* +X02495Y02715D03* +X02595Y02665D03* +X02495Y02615D03* +X02595Y02565D03* +M02* \ No newline at end of file diff --git a/hardware/gerber/unisolder_sensor.txt b/hardware/gerber/unisolder_sensor.txt new file mode 100644 index 0000000..044df64 --- /dev/null +++ b/hardware/gerber/unisolder_sensor.txt @@ -0,0 +1,79 @@ +%FSTAX26Y26*% +%MOIN*% +%SFA1B1*% + +%IPPOS*% +%ADD9500C,0.028000*% +%ADD9501C,0.030000*% +%ADD9502C,0.035430*% +%ADD9503C,0.047240*% +%ADD9504C,0.125200*% +%ADD9505C,0.157480*% +%LNunisolder_sensor-1*% +%LPD*% +G54D9500* +X016Y0245D03* +X0164Y02569D03* +X0172Y02623D03* +X01851Y02622D03* +X0192Y02537D03* +X02Y0245D03* +X021Y0255D03* +X02233Y02685D03* +X021Y02828D03* +X02061Y02969D03* +X02246Y03065D03* +X02414Y03018D03* +X02625Y03022D03* +X0256Y02872D03* +X026Y0245D03* +X024D03* +X01969Y02726D03* +X01722Y02861D03* +X01626Y02957D03* +X01423Y0295D03* +X01247Y02949D03* +X0116Y02783D03* +X01015Y02805D03* +X00993Y02615D03* +X01105Y0266D03* +X01215Y02635D03* +X0129921Y0271654D03* +X0138Y027D03* +X014Y0245D03* +X012D03* +X01D03* +X01042Y03101D03* +X0155Y026D03* +X01183Y0313D03* +X0127Y03241D03* +X0105Y0335D03* +X02456Y03321D03* +X025Y032D03* +X02645Y03239D03* +G54D9501* +X0114173Y033752D03* +Y034752D03* +X0257874Y034252D03* +Y033252D03* +Y035252D03* +G54D9502* +X01055Y02555D03* +X01155D03* +X01255D03* +X01355D03* +X01455D03* +G54D9503* +X02495Y02615D03* +Y02715D03* +Y02815D03* +X02595Y02765D03* +Y02665D03* +Y02565D03* +G54D9504* +X02245Y0249D03* +Y0289D03* +G54D9505* +X0236221Y0224472D03* +X0133858Y022441D03* +M02* \ No newline at end of file diff --git a/hardware/schematics/OLED.pdf b/hardware/schematics/OLED.pdf new file mode 100644 index 0000000..96a81ab Binary files /dev/null and b/hardware/schematics/OLED.pdf differ diff --git a/hardware/schematics/back.pdf b/hardware/schematics/back.pdf new file mode 100644 index 0000000..08db068 Binary files /dev/null and b/hardware/schematics/back.pdf differ diff --git a/hardware/schematics/front.pdf b/hardware/schematics/front.pdf new file mode 100644 index 0000000..0ac8a07 Binary files /dev/null and b/hardware/schematics/front.pdf differ diff --git a/hardware/schematics/sensor.pdf b/hardware/schematics/sensor.pdf new file mode 100644 index 0000000..e1597f5 Binary files /dev/null and b/hardware/schematics/sensor.pdf differ diff --git a/pics/iron_tips.jpg b/pics/iron_tips.jpg new file mode 100644 index 0000000..2986b0d Binary files /dev/null and b/pics/iron_tips.jpg differ diff --git a/pics/unisolder52.jpg b/pics/unisolder52.jpg new file mode 100644 index 0000000..4f493a9 Binary files /dev/null and b/pics/unisolder52.jpg differ diff --git a/pics/unisolder52_cal_con.jpg b/pics/unisolder52_cal_con.jpg new file mode 100644 index 0000000..e58f23f Binary files /dev/null and b/pics/unisolder52_cal_con.jpg differ diff --git a/software/PC/LibUsbDotNet.dll b/software/PC/LibUsbDotNet.dll new file mode 100644 index 0000000..e10661b Binary files /dev/null and b/software/PC/LibUsbDotNet.dll differ diff --git a/software/PC/RLE.vb b/software/PC/RLE.vb new file mode 100644 index 0000000..513564f --- /dev/null +++ b/software/PC/RLE.vb @@ -0,0 +1,69 @@ +Imports System.Windows.Forms +Imports System.IO + +Public Class RLE + + Private FileReader As BinaryReader + + Public Function LoadFile(ByVal filepath As String) As Boolean + Dim i As UInt32 + Dim i1 As UInt32 + Dim i2 As UInt32 + Dim rv As Boolean + Dim inBuff() As Byte + Dim outBuff() As Byte + Dim outbuff2() As Byte + Dim cCount As Byte + Dim l As UInt32 + + rv = False + FileReader = Nothing + 'Try + FileReader = New BinaryReader(File.OpenRead(filepath)) + l = FileReader.BaseStream.Length + ReDim inBuff(l) + ReDim outBuff(l) + ReDim outbuff2(l * 2) + FileReader.Read(inBuff, 0, l) + FileReader.Close() + + cCount = 1 + i1 = 0 + For i = 0 To l - 1 + If inBuff(i) > 127 Then MessageBox.Show("File contains values higher than 128") + If i < l - 1 And cCount < 127 And inBuff(i) = inBuff(i + 1) Then + cCount = cCount + 1 + Else + If cCount > 1 Then + outBuff(i1) = cCount + 128 + i1 = i1 + 1 + End If + outBuff(i1) = inBuff(i) + i1 = i1 + 1 + cCount = 1 + End If + Next i + cCount = 1 + i2 = 0 + For i = 0 To i1 - 1 + If outBuff(i) >= 128 Then + cCount = outBuff(i) - 128 + Else + While cCount > 0 + outbuff2(i2) = outBuff(i) + i2 = i2 + 1 + cCount = cCount - 1 + End While + cCount = 1 + End If + Next i + For i = 0 To l - 1 + If (inBuff(i) <> outbuff2(i)) Then Throw New Exception("ERROR: Streams do not match!") + Next + MessageBox.Show(l & " " & i1 & " " & i2) + 'Catch ex As Exception + 'End Try + FileReader = Nothing + Return True + End Function +End Class diff --git a/software/PC/SSComm/LibUsbDotNet.dll b/software/PC/SSComm/LibUsbDotNet.dll new file mode 100644 index 0000000..e10661b Binary files /dev/null and b/software/PC/SSComm/LibUsbDotNet.dll differ diff --git a/software/PC/SSComm/Properties/AssemblyInfo.cs b/software/PC/SSComm/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..dfe7f4c --- /dev/null +++ b/software/PC/SSComm/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("SSComm")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("SSComm")] +[assembly: AssemblyCopyright("Copyright © 2013")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("f1966c3d-6fb8-491b-b394-e4f3b492784b")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/software/PC/SSComm/SSComm.csproj b/software/PC/SSComm/SSComm.csproj new file mode 100644 index 0000000..1018a8b --- /dev/null +++ b/software/PC/SSComm/SSComm.csproj @@ -0,0 +1,66 @@ + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {D9F40A00-08CA-4B51-91AC-FEE25FA6410D} + Library + Properties + SSComm + SSComm + v4.0 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + .\LibUsbDotNet.dll + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/software/PC/SSComm/SSComm.csproj.user b/software/PC/SSComm/SSComm.csproj.user new file mode 100644 index 0000000..5bef86d --- /dev/null +++ b/software/PC/SSComm/SSComm.csproj.user @@ -0,0 +1,6 @@ + + + + ProjectFiles + + \ No newline at end of file diff --git a/software/PC/SSComm/SSComm.sln b/software/PC/SSComm/SSComm.sln new file mode 100644 index 0000000..821b1d5 --- /dev/null +++ b/software/PC/SSComm/SSComm.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SSComm", "SSComm.csproj", "{D9F40A00-08CA-4B51-91AC-FEE25FA6410D}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D9F40A00-08CA-4B51-91AC-FEE25FA6410D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D9F40A00-08CA-4B51-91AC-FEE25FA6410D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D9F40A00-08CA-4B51-91AC-FEE25FA6410D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D9F40A00-08CA-4B51-91AC-FEE25FA6410D}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/software/PC/SSComm/bin/Debug/LibUsbDotNet.dll b/software/PC/SSComm/bin/Debug/LibUsbDotNet.dll new file mode 100644 index 0000000..e10661b Binary files /dev/null and b/software/PC/SSComm/bin/Debug/LibUsbDotNet.dll differ diff --git a/software/PC/SSComm/bin/Debug/SSComm.dll b/software/PC/SSComm/bin/Debug/SSComm.dll new file mode 100644 index 0000000..261ccaa Binary files /dev/null and b/software/PC/SSComm/bin/Debug/SSComm.dll differ diff --git a/software/PC/SSComm/bin/Debug/SSComm.pdb b/software/PC/SSComm/bin/Debug/SSComm.pdb new file mode 100644 index 0000000..0c9fe6a Binary files /dev/null and b/software/PC/SSComm/bin/Debug/SSComm.pdb differ diff --git a/software/PC/SSComm/bin/Release/LibUsbDotNet.dll b/software/PC/SSComm/bin/Release/LibUsbDotNet.dll new file mode 100644 index 0000000..e10661b Binary files /dev/null and b/software/PC/SSComm/bin/Release/LibUsbDotNet.dll differ diff --git a/software/PC/SSComm/bin/Release/SSComm.dll b/software/PC/SSComm/bin/Release/SSComm.dll new file mode 100644 index 0000000..864202e Binary files /dev/null and b/software/PC/SSComm/bin/Release/SSComm.dll differ diff --git a/software/PC/SSComm/bin/Release/SSComm.pdb b/software/PC/SSComm/bin/Release/SSComm.pdb new file mode 100644 index 0000000..245989c Binary files /dev/null and b/software/PC/SSComm/bin/Release/SSComm.pdb differ diff --git a/software/PC/SSComm/common.cs b/software/PC/SSComm/common.cs new file mode 100644 index 0000000..6c3984c --- /dev/null +++ b/software/PC/SSComm/common.cs @@ -0,0 +1,23 @@ +using System; + +namespace SSComm +{ + + public interface IUniComm : IDisposable + { + bool Connected { get; } + Int32 BytesSent(); + Int32 BytesReceived(); + void Init(); + bool Connect(); + void Disconnect(); + byte ReadByte(); + Int32 Read(ref byte[] DBuffer, Int32 DOffset, Int32 MaxBytes); + void WriteByte(ref byte wb, bool DoWake = true); + bool Write(ref byte[] DBuffer, Int32 DOffset, Int32 NumBytes); + Int32 RXDataCount { get; } + Int32 TXFreeSpace { get; } + event EventHandler DataReceived; + } +} + diff --git a/software/PC/SSComm/obj/Debug/DesignTimeResolveAssemblyReferences.cache b/software/PC/SSComm/obj/Debug/DesignTimeResolveAssemblyReferences.cache new file mode 100644 index 0000000..b0ce604 Binary files /dev/null and b/software/PC/SSComm/obj/Debug/DesignTimeResolveAssemblyReferences.cache differ diff --git a/software/PC/SSComm/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/software/PC/SSComm/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache new file mode 100644 index 0000000..162dc39 Binary files /dev/null and b/software/PC/SSComm/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache differ diff --git a/software/PC/SSComm/obj/Debug/SSComm.csproj.FileListAbsolute.txt b/software/PC/SSComm/obj/Debug/SSComm.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..54ff29e --- /dev/null +++ b/software/PC/SSComm/obj/Debug/SSComm.csproj.FileListAbsolute.txt @@ -0,0 +1,11 @@ +C:\Users\Sparky\Desktop\MyProjects\Electronics\Lib\DOTNET\SSComm\bin\Debug\SSComm.dll +C:\Users\Sparky\Desktop\MyProjects\Electronics\Lib\DOTNET\SSComm\bin\Debug\SSComm.pdb +C:\Users\Sparky\Desktop\MyProjects\Electronics\Lib\DOTNET\SSComm\bin\Debug\LibUsbDotNet.dll +C:\Users\Sparky\Desktop\MyProjects\Electronics\Lib\DOTNET\SSComm\obj\Debug\SSComm.dll +C:\Users\Sparky\Desktop\MyProjects\Electronics\Lib\DOTNET\SSComm\obj\Debug\SSComm.pdb +C:\Users\Sparky\Desktop\MyProjects\Electronics\Lib\DOTNET\SSComm\obj\Debug\SSComm.csprojResolveAssemblyReference.cache +C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\PC\SSComm\bin\Debug\SSComm.dll +C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\PC\SSComm\bin\Debug\SSComm.pdb +C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\PC\SSComm\bin\Debug\LibUsbDotNet.dll +C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\PC\SSComm\obj\Debug\SSComm.dll +C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\PC\SSComm\obj\Debug\SSComm.pdb diff --git a/software/PC/SSComm/obj/Debug/SSComm.dll b/software/PC/SSComm/obj/Debug/SSComm.dll new file mode 100644 index 0000000..261ccaa Binary files /dev/null and b/software/PC/SSComm/obj/Debug/SSComm.dll differ diff --git a/software/PC/SSComm/obj/Debug/SSComm.pdb b/software/PC/SSComm/obj/Debug/SSComm.pdb new file mode 100644 index 0000000..0c9fe6a Binary files /dev/null and b/software/PC/SSComm/obj/Debug/SSComm.pdb differ diff --git a/software/PC/SSComm/obj/Release/DesignTimeResolveAssemblyReferencesInput.cache b/software/PC/SSComm/obj/Release/DesignTimeResolveAssemblyReferencesInput.cache new file mode 100644 index 0000000..bf3b279 Binary files /dev/null and b/software/PC/SSComm/obj/Release/DesignTimeResolveAssemblyReferencesInput.cache differ diff --git a/software/PC/SSComm/obj/Release/SSComm.csproj.FileListAbsolute.txt b/software/PC/SSComm/obj/Release/SSComm.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..7a6344c --- /dev/null +++ b/software/PC/SSComm/obj/Release/SSComm.csproj.FileListAbsolute.txt @@ -0,0 +1,6 @@ +C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\PC\SSComm\bin\Release\SSComm.dll +C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\PC\SSComm\bin\Release\SSComm.pdb +C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\PC\SSComm\bin\Release\LibUsbDotNet.dll +C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\PC\SSComm\obj\Release\SSComm.csprojResolveAssemblyReference.cache +C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\PC\SSComm\obj\Release\SSComm.dll +C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\PC\SSComm\obj\Release\SSComm.pdb diff --git a/software/PC/SSComm/obj/Release/SSComm.csprojResolveAssemblyReference.cache b/software/PC/SSComm/obj/Release/SSComm.csprojResolveAssemblyReference.cache new file mode 100644 index 0000000..8b85537 Binary files /dev/null and b/software/PC/SSComm/obj/Release/SSComm.csprojResolveAssemblyReference.cache differ diff --git a/software/PC/SSComm/obj/Release/SSComm.dll b/software/PC/SSComm/obj/Release/SSComm.dll new file mode 100644 index 0000000..864202e Binary files /dev/null and b/software/PC/SSComm/obj/Release/SSComm.dll differ diff --git a/software/PC/SSComm/obj/Release/SSComm.pdb b/software/PC/SSComm/obj/Release/SSComm.pdb new file mode 100644 index 0000000..245989c Binary files /dev/null and b/software/PC/SSComm/obj/Release/SSComm.pdb differ diff --git a/software/PC/SSComm/usb_generic.cs b/software/PC/SSComm/usb_generic.cs new file mode 100644 index 0000000..bb7197b --- /dev/null +++ b/software/PC/SSComm/usb_generic.cs @@ -0,0 +1,315 @@ +using System; +using System.Threading; +using System.Diagnostics; +using LibUsbDotNet; +using LibUsbDotNet.Main; + +namespace SSComm +{ + + public class USBGen_LibUSB : IUniComm + { + public bool Connected { get; private set; } = false; + + public Int32 lBytesSent; + public Int32 lBytesReceived; + + public const Int32 RXFIFOSIZE = 32768; + public const Int32 TXFIFOSIZE = 16384; + + public Int32 DevVID = Int32.MaxValue; + public Int32 DevPID = Int32.MaxValue; + public Int32 DevRevision = Int32.MaxValue; + public string DevSerialNumber = string.Empty; + + public Guid DevGUID = Guid.Empty; + + public event EventHandler DataReceived; + + private UsbDevice MyUSBDevice; + private UsbDeviceFinder MyUSBDeviceFinder; + private IUsbDevice WholeUSBDevice; + private UsbEndpointWriter MyUSBWriter; + private UsbEndpointReader MyUSBReader; + private UsbSetupPacket MyUSBSetupPacket; + + private byte[] RXFIFO = new byte[RXFIFOSIZE]; + private Int32 RXReadPos; + private Int32 RXWritePos; + + private byte[] TXFIFO = new byte[TXFIFOSIZE]; + private Int32 TXReadPos; + private Int32 TXWritePos; + + private System.Threading.Thread bkThread; + private bool bkThExit; + private ManualResetEvent bkThInterrupt = new ManualResetEvent(false); + + public bool Connect() + { + bool rv = false; + rv = false; + Disconnect(); + MyUSBDeviceFinder = new UsbDeviceFinder(DevVID, DevPID, DevRevision, DevSerialNumber, DevGUID); + MyUSBDevice = UsbDevice.OpenUsbDevice(MyUSBDeviceFinder); + if (MyUSBDevice != null) + { + WholeUSBDevice = MyUSBDevice as IUsbDevice; + if (!ReferenceEquals(WholeUSBDevice, null)) + { + WholeUSBDevice.SetConfiguration(1); + WholeUSBDevice.ClaimInterface(0); + } + MyUSBWriter = MyUSBDevice.OpenEndpointWriter(WriteEndpointID.Ep01); + MyUSBReader = MyUSBDevice.OpenEndpointReader(ReadEndpointID.Ep01, 4096); + MyUSBReader.DataReceived += MyUSBReader_DataReceived; + MyUSBReader.DataReceivedEnabled = true; + + MyUSBSetupPacket.RequestType = (byte)(UsbCtrlFlags.RequestType_Vendor | UsbCtrlFlags.Recipient_Interface | UsbCtrlFlags.Direction_In); + MyUSBSetupPacket.Request = 1; + MyUSBSetupPacket.Value = 0; + MyUSBSetupPacket.Length = 4; + + bkThread = new System.Threading.Thread(this.Th_DoWork); + bkThExit = false; + bkThread.Start(); + rv = true; + } + return rv; + } + + public void Disconnect() + { + if (bkThread != null) + { + bkThExit = true; + bkThInterrupt.Set(); + if (bkThread.ThreadState == System.Threading.ThreadState.Running) bkThread.Join(); + } + bkThread = null; + if (MyUSBDevice != null) + { + if (MyUSBDevice.IsOpen) + { + WholeUSBDevice = MyUSBDevice as IUsbDevice; + if (!ReferenceEquals(WholeUSBDevice, null)) + { + WholeUSBDevice.ReleaseInterface(0); + } + MyUSBReader.DataReceivedEnabled = false; + MyUSBReader.DataReceived -= MyUSBReader_DataReceived; + MyUSBDevice.Close(); + } + MyUSBDevice = null; + WholeUSBDevice = null; + MyUSBDeviceFinder = null; + MyUSBReader = null; + MyUSBWriter = null; + } + } + + public void Init() + { + Disconnect(); + lBytesSent = 0; + lBytesReceived = 0; + RXReadPos = 0; + RXWritePos = 0; + DevVID = Int32.MaxValue; + DevPID = Int32.MaxValue; + DevRevision = Int32.MaxValue; + DevGUID = Guid.Empty; + } + + public Int32 BytesSent() + { + return lBytesSent; + } + + public Int32 BytesReceived() + { + return lBytesReceived; + } + + public Int32 RXDataCount + { + get + { + Int32 i; + i = RXWritePos - RXReadPos; + if (i < 0) i += RXFIFOSIZE; + return i; + } + } + + public byte ReadByte() + { + byte rv; + if (RXWritePos != RXReadPos) + { + rv = RXFIFO[RXReadPos]; + RXReadPos = (RXReadPos + 1) % RXFIFOSIZE; + return rv; + } + else + { + throw new Exception("SSComm(USBGen_LibUSB).ReadByte: RX FIFO empty!"); + } + } + + public Int32 Read(ref byte[] DBuffer, Int32 DOffset, Int32 MaxBytes) + { + Int32 i; + if (MaxBytes < 0) MaxBytes = 0; + if (MaxBytes > 0) + { + i = RXDataCount; + if (MaxBytes > i) MaxBytes = i; + if (MaxBytes < i) i = MaxBytes; + while (i > 0) + { + DBuffer[DOffset] = RXFIFO[RXReadPos]; + DOffset += 1; + RXReadPos = (RXReadPos + 1) % RXFIFOSIZE; + i -= 1; + } + } + return MaxBytes; + } + + public Int32 TXFreeSpace + { + get + { + Int32 i; + i = TXWritePos - TXReadPos; + if (i < 0) i += TXFIFOSIZE; + i = TXFIFOSIZE - i; + return i; + } + } + + public void WriteByte(ref byte wb, bool dow = true) + { + if (TXFreeSpace > 0) + { + TXFIFO[TXWritePos] = wb; + TXWritePos = (TXWritePos + 1) % TXFIFOSIZE; + if (dow && (bkThread != null)) bkThInterrupt.Set(); + } + else + { + throw new Exception("SSComm(USBGen_LibUSB).WriteByte: TX FIFO Full!"); + } + } + + public bool Write(ref byte[] DBuffer, int DOffset, int NumBytes) + { + Int32 i; + if (NumBytes > TXFreeSpace) throw new Exception("Not enough space in TX buffer."); + for (i = 0; i < NumBytes; i++) + { + TXFIFO[TXWritePos] = DBuffer[DOffset + i]; + TXWritePos = (TXWritePos + 1) % TXFIFOSIZE; + } + if (bkThread != null)bkThInterrupt.Set(); + return true; + } + + public void Dispose() + { + Disconnect(); + } + + private void MyUSBReader_DataReceived(object sender, LibUsbDotNet.Main.EndpointDataEventArgs e) + { + Int32 i; + if (e.Count > 0) + { + lBytesReceived += e.Count; + if (RXDataCount + e.Count < RXFIFOSIZE) + { + for (i = 0; i < e.Count; i++) + { + RXFIFO[RXWritePos] = e.Buffer[i]; + RXWritePos = (RXWritePos + 1) % RXFIFOSIZE; + } + } + else + { + throw new Exception("RX FIFO overflow"); + } + if (DataReceived != null) + { + DataReceived(this, new EventArgs()); + } + } + } + + private void Th_DoWork() + { + Int32 lDevMaxDataSize; + Int32 lDevWait; + Int32 lTXSize; + Int32[] i = new Int32[1]; + bool TXSuccess; + lDevWait = 0; + try + { + while (true) + { + if (TXReadPos != TXWritePos) + { + lDevWait += 1; + if (lDevWait > 1000) lDevWait = 1000; + if (MyUSBDevice != null) + { + if (MyUSBDevice.IsOpen) + { + if (MyUSBWriter != null) + { + //query how much data device can accept + if (MyUSBDevice.ControlTransfer(ref MyUSBSetupPacket, i, 4, out lTXSize)) + { + if (lTXSize == 4) + { + lDevMaxDataSize = i[0]; + //Debug.Print("Device can accept maximum " & lDevMaxDataSize & " byte(s)") + if (lDevMaxDataSize > 0) + { + lDevWait = 0; + lTXSize = TXWritePos - TXReadPos; + if (lTXSize < 0) + lTXSize += TXFIFOSIZE; + if (lTXSize > 0) + { + if (lTXSize > lDevMaxDataSize) lTXSize = lDevMaxDataSize; + if ((TXReadPos + lTXSize) >= TXFIFOSIZE) lTXSize = TXFIFOSIZE - TXReadPos; + TXSuccess = (MyUSBWriter.Write(TXFIFO, TXReadPos, lTXSize, 2000, out lTXSize) == ErrorCode.Success); + if (TXSuccess) + { + TXReadPos = (TXReadPos + lTXSize) % TXFIFOSIZE; + lBytesSent += lTXSize; + } + } + } + } + } + } + } + } + bkThInterrupt.WaitOne(lDevWait); + bkThInterrupt.Reset(); + } + else + { + bkThInterrupt.WaitOne(Timeout.Infinite); + bkThInterrupt.Reset(); + } + if (bkThExit) break; + } + } + catch (ThreadAbortException) { } + } + } +} diff --git a/software/PC/SSComm/usb_hid.cs b/software/PC/SSComm/usb_hid.cs new file mode 100644 index 0000000..39b08bc --- /dev/null +++ b/software/PC/SSComm/usb_hid.cs @@ -0,0 +1,393 @@ +using System; +using System.Threading; +using System.Diagnostics; +using System.Runtime.InteropServices; +using System.Windows.Forms; +using System.IO; +using Microsoft.VisualBasic; +using Microsoft.Win32.SafeHandles; +using System.Runtime.Remoting.Messaging; + +using LibUsbDotNet; +using LibUsbDotNet.Main; + +namespace SSComm +{ + public partial class USBHID : IUniComm + { + public bool Connected { get; private set; } = false; + + public Int32 lBytesSent; + public Int32 lBytesReceived; + + public const Int32 RXFIFOSIZE = 32768; + public const Int32 TXFIFOSIZE = 16384; + + public UInt16 DevVID = UInt16.MaxValue; + public UInt16 DevPID = UInt16.MaxValue; + public Int32 DevRevision = Int32.MaxValue; + public string DevSerialNumber = string.Empty; + public Guid DevGUID = Guid.Empty; + + public event EventHandler DataReceived; + + private UsbDevice MyUSBDevice; + private UsbDeviceFinder MyUSBDeviceFinder; + private IUsbDevice WholeUSBDevice; + private UsbEndpointWriter MyUSBWriter; + private UsbEndpointReader MyUSBReader; + private UsbSetupPacket MyUSBSetupPacket; + + private byte[] RXFIFO = new byte[RXFIFOSIZE]; + private Int32 RXReadPos; + private Int32 RXWritePos; + + private byte[] TXFIFO = new byte[TXFIFOSIZE]; + private Int32 TXReadPos; + private Int32 TXWritePos; + + private System.Threading.Thread bkThread; + private bool bkThExit; + private ManualResetEvent bkThInterript = new ManualResetEvent(false); + + private Hid MyHid = new Hid(); + private DeviceManagement MyDeviceManagement = new DeviceManagement(); + private SafeFileHandle hidHandleR; + private SafeFileHandle hidHandleW; + private FileStream hidFSR; + private FileStream hidFSW; + private string myDevicePathName; + + private byte[] rxBuffer; + private byte[] txBuffer; + + private object ThisLock = new Object(); + + public bool Connect() + { + string[] devicePathName = new string[128]; + bool myDeviceDetected = false; + + if (Connected) Disconnect(); + + Guid hidGuid = Guid.Empty; + Hid.HidD_GetHidGuid(ref hidGuid); + if (MyDeviceManagement.FindDeviceFromGuid(hidGuid, ref devicePathName)) + { + int memberIndex = 0; + do + { + hidHandleR = FileIO.CreateFile(devicePathName[memberIndex], 0, FileIO.FILE_SHARE_READ | FileIO.FILE_SHARE_WRITE, IntPtr.Zero, FileIO.OPEN_EXISTING, 0, 0); + if (!hidHandleR.IsInvalid) + { + MyHid.DeviceAttributes.Size = Marshal.SizeOf(MyHid.DeviceAttributes); + if (Hid.HidD_GetAttributes(hidHandleR, ref MyHid.DeviceAttributes)) + { + if ((MyHid.DeviceAttributes.VendorID == DevVID) && (MyHid.DeviceAttributes.ProductID == DevPID)) + { + myDeviceDetected = true; + myDevicePathName = devicePathName[memberIndex]; + } + else + { + myDeviceDetected = false; + hidHandleR.Close(); + } + } + else + { + myDeviceDetected = false; + hidHandleR.Close(); + } + } + memberIndex++; + } + while (!(myDeviceDetected || memberIndex == devicePathName.Length)); + if (myDeviceDetected) + { + MyHid.Capabilities = MyHid.GetDeviceCapabilities(hidHandleR); + MyHid.GetHidUsage(MyHid.Capabilities); + hidHandleR.Close(); + hidHandleR = FileIO.CreateFile(myDevicePathName, FileIO.GENERIC_READ, FileIO.FILE_SHARE_READ | FileIO.FILE_SHARE_WRITE, IntPtr.Zero, FileIO.OPEN_EXISTING, 0, 0); + hidHandleW = FileIO.CreateFile(myDevicePathName, FileIO.GENERIC_WRITE, FileIO.FILE_SHARE_READ | FileIO.FILE_SHARE_WRITE, IntPtr.Zero, FileIO.OPEN_EXISTING, 0, 0); + if (hidHandleR.IsInvalid || hidHandleW.IsInvalid) + { + Connected = false; + hidFSR.Close(); + hidFSW.Close(); + if (!hidHandleR.IsInvalid) hidHandleR.Close(); + if (!hidHandleW.IsInvalid) hidHandleW.Close(); + } + else + { + MyHid.FlushQueue(hidHandleR); + MyHid.FlushQueue(hidHandleW); + hidFSR = new FileStream(hidHandleR, FileAccess.Read, MyHid.Capabilities.OutputReportByteLength, false); //false); + hidFSW = new FileStream(hidHandleW, FileAccess.Write, MyHid.Capabilities.OutputReportByteLength, false); //false); + rxBuffer = new Byte[MyHid.Capabilities.InputReportByteLength]; + hidFSR.BeginRead(rxBuffer, 0, rxBuffer.Length, new AsyncCallback(ReadCallback), rxBuffer); + bkThread = new System.Threading.Thread(this.Th_DoWork); + bkThExit = false; + bkThread.Start(); + Connected = true; + } + } + } + return Connected; + } + + private void ReadCallback(IAsyncResult ar) + { + if (hidFSR != null) + { + try + { + hidFSR.EndRead(ar); + if (ar.IsCompleted) + { + lBytesReceived += rxBuffer.Length; + if (RXDataCount + rxBuffer.Length < RXFIFOSIZE) + { + for (int i = 1; i < rxBuffer.Length; i++) + { + RXFIFO[RXWritePos] = rxBuffer[i]; + RXWritePos = (RXWritePos + 1) % RXFIFOSIZE; + } + } + else + { + throw new Exception("RX FIFO overflow"); + } + if (DataReceived != null) + { + DataReceived(this, new EventArgs()); + } + } + hidFSR.BeginRead(rxBuffer, 0, rxBuffer.Length, new AsyncCallback(ReadCallback), rxBuffer); + } + catch + { + Disconnect(); + } + } + } + + + public void Disconnect() + { + if (bkThread != null) + { + bkThExit = true; + bkThInterript.Set(); + if (bkThread.ThreadState == System.Threading.ThreadState.Running) bkThread.Join(); + } + bkThread = null; + lock (ThisLock) + { + if (hidFSR != null) + { + hidFSR.Close(); + hidFSR = null; + } + if (hidFSW != null) + { + hidFSW.Close(); + hidFSW = null; + } + if ((hidHandleR != null) && (!(hidHandleR.IsInvalid))) + { + hidHandleR.Close(); + } + if ((hidHandleW != null) && (!(hidHandleW.IsInvalid))) + { + hidHandleW.Close(); + } + hidHandleR = null; + hidHandleW = null; + myDevicePathName = ""; + } + Connected = false; + } + + public void Init() + { + Disconnect(); + lBytesSent = 0; + lBytesReceived = 0; + RXReadPos = 0; + RXWritePos = 0; + DevVID = UInt16.MaxValue; + DevPID = UInt16.MaxValue; + DevRevision = Int32.MaxValue; + DevGUID = Guid.Empty; + } + + public Int32 BytesSent() + { + return lBytesSent; + } + + public Int32 BytesReceived() + { + return lBytesReceived; + } + + public Int32 RXDataCount + { + get + { + Int32 i; + i = RXWritePos - RXReadPos; + if (i < 0) i += RXFIFOSIZE; + return i; + } + } + + public byte ReadByte() + { + byte rv; + if (RXWritePos != RXReadPos) + { + rv = RXFIFO[RXReadPos]; + RXReadPos = (RXReadPos + 1) % RXFIFOSIZE; + return rv; + } + else + { + throw new Exception("SSComm(USBGen_LibUSB).ReadByte: RX FIFO empty!"); + } + } + + public Int32 Read(ref byte[] DBuffer, Int32 DOffset, Int32 MaxBytes) + { + Int32 i; + if (MaxBytes < 0) MaxBytes = 0; + if (MaxBytes > 0) + { + i = RXDataCount; + if (MaxBytes > i) MaxBytes = i; + if (MaxBytes < i) i = MaxBytes; + while (i > 0) + { + DBuffer[DOffset] = RXFIFO[RXReadPos]; + DOffset += 1; + RXReadPos = (RXReadPos + 1) % RXFIFOSIZE; + i -= 1; + } + } + return MaxBytes; + } + + public Int32 TXFreeSpace + { + get + { + Int32 i; + i = TXWritePos - TXReadPos; + if (i < 0) i += TXFIFOSIZE; + i = TXFIFOSIZE - i; + return i; + } + } + + public void WriteByte(ref byte wb, bool dow = true) + { + if (TXFreeSpace > 0) + { + TXFIFO[TXWritePos] = wb; + TXWritePos = (TXWritePos + 1) % TXFIFOSIZE; + if (dow && (bkThread != null)) bkThInterript.Set(); + } + else + { + throw new Exception("SSComm(USBGen_LibUSB).WriteByte: TX FIFO Full!"); + } + } + + public bool Write(ref byte[] DBuffer, int DOffset, int NumBytes) + { + Int32 i; + if (NumBytes > TXFreeSpace) throw new Exception("Not enough space in TX buffer."); + for (i = 0; i < NumBytes; i++) + { + TXFIFO[TXWritePos] = DBuffer[DOffset + i]; + TXWritePos = (TXWritePos + 1) % TXFIFOSIZE; + } + if (bkThread != null) bkThInterript.Set(); + return true; + } + + public void Dispose() + { + Disconnect(); + } + + private void MyUSBReader_DataReceived(object sender, LibUsbDotNet.Main.EndpointDataEventArgs e) + { + Int32 i; + if (e.Count > 0) + { + lBytesReceived += e.Count; + if (RXDataCount + e.Count < RXFIFOSIZE) + { + for (i = 0; i < e.Count; i++) + { + RXFIFO[RXWritePos] = e.Buffer[i]; + RXWritePos = (RXWritePos + 1) % RXFIFOSIZE; + } + } + else + { + throw new Exception("RX FIFO overflow"); + } + if (DataReceived != null) + { + DataReceived(this, new EventArgs()); + } + } + } + + private void Th_DoWork() + { + Int32 lTXSize; + Int32 i; + byte[] b = new byte[MyHid.Capabilities.OutputReportByteLength]; + try + { + while (true) + { + if (hidFSW != null && hidFSW.CanWrite) + { + lTXSize = TXWritePos - TXReadPos; + if (lTXSize < 0) lTXSize += TXFIFOSIZE; + if (lTXSize >= (b.Length - 1)) + { + b[0] = 0; + for (i = 0; i < (b.Length - 1); i++) + { + b[i + 1] = TXFIFO[(TXReadPos + i) % TXFIFOSIZE]; + } + hidFSW.Write(b, 0, b.Length); + hidFSW.Flush(); + TXReadPos += b.Length - 1; + TXReadPos %= TXFIFOSIZE; + lBytesSent += b.Length - 1; + } + else + { + bkThInterript.WaitOne(Timeout.Infinite); + bkThInterript.Reset(); + } + } + else + { + bkThInterript.WaitOne(Timeout.Infinite); + bkThInterript.Reset(); + } + if (bkThExit) break; + } + } + catch (ThreadAbortException) { } + } + } +} diff --git a/software/PC/SSComm/usb_hid/devman.cs b/software/PC/SSComm/usb_hid/devman.cs new file mode 100644 index 0000000..7f62825 --- /dev/null +++ b/software/PC/SSComm/usb_hid/devman.cs @@ -0,0 +1,429 @@ +/// +/// Routines for detecting devices and receiving device notifications. +/// + +using System; +using System.Runtime.InteropServices; +using System.Windows.Forms; + +namespace SSComm +{ + internal sealed partial class DeviceManagement + { + /// + /// Compares two device path names. Used to find out if the device name + /// of a recently attached or removed device matches the name of a + /// device the application is communicating with. + /// + /// + /// a WM_DEVICECHANGE message. A call to RegisterDeviceNotification + /// causes WM_DEVICECHANGE messages to be passed to an OnDeviceChange routine.. + /// a device pathname returned by + /// SetupDiGetDeviceInterfaceDetail in an SP_DEVICE_INTERFACE_DETAIL_DATA structure. + /// + /// + /// True if the names match, False if not. + /// + /// + internal Boolean DeviceNameMatch(Message m, String mydevicePathName) + { + Int32 stringSize; + + try + { + DEV_BROADCAST_DEVICEINTERFACE_1 devBroadcastDeviceInterface = new DEV_BROADCAST_DEVICEINTERFACE_1(); + DEV_BROADCAST_HDR devBroadcastHeader = new DEV_BROADCAST_HDR(); + + // The LParam parameter of Message is a pointer to a DEV_BROADCAST_HDR structure. + + Marshal.PtrToStructure(m.LParam, devBroadcastHeader); + + if ((devBroadcastHeader.dbch_devicetype == DBT_DEVTYP_DEVICEINTERFACE)) + { + // The dbch_devicetype parameter indicates that the event applies to a device interface. + // So the structure in LParam is actually a DEV_BROADCAST_INTERFACE structure, + // which begins with a DEV_BROADCAST_HDR. + + // Obtain the number of characters in dbch_name by subtracting the 32 bytes + // in the strucutre that are not part of dbch_name and dividing by 2 because there are + // 2 bytes per character. + + stringSize = System.Convert.ToInt32((devBroadcastHeader.dbch_size - 32) / 2); + + // The dbcc_name parameter of devBroadcastDeviceInterface contains the device name. + // Trim dbcc_name to match the size of the String. + + devBroadcastDeviceInterface.dbcc_name = new Char[stringSize + 1]; + + // Marshal data from the unmanaged block pointed to by m.LParam + // to the managed object devBroadcastDeviceInterface. + + Marshal.PtrToStructure(m.LParam, devBroadcastDeviceInterface); + + // Store the device name in a String. + + String DeviceNameString = new String(devBroadcastDeviceInterface.dbcc_name, 0, stringSize); + + // Compare the name of the newly attached device with the name of the device + // the application is accessing (mydevicePathName). + // Set ignorecase True. + + if ((String.Compare(DeviceNameString, mydevicePathName, true) == 0)) + { + return true; + } + else + { + return false; + } + } + } + catch (Exception ex) + { + throw; + } + + return false; + } + + /// + /// Use SetupDi API functions to retrieve the device path name of an + /// attached device that belongs to a device interface class. + /// + /// + /// an interface class GUID. + /// a pointer to the device path name + /// of an attached device. + /// + /// + /// True if a device is found, False if not. + /// + + internal Boolean FindDeviceFromGuid(System.Guid myGuid, ref String[] devicePathName) + { + Int32 bufferSize = 0; + IntPtr detailDataBuffer = IntPtr.Zero; + Boolean deviceFound; + IntPtr deviceInfoSet = new System.IntPtr(); + Boolean lastDevice = false; + Int32 memberIndex = 0; + SP_DEVICE_INTERFACE_DATA MyDeviceInterfaceData = new SP_DEVICE_INTERFACE_DATA(); + Boolean success; + + try + { + // *** + // API function + + // summary + // Retrieves a device information set for a specified group of devices. + // SetupDiEnumDeviceInterfaces uses the device information set. + + // parameters + // Interface class GUID. + // Null to retrieve information for all device instances. + // Optional handle to a top-level window (unused here). + // Flags to limit the returned information to currently present devices + // and devices that expose interfaces in the class specified by the GUID. + + // Returns + // Handle to a device information set for the devices. + // *** + + deviceInfoSet = SetupDiGetClassDevs(ref myGuid, IntPtr.Zero, IntPtr.Zero, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); + + deviceFound = false; + memberIndex = 0; + + // The cbSize element of the MyDeviceInterfaceData structure must be set to + // the structure's size in bytes. + // The size is 28 bytes for 32-bit code and 32 bits for 64-bit code. + + MyDeviceInterfaceData.cbSize = Marshal.SizeOf(MyDeviceInterfaceData); + + do + { + // Begin with 0 and increment through the device information set until + // no more devices are available. + + // *** + // API function + + // summary + // Retrieves a handle to a SP_DEVICE_INTERFACE_DATA structure for a device. + // On return, MyDeviceInterfaceData contains the handle to a + // SP_DEVICE_INTERFACE_DATA structure for a detected device. + + // parameters + // DeviceInfoSet returned by SetupDiGetClassDevs. + // Optional SP_DEVINFO_DATA structure that defines a device instance + // that is a member of a device information set. + // Device interface GUID. + // Index to specify a device in a device information set. + // Pointer to a handle to a SP_DEVICE_INTERFACE_DATA structure for a device. + + // Returns + // True on success. + // *** + + success = SetupDiEnumDeviceInterfaces + (deviceInfoSet, + IntPtr.Zero, + ref myGuid, + memberIndex, + ref MyDeviceInterfaceData); + + // Find out if a device information set was retrieved. + + if (!success) + { + lastDevice = true; + + } + else + { + // A device is present. + + // *** + // API function: + + // summary: + // Retrieves an SP_DEVICE_INTERFACE_DETAIL_DATA structure + // containing information about a device. + // To retrieve the information, call this function twice. + // The first time returns the size of the structure. + // The second time returns a pointer to the data. + + // parameters + // DeviceInfoSet returned by SetupDiGetClassDevs + // SP_DEVICE_INTERFACE_DATA structure returned by SetupDiEnumDeviceInterfaces + // A returned pointer to an SP_DEVICE_INTERFACE_DETAIL_DATA + // Structure to receive information about the specified interface. + // The size of the SP_DEVICE_INTERFACE_DETAIL_DATA structure. + // Pointer to a variable that will receive the returned required size of the + // SP_DEVICE_INTERFACE_DETAIL_DATA structure. + // Returned pointer to an SP_DEVINFO_DATA structure to receive information about the device. + + // Returns + // True on success. + // *** + + success = SetupDiGetDeviceInterfaceDetail + (deviceInfoSet, + ref MyDeviceInterfaceData, + IntPtr.Zero, + 0, + ref bufferSize, + IntPtr.Zero); + + // Allocate memory for the SP_DEVICE_INTERFACE_DETAIL_DATA structure using the returned buffer size. + + detailDataBuffer = Marshal.AllocHGlobal(bufferSize); + + // Store cbSize in the first bytes of the array. The number of bytes varies with 32- and 64-bit systems. + + Marshal.WriteInt32(detailDataBuffer, (IntPtr.Size == 4) ? (4 + Marshal.SystemDefaultCharSize) : 8); + + // Call SetupDiGetDeviceInterfaceDetail again. + // This time, pass a pointer to DetailDataBuffer + // and the returned required buffer size. + + success = SetupDiGetDeviceInterfaceDetail + (deviceInfoSet, + ref MyDeviceInterfaceData, + detailDataBuffer, + bufferSize, + ref bufferSize, + IntPtr.Zero); + + // Skip over cbsize (4 bytes) to get the address of the devicePathName. + + IntPtr pDevicePathName = new IntPtr(detailDataBuffer.ToInt32() + 4); + + // Get the String containing the devicePathName. + + devicePathName[memberIndex] = Marshal.PtrToStringAuto(pDevicePathName); + + if (detailDataBuffer != IntPtr.Zero) + { + // Free the memory allocated previously by AllocHGlobal. + + Marshal.FreeHGlobal(detailDataBuffer); + } + deviceFound = true; + } + memberIndex = memberIndex + 1; + } + while (!((lastDevice == true))); + + + + return deviceFound; + } + catch (Exception ex) + { + throw; + } + finally + { + + // *** + // API function + + // summary + // Frees the memory reserved for the DeviceInfoSet returned by SetupDiGetClassDevs. + + // parameters + // DeviceInfoSet returned by SetupDiGetClassDevs. + + // returns + // True on success. + // *** + + if (deviceInfoSet != IntPtr.Zero) + { + SetupDiDestroyDeviceInfoList(deviceInfoSet); + } + } + } + + + /// + /// Requests to receive a notification when a device is attached or removed. + /// + /// + /// handle to a device. + /// handle to the window that will receive device events. + /// device interface GUID. + /// returned device notification handle. + /// + /// + /// True on success. + /// + /// + internal Boolean RegisterForDeviceNotifications(String devicePathName, IntPtr formHandle, Guid classGuid, ref IntPtr deviceNotificationHandle) + { + // A DEV_BROADCAST_DEVICEINTERFACE header holds information about the request. + + DEV_BROADCAST_DEVICEINTERFACE devBroadcastDeviceInterface = new DEV_BROADCAST_DEVICEINTERFACE(); + IntPtr devBroadcastDeviceInterfaceBuffer = IntPtr.Zero; + Int32 size = 0; + + try + { + // Set the parameters in the DEV_BROADCAST_DEVICEINTERFACE structure. + + // Set the size. + + size = Marshal.SizeOf(devBroadcastDeviceInterface); + devBroadcastDeviceInterface.dbcc_size = size; + + // Request to receive notifications about a class of devices. + + devBroadcastDeviceInterface.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE; + + devBroadcastDeviceInterface.dbcc_reserved = 0; + + // Specify the interface class to receive notifications about. + + devBroadcastDeviceInterface.dbcc_classguid = classGuid; + + // Allocate memory for the buffer that holds the DEV_BROADCAST_DEVICEINTERFACE structure. + + devBroadcastDeviceInterfaceBuffer = Marshal.AllocHGlobal(size); + + // Copy the DEV_BROADCAST_DEVICEINTERFACE structure to the buffer. + // Set fDeleteOld True to prevent memory leaks. + + Marshal.StructureToPtr(devBroadcastDeviceInterface, devBroadcastDeviceInterfaceBuffer, true); + + // *** + // API function + + // summary + // Request to receive notification messages when a device in an interface class + // is attached or removed. + + // parameters + // Handle to the window that will receive device events. + // Pointer to a DEV_BROADCAST_DEVICEINTERFACE to specify the type of + // device to send notifications for. + // DEVICE_NOTIFY_WINDOW_HANDLE indicates the handle is a window handle. + + // Returns + // Device notification handle or NULL on failure. + // *** + + deviceNotificationHandle = RegisterDeviceNotification(formHandle, devBroadcastDeviceInterfaceBuffer, DEVICE_NOTIFY_WINDOW_HANDLE); + + // Marshal data from the unmanaged block devBroadcastDeviceInterfaceBuffer to + // the managed object devBroadcastDeviceInterface + + Marshal.PtrToStructure(devBroadcastDeviceInterfaceBuffer, devBroadcastDeviceInterface); + + + + if ((deviceNotificationHandle.ToInt32() == IntPtr.Zero.ToInt32())) + { + return false; + } + else + { + return true; + } + } + catch (Exception ex) + { + throw; + } + finally + { + if (devBroadcastDeviceInterfaceBuffer != IntPtr.Zero) + { + // Free the memory allocated previously by AllocHGlobal. + + Marshal.FreeHGlobal(devBroadcastDeviceInterfaceBuffer); + } + } + } + + /// + /// Requests to stop receiving notification messages when a device in an + /// interface class is attached or removed. + /// + /// + /// handle returned previously by + /// RegisterDeviceNotification. + + internal void StopReceivingDeviceNotifications(IntPtr deviceNotificationHandle) + { + try + { + // *** + // API function + + // summary + // Stop receiving notification messages. + + // parameters + // Handle returned previously by RegisterDeviceNotification. + + // returns + // True on success. + // *** + + // Ignore failures. + + DeviceManagement.UnregisterDeviceNotification(deviceNotificationHandle); + } + catch (Exception ex) + { + throw; + } + } + } +} + + + + diff --git a/software/PC/SSComm/usb_hid/devmandeclarations.cs b/software/PC/SSComm/usb_hid/devmandeclarations.cs new file mode 100644 index 0000000..5d1aa7c --- /dev/null +++ b/software/PC/SSComm/usb_hid/devmandeclarations.cs @@ -0,0 +1,109 @@ +using System; +using System.Runtime.InteropServices; + +namespace SSComm +{ + internal sealed partial class DeviceManagement + { + /// + // API declarations relating to device management (SetupDixxx and + // RegisterDeviceNotification functions). + /// + + // from dbt.h + + internal const Int32 DBT_DEVICEARRIVAL = 0X8000; + internal const Int32 DBT_DEVICEREMOVECOMPLETE = 0X8004; + internal const Int32 DBT_DEVTYP_DEVICEINTERFACE = 5; + internal const Int32 DBT_DEVTYP_HANDLE = 6; + internal const Int32 DEVICE_NOTIFY_ALL_INTERFACE_CLASSES = 4; + internal const Int32 DEVICE_NOTIFY_SERVICE_HANDLE = 1; + internal const Int32 DEVICE_NOTIFY_WINDOW_HANDLE = 0; + internal const Int32 WM_DEVICECHANGE = 0X219; + + // from setupapi.h + + internal const Int32 DIGCF_PRESENT = 2; + internal const Int32 DIGCF_DEVICEINTERFACE = 0X10; + + // Two declarations for the DEV_BROADCAST_DEVICEINTERFACE structure. + + // Use this one in the call to RegisterDeviceNotification() and + // in checking dbch_devicetype in a DEV_BROADCAST_HDR structure: + + [StructLayout(LayoutKind.Sequential)] + internal class DEV_BROADCAST_DEVICEINTERFACE + { + internal Int32 dbcc_size; + internal Int32 dbcc_devicetype; + internal Int32 dbcc_reserved; + internal Guid dbcc_classguid; + internal Int16 dbcc_name; + } + + // Use this to read the dbcc_name String and classguid: + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] + internal class DEV_BROADCAST_DEVICEINTERFACE_1 + { + internal Int32 dbcc_size; + internal Int32 dbcc_devicetype; + internal Int32 dbcc_reserved; + [MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.U1, SizeConst = 16)] + internal Byte[] dbcc_classguid; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 255)] + internal Char[] dbcc_name; + } + + [StructLayout(LayoutKind.Sequential)] + internal class DEV_BROADCAST_HDR + { + internal Int32 dbch_size; + internal Int32 dbch_devicetype; + internal Int32 dbch_reserved; + } + + internal struct SP_DEVICE_INTERFACE_DATA + { + internal Int32 cbSize; + internal System.Guid InterfaceClassGuid; + internal Int32 Flags; + internal IntPtr Reserved; + } + + internal struct SP_DEVICE_INTERFACE_DETAIL_DATA + { + internal Int32 cbSize; + internal String DevicePath; + } + + internal struct SP_DEVINFO_DATA + { + internal Int32 cbSize; + internal System.Guid ClassGuid; + internal Int32 DevInst; + internal Int32 Reserved; + } + + [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] + internal static extern IntPtr RegisterDeviceNotification(IntPtr hRecipient, IntPtr NotificationFilter, Int32 Flags); + + [DllImport("setupapi.dll", SetLastError = true)] + internal static extern Int32 SetupDiCreateDeviceInfoList(ref System.Guid ClassGuid, Int32 hwndParent); + + [DllImport("setupapi.dll", SetLastError = true)] + internal static extern Int32 SetupDiDestroyDeviceInfoList(IntPtr DeviceInfoSet); + + [DllImport("setupapi.dll", SetLastError = true)] + internal static extern Boolean SetupDiEnumDeviceInterfaces(IntPtr DeviceInfoSet, IntPtr DeviceInfoData, ref System.Guid InterfaceClassGuid, Int32 MemberIndex, ref SP_DEVICE_INTERFACE_DATA DeviceInterfaceData); + + [DllImport("setupapi.dll", SetLastError = true, CharSet = CharSet.Auto)] + internal static extern IntPtr SetupDiGetClassDevs(ref System.Guid ClassGuid, IntPtr Enumerator, IntPtr hwndParent, Int32 Flags); + + [DllImport("setupapi.dll", SetLastError = true, CharSet = CharSet.Auto)] + internal static extern Boolean SetupDiGetDeviceInterfaceDetail(IntPtr DeviceInfoSet, ref SP_DEVICE_INTERFACE_DATA DeviceInterfaceData, IntPtr DeviceInterfaceDetailData, Int32 DeviceInterfaceDetailDataSize, ref Int32 RequiredSize, IntPtr DeviceInfoData); + + [DllImport("user32.dll", SetLastError = true)] + internal static extern Boolean UnregisterDeviceNotification(IntPtr Handle); + } +} diff --git a/software/PC/SSComm/usb_hid/fileIOdeclarations.cs b/software/PC/SSComm/usb_hid/fileIOdeclarations.cs new file mode 100644 index 0000000..d3cceb8 --- /dev/null +++ b/software/PC/SSComm/usb_hid/fileIOdeclarations.cs @@ -0,0 +1,25 @@ +using Microsoft.Win32.SafeHandles; +using System.Runtime.InteropServices; +using System.Threading; + +/// +/// API declarations relating to file I/O. +/// + +using System; + +namespace SSComm +{ + internal sealed class FileIO + { + internal const Int32 FILE_SHARE_READ = 1; + internal const Int32 FILE_SHARE_WRITE = 2; + internal const uint GENERIC_READ = 0X80000000U; + internal const Int32 GENERIC_WRITE = 0X40000000; + internal const Int32 INVALID_HANDLE_VALUE = -1; + internal const Int32 OPEN_EXISTING = 3; + + [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] + internal static extern SafeFileHandle CreateFile(String lpFileName, UInt32 dwDesiredAccess, Int32 dwShareMode, IntPtr lpSecurityAttributes, Int32 dwCreationDisposition, Int32 dwFlagsAndAttributes, Int32 hTemplateFile); + } +} diff --git a/software/PC/SSComm/usb_hid/hid.cs b/software/PC/SSComm/usb_hid/hid.cs new file mode 100644 index 0000000..202a92f --- /dev/null +++ b/software/PC/SSComm/usb_hid/hid.cs @@ -0,0 +1,592 @@ +using Microsoft.VisualBasic; +using Microsoft.Win32.SafeHandles; +using System; +using System.Diagnostics; +using System.Runtime.InteropServices; +using System.Windows.Forms; + +/// +/// For communicating with HID-class USB devices. +/// Includes routines for sending and receiving reports via control transfers and to +/// retrieve information about and configure a HID. +/// +/// + +namespace SSComm +{ + internal sealed partial class Hid + { + // Used in error messages. + + private const String MODULE_NAME = "Hid"; + + internal HIDP_CAPS Capabilities; + internal HIDD_ATTRIBUTES DeviceAttributes; + + // For viewing results of API calls in debug.write statements: + + //internal static Debugging MyDebugging = new Debugging(); + + /// + /// Remove any Input reports waiting in the buffer. + /// + /// + /// a handle to a device. + /// + /// + /// True on success, False on failure. + /// + + internal Boolean FlushQueue(SafeFileHandle hidHandle) + { + Boolean success = false; + + try + { + // *** + // API function: HidD_FlushQueue + + // Purpose: Removes any Input reports waiting in the buffer. + + // Accepts: a handle to the device. + + // Returns: True on success, False on failure. + // *** + + success = HidD_FlushQueue(hidHandle); + + return success; + } + catch (Exception ex) + { + DisplayException(MODULE_NAME, ex); + throw; + } + } + + /// + /// Retrieves a structure with information about a device's capabilities. + /// + /// + /// a handle to a device. + /// + /// + /// An HIDP_CAPS structure. + /// + + internal HIDP_CAPS GetDeviceCapabilities(SafeFileHandle hidHandle) + { + IntPtr preparsedData = new System.IntPtr(); + Int32 result = 0; + Boolean success = false; + + try + { + // *** + // API function: HidD_GetPreparsedData + + // Purpose: retrieves a pointer to a buffer containing information about the device's capabilities. + // HidP_GetCaps and other API functions require a pointer to the buffer. + + // Requires: + // A handle returned by CreateFile. + // A pointer to a buffer. + + // Returns: + // True on success, False on failure. + // *** + + success = HidD_GetPreparsedData(hidHandle, ref preparsedData); + + // *** + // API function: HidP_GetCaps + + // Purpose: find out a device's capabilities. + // For standard devices such as joysticks, you can find out the specific + // capabilities of the device. + // For a custom device where the software knows what the device is capable of, + // this call may be unneeded. + + // Accepts: + // A pointer returned by HidD_GetPreparsedData + // A pointer to a HIDP_CAPS structure. + + // Returns: True on success, False on failure. + // *** + + result = HidP_GetCaps(preparsedData, ref Capabilities); + if ((result != 0)) + { + Debug.WriteLine(""); + Debug.WriteLine(" Usage: " + Convert.ToString(Capabilities.Usage, 16)); + Debug.WriteLine(" Usage Page: " + Convert.ToString(Capabilities.UsagePage, 16)); + Debug.WriteLine(" Input Report Byte Length: " + Capabilities.InputReportByteLength); + Debug.WriteLine(" Output Report Byte Length: " + Capabilities.OutputReportByteLength); + Debug.WriteLine(" Feature Report Byte Length: " + Capabilities.FeatureReportByteLength); + Debug.WriteLine(" Number of Link Collection Nodes: " + Capabilities.NumberLinkCollectionNodes); + Debug.WriteLine(" Number of Input Button Caps: " + Capabilities.NumberInputButtonCaps); + Debug.WriteLine(" Number of Input Value Caps: " + Capabilities.NumberInputValueCaps); + Debug.WriteLine(" Number of Input Data Indices: " + Capabilities.NumberInputDataIndices); + Debug.WriteLine(" Number of Output Button Caps: " + Capabilities.NumberOutputButtonCaps); + Debug.WriteLine(" Number of Output Value Caps: " + Capabilities.NumberOutputValueCaps); + Debug.WriteLine(" Number of Output Data Indices: " + Capabilities.NumberOutputDataIndices); + Debug.WriteLine(" Number of Feature Button Caps: " + Capabilities.NumberFeatureButtonCaps); + Debug.WriteLine(" Number of Feature Value Caps: " + Capabilities.NumberFeatureValueCaps); + Debug.WriteLine(" Number of Feature Data Indices: " + Capabilities.NumberFeatureDataIndices); + + // *** + // API function: HidP_GetValueCaps + + // Purpose: retrieves a buffer containing an array of HidP_ValueCaps structures. + // Each structure defines the capabilities of one value. + // This application doesn't use this data. + + // Accepts: + // A report type enumerator from hidpi.h, + // A pointer to a buffer for the returned array, + // The NumberInputValueCaps member of the device's HidP_Caps structure, + // A pointer to the PreparsedData structure returned by HidD_GetPreparsedData. + + // Returns: True on success, False on failure. + // *** + + Int32 vcSize = Capabilities.NumberInputValueCaps; + Byte[] valueCaps = new Byte[vcSize]; + + result = HidP_GetValueCaps(HidP_Input, valueCaps, ref vcSize, preparsedData); + + // (To use this data, copy the ValueCaps byte array into an array of structures.) + + } + } + catch (Exception ex) + { + DisplayException(MODULE_NAME, ex); + throw; + } + finally + { + // *** + // API function: HidD_FreePreparsedData + + // Purpose: frees the buffer reserved by HidD_GetPreparsedData. + + // Accepts: A pointer to the PreparsedData structure returned by HidD_GetPreparsedData. + + // Returns: True on success, False on failure. + // *** + + if (preparsedData != IntPtr.Zero) + { + success = HidD_FreePreparsedData(preparsedData); + } + } + + return Capabilities; + } + + /// + /// reads a Feature report from the device. + /// + /// + /// the handle for learning about the device and exchanging Feature reports. + /// tells whether the device is currently attached. + /// contains the requested report. + /// read success + + internal Boolean GetFeatureReport(SafeFileHandle hidHandle, ref Byte[] inFeatureReportBuffer) + { + Boolean success; + + try + { + // *** + // API function: HidD_GetFeature + // Attempts to read a Feature report from the device. + + // Requires: + // A handle to a HID + // A pointer to a buffer containing the report ID and report + // The size of the buffer. + + // Returns: true on success, false on failure. + // *** + + success = HidD_GetFeature(hidHandle, inFeatureReportBuffer, inFeatureReportBuffer.Length); + + Debug.Print("HidD_GetFeature success = " + success); + return success; + } + catch (Exception ex) + { + DisplayException(MODULE_NAME, ex); + throw; + } + } + + + /// + /// Creates a 32-bit Usage from the Usage Page and Usage ID. + /// Determines whether the Usage is a system mouse or keyboard. + /// Can be modified to detect other Usages. + /// + /// + /// a HIDP_CAPS structure retrieved with HidP_GetCaps. + /// + /// + /// A String describing the Usage. + /// + + internal String GetHidUsage(HIDP_CAPS MyCapabilities) + { + Int32 usage = 0; + String usageDescription = ""; + + try + { + // Create32-bit Usage from Usage Page and Usage ID. + + usage = MyCapabilities.UsagePage * 256 + MyCapabilities.Usage; + + if (usage == Convert.ToInt32(0X102)) + { + usageDescription = "mouse"; + } + + if (usage == Convert.ToInt32(0X106)) + { + usageDescription = "keyboard"; + } + } + catch (Exception ex) + { + DisplayException(MODULE_NAME, ex); + throw; + } + + return usageDescription; + } + + + /// + /// reads an Input report from the device using a control transfer. + /// + /// + /// the handle for learning about the device and exchanging Feature reports. + /// tells whether the device is currently attached. + /// contains the requested report. + /// read success + + internal Boolean GetInputReportViaControlTransfer(SafeFileHandle hidHandle, ref Byte[] inputReportBuffer) + { + Boolean success; + + try + { + // *** + // API function: HidD_GetInputReport + + // Purpose: Attempts to read an Input report from the device using a control transfer. + // Supported under Windows XP and later only. + + // Requires: + // A handle to a HID + // A pointer to a buffer containing the report ID and report + // The size of the buffer. + + // Returns: true on success, false on failure. + // *** + + success = HidD_GetInputReport(hidHandle, inputReportBuffer, inputReportBuffer.Length + 1); + + Debug.Print("HidD_GetInputReport success = " + success); + return success; + } + catch (Exception ex) + { + DisplayException(MODULE_NAME, ex); + throw; + } + } + + /// + /// Retrieves the number of Input reports the host can store. + /// + /// + /// a handle to a device + /// an integer to hold the returned value. + /// + /// + /// True on success, False on failure. + /// + + internal Boolean GetNumberOfInputBuffers(SafeFileHandle hidDeviceObject, ref Int32 numberOfInputBuffers) + { + Boolean success = false; + + try + { + if (!((IsWindows98Gold()))) + { + // *** + // API function: HidD_GetNumInputBuffers + + // Purpose: retrieves the number of Input reports the host can store. + // Not supported by Windows 98 Gold. + // If the buffer is full and another report arrives, the host drops the + // ldest report. + + // Accepts: a handle to a device and an integer to hold the number of buffers. + + // Returns: True on success, False on failure. + // *** + + success = HidD_GetNumInputBuffers(hidDeviceObject, ref numberOfInputBuffers); + } + else + { + // Under Windows 98 Gold, the number of buffers is fixed at 2. + + numberOfInputBuffers = 2; + success = true; + } + + return success; + } + catch (Exception ex) + { + DisplayException(MODULE_NAME, ex); + throw; + } + } + /// + /// writes a Feature report to the device. + /// + /// + /// contains the report ID and report data. + /// handle to the device. + /// + /// + /// True on success. False on failure. + /// + + internal Boolean SendFeatureReport(SafeFileHandle hidHandle, Byte[] outFeatureReportBuffer) + { + Boolean success = false; + + try + { + // *** + // API function: HidD_SetFeature + + // Purpose: Attempts to send a Feature report to the device. + + // Accepts: + // A handle to a HID + // A pointer to a buffer containing the report ID and report + // The size of the buffer. + + // Returns: true on success, false on failure. + // *** + + success = HidD_SetFeature(hidHandle, outFeatureReportBuffer, outFeatureReportBuffer.Length); + + Debug.Print("HidD_SetFeature success = " + success); + + return success; + } + catch (Exception ex) + { + DisplayException(MODULE_NAME, ex); + throw; + } + } + /// + /// Writes an Output report to the device using a control transfer. + /// + /// + /// contains the report ID and report data. + /// handle to the device. + /// + /// + /// True on success. False on failure. + /// + + internal Boolean SendOutputReportViaControlTransfer(SafeFileHandle hidHandle, Byte[] outputReportBuffer) + { + Boolean success = false; + + try + { + // *** + // API function: HidD_SetOutputReport + + // Purpose: + // Attempts to send an Output report to the device using a control transfer. + // Requires Windows XP or later. + + // Accepts: + // A handle to a HID + // A pointer to a buffer containing the report ID and report + // The size of the buffer. + + // Returns: true on success, false on failure. + // *** + + success = HidD_SetOutputReport(hidHandle, outputReportBuffer, outputReportBuffer.Length + 1); + + Debug.Print("HidD_SetOutputReport success = " + success); + + return success; + } + catch (Exception ex) + { + DisplayException(MODULE_NAME, ex); + throw; + } + } + + /// + /// sets the number of input reports the host will store. + /// Requires Windows XP or later. + /// + /// + /// a handle to the device. + /// the requested number of input reports. + /// + /// + /// True on success. False on failure. + /// + + internal Boolean SetNumberOfInputBuffers(SafeFileHandle hidDeviceObject, Int32 numberBuffers) + { + try + { + if (!IsWindows98Gold()) + { + // *** + // API function: HidD_SetNumInputBuffers + + // Purpose: Sets the number of Input reports the host can store. + // If the buffer is full and another report arrives, the host drops the + // oldest report. + + // Requires: + // A handle to a HID + // An integer to hold the number of buffers. + + // Returns: true on success, false on failure. + // *** + + HidD_SetNumInputBuffers(hidDeviceObject, numberBuffers); + return true; + } + else + { + // Not supported under Windows 98 Gold. + + return false; + } + } + catch (Exception ex) + { + DisplayException(MODULE_NAME, ex); + throw; + } + } + + /// + /// Find out if the current operating system is Windows XP or later. + /// (Windows XP or later is required for HidD_GetInputReport and HidD_SetInputReport.) + /// + + internal Boolean IsWindowsXpOrLater() + { + try + { + OperatingSystem myEnvironment = Environment.OSVersion; + + // Windows XP is version 5.1. + + System.Version versionXP = new System.Version(5, 1); + + if (myEnvironment.Version >= versionXP) + { + Debug.Write("The OS is Windows XP or later."); + return true; + } + else + { + Debug.Write("The OS is earlier than Windows XP."); + return false; + } + } + catch (Exception ex) + { + DisplayException(MODULE_NAME, ex); + throw; + } + } + + /// + /// Find out if the current operating system is Windows 98 Gold (original version). + /// Windows 98 Gold does not support the following: + /// Interrupt OUT transfers (WriteFile uses control transfers and Set_Report). + /// HidD_GetNumInputBuffers and HidD_SetNumInputBuffers + /// (Not yet tested on a Windows 98 Gold system.) + /// + + internal Boolean IsWindows98Gold() + { + Boolean result = false; + try + { + OperatingSystem myEnvironment = Environment.OSVersion; + + // Windows 98 Gold is version 4.10 with a build number less than 2183. + + System.Version version98SE = new System.Version(4, 10, 2183); + + if (myEnvironment.Version < version98SE) + { + Debug.Write("The OS is Windows 98 Gold."); + result = true; + } + else + { + Debug.Write("The OS is more recent than Windows 98 Gold."); + result = false; + } + return result; + } + catch (Exception ex) + { + DisplayException(MODULE_NAME, ex); + throw; + } + } + + /// + /// Provides a central mechanism for exception handling. + /// Displays a message box that describes the exception. + /// + /// + /// the module where the exception occurred. + /// the exception + + internal static void DisplayException(String moduleName, Exception e) + { + String message = null; + String caption = null; + + // Create an error message. + + //message = "Exception: " + e.Message + ControlChars.CrLf + "Module: " + moduleName + ControlChars.CrLf + "Method: " + e.TargetSite.Name; + + caption = "Unexpected Exception"; + + MessageBox.Show(message, caption, MessageBoxButtons.OK); + Debug.Write(message); + } + } +} diff --git a/software/PC/SSComm/usb_hid/hiddeclarations.cs b/software/PC/SSComm/usb_hid/hiddeclarations.cs new file mode 100644 index 0000000..e0b2647 --- /dev/null +++ b/software/PC/SSComm/usb_hid/hiddeclarations.cs @@ -0,0 +1,128 @@ +using Microsoft.Win32.SafeHandles; +using System; +using System.Runtime.InteropServices; + +namespace SSComm +{ + internal sealed partial class Hid + { + // API declarations for HID communications. + + // from hidpi.h + // Typedef enum defines a set of integer constants for HidP_Report_Type + + internal const Int16 HidP_Input = 0; + internal const Int16 HidP_Output = 1; + internal const Int16 HidP_Feature = 2; + + [StructLayout(LayoutKind.Sequential)] + internal struct HIDD_ATTRIBUTES + { + internal Int32 Size; + internal UInt16 VendorID; + internal UInt16 ProductID; + internal UInt16 VersionNumber; + } + + internal struct HIDP_CAPS + { + internal Int16 Usage; + internal Int16 UsagePage; + internal Int16 InputReportByteLength; + internal Int16 OutputReportByteLength; + internal Int16 FeatureReportByteLength; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 17)] + internal Int16[] Reserved; + internal Int16 NumberLinkCollectionNodes; + internal Int16 NumberInputButtonCaps; + internal Int16 NumberInputValueCaps; + internal Int16 NumberInputDataIndices; + internal Int16 NumberOutputButtonCaps; + internal Int16 NumberOutputValueCaps; + internal Int16 NumberOutputDataIndices; + internal Int16 NumberFeatureButtonCaps; + internal Int16 NumberFeatureValueCaps; + internal Int16 NumberFeatureDataIndices; + } + + // If IsRange is false, UsageMin is the Usage and UsageMax is unused. + // If IsStringRange is false, StringMin is the String index and StringMax is unused. + // If IsDesignatorRange is false, DesignatorMin is the designator index and DesignatorMax is unused. + + internal struct HidP_Value_Caps + { + internal Int16 UsagePage; + internal Byte ReportID; + internal Int32 IsAlias; + internal Int16 BitField; + internal Int16 LinkCollection; + internal Int16 LinkUsage; + internal Int16 LinkUsagePage; + internal Int32 IsRange; + internal Int32 IsStringRange; + internal Int32 IsDesignatorRange; + internal Int32 IsAbsolute; + internal Int32 HasNull; + internal Byte Reserved; + internal Int16 BitSize; + internal Int16 ReportCount; + internal Int16 Reserved2; + internal Int16 Reserved3; + internal Int16 Reserved4; + internal Int16 Reserved5; + internal Int16 Reserved6; + internal Int32 LogicalMin; + internal Int32 LogicalMax; + internal Int32 PhysicalMin; + internal Int32 PhysicalMax; + internal Int16 UsageMin; + internal Int16 UsageMax; + internal Int16 StringMin; + internal Int16 StringMax; + internal Int16 DesignatorMin; + internal Int16 DesignatorMax; + internal Int16 DataIndexMin; + internal Int16 DataIndexMax; + } + + [DllImport("hid.dll", SetLastError = true)] + internal static extern Boolean HidD_FlushQueue(SafeFileHandle HidDeviceObject); + + [DllImport("hid.dll", SetLastError = true)] + internal static extern Boolean HidD_FreePreparsedData(IntPtr PreparsedData); + + [DllImport("hid.dll", SetLastError = true)] + internal static extern Boolean HidD_GetAttributes(SafeFileHandle HidDeviceObject, ref HIDD_ATTRIBUTES Attributes); + + [DllImport("hid.dll", SetLastError = true)] + internal static extern Boolean HidD_GetFeature(SafeFileHandle HidDeviceObject, Byte[] lpReportBuffer, Int32 ReportBufferLength); + + [DllImport("hid.dll", SetLastError = true)] + internal static extern Boolean HidD_GetInputReport(SafeFileHandle HidDeviceObject, Byte[] lpReportBuffer, Int32 ReportBufferLength); + + [DllImport("hid.dll", SetLastError = true)] + internal static extern void HidD_GetHidGuid(ref System.Guid HidGuid); + + [DllImport("hid.dll", SetLastError = true)] + internal static extern Boolean HidD_GetNumInputBuffers(SafeFileHandle HidDeviceObject, ref Int32 NumberBuffers); + + [DllImport("hid.dll", SetLastError = true)] + internal static extern Boolean HidD_GetPreparsedData(SafeFileHandle HidDeviceObject, ref IntPtr PreparsedData); + + [DllImport("hid.dll", SetLastError = true)] + internal static extern Boolean HidD_SetFeature(SafeFileHandle HidDeviceObject, Byte[] lpReportBuffer, Int32 ReportBufferLength); + + [DllImport("hid.dll", SetLastError = true)] + internal static extern Boolean HidD_SetNumInputBuffers(SafeFileHandle HidDeviceObject, Int32 NumberBuffers); + + [DllImport("hid.dll", SetLastError = true)] + internal static extern Boolean HidD_SetOutputReport(SafeFileHandle HidDeviceObject, Byte[] lpReportBuffer, Int32 ReportBufferLength); + + [DllImport("hid.dll", SetLastError = true)] + internal static extern Int32 HidP_GetCaps(IntPtr PreparsedData, ref HIDP_CAPS Capabilities); + + [DllImport("hid.dll", SetLastError = true)] + internal static extern Int32 HidP_GetValueCaps(Int32 ReportType, Byte[] ValueCaps, ref Int32 ValueCapsLength, IntPtr PreparsedData); + } +} + diff --git a/software/PC/SSControl/Properties/AssemblyInfo.cs b/software/PC/SSControl/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..1fa024f --- /dev/null +++ b/software/PC/SSControl/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("SSChart")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("SSChart")] +[assembly: AssemblyCopyright("Copyright © 2013")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("f62e4c9c-7af9-4d28-8675-80c372e673e6")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/software/PC/SSControl/SSChart.Designer.cs b/software/PC/SSControl/SSChart.Designer.cs new file mode 100644 index 0000000..9178a39 --- /dev/null +++ b/software/PC/SSControl/SSChart.Designer.cs @@ -0,0 +1,37 @@ +namespace SSControls +{ + partial class SSChart + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + components = new System.ComponentModel.Container(); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + } + + #endregion + } +} diff --git a/software/PC/SSControl/SSChart.cs b/software/PC/SSControl/SSChart.cs new file mode 100644 index 0000000..17da72e --- /dev/null +++ b/software/PC/SSControl/SSChart.cs @@ -0,0 +1,681 @@ +using System; +using System.Text; +using System.Windows.Forms; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Linq; + +namespace SSControls +{ + public partial class SSChart : UserControl + { + private Timer RedrawTimer; + private Bitmap _backbuffer; + public bool redrawactive; + + protected override void OnSizeChanged(EventArgs e) + { + if (_backbuffer != null) + { + _backbuffer.Dispose(); + _backbuffer = null; + } + if (!_scaleonresize) + { + Page.Width = this.Width; + Page.Height = this.Height; + } + if (RedrawTimer == null) + { + RedrawTimer = new Timer(); + RedrawTimer.Tick += RedrawTimer_Tick; + RedrawTimer.Interval = 100; + RedrawTimer.Start(); + } + Invalidate(); + base.OnSizeChanged(e); + } + + protected override void OnPaint(PaintEventArgs e) + { + if (_backbuffer != null) + { + e.Graphics.DrawImageUnscaled(_backbuffer, 0, 0); + } + } + + + protected override void OnPaintBackground(PaintEventArgs e) + { + //MyBase.OnPaintBackground(e) + } + + public class GMargins + { + private float _left = 50; + private float _right = 35; + private float _top = 30; + private float _bottom = 30; + + public event ChangedEventHandler Changed; + public delegate void ChangedEventHandler(); + + public float Left + { + get { return _left; } + set + { + if (_left != value) + { + _left = value; + Changed?.Invoke(); + } + } + } + + public float Right + { + get { return _right; } + set + { + if (_right != value) + { + _right = value; + Changed?.Invoke(); + } + } + } + + public float Top + { + get { return _top; } + set + { + if (_top != value) + { + _top = value; + Changed?.Invoke(); + } + } + } + + public float Bottom + { + get { return _bottom; } + set + { + if (_bottom != value) + { + _bottom = value; + Changed?.Invoke(); + } + } + } + + } + + public class GPage + { + private float _width = 400; + private float _height = 300; + public event ChangedEventHandler Changed; + public delegate void ChangedEventHandler(); + public GMargins Margins = new GMargins(); + + public GPage() + { + Margins.Changed += Margins_Changed; + } + + public float Width + { + get { return _width; } + set + { + if (_width != value) + { + if (value > Margins.Left + Margins.Right) + { + _width = value; + Changed?.Invoke(); + } + } + } + } + + public float Height + { + get { return _height; } + set + { + if (_height != value) + { + if (value > Margins.Top + Margins.Bottom) + { + _height = value; + Changed?.Invoke(); + } + } + } + } + + public float DrawWidth + { + get { return _width - Margins.Left - Margins.Right; } + } + + public float DrawHeight + { + get { return _height - Margins.Top - Margins.Bottom; } + } + + private void Margins_Changed() + { + Changed?.Invoke(); + } + + } + + public class GScale + { + public enum GScaleTypes : byte + { + HorBottom = 0, + HorTop = 1, + VerLeft = 2, + VerRight = 3 + } + + + private GScaleTypes _scaletype = GScaleTypes.HorBottom; + public GScaleTypes ScaleType + { + get { return _scaletype; } + set + { + switch (value) + { + case GScaleTypes.HorTop: + ValSFormat.Alignment = StringAlignment.Center; + ValSFormat.LineAlignment = StringAlignment.Far; + break; + case GScaleTypes.VerLeft: + ValSFormat.Alignment = StringAlignment.Far; + ValSFormat.LineAlignment = StringAlignment.Center; + break; + case GScaleTypes.VerRight: + ValSFormat.Alignment = StringAlignment.Near; + ValSFormat.LineAlignment = StringAlignment.Center; + break; + default: + ValSFormat.Alignment = StringAlignment.Center; + ValSFormat.LineAlignment = StringAlignment.Near; + break; + } + _scaletype = value; + } + } + + public bool PaintOver = false; + public float ValFrom = 0; + public float ValTo = 100; + public float ValMinStep = 5; + public float ValMajStep = 10; + public float ValMinSize = 2; + public float ValMajSize = 4; + public float sX = 0; + public float sY = 0; + public Pen Pen = new Pen(Brushes.White); + public bool Visible = false; + public Font ValFont = (Font)SystemFonts.SmallCaptionFont.Clone(); + public string ValFormat = "0.00"; + public bool ValVisible = true; + public StringFormat ValSFormat = new StringFormat(); + public float ValOffset = 0; + public Brush ValBrush = new SolidBrush(Color.Aquamarine); + public bool ShowMinLines = true; + public Pen MinLinesPen = new Pen(new SolidBrush(Color.FromArgb(0x60606060))); + public bool ShowMajLines = true; + public Pen MajLinesPen = new Pen(new SolidBrush(Color.FromArgb(unchecked((int)0x90909090)))); + + public GScale() + { + var _with1 = ValSFormat; + _with1.Alignment = StringAlignment.Center; + _with1.LineAlignment = StringAlignment.Near; + Pen.Width = (float)0.000001; + } + + public void Dispose() + { + if (Pen != null) Pen.Dispose(); + if (ValFont != null) ValFont.Dispose(); + if (ValSFormat != null) ValSFormat.Dispose(); + if (ValBrush != null) ValBrush.Dispose(); + if (MinLinesPen != null) MinLinesPen.Dispose(); + if (MajLinesPen != null) MajLinesPen.Dispose(); + Pen = null; + ValFont = null; + ValSFormat = null; + ValBrush = null; + MinLinesPen = null; + MajLinesPen = null; + } + + public void Draw(ref Graphics g, ref GPage p) + { + float s = 0; + float s1 = 0; + float s2 = 0; + float eX = 0; + float eY = 0; + float majXOff = 0; + float majYoff = 0; + float minXoff = 0; + float minYoff = 0; + float vXoff = 0; + float vYoff = 0; + if (Visible) + { + switch (_scaletype) + { + case GScaleTypes.HorBottom: + eX = sX + p.DrawWidth; + eY = sY; + majXOff = 0; + majYoff = ValMajSize; + minXoff = 0; + minYoff = ValMinSize; + vXoff = 0; + vYoff = ValOffset + ValMajSize; + break; + case GScaleTypes.HorTop: + eX = sX + p.DrawWidth; + eY = sY; + majXOff = 0; + majYoff = -ValMajSize; + minXoff = 0; + minYoff = -ValMinSize; + vXoff = 0; + vYoff = -ValOffset - ValMajSize; + break; + case GScaleTypes.VerLeft: + eX = sX; + eY = sY - p.DrawHeight; + majXOff = -ValMajSize; + majYoff = 0; + minXoff = -ValMinSize; + minYoff = 0; + vXoff = -ValOffset - ValMajSize; + vYoff = 0; + break; + case GScaleTypes.VerRight: + eX = sX; + eY = sY - p.DrawHeight; + majXOff = ValMajSize; + majYoff = 0; + minXoff = ValMinSize; + minYoff = 0; + vXoff = ValOffset + ValMajSize; + vYoff = 0; + break; + } + if (ValFrom != ValTo) + { + g.DrawLine(Pen, sX, sY, eX, eY); + if (ValMinStep > 0) + { + for (s = ValFrom; s <= ValTo; s += ValMinStep) + { + s1 = sX + (((s - ValFrom) / (ValTo - ValFrom))) * (eX - sX); + s2 = sY + (((s - ValFrom) / (ValTo - ValFrom))) * (eY - sY); + g.DrawLine(Pen, s1, s2, s1 + minXoff, s2 + minYoff); + if (ShowMinLines) + { + switch (_scaletype) + { + case GScaleTypes.VerRight: + case GScaleTypes.VerLeft: + g.DrawLine(MinLinesPen, 0, s2, p.DrawWidth, s2); + break; + default: + g.DrawLine(MinLinesPen, s1, 0, s1, -p.DrawHeight); + break; + } + } + } + } + if (ValMajStep > 0) + { + for (s = ValFrom; s <= ValTo; s += ValMajStep) + { + s1 = sX + (((s - ValFrom) / (ValTo - ValFrom))) * (eX - sX); + s2 = sY + (((s - ValFrom) / (ValTo - ValFrom))) * (eY - sY); + g.DrawLine(Pen, s1, s2, s1 + majXOff, s2 + majYoff); + if (ShowMajLines) + { + switch (_scaletype) + { + case GScaleTypes.VerRight: + case GScaleTypes.VerLeft: + g.DrawLine(MajLinesPen, 0, s2, p.DrawWidth, s2); + break; + default: + g.DrawLine(MajLinesPen, s1, 0, s1, -p.DrawHeight); + break; + } + } + if (ValVisible) + { + g.DrawString(s.ToString(ValFormat), ValFont, ValBrush, s1 + vXoff, s2 + vYoff, ValSFormat); + } + } + } + } + } + } + } + + public class GDrawing + { + public bool Visible = true; + public Boolean ShowPoints = false; + public Pen Pen = new Pen(Brushes.Red); + public GScale XScale; + public GScale Yscale; + public PointF[] Points; + public long PointsNum + { + get + { + if (Points == null) + { + return 0; + } + else + { + try + { + return Points.Length; + } + catch + { + return 0; + } + } + } + set + { + long oldnum = 0; + long i = 0; + oldnum = PointsNum; + if (oldnum != value) + { + if (value > 0) + { + Array.Resize(ref Points, (int)value); + for (i = oldnum; i < value; i++) + { + Points[i] = new PointF(); + } + } + else + { + Points = null; + } + } + } + } + + + public void Draw(ref Graphics g, ref GPage p) + { + Matrix m = null; + float[] mtx = null; + m = g.Transform.Clone(); + + g.ScaleTransform(p.DrawWidth / (XScale.ValTo - XScale.ValFrom), -p.DrawHeight / (Yscale.ValTo - Yscale.ValFrom)); + g.TranslateTransform(XScale.ValFrom, -Yscale.ValFrom); + + Pen.ResetTransform(); + mtx = g.Transform.Elements; + Pen.ScaleTransform(1 / mtx[0], 1 / mtx[3]); + Pen.TranslateTransform(0, 0); + if (Points != null) { + g.DrawLines(Pen, Points); + if (ShowPoints) { + var c = Pen.Color; + Pen.Color = Color.FromArgb(255 - Pen.Color.R, 255 - Pen.Color.G, 255 - Pen.Color.B); + g.DrawRectangles(Pen, Points.Select(x => new RectangleF(x.X, x.Y, (float)0.01,1)).ToArray()); + Pen.Color = c; + } + } + g.Transform.Dispose(); + g.Transform = m; + } + + ~GDrawing() + { + Pen.Dispose(); + } + + } + + public GPage Page = new GPage(); + private bool _scaleonresize = false; + private GScale[] _scales; + private GDrawing[] _drawings; + + public bool ScaleOnResize + { + get { return _scaleonresize; } + set { _scaleonresize = value; } + } + + + public GScale Scales(int index) + { + return _scales[index]; + } + + public GDrawing Drawings(int index) + { + return _drawings[index]; + } + + public GDrawing[] Drawings1 + { + get { return _drawings; } + } + + public long ScaleNum + { + get + { + if (_scales == null) + { + return 0; + } + else + { + try + { + return _scales.Length; + } + catch + { + return 0; + } + } + } + set + { + long i = 0; + long oldnum = 0; + oldnum = ScaleNum; + if (oldnum != value) + { + if (value > 0) + { + for (i = value; i <= oldnum - 1; i++) + { + _scales[i] = null; + } + Array.Resize(ref _scales, (int)value); + for (i = oldnum; i <= value - 1; i++) + { + _scales[i] = new GScale(); + } + } + else + { + for (i = 0; i <= ScaleNum - 1; i++) + { + _scales[i] = null; + } + _scales = null; + } + } + } + } + + public long DrawingsNum + { + get + { + if (_drawings == null) + { + return 0; + } + else + { + try + { + return _drawings.Length; + } + catch + { + return 0; + } + } + } + set + { + long i = 0; + long oldnum = 0; + oldnum = DrawingsNum; + if (oldnum != value) + { + if (value != 0) + { + for (i = value; i <= oldnum - 1; i++) + { + _drawings[i] = null; + } + Array.Resize(ref _drawings, (int)value); + for (i = oldnum; i <= value - 1; i++) + { + _drawings[i] = new GDrawing(); + } + } + else + { + for (i = 0; i <= oldnum - 1; i++) + { + _drawings[i] = null; + } + _drawings = null; + } + } + } + } + + public void _Redraw() + { + long i = 0; + redrawactive = true; + _backbuffer = null; + if (_backbuffer == null) + { + _backbuffer = new Bitmap(Math.Max(this.ClientSize.Width, 2), Math.Max(this.ClientSize.Height, 2)); + Graphics g = Graphics.FromImage(_backbuffer); + + g.ScaleTransform(Math.Max(this.Width, 2) / Page.Width, Math.Max(this.Height, 2) / Page.Height); + g.TranslateTransform(Page.Margins.Left, Page.Height - Page.Margins.Bottom); + g.Clear(BackColor); + + g.SmoothingMode = SmoothingMode.HighSpeed; + for (i = 0; i <= ScaleNum - 1; i++) + { + if(!_scales[i].PaintOver) _scales[i].Draw(ref g, ref Page); + } + + g.SmoothingMode = SmoothingMode.HighQuality; + foreach(var d in _drawings) + { + if (d.Visible) d.Draw(ref g, ref Page); + } + + g.SmoothingMode = SmoothingMode.HighSpeed; + for (i = 0; i <= ScaleNum - 1; i++) + { + if (_scales[i].PaintOver) _scales[i].Draw(ref g, ref Page); + } + + g.Dispose(); + if (!this.IsDisposed) + { + g = this.CreateGraphics(); + g.DrawImageUnscaled(_backbuffer, 0, 0); + g.Dispose(); + } + } + Application.DoEvents(); + redrawactive = false; + } + + public SSChart() + { + long i = 0; + // This call is required by the designer. + InitializeComponent(); + + // Add any initialization after the InitializeComponent() call. + ScaleNum = 2; + _scales[0].ScaleType = GScale.GScaleTypes.HorBottom; + _scales[0].Visible = true; + _scales[0].sX = 0; + _scales[0].sY = 0; + _scales[0].Pen.Width = 1; + + _scales[1].ScaleType = GScale.GScaleTypes.VerLeft; + _scales[1].Visible = true; + _scales[1].sX = 0; + _scales[1].sY = 0; + _scales[1].Pen.Width = 1; + + DrawingsNum = 1; + _drawings[0].Pen.Width = 1; + _drawings[0].XScale = Scales(0); + _drawings[0].Yscale = Scales(0); + _drawings[0].PointsNum = 1000; + Random r = new Random(); + for (i = 0; i <= _drawings[0].PointsNum - 1; i++) + { + _drawings[0].Points[i].X = Convert.ToSingle(i) / 10; + _drawings[0].Points[i].Y = (float)(r.Next(0, 50) + Math.Sin(i / 50) * 25 + 25); + } + + } + + private void RedrawTimer_Tick(object sender, EventArgs e) + { + RedrawTimer.Stop(); + RedrawTimer.Tick -= RedrawTimer_Tick; + RedrawTimer.Dispose(); + RedrawTimer = null; + _Redraw(); + } + + } +} diff --git a/software/PC/SSControl/SSControls.csproj b/software/PC/SSControl/SSControls.csproj new file mode 100644 index 0000000..cd2079c --- /dev/null +++ b/software/PC/SSControl/SSControls.csproj @@ -0,0 +1,63 @@ + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {A65F336E-822E-4F58-882C-371139985C67} + Library + Properties + SSControls + SSControls + v4.0 + Client + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + UserControl + + + SSChart.cs + + + + + + \ No newline at end of file diff --git a/software/PC/SSControl/SSControls.csproj.user b/software/PC/SSControl/SSControls.csproj.user new file mode 100644 index 0000000..5bef86d --- /dev/null +++ b/software/PC/SSControl/SSControls.csproj.user @@ -0,0 +1,6 @@ + + + + ProjectFiles + + \ No newline at end of file diff --git a/software/PC/SSControl/bin/Debug/SSControls.dll b/software/PC/SSControl/bin/Debug/SSControls.dll new file mode 100644 index 0000000..08fcd6e Binary files /dev/null and b/software/PC/SSControl/bin/Debug/SSControls.dll differ diff --git a/software/PC/SSControl/bin/Debug/SSControls.pdb b/software/PC/SSControl/bin/Debug/SSControls.pdb new file mode 100644 index 0000000..e9384aa Binary files /dev/null and b/software/PC/SSControl/bin/Debug/SSControls.pdb differ diff --git a/software/PC/SSControl/bin/Release/SSControls.dll b/software/PC/SSControl/bin/Release/SSControls.dll new file mode 100644 index 0000000..1f68467 Binary files /dev/null and b/software/PC/SSControl/bin/Release/SSControls.dll differ diff --git a/software/PC/SSControl/bin/Release/SSControls.pdb b/software/PC/SSControl/bin/Release/SSControls.pdb new file mode 100644 index 0000000..6d628ea Binary files /dev/null and b/software/PC/SSControl/bin/Release/SSControls.pdb differ diff --git a/software/PC/SSControl/obj/Debug/DesignTimeResolveAssemblyReferences.cache b/software/PC/SSControl/obj/Debug/DesignTimeResolveAssemblyReferences.cache new file mode 100644 index 0000000..9117f66 Binary files /dev/null and b/software/PC/SSControl/obj/Debug/DesignTimeResolveAssemblyReferences.cache differ diff --git a/software/PC/SSControl/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/software/PC/SSControl/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache new file mode 100644 index 0000000..34a2fa8 Binary files /dev/null and b/software/PC/SSControl/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache differ diff --git a/software/PC/SSControl/obj/Debug/SSControls.csproj.FileListAbsolute.txt b/software/PC/SSControl/obj/Debug/SSControls.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..5fb6fe8 --- /dev/null +++ b/software/PC/SSControl/obj/Debug/SSControls.csproj.FileListAbsolute.txt @@ -0,0 +1,15 @@ +C:\Users\Sparky\Desktop\MyProjects\Electronics\BK3000LF\software\SSChart\bin\Debug\SSControls.dll +C:\Users\Sparky\Desktop\MyProjects\Electronics\BK3000LF\software\SSChart\bin\Debug\SSControls.pdb +C:\Users\Sparky\Desktop\MyProjects\Electronics\BK3000LF\software\SSChart\obj\Debug\ResolveAssemblyReference.cache +C:\Users\Sparky\Desktop\MyProjects\Electronics\BK3000LF\software\SSChart\obj\Debug\SSControls.dll +C:\Users\Sparky\Desktop\MyProjects\Electronics\BK3000LF\software\SSChart\obj\Debug\SSControls.pdb +C:\Users\Sparky\Desktop\MyProjects\Electronics\Lib\DOTNET\SSControl\bin\Debug\SSControls.dll +C:\Users\Sparky\Desktop\MyProjects\Electronics\Lib\DOTNET\SSControl\bin\Debug\SSControls.pdb +C:\Users\Sparky\Desktop\MyProjects\Electronics\Lib\DOTNET\SSControl\obj\Debug\SSControls.dll +C:\Users\Sparky\Desktop\MyProjects\Electronics\Lib\DOTNET\SSControl\obj\Debug\SSControls.pdb +C:\Users\Sparky\Desktop\MyProjects\Electronics\Lib\DOTNET\SSControl\obj\Debug\SSControls.csprojResolveAssemblyReference.cache +C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\PC\SSControl\bin\Debug\SSControls.dll +C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\PC\SSControl\bin\Debug\SSControls.pdb +C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\PC\SSControl\obj\Debug\SSControls.dll +C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\PC\SSControl\obj\Debug\SSControls.pdb +C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\PC\SSControl\obj\Debug\SSControls.csprojResolveAssemblyReference.cache diff --git a/software/PC/SSControl/obj/Debug/SSControls.csprojResolveAssemblyReference.cache b/software/PC/SSControl/obj/Debug/SSControls.csprojResolveAssemblyReference.cache new file mode 100644 index 0000000..3ad9bc5 Binary files /dev/null and b/software/PC/SSControl/obj/Debug/SSControls.csprojResolveAssemblyReference.cache differ diff --git a/software/PC/SSControl/obj/Debug/SSControls.dll b/software/PC/SSControl/obj/Debug/SSControls.dll new file mode 100644 index 0000000..08fcd6e Binary files /dev/null and b/software/PC/SSControl/obj/Debug/SSControls.dll differ diff --git a/software/PC/SSControl/obj/Debug/SSControls.pdb b/software/PC/SSControl/obj/Debug/SSControls.pdb new file mode 100644 index 0000000..e9384aa Binary files /dev/null and b/software/PC/SSControl/obj/Debug/SSControls.pdb differ diff --git a/software/PC/SSControl/obj/Release/DesignTimeResolveAssemblyReferencesInput.cache b/software/PC/SSControl/obj/Release/DesignTimeResolveAssemblyReferencesInput.cache new file mode 100644 index 0000000..886e128 Binary files /dev/null and b/software/PC/SSControl/obj/Release/DesignTimeResolveAssemblyReferencesInput.cache differ diff --git a/software/PC/SSControl/obj/Release/SSControls.csproj.FileListAbsolute.txt b/software/PC/SSControl/obj/Release/SSControls.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..ade418e --- /dev/null +++ b/software/PC/SSControl/obj/Release/SSControls.csproj.FileListAbsolute.txt @@ -0,0 +1,5 @@ +C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\PC\SSControl\bin\Release\SSControls.dll +C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\PC\SSControl\bin\Release\SSControls.pdb +C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\PC\SSControl\obj\Release\SSControls.csprojResolveAssemblyReference.cache +C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\PC\SSControl\obj\Release\SSControls.dll +C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\PC\SSControl\obj\Release\SSControls.pdb diff --git a/software/PC/SSControl/obj/Release/SSControls.csprojResolveAssemblyReference.cache b/software/PC/SSControl/obj/Release/SSControls.csprojResolveAssemblyReference.cache new file mode 100644 index 0000000..3ad9bc5 Binary files /dev/null and b/software/PC/SSControl/obj/Release/SSControls.csprojResolveAssemblyReference.cache differ diff --git a/software/PC/SSControl/obj/Release/SSControls.dll b/software/PC/SSControl/obj/Release/SSControls.dll new file mode 100644 index 0000000..1f68467 Binary files /dev/null and b/software/PC/SSControl/obj/Release/SSControls.dll differ diff --git a/software/PC/SSControl/obj/Release/SSControls.pdb b/software/PC/SSControl/obj/Release/SSControls.pdb new file mode 100644 index 0000000..6d628ea Binary files /dev/null and b/software/PC/SSControl/obj/Release/SSControls.pdb differ diff --git a/software/PC/UniSolder.sln b/software/PC/UniSolder.sln new file mode 100644 index 0000000..d634615 --- /dev/null +++ b/software/PC/UniSolder.sln @@ -0,0 +1,34 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.25420.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SSComm", "SSComm\SSComm.csproj", "{D9F40A00-08CA-4B51-91AC-FEE25FA6410D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SSControls", "SSControl\SSControls.csproj", "{A65F336E-822E-4F58-882C-371139985C67}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniSolder", "UniSolder\UniSolder.csproj", "{CC166091-0117-4211-BEF3-DA4665245901}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D9F40A00-08CA-4B51-91AC-FEE25FA6410D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D9F40A00-08CA-4B51-91AC-FEE25FA6410D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D9F40A00-08CA-4B51-91AC-FEE25FA6410D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D9F40A00-08CA-4B51-91AC-FEE25FA6410D}.Release|Any CPU.Build.0 = Release|Any CPU + {A65F336E-822E-4F58-882C-371139985C67}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A65F336E-822E-4F58-882C-371139985C67}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A65F336E-822E-4F58-882C-371139985C67}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A65F336E-822E-4F58-882C-371139985C67}.Release|Any CPU.Build.0 = Release|Any CPU + {CC166091-0117-4211-BEF3-DA4665245901}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CC166091-0117-4211-BEF3-DA4665245901}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CC166091-0117-4211-BEF3-DA4665245901}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CC166091-0117-4211-BEF3-DA4665245901}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/software/PC/UniSolder/App.config b/software/PC/UniSolder/App.config new file mode 100644 index 0000000..d740e88 --- /dev/null +++ b/software/PC/UniSolder/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/software/PC/UniSolder/Form1.Designer.cs b/software/PC/UniSolder/Form1.Designer.cs new file mode 100644 index 0000000..0b7dbd8 --- /dev/null +++ b/software/PC/UniSolder/Form1.Designer.cs @@ -0,0 +1,452 @@ +using System.Windows.Forms; + +namespace UniSolder +{ + partial class Form1:Form + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.SsChart2 = new SSControls.SSChart(); + this.Button8 = new System.Windows.Forms.Button(); + this.GLabel = new System.Windows.Forms.Label(); + this.GTrackBar = new System.Windows.Forms.TrackBar(); + this.OVFGLabel = new System.Windows.Forms.Label(); + this.OVFGTrackBar = new System.Windows.Forms.TrackBar(); + this.KpLabel = new System.Windows.Forms.Label(); + this.KpTrackBar = new System.Windows.Forms.TrackBar(); + this.KiLabel = new System.Windows.Forms.Label(); + this.KiTrackBar = new System.Windows.Forms.TrackBar(); + this.DGLabel = new System.Windows.Forms.Label(); + this.DGTrackBar = new System.Windows.Forms.TrackBar(); + this.Button6 = new System.Windows.Forms.Button(); + this.Button3 = new System.Windows.Forms.Button(); + this.panel1 = new System.Windows.Forms.Panel(); + this.checkBox11 = new System.Windows.Forms.CheckBox(); + this.checkBox10 = new System.Windows.Forms.CheckBox(); + this.checkBox9 = new System.Windows.Forms.CheckBox(); + this.checkBox8 = new System.Windows.Forms.CheckBox(); + this.checkBox7 = new System.Windows.Forms.CheckBox(); + this.checkBox6 = new System.Windows.Forms.CheckBox(); + this.checkBox4 = new System.Windows.Forms.CheckBox(); + this.checkBox3 = new System.Windows.Forms.CheckBox(); + this.checkBox2 = new System.Windows.Forms.CheckBox(); + this.checkBox1 = new System.Windows.Forms.CheckBox(); + ((System.ComponentModel.ISupportInitialize)(this.GTrackBar)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.OVFGTrackBar)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.KpTrackBar)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.KiTrackBar)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.DGTrackBar)).BeginInit(); + this.panel1.SuspendLayout(); + this.SuspendLayout(); + // + // SsChart2 + // + this.SsChart2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.SsChart2.BackColor = System.Drawing.Color.Black; + this.SsChart2.DrawingsNum = ((long)(1)); + this.SsChart2.ForeColor = System.Drawing.SystemColors.ControlText; + this.SsChart2.Location = new System.Drawing.Point(12, 11); + this.SsChart2.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.SsChart2.Name = "SsChart2"; + this.SsChart2.Padding = new System.Windows.Forms.Padding(5); + this.SsChart2.ScaleNum = ((long)(2)); + this.SsChart2.ScaleOnResize = false; + this.SsChart2.Size = new System.Drawing.Size(1115, 555); + this.SsChart2.TabIndex = 16; + // + // Button8 + // + this.Button8.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.Button8.Location = new System.Drawing.Point(12, 571); + this.Button8.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.Button8.Name = "Button8"; + this.Button8.Size = new System.Drawing.Size(139, 44); + this.Button8.TabIndex = 48; + this.Button8.Text = "STOP"; + this.Button8.UseVisualStyleBackColor = true; + this.Button8.Click += new System.EventHandler(this.Button8_Click); + // + // GLabel + // + this.GLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.GLabel.AutoSize = true; + this.GLabel.BackColor = System.Drawing.SystemColors.Control; + this.GLabel.Location = new System.Drawing.Point(383, 607); + this.GLabel.Name = "GLabel"; + this.GLabel.Size = new System.Drawing.Size(38, 17); + this.GLabel.TabIndex = 47; + this.GLabel.Text = "Gain"; + // + // GTrackBar + // + this.GTrackBar.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.GTrackBar.BackColor = System.Drawing.SystemColors.Control; + this.GTrackBar.LargeChange = 8; + this.GTrackBar.Location = new System.Drawing.Point(329, 571); + this.GTrackBar.Maximum = 256; + this.GTrackBar.Name = "GTrackBar"; + this.GTrackBar.Size = new System.Drawing.Size(193, 56); + this.GTrackBar.TabIndex = 46; + this.GTrackBar.ValueChanged += new System.EventHandler(this.GTrackBar_ValueChanged); + // + // OVFGLabel + // + this.OVFGLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.OVFGLabel.AutoSize = true; + this.OVFGLabel.BackColor = System.Drawing.SystemColors.Control; + this.OVFGLabel.Location = new System.Drawing.Point(582, 607); + this.OVFGLabel.Name = "OVFGLabel"; + this.OVFGLabel.Size = new System.Drawing.Size(66, 17); + this.OVFGLabel.TabIndex = 45; + this.OVFGLabel.Text = "OVFGain"; + // + // OVFGTrackBar + // + this.OVFGTrackBar.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.OVFGTrackBar.BackColor = System.Drawing.SystemColors.Control; + this.OVFGTrackBar.LargeChange = 10; + this.OVFGTrackBar.Location = new System.Drawing.Point(528, 571); + this.OVFGTrackBar.Maximum = 100; + this.OVFGTrackBar.Name = "OVFGTrackBar"; + this.OVFGTrackBar.Size = new System.Drawing.Size(193, 56); + this.OVFGTrackBar.TabIndex = 44; + this.OVFGTrackBar.ValueChanged += new System.EventHandler(this.OVFGTrackBar_ValueChanged); + // + // KpLabel + // + this.KpLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.KpLabel.AutoSize = true; + this.KpLabel.BackColor = System.Drawing.SystemColors.Control; + this.KpLabel.Location = new System.Drawing.Point(796, 607); + this.KpLabel.Name = "KpLabel"; + this.KpLabel.Size = new System.Drawing.Size(25, 17); + this.KpLabel.TabIndex = 43; + this.KpLabel.Text = "Kp"; + // + // KpTrackBar + // + this.KpTrackBar.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.KpTrackBar.BackColor = System.Drawing.SystemColors.Control; + this.KpTrackBar.LargeChange = 1000; + this.KpTrackBar.Location = new System.Drawing.Point(727, 571); + this.KpTrackBar.Maximum = 32767; + this.KpTrackBar.Name = "KpTrackBar"; + this.KpTrackBar.Size = new System.Drawing.Size(193, 56); + this.KpTrackBar.SmallChange = 100; + this.KpTrackBar.TabIndex = 42; + this.KpTrackBar.ValueChanged += new System.EventHandler(this.KpTrackBar_ValueChanged); + // + // KiLabel + // + this.KiLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.KiLabel.AutoSize = true; + this.KiLabel.BackColor = System.Drawing.SystemColors.Control; + this.KiLabel.Location = new System.Drawing.Point(995, 607); + this.KiLabel.Name = "KiLabel"; + this.KiLabel.Size = new System.Drawing.Size(20, 17); + this.KiLabel.TabIndex = 41; + this.KiLabel.Text = "Ki"; + // + // KiTrackBar + // + this.KiTrackBar.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.KiTrackBar.BackColor = System.Drawing.SystemColors.Control; + this.KiTrackBar.LargeChange = 100; + this.KiTrackBar.Location = new System.Drawing.Point(926, 571); + this.KiTrackBar.Maximum = 3277; + this.KiTrackBar.Name = "KiTrackBar"; + this.KiTrackBar.Size = new System.Drawing.Size(193, 56); + this.KiTrackBar.SmallChange = 10; + this.KiTrackBar.TabIndex = 40; + this.KiTrackBar.ValueChanged += new System.EventHandler(this.KiTrackBar_ValueChanged); + // + // DGLabel + // + this.DGLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.DGLabel.AutoSize = true; + this.DGLabel.BackColor = System.Drawing.SystemColors.Control; + this.DGLabel.Location = new System.Drawing.Point(1194, 607); + this.DGLabel.Name = "DGLabel"; + this.DGLabel.Size = new System.Drawing.Size(48, 17); + this.DGLabel.TabIndex = 39; + this.DGLabel.Text = "DGain"; + // + // DGTrackBar + // + this.DGTrackBar.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.DGTrackBar.BackColor = System.Drawing.SystemColors.Control; + this.DGTrackBar.Location = new System.Drawing.Point(1125, 571); + this.DGTrackBar.Maximum = 32; + this.DGTrackBar.Name = "DGTrackBar"; + this.DGTrackBar.Size = new System.Drawing.Size(193, 56); + this.DGTrackBar.TabIndex = 38; + this.DGTrackBar.ValueChanged += new System.EventHandler(this.DGTrackBar_ValueChanged); + // + // Button6 + // + this.Button6.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.Button6.BackColor = System.Drawing.SystemColors.ButtonShadow; + this.Button6.Location = new System.Drawing.Point(12, 619); + this.Button6.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.Button6.Name = "Button6"; + this.Button6.Size = new System.Drawing.Size(139, 44); + this.Button6.TabIndex = 36; + this.Button6.Text = "Query device"; + this.Button6.UseVisualStyleBackColor = false; + this.Button6.Click += new System.EventHandler(this.Button6_Click); + // + // Button3 + // + this.Button3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.Button3.Location = new System.Drawing.Point(12, 667); + this.Button3.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.Button3.Name = "Button3"; + this.Button3.Size = new System.Drawing.Size(139, 44); + this.Button3.TabIndex = 33; + this.Button3.Text = "Update Firmware"; + this.Button3.UseVisualStyleBackColor = true; + this.Button3.Click += new System.EventHandler(this.Button3_Click); + // + // panel1 + // + this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.panel1.BackColor = System.Drawing.Color.Black; + this.panel1.Controls.Add(this.checkBox11); + this.panel1.Controls.Add(this.checkBox10); + this.panel1.Controls.Add(this.checkBox9); + this.panel1.Controls.Add(this.checkBox8); + this.panel1.Controls.Add(this.checkBox7); + this.panel1.Controls.Add(this.checkBox6); + this.panel1.Controls.Add(this.checkBox4); + this.panel1.Controls.Add(this.checkBox3); + this.panel1.Controls.Add(this.checkBox2); + this.panel1.Controls.Add(this.checkBox1); + this.panel1.Font = new System.Drawing.Font("Arial Narrow", 10.2F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.panel1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); + this.panel1.Location = new System.Drawing.Point(1125, 11); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(193, 555); + this.panel1.TabIndex = 49; + // + // checkBox11 + // + this.checkBox11.AutoSize = true; + this.checkBox11.Checked = true; + this.checkBox11.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBox11.ForeColor = System.Drawing.Color.White; + this.checkBox11.Location = new System.Drawing.Point(6, 314); + this.checkBox11.Name = "checkBox11"; + this.checkBox11.Size = new System.Drawing.Size(174, 26); + this.checkBox11.TabIndex = 10; + this.checkBox11.Text = "Waveshaping profile"; + this.checkBox11.UseVisualStyleBackColor = true; + // + // checkBox10 + // + this.checkBox10.AutoSize = true; + this.checkBox10.Checked = true; + this.checkBox10.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBox10.ForeColor = System.Drawing.Color.Blue; + this.checkBox10.Location = new System.Drawing.Point(6, 282); + this.checkBox10.Name = "checkBox10"; + this.checkBox10.Size = new System.Drawing.Size(124, 26); + this.checkBox10.TabIndex = 9; + this.checkBox10.Text = "Power On/Off"; + this.checkBox10.UseVisualStyleBackColor = true; + // + // checkBox9 + // + this.checkBox9.AutoSize = true; + this.checkBox9.Checked = true; + this.checkBox9.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBox9.ForeColor = System.Drawing.Color.LightGray; + this.checkBox9.Location = new System.Drawing.Point(6, 250); + this.checkBox9.Name = "checkBox9"; + this.checkBox9.Size = new System.Drawing.Size(153, 26); + this.checkBox9.TabIndex = 8; + this.checkBox9.Text = "Heater resistance"; + this.checkBox9.UseVisualStyleBackColor = true; + // + // checkBox8 + // + this.checkBox8.AutoSize = true; + this.checkBox8.Checked = true; + this.checkBox8.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBox8.ForeColor = System.Drawing.Color.DarkRed; + this.checkBox8.Location = new System.Drawing.Point(6, 218); + this.checkBox8.Name = "checkBox8"; + this.checkBox8.Size = new System.Drawing.Size(64, 26); + this.checkBox8.TabIndex = 7; + this.checkBox8.Text = "Duty"; + this.checkBox8.UseVisualStyleBackColor = true; + // + // checkBox7 + // + this.checkBox7.AutoSize = true; + this.checkBox7.Checked = true; + this.checkBox7.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBox7.ForeColor = System.Drawing.Color.Green; + this.checkBox7.Location = new System.Drawing.Point(7, 186); + this.checkBox7.Name = "checkBox7"; + this.checkBox7.Size = new System.Drawing.Size(171, 26); + this.checkBox7.TabIndex = 6; + this.checkBox7.Text = "Destination reached"; + this.checkBox7.UseVisualStyleBackColor = true; + // + // checkBox6 + // + this.checkBox6.AutoSize = true; + this.checkBox6.Checked = true; + this.checkBox6.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBox6.ForeColor = System.Drawing.Color.Orange; + this.checkBox6.Location = new System.Drawing.Point(7, 154); + this.checkBox6.Name = "checkBox6"; + this.checkBox6.Size = new System.Drawing.Size(147, 26); + this.checkBox6.TabIndex = 5; + this.checkBox6.Text = "PID Temperature"; + this.checkBox6.UseVisualStyleBackColor = true; + // + // checkBox4 + // + this.checkBox4.AutoSize = true; + this.checkBox4.Checked = true; + this.checkBox4.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBox4.ForeColor = System.Drawing.Color.Magenta; + this.checkBox4.Location = new System.Drawing.Point(7, 122); + this.checkBox4.Name = "checkBox4"; + this.checkBox4.Size = new System.Drawing.Size(173, 26); + this.checkBox4.TabIndex = 3; + this.checkBox4.Text = "Filtered temperature"; + this.checkBox4.UseVisualStyleBackColor = true; + // + // checkBox3 + // + this.checkBox3.AutoSize = true; + this.checkBox3.Checked = true; + this.checkBox3.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBox3.ForeColor = System.Drawing.Color.SkyBlue; + this.checkBox3.Location = new System.Drawing.Point(7, 90); + this.checkBox3.Name = "checkBox3"; + this.checkBox3.Size = new System.Drawing.Size(62, 26); + this.checkBox3.TabIndex = 2; + this.checkBox3.Text = "ADC"; + this.checkBox3.UseVisualStyleBackColor = true; + // + // checkBox2 + // + this.checkBox2.AutoSize = true; + this.checkBox2.Checked = true; + this.checkBox2.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBox2.ForeColor = System.Drawing.Color.LightGreen; + this.checkBox2.Location = new System.Drawing.Point(7, 58); + this.checkBox2.Name = "checkBox2"; + this.checkBox2.Size = new System.Drawing.Size(177, 26); + this.checkBox2.TabIndex = 1; + this.checkBox2.Text = "Current Temperature"; + this.checkBox2.UseVisualStyleBackColor = true; + // + // checkBox1 + // + this.checkBox1.AutoSize = true; + this.checkBox1.Checked = true; + this.checkBox1.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBox1.ForeColor = System.Drawing.Color.Red; + this.checkBox1.Location = new System.Drawing.Point(8, 26); + this.checkBox1.Name = "checkBox1"; + this.checkBox1.Size = new System.Drawing.Size(165, 26); + this.checkBox1.TabIndex = 0; + this.checkBox1.Text = "Target temperature"; + this.checkBox1.UseVisualStyleBackColor = true; + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.SystemColors.ControlDark; + this.ClientSize = new System.Drawing.Size(1326, 720); + this.Controls.Add(this.panel1); + this.Controls.Add(this.Button8); + this.Controls.Add(this.GLabel); + this.Controls.Add(this.GTrackBar); + this.Controls.Add(this.OVFGLabel); + this.Controls.Add(this.OVFGTrackBar); + this.Controls.Add(this.KpLabel); + this.Controls.Add(this.KpTrackBar); + this.Controls.Add(this.KiLabel); + this.Controls.Add(this.KiTrackBar); + this.Controls.Add(this.DGLabel); + this.Controls.Add(this.DGTrackBar); + this.Controls.Add(this.Button6); + this.Controls.Add(this.Button3); + this.Controls.Add(this.SsChart2); + this.Name = "Form1"; + this.Text = "Form1"; + this.Load += new System.EventHandler(this.Form1_Load); + ((System.ComponentModel.ISupportInitialize)(this.GTrackBar)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.OVFGTrackBar)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.KpTrackBar)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.KiTrackBar)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.DGTrackBar)).EndInit(); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + internal SSControls.SSChart SsChart2; + internal System.Windows.Forms.Button Button8; + internal System.Windows.Forms.Label GLabel; + internal System.Windows.Forms.TrackBar GTrackBar; + internal System.Windows.Forms.Label OVFGLabel; + internal System.Windows.Forms.TrackBar OVFGTrackBar; + internal System.Windows.Forms.Label KpLabel; + internal System.Windows.Forms.TrackBar KpTrackBar; + internal System.Windows.Forms.Label KiLabel; + internal System.Windows.Forms.TrackBar KiTrackBar; + internal System.Windows.Forms.Label DGLabel; + internal System.Windows.Forms.TrackBar DGTrackBar; + internal System.Windows.Forms.Button Button6; + internal System.Windows.Forms.Button Button3; + private Panel panel1; + private CheckBox checkBox1; + private CheckBox checkBox2; + private CheckBox checkBox3; + private CheckBox checkBox4; + private CheckBox checkBox7; + private CheckBox checkBox6; + private CheckBox checkBox11; + private CheckBox checkBox10; + private CheckBox checkBox9; + private CheckBox checkBox8; + } +} + diff --git a/software/PC/UniSolder/Form1.cs b/software/PC/UniSolder/Form1.cs new file mode 100644 index 0000000..4a458f2 --- /dev/null +++ b/software/PC/UniSolder/Form1.cs @@ -0,0 +1,366 @@ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Data; +using System.Diagnostics; +using System.Drawing; +using System.Threading; +using System.Windows.Forms; +using SSControls; + +namespace UniSolder +{ + + partial class Form1 + { + int CPoint = 0; + + private UniSolderComm lUniSolder = null; + private UniSolderComm.PID PID = null; + + private System.Windows.Forms.Timer ConnectionTimer; + + public Form1() + { + Disposed += Form1_Disposed; + InitializeComponent(); + + lUniSolder = new UniSolderComm(); + lUniSolder.InstrumentChange += InstrumentChange; + lUniSolder.LiveDataReceived += LiveDataReceived; + lUniSolder.Transport = new SSComm.USBHID { DevVID = 0x4d8, DevPID = 0x3c }; + + ConnectionTimer = new System.Windows.Forms.Timer() { Interval = 1000, Enabled = true }; + ConnectionTimer.Tick += ConnectionTimer_Tick; + } + + private void ConnectionTimer_Tick(object sender, EventArgs e) + { + if (!lUniSolder.Transport.Connected) + { + if (lUniSolder.Transport.Connect()) + { + InstrumentChange(null, null); + } + } + } + + private void Form1_Disposed(object sender, EventArgs e) + { + lUniSolder?.Transport?.Dispose(); + } + + private void Form1_Load(object sender, EventArgs e) + { + SsChart2.DrawingsNum = 13; + var _with1 = SsChart2.Scales(0); + _with1.ValFrom = 0; + _with1.ValTo = 5.11F; + _with1.ValMinStep = 1F / 50F; + _with1.ValMajStep = 1F; + _with1.ValFormat = "0"; + + var _with2 = SsChart2.Scales(1); + _with2.ValFrom = 0; + _with2.ValTo = 500; + _with2.ValMinStep = 10; + _with2.ValMajStep = 50; + _with2.ValFormat = "0"; + + var _with3 = SsChart2.Drawings(0); + _with3.XScale = SsChart2.Scales(0); + _with3.Yscale = SsChart2.Scales(1); + _with3.Pen.Color = Color.Yellow; + _with3.Pen.Width = 1; + _with3.PointsNum = 2; + _with3.Points[0].X = _with3.XScale.ValFrom; + _with3.Points[0].Y = _with3.Yscale.ValFrom; + _with3.Points[1].X = _with3.XScale.ValFrom; + _with3.Points[1].Y = _with3.Yscale.ValTo; + + foreach (var d in SsChart2.Drawings1) + { + if (d != SsChart2.Drawings1[0]) + { + d.XScale = SsChart2.Scales(0); + d.Yscale = SsChart2.Scales(1); + d.Pen.Width = 2; + d.PointsNum = 256; + for (var i = 0; i <= 255; i++) + { + d.Points[i].X = i / 50F; + d.Points[i].Y = 10; + } + } + } + + SsChart2.Drawings(1).Pen.Color = Color.DarkRed; + SsChart2.Drawings(2).Pen.Color = Color.Red; + SsChart2.Drawings(3).Pen.Color = Color.LightGreen; + SsChart2.Drawings(4).Pen.Color = Color.SkyBlue; + SsChart2.Drawings(5).Pen.Color = Color.Magenta; + SsChart2.Drawings(6).Pen.Color = Color.Yellow; + SsChart2.Drawings(7).Pen.Color = Color.Blue; + SsChart2.Drawings(8).Pen.Color = Color.LightGray; + SsChart2.Drawings(9).Pen.Color = Color.Orange; + SsChart2.Drawings(10).Pen.Color = Color.White; + SsChart2.Drawings(11).Pen.Color = Color.Green; + SsChart2.Drawings(12).Pen.Color = Color.DarkSlateBlue; + + + //Debug.Print("Connecting....."); + //Debug.Print(lUniSolder.Transport.Connect().ToString()); + //Dim aa(64) As Byte + //aa(0) = 0 + //lUniSolder.TransLayer.Write(aa, 0, 64) + //lUniSolder.TransLayer.Write(aa, 0, 64) + + System.Threading.Thread.Sleep(500); + InstrumentChange(null, null); + //PID = lUniSolder.AppGetPIDParameters() + //KpTrackBar.Value = PID.KP + //KiTrackBar.Value = PID.KI + //DGTrackBar.Value = PID.DGain + //OVFGTrackBar.Value = PID.OVSGain + //GTrackBar.Value = PID.Gain + //Dim b(64) As Byte + //b(0) = 4 + //ud.Write(b, 0, 64) + //Timer1.Enabled = True + } + + public delegate void InstrumentChangeDelegate(object sender, EventArgs e); + private void InstrumentChange(object sender, EventArgs e) + { + if ((KpTrackBar.InvokeRequired)) + { + KpTrackBar.BeginInvoke(new InstrumentChangeDelegate(InstrumentChange), sender, e); + } + else + { + PID = lUniSolder.AppGetPIDParameters(); + KpTrackBar.Value = PID.KP; + KiTrackBar.Value = PID.KI; + DGTrackBar.Value = PID.DGain; + OVFGTrackBar.Value = PID.OVSGain; + GTrackBar.Value = PID.Gain; + } + } + + public delegate void LiveDataReceivedDelegate(object sender, UniSolderComm.LiveDataReceivedEventData e); + private void LiveDataReceived(object sender, UniSolderComm.LiveDataReceivedEventData e) + { + if (SsChart2.InvokeRequired) + { + SsChart2.BeginInvoke(new LiveDataReceivedDelegate(LiveDataReceived), sender, e); + } + else + { + var b = e.Data; + switch (b[0]) + { + case 3: + if (Button8.Text != "START") + { + SsChart2.Drawings(0).Points[0].X = SsChart2.Drawings(1).Points[CPoint].X; + SsChart2.Drawings(0).Points[1].X = SsChart2.Drawings(1).Points[CPoint].X; + + //CTTemp + SsChart2.Drawings(2).Points[CPoint].Y = b[3] * 2.0F; + + //CTemp + SsChart2.Drawings(3).Points[CPoint].Y = b[4] * 0.5F + b[5] * 128.0F; + + //ADCTemp + SsChart2.Drawings(4).Points[CPoint].Y = b[6] * 0.5F + b[7] * 128.0F; + + //TAvgF + SsChart2.Drawings(5).Points[CPoint].Y = b[8] * 0.5F + b[9] * 128.0F; + + //CHRes - Heater resistance x10 + SsChart2.Drawings(8).Points[CPoint].Y = b[10] * 1.0F + b[11] * 256.0F; + + //TAvgP + SsChart2.Drawings(9).Points[CPoint].Y = b[12] * 0.5F + b[13] * 128.0F; + + //Power On/Off + SsChart2.Drawings(7).Points[CPoint].Y = b[14] != 0 ? 100.0F : 0.0F; + + //WSDelta + SsChart2.Drawings(10).Points[0].Y = (b[15] * 1.0F + b[16] * 256.0F - 2048.0F) / 4.0F + 200.0F; + SsChart2.Drawings(10).Points[1].Y = (b[17] * 1.0F + b[18] * 256.0F - 2048.0F) / 4.0F + 200.0F; + SsChart2.Drawings(10).Points[2].Y = (b[19] * 1.0F + b[20] * 256.0F - 2048.0F) / 4.0F + 200.0F; + SsChart2.Drawings(10).Points[3].Y = (b[21] * 1.0F + b[22] * 256.0F - 2048.0F) / 4.0F + 200.0F; + SsChart2.Drawings(10).Points[4].Y = (b[23] * 1.0F + b[24] * 256.0F - 2048.0F) / 4.0F + 200.0F; + SsChart2.Drawings(10).Points[5].Y = (b[25] * 1.0F + b[26] * 256.0F - 2048.0F) / 4.0F + 200.0F; + SsChart2.Drawings(10).Points[6].Y = (b[27] * 1.0F + b[28] * 256.0F - 2048.0F) / 4.0F + 200.0F; + + //DestinationReached + SsChart2.Drawings(11).Points[CPoint].Y = b[31] * 100.0F; + + //Duty + SsChart2.Drawings(1).Points[CPoint].Y = (b[32] * 1.0F + b[33] * 256.0F) / 128.0F; + + ////SsChart2.Drawings(12).Points(CPoint).Y = (b(34) * 1.0 + b(35) * 256.0); + //TAvgF + //SsChart2.Drawings(6).Points(CPoint).Y = (b(10) * 1.0 + b(11) * 256.0 - 2048.0) / 4.0 + 200.0 + + CPoint = (CPoint + 1) % 256; + } + break; + } + if (!SsChart2.redrawactive) + { + SsChart2.Drawings(2).Visible = checkBox1.Checked; //CTTemp + SsChart2.Drawings(3).Visible = checkBox2.Checked; //CTemp + SsChart2.Drawings(4).Visible = checkBox3.Checked; //ADCTemp + SsChart2.Drawings(5).Visible = checkBox4.Checked; //TAvgF + SsChart2.Drawings(9).Visible = checkBox6.Checked; //TavgP + SsChart2.Drawings(11).Visible = checkBox7.Checked; //DestinationReached + SsChart2.Drawings(1).Visible = checkBox8.Checked; //Duty + SsChart2.Drawings(8).Visible = checkBox9.Checked; //CHRes + SsChart2.Drawings(7).Visible = checkBox10.Checked; //Power On/Off + SsChart2.Drawings(10).Visible = checkBox11.Checked; //WsDelta + + SsChart2._Redraw(); + } + } + } + + private void Button3_Click(object sender, EventArgs e) + { + var fd = new OpenFileDialog() + { + CheckFileExists = true, + CheckPathExists = true, + Multiselect = false, + Filter = "HEX Files|*.hex", + Title = "Select HEX file to upload.", + FilterIndex = 0 + }; + if (fd.ShowDialog() == System.Windows.Forms.DialogResult.OK) + { + Stopwatch sst = new Stopwatch(); + HexFileManager ss = new HexFileManager(); + if (ss.LoadHexFile(fd.FileName))// "C:\\Users\\Sparky\\Desktop\\MyProjects\\Electronics\\UniSolder\\software\\front\\US_Firmware.X\\dist\\PIC32_with_bootloader\\production\\US_Firmware.X.production.hex")) + { + if (lUniSolder.Transport.Connected) + { + Debug.Print("Hex File loaded successfully"); + sst.Restart(); + byte b = 0; + lUniSolder.DevGetOpMode(ref b); + if (b != 16) + { + lUniSolder.AppJumpToBootloader(); + Thread.Sleep(500); + lUniSolder.Transport.Disconnect(); + for (int i = 0; i < 20; i++) + { + if (lUniSolder.Transport.Connect()) break; + Thread.Sleep(500); + } + if (!lUniSolder.Transport.Connected) throw new Exception("Could not connect to UniSolder device."); + } + Debug.Print("Erasing Flash..."); + lUniSolder.BlEraseFlash(); + sst.Stop(); + Debug.Print("Erasing completed in " + sst.Elapsed.ToString()); + Debug.Print("Programming started..."); + sst.Restart(); + foreach (var r in ss.Records) + { + var cResult = lUniSolder.BlProgramFlash(r.Address, ref r.Data, 0, (int)r.RecDataLen); + switch (cResult) + { + case 0: + //Debug.Print(i & "(" & Format(.Address, "X8") & "," & .RecDataLen & ")") + break; + case -1: + Debug.Print("Time Out"); + break; + default: + Debug.Print("Error(" + cResult + ")"); + break; + } + if (cResult != 0) break; + } + lUniSolder.BlProgramComplete(); + sst.Stop(); + Debug.Print("Programming completed in " + sst.Elapsed.ToString()); + lUniSolder.BlJumpToApplication(); + } + } + } + } + + + private void Button6_Click(object sender, EventArgs e) + { + lUniSolder.DevQuery(); + } + + private void KpTrackBar_ValueChanged(object sender, EventArgs e) + { + KpLabel.Text = "Kp = " + (KpTrackBar.Value / 32767.0).ToString("0.00"); + if ((PID.KP != KpTrackBar.Value)) + { + PID.KP = (UInt16)KpTrackBar.Value; + lUniSolder.AppSetPIDParameters(ref PID); + } + } + + private void KiTrackBar_ValueChanged(object sender, EventArgs e) + { + KiLabel.Text = "Ki = " + (KiTrackBar.Value / 32767.0).ToString("0.000"); + if ((PID.KI != KiTrackBar.Value)) + { + PID.KI = (UInt16)KiTrackBar.Value; + lUniSolder.AppSetPIDParameters(ref PID); + } + } + + private void DGTrackBar_ValueChanged(object sender, EventArgs e) + { + DGLabel.Text = "DGain = " + DGTrackBar.Value.ToString(); + if ((PID.DGain != DGTrackBar.Value)) + { + PID.DGain = (byte)DGTrackBar.Value; + lUniSolder.AppSetPIDParameters(ref PID); + } + } + + private void OVFGTrackBar_ValueChanged(object sender, EventArgs e) + { + OVFGLabel.Text = "OVFGain = " + OVFGTrackBar.Value.ToString(); + if ((PID.OVSGain != OVFGTrackBar.Value)) + { + PID.OVSGain = (byte)OVFGTrackBar.Value; + lUniSolder.AppSetPIDParameters(ref PID); + } + } + + private void GTrackBar_ValueChanged(object sender, EventArgs e) + { + GLabel.Text = "Gain = " + GTrackBar.Value.ToString(); + if ((PID.Gain != GTrackBar.Value)) + { + PID.Gain = (UInt16)GTrackBar.Value; + lUniSolder.AppSetPIDParameters(ref PID); + } + } + + private void Button8_Click(object sender, EventArgs e) + { + if (Button8.Text == "STOP") + { + Button8.Text = "START"; + } + else + { + Button8.Text = "STOP"; + } + } + } +} \ No newline at end of file diff --git a/software/PC/UniSolder/Form1.resx b/software/PC/UniSolder/Form1.resx new file mode 100644 index 0000000..29dcb1b --- /dev/null +++ b/software/PC/UniSolder/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/software/PC/UniSolder/HexFileManager.cs b/software/PC/UniSolder/HexFileManager.cs new file mode 100644 index 0000000..7175085 --- /dev/null +++ b/software/PC/UniSolder/HexFileManager.cs @@ -0,0 +1,138 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace UniSolder +{ + public class HexFileManager + { + private byte[] VirtualFlash = new byte[5 * 1024 * 1024 + 1]; + private const UInt32 BOOT_SECTOR_BEGIN = 0x9fc00000; + + private const UInt32 APPLICATION_START = 0x9d000000; + private const byte DATA_RECORD = 0; + private const byte END_OF_FILE_RECORD = 1; + private const byte EXT_SEG_ADRS_RECORD = 2; + + private const byte EXT_LIN_ADRS_RECORD = 4; + + public class HexDataRecord + { + public UInt32 Address; + public UInt32 RecDataLen; + public byte[] Data = new byte[1024]; + public byte CheckSum; + } + + public List Records = new List(); + + private UInt32 PA_TO_VFA(UInt32 x) + { + return (x - APPLICATION_START); + } + + private UInt32 PA_TO_KVA0(UInt32 x) + { + return (x | 0x80000000); + } + + public bool LoadHexFile(string filepath) + { + UInt32 cExtSegAddress = 0; + UInt32 cExtLinAddress = 0; + var FileReader = new StreamReader(filepath); + + while (!FileReader.EndOfStream) + { + var s = FileReader.ReadLine().Trim(); + if (s.Length >= 11) + { + if (s[0] == ':') + { + UInt32 ccs = 0; + for (int i = 0; i <= ((s.Length - 1) / 2) - 2; i++) + { + ccs = ccs + Convert.ToUInt32(s.Substring(1 + ((int)i * 2), 2), 16); + ccs = ccs & 0xff; + } + ccs = (0x100 - ccs) & 0xff; + if (ccs == Convert.ToUInt32(s.Substring(s.Length - 2), 16))// Strings.Right(s, 2))) + { + var rectype = Convert.ToByte(s.Substring(7, 2), 16); // Strings.Mid(s, 8, 2)); + switch (rectype) + { + case DATA_RECORD: + var previous = Records.Count > 0 ? Records.Last() : null; + var current = new HexDataRecord() + { + Address = Convert.ToUInt32(s.Substring(3, 4), 16) + cExtSegAddress + cExtLinAddress, + RecDataLen = Convert.ToUInt32(s.Substring(1, 2), 16) + }; + for (int i = 0; i < current.RecDataLen; i++) current.Data[i] = Convert.ToByte(s.Substring(9 + i * 2, 2), 16); + if (previous != null) + { + if (current.Address == (previous.Address + previous.RecDataLen)) + { + while (current.RecDataLen > 0) + { + if (previous.RecDataLen < 48) + { + previous.RecDataLen++; + previous.Data[previous.RecDataLen-1] = current.Data[0]; + for (int i = 1; i < current.RecDataLen; i++) current.Data[i - 1] = current.Data[i]; + current.Address++; + current.RecDataLen--; + } + else + { + break; + } + } + } + } + if (current.RecDataLen > 0) Records.Add(current); + break; + case EXT_SEG_ADRS_RECORD: + cExtSegAddress = Convert.ToUInt32(s.Substring(9, 4), 16) << 8; + cExtLinAddress = 0; + break; + case EXT_LIN_ADRS_RECORD: + cExtLinAddress = Convert.ToUInt32(s.Substring(9, 4), 16) << 16; + cExtSegAddress = 0; + break; + case END_OF_FILE_RECORD: + break; + default: + cExtLinAddress = 0; + cExtSegAddress = 0; + break; + } + } + else + { + FileReader.Close(); + return false; + } + } + else + { + FileReader.Close(); + return false; + } + } + } + foreach (var r in Records) + { + var s = ""; + for (int i = 0; i < r.RecDataLen; i++) s += r.Data[i].ToString("X2"); + //Debug.Print(Format(PA_TO_KVA0(.Address), "X8") & "(" & Format(.RecDataLen, "X2") & "): " & s) + } + FileReader.Close(); + FileReader = null; + return true; + } + } +} diff --git a/software/PC/UniSolder/Program.cs b/software/PC/UniSolder/Program.cs new file mode 100644 index 0000000..914f55e --- /dev/null +++ b/software/PC/UniSolder/Program.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace UniSolder +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} diff --git a/software/PC/UniSolder/Properties/AssemblyInfo.cs b/software/PC/UniSolder/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..9792561 --- /dev/null +++ b/software/PC/UniSolder/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("UniSolder")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("UniSolder")] +[assembly: AssemblyCopyright("Copyright © 2017")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("cc166091-0117-4211-bef3-da4665245901")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/software/PC/UniSolder/Properties/Resources.Designer.cs b/software/PC/UniSolder/Properties/Resources.Designer.cs new file mode 100644 index 0000000..d489c1c --- /dev/null +++ b/software/PC/UniSolder/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace UniSolder.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("UniSolder.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/software/PC/UniSolder/Properties/Resources.resx b/software/PC/UniSolder/Properties/Resources.resx new file mode 100644 index 0000000..ffecec8 --- /dev/null +++ b/software/PC/UniSolder/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/software/PC/UniSolder/Properties/Settings.Designer.cs b/software/PC/UniSolder/Properties/Settings.Designer.cs new file mode 100644 index 0000000..072ae23 --- /dev/null +++ b/software/PC/UniSolder/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace UniSolder.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/software/PC/UniSolder/Properties/Settings.settings b/software/PC/UniSolder/Properties/Settings.settings new file mode 100644 index 0000000..abf36c5 --- /dev/null +++ b/software/PC/UniSolder/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/software/PC/UniSolder/UniSolder.csproj b/software/PC/UniSolder/UniSolder.csproj new file mode 100644 index 0000000..e7c73fe --- /dev/null +++ b/software/PC/UniSolder/UniSolder.csproj @@ -0,0 +1,132 @@ + + + + + Debug + AnyCPU + {CC166091-0117-4211-BEF3-DA4665245901} + WinExe + Properties + UniSolder + UniSolder + v4.5.2 + 512 + true + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + UniSolder.Program + + + + + + + + + + + + + + + + + Form + + + Form1.cs + + + + + + + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + {d9f40a00-08ca-4b51-91ac-fee25fa6410d} + SSComm + + + {a65f336e-822e-4f58-882c-371139985c67} + SSControls + + + + + False + Microsoft .NET Framework 4.5.2 %28x86 and x64%29 + true + + + False + .NET Framework 3.5 SP1 + false + + + + + \ No newline at end of file diff --git a/software/PC/UniSolder/UniSolder.csproj.user b/software/PC/UniSolder/UniSolder.csproj.user new file mode 100644 index 0000000..e990f23 --- /dev/null +++ b/software/PC/UniSolder/UniSolder.csproj.user @@ -0,0 +1,13 @@ + + + + publish\ + + + + + + en-US + false + + \ No newline at end of file diff --git a/software/PC/UniSolder/UniSolderComm.cs b/software/PC/UniSolder/UniSolderComm.cs new file mode 100644 index 0000000..a2577d9 --- /dev/null +++ b/software/PC/UniSolder/UniSolderComm.cs @@ -0,0 +1,477 @@ + +using Microsoft.VisualBasic; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Data; +using System.Diagnostics; +using System.Windows.Forms; +using System.IO; + +public class UniSolderComm +{ + + #region "Enums" + public enum Commands : byte + { + DEV_QUERY = 0x02, + DEV_GET_INFO = 0x60, + DEV_GET_OPERATING_MODE = 0x61, + DEV_RESET = 0x62, + + APP_GET_INFO = 0x80, + APP_JUMP_TO_BOOTLOADER = 0x81, + APP_RESTART = 0x82, + + APP_SET_PID = 3, + APP_GET_PID = 4, + + BL_GET_INFO = 0xE0, + BL_ERASE_FLASH = 0xE1, + BL_PROGRAM_FLASH = 0xE2, + BL_READ_CRC = 0xE3, + BL_JUMP_TO_APP = 0xE4, + BL_PROGRAM_COMPLETE = 0xE5 + } + + #endregion + + #region "Public subclasses" + + public class T_CommandFeedback + { + public bool IsEmpty; + public byte Command; + public byte Status; + public byte[] Data = new byte[1024]; + + public UInt32 DataLength; + public void Clear() + { + IsEmpty = true; + Command = 0; + Status = 0; + DataLength = 0; + } + + public bool ReadFromBuffer(ref byte[] bb, UInt32 Offset, UInt32 DLen) + { + UInt32 i = default(UInt32); + Command = bb[Offset]; + //Status = bb(Offset + 1) + DataLength = DLen - 1; + for (i = 0; i <= DLen - 2; i++) + { + Data[i] = bb[Offset + 1 + i]; + } + IsEmpty = false; + return true; + } + + public T_CommandFeedback() + { + Clear(); + } + } + + public class PID + { + public UInt16 Gain; + public UInt16 Offset; + public UInt16 KP; + public UInt16 KI; + public byte DGain; + public byte OVSGain; + } + #endregion + + private SSComm.IUniComm lTransport; + public SSComm.IUniComm Transport + { + get + { + return lTransport; + } + set + { + if (lTransport != null && lTransport != value) + { + lTransport.DataReceived -= Transport_DataReceived; + } + if ((lTransport = value) != null) + { + lTransport.DataReceived += Transport_DataReceived; + } + } + } + + + public T_CommandFeedback CommandFeedBack = new T_CommandFeedback(); + + public class LiveDataReceivedEventData : EventArgs + { + public byte[] Data; + } + + public event EventHandler LiveDataReceived; + public event EventHandler InstrumentChange; + + + private Stopwatch TOTimer = new Stopwatch(); + public void Init() + { + CommandFeedBack.Clear(); + } + + public int DevQuery() + { + byte[] bb = { (byte)Commands.DEV_QUERY }; + var result = SendBINCommand(bb, 0, 1, bb, 1000); + return result; + } + + public int DevGetInfo(ref UInt32 dDevID, ref byte dVerMaj, ref byte dVerMin) + { + byte[] bb = { + (byte)Commands.DEV_GET_INFO, + 0, + 0, + 0, + 0, + 0, + 0 + }; + var Result = SendBINCommand(bb, 0, 1, bb, 1000); + if (Result == 0) + { + dDevID = bb[3]; + dDevID <<= 8; + dDevID += bb[2]; + dDevID <<= 8; + dDevID += bb[1]; + dDevID <<= 8; + dDevID += bb[0]; + dVerMin = bb[4]; + dVerMaj = bb[5]; + Debug.Print("Device info: ID=" + String.Format("X8", dDevID) + " Version: " + dVerMaj + "." + dVerMin); + } + return Result; + } + + public int DevGetOpMode(ref byte dOpM) + { + byte[] bb = { (byte)Commands.DEV_GET_OPERATING_MODE }; + var Result = SendBINCommand(bb, 0, 1, bb, 1000); + if (Result == 0) + { + dOpM = bb[0]; + Debug.Print("Device operating mode: " + bb[0]); + } + return Result; + } + + public void DevReset() + { + byte[] bb = { (byte)Commands.DEV_RESET }; + SendBINCommand(bb, 0, 1, null, 0); + Debug.Print("Device reset."); + } + + public int AppGetInfo(ref byte aVerMin, ref byte aVerMaj) + { + byte[] bb = { + (byte)Commands.APP_GET_INFO, + 0 + }; + var Result = SendBINCommand(bb, 0, 1, bb, 1000); + if (Result == 0) + { + aVerMin = bb[0]; + aVerMaj = bb[1]; + Debug.Print("Device application info: Version: " + aVerMaj + "." + aVerMin); + } + return Result; + } + + public void AppJumpToBootloader() + { + byte[] bb = { (byte)Commands.APP_JUMP_TO_BOOTLOADER }; + SendBINCommand(bb, 0, 1, null, 0); + Debug.Print("Jump to bootloader."); + } + + public void AppRestart() + { + byte[] bb = { (byte)Commands.APP_RESTART }; + SendBINCommand(bb, 0, 1, null, 0); + Debug.Print("Application restart."); + } + + public PID AppGetPIDParameters() + { + byte[] bb = { + (byte)Commands.APP_GET_PID, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + }; + Debug.Print("Get PID paramaters"); + SendBINCommand(bb, 0, 1, bb, 1000); + return new PID + { + Gain = (UInt16)((UInt16)bb[0] + (UInt16)bb[1] * (UInt16)256), + Offset = (UInt16)((UInt16)bb[2] + (UInt16)bb[3] * (UInt16)256), + KP = (UInt16)((UInt16)bb[4] + (UInt16)bb[5] * (UInt16)256), + KI = (UInt16)((UInt16)bb[6] + (UInt16)bb[7] * (UInt16)256), + DGain = bb[8], + OVSGain = bb[10] + }; + } + + public void AppSetPIDParameters(ref PID PID) + { + byte[] BB = { + (byte)Commands.APP_SET_PID, + (byte)(PID.Gain & 255), + (byte)(PID.Gain / 256), + 0, + 0, + (byte)(PID.KP & 255), + (byte)(PID.KP / 256), + (byte)(PID.KI & 255), + (byte)(PID.KI / 256), + PID.DGain, + 0, + PID.OVSGain, + 0 + }; + SendBINCommand(BB, 0, BB.Length, null, 0); + } + + public Int32 BlGetInfo(ref byte blVerMaj, ref byte blVerMin) + { + byte[] bb = { + (byte)Commands.BL_GET_INFO, + 0 + }; + var Result = SendBINCommand(bb, 0, 1, bb, 1000); + if (Result == 0) + { + blVerMin = bb[0]; + blVerMaj = bb[1]; + Debug.Print("Bootloader information: Version=" + blVerMaj + "." + blVerMin); + } + return Result; + } + + public Int32 BlEraseFlash() + { + byte[] bb = { + (byte)Commands.BL_ERASE_FLASH, + 0x34, + 0x12, + 0x21, + 0x43 + }; + Debug.Print("BlEraseFlash"); + return SendBINCommand(bb, 0, 5, null, 6000); + } + + public Int32 BlProgramFlash(UInt32 pfAddr, ref byte[] byteBuff, int bbOffset, int bbCount) + { + byte[] bb = new byte[65]; + if (bbCount > 0) + { + bb[0] = (byte)Commands.BL_PROGRAM_FLASH; + bb[1] = 0x34; + bb[2] = 0x12; + bb[3] = 0x21; + bb[4] = 0x43; + bb[5] = (byte)(pfAddr & 0xffL); + bb[6] = (byte)((pfAddr >> 8) & 0xffL); + bb[7] = (byte)((pfAddr >> 16) & 0xffL); + bb[8] = (byte)((pfAddr >> 24) & 0xffL); + bb[9] = (byte)(bbCount & 0xffL); + bb[10] = (byte)((bbCount >> 8) & 0xffL); + bb[11] = (byte)((bbCount >> 16) & 0xffL); + bb[12] = (byte)((bbCount >> 24) & 0xffL); + for (int i = 0; i <= bbCount - 1; i++) + { + bb[13 + i] = byteBuff[bbOffset + i]; + } + return SendBINCommand(bb, 0, 13 + bbCount, null, 1000); + } + else + { + return 0; + } + } + + public Int32 BlProgramComplete() + { + byte[] bb = { + (byte)Commands.BL_PROGRAM_COMPLETE, + 0x34, + 0x12, + 0x21, + 0x43 + }; + Debug.Print("BlProgramComplete"); + return SendBINCommand(bb, 0, 5, null, 1000); + } + + public Int32 BlReadCRC(UInt32 pfAddr, UInt32 pfCount, ref UInt16 pfCRC) + { + if (pfCount > 0) + { + byte[] bb = { + (byte)Commands.BL_READ_CRC, + (byte)(pfAddr & 0xffL), + (byte)((pfAddr >> 8) & 0xffL), + (byte)((pfAddr >> 16) & 0xffL), + (byte)((pfAddr >> 24) & 0xffL), + (byte)(pfCount & 0xffL), + (byte)((pfCount >> 8) & 0xffL), + (byte)((pfCount >> 16) & 0xffL), + (byte)((pfCount >> 24) & 0xffL) + }; + var Result = SendBINCommand(bb, 0, 9, bb, 5000); + if (Result == 0) + { + pfCRC = bb[1]; + pfCRC <<= 8; + pfCRC += bb[0]; + } + return Result; + } + return 0; + } + + public void BlJumpToApplication() + { + byte[] bb = { (byte)Commands.BL_JUMP_TO_APP }; + SendBINCommand(bb, 0, 1, null, 0); + } + + private int SendBINCommand(byte[] OutBuffer, int OutOffset, int OutCount, byte[] RespBuffer = null, int TimeOut = 5000) + { + int rv = 0; + byte[] OB = new byte[64]; + if (OutCount > 0) + { + lock (TOTimer) + { + Array.Copy(OutBuffer, OB, OutCount); + //while (OutCount-->0) OB[OutCount] = OutBuffer[OutCount]; + //for (int i = 0; i <= OutCount - 1; i++) + //{ + //OB[i] = OutBuffer[i]; + //} + Transport.Write(ref OB, 0, 64); + //wait for feedback + if (TimeOut > 0) + { + CommandFeedBack.IsEmpty = true; + rv = -1; + TOTimer.Restart(); + while (TOTimer.ElapsedMilliseconds < TimeOut) + { + if (!CommandFeedBack.IsEmpty) + { + if (OutBuffer[0] == CommandFeedBack.Command) + { + rv = CommandFeedBack.Status; + if (RespBuffer != null) + { + Array.Copy(CommandFeedBack.Data, RespBuffer, Math.Min(RespBuffer.Length, (int)CommandFeedBack.DataLength)); + } + break; + } + else + { + CommandFeedBack.IsEmpty = true; + } + } + } + TOTimer.Stop(); + } + } + } + return rv; + } + + + private byte[] RXFBuff = new byte[65]; + private void Transport_DataReceived(object sender, EventArgs e) + { + int rlen; + byte[] RXB = new byte[65]; + while (Transport.RXDataCount >= 64) + { + rlen = Transport.Read(ref RXB, 0, 64); + ProcessRXMessage(ref RXB); + } + } + + private bool ProcessRXMessage(ref byte[] RXB) + { + switch (RXB[0]) + { + case 1: + InstrumentChange(this, new EventArgs()); + break; + case 3: + LiveDataReceived(this, new LiveDataReceivedEventData() { Data = RXB }); + break; + default: + CommandFeedBack.ReadFromBuffer(ref RXB, 0, 64); + break; + } + return true; + } + + private UInt16 CalculateCRC(ref byte[] data, int boff, int blen) + { + UInt16[] crc_table = { + 0x0, + 0x1021, + 0x2042, + 0x3063, + 0x4084, + 0x50a5, + 0x60c6, + 0x70e7, + 0x8108, + 0x9129, + 0xa14a, + 0xb16b, + 0xc18c, + 0xd1ad, + 0xe1ce, + 0xf1ef + }; + UInt32 i; + UInt16 crc = 0; + + while (blen > 0) + { + i = (UInt32)((crc >> 12) ^ (data[boff] >> 4)); + crc = (UInt16)(crc_table[i & 15] ^ (crc << 4)); + i = (UInt32)((crc >> 12) ^ (UInt32)data[boff]); + crc = (UInt16)(crc_table[i & 15] ^ (crc << 4)); + boff++; + blen--; + } + return crc; + } +} + diff --git a/software/PC/UniSolder/bin/Release/LibUsbDotNet.dll b/software/PC/UniSolder/bin/Release/LibUsbDotNet.dll new file mode 100644 index 0000000..e10661b Binary files /dev/null and b/software/PC/UniSolder/bin/Release/LibUsbDotNet.dll differ diff --git a/software/PC/UniSolder/bin/Release/SSComm.dll b/software/PC/UniSolder/bin/Release/SSComm.dll new file mode 100644 index 0000000..864202e Binary files /dev/null and b/software/PC/UniSolder/bin/Release/SSComm.dll differ diff --git a/software/PC/UniSolder/bin/Release/SSComm.pdb b/software/PC/UniSolder/bin/Release/SSComm.pdb new file mode 100644 index 0000000..245989c Binary files /dev/null and b/software/PC/UniSolder/bin/Release/SSComm.pdb differ diff --git a/software/PC/UniSolder/bin/Release/SSControls.dll b/software/PC/UniSolder/bin/Release/SSControls.dll new file mode 100644 index 0000000..1f68467 Binary files /dev/null and b/software/PC/UniSolder/bin/Release/SSControls.dll differ diff --git a/software/PC/UniSolder/bin/Release/SSControls.pdb b/software/PC/UniSolder/bin/Release/SSControls.pdb new file mode 100644 index 0000000..6d628ea Binary files /dev/null and b/software/PC/UniSolder/bin/Release/SSControls.pdb differ diff --git a/software/PC/UniSolder/bin/Release/UniSolder.exe b/software/PC/UniSolder/bin/Release/UniSolder.exe new file mode 100644 index 0000000..cbf6f72 Binary files /dev/null and b/software/PC/UniSolder/bin/Release/UniSolder.exe differ diff --git a/software/PC/UniSolder/bin/Release/UniSolder.exe.config b/software/PC/UniSolder/bin/Release/UniSolder.exe.config new file mode 100644 index 0000000..d740e88 --- /dev/null +++ b/software/PC/UniSolder/bin/Release/UniSolder.exe.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/software/PC/UniSolder/bin/Release/UniSolder.pdb b/software/PC/UniSolder/bin/Release/UniSolder.pdb new file mode 100644 index 0000000..89dbd10 Binary files /dev/null and b/software/PC/UniSolder/bin/Release/UniSolder.pdb differ diff --git a/software/PC/UniSolder/bin/Release/UniSolder.vshost.exe b/software/PC/UniSolder/bin/Release/UniSolder.vshost.exe new file mode 100644 index 0000000..681ab77 Binary files /dev/null and b/software/PC/UniSolder/bin/Release/UniSolder.vshost.exe differ diff --git a/software/PC/UniSolder/bin/Release/UniSolder.vshost.exe.config b/software/PC/UniSolder/bin/Release/UniSolder.vshost.exe.config new file mode 100644 index 0000000..d740e88 --- /dev/null +++ b/software/PC/UniSolder/bin/Release/UniSolder.vshost.exe.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/software/PC/UniSolder/bin/Release/UniSolder.vshost.exe.manifest b/software/PC/UniSolder/bin/Release/UniSolder.vshost.exe.manifest new file mode 100644 index 0000000..f96b1d6 --- /dev/null +++ b/software/PC/UniSolder/bin/Release/UniSolder.vshost.exe.manifest @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/software/front/US_BootLoader.X/Makefile b/software/front/US_BootLoader.X/Makefile new file mode 100644 index 0000000..05a3fb1 --- /dev/null +++ b/software/front/US_BootLoader.X/Makefile @@ -0,0 +1,108 @@ +# +# There exist several targets which are by default empty and which can be +# used for execution of your targets. These targets are usually executed +# before and after some main targets. They are: +# +# .build-pre: called before 'build' target +# .build-post: called after 'build' target +# .clean-pre: called before 'clean' target +# .clean-post: called after 'clean' target +# .clobber-pre: called before 'clobber' target +# .clobber-post: called after 'clobber' target +# .all-pre: called before 'all' target +# .all-post: called after 'all' target +# .help-pre: called before 'help' target +# .help-post: called after 'help' target +# +# Targets beginning with '.' are not intended to be called on their own. +# +# Main targets can be executed directly, and they are: +# +# build build a specific configuration +# clean remove built files from a configuration +# clobber remove all built files +# all build all configurations +# help print help mesage +# +# Targets .build-impl, .clean-impl, .clobber-impl, .all-impl, and +# .help-impl are implemented in nbproject/makefile-impl.mk. +# +# Available make variables: +# +# CND_BASEDIR base directory for relative paths +# CND_DISTDIR default top distribution directory (build artifacts) +# CND_BUILDDIR default top build directory (object files, ...) +# CONF name of current configuration +# CND_ARTIFACT_DIR_${CONF} directory of build artifact (current configuration) +# CND_ARTIFACT_NAME_${CONF} name of build artifact (current configuration) +# CND_ARTIFACT_PATH_${CONF} path to build artifact (current configuration) +# CND_PACKAGE_DIR_${CONF} directory of package (current configuration) +# CND_PACKAGE_NAME_${CONF} name of package (current configuration) +# CND_PACKAGE_PATH_${CONF} path to package (current configuration) +# +# NOCDDL + + +# Environment +MKDIR=mkdir +CP=cp +CCADMIN=CCadmin +RANLIB=ranlib + + +# build +build: .build-post + +.build-pre: +# Add your pre 'build' code here... + +.build-post: .build-impl +# Add your post 'build' code here... + + +# clean +clean: .clean-post + +.clean-pre: +# Add your pre 'clean' code here... + +.clean-post: .clean-impl +# Add your post 'clean' code here... + + +# clobber +clobber: .clobber-post + +.clobber-pre: +# Add your pre 'clobber' code here... + +.clobber-post: .clobber-impl +# Add your post 'clobber' code here... + + +# all +all: .all-post + +.all-pre: +# Add your pre 'all' code here... + +.all-post: .all-impl +# Add your post 'all' code here... + + +# help +help: .help-post + +.help-pre: +# Add your pre 'help' code here... + +.help-post: .help-impl +# Add your post 'help' code here... + + + +# include project implementation makefile +include nbproject/Makefile-impl.mk + +# include project make variables +include nbproject/Makefile-variables.mk diff --git a/software/front/US_BootLoader.X/OLED.c b/software/front/US_BootLoader.X/OLED.c new file mode 100644 index 0000000..bd76200 --- /dev/null +++ b/software/front/US_BootLoader.X/OLED.c @@ -0,0 +1,33 @@ +#define _OLED_C + +#include "mcu.h" +#include "OLED.h" + +const unsigned char OLEDInitBuff[31]={0xAE,0xD5,0xF0,0xA8,0x3F,0xD3,0x00,0x40,0x8D,0x10,0xA0,0xC0,0xDA,0x12,0x81,0xFF,0xD9,0x22,0xDB,0x40,0xA4,0xA6,0xAF,0x20,0x00,0x21,0,127,0x22,0,7}; + +void OLEDInit(){ + int i; + _delay_ms(1); + OLED_RES = 0; + _delay_ms(1); + OLED_RES = 1; + OLED_VCC = 0; + _delay_ms(100); + OLED_DC = 0; + OLED_CS = 0; + _delay_ms(100); + mcuSPISendBytes((int*)OLEDInitBuff, 31); + mcuSPIWait(); + for(i=0;i<256;i++)OLEDBUFF.D[0][i]=0; + OLEDUpdate(); +} + +void OLEDUpdate(){ + OLED_DC = 1; + OLED_CS = 0; + mcuSPISendBytes((unsigned int *) OLEDBUFF.B[0], 128*8); + mcuSPIWait(); + OLED_CS = 1; +} + +#undef _OLED_C \ No newline at end of file diff --git a/software/front/US_BootLoader.X/OLED.h b/software/front/US_BootLoader.X/OLED.h new file mode 100644 index 0000000..f5a9ec1 --- /dev/null +++ b/software/front/US_BootLoader.X/OLED.h @@ -0,0 +1,38 @@ +/* + * File: OLED.h + * Author: Sparky + * + * Created on ?????, 2014, ??? 16, 18:51 + */ + +#ifndef OLED_H +#define OLED_H + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef _OLED_C +#define OLEDC_EXTERN extern +#else +#define OLEDC_EXTERN +#endif + +OLEDC_EXTERN union { + UINT32 D[8][32]; + UINT8 B[8][128]; +}OLEDBUFF; + +OLEDC_EXTERN void OLEDInit(); +OLEDC_EXTERN void OLEDUpdate(); + +#undef OLEDC_EXTERN + + + +#ifdef __cplusplus +} +#endif + +#endif /* OLED_H */ + diff --git a/software/front/US_BootLoader.X/PIC32MX534F064H.c b/software/front/US_BootLoader.X/PIC32MX534F064H.c new file mode 100644 index 0000000..6083de8 --- /dev/null +++ b/software/front/US_BootLoader.X/PIC32MX534F064H.c @@ -0,0 +1,203 @@ +#define _PIC32MX534F064H_C + +#include +// DEVCFG3 +// USERID = No Setting +#pragma config FSRSSEL = PRIORITY_7 // SRS Select (SRS Priority 7) +#pragma config FCANIO = OFF // CAN I/O Pin Select (Alternate CAN I/O) +#pragma config FUSBIDIO = OFF // USB USID Selection (Controlled by Port Function) +#pragma config FVBUSONIO = OFF // USB VBUS OFF Selection (Not Controlled by USB Module) + +// DEVCFG2 +#pragma config FPLLIDIV = DIV_2 // PLL Input Divider (2x Divider) +#pragma config FPLLMUL = MUL_20 // PLL Multiplier (20x Multiplier) +#pragma config UPLLIDIV = DIV_2 // USB PLL Input Divider (2x Divider) +#pragma config UPLLEN = ON // USB PLL Enable (Enabled) +#pragma config FPLLODIV = DIV_1 // System PLL Output Clock Divider (PLL Divide by 1) + +// DEVCFG1 +#pragma config FNOSC = PRIPLL // Oscillator Selection Bits (Primary Osc w/PLL (XT+,HS+,EC+PLL)) +#pragma config FSOSCEN = OFF // Secondary Oscillator Enable (Disabled) +#pragma config IESO = OFF // Internal/External Switch Over (Disabled) +#pragma config POSCMOD = XT // Primary Oscillator Configuration (XT osc mode) +#pragma config OSCIOFNC = OFF // CLKO Output Signal Active on the OSCO Pin (Disabled) +#pragma config FPBDIV = DIV_2 // Peripheral Clock Divisor (Pb_Clk is Sys_Clk/1) +#pragma config FCKSM = CSDCMD // Clock Switching and Monitor Selection (Clock Switch Disable, FSCM Disabled) +#pragma config WDTPS = PS1048576 // Watchdog Timer Postscaler (1:1048576) +#pragma config FWDTEN = OFF // Watchdog Timer Enable (WDT Disabled (SWDTEN Bit Controls)) + +// DEVCFG0 +#pragma config DEBUG = OFF // Background Debugger Enable (Debugger is disabled) +#pragma config ICESEL = ICS_PGx2 // ICE/ICD Comm Channel Select (ICE EMUC2/EMUD2 pins shared with PGC2/PGD2) +#pragma config PWP = OFF // Program Flash Write Protect (Disable) +#pragma config BWP = OFF // Boot Flash Write Protect bit (Protection Disabled) +#pragma config CP = OFF // Code Protect (Protection Disabled) + + +#include +#include "PIC32MX534F064H.h" +#include +#include +#include "usb/usb.h" +#include "crc.h" + +typedef struct +{ + UINT32 Address; + UINT16 RecDataLen; + UINT8* Data; +}T_FLASH_RECORD; + +void DelayTicks(UINT32 a){ + UINT32 StartTime; + StartTime=ReadCoreTimer(); + while((UINT32)(ReadCoreTimer()-StartTime)=512)&&((lFR.Address & 511L)==0)) + { + Result=NVMWriteRow(ProgAddress,lFR.Data); + lFR.Address+=512; + lFR.RecDataLen-=512; + lFR.Data+=512; + } + else + { + if((((ProgAddress >= (void *)APP_FLASH_BASE_ADDRESS) && (ProgAddressEnd <= (void *)APP_FLASH_END_ADDRESS)) || + ((ProgAddress >= (void *)APP_IVT_BASE_ADDRESS) && (ProgAddressEnd <= (void *)APP_IVT_END_ADDRESS))) && + ((ProgAddressEnd <= (void*)DEV_CONFIG_REG_BASE_ADDRESS) || (ProgAddress > (void*)DEV_CONFIG_REG_END_ADDRESS))) + { + WrData = 0xFFFFFFFF; + memcpy(&WrData,lFR.Data,min(4,lFR.RecDataLen)); + Result = NVMWriteWord(ProgAddress, WrData); + } + lFR.Address += 4; + lFR.Data += 4; + if(lFR.RecDataLen > 3) + { + lFR.RecDataLen -= 4; + } + else + { + lFR.RecDataLen = 0; + } + } + if(Result)break; + } + return Result; +} + +UINT32 mcuProgramComplete(){ + UINT32 pCRC; + pCRC = CalculateCRC(1234, (void *)KVA0_TO_KVA1(APP_FLASH_BASE_ADDRESS), (APP_FLASH_END_ADDRESS - APP_FLASH_BASE_ADDRESS) - 3); + NVMWriteWord((void *)(APP_FLASH_END_ADDRESS - 3), pCRC); + return pCRC; +} + +UINT mcuValidAppPresent() +{ + UINT32 pCRC; + pCRC = CalculateCRC(1234, (void *)KVA0_TO_KVA1(APP_FLASH_BASE_ADDRESS), (APP_FLASH_END_ADDRESS - APP_FLASH_BASE_ADDRESS) - 3); + if(pCRC == (*((UINT32 *)KVA0_TO_KVA1(APP_FLASH_END_ADDRESS - 3))))return 1; + return 0; +} + +void mcuSPIWait(){ + while(mcuSPIIsBusy()); +} + + +#undef _PIC32MX534F064H_C \ No newline at end of file diff --git a/software/front/US_BootLoader.X/PIC32MX534F064H.h b/software/front/US_BootLoader.X/PIC32MX534F064H.h new file mode 100644 index 0000000..f76765f --- /dev/null +++ b/software/front/US_BootLoader.X/PIC32MX534F064H.h @@ -0,0 +1,145 @@ +/* + * File: PIC32MX.h + * Author: Sparky + * + * Created on ???????, 2013, ??? 30, 1:56 + */ + +#ifndef PIC32MX534F064H_H +#define PIC32MX534F064H_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include +#include +#include +#include + +#ifdef _PIC32MX534F064H_C +#define P32_EXTERN +#else +#define P32_EXTERN extern +#endif + +#define SYS_FREQ (80000000UL) +#define CORETIMER_FREQ (SYS_FREQ/2UL) +#define PER_FREQ (SYS_FREQ/2UL) +#define I2C_CLOCK_FREQ (400000UL) + +P32_EXTERN void DelayTicks(UINT32 a); +#define _delay_us(a) DelayTicks(a*(CORETIMER_FREQ/1000000UL)) +#define _delay_ms(a) DelayTicks(a*(CORETIMER_FREQ/1000UL)) + +#ifdef _PIC32MX534F064H_C +#define P32_EXTERN +#else +#define P32_EXTERN extern +#endif + +extern const void _RESET_ADDR; +#define DEVICE_ID 0x23248568 +#define DEVICE_MAJOR_VERSION 1 +#define DEVICE_MINOR_VERSION 0 +#define DEVICE_RESET_ENTRY (void *)&_RESET_ADDR + +#define BOOTLOADER_MAJOR_VERSION 1 +#define BOOTLOADER_MINOR_VERSION 0 + +#define PROGRAM_FLASH_END_ADRESS (0x9D000000+BMXPFMSZ-1) + +#define APP_FLASH_BASE_ADDRESS 0x9D003000 +#define APP_FLASH_END_ADDRESS PROGRAM_FLASH_END_ADRESS + +#define APP_IVT_BASE_ADDRESS 0x9FC01000 +#define APP_IVT_END_ADDRESS 0x9FC01FFF + +#define USER_APP_RESET_ADDRESS 0x9D003000 + +#define FLASH_PAGE_SIZE 4096 +#define DEV_CONFIG_REG_BASE_ADDRESS 0x9FC02FF0 +#define DEV_CONFIG_REG_END_ADDRESS 0x9FC02FFF + +//outputs +#define IND1 LATDbits.LATD11 +#define IND2 LATCbits.LATC13 +#define IND3 LATCbits.LATC14 +#define HEATER LATEbits.LATE6 +#define HCH LATEbits.LATE7 +#define CBANDA LATEbits.LATE2 +#define CBANDB LATFbits.LATF3 +#define CHSEL1 LATEbits.LATE5 +#define CHSEL2 LATEbits.LATE4 +#define CHPOL LATEbits.LATE3 +#define LEDA LATDbits.LATD7 +#define LEDB LATDbits.LATD6 +#define LEDC LATDbits.LATD4 +#define LEDD LATDbits.LATD1 +#define LEDE LATDbits.LATD2 +#define LEDF LATDbits.LATD5 +#define LEDG LATDbits.LATD3 +#define OLED_VCC LATCbits.LATC14 +#define OLED_RES LATDbits.LATD7 +#define OLED_DC LATDbits.LATD6 +#define OLED_CS LATDbits.LATD4 +#define OLED_SCK LATDbits.LATD1 +#define OLED_SDI LATDbits.LATD2 +#define OLED_SDO LATDbits.LATD3 +#define ID_OUT LATBbits.LATB15 + +//inputs +#define B1 PORTDbits.RD8 +#define B2 PORTDbits.RD9 +#define B3 PORTDbits.RD10 +#define ID_IN PORTBbits.RB15 +#define NAP PORTGbits.RG9 +#define ID_3S TRISBbits.TRISB15 + +#define SPEAKER OC1CONbits.ON +#define SPKON if(!SPEAKER)SPEAKER=1 +#define SPKOFF if(SPEAKER)SPEAKER=0 + +#define SDISDO_IO {TRISDSET=0b100;TRISDCLR=0b1000;} +#define SDISDO_OI {TRISDCLR=0b100;TRISDSET=0b1000;} +#define SDISDO_OO {TRISDCLR=0b1100;} +#define SDI_IN PORTDbits.RD2 +#define SDI_OUT LATDbits.LATD2 +#define SDO_IN PORTDbits.RD3 +#define SDO_OUT LATDbits.LATD3 + +#define mcuDisableInterrupts() INTDisableInterrupts() +#define mcuEnableInterrupts() INTEnableInterrupts() +#define mcuRestoreInterrupts(a) INTRestoreInterrupts(a) + +//USB Stack definitions +#define self_power 1 +#define USB_BUS_SENSE 1 + +P32_EXTERN void mcuInit(void); +P32_EXTERN void mcuDisableUSB(void); +P32_EXTERN void mcuJumpToApp(void); +P32_EXTERN UINT mcuEraseFlash(); +P32_EXTERN UINT mcuWriteFlashRecord(void * RecordData); +P32_EXTERN UINT32 mcuProgramComplete(void); +P32_EXTERN UINT mcuValidAppPresent(); + +#define mcuReset() Reset() + +#define mcuSPIOpen() SpiChnOpen(SPI_CHANNEL3,SPI_OPEN_MSTEN | SPI_OPEN_MODE8 | SPI_OPEN_CKP_HIGH, 4) +#define mcuSPIClose() SpiChnClose(SPI_CHANNEL3) +#define mcuSPISendByte(b) SpiChnPutC(SPI_CHANNEL3, b) +#define mcuSPISendBytes(b,n) SpiChnPutS(SPI_CHANNEL3,b,n) +#define mcuSPIIsBusy() SpiChnIsBusy(SPI_CHANNEL3) +P32_EXTERN void mcuSPIWait(); + + +#undef P32_EXTERN + +#ifdef __cplusplus +} +#endif + +#endif /* PIC32MX_H */ diff --git a/software/front/US_BootLoader.X/bootloader.ld b/software/front/US_BootLoader.X/bootloader.ld new file mode 100644 index 0000000..d1c2128 --- /dev/null +++ b/software/front/US_BootLoader.X/bootloader.ld @@ -0,0 +1,423 @@ +/* Default linker script, for normal executables */ +OUTPUT_FORMAT("elf32-tradlittlemips") +OUTPUT_ARCH(pic32mx) +ENTRY(_reset) +/* + * Provide for a minimum stack and heap size + * - _min_stack_size - represents the minimum space that must be made + * available for the stack. Can be overridden from + * the command line using the linker's --defsym option. + * - _min_heap_size - represents the minimum space that must be made + * available for the heap. Can be overridden from + * the command line using the linker's --defsym option. + */ +EXTERN (_min_stack_size _min_heap_size) +PROVIDE(_min_stack_size = 0x400) ; +/* PROVIDE(_min_heap_size = 0) ; Defined on the command line */ +/* INCLUDE procdefs.ld */ + +/************************************************************************* + * Processor-specific object file. Contains SFR definitions. + *************************************************************************/ +INPUT("processor.o") + +/************************************************************************* + * Processor-specific peripheral libraries are optional + *************************************************************************/ +OPTIONAL("libmchp_peripheral.a") +OPTIONAL("libmchp_peripheral_32MX534F064H.a") + +/************************************************************************* + * For interrupt vector handling + *************************************************************************/ +PROVIDE(_vector_spacing = 0x00000001); +_ebase_address = 0x9FC01000; + +/************************************************************************* + * Memory Address Equates + * _RESET_ADDR -- Reset Vector + * _BEV_EXCPT_ADDR -- Boot exception Vector + * _DBG_EXCPT_ADDR -- In-circuit Debugging Exception Vector + * _DBG_CODE_ADDR -- In-circuit Debug Executive address + * _DBG_CODE_SIZE -- In-circuit Debug Executive size + * _GEN_EXCPT_ADDR -- General Exception Vector + *************************************************************************/ +_RESET_ADDR = 0xBFC00000; +_BEV_EXCPT_ADDR = 0xBFC00380; +_DBG_EXCPT_ADDR = 0xBFC00480; +_DBG_CODE_ADDR = 0xBFC02000; +_DBG_CODE_SIZE = 0xFF0 ; +_GEN_EXCPT_ADDR = _ebase_address + 0x180; + +/************************************************************************* + * Memory Regions + * + * Memory regions without attributes cannot be used for orphaned sections. + * Only sections specifically assigned to these regions can be allocated + * into these regions. + *************************************************************************/ +MEMORY +{ + + kseg0_program_mem (rx) : ORIGIN = 0x9D000000, LENGTH = 0x3000 /* 12KB memory for bootloader */ + kseg1_boot_mem : ORIGIN = 0xBFC00000, LENGTH = 0x490 + kseg0_boot_mem : ORIGIN = 0x9FC00490, LENGTH = 0x970 + exception_mem : ORIGIN = 0x9FC01000, LENGTH = 0 /* Bootloader doesn't need IVT */ + + debug_exec_mem : ORIGIN = 0xBFC02000, LENGTH = 0xFF0 + config3 : ORIGIN = 0xBFC02FF0, LENGTH = 0x4 + config2 : ORIGIN = 0xBFC02FF4, LENGTH = 0x4 + config1 : ORIGIN = 0xBFC02FF8, LENGTH = 0x4 + config0 : ORIGIN = 0xBFC02FFC, LENGTH = 0x4 + kseg1_data_mem (w!x) : ORIGIN = 0xA0000000, LENGTH = 0x4000 + sfrs : ORIGIN = 0xBF800000, LENGTH = 0x100000 + configsfrs : ORIGIN = 0xBFC02FF0, LENGTH = 0x10 + +} + +SECTIONS +{ + .config_BFC02FF0 : { + KEEP(*(.config_BFC02FF0)) + } > config3 + .config_BFC02FF4 : { + KEEP(*(.config_BFC02FF4)) + } > config2 + .config_BFC02FF8 : { + KEEP(*(.config_BFC02FF8)) + } > config1 + .config_BFC02FFC : { + KEEP(*(.config_BFC02FFC)) + } > config0 +} + + + +PROVIDE(_DBG_CODE_ADDR = 0xBFC02000) ; +PROVIDE(_DBG_CODE_SIZE = 0xFF0) ; +SECTIONS +{ + /* Boot Sections */ + .reset _RESET_ADDR : + { + KEEP(*(.reset)) + KEEP(*(.reset.startup)) + } > kseg1_boot_mem + .bev_excpt _BEV_EXCPT_ADDR : + { + KEEP(*(.bev_handler)) + } > kseg1_boot_mem + .dbg_excpt _DBG_EXCPT_ADDR (NOLOAD) : + { + . += (DEFINED (_DEBUGGER) ? 0x8 : 0x0); + } > kseg1_boot_mem + .dbg_code _DBG_CODE_ADDR (NOLOAD) : + { + . += (DEFINED (_DEBUGGER) ? _DBG_CODE_SIZE : 0x0); + } > debug_exec_mem + + + /* Starting with C32 v2.00, the startup code is in the .reset.startup section. + * Keep this here for backwards compatibility. + */ + .startup ORIGIN(kseg0_boot_mem) : + { + KEEP(*(.startup)) + } > kseg0_boot_mem + /* Code Sections - Note that input sections *(.text) and *(.text.*) + ** are not mapped here. Starting in C32 v2.00, the best-fit allocator + ** locates them, so that .text may flow around absolute sections + ** as needed. + */ + .text : + { + *(.stub .gnu.linkonce.t.*) + KEEP (*(.text.*personality*)) + *(.mips16.fn.*) + *(.mips16.call.*) + *(.gnu.warning) + . = ALIGN(4) ; + } >kseg0_program_mem + /* Global-namespace object initialization */ + .init : + { + KEEP (*crti.o(.init)) + KEEP (*crtbegin.o(.init)) + KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o *crtn.o ).init)) + KEEP (*crtend.o(.init)) + KEEP (*crtn.o(.init)) + . = ALIGN(4) ; + } >kseg0_program_mem + .fini : + { + KEEP (*(.fini)) + . = ALIGN(4) ; + } >kseg0_program_mem + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + . = ALIGN(4) ; + } >kseg0_program_mem + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + . = ALIGN(4) ; + } >kseg0_program_mem + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + . = ALIGN(4) ; + } >kseg0_program_mem + .ctors : + { + /* XC32 uses crtbegin.o to find the start of + the constructors, so we make sure it is + first. Because this is a wildcard, it + doesn't matter if the user does not + actually link against crtbegin.o; the + linker won't look for a file to match a + wildcard. The wildcard also means that it + doesn't matter which directory crtbegin.o + is in. */ + KEEP (*crtbegin.o(.ctors)) + KEEP (*crtbegin?.o(.ctors)) + /* We don't want to include the .ctor section from + the crtend.o file until after the sorted ctors. + The .ctor section from the crtend file contains the + end of ctors marker and it must be last */ + KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) + KEEP (*(SORT(.ctors.*))) + KEEP (*(.ctors)) + . = ALIGN(4) ; + } >kseg0_program_mem + .dtors : + { + KEEP (*crtbegin.o(.dtors)) + KEEP (*crtbegin?.o(.dtors)) + KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) + KEEP (*(SORT(.dtors.*))) + KEEP (*(.dtors)) + . = ALIGN(4) ; + } >kseg0_program_mem + /* Read-only sections */ + .rodata : + { + *( .gnu.linkonce.r.*) + *(.rodata1) + . = ALIGN(4) ; + } >kseg0_program_mem + /* + * Small initialized constant global and static data can be placed in the + * .sdata2 section. This is different from .sdata, which contains small + * initialized non-constant global and static data. + */ + .sdata2 ALIGN(4) : + { + *(.sdata2 .sdata2.* .gnu.linkonce.s2.*) + . = ALIGN(4) ; + } >kseg0_program_mem + /* + * Uninitialized constant global and static data (i.e., variables which will + * always be zero). Again, this is different from .sbss, which contains + * small non-initialized, non-constant global and static data. + */ + .sbss2 ALIGN(4) : + { + *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*) + . = ALIGN(4) ; + } >kseg0_program_mem + .eh_frame_hdr : + { + *(.eh_frame_hdr) + } >kseg0_program_mem + . = ALIGN(4) ; + .eh_frame : ONLY_IF_RO + { + KEEP (*(.eh_frame)) + } >kseg0_program_mem + . = ALIGN(4) ; + .gcc_except_table : ONLY_IF_RO + { + *(.gcc_except_table .gcc_except_table.*) + } >kseg0_program_mem + . = ALIGN(4) ; + .dbg_data (NOLOAD) : + { + . += (DEFINED (_DEBUGGER) ? 0x200 : 0x0); + } >kseg1_data_mem + .jcr : + { + KEEP (*(.jcr)) + . = ALIGN(4) ; + } >kseg1_data_mem + .eh_frame : ONLY_IF_RW + { + KEEP (*(.eh_frame)) + } >kseg1_data_mem + . = ALIGN(4) ; + .gcc_except_table : ONLY_IF_RW + { + *(.gcc_except_table .gcc_except_table.*) + } >kseg1_data_mem + . = ALIGN(4) ; + /* Persistent data - Use the new C 'persistent' attribute instead. */ + .persist : + { + _persist_begin = .; + *(.persist .persist.*) + *(.pbss .pbss.*) + . = ALIGN(4) ; + _persist_end = .; + } >kseg1_data_mem + /* + * Note that input sections named .data* are no longer mapped here. + * Starting in C32 v2.00, the best-fit allocator locates them, so + * that they may flow around absolute sections as needed. + */ + .data : + { + *( .gnu.linkonce.d.*) + SORT(CONSTRUCTORS) + *(.data1) + . = ALIGN(4) ; + } >kseg1_data_mem + . = .; + _gp = ALIGN(16) + 0x7ff0; + .got ALIGN(4) : + { + *(.got.plt) *(.got) + . = ALIGN(4) ; + } >kseg1_data_mem /* AT>kseg0_program_mem */ + /* + * Note that "small" data sections are still mapped in the linker + * script. This ensures that they are grouped together for + * gp-relative addressing. Absolute sections are allocated after + * the "small" data sections so small data cannot flow around them. + */ + /* + * We want the small data sections together, so single-instruction offsets + * can access them all, and initialized data all before uninitialized, so + * we can shorten the on-disk segment size. + */ + .sdata ALIGN(4) : + { + _sdata_begin = . ; + *(.sdata .sdata.* .gnu.linkonce.s.*) + . = ALIGN(4) ; + _sdata_end = . ; + } >kseg1_data_mem + .lit8 : + { + *(.lit8) + } >kseg1_data_mem + .lit4 : + { + *(.lit4) + } >kseg1_data_mem + . = ALIGN (4) ; + _data_end = . ; + _bss_begin = . ; + .sbss ALIGN(4) : + { + _sbss_begin = . ; + *(.dynsbss) + *(.sbss .sbss.* .gnu.linkonce.sb.*) + *(.scommon) + _sbss_end = . ; + . = ALIGN(4) ; + } >kseg1_data_mem + /* + * Align here to ensure that the .bss section occupies space up to + * _end. Align after .bss to ensure correct alignment even if the + * .bss section disappears because there are no input sections. + * + * Note that input sections named .bss* are no longer mapped here. + * Starting in C32 v2.00, the best-fit allocator locates them, so + * that they may flow around absolute sections as needed. + * + */ + .bss : + { + *(.dynbss) + *(COMMON) + /* Align here to ensure that the .bss section occupies space up to + _end. Align after .bss to ensure correct alignment even if the + .bss section disappears because there are no input sections. */ + . = ALIGN(. != 0 ? 4 : 1); + } >kseg1_data_mem + . = ALIGN(4) ; + _end = . ; + _bss_end = . ; + /* Starting with C32 v2.00, the heap and stack are dynamically + * allocated by the linker. + */ + /* + * RAM functions go at the end of our stack and heap allocation. + * Alignment of 2K required by the boundary register (BMXDKPBA). + * + * RAM functions are now allocated by the linker. The linker generates + * _ramfunc_begin and _bmxdkpba_address symbols depending on the + * location of RAM functions. + */ + _bmxdudba_address = LENGTH(kseg1_data_mem) ; + _bmxdupba_address = LENGTH(kseg1_data_mem) ; + /* The .pdr section belongs in the absolute section */ + /DISCARD/ : { *(.pdr) } + .gptab.sdata : { *(.gptab.data) *(.gptab.sdata) } + .gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) } + .mdebug.abi32 : { KEEP(*(.mdebug.abi32)) } + .mdebug.abiN32 : { KEEP(*(.mdebug.abiN32)) } + .mdebug.abi64 : { KEEP(*(.mdebug.abi64)) } + .mdebug.abiO64 : { KEEP(*(.mdebug.abiO64)) } + .mdebug.eabi32 : { KEEP(*(.mdebug.eabi32)) } + .mdebug.eabi64 : { KEEP(*(.mdebug.eabi64)) } + .gcc_compiled_long32 : { KEEP(*(.gcc_compiled_long32)) } + .gcc_compiled_long64 : { KEEP(*(.gcc_compiled_long64)) } + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + /* DWARF debug sections. + Symbols in the DWARF debugging sections are relative to the beginning + of the section so we begin them at 0. */ + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } + .debug_pubtypes 0 : { *(.debug_pubtypes) } + .debug_ranges 0 : { *(.debug_ranges) } + /DISCARD/ : { *(.rel.dyn) } + .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } + /DISCARD/ : { *(.note.GNU-stack) } + /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) *(.discard) } +} diff --git a/software/front/US_BootLoader.X/crc.c b/software/front/US_BootLoader.X/crc.c new file mode 100644 index 0000000..28917f8 --- /dev/null +++ b/software/front/US_BootLoader.X/crc.c @@ -0,0 +1,22 @@ +#include + +UINT16 CalculateCRC(UINT16 scrc, UINT8 *data, UINT32 len) +{ + static const UINT16 crc_table[16] = + { + 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, + 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef + }; + UINT32 i; + + while(len--) + { + i = (scrc >> 12) ^ (*data >> 4); + scrc = crc_table[i & 0x0F] ^ (scrc << 4); + i = (scrc >> 12) ^ (*data >> 0); + scrc = crc_table[i & 0x0F] ^ (scrc << 4); + data++; + } + return scrc; +} + diff --git a/software/front/US_BootLoader.X/crc.h b/software/front/US_BootLoader.X/crc.h new file mode 100644 index 0000000..cdf3aae --- /dev/null +++ b/software/front/US_BootLoader.X/crc.h @@ -0,0 +1,22 @@ +/* + * File: crc.h + * Author: Sparky + * + * Created on ??????????, 2013, ????????? 9, 4:08 + */ + +#ifndef CRC_H +#define CRC_H + +#ifdef __cplusplus +extern "C" { +#endif + +extern UINT16 CalculateCRC(UINT16 scrc, UINT8 *data, UINT32 len); + +#ifdef __cplusplus +} +#endif + +#endif /* CRC_H */ + diff --git a/software/front/US_BootLoader.X/dist/PIC32/production/US_BootLoader.X.production.elf b/software/front/US_BootLoader.X/dist/PIC32/production/US_BootLoader.X.production.elf new file mode 100644 index 0000000..99be596 Binary files /dev/null and b/software/front/US_BootLoader.X/dist/PIC32/production/US_BootLoader.X.production.elf differ diff --git a/software/front/US_BootLoader.X/dist/PIC32/production/US_BootLoader.X.production.hex b/software/front/US_BootLoader.X/dist/PIC32/production/US_BootLoader.X.production.hex new file mode 100644 index 0000000..5ab9d0b --- /dev/null +++ b/software/front/US_BootLoader.X/dist/PIC32/production/US_BootLoader.X.production.hex @@ -0,0 +1,902 @@ +:020000040000fa +:020000041fc01b +:042ff000ffffff3ba5 +:020000040000fa +:020000041fc01b +:042ff400d979f8ff90 +:020000040000fa +:020000041fc01b +:042ff8005bdd74ff2a +:020000040000fa +:020000041fc01b +:042ffc00ffffff7f55 +:020000040000fa +:020000041fc01b +:100000000200f00f0000000000601a40c0045a7f98 +:100010000500401300000000009d1a3c5c2b5a278d +:10002000080040030000000000a01d3cf03fbd2779 +:1000300000a01c3cf07f9c27026009402058200152 +:10004000801e2a7d8449497d02608940c0000000ed +:1000500000e0dc4102608b40c0000000009d083cd5 +:10006000f52b082509f800010000000000a0083c5d +:100070000000082500a0093cdc0629250600001028 +:1000800000000000000000ad040000ad080000ad5d +:100090000c0000ad100008252b080901f9ff201401 +:1000a00000000000009d083cc82508250000098dbf +:1000b000180020110400082500000a8d04000825fe +:1000c00000000b8d090060110400082500000c9150 +:1000d000ffff4a250100082500002ca1fbff401569 +:1000e000010029250500001000000000000020a1eb +:1000f000ffff4a25fdff40150100292503000825c3 +:10010000fcff0a24244048010000098de7ff201568 +:10011000000000000000093c00002925100020110b +:10012000000000000000093c0040292588bf0a3c6f +:1001300010204a25000049ad0000093c0040292557 +:1001400088bf0a3c20204a25000049ad0000093c38 +:100150000040292588bf0a3c30204a25000049adcf +:1001600000488040ffff0a2400588a40c09f093c95 +:1001700000102925017889400000093c010029254b +:1001800000000a2444492a7d01608a408000093c1d +:1001900000688940008008408005097d404c0900c6 +:1001a000006008405800013c24400101254028011e +:1001b00000608840009d083cf92b082509f80001e3 +:1001c0000000000000600840bfff013cffff213439 +:1001d0002440010100608840000084300000a53008 +:1001e000009d083c182608250800000100000000ba +:020000040000fa +:020000041fc01b +:10038000009d1a3cf4265a27080040030000000094 +:020000040000fa +:020000041fc01b +:1004800000f89b40c0000000009d1b3c3c277b27e0 +:10049000020060130000000000c09b4000f81b40f9 +:0c04a000c00000001f000042000000002f +:020000040000fa +:020000041d00dd +:10000000f7641c6750f04098222ac1f418b340db13 +:10001000c1f414b4c1f414b340db40dc9f6ac1f4f2 +:1000200010b440dc40dbc1f40cb2609a0f6c8ceb76 +:1000300060da609a60da0310609c4deb60dca1f43a +:1000400018b4609c016a4cebf72350f040d850f094 +:100050004098016b6eea142aff6ca1f400b380dbb8 +:1000600081f408b340db81f418b2609a016c8deb27 +:1000700060da609a106c8deb60da026a50f040d85a +:1000800081f400b2409a10692cea1a2261f418b384 +:10009000409b2cea152261f414b7006a20df746ccf +:1000a000a26708d307d770f04cd81a18850ac26720 +:1000b0000893116c409b8bec8cea40db079720dfa8 +:1000c00041f40cb2409a026b6cea00f6032a41f448 +:1000d00004b2409a01692cea0e2221f404b2409a3b +:1000e0002cea09221a184b050065046a50f040d822 +:1000f00001f408b220da01f41cb2409a10692cea2b +:100100001822e1f31cb2409a2cea1322e1f318b34f +:10011000409b006d2dea40dbe1f300b320db016a78 +:10012000756c08d370f04cd81a18850ac567089307 +:1001300020dbe1f300b2409a046b6cea1a22c1f3af +:1001400000b2409a6cea0522736c006d1a18850a99 +:10015000016ea1f308b2046b60da70f050a00322c4 +:10016000ff4a70f050c070f050a0032a1a184d07d3 +:100170000065a1f300b2409a806b6cea312281f3f2 +:1001800000b2409a6cea2c2281f30cb2409a026bc6 +:100190006cea222290f0409880a261a211ec11eb4f +:1001a00060338deb8073116150f0689880a361a378 +:1001b00011ec11eb60338deb846c8eeb062b80a27f +:1001c000746c8bec80c281a261c241f30cb3409b82 +:1001d000036c8bec8cea40db806b21f300b260dabd +:1001e00021f310b2409a02692cea122201f310b2f4 +:1001f000409a2cea0d2221f304b4006d1a18850ae6 +:10020000016e01f31cb2ff6b60dae1f210b220da8a +:1002100050f04098045a40f51d61e1f204b2409a52 +:10022000086b6cea40f51622006d06d5e1f204b2c7 +:10023000409a086dacea40f50d22e1f208b2409a0e +:10024000a1f218b611ea5233a0de026c4ced90f028 +:100250004cc050f065c08bec082dd06750f0104eac +:10026000d9e3e0a601690f650710d06770f01c4e56 +:10027000d9e3a0a601690d65b167e867eced016ff0 +:10028000eeed2ced28672cecadec80c600f5142bc0 +:100290002d6c70f090c0056c8bec4cec80f4162c3f +:1002a0004a37ec3481f200b249e4906770f048d8e4 +:1002b00070f0084ca0a4086eceeda0c490f040d819 +:1002c00080a23c6d11ecacec3474a0f31761006caf +:1002d000a4a265a211ed11eb6033adeba6a241f231 +:1002e0000cb611eda035a0356ded67a2306700f6b4 +:1002f0006033adebcdeb60a370f0144935e460c51d +:10030000a4a265a211ed11eb6033adeba6a2696565 +:1003100011eda035a0356ded67a2c4a200f66033e3 +:10032000adeb014bff6d2367ace924c26231d167ad +:10033000acee0e65c5a2c867c5c22236acee26a2d9 +:1003400000f66233c6c2c7a2014c67c2086b8eebcf +:10035000bf2bc1f11cb2cb678267ec31c1f108b28f +:10036000ccec25e250f0489881d970f07ec090f036 +:1003700074d850f064c030f070d870f064d830f0a9 +:100380007cd8c0a281a211ee11ec803481692be9e6 +:10039000cdec2cece467acefc0a2e0c2c1a2823489 +:1003a000d06781c250f0084e40a6086feeea40c602 +:1003b00050f0489880a211ec2c6581a2e96711ecfd +:1003c0008034edec2cece467acef2f65e0a2e9673c +:1003d000e0c28234e1a281c240a6086c8eea40c627 +:1003e00070f04898c0a281a211ee11ec8034cdecdf +:1003f0002cec8cedc0a28234a0c2a1a281c221f15a +:1004000014b264c2006c64ca21f10cb384c3819b32 +:1004100021f108b5acec81db70f074a0606c11ebdd +:100420008ceb60f2102bab6761a511eb0c5b60f2fb +:100430000a6013f5006c80348034683340f40c4c4f +:1004400091e3809c806b00ec6beb00659505009d53 +:100450005b06009d0709009d5b06009d0709009d46 +:100460007d04009d8704009dfd08009d8d05009d75 +:100470000105009db908009ddf08009d84a28deb59 +:1004800064c2086a801070f0d4a0806f11eeeeeea6 +:1004900020f2192e406b6beb81f018b264c27067ca +:1004a00070f0144ba3a311ed02750a60036caeec5f +:1004b00014240175236181f008b360da126b1a10fd +:1004c00062a381f000b411eb68336de4609b60dae5 +:1004d00082a388c263a369c21612a2a311ed035db1 +:1004e0000b6062a361f000b411eb68336de4609bb4 +:1004f00060da60a364ca071284c20512c4c2031280 +:1005000084a200698deb64c201f01cb321f01cb21f +:10051000836720dab167406e1a18ed0a08d3c0f776 +:1005200018b2809a026dadec80da906770f01c4cc6 +:1005300021c4906750f0104c21c470f03cc050f0c2 +:1005400030c090f030c0809a036dabedacec80da37 +:10055000e0f71cb250f048d8506770f0144a42a23d +:10056000089311ea90f060d870f068d890f044c019 +:10057000022a106a0810016cb06790f0044d1a1836 +:10058000850ac467206a50f040d8bd11706790f0aa +:10059000044b9b117067006a30f0144b30f054c06c +:1005a00041c370f074981f6a4ceb806c017380f744 +:1005b00004b28bec1760027319603c2b64a26dece3 +:1005c00084c230f054a0016b11ea6dea30f054c0df +:1005d00090f0489801722e6130f054a0026b11ea3d +:1005e0006dea261064a26dec84c2241064a28deb27 +:1005f00064c2506770f0144a64a211eb8ceb082bb4 +:10060000419a0f6b6cea7067483250f01c4b071030 +:10061000419a0f6b6cea7067483250f0084b69e200 +:10062000609a7c6a60a34bea6cea84720361016a97 +:1006300030f054c0e0f61cb284a2806b6beb8ceb04 +:1006400011eb60f10023706730f0144b60da016b3e +:100650008deb64c2026b68c25611906770f0144c47 +:1006600042a411ea0172146170f054a01f6b11eae8 +:100670006cea0e2aa0f61cb5c4a5806b6bebcdeb23 +:1006800064c561a411eb03730161016a90f048d85d +:10069000506770f0144a62a211eb20f1142b70f035 +:1006a00074a01f6c11eb8ceb027320f10c6184a21f +:1006b0000f6b11ec6cec20f10624819a6cec11ecc0 +:1006c000025420f1006050f08098207400f11b610a +:1006d00060f600b4c4a4806dabedadeec4c484a2da +:1006e00011ecacec112c819ab0676cec11ec8834f5 +:1006f00050f01c4db1e4809c04d4419a6cea7067c0 +:1007000011ea50f0104b1010819ab0676cec11ecac +:10071000883450f0084db1e4809c04d4419a6ceace +:10072000706711ea70f01c4b69e220a2016a2ceaa2 +:10073000062add6770a6f74a6cea50c60510fd6709 +:1007400070a7086a6dea50c7506770f0144a84a217 +:10075000806b8ceb0494082b419a0f6b6cea7067ea +:10076000483250f01c4b0710419a0f6b6cea7067cf +:10077000483250f0084b69e280da506770f0144a52 +:1007800061a211eb0373806b6beb2561049480a471 +:100790006cec162484a211ec6cec072c419a0f6bc4 +:1007a0006cea706750f0104b0610419a0f6b6ceac0 +:1007b000706770f01c4b6de280a3026a8dea40c343 +:1007c000049341a380a340328dea846c8dea40c338 +:1007d000423241c398109d6750a4086daeea50c4e0 +:1007e000049540a54ceb826741a50f234032816bf5 +:1007f0008dea6beb6cea406b6dea40c5423241c555 +:10080000056c1a18850a046e071040328dea406b99 +:100810006dea40c5423241c5dd6750a6086feeea79 +:1008200050c6026a4ce90429049340a35e322a228e +:10083000506770f0144a84a2806b8ceb036c8becd5 +:10084000072b419a0f6b6cea706750f0104b061043 +:10085000419a0f6b6cea706770f01c4b69e260a202 +:10086000046e6cec80c20495056c41a560a5403215 +:100870006deac56b6beb6cea40c542321a18850a0b +:1008800041c50a1041a380a340328deac56c8becb0 +:100890008cea40c3423241c3506770f0144a419a17 +:1008a0000f6b6cea5032a0f40cb34de3409b036c29 +:1008b0008bec8cea40db2710706770f0144b64a35c +:1008c000906711eb90f0104c8de360da64a2016c3c +:1008d0008deb88c2804cff4c8deb64c2141084a257 +:1008e0008deb64c2506770f0144aa4a2906762a2b4 +:1008f00011ed90f0104c89e560c20510006d026c9e +:100900001a18850ac567006d036c1a18850ac56731 +:10091000f9b3409b216c8bec8cea40db00f414b300 +:10092000806a64a34bea4ceb452b00f40cb384a320 +:100930004cec446711ea0f22026a50f044c030f0d8 +:100940005c98032a1a1855080065006a50f058d8b8 +:1009500050f054d8b81170f04898f5b162a2086b05 +:1009600062c2a3a2f44baceb63c2706770f0144b8d +:100970002cebff6ea367ccede4a2a4c26235e56761 +:10098000ccefa23525a2ccede5c2c6a200f66233bb +:10099000a6c2a7a267c260a2746b6beb60c261a221 +:1009a00081c250f0489860a27c6b6beb60c261a280 +:1009b00081c2891170f094a011ec4cec0f24016af3 +:1009c00050f044c030f05098032a1a1855080065ba +:1009d000006a50f058d850f054d8c110026a50f054 +:1009e00044c070f04898ff6f62a2086b62c2c3a255 +:1009f000f44bcceb63c2ceb6706770f0144bcceb0b +:100a0000c367ecee24a2c4c262362667ece929650e +:100a1000c23625a2296725c2ecee00f66233e6a2b3 +:100a2000c6c2c7a267c260a27c6b6beb60c261a248 +:100a300081c250f098d850f094d8911050f084a012 +:100a4000027480f01461609abbb2819a783380f5a9 +:100a50006233823411eb31ec63ec0260646711ebba +:100a6000a19a73e4b5b631ec8034cced8deda1da0a +:100a7000006a0a10d06730f0144ed9e2a09cc0a6dc +:100a8000014ac0c5014da0dc826711ec63ecaab439 +:100a9000f161419c046b4232e26731efa4b570f022 +:100aa00048986beb2d2782a2086c82c283a28ceb44 +:100ab00063c2706730f0144baceb8367ff6dacec36 +:100ac000c4a284c26234c467acee8234e5a2acec4a +:100ad000c5c2a6a200f6623386c287a267c290f0a2 +:100ae0006098406c60a311eb8ceb032b80a2386cf8 +:100af000651060a2786b6beb60c261a2006b611045 +:100b0000c2a2086ec2c2c3a2cceb63c2706770f00f +:100b1000144bacebff6ea367cced24a2a4c26235ec +:100b20002567cce92965a23525a2296725c2cced28 +:100b300000f66233c6a2a6c2a7a267c260a27c6bff +:100b40006beb60c261a2e1c2429c67a440326dead5 +:100b50000122c0ea78b284a27f6b8ceb64c290f071 +:100b60005498a0f0102a1a184d070065ac1070f0c8 +:100b7000449850f064c0272a70f04898ff6e82a213 +:100b8000086c82c2a3a2f44cacec83c268b5906737 +:100b900070f0144caceca467ccede4a2a4c2823596 +:100ba000e567ccefa23525a2ccede5c2c6a200f6e2 +:100bb0008234a6c2a7a287c280a2746c8bec80c2ca +:100bc00081a261c2801070f064d87d1008747b61ce +:100bd00050f04898086c20a2016a11e93a314ce9ba +:100be000506750f0084a60a28eeb60c250f0409807 +:100bf00008720e61506770f0144a62a256b211eb8f +:100c000060da409a0222106a0110046a50f040d85b +:100c100050f044a0016daeea3c2a45b5906730f033 +:100c2000144cacec50f06898ff6ea467ccede4a3d4 +:100c3000a4c38235e567ccef2f65a235e5a3e9674c +:100c4000e5c3cced00f68234c6a3a6c3a7a387c331 +:100c50001a18040907d270f09ea0026b6eec07927e +:100c600050f06898072c40a37c6a4bea40c341a32c +:100c700081c32910072940a3386a4bea40c341a326 +:100c800021c3211080a3786c8bec80c381a341c366 +:100c90001a1029b264a27e330b2367a2429a403213 +:100ca0006dea0122c0ea24b284a27f6b8ceb64c29d +:100cb000006a50f044c00710b067726c90f00c4da1 +:100cc0001a18850a006e0692014a11ea047206d2c9 +:100cd000bff20c611a18d10a696c7764a0e800654c +:100ce000505288bfe05288bf105288bf305288bf30 +:100cf000705088bf505288bf005288bf105288bfc2 +:100d0000405088bf505088bf405088bf805088bf37 +:100d1000005288bf005388bfffffff7f205288bf6b +:100d2000405288bf000200a0000000a0ffffff1f8c +:100d3000400200a0500200a0ff0000ffec1e009d3a +:100d4000ac1f009db01f009d105388bf100200a073 +:080d5000005388bf605288bf08 +:020000040000fa +:020000041d00dd +:100d5800301088bf601088bf01000000301088bfc5 +:100d6800601088bf02000000301088bf601088bf84 +:100d780004000000301088bf601088bf0800000021 +:100d8800301088bf601088bf80000000301088bf16 +:100d9800601088bf00080000301088bf601088bf4e +:100da80000800000301088bf601088bf0000080075 +:100db800301088bf601088bf10000000301088bf56 +:100dc800601088bf00010000301088bf601088bf25 +:100dd80000100000301088bf601088bf00000100bc +:100de800301088bf601088bf00001000301088bf26 +:100df800601088bf20000000301088bf601088bfd6 +:100e080000020000301088bf601088bf002000007a +:100e1800301088bf601088bf00000200301088bf03 +:100e2800601088bf00002000401088bf701088bf85 +:100e380000000020401088bf701088bf00000040ec +:100e4800401088bf701088bf00000080501088bf15 +:100e5800801088bf01000000501088bf801088bf34 +:100e680002000000301088bf601088bf40000000fa +:100e7800301088bf601088bf00040000301088bfa1 +:100e8800601088bf00400000301088bf601088bf25 +:100e980000000400301088bf601088bf00004000c8 +:100ea800401088bf701088bf0100000000000000db +:100eb8000000000000000000401088bf701088bfcc +:100ec800e0000000301088bf601088bf0000001ce0 +:100ed800401088bf701088bf0007000000000000a5 +:100ee8000000000000000000401088bf701088bf9c +:100ef80020000000301088bf601088bf0000000488 +:100f0800401088bf701088bf00010000000000007a +:100f18000000000000000000401088bf701088bf6b +:100f280080000000301088bf601088bf00000010eb +:100f3800401088bf701088bf000400000000000047 +:100f48000000000000000000401088bf701088bf3b +:100f580040000000301088bf601088bf0000000803 +:100f6800401088bf701088bf00020000301088bf92 +:100f7800601088bf000000e00000000000000000d2 +:100f880000000000301088bf601088bf0000001cff +:100f9800401088bf701088bfe0000000401088bf74 +:100fa800701088bf00070000301088bf601088bf2d +:100fb8000000002000000000000000000000000009 +:100fc800301088bf601088bf00000004401088bf40 +:100fd800701088bf20000000401088bf701088bfc4 +:100fe80000010000301088bf601088bf000000407a +:100ff800000000000000000000000000301088bf62 +:10100800601088bf00000008401088bf701088bfbb +:1010180040000000401088bf701088bf0002000028 +:10102800301088bf601088bf0000008000000000fa +:101038000000000000000000301088bf601088bf6a +:1010480000000010401088bf701088bf80000000aa +:10105800401088bf701088bf00040000301088bf9f +:10106800601088bf0000001c401088bf701088bf47 +:1010780000070000401088bf701088bfe000000023 +:10108800501088bf801088bf38000000501088bffb +:10109800801088bf000e0000501088bf801088bfe5 +:1010a800c0010000301088bf601088bf0000000435 +:1010b800401088bf701088bf00010000401088bf32 +:1010c800701088bf20000000501088bf801088bfb3 +:1010d80008000000501088bf801088bf0002000080 +:1010e800501088bf801088bf40000000301088bfb3 +:1010f800601088bf00000008401088bf701088bfcb +:1011080000020000401088bf701088bf4000000037 +:10111800501088bf801088bf10000000501088bf92 +:10112800801088bf00040000501088bf801088bf5e +:1011380080000000301088bf601088bf00000010d9 +:10114800401088bf701088bf00040000401088bf9e +:10115800701088bf80000000501088bf801088bfc2 +:1011680020000000501088bf801088bf00080000d1 +:10117800501088bf801088bf00010000401088bf51 +:10118800701088bf02000000401088bf701088bf30 +:1011980004000000501088bf801088bf04000000c1 +:1011a800401088bf701088bf08000000401088bf3a +:1011b800701088bf10000000401088bf701088bff2 +:1011c80000400000401088bf701088bf0000000178 +:1011d800401088bf701088bf00800000401088bf92 +:1011e800701088bf00000100401088bf701088bfd1 +:1011f80000000200401088bf701088bf0000040083 +:10120800401088bf701088bf000008000000000070 +:1012180000000000000000000000000000000000c6 +:1012280000000000000000000000000000000000b6 +:10123800000000000000000000000000401088bf0f +:10124800701088bf00000002401088bf701088bf6f +:101258000000000400000000000000000000000082 +:10126800000000000000000000000000901088bf8f +:101278000000000002000000901088bf0800000075 +:101288000a000000901088bf100000001200000043 +:10129800901088bf180000001a000000a01088bf36 +:1012a800180000001a000000b01088bf18000000e5 +:1012b8001a000000c01088bf180000001a000000c3 +:1012c800d01088bf180000001a000000a01088bfc6 +:1012d8000000000002000000b01088bf00000000fd +:1012e80002000000c01088bf0000000002000000db +:1012f800d01088bf0000000002000000e01088bf86 +:101308000000000002000000a01088bf08000000d4 +:101318000a000000b01088bf080000000a000000a2 +:10132800c01088bf080000000a000000d01088bf65 +:10133800080000000a000000e01088bf0800000054 +:101348000a000000a01088bf100000001200000072 +:10135800b01088bf1000000012000000c01088bf45 +:101368001000000012000000d01088bf100000001c +:1013780012000000e01088bf1000000012000000fa +:10138800000000000000000000000000001188bffd +:10139800180000001a000000f01088bf00000000cc +:1013a80002000000101188bf0000000002000000c9 +:1013b800f01088bf0000000002000000101188bf74 +:1013c8000000000002000000001188bf18000000a3 +:1013d8001a000000501188bf080000000a00000031 +:1013e800501188bf180000001a000000501188bf73 +:1013f8001000000012000000f01088bf0800000074 +:101408000a000000000000000000000000000000ca +:10141800f01088bf0000000002000000001188bf23 +:10142800180000001a000000101188bf000000001a +:1014380002000000f01088bf100000001200000039 +:10144800f01088bf180000001a000000001188bfc3 +:101458000000000002000000001188bf0800000022 +:101468000a000000001188bf1000000012000000f0 +:10147800101188bf1000000012000000101188bf72 +:10148800180000001a000000201188bf00000000aa +:1014980002000000201188bf080000000a000000b8 +:1014a800201188bf1000000012000000201188bf22 +:1014b800180000001a0000000000000000000000f2 +:1014c8000000000000000000000000000000000014 +:1014d8000000000000000000000000000000000004 +:1014e8000000000000000000401188bf000000005c +:1014f80002000000401188bf080000000a00000038 +:10150800401188bf10000000120000000000000019 +:1015180000000000000000000000000000000000c3 +:0415280000000000bf +:020000040000fa +:020000041d00dd +:10152c0051b352b2a16460daff6a51b340db51b3dc +:10153c0040db006a50b340db50b340db50b340dbc0 +:10154c009f6a50b340db50b340db50b2609a0f6dd2 +:10155c00aceb60da609a016d60da4db3409b4db72d +:10156c00adea40db4cb2ecea00f642354bb342320a +:10157c00a0db42354ab3a0db4ab39c6740db006d6d +:10158c00ac3245b6014d59e6006b006a087540de79 +:10159c0061def66144b2609a026dadeb60dab86759 +:1015ac0042b3a0db609adf4daceb60da609a1e4d63 +:1015bc00aceb60da3eb2a4a23eb2c4a2419a423273 +:1015cc00626731eb0510006d2ab200dac5676567fa +:1015dc0039b2409a08680ceaf62a35b0a4c035b581 +:1015ec00c4c536b06036619d0cebcdeb61dd016b93 +:1015fc0050f074dc50f078dc646750f0084b41db41 +:10160c00646750f01c4b41db646770f01c4b41c3aa +:10161c00646750f0104b41c329b350f068dc0d6d7a +:10162c0015b330f050dc30f05cdca0db646770f09c +:10163c00144b19b5eceb61dd70f04cdc50f05cdc5c +:10164c0070f05cc450f050c4609d1eb6cceb1eb65e +:10165c00cdeb60dd846b60cd90f044c450f040dc89 +:10166c002164a0e800000002741088bf205288bfdb +:10167c00005288bf005388bf105388bfe05288bf08 +:10168c00305288bf105288bf705088bf805088bfbe +:10169c00ffffff1f000200a0d05288bfc05288bfbe +:1016ac00705288bf505288bf605288bf400200a061 +:1016bc00500200a0005288bfff0000ff100200a0e3 +:0816cc00ffff00fc0000080014 +:020000040000fa +:020000041d00dd +:1016d400e3641a1cfb0a0065016c1a1cf60a8bec05 +:1016e4001a1cfb0a006541b3026c80db1a1cc40a95 +:1016f400826710f0006d3eb2a0da0cf0006b3db2d0 +:1017040060da55f0104b3cb260da006a3bb340db60 +:101714003bb340db3bb340db38f01f6c3ab380dbb8 +:10172400d9f7014c39b380db39b340db39b340db43 +:1017340039b340db20f21f6c38b380db38b340dbb5 +:1017440038b340db38b340db38b340db38b340db7d +:1017540038b340db38b3809b816ecbeeccec80dbbe +:1017640036b7c09f10f0016c8bec8ceec0df34b741 +:10177400c09f08688ceec0dfc09b416febefeceebe +:10178400c0dbc09b046fedeec0db2eb7c09f0dee37 +:10179400c0dfc09b216febefeceec0dbc09b106f92 +:1017a400edeec0dbc09be74feceec0db64f0106ee7 +:1017b40025b3c0db25b340db286e25b3c0db25b3de +:1017c400a0db206e24b3c0db24b340db14f00e6b2b +:1017d40023b260da23b2609aaceb0323609a8cebf9 +:1017e40060da6364a0e80065004088bf606088bf79 +:1017f400a06088bfe06088bf206188bf606188bf47 +:10180400a06188bf406088bf806088bfc06088bf17 +:10181400006188bf406188bf806188bf706088bff5 +:10182400b06088bff06088bf306188bf706188bfd6 +:10183400b06188bf206188bf406088bf606088bf96 +:10184400606188bf000a80bf100a80bf200a80bf81 +:10185400080a80bf203080bf103080bf003080bfb6 +:04186400003080bf11 +:020000040000fa +:020000041d00dd +:10186800f4643c6730f044a10a2a10f0509904222d +:1018780060a2806a6cea032a016a30f044c130f041 +:1018880044a1017280f0016110f05499042260a211 +:10189800806a6cea7a2a3fb4ad441a18460a3f6e49 +:1018a8003db2a19a3db340a2aeeb015b016c3cb0e6 +:1018b80078678bece17240c084c02560e25a0e6004 +:1018c80061721b60625a0460606b6eea10223e10ff +:1018d80062723260e06c8eea12223810e372256080 +:1018e800e35a1761e4722860e57219602f102db36e +:1018f80048c0016a61d849c02b10106a081044c05a +:10190800016a45c0251024231a18f009006544c04f +:101918001f101e2324b41a18ef070065f8171823a0 +:101928001a182c0a006541d813101bb2c29a1a184b +:101938009909006c43d80c10006a1a1cfb0a40c0b5 +:101948001a185c0900651a1844090065006a40c045 +:10195800006a11b440c440a00d2214b4a3441a185c +:10196800460a3f6e016ca4670db61a182308406f2b +:1019780010f054d9006a016c006d07b630f044c10c +:101988001a182308406f10f050d97464a0e8006555 +:10199800600200a05c0200a0341221439c0200a057 +:0c19a80068852423640200a09d0200a0ba +:020000040000fa +:020000041d00dd +:1019b4005c6730f0609af46490f01aa2014b30f046 +:1019c40060da2b2849b34ab7a09f809b016e82340a +:1019d4009634ccec80348c342c6501f00169809f02 +:1019e4002be92cec29672dec80df809b04f0016946 +:1019f40082349a34ccec80349437809b2be92cece1 +:101a0400edeca23580dbae35cced809ba035f7f74d +:101a14001e4eb835ccecadec80db30f0609ae1f7cb +:101a24001f6c8ceb8aeb5e6110f07c9a014b10f01a +:101a34007cda15202fb4806b10f0dc9aff4b086d14 +:101a4400d9e3acee006d0126ff6da0c4afed80f0cc +:101a5400a0c4ff4cf12b1a180f0a0065431024b2de +:101a6400a09a809a016b9a346cec9c36816f809ab0 +:101a7400ebefececcdec80da809a404f92346cecd6 +:101a84009836809abe35ececcdec80da809a304ff3 +:101a940086346cec9036809a6cedececcdec80da0c +:101aa400809a0e4f8a346cec8436809aac35ecec18 +:101ab400cdec80da809afe4f96346cec8836809aae +:101ac400ececcdec80da809ae44f8e346cec9436f6 +:101ad400809aececcdec80da609a096c8bec8ceba0 +:101ae400adeb60da7464a0e8a06088bfe06088bff2 +:041af400db0400a06f +:020000040000fa +:020000041d00dd +:101af800f5641a18b505006547b3409bff6c014ca7 +:101b08008cea0522409b00f4006b6cea0d2a43b274 +:101b1800609a43b26eea08221a18000a0065017238 +:101b280003611a18e30a0065016b6beb3bb260dadc +:101b3800016a7c6790f05ac3146a04d2049304695a +:101b4800ff4b38b220da04d3086a37b340db37b02a +:101b58004098086b6dea53f4006c1a18bd0a40d817 +:101b68002db3409b2cea2d224098096b6beb6cea55 +:101b780053f4006c1a18bd0a40d827b3409b2ceace +:101b8800202a29b220da27b3086a40db409853f4a8 +:101b9800006c2dea1a18bd0a40d81fb3409b086b89 +:101ba8006cea0f224098f34b6cea53f4006c1a1855 +:101bb800bd0a40d818b3409b086b6cea022a04920d +:101bc800bd2a1ab2609a056c8bec8ceb60da609acd +:101bd800fc4c8ceb60da0c6b13b260da04930423d0 +:101be800006a7c6790f05ac37c6790f05aa3082279 +:101bf800036c606d1a188708046e1a18de080065f1 +:101c08001a183a0a00651a186d0600651a18520a59 +:101c18000065f917d06088bf30f480bf1a47936118 +:0c1c2800c86088bfc46088bfe06088bf4f +:020000040000fa +:020000041d00dd +:101c3400e8ffbd271000b0af1400bfaffb0a400f90 +:101c44002180800088bf033c0030658c0003a57ca4 +:101c54000800a014004004360010062488bf043c89 +:101c6400083086ac0030648c00088430fdff80149a +:101c74000040043681bf103c00f404ae0048044028 +:101c8400004806402330c400f000c62cfcffc014fa +:101c940081bf063c99aa043c5566842410f4c4ac64 +:101ca4006655043caa99843410f4c4ac008006340c +:101cb40081bf043c08f486ac00f4048e00808430b8 +:101cc400fdff80140040062481bf043c04f486ac6c +:101cd4000d00a010001004240030648c0003847ce8 +:101ce4000b0080140010052488bf043c083085ac28 +:101cf4000030648c00088430fdff80140000000074 +:101d04004507400b0000000088bf033c043064ac6e +:101d1400c40a400f2120400000f4028e1400bf8f3b +:101d2400003042301000b08f0800e0031800bd27d7 +:020000040000fa +:020000041d00dd +:101d34007c6750f0549bb164682a016f50f0f4db67 +:101d440050f0589b622a50f0c4a3026cceec50f0c1 +:101d5400f8db102c50f0489b62a282c2a3a2046b51 +:101d64006bebaceb63c260a2386b6beb60c261a23d +:101d740081c24b10016a4eee482e90f0409b0469dc +:101d840082a2086c82c24c6583a22be92cec83c22c +:101d940020b5836770f0144cacecff68a4670cedbd +:101da4000d652965a4a22867823524c28d6525a204 +:101db4000ced2c67a5c2ad6522350ced00f682341e +:101dc40006a2a6c207a287c200a27c680be800c2d2 +:101dd40001a2c1c270f0489b70f0e4db62a26a67a2 +:101de40062c263a2e967eceb63c2286764a224c2ff +:101df40065a26d6765c266a2a6c267a287c260a219 +:101e0400806b6beb60c261a2c1c23164a0e8006563 +:041e1400ffffff1fae +:020000040000fa +:020000041d00dd +:101e18005c6770f074a21f6c11eb8ceb01735b6153 +:101e2800626770f0144b84a311ec552c81a311ec5c +:101e38000674186163a311eb2173036022730a60af +:101e4800111090f064a201730d6124b424b380dbf7 +:101e5800096c041023b422b380db1c6c84cb406c67 +:101e68008bec84c370f074a2606c11eb8ceb207364 +:101e78003261826770f0144c61a411eb03731a602d +:101e8800045b036002730660a0e80a730b600b73bf +:101e98001b60a0e812b390f0194a40db016a44cbfa +:101ea8003f6a0f10806d0eb3abeda4c363a490f02e +:101eb80079c2a0e80ab390f0184a40db016a44cb23 +:101ec8007f6a4bea20e844c3806d05b3abeda4c339 +:101ed80062a490f078c2a0e8121f009d400200a002 +:041ee800901f009daa +:020000040000fa +:020000041d00dd +:101eec001201000200000008d8043c0002000102ac +:101efc000001000009022900010100c032090400a0 +:101f0c00000203000000092111010001221c00073e +:101f1c00058103400001070501034000010000009a +:101f2c0004030904200353007000610072006b006d +:101f3c00790053006f006600740020006c00740080 +:101f4c0064002e003e0355006e00690053006f00c4 +:101f5c006c00640065007200200053006f006c0080 +:101f6c0064006500720069006e0067002000430089 +:101f7c006f006e00740072006f006c006c006500e6 +:101f8c00720000000600ff0901a10119012940158a +:101f9c00012540750895408100190129409100c028 +:101fac00001f009d2c1f009d301f009d501f009d89 +:020000040000fa +:020000041d00dd +:101fbc00e744f664609c02ac014f4d1029b100f26d +:101fcc0000586de91461e0f11f6a6cea102aa767ea +:101fdc00916706d31a185d0a07d7069307971ff661 +:101fec00004800f2004b31e800f2004f33101eb2f3 +:101ffc00d06723ea11e106601cb2a09a1cb249e535 +:10200c0083ea07601bb223ea006a1c601ab583edf1 +:10201c0019611ab283ea046019b223ea006a1260e9 +:10202c00016a4bea055804d20161046ea7670404e7 +:10203c0006d31a18dd0a07d704951a18720a916785 +:10204c00079706930458044b044f0361fc4831e88e +:10205c0001100068022ab228006a7664a0e80065c4 +:10206c0000000080ff2f009d602088bfffffff9cb9 +:10207c00ff0fc09fff1fc09ff02fc09fff2fc09f5f +:020000040000fa +:020000041d00dd +:10208c0011ec11ef11edb1647c674f6588320425ba +:10209c00036750f008480310036750f01c4849e0f0 +:1020ac00009a006a4d2028b2ff694ceee66744a006 +:1020bc002cefc232e4c0e2672cef0f654232e5a090 +:1020cc00e867e5c02ceae6a000f6c23646c0ea672f +:1020dc0047a02cefc7c042a0e2c0c3a0046a4beae1 +:1020ec00ccea43c0c0a041a011ee11ea4032cdeac7 +:1020fc00406eccea2ceac0a040c041a0006a41c0ae +:10210c00c0a041a011ee11ea4032cdea886ecdeab2 +:10211c004ce9c0a0423220c0c1a0883441c008257f +:10212c0050f0084b91e340a4086b6eea40c40710d2 +:10213c0050f01c4b8de340a3086c8eea40c35067f3 +:08214c003164a0e8ffffff1f52 +:020000040000fa +:020000041d00dd +:10215400f4641c67006a50f0a4a030f050d830f04a +:102164005cd8026a4eed2bb1252d70f0489830f002 +:10217400144862a2086b62c283a2f44b8ceb2ce875 +:1021840063c2ff6c70678cebc4a264c20233c36782 +:102194008cee6233e5a28cebc5c286a200f6023057 +:1021a40066c267a207c260a2386b6beb60c261a211 +:1021b400a1c22c10706770f0144b83ab16b2a4aaa2 +:1021c40031eca3ec026063ab64ca1a18040900651d +:1021d40050f0489830f014482ce8ff6c70678ceb92 +:1021e400a4a264c20233a3678ced6233c5a28ceb54 +:1021f400a5c286a200f6023066c267a207c260a228 +:10220400386b6beb60c261a2006b61c27464a0e8be +:08221400ffffff1f400200a0c4 +:020000040000fa +:020000041d00dd +:10221c002ab3883249e3409a0cf0f6641c4c2567cb +:10222c00006d04d21a18680a05d404930c9410f0ab +:10223c00006a41db4de9943321b261e28298a398a4 +:10224c0006d21a18b50a07d384981a18ad0aa5989d +:10225c00206c2cec11ec06921ab6079301241ab6da +:10226c006de2809b40eea19b18b22cea172200f67f +:10227c0022325e330623406b4ceb13b2082311b2af +:10228c000610206b2ceb11eb0eb201230eb20c944a +:10229c0094330bb46de4869b40eaa79b1a18d10ac1 +:1022ac0005940e9304946632ff4a4cdc489c406ab9 +:1022bc0045dc20dc7664a0e8a02b009dd822009d94 +:0c22cc00b52a009dd52a009d80000080ee +:020000040000fa +:020000041d00dd +:1022d80006000000000000000600000000000000ea +:1022e80006000000000000000600000000000000da +:1022f80006000000000000000600000000000000ca +:1023080006000000000000000600000000000000b9 +:10231800050000004000000005000000000100006a +:102328000500000080000000050000000002000019 +:102338000200000002000000020000000800000087 +:10234800020000000400000002000000000200007b +:102358000000000000400000040000002000000011 +:102368000400000010000000000000000001000050 +:020000040000fa +:020000041d00dd +:10237800f46453f4006c1fb01a18bd0a0065409845 +:10238800816b6beb6cea53f4006c1a18bd0a40d8e9 +:102398004098806b6dea40d817b3409b08f0016cf9 +:1023a80016b18bec8cea40db1a18bd0a916740988d +:1023b800416b6beb6cea40d84098304b6cea916704 +:1023c8001a18bd0a40d8036c0db51a1829091f6ed2 +:1023d8001a18f20a00650bb20bb3006c80da044ad3 +:1023e8006aeafb611a180f0a00657464a0e80065c0 +:1023f800e06088bfa06088bf00093d00542a009da6 +:08240800dc0200a0dc0600a0cc +:020000040000fa +:020000041d00dd +:1024100024b364ab5c67085b086c0c60836770f086 +:102420007ea211ec022b016b031001730361026b9e +:1024300070f07ec21bb564ad046e8fe364cd50f0c6 +:10244000689acbeee2a382c3e3a3eceec3c3626758 +:1024500030f0144b30f06cda64a5016daceb0e2358 +:102460001c1010b3a09b30f0cc9ae0a5ff4ce0c646 +:10247000014d014e30f0ccdaa0db11ecf22ca0e8db +:1024800008b3a09b30f0cc9ae0a5ff4ce0c6014d0c +:10249000014e30f0ccdaa0db11ecf22ca0e80065a4 +:0424a000400200a056 +:020000040000fa +:020000041d00dd +:1024a40019b7883491e7809cb16465674567e09cff +:1024b4002410009c15b12ce80520049c02692ce82a +:1024c40001580610049c08692ce80158186701702b +:1024d400f060e23008690ce90421009d044d08dc39 +:1024e4000c100469096528672ce8042000aa024a34 +:1024f40008dc031000a3014b08dcff4e0146d92879 +:0c2504003164a0e8a02b009d0000010045 +:020000040000fa +:020000041d00dd +:10251000c3641a1cfb0a00650fb2409a016b423279 +:1025200052326cea0a2ae1f71f4b0cb260da0ab2a7 +:10253000409a01f0006b6ceafa2a09b2006b60da8b +:1025400008b360da08b360da08b2016b60da08b287 +:10255000409aff17003088bf083088bf30f280bf34 +:10256000556699aaaa99665518f680bf10f680bfdd +:020000040000fa +:020000041d00dd +:10257000e3641a1cfb0a00650eb302670eb260da50 +:10258000006a0eb340db0eb340db0eb340db0eb48b +:10259000609c016dadeb60dc7c6750f040db1a188d +:1025a000d10a696c1a1cc40a90676364a0e80065cc +:1025b00000000002741088bf505288bf105288bfbc +:0825c000505088bf805088bf15 +:020000040000fa +:020000041d00dd +:1025c800000200a05b00000000000000000000a066 +:1025d8000c000000000000005c0200a08000000069 +:1025e800000000000c0000a008000000000000002f +:1025f800140000a00800000000000000dc0200a099 +:102608000004000000000000000000002222222236 +:020000040000fa +:020000041d00dd +:102618000000043ce8ffbd2700008424030080106c +:102628001400bfaf09f880000000000000008430eb +:102638000000a530be064077000000000000023c04 +:1026480000004224030040100000000009f8400088 +:0c26580000000000f9ff0010000000006e +:020000040000fa +:020000041d00dd +:102664004467a16431ea181060a542307237123011 +:102674000eef0db4e437fde4e0af5032eeea31ea98 +:102684004237f237eeeb0f6feceb643371e460ac7e +:1026940050326eea31ea014dff4e6146e52b21646a +:0826a400a0e80065342a009d46 +:020000040000fa +:020000041d00dd +:1026ac00406088bfffff0000609080bf806088bfe3 +:1026bc000000000000000000c06088bf00000000a7 +:1026cc0000000000006188bf000000000000000056 +:1026dc00406188bf0000000000000000806188bfde +:0826ec000000000000000000e6 +:020000040000fa +:020000041d00dd +:1026f4000000023ce8ffbd27000042240600401011 +:102704001400bfaf0000023c00004224030040104c +:10271400009d023c3f000070009d023c3c27422487 +:10272400030040100000000009f840000000000011 +:08273400cd09400b000000007c +:020000040000fa +:020000041d00dd +:10273c0000606041c000000099aa033c81bf023ccc +:10274c005566632430f240ac30f243ac6655033c22 +:10275c00aa99633430f243ac81bf023c01000324dc +:10276c0018f643ac81bf023c10f6428cd109400be9 +:04277c000000000059 +:020000040000fa +:020000041d00dd +:1027800084336de50eb67033cde3e0a37f6eeceedf +:102790005c67c0c38834032d50f01c4a021050f00f +:1027a000084a91e260dc80a3416a4bea8cea40c3ac +:1027b00088a3406a8dea20e848c30065000200a0b3 +:020000040000fa +:020000041d00dd +:1027c000f4640db000690d101a18a50a906702f0a4 +:1027d0000048062209b41a18a50a00657464a0e826 +:1027e000014907b2409a1af0004a4232523243e994 +:1027f000eb61f0170030009d0010c09f602088bf83 +:020000040000fa +:020000041d00dd +:10280000e3640bb0c0980bb5c0f4126cf9f71c4e22 +:102810001a1899090065809807b363646de407b4da +:102820008deb609b6eea015a20e85867602088bff4 +:0c283000003000bdfcffff9c00000020f9 +:020000040000fa +:020000041d00dd +:10283c00e3640db04098406b6dea40d84098af4bc4 +:10284c006cea036c09b500f4006e1a18290940d81b +:10285c001a18f20a00654098106b6dea40d8636450 +:0c286c00a0e80065e06088bfdc0200a06e +:020000040000fa +:020000041d00dd +:10287800f464256711e9086a04672cea11e8042260 +:1028880090671a18e009006d046a2cea0422906720 +:102898001a18e009016d103003b241e020c07464d9 +:0828a800a0e80065005388bfa1 +:020000040000fa +:020000041d00dd +:1028b000f4640bb1c0990bb5c0f4126cf9f71c4e5f +:1028c0001a18990900650267809907b2b0671a184b +:1028d000720a51e450677464a0e80065602088bf04 +:0828e000003000bdfcffff9c6d +:020000040000fa +:020000041d00dd +:1028e800e364016a1c6730f048d81a18cb0a0065ff +:1028f800006a07b640c6016c006d30f044c01a1873 +:102908002308406f10f050d86364a0e85c0200a070 +:020000040000fa +:020000041d00dd +:10291800446743ed856762670b60d5e5a3ea086005 +:10292800cde2ff4d80a5ff4bff4e80c3fa2ea0e8f5 +:102938000626a0a4ff4ea0c3014c014bf917a0e83e +:020000040000fa +:020000041d00dd +:10294800c3641a18000000655c6750f0409a205a6a +:10295800086106b2409a026b6cea032a1a181a0632 +:0c29680000654364a0e80065805088bf53 +:020000040000fa +:020000041d00dd +:1029740008b209b34cecc364acea80db07b340dbb8 +:1029840008f0036c1a1c0d0700654364a0e8006599 +:0c299400ffffff1f20f480bf40f480bf55 +:020000040000fa +:020000041d00dd +:1029a00009b208250c6b78ec12ec89e2619a429a24 +:1029b00020e842db0c6b78ec12ec89e2619a429ad7 +:0829c00020e841db580d009de9 +:020000040000fa +:020000041d00dd +:1029c80007b208b38cea40db07b2c36408f0016cb5 +:1029d8001a1c0d07a0da4364a0e80065ffffff1f7b +:0829e80020f480bf30f480bf31 +:020000040000fa +:020000041d00dd +:1029f000c364016c1a181e0a1d6d016c006d05b6ca +:102a00001a182308406f7c67436410f050dba0e87d +:042a10005c0200a0c4 +:020000040000fa +:020000041d00dd +:102a14000174c36403600374056007101a187c0a08 +:102a2400006503101a1886070065436420e8016aec +:020000040000fa +:020000041d00dd +:102a340000002110422063308440a550c660e77036 +:102a4400088129914aa16bb18cc1add1cee1eff1de +:102a5400aed5f0a83fd300408d10a0c0da1281ff9c +:102a6400d922db40a4a6af200021007f220007006a +:020000040000fa +:020000041d00dd +:102a740007b2883491e2409c01f0006b449a6ceafe +:102a8400015a5867016b20e86eea0065a02b009d8f +:020000040000fa +:020000041d00dd +:102a940006b2c3648cea06b308f0046c1a1c0d0772 +:102aa40040db4364a0e80065ffffff1f20f480bf04 +:020000040000fa +:020000041d00dd +:102ab4000c6a58ec06b312ea49e3609aa2db629a04 +:102ac4000323419a4ceda2dba0e80065ac26009def +:020000040000fa +:020000041d00dd +:102ad4000c6a58ec06b312ea49e3609aa1db629ae5 +:102ae4000323419a4ceda2dba0e80065ac26009dcf +:020000040000fa +:020000041d00dd +:102af400f4641a1cf90a046722671a1cf90a0065af +:0c2b04002be203eafa617464a0e80065ab +:020000040000fa +:020000041d00dd +:102b10000100843003008010000000000800e00382 +:0c2b2000206060410800e003006060419c +:020000040000fa +:020000041d00dd +:102b2c005c67006bc36410f070da10f074da1a187a +:082b3c004b0500654364a0e8ad +:020000040000fa +:020000041d00dd +:102b44000c6a58ec04b312ea49e3609a429a20e80a +:082b540041db0065580d009df6 +:020000040000fa +:020000041d00dd +:102b5c0000601a40bfff1b3cffff7b3724d05b0398 +:082b6c0000609a4018000042cd +:020000040000fa +:020000041d00dd +:102b740044676467041080a5014d80c3014bff4e78 +:082b84008146f92ca0e8006570 +:020000040000fa +:020000041d00dd +:102b8c0004b2c36406f0004ac0ea4364a0e80065de +:042b9c000000009d98 +:020000040000fa +:020000041d00dd +:102ba0000000000000000000005a80bf005880bff5 +:042bb000005c80bf86 +:020000040000fa +:020000041d00dd +:102bb400446764670210a0c3014bff4e8146fb2c9f +:042bc400a0e8006520 +:020000040000fa +:020000041d00dd +:102bc800c3641a189d0a036cfc2a4364a0e80065d4 +:020000040000fa +:020000041d00dd +:0c2bd800004880400800e00300588440e2 +:020000040000fa +:020000041d00dd +:082be4000800e0030048024074 +:020000040000fa +:020000041d00dd +:082bec000800e00300606241f3 +:020000040000fa +:020000041d00dd +:042bf400a0e80065f0 +:020000040000fa +:020000041d00dd +:042bf800a0e80065ec +:00000001FF diff --git a/software/front/US_BootLoader.X/dist/PIC32/production/US_BootLoader.X.production.map b/software/front/US_BootLoader.X/dist/PIC32/production/US_BootLoader.X.production.map new file mode 100644 index 0000000..356845e --- /dev/null +++ b/software/front/US_BootLoader.X/dist/PIC32/production/US_BootLoader.X.production.map @@ -0,0 +1,2054 @@ +Archive member included because of file (symbol) + +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral.a(open_core_timer_lib.o) + build/PIC32/production/PIC32MX534F064H.o (OpenCoreTimer) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral.a(read_core_timer_lib.o) + build/PIC32/production/PIC32MX534F064H.o (ReadCoreTimer) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(soft_reset_lib.o) + build/PIC32/production/io.o (SoftReset) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_disable_interrupts_lib.o) + build/PIC32/production/io.o (INTDisableInterrupts) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_restore_interrupts_lib.o) + build/PIC32/production/PIC32MX534F064H.o (INTRestoreInterrupts) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_tbl_lib.o) + build/PIC32/production/usb/usb_device.o (INTClearFlag) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_open_lib.o) + build/PIC32/production/main.o (SpiChnOpen) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_puts_lib.o) + build/PIC32/production/OLED.o (SpiChnPutS) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_is_busy_lib.o) + build/PIC32/production/PIC32MX534F064H.o (SpiChnIsBusy) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_io_tbl_libp.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_open_lib.o) (_SpiIoTbl) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_map_tbl_libp.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_open_lib.o) (_SpiMapTbl) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_erase_page_lib.o) + build/PIC32/production/PIC32MX534F064H.o (NVMErasePage) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_operation_lib.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_erase_page_lib.o) (_NVMOperation) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_write_row_lib.o) + build/PIC32/production/PIC32MX534F064H.o (NVMWriteRow) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_write_word_lib.o) + build/PIC32/production/PIC32MX534F064H.o (NVMWriteWord) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(port_set_pins_digital_in_lib.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_open_lib.o) (PORTSetPinsDigitalIn) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(port_set_pins_digital_out_lib.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_open_lib.o) (PORTSetPinsDigitalOut) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(_ports_tbl_libp.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(port_set_pins_digital_in_lib.o) (PortRegTbl) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-bootstrap-exception-handler.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H/crt0_mips32r2.o (_bootstrap_exception_handler) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-on-reset.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H/crt0_mips32r2.o (_on_reset) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-on-bootstrap.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H/crt0_mips32r2.o (_on_bootstrap) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-nmi-handler.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H/crt0_mips32r2.o (_nmi_handler) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(general-exception.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H/crt0_mips32r2.o (_general_exception_context) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector0.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_0) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector1.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_1) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector2.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_2) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector3.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_3) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector4.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_4) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector5.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_5) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector6.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_6) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector7.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_7) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector8.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_8) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector9.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_9) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector10.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_10) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector11.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_11) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector12.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_12) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector13.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_13) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector14.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_14) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector15.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_15) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector16.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_16) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector17.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_17) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector18.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_18) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector19.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_19) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector20.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_20) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector21.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_21) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector22.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_22) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector23.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_23) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector24.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_24) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector25.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_25) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector26.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_26) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector27.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_27) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector28.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_28) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector29.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_29) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector30.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_30) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector31.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_31) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector32.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_32) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector33.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_33) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector34.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_34) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector35.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_35) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector36.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_36) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector37.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_37) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector38.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_38) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector39.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_39) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector40.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_40) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector41.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_41) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector42.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_42) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector43.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_43) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector44.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_44) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector45.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_45) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector46.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_46) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector47.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_47) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector48.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_48) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector49.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_49) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector50.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_50) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector51.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_51) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector52.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_52) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector53.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_53) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector54.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_54) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector55.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_55) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector56.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_56) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector57.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_57) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector58.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_58) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector59.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_59) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector60.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_60) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector61.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_61) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector62.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_62) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector63.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o (__vector_dispatch_63) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-general-exception-handler.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(general-exception.o) (_general_exception_handler) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(defaultinterrupt.o) + c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector0.o) (_DefaultInterrupt) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memcpy.o) + build/PIC32/production/PIC32MX534F064H.o (memcpy) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memmove.o) + build/PIC32/production/io.o (memmove) +c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memset.o) + build/PIC32/production/usb/usb_device.o (memset) + +Allocating common symbols +Common symbol size file + +USBRxBuffer 0x40 build/PIC32/production/usb/usb_driver.o +pDst 0x4 build/PIC32/production/usb/usb_device.o +USBDeferINDataStagePackets + 0x4 build/PIC32/production/usb/usb_device.o +BDT 0x40 build/PIC32/production/usb/usb_device.o +CtrlTrfData 0x8 build/PIC32/production/usb/usb_device.o +OLEDBUFF 0x400 build/PIC32/production/OLED.o +USBDeferOUTDataStagePackets + 0x4 build/PIC32/production/usb/usb_device.o +USBDeviceState 0x4 build/PIC32/production/usb/usb_device.o +controlTransferState + 0x1 build/PIC32/production/usb/usb_device.o +endpoint_number 0x1 build/PIC32/production/usb/usb_device.o +OLED 0x1 build/PIC32/production/main.o +inPipes 0x10 build/PIC32/production/usb/usb_device.o +pBDTEntryIn 0x8 build/PIC32/production/usb/usb_device.o +ep_data_out 0x2 build/PIC32/production/usb/usb_device.o +USBStatusStageEnabledFlag1 + 0x4 build/PIC32/production/usb/usb_device.o +USBStatusStageEnabledFlag2 + 0x4 build/PIC32/production/usb/usb_device.o +pBDTEntryOut 0x8 build/PIC32/production/usb/usb_device.o +BothEP0OutUOWNsSet 0x4 build/PIC32/production/usb/usb_device.o +pBDTEntryEP0OutNext + 0x4 build/PIC32/production/usb/usb_device.o +USBBusIsSuspended 0x4 build/PIC32/production/usb/usb_device.o +USBTxBuffer 0x40 build/PIC32/production/usb/usb_driver.o +USBStatusStageTimeoutCounter + 0x1 build/PIC32/production/usb/usb_device.o +SetupPkt 0x8 build/PIC32/production/usb/usb_device.o +ep_data_in 0x2 build/PIC32/production/usb/usb_device.o +active_protocol 0x1 build/PIC32/production/usb/usb_function_hid.o +shortPacketStatus 0x1 build/PIC32/production/usb/usb_device.o +pBDTEntryEP0OutCurrent + 0x4 build/PIC32/production/usb/usb_device.o +USBActiveConfiguration + 0x1 build/PIC32/production/usb/usb_device.o +RemoteWakeup 0x4 build/PIC32/production/usb/usb_device.o +USTATcopy 0x1 build/PIC32/production/usb/usb_device.o +USBAlternateInterface + 0x1 build/PIC32/production/usb/usb_device.o +outPipes 0xb build/PIC32/production/usb/usb_device.o +USBDeferStatusStagePacket + 0x4 build/PIC32/production/usb/usb_device.o +idle_rate 0x1 build/PIC32/production/usb/usb_function_hid.o + +Microchip PIC32 Memory-Usage Report + +kseg0 Program-Memory Usage +section address length [bytes] (dec) Description +------- ---------- ------------------------- ----------- +.text.USBDeviceTasks 0x9d000000 0xd58 3416 +.rodata 0x9d000d58 0x7d4 2004 Read-only const +.text.USBDeviceInit 0x9d00152c 0x1a8 424 +.text.mcuInit 0x9d0016d4 0x194 404 +.text.ProcessIO 0x9d001868 0x14c 332 +.text.displayTasts 0x9d0019b4 0x144 324 +.text.main 0x9d001af8 0x13c 316 +.text._NVMOperation 0x9d001c34 0x100 256 +.text.USBCtrlEPAllowSta 0x9d001d34 0xe4 228 +.text.USBCheckHIDReques 0x9d001e18 0xd4 212 +.rodata 0x9d001eec 0xd0 208 Read-only const +.text.mcuWriteFlashReco 0x9d001fbc 0xd0 208 +.text.USBTransferOnePac 0x9d00208c 0xc8 200 +.text.USBCtrlEPAllowDat 0x9d002154 0xc8 200 +.text.SpiChnOpen 0x9d00221c 0xbc 188 +.rodata 0x9d0022d8 0xa0 160 Read-only const +.text.OLEDInit 0x9d002378 0x98 152 +.text.USBCtrlTrfTxServi 0x9d002410 0x94 148 +.text.SpiChnPutS 0x9d0024a4 0x6c 108 +.text.SoftReset 0x9d002510 0x60 96 +.text.mcuDisableUSB 0x9d002570 0x58 88 +.dinit 0x9d0025c8 0x50 80 +.text.main_entry 0x9d002618 0x4c 76 +.text.CalculateCRC 0x9d002664 0x48 72 +.rodata 0x9d0026ac 0x48 72 Read-only const +.text._bootstrap_except 0x9d0026f4 0x48 72 +.text 0x9d00273c 0x44 68 App's exec code +.text.USBConfigureEndpo 0x9d002780 0x40 64 +.text.mcuEraseFlash 0x9d0027c0 0x40 64 +.text.mcuValidAppPresen 0x9d002800 0x3c 60 +.text.OLEDUpdate 0x9d00283c 0x3c 60 +.text.USBEnableEndpoint 0x9d002878 0x38 56 +.text.mcuProgramComplet 0x9d0028b0 0x38 56 +.text.IOInit 0x9d0028e8 0x30 48 +.text.memmove 0x9d002918 0x30 48 +.text.IOTasks 0x9d002948 0x2c 44 +.text.NVMWriteRow 0x9d002974 0x2c 44 +.text.INTEnable 0x9d0029a0 0x28 40 +.text.NVMWriteWord 0x9d0029c8 0x28 40 +.text.USBCBInitEP 0x9d0029f0 0x24 36 +.text.USER_USB_CALLBACK 0x9d002a14 0x20 32 +.rodata 0x9d002a34 0x40 64 Read-only const +.text.SpiChnIsBusy 0x9d002a74 0x20 32 +.text.NVMErasePage 0x9d002a94 0x20 32 +.text.PORTSetPinsDigita 0x9d002ab4 0x20 32 +.text.PORTSetPinsDigita 0x9d002ad4 0x20 32 +.text.DelayTicks 0x9d002af4 0x1c 28 +.text.INTRestoreInterru 0x9d002b10 0x1c 28 +.text.USBDriverInit 0x9d002b2c 0x18 24 +.text.INTClearFlag 0x9d002b44 0x18 24 +.text 0x9d002b5c 0x18 24 App's exec code +.text.memcpy 0x9d002b74 0x18 24 +.text.mcuJumpToApp 0x9d002b8c 0x14 20 +.rodata 0x9d002ba0 0x14 20 Read-only const +.text.memset 0x9d002bb4 0x14 20 +.text.mcuSPIWait 0x9d002bc8 0x10 16 +.text.OpenCoreTimer 0x9d002bd8 0xc 12 +.text.ReadCoreTimer 0x9d002be4 0x8 8 +.text.INTDisableInterru 0x9d002bec 0x8 8 +.text._on_reset 0x9d002bf4 0x4 4 +.text._on_bootstrap 0x9d002bf8 0x4 4 + Total kseg0_program_mem used : 0x2bfc 11260 91.6% of 0x3000 + +kseg0 Boot-Memory Usage +section address length [bytes] (dec) Description +------- ---------- ------------------------- ----------- + Total kseg0_boot_mem used : 0 0 <1% of 0x970 + +Exception-Memory Usage +section address length [bytes] (dec) Description +------- ---------- ------------------------- ----------- + Total exception_mem used : 0 0 + +kseg1 Boot-Memory Usage +section address length [bytes] (dec) Description +------- ---------- ------------------------- ----------- +.reset 0xbfc00000 0x1f0 496 Reset handler +.bev_excpt 0xbfc00380 0x10 16 BEV-Exception + Total kseg1_boot_mem used : 0x200 512 43.8% of 0x490 + -------------------------------------------------------------------------- + Total Program Memory used : 0x2dfc 11772 74.2% of 0x3e00 + -------------------------------------------------------------------------- + + +kseg1 Data-Memory Usage +section address length [bytes] (dec) Description +------- ---------- ------------------------- ----------- +.sbss 0xa0000000 0x8c 140 Small uninit data +.bss 0xa0000200 0x4dc 1244 Uninitialized data + Total kseg1_data_mem used : 0x568 1384 8.4% of 0x4000 + -------------------------------------------------------------------------- + Total Data Memory used : 0x568 1384 8.4% of 0x4000 + -------------------------------------------------------------------------- + + +Dynamic Data-Memory Reservation +section address length [bytes] (dec) Description +------- ---------- ------------------------- ----------- +heap 0xa00006e0 0x10 16 Reserved for heap +stack 0xa0000708 0x38e8 14568 Reserved for stack + + -------------------------------------------------------------------------- + +Discarded input sections + + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H/crt0_mips32r2.o + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H/crt0_mips32r2.o + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H/crt0_mips32r2.o + .gen_handler 0x00000000 0x10 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H/crt0_mips32r2.o + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\debug-exception-return.o + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\debug-exception-return.o + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\debug-exception-return.o + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\debug-exception-return.o + .text 0x00000000 0x0 build/PIC32/production/usb/usb_descriptors.o + .data 0x00000000 0x0 build/PIC32/production/usb/usb_descriptors.o + .bss 0x00000000 0x0 build/PIC32/production/usb/usb_descriptors.o + .reginfo 0x00000000 0x18 build/PIC32/production/usb/usb_descriptors.o + .text 0x00000000 0x0 build/PIC32/production/usb/usb_device.o + .data 0x00000000 0x0 build/PIC32/production/usb/usb_device.o + .bss 0x00000000 0x0 build/PIC32/production/usb/usb_device.o + .reginfo 0x00000000 0x18 build/PIC32/production/usb/usb_device.o + .text.USBStallEndpoint + 0x00000000 0xa4 build/PIC32/production/usb/usb_device.o + .text.USBCancelIO + 0x00000000 0x12c build/PIC32/production/usb/usb_device.o + .text 0x00000000 0x0 build/PIC32/production/usb/usb_driver.o + .data 0x00000000 0x0 build/PIC32/production/usb/usb_driver.o + .bss 0x00000000 0x0 build/PIC32/production/usb/usb_driver.o + .reginfo 0x00000000 0x18 build/PIC32/production/usb/usb_driver.o + .text.USBCBCheckOtherReq + 0x00000000 0xc build/PIC32/production/usb/usb_driver.o + .text.USBCBSendResume + 0x00000000 0x44 build/PIC32/production/usb/usb_driver.o + .text 0x00000000 0x0 build/PIC32/production/usb/usb_function_hid.o + .data 0x00000000 0x0 build/PIC32/production/usb/usb_function_hid.o + .bss 0x00000000 0x0 build/PIC32/production/usb/usb_function_hid.o + .reginfo 0x00000000 0x18 build/PIC32/production/usb/usb_function_hid.o + .text 0x00000000 0x0 build/PIC32/production/main.o + .data 0x00000000 0x0 build/PIC32/production/main.o + .bss 0x00000000 0x0 build/PIC32/production/main.o + .reginfo 0x00000000 0x18 build/PIC32/production/main.o + .text 0x00000000 0x0 build/PIC32/production/io.o + .data 0x00000000 0x0 build/PIC32/production/io.o + .bss 0x00000000 0x0 build/PIC32/production/io.o + .reginfo 0x00000000 0x18 build/PIC32/production/io.o + .text 0x00000000 0x0 build/PIC32/production/PIC32MX534F064H.o + .data 0x00000000 0x0 build/PIC32/production/PIC32MX534F064H.o + .bss 0x00000000 0x0 build/PIC32/production/PIC32MX534F064H.o + .reginfo 0x00000000 0x18 build/PIC32/production/PIC32MX534F064H.o + .text 0x00000000 0x0 build/PIC32/production/crc.o + .data 0x00000000 0x0 build/PIC32/production/crc.o + .bss 0x00000000 0x0 build/PIC32/production/crc.o + .reginfo 0x00000000 0x18 build/PIC32/production/crc.o + .text 0x00000000 0x0 build/PIC32/production/OLED.o + .data 0x00000000 0x0 build/PIC32/production/OLED.o + .bss 0x00000000 0x0 build/PIC32/production/OLED.o + .reginfo 0x00000000 0x18 build/PIC32/production/OLED.o + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\processor.o + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\processor.o + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\processor.o + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\processor.o + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral.a(open_core_timer_lib.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral.a(open_core_timer_lib.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral.a(open_core_timer_lib.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral.a(open_core_timer_lib.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral.a(read_core_timer_lib.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral.a(read_core_timer_lib.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral.a(read_core_timer_lib.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral.a(read_core_timer_lib.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(soft_reset_lib.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(soft_reset_lib.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(soft_reset_lib.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(soft_reset_lib.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_disable_interrupts_lib.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_disable_interrupts_lib.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_disable_interrupts_lib.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_disable_interrupts_lib.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_restore_interrupts_lib.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_restore_interrupts_lib.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_restore_interrupts_lib.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_restore_interrupts_lib.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_tbl_lib.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_tbl_lib.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_tbl_lib.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_tbl_lib.o) + .text.INTSetFlag + 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_tbl_lib.o) + .text.INTGetFlag + 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_tbl_lib.o) + .text.INTGetEnable + 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_tbl_lib.o) + .text.INTSetVectorPriority + 0x00000000 0x20 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_tbl_lib.o) + .text.INTGetVectorPriority + 0x00000000 0x1c c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_tbl_lib.o) + .text.INTSetVectorSubPriority + 0x00000000 0x20 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_tbl_lib.o) + .text.INTGetVectorSubPriority + 0x00000000 0x1c c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_tbl_lib.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_open_lib.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_open_lib.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_open_lib.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_open_lib.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_puts_lib.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_puts_lib.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_puts_lib.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_puts_lib.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_is_busy_lib.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_is_busy_lib.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_is_busy_lib.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_is_busy_lib.o) + .text.SpiChnIsSrEmpty + 0x00000000 0x1c c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_is_busy_lib.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_io_tbl_libp.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_io_tbl_libp.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_io_tbl_libp.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_io_tbl_libp.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_map_tbl_libp.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_map_tbl_libp.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_map_tbl_libp.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_map_tbl_libp.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_erase_page_lib.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_erase_page_lib.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_erase_page_lib.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_erase_page_lib.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_operation_lib.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_operation_lib.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_operation_lib.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_operation_lib.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_write_row_lib.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_write_row_lib.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_write_row_lib.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_write_row_lib.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_write_word_lib.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_write_word_lib.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_write_word_lib.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_write_word_lib.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(port_set_pins_digital_in_lib.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(port_set_pins_digital_in_lib.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(port_set_pins_digital_in_lib.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(port_set_pins_digital_in_lib.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(port_set_pins_digital_out_lib.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(port_set_pins_digital_out_lib.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(port_set_pins_digital_out_lib.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(port_set_pins_digital_out_lib.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(_ports_tbl_libp.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(_ports_tbl_libp.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(_ports_tbl_libp.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(_ports_tbl_libp.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o + .discard 0x00000000 0x100 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\pic32_software_reset.o + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\pic32_software_reset.o + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\pic32_software_reset.o + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-bootstrap-exception-handler.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-bootstrap-exception-handler.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-bootstrap-exception-handler.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-bootstrap-exception-handler.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-on-reset.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-on-reset.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-on-reset.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-on-reset.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-on-bootstrap.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-on-bootstrap.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-on-bootstrap.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-on-bootstrap.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-nmi-handler.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-nmi-handler.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-nmi-handler.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(general-exception.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(general-exception.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(general-exception.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(general-exception.o) + .text.general_exception + 0x00000000 0xdc c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(general-exception.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector0.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector0.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector0.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector0.o) + .vector_0 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector0.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector1.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector1.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector1.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector1.o) + .vector_1 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector1.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector2.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector2.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector2.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector2.o) + .vector_2 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector2.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector3.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector3.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector3.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector3.o) + .vector_3 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector3.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector4.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector4.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector4.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector4.o) + .vector_4 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector4.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector5.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector5.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector5.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector5.o) + .vector_5 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector5.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector6.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector6.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector6.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector6.o) + .vector_6 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector6.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector7.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector7.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector7.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector7.o) + .vector_7 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector7.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector8.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector8.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector8.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector8.o) + .vector_8 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector8.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector9.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector9.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector9.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector9.o) + .vector_9 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector9.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector10.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector10.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector10.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector10.o) + .vector_10 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector10.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector11.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector11.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector11.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector11.o) + .vector_11 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector11.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector12.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector12.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector12.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector12.o) + .vector_12 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector12.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector13.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector13.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector13.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector13.o) + .vector_13 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector13.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector14.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector14.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector14.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector14.o) + .vector_14 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector14.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector15.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector15.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector15.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector15.o) + .vector_15 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector15.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector16.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector16.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector16.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector16.o) + .vector_16 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector16.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector17.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector17.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector17.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector17.o) + .vector_17 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector17.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector18.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector18.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector18.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector18.o) + .vector_18 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector18.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector19.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector19.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector19.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector19.o) + .vector_19 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector19.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector20.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector20.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector20.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector20.o) + .vector_20 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector20.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector21.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector21.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector21.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector21.o) + .vector_21 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector21.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector22.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector22.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector22.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector22.o) + .vector_22 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector22.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector23.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector23.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector23.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector23.o) + .vector_23 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector23.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector24.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector24.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector24.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector24.o) + .vector_24 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector24.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector25.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector25.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector25.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector25.o) + .vector_25 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector25.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector26.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector26.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector26.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector26.o) + .vector_26 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector26.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector27.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector27.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector27.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector27.o) + .vector_27 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector27.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector28.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector28.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector28.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector28.o) + .vector_28 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector28.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector29.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector29.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector29.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector29.o) + .vector_29 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector29.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector30.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector30.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector30.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector30.o) + .vector_30 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector30.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector31.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector31.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector31.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector31.o) + .vector_31 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector31.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector32.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector32.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector32.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector32.o) + .vector_32 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector32.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector33.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector33.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector33.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector33.o) + .vector_33 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector33.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector34.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector34.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector34.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector34.o) + .vector_34 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector34.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector35.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector35.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector35.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector35.o) + .vector_35 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector35.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector36.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector36.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector36.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector36.o) + .vector_36 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector36.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector37.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector37.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector37.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector37.o) + .vector_37 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector37.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector38.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector38.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector38.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector38.o) + .vector_38 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector38.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector39.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector39.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector39.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector39.o) + .vector_39 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector39.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector40.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector40.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector40.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector40.o) + .vector_40 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector40.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector41.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector41.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector41.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector41.o) + .vector_41 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector41.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector42.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector42.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector42.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector42.o) + .vector_42 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector42.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector43.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector43.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector43.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector43.o) + .vector_43 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector43.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector44.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector44.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector44.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector44.o) + .vector_44 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector44.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector45.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector45.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector45.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector45.o) + .vector_45 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector45.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector46.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector46.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector46.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector46.o) + .vector_46 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector46.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector47.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector47.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector47.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector47.o) + .vector_47 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector47.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector48.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector48.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector48.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector48.o) + .vector_48 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector48.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector49.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector49.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector49.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector49.o) + .vector_49 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector49.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector50.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector50.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector50.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector50.o) + .vector_50 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector50.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector51.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector51.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector51.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector51.o) + .vector_51 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector51.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector52.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector52.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector52.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector52.o) + .vector_52 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector52.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector53.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector53.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector53.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector53.o) + .vector_53 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector53.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector54.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector54.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector54.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector54.o) + .vector_54 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector54.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector55.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector55.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector55.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector55.o) + .vector_55 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector55.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector56.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector56.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector56.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector56.o) + .vector_56 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector56.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector57.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector57.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector57.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector57.o) + .vector_57 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector57.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector58.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector58.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector58.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector58.o) + .vector_58 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector58.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector59.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector59.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector59.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector59.o) + .vector_59 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector59.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector60.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector60.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector60.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector60.o) + .vector_60 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector60.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector61.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector61.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector61.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector61.o) + .vector_61 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector61.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector62.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector62.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector62.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector62.o) + .vector_62 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector62.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector63.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector63.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector63.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector63.o) + .vector_63 0x00000000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(vector63.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-general-exception-handler.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-general-exception-handler.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-general-exception-handler.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-general-exception-handler.o) + .text._general_exception_handler + 0x00000000 0x48 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-general-exception-handler.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(defaultinterrupt.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(defaultinterrupt.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(defaultinterrupt.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(defaultinterrupt.o) + .vector_default + 0x00000000 0x40 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(defaultinterrupt.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memcpy.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memcpy.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memcpy.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memcpy.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memmove.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memmove.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memmove.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memmove.o) + .text 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memset.o) + .data 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memset.o) + .bss 0x00000000 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memset.o) + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memset.o) + +Memory Configuration + +Name Origin Length Attributes +kseg0_program_mem 0x9d000000 0x00003000 xr +kseg1_boot_mem 0xbfc00000 0x00000490 +kseg0_boot_mem 0x9fc00490 0x00000970 +exception_mem 0x9fc01000 0x00000000 +debug_exec_mem 0xbfc02000 0x00000ff0 +config3 0xbfc02ff0 0x00000004 +config2 0xbfc02ff4 0x00000004 +config1 0xbfc02ff8 0x00000004 +config0 0xbfc02ffc 0x00000004 +kseg1_data_mem 0xa0000000 0x00004000 w !x +sfrs 0xbf800000 0x00100000 +configsfrs 0xbfc02ff0 0x00000010 +*default* 0x00000000 0xffffffff + +Linker script and memory map + +LOAD c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H/crt0_mips32r2.o +LOAD c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\debug-exception-return.o +LOAD build/PIC32/production/usb/usb_descriptors.o +LOAD build/PIC32/production/usb/usb_device.o +LOAD build/PIC32/production/usb/usb_driver.o +LOAD build/PIC32/production/usb/usb_function_hid.o +LOAD build/PIC32/production/main.o +LOAD build/PIC32/production/io.o +LOAD build/PIC32/production/PIC32MX534F064H.o +LOAD build/PIC32/production/crc.o +LOAD build/PIC32/production/OLED.o + 0x00000001 __MPLAB_BUILD = 0x1 + 0x00000400 PROVIDE (_min_stack_size, 0x400) +LOAD c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\processor.o +START GROUP +LOAD c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral.a +END GROUP +START GROUP +LOAD c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a +END GROUP + 0x00000001 PROVIDE (_vector_spacing, 0x1) + 0x9fc01000 _ebase_address = 0x9fc01000 + 0xbfc00000 _RESET_ADDR = 0xbfc00000 + 0xbfc00380 _BEV_EXCPT_ADDR = 0xbfc00380 + 0xbfc00480 _DBG_EXCPT_ADDR = 0xbfc00480 + 0xbfc02000 _DBG_CODE_ADDR = 0xbfc02000 + 0x00000ff0 _DBG_CODE_SIZE = 0xff0 + 0x9fc01180 _GEN_EXCPT_ADDR = (_ebase_address + 0x180) + +.config_BFC02FF0 + 0xbfc02ff0 0x4 + *(.config_BFC02FF0) + .config_BFC02FF0 + 0xbfc02ff0 0x4 build/PIC32/production/PIC32MX534F064H.o + +.config_BFC02FF4 + 0xbfc02ff4 0x4 + *(.config_BFC02FF4) + .config_BFC02FF4 + 0xbfc02ff4 0x4 build/PIC32/production/PIC32MX534F064H.o + +.config_BFC02FF8 + 0xbfc02ff8 0x4 + *(.config_BFC02FF8) + .config_BFC02FF8 + 0xbfc02ff8 0x4 build/PIC32/production/PIC32MX534F064H.o + +.config_BFC02FFC + 0xbfc02ffc 0x4 + *(.config_BFC02FFC) + .config_BFC02FFC + 0xbfc02ffc 0x4 build/PIC32/production/PIC32MX534F064H.o + 0xbfc02000 PROVIDE (_DBG_CODE_ADDR, 0xbfc02000) + 0x00000ff0 PROVIDE (_DBG_CODE_SIZE, 0xff0) + +.reset 0xbfc00000 0x1f0 + *(.reset) + .reset 0xbfc00000 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H/crt0_mips32r2.o + 0xbfc00000 _reset + *(.reset.startup) + .reset.startup + 0xbfc00008 0x1e8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H/crt0_mips32r2.o + +.bev_excpt 0xbfc00380 0x10 + *(.bev_handler) + .bev_handler 0xbfc00380 0x10 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H/crt0_mips32r2.o + +.dbg_excpt 0xbfc00480 0x0 + 0xbfc00480 . = (. + DEFINED (_DEBUGGER)?0x8:0x0) + +.dbg_code 0xbfc02000 0x0 + 0xbfc02000 . = (. + DEFINED (_DEBUGGER)?_DBG_CODE_SIZE:0x0) + +.startup + *(.startup) + +.text 0x9d000000 0x0 + *(.stub .gnu.linkonce.t.*) + *(.text.*personality*) + *(.mips16.fn.*) + *(.mips16.call.*) + *(.gnu.warning) + 0x9d000000 . = ALIGN (0x4) + +.init 0x9d000000 0x0 + *crti.o(.init) + *crtbegin.o(.init) + *(EXCLUDE_FILE(*crtn.o *crtend?.o *crtend.o) .init) + *crtend.o(.init) + *crtn.o(.init) + 0x9d000000 . = ALIGN (0x4) + +.fini 0x9d000000 0x0 + *(.fini) + 0x9d000000 . = ALIGN (0x4) + +.preinit_array 0x9d000000 0x0 + 0x9d000000 PROVIDE (__preinit_array_start, .) + *(.preinit_array) + 0x9d000000 PROVIDE (__preinit_array_end, .) + 0x9d000000 . = ALIGN (0x4) + +.init_array 0x9d000000 0x0 + 0x9d000000 PROVIDE (__init_array_start, .) + *(SORT(.init_array.*)) + *(.init_array) + 0x9d000000 PROVIDE (__init_array_end, .) + 0x9d000000 . = ALIGN (0x4) + +.fini_array 0x9d000000 0x0 + 0x9d000000 PROVIDE (__fini_array_start, .) + *(SORT(.fini_array.*)) + *(.fini_array) + 0x9d000000 PROVIDE (__fini_array_end, .) + 0x9d000000 . = ALIGN (0x4) + +.ctors 0x9d000000 0x0 + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + 0x9d000000 . = ALIGN (0x4) + +.dtors 0x9d000000 0x0 + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + 0x9d000000 . = ALIGN (0x4) + +.rodata 0x9d000000 0x0 + *(.gnu.linkonce.r.*) + *(.rodata1) + 0x9d000000 . = ALIGN (0x4) + +.sdata2 0x9fc00490 0x0 + *(.sdata2 .sdata2.* .gnu.linkonce.s2.*) + 0x9fc00490 . = ALIGN (0x4) + +.sbss2 0x9fc00490 0x0 + *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*) + 0x9fc00490 . = ALIGN (0x4) + +.eh_frame_hdr + *(.eh_frame_hdr) + 0x9fc00490 . = ALIGN (0x4) + +.eh_frame + *(.eh_frame) + 0x9fc00490 . = ALIGN (0x4) + +.gcc_except_table + *(.gcc_except_table .gcc_except_table.*) + 0x9fc00490 . = ALIGN (0x4) + +.dbg_data 0xa0000000 0x0 + 0xa0000000 . = (. + DEFINED (_DEBUGGER)?0x200:0x0) + +.jcr 0xa0000000 0x0 + *(.jcr) + 0xa0000000 . = ALIGN (0x4) + +.eh_frame + *(.eh_frame) + 0xa0000000 . = ALIGN (0x4) + +.gcc_except_table + *(.gcc_except_table .gcc_except_table.*) + 0xa0000000 . = ALIGN (0x4) + +.persist 0xa0000000 0x0 + 0xa0000000 _persist_begin = . + *(.persist .persist.*) + *(.pbss .pbss.*) + 0xa0000000 . = ALIGN (0x4) + 0xa0000000 _persist_end = . + +.data 0xa0000000 0x0 + *(.gnu.linkonce.d.*) + *(.data1) + 0xa0000000 . = ALIGN (0x4) + 0xa0000000 . = . + 0xa0007ff0 _gp = (ALIGN (0x10) + 0x7ff0) + +.got 0xa0000000 0x0 + *(.got.plt) + *(.got) + 0xa0000000 . = ALIGN (0x4) + +.sdata 0xa0000000 0x0 + 0xa0000000 _sdata_begin = . + *(.sdata .sdata.* .gnu.linkonce.s.*) + 0xa0000000 . = ALIGN (0x4) + 0xa0000000 _sdata_end = . + +.lit8 + *(.lit8) + +.lit4 + *(.lit4) + 0xa0000000 . = ALIGN (0x4) + 0xa0000000 _data_end = . + 0xa0000000 _bss_begin = . + +.sbss 0xa0000000 0x8c + 0xa0000000 _sbss_begin = . + *(.dynsbss) + *(.sbss .sbss.* .gnu.linkonce.sb.*) + .sbss 0xa0000000 0xc build/PIC32/production/usb/usb_driver.o + 0xa0000000 USBOutHandle + 0xa0000004 USBInHandle + .sbss 0xa000000c 0x8 build/PIC32/production/main.o + .sbss 0xa0000014 0x8 build/PIC32/production/io.o + *(.scommon) + .scommon 0xa000001c 0x6c build/PIC32/production/usb/usb_device.o + 0xa000001c pDst + 0xa0000020 USBDeferINDataStagePackets + 0xa0000024 CtrlTrfData + 0xa000002c USBDeferOUTDataStagePackets + 0xa0000030 USBDeviceState + 0xa0000034 controlTransferState + 0xa0000035 endpoint_number + 0xa0000038 pBDTEntryIn + 0xa0000040 ep_data_out + 0xa0000044 USBStatusStageEnabledFlag1 + 0xa0000048 USBStatusStageEnabledFlag2 + 0xa000004c pBDTEntryOut + 0xa0000054 BothEP0OutUOWNsSet + 0xa0000058 pBDTEntryEP0OutNext + 0xa000005c USBBusIsSuspended + 0xa0000060 USBStatusStageTimeoutCounter + 0xa0000064 SetupPkt + 0xa000006c ep_data_in + 0xa000006e shortPacketStatus + 0xa0000070 pBDTEntryEP0OutCurrent + 0xa0000074 USBActiveConfiguration + 0xa0000078 RemoteWakeup + 0xa000007c USTATcopy + 0xa0000080 USBAlternateInterface + 0xa0000084 USBDeferStatusStagePacket + .scommon 0xa0000088 0x2 build/PIC32/production/usb/usb_function_hid.o + 0xa0000088 active_protocol + 0xa0000089 idle_rate + .scommon 0xa000008a 0x1 build/PIC32/production/main.o + 0xa000008a OLED + 0xa000008b _sbss_end = . + 0xa000008c . = ALIGN (0x4) + *fill* 0xa000008b 0x1 + +.bss 0xa0000200 0x4dc + *(.dynbss) + *(COMMON) + COMMON 0xa0000200 0x5b build/PIC32/production/usb/usb_device.o + 0xa0000200 BDT + 0xa0000240 inPipes + 0xa0000250 outPipes + *fill* 0xa000025b 0x1 + COMMON 0xa000025c 0x80 build/PIC32/production/usb/usb_driver.o + 0xa000025c USBRxBuffer + 0xa000029c USBTxBuffer + COMMON 0xa00002dc 0x400 build/PIC32/production/OLED.o + 0xa00002dc OLEDBUFF + 0xa00006dc . = ALIGN ((. != 0x0)?0x4:0x1) + 0xa00006dc . = ALIGN (0x4) + 0xa00006dc _end = . + 0xa00006dc _bss_end = . + 0x00004000 _bmxdudba_address = 0x4000 + 0x00004000 _bmxdupba_address = 0x4000 + +/DISCARD/ + *(.pdr) + *(.rel.dyn) + *(.note.GNU-stack) + *(.note.GNU-stack) + *(.gnu_debuglink) + *(.gnu.lto_*) + *(.discard) + +.gptab.sdata + *(.gptab.data) + *(.gptab.sdata) + +.gptab.sbss + *(.gptab.bss) + *(.gptab.sbss) + +.mdebug.abi32 0xa00006dc 0x0 + *(.mdebug.abi32) + .mdebug.abi32 0xa00006dc 0x0 build/PIC32/production/usb/usb_descriptors.o + .mdebug.abi32 0xa00006dc 0x0 build/PIC32/production/usb/usb_device.o + .mdebug.abi32 0xa00006dc 0x0 build/PIC32/production/usb/usb_driver.o + .mdebug.abi32 0xa00006dc 0x0 build/PIC32/production/usb/usb_function_hid.o + .mdebug.abi32 0xa00006dc 0x0 build/PIC32/production/main.o + .mdebug.abi32 0xa00006dc 0x0 build/PIC32/production/io.o + .mdebug.abi32 0xa00006dc 0x0 build/PIC32/production/PIC32MX534F064H.o + .mdebug.abi32 0xa00006dc 0x0 build/PIC32/production/crc.o + .mdebug.abi32 0xa00006dc 0x0 build/PIC32/production/OLED.o + .mdebug.abi32 0xa00006dc 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral.a(open_core_timer_lib.o) + .mdebug.abi32 0xa00006dc 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral.a(read_core_timer_lib.o) + .mdebug.abi32 0xa00006dc 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(soft_reset_lib.o) + .mdebug.abi32 0xa00006dc 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_disable_interrupts_lib.o) + .mdebug.abi32 0xa00006dc 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_restore_interrupts_lib.o) + .mdebug.abi32 0xa00006dc 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_tbl_lib.o) + .mdebug.abi32 0xa00006dc 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_open_lib.o) + .mdebug.abi32 0xa00006dc 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_puts_lib.o) + .mdebug.abi32 0xa00006dc 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_is_busy_lib.o) + .mdebug.abi32 0xa00006dc 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_io_tbl_libp.o) + .mdebug.abi32 0xa00006dc 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_map_tbl_libp.o) + .mdebug.abi32 0xa00006dc 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_erase_page_lib.o) + .mdebug.abi32 0xa00006dc 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_operation_lib.o) + .mdebug.abi32 0xa00006dc 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_write_row_lib.o) + .mdebug.abi32 0xa00006dc 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_write_word_lib.o) + .mdebug.abi32 0xa00006dc 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(port_set_pins_digital_in_lib.o) + .mdebug.abi32 0xa00006dc 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(port_set_pins_digital_out_lib.o) + .mdebug.abi32 0xa00006dc 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(_ports_tbl_libp.o) + .mdebug.abi32 0xa00006dc 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-bootstrap-exception-handler.o) + .mdebug.abi32 0xa00006dc 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-on-reset.o) + .mdebug.abi32 0xa00006dc 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-on-bootstrap.o) + .mdebug.abi32 0xa00006dc 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-general-exception-handler.o) + .mdebug.abi32 0xa00006dc 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(defaultinterrupt.o) + .mdebug.abi32 0xa00006dc 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memcpy.o) + .mdebug.abi32 0xa00006dc 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memmove.o) + .mdebug.abi32 0xa00006dc 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memset.o) + +.mdebug.abiN32 + *(.mdebug.abiN32) + +.mdebug.abi64 + *(.mdebug.abi64) + +.mdebug.abiO64 + *(.mdebug.abiO64) + +.mdebug.eabi32 + *(.mdebug.eabi32) + +.mdebug.eabi64 + *(.mdebug.eabi64) + +.gcc_compiled_long32 + *(.gcc_compiled_long32) + +.gcc_compiled_long64 + *(.gcc_compiled_long64) + +.stab + *(.stab) + +.stabstr + *(.stabstr) + +.stab.excl + *(.stab.excl) + +.stab.exclstr + *(.stab.exclstr) + +.stab.index + *(.stab.index) + +.stab.indexstr + *(.stab.indexstr) + +.comment 0x00000000 0x78 + *(.comment) + .comment 0x00000000 0x3c build/PIC32/production/usb/usb_descriptors.o + 0x3d (size before relaxing) + .comment 0x00000000 0x3d build/PIC32/production/usb/usb_device.o + .comment 0x00000000 0x3d build/PIC32/production/usb/usb_driver.o + .comment 0x00000000 0x3d build/PIC32/production/usb/usb_function_hid.o + .comment 0x00000000 0x3d build/PIC32/production/main.o + .comment 0x00000000 0x3d build/PIC32/production/io.o + .comment 0x00000000 0x3d build/PIC32/production/PIC32MX534F064H.o + .comment 0x00000000 0x3d build/PIC32/production/crc.o + .comment 0x00000000 0x3d build/PIC32/production/OLED.o + .comment 0x0000003c 0x3c c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral.a(open_core_timer_lib.o) + 0x3d (size before relaxing) + .comment 0x00000000 0x3d c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral.a(read_core_timer_lib.o) + .comment 0x00000000 0x3d c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(soft_reset_lib.o) + .comment 0x00000000 0x3d c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_disable_interrupts_lib.o) + .comment 0x00000000 0x3d c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_restore_interrupts_lib.o) + .comment 0x00000000 0x3d c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_tbl_lib.o) + .comment 0x00000000 0x3d c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_open_lib.o) + .comment 0x00000000 0x3d c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_puts_lib.o) + .comment 0x00000000 0x3d c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_is_busy_lib.o) + .comment 0x00000000 0x3d c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_io_tbl_libp.o) + .comment 0x00000000 0x3d c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_map_tbl_libp.o) + .comment 0x00000000 0x3d c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_erase_page_lib.o) + .comment 0x00000000 0x3d c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_operation_lib.o) + .comment 0x00000000 0x3d c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_write_row_lib.o) + .comment 0x00000000 0x3d c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_write_word_lib.o) + .comment 0x00000000 0x3d c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(port_set_pins_digital_in_lib.o) + .comment 0x00000000 0x3d c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(port_set_pins_digital_out_lib.o) + .comment 0x00000000 0x3d c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(_ports_tbl_libp.o) + .comment 0x00000000 0x3d c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-bootstrap-exception-handler.o) + .comment 0x00000000 0x3d c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-on-reset.o) + .comment 0x00000000 0x3d c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-on-bootstrap.o) + .comment 0x00000000 0x3d c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-general-exception-handler.o) + .comment 0x00000000 0x3d c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(defaultinterrupt.o) + .comment 0x00000000 0x3d c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memcpy.o) + .comment 0x00000000 0x3d c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memmove.o) + .comment 0x00000000 0x3d c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memset.o) + +.debug + *(.debug) + +.line + *(.line) + +.debug_srcinfo + *(.debug_srcinfo) + +.debug_sfnames + *(.debug_sfnames) + +.debug_aranges 0x00000000 0x4f0 + *(.debug_aranges) + .debug_aranges + 0x00000000 0x68 build/PIC32/production/usb/usb_device.o + .debug_aranges + 0x00000068 0x40 build/PIC32/production/usb/usb_driver.o + .debug_aranges + 0x000000a8 0x20 build/PIC32/production/usb/usb_function_hid.o + .debug_aranges + 0x000000c8 0x28 build/PIC32/production/main.o + .debug_aranges + 0x000000f0 0x30 build/PIC32/production/io.o + .debug_aranges + 0x00000120 0x60 build/PIC32/production/PIC32MX534F064H.o + .debug_aranges + 0x00000180 0x20 build/PIC32/production/crc.o + .debug_aranges + 0x000001a0 0x28 build/PIC32/production/OLED.o + .debug_aranges + 0x000001c8 0x20 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral.a(open_core_timer_lib.o) + .debug_aranges + 0x000001e8 0x20 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral.a(read_core_timer_lib.o) + .debug_aranges + 0x00000208 0x20 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(soft_reset_lib.o) + .debug_aranges + 0x00000228 0x20 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_disable_interrupts_lib.o) + .debug_aranges + 0x00000248 0x20 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_restore_interrupts_lib.o) + .debug_aranges + 0x00000268 0x60 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_tbl_lib.o) + .debug_aranges + 0x000002c8 0x20 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_open_lib.o) + .debug_aranges + 0x000002e8 0x20 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_puts_lib.o) + .debug_aranges + 0x00000308 0x28 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_is_busy_lib.o) + .debug_aranges + 0x00000330 0x20 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_erase_page_lib.o) + .debug_aranges + 0x00000350 0x20 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_operation_lib.o) + .debug_aranges + 0x00000370 0x20 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_write_row_lib.o) + .debug_aranges + 0x00000390 0x20 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_write_word_lib.o) + .debug_aranges + 0x000003b0 0x20 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(port_set_pins_digital_in_lib.o) + .debug_aranges + 0x000003d0 0x20 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(port_set_pins_digital_out_lib.o) + .debug_aranges + 0x000003f0 0x20 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-bootstrap-exception-handler.o) + .debug_aranges + 0x00000410 0x20 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-on-reset.o) + .debug_aranges + 0x00000430 0x20 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-on-bootstrap.o) + .debug_aranges + 0x00000450 0x20 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-general-exception-handler.o) + .debug_aranges + 0x00000470 0x20 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(defaultinterrupt.o) + .debug_aranges + 0x00000490 0x20 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memcpy.o) + .debug_aranges + 0x000004b0 0x20 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memmove.o) + .debug_aranges + 0x000004d0 0x20 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memset.o) + +.debug_pubnames + 0x00000000 0xa40 + *(.debug_pubnames) + .debug_pubnames + 0x00000000 0x81 build/PIC32/production/usb/usb_descriptors.o + .debug_pubnames + 0x00000081 0x312 build/PIC32/production/usb/usb_device.o + .debug_pubnames + 0x00000393 0xc4 build/PIC32/production/usb/usb_driver.o + .debug_pubnames + 0x00000457 0x4b build/PIC32/production/usb/usb_function_hid.o + .debug_pubnames + 0x000004a2 0x35 build/PIC32/production/main.o + .debug_pubnames + 0x000004d7 0x37 build/PIC32/production/io.o + .debug_pubnames + 0x0000050e 0xb7 build/PIC32/production/PIC32MX534F064H.o + .debug_pubnames + 0x000005c5 0x23 build/PIC32/production/crc.o + .debug_pubnames + 0x000005e8 0x4c build/PIC32/production/OLED.o + .debug_pubnames + 0x00000634 0x24 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral.a(open_core_timer_lib.o) + .debug_pubnames + 0x00000658 0x24 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral.a(read_core_timer_lib.o) + .debug_pubnames + 0x0000067c 0x20 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(soft_reset_lib.o) + .debug_pubnames + 0x0000069c 0x2b c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_disable_interrupts_lib.o) + .debug_pubnames + 0x000006c7 0x2b c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_restore_interrupts_lib.o) + .debug_pubnames + 0x000006f2 0xca c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_tbl_lib.o) + .debug_pubnames + 0x000007bc 0x21 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_open_lib.o) + .debug_pubnames + 0x000007dd 0x21 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_puts_lib.o) + .debug_pubnames + 0x000007fe 0x37 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_is_busy_lib.o) + .debug_pubnames + 0x00000835 0x23 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_erase_page_lib.o) + .debug_pubnames + 0x00000858 0x24 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_operation_lib.o) + .debug_pubnames + 0x0000087c 0x22 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_write_row_lib.o) + .debug_pubnames + 0x0000089e 0x23 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_write_word_lib.o) + .debug_pubnames + 0x000008c1 0x2b c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(port_set_pins_digital_in_lib.o) + .debug_pubnames + 0x000008ec 0x2c c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(port_set_pins_digital_out_lib.o) + .debug_pubnames + 0x00000918 0x33 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-bootstrap-exception-handler.o) + .debug_pubnames + 0x0000094b 0x20 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-on-reset.o) + .debug_pubnames + 0x0000096b 0x24 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-on-bootstrap.o) + .debug_pubnames + 0x0000098f 0x31 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-general-exception-handler.o) + .debug_pubnames + 0x000009c0 0x28 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(defaultinterrupt.o) + .debug_pubnames + 0x000009e8 0x1d c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memcpy.o) + .debug_pubnames + 0x00000a05 0x1e c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memmove.o) + .debug_pubnames + 0x00000a23 0x1d c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memset.o) + +.debug_info 0x00000000 0xf1e9 + *(.debug_info .gnu.linkonce.wi.*) + .debug_info 0x00000000 0x1600 build/PIC32/production/usb/usb_descriptors.o + .debug_info 0x00001600 0x39d0 build/PIC32/production/usb/usb_device.o + .debug_info 0x00004fd0 0x170a build/PIC32/production/usb/usb_driver.o + .debug_info 0x000066da 0x1a90 build/PIC32/production/usb/usb_function_hid.o + .debug_info 0x0000816a 0x1a3e build/PIC32/production/main.o + .debug_info 0x00009ba8 0x1934 build/PIC32/production/io.o + .debug_info 0x0000b4dc 0x23fe build/PIC32/production/PIC32MX534F064H.o + .debug_info 0x0000d8da 0x208 build/PIC32/production/crc.o + .debug_info 0x0000dae2 0x5bb build/PIC32/production/OLED.o + .debug_info 0x0000e09d 0xa6 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral.a(open_core_timer_lib.o) + .debug_info 0x0000e143 0xa6 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral.a(read_core_timer_lib.o) + .debug_info 0x0000e1e9 0xae c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(soft_reset_lib.o) + .debug_info 0x0000e297 0xb2 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_disable_interrupts_lib.o) + .debug_info 0x0000e349 0xb2 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_restore_interrupts_lib.o) + .debug_info 0x0000e3fb 0x192 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_tbl_lib.o) + .debug_info 0x0000e58d 0x9e c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_open_lib.o) + .debug_info 0x0000e62b 0xb1 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_puts_lib.o) + .debug_info 0x0000e6dc 0xc1 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_is_busy_lib.o) + .debug_info 0x0000e79d 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_io_tbl_libp.o) + .debug_info 0x0000e79d 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_map_tbl_libp.o) + .debug_info 0x0000e79d 0xa2 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_erase_page_lib.o) + .debug_info 0x0000e83f 0xc3 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_operation_lib.o) + .debug_info 0x0000e902 0xa0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_write_row_lib.o) + .debug_info 0x0000e9a2 0xa2 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_write_word_lib.o) + .debug_info 0x0000ea44 0xb6 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(port_set_pins_digital_in_lib.o) + .debug_info 0x0000eafa 0xb8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(port_set_pins_digital_out_lib.o) + .debug_info 0x0000ebb2 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(_ports_tbl_libp.o) + .debug_info 0x0000ebb2 0xe2 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-bootstrap-exception-handler.o) + .debug_info 0x0000ec94 0xbc c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-on-reset.o) + .debug_info 0x0000ed50 0xc4 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-on-bootstrap.o) + .debug_info 0x0000ee14 0xde c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-general-exception-handler.o) + .debug_info 0x0000eef2 0xd6 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(defaultinterrupt.o) + .debug_info 0x0000efc8 0xb5 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memcpy.o) + .debug_info 0x0000f07d 0xb7 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memmove.o) + .debug_info 0x0000f134 0xb5 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memset.o) + +.debug_abbrev 0x00000000 0x1545 + *(.debug_abbrev) + .debug_abbrev 0x00000000 0x1d6 build/PIC32/production/usb/usb_descriptors.o + .debug_abbrev 0x000001d6 0x365 build/PIC32/production/usb/usb_device.o + .debug_abbrev 0x0000053b 0x24b build/PIC32/production/usb/usb_driver.o + .debug_abbrev 0x00000786 0x1e5 build/PIC32/production/usb/usb_function_hid.o + .debug_abbrev 0x0000096b 0x1f4 build/PIC32/production/main.o + .debug_abbrev 0x00000b5f 0x20d build/PIC32/production/io.o + .debug_abbrev 0x00000d6c 0x27e build/PIC32/production/PIC32MX534F064H.o + .debug_abbrev 0x00000fea 0x94 build/PIC32/production/crc.o + .debug_abbrev 0x0000107e 0x162 build/PIC32/production/OLED.o + .debug_abbrev 0x000011e0 0x23 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral.a(open_core_timer_lib.o) + .debug_abbrev 0x00001203 0x23 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral.a(read_core_timer_lib.o) + .debug_abbrev 0x00001226 0x32 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(soft_reset_lib.o) + .debug_abbrev 0x00001258 0x23 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_disable_interrupts_lib.o) + .debug_abbrev 0x0000127b 0x23 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_restore_interrupts_lib.o) + .debug_abbrev 0x0000129e 0x23 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_tbl_lib.o) + .debug_abbrev 0x000012c1 0x23 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_open_lib.o) + .debug_abbrev 0x000012e4 0x32 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_puts_lib.o) + .debug_abbrev 0x00001316 0x23 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_is_busy_lib.o) + .debug_abbrev 0x00001339 0x1 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_io_tbl_libp.o) + .debug_abbrev 0x0000133a 0x1 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_map_tbl_libp.o) + .debug_abbrev 0x0000133b 0x23 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_erase_page_lib.o) + .debug_abbrev 0x0000135e 0x32 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_operation_lib.o) + .debug_abbrev 0x00001390 0x23 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_write_row_lib.o) + .debug_abbrev 0x000013b3 0x23 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_write_word_lib.o) + .debug_abbrev 0x000013d6 0x23 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(port_set_pins_digital_in_lib.o) + .debug_abbrev 0x000013f9 0x23 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(port_set_pins_digital_out_lib.o) + .debug_abbrev 0x0000141c 0x1 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(_ports_tbl_libp.o) + .debug_abbrev 0x0000141d 0x25 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-bootstrap-exception-handler.o) + .debug_abbrev 0x00001442 0x25 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-on-reset.o) + .debug_abbrev 0x00001467 0x25 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-on-bootstrap.o) + .debug_abbrev 0x0000148c 0x25 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-general-exception-handler.o) + .debug_abbrev 0x000014b1 0x25 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(defaultinterrupt.o) + .debug_abbrev 0x000014d6 0x25 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memcpy.o) + .debug_abbrev 0x000014fb 0x25 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memmove.o) + .debug_abbrev 0x00001520 0x25 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memset.o) + +.debug_line 0x00000000 0x21de + *(.debug_line) + .debug_line 0x00000000 0x1b7 build/PIC32/production/usb/usb_descriptors.o + .debug_line 0x000001b7 0x5fb build/PIC32/production/usb/usb_device.o + .debug_line 0x000007b2 0x214 build/PIC32/production/usb/usb_driver.o + .debug_line 0x000009c6 0x204 build/PIC32/production/usb/usb_function_hid.o + .debug_line 0x00000bca 0x27b build/PIC32/production/main.o + .debug_line 0x00000e45 0x284 build/PIC32/production/io.o + .debug_line 0x000010c9 0x33c build/PIC32/production/PIC32MX534F064H.o + .debug_line 0x00001405 0xe9 build/PIC32/production/crc.o + .debug_line 0x000014ee 0x1c9 build/PIC32/production/OLED.o + .debug_line 0x000016b7 0x6e c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral.a(open_core_timer_lib.o) + .debug_line 0x00001725 0x6e c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral.a(read_core_timer_lib.o) + .debug_line 0x00001793 0xb1 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(soft_reset_lib.o) + .debug_line 0x00001844 0x73 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_disable_interrupts_lib.o) + .debug_line 0x000018b7 0x73 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_restore_interrupts_lib.o) + .debug_line 0x0000192a 0x64 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_tbl_lib.o) + .debug_line 0x0000198e 0x69 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_open_lib.o) + .debug_line 0x000019f7 0x7b c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_puts_lib.o) + .debug_line 0x00001a72 0x6c c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_is_busy_lib.o) + .debug_line 0x00001ade 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_io_tbl_libp.o) + .debug_line 0x00001ade 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_map_tbl_libp.o) + .debug_line 0x00001ade 0x6b c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_erase_page_lib.o) + .debug_line 0x00001b49 0xb2 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_operation_lib.o) + .debug_line 0x00001bfb 0x6a c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_write_row_lib.o) + .debug_line 0x00001c65 0x6b c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_write_word_lib.o) + .debug_line 0x00001cd0 0x77 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(port_set_pins_digital_in_lib.o) + .debug_line 0x00001d47 0x78 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(port_set_pins_digital_out_lib.o) + .debug_line 0x00001dbf 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(_ports_tbl_libp.o) + .debug_line 0x00001dbf 0x97 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-bootstrap-exception-handler.o) + .debug_line 0x00001e56 0x84 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-on-reset.o) + .debug_line 0x00001eda 0x88 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-on-bootstrap.o) + .debug_line 0x00001f62 0x95 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-general-exception-handler.o) + .debug_line 0x00001ff7 0x96 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(defaultinterrupt.o) + .debug_line 0x0000208d 0x70 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memcpy.o) + .debug_line 0x000020fd 0x71 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memmove.o) + .debug_line 0x0000216e 0x70 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memset.o) + +.debug_frame 0x00000000 0x768 + *(.debug_frame) + .debug_frame 0x00000000 0xfc build/PIC32/production/usb/usb_device.o + .debug_frame 0x000000fc 0x80 build/PIC32/production/usb/usb_driver.o + .debug_frame 0x0000017c 0x20 build/PIC32/production/usb/usb_function_hid.o + .debug_frame 0x0000019c 0x48 build/PIC32/production/main.o + .debug_frame 0x000001e4 0x5c build/PIC32/production/io.o + .debug_frame 0x00000240 0xf8 build/PIC32/production/PIC32MX534F064H.o + .debug_frame 0x00000338 0x28 build/PIC32/production/crc.o + .debug_frame 0x00000360 0x44 build/PIC32/production/OLED.o + .debug_frame 0x000003a4 0x20 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral.a(open_core_timer_lib.o) + .debug_frame 0x000003c4 0x20 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral.a(read_core_timer_lib.o) + .debug_frame 0x000003e4 0x28 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(soft_reset_lib.o) + .debug_frame 0x0000040c 0x20 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_disable_interrupts_lib.o) + .debug_frame 0x0000042c 0x20 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_restore_interrupts_lib.o) + .debug_frame 0x0000044c 0xa0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_tbl_lib.o) + .debug_frame 0x000004ec 0x34 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_open_lib.o) + .debug_frame 0x00000520 0x28 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_puts_lib.o) + .debug_frame 0x00000548 0x30 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_is_busy_lib.o) + .debug_frame 0x00000578 0x28 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_erase_page_lib.o) + .debug_frame 0x000005a0 0x28 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_operation_lib.o) + .debug_frame 0x000005c8 0x28 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_write_row_lib.o) + .debug_frame 0x000005f0 0x28 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_write_word_lib.o) + .debug_frame 0x00000618 0x20 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(port_set_pins_digital_in_lib.o) + .debug_frame 0x00000638 0x20 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(port_set_pins_digital_out_lib.o) + .debug_frame 0x00000658 0x28 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-bootstrap-exception-handler.o) + .debug_frame 0x00000680 0x20 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-on-reset.o) + .debug_frame 0x000006a0 0x20 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-on-bootstrap.o) + .debug_frame 0x000006c0 0x28 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-general-exception-handler.o) + .debug_frame 0x000006e8 0x20 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(defaultinterrupt.o) + .debug_frame 0x00000708 0x20 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memcpy.o) + .debug_frame 0x00000728 0x20 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memmove.o) + .debug_frame 0x00000748 0x20 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memset.o) + +.debug_str 0x00000000 0xac6 + *(.debug_str) + .debug_str 0x00000000 0x10c build/PIC32/production/usb/usb_descriptors.o + .debug_str 0x0000010c 0x364 build/PIC32/production/usb/usb_device.o + .debug_str 0x00000470 0x13b build/PIC32/production/usb/usb_driver.o + .debug_str 0x000005ab 0x146 build/PIC32/production/usb/usb_function_hid.o + .debug_str 0x000006f1 0x119 build/PIC32/production/main.o + .debug_str 0x0000080a 0x12d build/PIC32/production/io.o + .debug_str 0x00000937 0x13e build/PIC32/production/PIC32MX534F064H.o + .debug_str 0x00000a75 0x0 build/PIC32/production/crc.o + .debug_str 0x00000a75 0x51 build/PIC32/production/OLED.o + .debug_str 0x00000ac6 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral.a(open_core_timer_lib.o) + .debug_str 0x00000ac6 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral.a(read_core_timer_lib.o) + .debug_str 0x00000ac6 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(soft_reset_lib.o) + .debug_str 0x00000ac6 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_disable_interrupts_lib.o) + .debug_str 0x00000ac6 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_restore_interrupts_lib.o) + .debug_str 0x00000ac6 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_tbl_lib.o) + .debug_str 0x00000ac6 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_open_lib.o) + .debug_str 0x00000ac6 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_puts_lib.o) + .debug_str 0x00000ac6 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_is_busy_lib.o) + .debug_str 0x00000ac6 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_io_tbl_libp.o) + .debug_str 0x00000ac6 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_map_tbl_libp.o) + .debug_str 0x00000ac6 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_erase_page_lib.o) + .debug_str 0x00000ac6 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_operation_lib.o) + .debug_str 0x00000ac6 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_write_row_lib.o) + .debug_str 0x00000ac6 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_write_word_lib.o) + .debug_str 0x00000ac6 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(port_set_pins_digital_in_lib.o) + .debug_str 0x00000ac6 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(port_set_pins_digital_out_lib.o) + .debug_str 0x00000ac6 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(_ports_tbl_libp.o) + .debug_str 0x00000ac6 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-bootstrap-exception-handler.o) + .debug_str 0x00000ac6 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-on-reset.o) + .debug_str 0x00000ac6 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-on-bootstrap.o) + .debug_str 0x00000ac6 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-general-exception-handler.o) + .debug_str 0x00000ac6 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(defaultinterrupt.o) + .debug_str 0x00000ac6 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memcpy.o) + .debug_str 0x00000ac6 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memmove.o) + .debug_str 0x00000ac6 0x0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memset.o) + +.debug_loc 0x00000000 0x405 + *(.debug_loc) + .debug_loc 0x00000000 0x1d2 build/PIC32/production/usb/usb_device.o + .debug_loc 0x000001d2 0x5a build/PIC32/production/usb/usb_driver.o + .debug_loc 0x0000022c 0x1f build/PIC32/production/main.o + .debug_loc 0x0000024b 0x13f build/PIC32/production/PIC32MX534F064H.o + .debug_loc 0x0000038a 0x7b build/PIC32/production/crc.o + +.debug_macinfo + *(.debug_macinfo) + +.debug_weaknames + *(.debug_weaknames) + +.debug_funcnames + *(.debug_funcnames) + +.debug_typenames + *(.debug_typenames) + +.debug_varnames + *(.debug_varnames) + +.debug_pubtypes + 0x00000000 0x9fe + *(.debug_pubtypes) + .debug_pubtypes + 0x00000000 0x104 build/PIC32/production/usb/usb_descriptors.o + .debug_pubtypes + 0x00000104 0x285 build/PIC32/production/usb/usb_device.o + .debug_pubtypes + 0x00000389 0x107 build/PIC32/production/usb/usb_driver.o + .debug_pubtypes + 0x00000490 0x108 build/PIC32/production/usb/usb_function_hid.o + .debug_pubtypes + 0x00000598 0x106 build/PIC32/production/main.o + .debug_pubtypes + 0x0000069e 0x161 build/PIC32/production/io.o + .debug_pubtypes + 0x000007ff 0x170 build/PIC32/production/PIC32MX534F064H.o + .debug_pubtypes + 0x0000096f 0x32 build/PIC32/production/crc.o + .debug_pubtypes + 0x000009a1 0x5d build/PIC32/production/OLED.o + +.debug_ranges 0x00000000 0x1c8 + *(.debug_ranges) + .debug_ranges 0x00000000 0x58 build/PIC32/production/usb/usb_device.o + .debug_ranges 0x00000058 0x30 build/PIC32/production/usb/usb_driver.o + .debug_ranges 0x00000088 0x10 build/PIC32/production/usb/usb_function_hid.o + .debug_ranges 0x00000098 0x18 build/PIC32/production/main.o + .debug_ranges 0x000000b0 0x20 build/PIC32/production/io.o + .debug_ranges 0x000000d0 0x50 build/PIC32/production/PIC32MX534F064H.o + .debug_ranges 0x00000120 0x10 build/PIC32/production/crc.o + .debug_ranges 0x00000130 0x18 build/PIC32/production/OLED.o + .debug_ranges 0x00000148 0x10 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-bootstrap-exception-handler.o) + .debug_ranges 0x00000158 0x10 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-on-reset.o) + .debug_ranges 0x00000168 0x10 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-on-bootstrap.o) + .debug_ranges 0x00000178 0x10 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-general-exception-handler.o) + .debug_ranges 0x00000188 0x10 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(defaultinterrupt.o) + .debug_ranges 0x00000198 0x10 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memcpy.o) + .debug_ranges 0x000001a8 0x10 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memmove.o) + .debug_ranges 0x000001b8 0x10 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memset.o) + +.gnu.attributes + *(.gnu.attributes) +LOAD c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H\default_isr_vectors.o +LOAD c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\pic32_software_reset.o +LOAD c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/size/mips16/no-float\libgcc.a +START GROUP +LOAD c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a +LOAD c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libdebug.a +LOAD c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a +LOAD c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libm.a +LOAD c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libe.a +LOAD c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libdsp.a +LOAD c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/size/mips16/no-float\libgcc.a +LOAD c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a +LOAD c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a +END GROUP +LOAD c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/size/mips16/no-float\libgcc.a +OUTPUT(dist/PIC32/production/US_BootLoader.X.production.elf elf32-tradlittlemips) +LOAD stack +LOAD data_init + +.reginfo 0x00000000 0x18 + .reginfo 0x00000000 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H/crt0_mips32r2.o + +.stack 0xa0000708 0x400 + .stack 0xa0000708 0x400 stack + +._debug_exception + 0xbfc00480 0x2c + ._debug_exception + 0xbfc00480 0x2c c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\debug-exception-return.o + 0xbfc00480 __DbgExecReturn + +.text.USBDeviceTasks + 0x9d000000 0xd58 + .text.USBDeviceTasks + 0x9d000000 0xd58 build/PIC32/production/usb/usb_device.o + 0x9d000001 USBDeviceTasks + +.rodata 0x9d000d58 0x7d4 + .rodata 0x9d000d58 0x7d4 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_tbl_lib.o) + 0x9d000d58 __IntSrcTbl + 0x9d001274 __IntVectorTbl + +.text.USBDeviceInit + 0x9d00152c 0x1a8 + .text.USBDeviceInit + 0x9d00152c 0x1a8 build/PIC32/production/usb/usb_device.o + 0x9d00152d USBDeviceInit + +.text.mcuInit 0x9d0016d4 0x194 + .text.mcuInit 0x9d0016d4 0x194 build/PIC32/production/PIC32MX534F064H.o + 0x9d0016d5 mcuInit + +.text.ProcessIO + 0x9d001868 0x14c + .text.ProcessIO + 0x9d001868 0x14c build/PIC32/production/io.o + 0x9d001869 ProcessIO + +.text.displayTasts + 0x9d0019b4 0x144 + .text.displayTasts + 0x9d0019b4 0x144 build/PIC32/production/main.o + 0x9d0019b5 displayTasts + +.text.main 0x9d001af8 0x13c + .text.main 0x9d001af8 0x13c build/PIC32/production/main.o + 0x9d001af9 main + +.text._NVMOperation + 0x9d001c34 0x100 + .text._NVMOperation + 0x9d001c34 0x100 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_operation_lib.o) + 0x9d001c34 _NVMOperation + +.text.USBCtrlEPAllowStatusStage + 0x9d001d34 0xe4 + .text.USBCtrlEPAllowStatusStage + 0x9d001d34 0xe4 build/PIC32/production/usb/usb_device.o + 0x9d001d35 USBCtrlEPAllowStatusStage + +.text.USBCheckHIDRequest + 0x9d001e18 0xd4 + .text.USBCheckHIDRequest + 0x9d001e18 0xd4 build/PIC32/production/usb/usb_function_hid.o + 0x9d001e19 USBCheckHIDRequest + +.rodata 0x9d001eec 0xd0 + .rodata 0x9d001eec 0xd0 build/PIC32/production/usb/usb_descriptors.o + 0x9d001eec device_dsc + 0x9d001f00 configDescriptor1 + 0x9d001f2c sd000 + 0x9d001f30 sd001 + 0x9d001f50 sd002 + 0x9d001f90 hid_rpt01 + 0x9d001fac USB_CD_Ptr + 0x9d001fb0 USB_SD_Ptr + +.text.mcuWriteFlashRecord + 0x9d001fbc 0xd0 + .text.mcuWriteFlashRecord + 0x9d001fbc 0xd0 build/PIC32/production/PIC32MX534F064H.o + 0x9d001fbd mcuWriteFlashRecord + +.text.USBTransferOnePacket + 0x9d00208c 0xc8 + .text.USBTransferOnePacket + 0x9d00208c 0xc8 build/PIC32/production/usb/usb_device.o + 0x9d00208d USBTransferOnePacket + +.text.USBCtrlEPAllowDataStage + 0x9d002154 0xc8 + .text.USBCtrlEPAllowDataStage + 0x9d002154 0xc8 build/PIC32/production/usb/usb_device.o + 0x9d002155 USBCtrlEPAllowDataStage + +.text.SpiChnOpen + 0x9d00221c 0xbc + .text.SpiChnOpen + 0x9d00221c 0xbc c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_open_lib.o) + 0x9d00221d SpiChnOpen + +.rodata 0x9d0022d8 0xa0 + .rodata 0x9d0022d8 0xa0 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_io_tbl_libp.o) + 0x9d0022d8 _SpiIoTbl + +.text.OLEDInit 0x9d002378 0x98 + .text.OLEDInit + 0x9d002378 0x98 build/PIC32/production/OLED.o + 0x9d002379 OLEDInit + +.text.USBCtrlTrfTxService + 0x9d002410 0x94 + .text.USBCtrlTrfTxService + 0x9d002410 0x94 build/PIC32/production/usb/usb_device.o + +.text.SpiChnPutS + 0x9d0024a4 0x6c + .text.SpiChnPutS + 0x9d0024a4 0x6c c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_puts_lib.o) + 0x9d0024a5 SpiChnPutS + +.text.SoftReset + 0x9d002510 0x60 + .text.SoftReset + 0x9d002510 0x60 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(soft_reset_lib.o) + 0x9d002511 SoftReset + +.text.mcuDisableUSB + 0x9d002570 0x58 + .text.mcuDisableUSB + 0x9d002570 0x58 build/PIC32/production/PIC32MX534F064H.o + 0x9d002571 mcuDisableUSB + +.dinit 0x9d0025c8 0x50 + .dinit 0x9d0025c8 0x50 data_init + +.text.main_entry + 0x9d002618 0x4c + .text.main_entry + 0x9d002618 0x4c c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX534F064H/crt0_mips32r2.o + 0x9d002644 __crt0_exit + +.text.CalculateCRC + 0x9d002664 0x48 + .text.CalculateCRC + 0x9d002664 0x48 build/PIC32/production/crc.o + 0x9d002665 CalculateCRC + +.rodata 0x9d0026ac 0x48 + .rodata 0x9d0026ac 0x48 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(_ports_tbl_libp.o) + 0x9d0026ac PortRegTbl + +.text._bootstrap_exception_handler + 0x9d0026f4 0x48 + .text._bootstrap_exception_handler + 0x9d0026f4 0x48 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-bootstrap-exception-handler.o) + 0x9d0026f4 _bootstrap_exception_handler + +.text 0x9d00273c 0x44 + .text 0x9d00273c 0x44 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\pic32_software_reset.o + 0x9d00273c __pic32_software_reset + +.text.USBConfigureEndpoint + 0x9d002780 0x40 + .text.USBConfigureEndpoint + 0x9d002780 0x40 build/PIC32/production/usb/usb_device.o + +.text.mcuEraseFlash + 0x9d0027c0 0x40 + .text.mcuEraseFlash + 0x9d0027c0 0x40 build/PIC32/production/PIC32MX534F064H.o + 0x9d0027c1 mcuEraseFlash + +.text.mcuValidAppPresent + 0x9d002800 0x3c + .text.mcuValidAppPresent + 0x9d002800 0x3c build/PIC32/production/PIC32MX534F064H.o + 0x9d002801 mcuValidAppPresent + +.text.OLEDUpdate + 0x9d00283c 0x3c + .text.OLEDUpdate + 0x9d00283c 0x3c build/PIC32/production/OLED.o + 0x9d00283d OLEDUpdate + +.text.USBEnableEndpoint + 0x9d002878 0x38 + .text.USBEnableEndpoint + 0x9d002878 0x38 build/PIC32/production/usb/usb_device.o + 0x9d002879 USBEnableEndpoint + +.text.mcuProgramComplete + 0x9d0028b0 0x38 + .text.mcuProgramComplete + 0x9d0028b0 0x38 build/PIC32/production/PIC32MX534F064H.o + 0x9d0028b1 mcuProgramComplete + +.text.IOInit 0x9d0028e8 0x30 + .text.IOInit 0x9d0028e8 0x30 build/PIC32/production/io.o + 0x9d0028e9 IOInit + +.text.memmove 0x9d002918 0x30 + .text.memmove 0x9d002918 0x30 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memmove.o) + 0x9d002919 memmove + +.text.IOTasks 0x9d002948 0x2c + .text.IOTasks 0x9d002948 0x2c build/PIC32/production/io.o + 0x9d002949 IOTasks + +.text.NVMWriteRow + 0x9d002974 0x2c + .text.NVMWriteRow + 0x9d002974 0x2c c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_write_row_lib.o) + 0x9d002975 NVMWriteRow + +.text.INTEnable + 0x9d0029a0 0x28 + .text.INTEnable + 0x9d0029a0 0x28 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_tbl_lib.o) + 0x9d0029a1 INTEnable + +.text.NVMWriteWord + 0x9d0029c8 0x28 + .text.NVMWriteWord + 0x9d0029c8 0x28 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_write_word_lib.o) + 0x9d0029c9 NVMWriteWord + +.text.USBCBInitEP + 0x9d0029f0 0x24 + .text.USBCBInitEP + 0x9d0029f0 0x24 build/PIC32/production/usb/usb_driver.o + 0x9d0029f1 USBCBInitEP + +.text.USER_USB_CALLBACK_EVENT_HANDLER + 0x9d002a14 0x20 + .text.USER_USB_CALLBACK_EVENT_HANDLER + 0x9d002a14 0x20 build/PIC32/production/usb/usb_driver.o + 0x9d002a15 USER_USB_CALLBACK_EVENT_HANDLER + +.rodata 0x9d002a34 0x40 + .rodata 0x9d002a34 0x20 build/PIC32/production/crc.o + .rodata 0x9d002a54 0x20 build/PIC32/production/OLED.o + 0x9d002a54 OLEDInitBuff + +.text.SpiChnIsBusy + 0x9d002a74 0x20 + .text.SpiChnIsBusy + 0x9d002a74 0x20 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_chn_is_busy_lib.o) + 0x9d002a75 SpiChnIsBusy + +.text.NVMErasePage + 0x9d002a94 0x20 + .text.NVMErasePage + 0x9d002a94 0x20 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(nvm_erase_page_lib.o) + 0x9d002a95 NVMErasePage + +.text.PORTSetPinsDigitalIn + 0x9d002ab4 0x20 + .text.PORTSetPinsDigitalIn + 0x9d002ab4 0x20 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(port_set_pins_digital_in_lib.o) + 0x9d002ab5 PORTSetPinsDigitalIn + +.text.PORTSetPinsDigitalOut + 0x9d002ad4 0x20 + .text.PORTSetPinsDigitalOut + 0x9d002ad4 0x20 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(port_set_pins_digital_out_lib.o) + 0x9d002ad5 PORTSetPinsDigitalOut + +.text.DelayTicks + 0x9d002af4 0x1c + .text.DelayTicks + 0x9d002af4 0x1c build/PIC32/production/PIC32MX534F064H.o + 0x9d002af5 DelayTicks + +.text.INTRestoreInterrupts + 0x9d002b10 0x1c + .text.INTRestoreInterrupts + 0x9d002b10 0x1c c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_restore_interrupts_lib.o) + 0x9d002b10 INTRestoreInterrupts + +.text.USBDriverInit + 0x9d002b2c 0x18 + .text.USBDriverInit + 0x9d002b2c 0x18 build/PIC32/production/usb/usb_driver.o + 0x9d002b2d USBDriverInit + +.text.INTClearFlag + 0x9d002b44 0x18 + .text.INTClearFlag + 0x9d002b44 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_tbl_lib.o) + 0x9d002b45 INTClearFlag + +.text 0x9d002b5c 0x18 + .text 0x9d002b5c 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-nmi-handler.o) + 0x9d002b5c _nmi_handler + +.text.memcpy 0x9d002b74 0x18 + .text.memcpy 0x9d002b74 0x18 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memcpy.o) + 0x9d002b75 memcpy + +.text.mcuJumpToApp + 0x9d002b8c 0x14 + .text.mcuJumpToApp + 0x9d002b8c 0x14 build/PIC32/production/PIC32MX534F064H.o + 0x9d002b8d mcuJumpToApp + +.rodata 0x9d002ba0 0x14 + .rodata 0x9d002ba0 0x14 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(spi_map_tbl_libp.o) + 0x9d002ba0 _SpiMapTbl + +.text.memset 0x9d002bb4 0x14 + .text.memset 0x9d002bb4 0x14 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libc.a(memset.o) + 0x9d002bb5 memset + +.text.mcuSPIWait + 0x9d002bc8 0x10 + .text.mcuSPIWait + 0x9d002bc8 0x10 build/PIC32/production/PIC32MX534F064H.o + 0x9d002bc9 mcuSPIWait + +.text.OpenCoreTimer + 0x9d002bd8 0xc + .text.OpenCoreTimer + 0x9d002bd8 0xc c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral.a(open_core_timer_lib.o) + 0x9d002bd8 OpenCoreTimer + +.text.ReadCoreTimer + 0x9d002be4 0x8 + .text.ReadCoreTimer + 0x9d002be4 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral.a(read_core_timer_lib.o) + 0x9d002be4 ReadCoreTimer + +.text.INTDisableInterrupts + 0x9d002bec 0x8 + .text.INTDisableInterrupts + 0x9d002bec 0x8 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libmchp_peripheral_32MX534F064H.a(int_disable_interrupts_lib.o) + 0x9d002bec INTDisableInterrupts + +.text._on_reset + 0x9d002bf4 0x4 + .text._on_reset + 0x9d002bf4 0x4 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-on-reset.o) + 0x9d002bf5 _on_reset + +.text._on_bootstrap + 0x9d002bf8 0x4 + .text._on_bootstrap + 0x9d002bf8 0x4 c:/program files (x86)/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/size/mips16/no-float\libpic32.a(default-on-bootstrap.o) + 0x9d002bf9 _on_bootstrap diff --git a/software/front/US_BootLoader.X/funclist b/software/front/US_BootLoader.X/funclist new file mode 100644 index 0000000..f6d671a --- /dev/null +++ b/software/front/US_BootLoader.X/funclist @@ -0,0 +1,66 @@ +_USB_CD_Ptr: MEDIUMCONST, 32536 0 4 +_sd001: MEDIUMCONST, 32542 0 52 +_IOInit: CODE, 9550 0 18 +_USBCtrlTrfInHandler: CODE, 9232 0 58 +_IronInit: CODE, 9478 0 26 +_USBProtocolResetHandler: CODE, 8744 0 86 +_ClearArray: CODE, 9528 0 22 +_IOTasks: CODE, 9504 0 24 +_ClassReqHandler: MEDIUMCONST, 32540 0 2 +_ShowChar: CODE, 7370 0 188 +_sd002: MEDIUMCONST, 32635 0 38 +_USBStdGetDscHandler: CODE, 6722 0 226 +_main: CODE, 5146 0 686 +_USBErrorHandler: CODE, 9612 0 4 +_cfg01: MEDIUMCONST, 32594 0 41 +_Irons: MEDIUMCONST, 32444 0 76 +_USBStdFeatureReqHandler: CODE, 7718 0 154 +_ISRHigh: CODE, 8 0 5138 +_USBCtrlTrfSetupHandler: CODE, 8830 0 84 +_PID: CODE, 346 0 1788 +_s_off: MEDIUMCONST, 32754 0 3 +_HIDGetReportHandler: CODE, 9626 0 2 +_USBDriverService: CODE, 8658 0 86 +_HIDInitEP: CODE, 9332 0 36 +_USBCtrlTrfOutHandler: CODE, 9112 0 62 +_ISRlow: CODE, 24 0 318 +_HIDSetReportHandler: CODE, 9624 0 2 +_USBCtrlEPServiceComplete: CODE, 8020 0 132 +_USBSuspend: CODE, 9604 0 8 +_MenuInit: CODE, 8568 0 90 +__initialization: CODE, 9048 0 54 +_USBStdSetCfgHandler: CODE, 8914 0 68 +_USBStdGetStatusHandler: CODE, 7872 0 148 +_USBWakeFromSuspend: CODE, 9568 0 14 +_PIDInit: CODE, 9452 0 26 +_USBCheckBusStatus: CODE, 9396 0 28 +_device_dsc: MEDIUMCONST, 32729 0 18 +_s_on: MEDIUMCONST, 32757 0 3 +_numbers: MEDIUMCONST, 32520 0 10 +_s_standby: MEDIUMCONST, 32760 0 3 +_LoadPars: CODE, 9290 0 42 +_USBCtrlTrfRxService: CODE, 8380 0 98 +_USBCtrlTrfTxService: CODE, 6948 0 212 +_CloseI2C: CODE, 9620 0 4 +_s_auto: MEDIUMCONST, 32751 0 3 +_ProcessIO: CODE, 5832 0 600 +_s_standby_hot: MEDIUMCONST, 32763 0 3 +_HIDRxReport: CODE, 8276 0 104 +_USBModuleEnable: CODE, 9582 0 12 +_MenuTasks: CODE, 2134 0 1750 +_USB_SD_Ptr: MEDIUMCONST, 32530 0 6 +_DisplayInt: CODE, 6432 0 290 +_USBPrepareForNextSetupTrf: CODE, 9594 0 10 +_DisplayData: CODE, 8982 0 66 +_hid_rpt01: MEDIUMCONST, 32673 0 29 +___wmul: CODE, 9174 0 58 +_sd000: MEDIUMCONST, 32747 0 4 +_HIDTxReport: CODE, 8478 0 90 +_USBCtrlEPService: CODE, 8152 0 124 +_parText: MEDIUMCONST, 32702 0 27 +_USBStallHandler: CODE, 9368 0 28 +_USB_SOF_Handler: CODE, 9616 0 4 +_USBCheckHIDRequest: CODE, 7160 0 210 +_USBCheckStdRequest: CODE, 7558 0 160 +_OpenI2C: CODE, 9424 0 28 +Total: 13788 \ No newline at end of file diff --git a/software/front/US_BootLoader.X/io.c b/software/front/US_BootLoader.X/io.c new file mode 100644 index 0000000..915f3e6 --- /dev/null +++ b/software/front/US_BootLoader.X/io.c @@ -0,0 +1,120 @@ +#define _IO_C + +#include +#include "typedefs.h" +#include "mcu.h" +#include "io.h" +#include "crc.h" +#include "usb/usb.h" +#include "usb/usb_driver.h" +#include "usb/usb_function_hid.h" + +#define TXP (*((USBPacket *)USBTxBuffer)) +#define RXP (*((USBPacket *)USBRxBuffer)) + +#define IO_IDLE 0 +#define IO_BUSY 1 + +static UINT8 IO_STATUS; + +typedef enum +{ + DEV_GET_INFO = 0x60, + DEV_GET_OPERATING_MODE = 0x61, + DEV_RESET = 0x62, + + BL_GET_INFO = 0xE0, + BL_ERASE_FLASH = 0xE1, + BL_PROGRAM_FLASH = 0xE2, + BL_READ_CRC = 0xE3, + BL_JUMP_TO_APP = 0xE4, + BL_PROGRAM_COMPLETE = 0xE5 +}T_COMMANDS; + +volatile static int Starting; + +void ProcessIO(); +UINT16 CalculateCRC(UINT16 scrc, UINT8 *data, UINT32 len); + + +void IOInit(){ + Starting=1; + USBDriverInit(); + IO_STATUS=IO_IDLE; + RXP.Command=0; + USBOutHandle = HIDRxPacket(HID_EP, (char *)&RXP, 64); +} + +void IOTasks(){ + USBDeviceTasks(); + if((USBDeviceState < CONFIGURED_STATE)||(USBSuspendControl==1)) return; + ProcessIO(); // This is where all the actual bootloader related data transfer/self programming takes place +} + +void ProcessIO(){ + if(IO_STATUS == IO_IDLE){ + if(!HIDRxHandleBusy(USBOutHandle)){ + IO_STATUS = IO_BUSY; + } + } + if(IO_STATUS == IO_BUSY){ + if(!HIDTxHandleBusy(USBInHandle)){ + UINT8 Secured; + memmove(&RXP.RawData[4], &RXP.RawData[1], 63); + Secured = (RXP.Secure.Key == 0x43211234); + TXP.Command = RXP.Command; + TXP.Data[0] = 0xFF; + switch(RXP.Command){ + case DEV_GET_INFO: + TXP.DevInfo.DevID = DEVICE_ID; + TXP.DevInfo.VerMin = DEVICE_MINOR_VERSION; + TXP.DevInfo.VerMaj = DEVICE_MAJOR_VERSION; + break; + case DEV_GET_OPERATING_MODE: + TXP.Data[0] = 0x10; + break; + case BL_GET_INFO: + TXP.Data[0] = BOOTLOADER_MINOR_VERSION; + TXP.Data[1] = BOOTLOADER_MAJOR_VERSION; + break; + case BL_ERASE_FLASH: + if(Secured)TXP.Data[0] = mcuEraseFlash(); + break; + case BL_PROGRAM_FLASH: + if(Secured)TXP.Data[0] = mcuWriteFlashRecord(RXP.Secure.Data); + break; + case BL_PROGRAM_COMPLETE: + if(Secured)TXP.Data32[0] = mcuProgramComplete(); + break; + case BL_READ_CRC: + TXP.ProgCRC.CRC = CalculateCRC(0, (void *)RXP.ProgCRC.Addr, RXP.ProgCRC.Len); + break; + case DEV_RESET: + case BL_JUMP_TO_APP: + TXP.Command = 0; + mcuDisableInterrupts(); + mcuDisableUSB(); + if(RXP.Command == DEV_RESET){ + mcuReset(); + } + else{ + mcuReset(); + //mcuJumpToApp(); + } + break; + default: + TXP.Command = 0; + break; + } + RXP.Command = 0; + if(TXP.Command != 0){ + memmove(&TXP.RawData[1], &TXP.RawData[4], 63); + USBInHandle = HIDTxPacket(HID_EP, (char *)&TXP, 64); + } + IO_STATUS=IO_IDLE; + USBOutHandle = HIDRxPacket(HID_EP, (char *)&RXP, 64); + } + } +} + +#undef _IO_C diff --git a/software/front/US_BootLoader.X/io.h b/software/front/US_BootLoader.X/io.h new file mode 100644 index 0000000..fdade18 --- /dev/null +++ b/software/front/US_BootLoader.X/io.h @@ -0,0 +1,68 @@ +/* + * File: io.h + * Author: Sparky + * + * Created on ?????, 2013, ??? 28, 23:18 + */ + +#ifndef IO_H +#define IO_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include "typedefs.h" + +typedef union { + UINT8 RawData[68]; + struct { + UINT8 Command; + UINT8 stub[3]; + union { + UINT8 Data[64]; + UINT16 Data16[32]; + UINT32 Data32[16]; + struct { + UINT32 DevID; + UINT8 VerMin; + UINT8 VerMaj; + }DevInfo; + struct { + UINT32 Addr; + UINT32 Len; + UINT32 CRC; + }ProgCRC; + struct { + UINT32 Key; + UINT8 Data[60]; + }Secure; + }; + }; +}USBPacket; + + +#ifndef _IO_C +#define IOC_EXTERN extern +extern volatile USBPacket RXP; +extern volatile USBPacket TXP; + +#else +#define IOC_EXTERN +#endif + +IOC_EXTERN void IOInit(); +IOC_EXTERN void IOTasks(); + + +#undef IOC_EXTERN + + +#ifdef __cplusplus +} +#endif + +#endif /* IO_H */ + diff --git a/software/front/US_BootLoader.X/isr_old.c b/software/front/US_BootLoader.X/isr_old.c new file mode 100644 index 0000000..c5ed485 --- /dev/null +++ b/software/front/US_BootLoader.X/isr_old.c @@ -0,0 +1,700 @@ +#define _ISR_C +#include +#include "typedefs.h" +#include "mcu_pic18f4550.h" +#include "isr.h" +#include "mul.h" +#include "main.h" +#include "disp.h" +#include "heater.h" +#include "iron.h" +#include "PID.h" + +volatile UINT8 ISRStep=0; +volatile UINT8 ADCStep=0; +volatile UINT8 ISRTicks=1; //increased on every mains period + +volatile ADCDataS ADCData; + +volatile UINT8 I2CStep=0; +volatile I2CDataS I2CData; + +volatile SUINT32 PWM; + +volatile UINT8 PHEATER; + +volatile SUINT16 CTemp; +volatile SUINT16 CRTemp; +volatile SUINT16 CTTemp; + +volatile SUINT16 TAvg; +volatile SUINT16 TAvgF; +volatile SUINT16 TBuff[8]; +volatile UINT8 TBPos=0; +volatile SUINT16 TSlope; +volatile SUINT16 SlopeBuff[8]; +volatile UINT8 SBPos=0; +volatile SUINT16 TAvgS; +volatile SUINT16 Delta[2]; + +volatile UINT8 Starting = 1; + +//volatile static UINT16 ADCData[5]={0,0,0,0,0}; + + +void interrupt ISRHigh(){ + static UINT8 b; + static SUINT16 w; + if(PIR1bits.TMR1IF){ + ISRStep=0; + TMR1H=T_PER.ui8[1]; + TMR1L=T_PER.ui8[0]; + PIR1bits.TMR1IF=0; + } + if(PIR2bits.CMIF && PIE2bits.CMIE){ + if(!CMCONbits.C1OUT){ + ISRStep=0; + TMR1H=T_PER.ui8[1]; + TMR1L=T_PER.ui8[0]; + COMPREF=3; + } + else{ + COMPREF=2; + } + b=CMCON; + PIR2bits.CMIF=0; + } + switch(ISRStep){ + case 0: + PIE2bits.CMIE=0; + ADCON1bits.VCFG=0b00; //ADC reference = Vdd + TMR0H=(~_timer_us(100))>>8; + TMR0L=(~_timer_us(100)) & 0x00FF; + T0CONbits.TMR0ON=1; + break; + case 1: + INTCONbits.TMR0IF=0; + T0CONbits.TMR0ON=0; + _readADC(ADCH_ID); + break; + case 2: + ADCData.VID.ui16=ADCRESULT; + PIR1bits.ADIF=0; + ADCON1bits.VCFG=0b01; //ADC reference = Vref + TMR0H=(~_timer_us(100))>>8; + TMR0L=(~_timer_us(100)) & 0x00FF; + T0CONbits.TMR0ON=1; + break; + case 3: + INTCONbits.TMR0IF=0; + T0CONbits.TMR0ON=0; + _readADC(ADCH_RT); + break; + case 4: + ADCData.VRT.ui16-=(ADCData.VRT.ui16>>2); + ADCData.VRT.ui16+=ADCRESULT; + PIR1bits.ADIF=0; + TMR0H=(~_timer_us(800))>>8; + TMR0L=(~_timer_us(800)) & 0x00FF; + T0CONbits.TMR0ON=1; + HEATER=0; + break; + case 5: + //LATB3=0; + INTCONbits.TMR0IF=0; + T0CONbits.TMR0ON=0; + _readADC(ADCH_TEMP); + break; + case 6: + //LATB3=1; + ADCData.VTEMP[ADCStep].ui16=ADCRESULT; + PIR1bits.ADIF=0; + + if(ADCStep & 1){ + PIR1bits.CCP1IF=1; //CCP1 interrupt is used to run PID from lower priority ISR + } + else{ + PWM.ui32+=PIDDuty.ui32; + PHEATER=(PWM.ui8[3]!=0); + PWM.ui8[3]=0; + } + + ADCStep++; + ADCStep&=3; + if((ADCStep & 2)==0){ //offset or TC measurement + CBAND=1; + I2CData.Current.ui16=0; + I2CData.Offset.ui16=0; + } + if(ADCStep & 1){ //heater resistance measurement + CHSEL=0; + I2CData.Gain.ui16=HR_GAIN; + if(ADCStep & 2){ + CBAND=HR_CBAND; + I2CData.Current.ui16=HR_CURRENT; + I2CData.Offset.ui16=ADCData.VTEMP[1].ui16; //exclude offset from measurement + } + }else //TC or resistive sensor measurement + { + CHSEL=IronPars.Channel; + I2CData.Gain.ui16=IronPars.Gain.ui16; + if(ADCStep & 2){ + CBAND=IronPars.CBand; + I2CData.Current.ui16=IronPars.Current.ui16; + I2CData.Offset.ui16=ADCData.VTEMP[0].ui16+IronPars.Offset.ui16; + } + } + _I2CStart; + HEATER=PHEATER; + _showChar(1); + TMR0H=C_PER.i8[1]; + TMR0L=C_PER.i8[0]; + T0CONbits.TMR0ON=1; + break; + case 7: + INTCONbits.TMR0IF=0; + T0CONbits.TMR0ON=0; + _showChar(2); + TMR0H=C_PER.i8[1]; + TMR0L=C_PER.i8[0]; + T0CONbits.TMR0ON=1; + break; + case 8: + INTCONbits.TMR0IF=0; + T0CONbits.TMR0ON=0; + _showChar(0); + _readADC(ADCH_VIN); + break; + case 9: + ADCData.VIN.ui16=ADCRESULT; + PIR1bits.ADIF=0; + b=CMCON; + PIR2bits.CMIF=0; + PIE2bits.CMIE=1; + _showChar(3); + TMR0H=C_PER.i8[1]; + TMR0L=C_PER.i8[0]; + T0CONbits.TMR0ON=1; + break; + case 10: + _showChar(0); + INTCONbits.TMR0IF=0; + T0CONbits.TMR0ON=0; + break; + } + //if(PIR1bits.ADIF){ + // ADRES=ADRES; + //PIR1bits.ADIF=0; + //} + if(ISRStep<255)ISRStep++; +} + + +void interrupt low_priority ISRlow(){ + volatile static SUINT16 w; + volatile static SUINT32 dw; + volatile static SUINT32 pdt; + //LATB3=!LATB3; + if(PIR1bits.SSPIF){ + switch(I2CStep){ + //Set current pot position + case 0: + SSPCON2bits.SEN=1; + break; + case 1: + SSPBUF=CPOT; + break; + case 2: + SSPBUF=I2CData.Current.ui8[1] & 1; + break; + case 3: + SSPBUF=I2CData.Current.ui8[0]; + break; + case 4: + SSPCON2bits.PEN=1; + break; + + //Set gain pot position + case 5: + SSPCON2bits.SEN=1; + break; + case 6: + SSPBUF=GAINPOT; + break; + case 7: + SSPBUF=I2CData.Gain.ui8[1] & 1; + break; + case 8: + SSPBUF=I2CData.Gain.ui8[0]; + break; + case 9: + SSPCON2bits.PEN=1; + break; + + //Set offset + case 10: + SSPCON2bits.SEN=1; + break; + case 11: + SSPBUF=OFFADC; + break; + case 12: + SSPBUF=0b01011000; + break; + case 13: + w.ui16=I2CData.Offset.ui16; + w.ui16<<=6; + SSPBUF=w.ui8[1]; + break; + case 14: + w.ui16=I2CData.Offset.ui16; + w.ui16<<=6; + SSPBUF=w.ui8[0]; + break; + case 15: + SSPCON2bits.PEN=1; + break; + default: + I2CStep--; + break; + } + I2CStep++; + PIR1bits.SSPIF=0; + } + + if(PIR1bits.CCP1IF){ + LATB3=0; + PIR1bits.CCP1IF=0; + +/**** GET ROOM TEMPERATURE **********************************************************/ + GIE=0; + w.ui16=ADCData.VRT.ui16; + GIE=1; + w.i16>>=2; + w.i16-=125; + mul16s8u(dw,w,182); + CRTemp.i16=dw.mi16; +/************************************************************************************/ + +/**** GET AND NORMALISE IRON TEMPRATURE *********************************************/ + if(IronPars.Type){ + GIE=0; + w.ui16=ADCData.VTEMP[2].ui16; + GIE=1; + } + else + { + GIE=0; + w.ui16=ADCData.VTEMP[0].ui16; + GIE=1; + } + mul16s16u(dw,IronPars.SoftGain,w); + dw.hi24>>=2; + dw.mi16+=IronPars.SoftOffset.i16; + if(IronPars.Type==0)dw.mi16+=CRTemp.i16; + if(dw.mi16<0)dw.mi16=0; + CTemp.ui16=dw.mi16; +/************************************************************************************/ + + if(Starting){ + TAvg.ui16=0; + for(w.i8[0]=0;w.ui8[0]<4;w.ui8[0]++){ + TAvg.ui16+=CTemp.ui16; + TBuff[w.ui8[0]].ui16=CTemp.ui16; + } + TAvgF.ui16=TAvg.ui16; + TSlope.ui16=TAvg.ui16>>2; + for(w.i8[0]=0;w.ui8[0]<4;w.ui8[0]++){ + SlopeBuff[w.ui8[0]].ui16=TSlope.ui16; + } + TSlope.ui16=0; + Starting=0; + } + + TAvg.ui16-=TBuff[TBPos].ui16; + TAvg.ui16+=CTemp.ui16; + TBuff[TBPos].ui16=CTemp.ui16; + TBPos++; + TBPos&=3; + + TAvgF.ui16-=TAvgF.ui16>>2; + TAvgF.ui16+=CTemp.ui16; + + SlopeBuff[SBPos].ui16=TAvg.ui16>>2; + SBPos++; + SBPos&=3; + + w.i16=TSlope.i16; + if(w.i16<0)w.i16=-w.i16; + w.ui16>>=2; + if(TSlope.i16<0)w.i16=-w.i16; + TSlope.i16-=w.i16; + TSlope.i16-=SlopeBuff[(SBPos-1)&3].i16; + TSlope.i16+=SlopeBuff[SBPos].i16; + + w.i16=TSlope.i16; + if(w.i16<0)w.i16=-w.i16; + w.ui16>>=2; + mul16u8u(dw,w,IronPars.PID_DGain); + dw.lui24>>=2; + if(TSlope.i16<0)dw.i16[0]=-dw.i16[0]; + + Delta[1].i16=Delta[0].i16; + Delta[0].i16=CTTemp.i16; + Delta[0].i16-=(TAvgF.i16>>2); + Delta[0].i16-=dw.i16[0]; + Delta[0].i16<<=2; + + pdt.ui32=PIDDuty.ui32; + + mul16s16u(dw, Delta[0], IronPars.PID_K1); + pdt.i32+=dw.i32; + mul16s16u(dw, Delta[1], IronPars.PID_K2); + pdt.i32-=dw.i32; + + if(pdt.i32<0){ + pdt.i32=0; + } + else{ + if(pdt.ui32>0x00FFFFFF){ + pdt.ui32=0x00FFFFFF; + } + w.i16=-(Delta[0].i16>>2); + if(w.i16<=0){ + if(w.i16<-200)pdt.ui32=0x00FFFFFF; + } + else{ + w.i16<<=4; + if(w.i16>255)w.ui8[0]=255; + w.ui8[0]=~w.ui8[0]; + if(pdt.ui8[2]>w.ui8[0]){ + pdt.ui8[2]=w.ui8[0]; + pdt.ui16[0]=0xFFFF; + } + } + } + GIE=0; + PIDDuty.ui32=pdt.ui32; + GIE=1; +/* if(PWM.i32<0){ + PWM.i32=0; + PWMCNT.lui24=0; + } + else{ + SUINT16 w; + if(PWM.ui32>0x00FFFFFF){ + PWM.ui32=0x00FFFFFF; + } + w.i16=FPAVGT.i16-PTT.i16; + if(w.i16<0){ + if(w.i16<-200)PWM.ui32=0x00FFFFFF; + } + else{ + w.i16<<=4; + if(w.i16>255)w.ui8[0]=255; + w.ui8[0]=~w.ui8[0]; + if(PWM.ui8[2]>w.ui8[0]){ + PWM.ui8[2]=w.ui8[0]; + PWM.ui16[0]=0xFFFF; + } + w.i16=FPAVGT.i16-PTT.i16; + } + if(CTTemp==0)PWM.ui32=0; + PWMCNT.ui32+=PWM.ui32; + PHEATER=(PWMCNT.ui8[3]!=0); + if(w.i16>40)PHEATER=0; + if(CTemp>460)PHEATER=0; + } + PWMCNT.ui8[3]=0; +*/ + + +/* SUINT16 w; + if(PWM.ui32>0x00FFFFFF){ + PWM.ui32=0x00FFFFFF; + } + w.i16=FPAVGT.i16-PTT.i16; + if(w.i16<0){ + if(w.i16<-200)PWM.ui32=0x00FFFFFF; + } + else{ + w.i16<<=4; + if(w.i16>255)w.ui8[0]=255; + w.ui8[0]=~w.ui8[0]; + if(PWM.ui8[2]>w.ui8[0]){ + PWM.ui8[2]=w.ui8[0]; + PWM.ui16[0]=0xFFFF; + } + w.i16=FPAVGT.i16-PTT.i16; + } + if(CTTemp==0)PWM.ui32=0; + PWMCNT.ui32+=PWM.ui32; + PHEATER=(PWMCNT.ui8[3]!=0); + if(w.i16>40)PHEATER=0; + if(CTemp>460)PHEATER=0; +*/ + + + + + + + +/* FPAVGT.i16=PAVGT.i16+dw.i16[0]; + Delta[1].i16=Delta[0].i16; + Delta[0].i16=(PTT.i16-FPAVGT.i16); + if(Delta[0].i16<0)Delta[0].i16=-Delta[0].i16; + Delta[0].i16<<=2; + if(PTT.i16>ADC_AVG; + for(SBPos=1;SBPos<(1<>ADC_AVG); + TempAVG2.ui16+=ADVal.Val; + TBPos++; + TBPos&=((1<>ADC_AVG; + SBPos++; + SBPos&=((1<>(ADC_AVG+1); + w.i16=TSlope.i16; + if(w.i16<0)w.i16=-w.i16; + w.i16>>=2; + if(TSlope.i16<0)w.i16=-w.i16; + TSlope.i16-=w.i16; + TSlope.i16+=SlopeBuff[(SBPos-1)&((1<>ADC_AVG; + PAVGT.ui16=TempAVG2.ui16>>ADC_AVG; + PTT.ui16=CTTemp; + PTT.ui16<<=2; + + w.i16=TSlope.i16; + if(w.i16<0)w.i16=-w.i16; + w.i16>>=2; + dw.ui16[1]=0; + dw.ui16[0]=w.ui8[0]*PIDDGAIN; + dw.mui16+=w.ui8[1]*PIDDGAIN; + dw.lui24>>=2; + if(TSlope.i16<0)dw.i16[0]=-dw.i16[0]; + + FPAVGT.i16=PAVGT.i16+dw.i16[0]; + Delta[1].i16=Delta[0].i16; + Delta[0].i16=(PTT.i16-FPAVGT.i16); + if(Delta[0].i16<0)Delta[0].i16=-Delta[0].i16; + Delta[0].i16<<=2; + if(PTT.i160x00FFFFFF){ + PWM.ui32=0x00FFFFFF; + } + w.i16=FPAVGT.i16-PTT.i16; + if(w.i16<0){ + if(w.i16<-200)PWM.ui32=0x00FFFFFF; + } + else{ + w.i16<<=4; + if(w.i16>255)w.ui8[0]=255; + w.ui8[0]=~w.ui8[0]; + if(PWM.ui8[2]>w.ui8[0]){ + PWM.ui8[2]=w.ui8[0]; + PWM.ui16[0]=0xFFFF; + } + w.i16=FPAVGT.i16-PTT.i16; + } + if(CTTemp==0)PWM.ui32=0; + PWMCNT.ui32+=PWM.ui32; + PHEATER=(PWMCNT.ui8[3]!=0); + if(w.i16>40)PHEATER=0; + if(CTemp>460)PHEATER=0; + } + PWMCNT.ui8[3]=0; + } + ISRTicks++; + break; + default: + LATC=8; + IND2=0; + IND1=0; + HEATER=0; + break; + } + ISRStep++; +}*/ + diff --git a/software/front/US_BootLoader.X/l.obj b/software/front/US_BootLoader.X/l.obj new file mode 100644 index 0000000..40ab8b6 Binary files /dev/null and b/software/front/US_BootLoader.X/l.obj differ diff --git a/software/front/US_BootLoader.X/main.c b/software/front/US_BootLoader.X/main.c new file mode 100644 index 0000000..a52f0ff --- /dev/null +++ b/software/front/US_BootLoader.X/main.c @@ -0,0 +1,101 @@ +/* + * File: main.c + * Author: Sparky + * Compiler: Microchip XC8 1.12 + * + * Created on ??????, 2013, ?????? 5, 3:15 + */ +#define _MAIN_C + +#include "mcu.h" +#include "usb/usb.h" +#include "usb/usb_function_hid.h" +#include "io.h" +#include "OLED.h" + +UINT8 OLED; + +void displayTasts(void); + +void main(void){ + int i; + mcuInit(); + + if(((B1 == 0) || (B3 == 0)) && (NVMDATA != 0x6193471A)){ + if(mcuValidAppPresent() == 1)mcuJumpToApp(); + } + NVMDATA = 0xFFFFFFFF; + + OLED=1; //detect OLED + i=20; + while(i){ + i--; + SDISDO_IO; + SDO_OUT=1; + _delay_ms(1); + if(SDI_IN!=1)break; + SDO_OUT=0; + _delay_ms(1); + if(SDI_IN!=0)break; + SDISDO_OI; + SDI_OUT=1; + _delay_ms(1); + if(SDO_IN!=1)break; + SDI_OUT=0; + _delay_ms(1); + if(SDO_IN!=0)break; + } + SDI_OUT=0; + SDO_OUT=0; + SDISDO_OO; + if(i)OLED=0; + + if(OLED){ + mcuSPIOpen(); + OLEDInit(); + } + + IOInit(); + while(1){ + displayTasts(); + IOTasks(); + } +} + +void displayTasts(void){ + volatile static int CT; + volatile static int CTT; + int i; + + CT++; + + if(!OLED){ + i=IND1; + IND1=IND2; + IND2=IND3; + IND3=i; + } + if((CT & 4095) == 4095){ + CTT++; + if(OLED){ + i=128; + while(i--){ + OLEDBUFF.B[3][i]=((CTT+i) & 8)?0xFF:0; + OLEDBUFF.B[4][i]=~OLEDBUFF.B[3][i]; + } + OLEDUpdate(); + } + else{ + i=LEDA; + LEDA=LEDB; + LEDB=LEDC; + LEDC=LEDD; + LEDD=LEDE; + LEDE=LEDF; + LEDF=LEDG; + LEDG=i; + } + } +} + +#undef _MAIN_C \ No newline at end of file diff --git a/software/front/US_BootLoader.X/main.err b/software/front/US_BootLoader.X/main.err new file mode 100644 index 0000000..d327c91 --- /dev/null +++ b/software/front/US_BootLoader.X/main.err @@ -0,0 +1 @@ +Warning[2058] C:\Users\Sparky\Desktop\MyProjects\Electronics\BK3000LF\software\front\BK3000LF.X\main.c 556 : call of function without prototype diff --git a/software/front/US_BootLoader.X/make2468-1.bat b/software/front/US_BootLoader.X/make2468-1.bat new file mode 100644 index 0000000..2399480 --- /dev/null +++ b/software/front/US_BootLoader.X/make2468-1.bat @@ -0,0 +1,2 @@ +@echo off +fixDeps build/PIC18_XC8/production/usb/hid.p1.d -rsi "C:\Program Files (x86)\Microchip\xc8\v1.20\bin"../ diff --git a/software/front/US_BootLoader.X/map.map b/software/front/US_BootLoader.X/map.map new file mode 100644 index 0000000..65335da --- /dev/null +++ b/software/front/US_BootLoader.X/map.map @@ -0,0 +1,42 @@ +MPLINK 4.46, Linker +Linker Error Map File - Created Tue Feb 05 20:12:02 2013 + +*Warning* - This is only a partial map file due to a link time error. + Only sections which were allocated prior to the error are shown below. + +CODEPAGES: + Memory Start End Section Address Size(Bytes) + --------- --------- --------- --------- --------- --------- + page 0x0000 0x3fff + + idlocs 0x0000 0x0007 + + config 0x0000 0x000d + + devid 0xfffe 0xffff + + eedata 0x0000 0x00ff + + +SHAREBANKS: + +DATABANKS: + Memory Start End Section Address Size(Bytes) + --------- --------- --------- --------- --------- --------- + gpr0 0x0060 0x00ff + + gpr1 0x0100 0x01ff + + gpr2 0x0200 0x02ff + + sfr15 0x0f38 0x0f5f + + +ACCESSBANKS: + Memory Start End Section Address Size(Bytes) + --------- --------- --------- --------- --------- --------- + accessram 0x0000 0x005f + + accesssfr 0x0f60 0x0fff + + diff --git a/software/front/US_BootLoader.X/mcu.h b/software/front/US_BootLoader.X/mcu.h new file mode 100644 index 0000000..902f66f --- /dev/null +++ b/software/front/US_BootLoader.X/mcu.h @@ -0,0 +1,29 @@ +/* + * File: mcu.h + * Author: Sparky + * + * Created on ?????, 2013, ??? 31, 0:00 + */ + +#ifndef MCU_H +#define MCU_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#ifdef __32MX534F064H__ +#include "PIC32MX534F064H.h" +#endif + + + + +#ifdef __cplusplus +} +#endif + +#endif /* MCU_H */ + diff --git a/software/front/US_BootLoader.X/nbproject/Makefile-PIC32.mk b/software/front/US_BootLoader.X/nbproject/Makefile-PIC32.mk new file mode 100644 index 0000000..5c36f7a --- /dev/null +++ b/software/front/US_BootLoader.X/nbproject/Makefile-PIC32.mk @@ -0,0 +1,247 @@ +# +# Generated Makefile - do not edit! +# +# Edit the Makefile in the project folder instead (../Makefile). Each target +# has a -pre and a -post target defined where you can add customized code. +# +# This makefile implements configuration specific macros and targets. + + +# Include project Makefile +ifeq "${IGNORE_LOCAL}" "TRUE" +# do not include local makefile. User is passing all local related variables already +else +include Makefile +# Include makefile containing local settings +ifeq "$(wildcard nbproject/Makefile-local-PIC32.mk)" "nbproject/Makefile-local-PIC32.mk" +include nbproject/Makefile-local-PIC32.mk +endif +endif + +# Environment +MKDIR=gnumkdir -p +RM=rm -f +MV=mv +CP=cp + +# Macros +CND_CONF=PIC32 +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +IMAGE_TYPE=debug +OUTPUT_SUFFIX=elf +DEBUGGABLE_SUFFIX=elf +FINAL_IMAGE=dist/${CND_CONF}/${IMAGE_TYPE}/US_BootLoader.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} +else +IMAGE_TYPE=production +OUTPUT_SUFFIX=hex +DEBUGGABLE_SUFFIX=elf +FINAL_IMAGE=dist/${CND_CONF}/${IMAGE_TYPE}/US_BootLoader.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} +endif + +# Object Directory +OBJECTDIR=build/${CND_CONF}/${IMAGE_TYPE} + +# Distribution Directory +DISTDIR=dist/${CND_CONF}/${IMAGE_TYPE} + +# Source Files Quoted if spaced +SOURCEFILES_QUOTED_IF_SPACED=usb/usb_descriptors.c usb/usb_device.c usb/usb_driver.c usb/usb_function_hid.c main.c io.c PIC32MX534F064H.c crc.c OLED.c + +# Object Files Quoted if spaced +OBJECTFILES_QUOTED_IF_SPACED=${OBJECTDIR}/usb/usb_descriptors.o ${OBJECTDIR}/usb/usb_device.o ${OBJECTDIR}/usb/usb_driver.o ${OBJECTDIR}/usb/usb_function_hid.o ${OBJECTDIR}/main.o ${OBJECTDIR}/io.o ${OBJECTDIR}/PIC32MX534F064H.o ${OBJECTDIR}/crc.o ${OBJECTDIR}/OLED.o +POSSIBLE_DEPFILES=${OBJECTDIR}/usb/usb_descriptors.o.d ${OBJECTDIR}/usb/usb_device.o.d ${OBJECTDIR}/usb/usb_driver.o.d ${OBJECTDIR}/usb/usb_function_hid.o.d ${OBJECTDIR}/main.o.d ${OBJECTDIR}/io.o.d ${OBJECTDIR}/PIC32MX534F064H.o.d ${OBJECTDIR}/crc.o.d ${OBJECTDIR}/OLED.o.d + +# Object Files +OBJECTFILES=${OBJECTDIR}/usb/usb_descriptors.o ${OBJECTDIR}/usb/usb_device.o ${OBJECTDIR}/usb/usb_driver.o ${OBJECTDIR}/usb/usb_function_hid.o ${OBJECTDIR}/main.o ${OBJECTDIR}/io.o ${OBJECTDIR}/PIC32MX534F064H.o ${OBJECTDIR}/crc.o ${OBJECTDIR}/OLED.o + +# Source Files +SOURCEFILES=usb/usb_descriptors.c usb/usb_device.c usb/usb_driver.c usb/usb_function_hid.c main.c io.c PIC32MX534F064H.c crc.c OLED.c + + +CFLAGS= +ASFLAGS= +LDLIBSOPTIONS= + +############# Tool locations ########################################## +# If you copy a project from one host to another, the path where the # +# compiler is installed may be different. # +# If you open this project with MPLAB X in the new host, this # +# makefile will be regenerated and the paths will be corrected. # +####################################################################### +# fixDeps replaces a bunch of sed/cat/printf statements that slow down the build +FIXDEPS=fixDeps + +.build-conf: ${BUILD_SUBPROJECTS} +ifneq ($(INFORMATION_MESSAGE), ) + @echo $(INFORMATION_MESSAGE) +endif + ${MAKE} -f nbproject/Makefile-PIC32.mk dist/${CND_CONF}/${IMAGE_TYPE}/US_BootLoader.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} + +MP_PROCESSOR_OPTION=32MX534F064H +MP_LINKER_FILE_OPTION=,--script="bootloader.ld" +# ------------------------------------------------------------------------------------ +# Rules for buildStep: assemble +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +else +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: assembleWithPreprocess +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +else +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: compile +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +${OBJECTDIR}/usb/usb_descriptors.o: usb/usb_descriptors.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/usb" + @${RM} ${OBJECTDIR}/usb/usb_descriptors.o.d + @${RM} ${OBJECTDIR}/usb/usb_descriptors.o + @${FIXDEPS} "${OBJECTDIR}/usb/usb_descriptors.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_PK3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -mno-float -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/usb/usb_descriptors.o.d" -o ${OBJECTDIR}/usb/usb_descriptors.o usb/usb_descriptors.c + +${OBJECTDIR}/usb/usb_device.o: usb/usb_device.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/usb" + @${RM} ${OBJECTDIR}/usb/usb_device.o.d + @${RM} ${OBJECTDIR}/usb/usb_device.o + @${FIXDEPS} "${OBJECTDIR}/usb/usb_device.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_PK3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -mno-float -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/usb/usb_device.o.d" -o ${OBJECTDIR}/usb/usb_device.o usb/usb_device.c + +${OBJECTDIR}/usb/usb_driver.o: usb/usb_driver.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/usb" + @${RM} ${OBJECTDIR}/usb/usb_driver.o.d + @${RM} ${OBJECTDIR}/usb/usb_driver.o + @${FIXDEPS} "${OBJECTDIR}/usb/usb_driver.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_PK3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -mno-float -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/usb/usb_driver.o.d" -o ${OBJECTDIR}/usb/usb_driver.o usb/usb_driver.c + +${OBJECTDIR}/usb/usb_function_hid.o: usb/usb_function_hid.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/usb" + @${RM} ${OBJECTDIR}/usb/usb_function_hid.o.d + @${RM} ${OBJECTDIR}/usb/usb_function_hid.o + @${FIXDEPS} "${OBJECTDIR}/usb/usb_function_hid.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_PK3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -mno-float -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/usb/usb_function_hid.o.d" -o ${OBJECTDIR}/usb/usb_function_hid.o usb/usb_function_hid.c + +${OBJECTDIR}/main.o: main.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/main.o.d + @${RM} ${OBJECTDIR}/main.o + @${FIXDEPS} "${OBJECTDIR}/main.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_PK3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -mno-float -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/main.o.d" -o ${OBJECTDIR}/main.o main.c + +${OBJECTDIR}/io.o: io.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/io.o.d + @${RM} ${OBJECTDIR}/io.o + @${FIXDEPS} "${OBJECTDIR}/io.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_PK3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -mno-float -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/io.o.d" -o ${OBJECTDIR}/io.o io.c + +${OBJECTDIR}/PIC32MX534F064H.o: PIC32MX534F064H.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/PIC32MX534F064H.o.d + @${RM} ${OBJECTDIR}/PIC32MX534F064H.o + @${FIXDEPS} "${OBJECTDIR}/PIC32MX534F064H.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_PK3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -mno-float -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/PIC32MX534F064H.o.d" -o ${OBJECTDIR}/PIC32MX534F064H.o PIC32MX534F064H.c + +${OBJECTDIR}/crc.o: crc.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/crc.o.d + @${RM} ${OBJECTDIR}/crc.o + @${FIXDEPS} "${OBJECTDIR}/crc.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_PK3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -mno-float -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/crc.o.d" -o ${OBJECTDIR}/crc.o crc.c + +${OBJECTDIR}/OLED.o: OLED.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/OLED.o.d + @${RM} ${OBJECTDIR}/OLED.o + @${FIXDEPS} "${OBJECTDIR}/OLED.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_PK3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -mno-float -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/OLED.o.d" -o ${OBJECTDIR}/OLED.o OLED.c + +else +${OBJECTDIR}/usb/usb_descriptors.o: usb/usb_descriptors.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/usb" + @${RM} ${OBJECTDIR}/usb/usb_descriptors.o.d + @${RM} ${OBJECTDIR}/usb/usb_descriptors.o + @${FIXDEPS} "${OBJECTDIR}/usb/usb_descriptors.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -mno-float -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/usb/usb_descriptors.o.d" -o ${OBJECTDIR}/usb/usb_descriptors.o usb/usb_descriptors.c + +${OBJECTDIR}/usb/usb_device.o: usb/usb_device.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/usb" + @${RM} ${OBJECTDIR}/usb/usb_device.o.d + @${RM} ${OBJECTDIR}/usb/usb_device.o + @${FIXDEPS} "${OBJECTDIR}/usb/usb_device.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -mno-float -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/usb/usb_device.o.d" -o ${OBJECTDIR}/usb/usb_device.o usb/usb_device.c + +${OBJECTDIR}/usb/usb_driver.o: usb/usb_driver.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/usb" + @${RM} ${OBJECTDIR}/usb/usb_driver.o.d + @${RM} ${OBJECTDIR}/usb/usb_driver.o + @${FIXDEPS} "${OBJECTDIR}/usb/usb_driver.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -mno-float -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/usb/usb_driver.o.d" -o ${OBJECTDIR}/usb/usb_driver.o usb/usb_driver.c + +${OBJECTDIR}/usb/usb_function_hid.o: usb/usb_function_hid.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/usb" + @${RM} ${OBJECTDIR}/usb/usb_function_hid.o.d + @${RM} ${OBJECTDIR}/usb/usb_function_hid.o + @${FIXDEPS} "${OBJECTDIR}/usb/usb_function_hid.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -mno-float -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/usb/usb_function_hid.o.d" -o ${OBJECTDIR}/usb/usb_function_hid.o usb/usb_function_hid.c + +${OBJECTDIR}/main.o: main.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/main.o.d + @${RM} ${OBJECTDIR}/main.o + @${FIXDEPS} "${OBJECTDIR}/main.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -mno-float -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/main.o.d" -o ${OBJECTDIR}/main.o main.c + +${OBJECTDIR}/io.o: io.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/io.o.d + @${RM} ${OBJECTDIR}/io.o + @${FIXDEPS} "${OBJECTDIR}/io.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -mno-float -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/io.o.d" -o ${OBJECTDIR}/io.o io.c + +${OBJECTDIR}/PIC32MX534F064H.o: PIC32MX534F064H.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/PIC32MX534F064H.o.d + @${RM} ${OBJECTDIR}/PIC32MX534F064H.o + @${FIXDEPS} "${OBJECTDIR}/PIC32MX534F064H.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -mno-float -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/PIC32MX534F064H.o.d" -o ${OBJECTDIR}/PIC32MX534F064H.o PIC32MX534F064H.c + +${OBJECTDIR}/crc.o: crc.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/crc.o.d + @${RM} ${OBJECTDIR}/crc.o + @${FIXDEPS} "${OBJECTDIR}/crc.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -mno-float -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/crc.o.d" -o ${OBJECTDIR}/crc.o crc.c + +${OBJECTDIR}/OLED.o: OLED.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/OLED.o.d + @${RM} ${OBJECTDIR}/OLED.o + @${FIXDEPS} "${OBJECTDIR}/OLED.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -mno-float -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/OLED.o.d" -o ${OBJECTDIR}/OLED.o OLED.c + +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: compileCPP +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +else +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: link +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +dist/${CND_CONF}/${IMAGE_TYPE}/US_BootLoader.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX}: ${OBJECTFILES} nbproject/Makefile-${CND_CONF}.mk bootloader.ld + @${MKDIR} dist/${CND_CONF}/${IMAGE_TYPE} + ${MP_CC} $(MP_EXTRA_LD_PRE) -mdebugger -D__MPLAB_DEBUGGER_PK3=1 -mprocessor=$(MP_PROCESSOR_OPTION) -Os -mips16 -mno-float -o dist/${CND_CONF}/${IMAGE_TYPE}/US_BootLoader.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} ${OBJECTFILES_QUOTED_IF_SPACED} -mreserve=boot@0x1FC02000:0x1FC02FEF -mreserve=boot@0x1FC02000:0x1FC024FF -Wl,--defsym=__MPLAB_BUILD=1$(MP_EXTRA_LD_POST)$(MP_LINKER_FILE_OPTION),--defsym=__MPLAB_DEBUG=1,--defsym=__DEBUG=1,--defsym=__MPLAB_DEBUGGER_PK3=1,--gc-sections,-Map="${DISTDIR}/${PROJECTNAME}.${IMAGE_TYPE}.map",-s + +else +dist/${CND_CONF}/${IMAGE_TYPE}/US_BootLoader.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX}: ${OBJECTFILES} nbproject/Makefile-${CND_CONF}.mk bootloader.ld + @${MKDIR} dist/${CND_CONF}/${IMAGE_TYPE} + ${MP_CC} $(MP_EXTRA_LD_PRE) -mprocessor=$(MP_PROCESSOR_OPTION) -Os -mips16 -mno-float -o dist/${CND_CONF}/${IMAGE_TYPE}/US_BootLoader.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} ${OBJECTFILES_QUOTED_IF_SPACED} -Wl,--defsym=__MPLAB_BUILD=1$(MP_EXTRA_LD_POST)$(MP_LINKER_FILE_OPTION),--gc-sections,-Map="${DISTDIR}/${PROJECTNAME}.${IMAGE_TYPE}.map",-s + ${MP_CC_DIR}\\xc32-bin2hex dist/${CND_CONF}/${IMAGE_TYPE}/US_BootLoader.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} +endif + + +# Subprojects +.build-subprojects: + + +# Subprojects +.clean-subprojects: + +# Clean Targets +.clean-conf: ${CLEAN_SUBPROJECTS} + ${RM} -r build/PIC32 + ${RM} -r dist/PIC32 + +# Enable dependency checking +.dep.inc: .depcheck-impl + +DEPFILES=$(shell mplabwildcard ${POSSIBLE_DEPFILES}) +ifneq (${DEPFILES},) +include ${DEPFILES} +endif diff --git a/software/front/US_BootLoader.X/nbproject/Makefile-genesis.properties b/software/front/US_BootLoader.X/nbproject/Makefile-genesis.properties new file mode 100644 index 0000000..70d1a57 --- /dev/null +++ b/software/front/US_BootLoader.X/nbproject/Makefile-genesis.properties @@ -0,0 +1,9 @@ +# +#Sun Mar 19 13:06:22 EET 2017 +PIC32.com-microchip-mplab-nbide-toolchainXC32-XC32LanguageToolchain.md5=7c6f696c4b3352f7d84fe1d22087e24a +PIC32.languagetoolchain.version=1.33 +PIC32.languagetoolchain.dir=C\:\\Program Files (x86)\\Microchip\\xc32\\v1.33\\bin +configurations-xml=8df0c7e71525a59405aaaefa8e1a35da +com-microchip-mplab-nbide-embedded-makeproject-MakeProject.md5=86cd07c925781d185dcd90a0ee6d03fc +host.platform=windows +conf.ids=PIC32 diff --git a/software/front/US_BootLoader.X/nbproject/Makefile-impl.mk b/software/front/US_BootLoader.X/nbproject/Makefile-impl.mk new file mode 100644 index 0000000..99873ab --- /dev/null +++ b/software/front/US_BootLoader.X/nbproject/Makefile-impl.mk @@ -0,0 +1,69 @@ +# +# Generated Makefile - do not edit! +# +# Edit the Makefile in the project folder instead (../Makefile). Each target +# has a pre- and a post- target defined where you can add customization code. +# +# This makefile implements macros and targets common to all configurations. +# +# NOCDDL + + +# Building and Cleaning subprojects are done by default, but can be controlled with the SUB +# macro. If SUB=no, subprojects will not be built or cleaned. The following macro +# statements set BUILD_SUB-CONF and CLEAN_SUB-CONF to .build-reqprojects-conf +# and .clean-reqprojects-conf unless SUB has the value 'no' +SUB_no=NO +SUBPROJECTS=${SUB_${SUB}} +BUILD_SUBPROJECTS_=.build-subprojects +BUILD_SUBPROJECTS_NO= +BUILD_SUBPROJECTS=${BUILD_SUBPROJECTS_${SUBPROJECTS}} +CLEAN_SUBPROJECTS_=.clean-subprojects +CLEAN_SUBPROJECTS_NO= +CLEAN_SUBPROJECTS=${CLEAN_SUBPROJECTS_${SUBPROJECTS}} + + +# Project Name +PROJECTNAME=US_BootLoader.X + +# Active Configuration +DEFAULTCONF=PIC32 +CONF=${DEFAULTCONF} + +# All Configurations +ALLCONFS=PIC32 + + +# build +.build-impl: .build-pre + ${MAKE} -f nbproject/Makefile-${CONF}.mk SUBPROJECTS=${SUBPROJECTS} .build-conf + + +# clean +.clean-impl: .clean-pre + ${MAKE} -f nbproject/Makefile-${CONF}.mk SUBPROJECTS=${SUBPROJECTS} .clean-conf + +# clobber +.clobber-impl: .clobber-pre .depcheck-impl + ${MAKE} SUBPROJECTS=${SUBPROJECTS} CONF=PIC32 clean + + + +# all +.all-impl: .all-pre .depcheck-impl + ${MAKE} SUBPROJECTS=${SUBPROJECTS} CONF=PIC32 build + + + +# dependency checking support +.depcheck-impl: +# @echo "# This code depends on make tool being used" >.dep.inc +# @if [ -n "${MAKE_VERSION}" ]; then \ +# echo "DEPFILES=\$$(wildcard \$$(addsuffix .d, \$${OBJECTFILES}))" >>.dep.inc; \ +# echo "ifneq (\$${DEPFILES},)" >>.dep.inc; \ +# echo "include \$${DEPFILES}" >>.dep.inc; \ +# echo "endif" >>.dep.inc; \ +# else \ +# echo ".KEEP_STATE:" >>.dep.inc; \ +# echo ".KEEP_STATE_FILE:.make.state.\$${CONF}" >>.dep.inc; \ +# fi diff --git a/software/front/US_BootLoader.X/nbproject/Makefile-local-PIC32.mk b/software/front/US_BootLoader.X/nbproject/Makefile-local-PIC32.mk new file mode 100644 index 0000000..ead1508 --- /dev/null +++ b/software/front/US_BootLoader.X/nbproject/Makefile-local-PIC32.mk @@ -0,0 +1,37 @@ +# +# Generated Makefile - do not edit! +# +# +# This file contains information about the location of compilers and other tools. +# If you commmit this file into your revision control server, you will be able to +# to checkout the project and build it from the command line with make. However, +# if more than one person works on the same project, then this file might show +# conflicts since different users are bound to have compilers in different places. +# In that case you might choose to not commit this file and let MPLAB X recreate this file +# for each user. The disadvantage of not commiting this file is that you must run MPLAB X at +# least once so the file gets created and the project can be built. Finally, you can also +# avoid using this file at all if you are only building from the command line with make. +# You can invoke make with the values of the macros: +# $ makeMP_CC="/opt/microchip/mplabc30/v3.30c/bin/pic30-gcc" ... +# +SHELL=cmd.exe +PATH_TO_IDE_BIN=C:/Program Files (x86)/Microchip/MPLABX/v3.20/mplab_ide/mplab_ide/modules/../../bin/ +# Adding MPLAB X bin directory to path. +PATH:=C:/Program Files (x86)/Microchip/MPLABX/v3.20/mplab_ide/mplab_ide/modules/../../bin/:$(PATH) +# Path to java used to run MPLAB X when this makefile was created +MP_JAVA_PATH="C:\Program Files (x86)\Microchip\MPLABX\v3.20\sys\java\jre1.8.0_65/bin/" +OS_CURRENT="$(shell uname -s)" +MP_CC="C:\Program Files (x86)\Microchip\xc32\v1.33\bin\xc32-gcc.exe" +MP_CPPC="C:\Program Files (x86)\Microchip\xc32\v1.33\bin\xc32-g++.exe" +# MP_BC is not defined +MP_AS="C:\Program Files (x86)\Microchip\xc32\v1.33\bin\xc32-as.exe" +MP_LD="C:\Program Files (x86)\Microchip\xc32\v1.33\bin\xc32-ld.exe" +MP_AR="C:\Program Files (x86)\Microchip\xc32\v1.33\bin\xc32-ar.exe" +DEP_GEN=${MP_JAVA_PATH}java -jar "C:/Program Files (x86)/Microchip/MPLABX/v3.20/mplab_ide/mplab_ide/modules/../../bin/extractobjectdependencies.jar" +MP_CC_DIR="C:\Program Files (x86)\Microchip\xc32\v1.33\bin" +MP_CPPC_DIR="C:\Program Files (x86)\Microchip\xc32\v1.33\bin" +# MP_BC_DIR is not defined +MP_AS_DIR="C:\Program Files (x86)\Microchip\xc32\v1.33\bin" +MP_LD_DIR="C:\Program Files (x86)\Microchip\xc32\v1.33\bin" +MP_AR_DIR="C:\Program Files (x86)\Microchip\xc32\v1.33\bin" +# MP_BC_DIR is not defined diff --git a/software/front/US_BootLoader.X/nbproject/Makefile-variables.mk b/software/front/US_BootLoader.X/nbproject/Makefile-variables.mk new file mode 100644 index 0000000..a32b7e6 --- /dev/null +++ b/software/front/US_BootLoader.X/nbproject/Makefile-variables.mk @@ -0,0 +1,13 @@ +# +# Generated - do not edit! +# +# NOCDDL +# +CND_BASEDIR=`pwd` +# PIC32 configuration +CND_ARTIFACT_DIR_PIC32=dist/PIC32/production +CND_ARTIFACT_NAME_PIC32=US_BootLoader.X.production.hex +CND_ARTIFACT_PATH_PIC32=dist/PIC32/production/US_BootLoader.X.production.hex +CND_PACKAGE_DIR_PIC32=${CND_DISTDIR}/PIC32/package +CND_PACKAGE_NAME_PIC32=usbootloader.x.tar +CND_PACKAGE_PATH_PIC32=${CND_DISTDIR}/PIC32/package/usbootloader.x.tar diff --git a/software/front/US_BootLoader.X/nbproject/Package-PIC32.bash b/software/front/US_BootLoader.X/nbproject/Package-PIC32.bash new file mode 100644 index 0000000..ea4ed86 --- /dev/null +++ b/software/front/US_BootLoader.X/nbproject/Package-PIC32.bash @@ -0,0 +1,73 @@ +#!/bin/bash -x + +# +# Generated - do not edit! +# + +# Macros +TOP=`pwd` +CND_CONF=PIC32 +CND_DISTDIR=dist +TMPDIR=build/${CND_CONF}/${IMAGE_TYPE}/tmp-packaging +TMPDIRNAME=tmp-packaging +OUTPUT_PATH=dist/${CND_CONF}/${IMAGE_TYPE}/US_BootLoader.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} +OUTPUT_BASENAME=US_BootLoader.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} +PACKAGE_TOP_DIR=usbootloader.x/ + +# Functions +function checkReturnCode +{ + rc=$? + if [ $rc != 0 ] + then + exit $rc + fi +} +function makeDirectory +# $1 directory path +# $2 permission (optional) +{ + mkdir -p "$1" + checkReturnCode + if [ "$2" != "" ] + then + chmod $2 "$1" + checkReturnCode + fi +} +function copyFileToTmpDir +# $1 from-file path +# $2 to-file path +# $3 permission +{ + cp "$1" "$2" + checkReturnCode + if [ "$3" != "" ] + then + chmod $3 "$2" + checkReturnCode + fi +} + +# Setup +cd "${TOP}" +mkdir -p ${CND_DISTDIR}/${CND_CONF}/package +rm -rf ${TMPDIR} +mkdir -p ${TMPDIR} + +# Copy files and create directories and links +cd "${TOP}" +makeDirectory ${TMPDIR}/usbootloader.x/bin +copyFileToTmpDir "${OUTPUT_PATH}" "${TMPDIR}/${PACKAGE_TOP_DIR}bin/${OUTPUT_BASENAME}" 0755 + + +# Generate tar file +cd "${TOP}" +rm -f ${CND_DISTDIR}/${CND_CONF}/package/usbootloader.x.tar +cd ${TMPDIR} +tar -vcf ../../../../${CND_DISTDIR}/${CND_CONF}/package/usbootloader.x.tar * +checkReturnCode + +# Cleanup +cd "${TOP}" +rm -rf ${TMPDIR} diff --git a/software/front/US_BootLoader.X/nbproject/configurations.xml b/software/front/US_BootLoader.X/nbproject/configurations.xml new file mode 100644 index 0000000..3d0aa41 --- /dev/null +++ b/software/front/US_BootLoader.X/nbproject/configurations.xml @@ -0,0 +1,369 @@ + + + + + ../../../PDF/PIC32_DS.pdf + ../../../PDF/PIC32_CONFIG.pdf + ../../../PDF/PIC32_ADC.pdf + ../../../PDF/PIC32_I2C.pdf + ../../../PDF/PIC32_INT.pdf + ../../../PDF/PIC32_USB.pdf + + + + usb/Compiler.h + usb/usb.h + usb/usb_ch9.h + usb/usb_common.h + usb/usb_config.h + usb/usb_device.h + usb/usb_device_local.h + usb/usb_driver.h + usb/usb_function_hid.h + usb/usb_hal.h + usb/usb_hal_pic24f.h + usb/usb_hal_pic32.h + + typedefs.h + io.h + PIC32MX534F064H.h + mcu.h + crc.h + OLED.h + + + bootloader.ld + + + + usb/usb_descriptors.c + usb/usb_device.c + usb/usb_driver.c + usb/usb_function_hid.c + usb/usb_hal_pic24.c + + main.c + io.c + PIC32MX534F064H.c + crc.c + OLED.c + + + Makefile + + + + usb + ../../../PDF + usb_new + + Makefile + + + + localhost + PIC32MX534F064H + + + PICkit3PlatformTool + XC32 + 1.33 + 3 + + + + + + + + + + false + true + + + + + false + + false + + false + false + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/software/front/US_BootLoader.X/nbproject/private/SuppressibleMessageMemo.properties b/software/front/US_BootLoader.X/nbproject/private/SuppressibleMessageMemo.properties new file mode 100644 index 0000000..649a13b --- /dev/null +++ b/software/front/US_BootLoader.X/nbproject/private/SuppressibleMessageMemo.properties @@ -0,0 +1,3 @@ +# +#Sat Jan 05 03:34:07 EET 2013 +pk3/CHECK_4_HIGH_VOLTAGE_VPP=true diff --git a/software/front/US_BootLoader.X/nbproject/private/configurations.xml b/software/front/US_BootLoader.X/nbproject/private/configurations.xml new file mode 100644 index 0000000..807f8c1 --- /dev/null +++ b/software/front/US_BootLoader.X/nbproject/private/configurations.xml @@ -0,0 +1,25 @@ + + + Makefile + 0 + + + :=MPLABComm-USB-Microchip:=<vid>04D8:=<pid>900A:=<rev>0002:=<man>Microchip Technology Inc.:=<prod>PICkit 3:=<sn>DEFAULT_PK3 :=<drv>x:=<xpt>h:=end + C:\Program Files (x86)\Microchip\xc32\v1.33\bin + + place holder 1 + place holder 2 + + + + + true + 0 + 0 + 0 + + + + + + diff --git a/software/front/US_BootLoader.X/nbproject/private/private.properties b/software/front/US_BootLoader.X/nbproject/private/private.properties new file mode 100644 index 0000000..e69de29 diff --git a/software/front/US_BootLoader.X/nbproject/private/private.xml b/software/front/US_BootLoader.X/nbproject/private/private.xml new file mode 100644 index 0000000..67ddd35 --- /dev/null +++ b/software/front/US_BootLoader.X/nbproject/private/private.xml @@ -0,0 +1,11 @@ + + + + + + + file:/C:/Users/Sparky/Desktop/MyProjects/Electronics/UniSolder/software/front/US_BootLoader.X/io.c + file:/C:/Users/Sparky/Desktop/MyProjects/Electronics/UniSolder/software/front/US_BootLoader.X/io.h + + + diff --git a/software/front/US_BootLoader.X/nbproject/project.properties b/software/front/US_BootLoader.X/nbproject/project.properties new file mode 100644 index 0000000..e69de29 diff --git a/software/front/US_BootLoader.X/nbproject/project.xml b/software/front/US_BootLoader.X/nbproject/project.xml new file mode 100644 index 0000000..6146088 --- /dev/null +++ b/software/front/US_BootLoader.X/nbproject/project.xml @@ -0,0 +1,17 @@ + + + com.microchip.mplab.nbide.embedded.makeproject + + + US_Bootloader + 68e9919b-5e52-4fb7-8c57-0194a6578f80 + 0 + c + + h + ISO-8859-1 + + + + + diff --git a/software/front/US_BootLoader.X/typedefs.h b/software/front/US_BootLoader.X/typedefs.h new file mode 100644 index 0000000..5525ec3 --- /dev/null +++ b/software/front/US_BootLoader.X/typedefs.h @@ -0,0 +1,64 @@ +/* + * File: typedefs.h + * Author: Sparky + * + * Created on ??????, 2013, ?????? 19, 0:40 + */ + +#ifndef __TYPEDEFS_H__ +#define __TYPEDEFS_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#if !defined(__PACKED) + #define __PACKED __attribute__((__packed__)) +#endif + +typedef union{ + int i; + unsigned int ui; +}SUINT; + +typedef union{ + INT8 i8; + UINT8 ui8; +}SUINT8; + +typedef union{ + INT16 i16; + UINT16 ui16; + INT8 i8[2]; + UINT8 ui8[2]; +}SUINT16; + +typedef union { + INT32 i32; + UINT32 ui32; + INT16 i16[2] __PACKED; + UINT16 ui16[2] __PACKED; + INT8 i8[4]; + UINT8 ui8[4]; + struct __PACKED + { + UINT8 z1; + INT16 mi16; + UINT8 z2; + }; + struct __PACKED + { + UINT8 z3; + INT16 mui16; + UINT8 z4; + }; +}SUINT32; + +#ifdef __cplusplus +} +#endif + + +#endif /* __TYPEDEFS_H__ */ \ No newline at end of file diff --git a/software/front/US_BootLoader.X/usb/Compiler.h b/software/front/US_BootLoader.X/usb/Compiler.h new file mode 100644 index 0000000..3a3840f --- /dev/null +++ b/software/front/US_BootLoader.X/usb/Compiler.h @@ -0,0 +1,218 @@ +/********************************************************************* + * + * Compiler and hardware specific definitions + * + ********************************************************************* + * FileName: Compiler.h + * Dependencies: None + * Processor: PIC10, PIC12, PIC16, PIC18, PIC24, dsPIC, PIC32 + * Compiler: Microchip C32 v2.02 or higher + * Microchip C30 v3.31 or higher + * Microchip C18 v3.40 or higher + * HI-TECH PICC-18 PRO 9.66 or higher + * HI-TECH PICC PRO V9.81 or higher + * Company: Microchip Technology, Inc. + * + * Software License Agreement + * + * Copyright (C) 2012 Microchip Technology Inc. All rights + * reserved. + * + * Microchip licenses to you the right to use, modify, copy, and + * distribute: + * (i) the Software when embedded on a Microchip microcontroller or + * digital signal controller product ("Device") which is + * integrated into Licensee's product; or + * (ii) ONLY the Software driver source files ENC28J60.c and + * ENC28J60.h ported to a non-Microchip device used in + * conjunction with a Microchip ethernet controller for the + * sole purpose of interfacing with the ethernet controller. + * + * You should refer to the license agreement accompanying this + * Software for additional information regarding your rights and + * obligations. + * + * THE SOFTWARE AND DOCUMENTATION ARE PROVIDED "AS IS" WITHOUT + * WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT + * LIMITATION, ANY WARRANTY OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * MICROCHIP BE LIABLE FOR ANY INCIDENTAL, SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF + * PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY OR SERVICES, ANY CLAIMS + * BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE + * THEREOF), ANY CLAIMS FOR INDEMNITY OR CONTRIBUTION, OR OTHER + * SIMILAR COSTS, WHETHER ASSERTED ON THE BASIS OF CONTRACT, TORT + * (INCLUDING NEGLIGENCE), BREACH OF WARRANTY, OR OTHERWISE. + * + * + * Date Comment + *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * 10/03/2006 Original, copied from old Compiler.h + * 11/07/2007 Reorganized and simplified + * 03/31/2010 Removed dependency on WORD and DWORD typedefs + * 04/14/2010 Added defines to uniquely identify each compiler + * 10/13/2010 Added support for PIC10, PIC12, and PIC16 with PICC compiler + * 02/15/2012 Added re-define check for Nop, ClrWdt, Reset, Sleep + ********************************************************************/ +#ifndef __COMPILER_H +#define __COMPILER_H + +// Include proper device header file +#if defined(__18CXX) && !defined(HI_TECH_C) + // PIC18 processor with Microchip C18 compiler + #define COMPILER_MPLAB_C18 + #include +#elif defined(__PICC18__) && defined(HI_TECH_C) + // PIC18 processor with (Microchip) HI-TECH PICC-18 compiler + #if !defined(__18CXX) + #define __18CXX + #endif + #define COMPILER_HITECH_PICC18 + #include +#elif (defined(_PIC12) || defined(_PIC14) || defined(_PIC14E)) && defined(HI_TECH_C) + // PIC10/12/16 processor with (Microchip) HI-TECH PICC compiler + #define COMPILER_HITECH_PICC + #include +#elif (defined(__PIC24F__) || defined(__PIC24FK__)) && defined(__C30__) // Microchip C30 compiler + // PIC24F processor + #define COMPILER_MPLAB_C30 + #include +#elif defined(__PIC24H__) && defined(__C30__) // Microchip C30 compiler + // PIC24H processor + #define COMPILER_MPLAB_C30 + #include +#elif defined(__PIC24E__) && defined(__C30__) // Microchip C30 compiler + // PIC24E processor + #define COMPILER_MPLAB_C30 + #include +#elif defined(__dsPIC33F__) && defined(__C30__) // Microchip C30 compiler + // dsPIC33F processor + #define COMPILER_MPLAB_C30 + #include +#elif defined(__dsPIC33E__) && defined(__C30__) // Microchip C30 compiler + // dsPIC33E processor + #define COMPILER_MPLAB_C30 + #include +#elif defined(__dsPIC30F__) && defined(__C30__) // Microchip C30 compiler + // dsPIC30F processor + #define COMPILER_MPLAB_C30 + #include +#elif defined(__C30__) // Microchip C30 compiler, but targeting "generic-16bit" processor. + #define COMPILER_MPLAB_C30 + #include + // Define some useful inline assembly functions which are normally in the + // processor header files, but absent from the generic p30sim.h file. + #if !defined(Nop) + #define Nop() __builtin_nop() + #define ClrWdt() {__asm__ volatile ("clrwdt");} + #define Sleep() {__asm__ volatile ("pwrsav #0");} + #define Idle() {__asm__ volatile ("pwrsav #1");} + #endif +#elif defined(__PIC32MX__) // Microchip C32 compiler + #if !defined(__C32__) + #define __C32__ + #endif + #define COMPILER_MPLAB_C32 + #include + #include +#else + #error Unknown processor or compiler. See Compiler.h +#endif + +#include +#include +#include + + +// Base RAM and ROM pointer types for given architecture +#if defined(__PIC32MX__) + #define PTR_BASE unsigned long + #define ROM_PTR_BASE unsigned long +#elif defined(__C30__) + #define PTR_BASE unsigned short + #define ROM_PTR_BASE unsigned short +#elif defined(COMPILER_MPLAB_C18) + #define PTR_BASE unsigned short + #define ROM_PTR_BASE unsigned short long +#elif defined(COMPILER_HITECH_PICC18) + #define PTR_BASE unsigned short + #define ROM_PTR_BASE unsigned long +#endif + + +// Definitions that apply to all except Microchip MPLAB C Compiler for PIC18 MCUs (C18) +#if !defined(COMPILER_MPLAB_C18) + #define memcmppgm2ram(a,b,c) memcmp(a,b,c) + #define strcmppgm2ram(a,b) strcmp(a,b) + #define memcpypgm2ram(a,b,c) memcpy(a,b,c) + #define strcpypgm2ram(a,b) strcpy(a,b) + #define strncpypgm2ram(a,b,c) strncpy(a,b,c) + #define strstrrampgm(a,b) strstr(a,b) + #define strlenpgm(a) strlen(a) + #define strchrpgm(a,b) strchr(a,b) + #define strcatpgm2ram(a,b) strcat(a,b) +#endif + + +// Definitions that apply to all 8-bit products +// (PIC10, PIC12, PIC16, PIC18) +#if defined(__18CXX) || defined(COMPILER_HITECH_PICC) + #define __attribute__(a) + + #define FAR far + + // Microchip C18 specific defines + #if defined(COMPILER_MPLAB_C18) + #define ROM rom + #endif + + // HI TECH specific defines + #if defined(COMPILER_HITECH_PICC18) || defined(COMPILER_HITECH_PICC) + #define ROM const + #define rom + #ifndef Nop() + #define Nop() asm("NOP"); + #endif + #ifndef ClrWdt() + #define ClrWdt() asm("CLRWDT"); + #endif + #ifndef Reset() + #define Reset() asm("RESET"); + #endif + #ifndef Sleep() + #define Sleep() asm("SLEEP"); + #endif + #endif + +// Definitions that apply to all 16-bit and 32-bit products +// (PIC24F, PIC24H, dsPIC30F, dsPIC33F, and PIC32) +#else + #define ROM const + + // 16-bit specific defines (PIC24F, PIC24H, dsPIC30F, dsPIC33F) + #if defined(__C30__) + #define Reset() asm("reset") + #define FAR __attribute__((far)) + #endif + + // 32-bit specific defines (PIC32) + #if defined(__PIC32MX__) + #if (__C32_VERSION__ < 200) + #define persistent + #endif + #define far + #define FAR + #define Reset() SoftReset() + #define ClrWdt() (WDTCONSET = _WDTCON_WDTCLR_MASK) + + // MPLAB C Compiler for PIC32 MCUs version 1.04 and below don't have a + // Nop() function. However, version 1.05 has Nop() declared as _nop(). + #if !defined(Nop) && (__C32_VERSION__ <= 104) + #define Nop() asm("nop") + #endif + #endif +#endif + + + +#endif diff --git a/software/front/US_BootLoader.X/usb/usb.h b/software/front/US_BootLoader.X/usb/usb.h new file mode 100644 index 0000000..3b70f8b --- /dev/null +++ b/software/front/US_BootLoader.X/usb/usb.h @@ -0,0 +1,146 @@ +//DOM-IGNORE-BEGIN +/********************************************************************* + * The following lines are used by VDI. + * GUID=E537A0C0-6FEE-4afd-89B9-0C35BF72A80B + * GUIInterfaceVersion=1.00 + * LibraryVersion=2.4 + *********************************************************************/ +//DOM-IGNORE-END +/******************************************************************************* + + USB Header File + +Summary: + This file aggregates all necessary header files for the Microchip USB Host, + Device, and OTG libraries. It provides a single-file can be included in + application code. The USB libraries simplify the implementation of USB + applications by providing an abstraction of the USB module and its registers + and bits such that the source code for the can be the same across various + hardware platforms. + +Description: + This file aggregates all necessary header files for the Microchip USB Host, + Device, and OTG libraries. It provides a single-file can be included in + application code. The USB libraries simplify the implementation of USB + applications by providing an abstraction of the USB module and its registers + and bits such that the source code for the can be the same across various + hardware platforms. + + Note that this file does not include the header files for any client or + function drivers. + + This file is located in the "\\\Microchip\\Include\\USB" + directory. + + When including this file in a new project, this file can either be + referenced from the directory in which it was installed or copied + directly into the user application folder. If the first method is + chosen to keep the file located in the folder in which it is installed + then include paths need to be added so that the library and the + application both know where to reference each others files. If the + application folder is located in the same folder as the Microchip + folder (like the current demo folders), then the following include + paths need to be added to the application's project: + + . + + ..\\..\\Microchip\\Include + + If a different directory structure is used, modify the paths as + required. An example using absolute paths instead of relative paths + would be the following: + + C:\\Microchip Solutions\\Microchip\\Include + + C:\\Microchip Solutions\\My Demo Application + +******************************************************************************/ +/****************************************************************************** + FileName: usb.h + Dependencies: See INCLUDES section + Processor: PIC18, PIC24, & PIC32 USB Microcontrollers + Hardware: + Complier: Microchip C18 (for PIC18), C30 (for PIC24), or C32 (for PIC32) + Company: Microchip Technology, Inc. + + Software License Agreement: + + The software supplied herewith by Microchip Technology Incorporated + (the "Company") for its PICmicro(r) Microcontroller is intended and + supplied to you, the Company's customer, for use solely and + exclusively on Microchip PICmicro Microcontroller products. The + software is owned by the Company and/or its supplier, and is + protected under applicable copyright laws. All rights are reserved. + Any use in violation of the foregoing restrictions may subject the + user to criminal sanctions under applicable laws, as well as to + civil liability for the breach of the terms and conditions of this + license. + + THIS SOFTWARE IS PROVIDED IN AN "AS IS" CONDITION. NO WARRANTIES, + WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED + TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT, + IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR + CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +********************************************************************/ +//DOM-IGNORE-END + +//DOM-IGNORE-BEGIN +/******************************************************************** + File Description: + + Change History: + Rev Description + ---------- ----------- + 2.6 - 2.9 No change except stack revision number +********************************************************************/ +//DOM-IGNORE-END + +#ifndef _USB_H_ +#define _USB_H_ +//DOM-IGNORE-END + + +// ***************************************************************************** +// ***************************************************************************** +// Section: All necessary USB Library headers +// ***************************************************************************** +// ***************************************************************************** + +#include +#include "Compiler.h" + +#include "usb_config.h" // Must be defined by the application + +#include "usb_common.h" // Common USB library definitions +#include "usb_ch9.h" // USB device framework definitions + +#if defined( USB_SUPPORT_DEVICE ) + #include "usb_device.h" // USB Device abstraction layer interface +#endif + +#if defined( USB_SUPPORT_HOST ) + #include "usb_host.h" // USB Host abstraction layer interface +#endif + +#if defined ( USB_SUPPORT_OTG ) + #include "usb_otg.h" +#endif + +#include "usb_hal.h" // Hardware Abstraction Layer interface + +// ***************************************************************************** +// ***************************************************************************** +// Section: MCHPFSUSB Firmware Version +// ***************************************************************************** +// ***************************************************************************** + +#define USB_MAJOR_VER 2 // Firmware version, major release number. +#define USB_MINOR_VER 9 // Firmware version, minor release number. +#define USB_DOT_VER 0 // Firmware version, dot release number. + +#endif // _USB_H_ +/************************************************************************* + * EOF + */ + diff --git a/software/front/US_BootLoader.X/usb/usb_ch9.h b/software/front/US_BootLoader.X/usb/usb_ch9.h new file mode 100644 index 0000000..62e4588 --- /dev/null +++ b/software/front/US_BootLoader.X/usb/usb_ch9.h @@ -0,0 +1,618 @@ +/******************************************************************************* + + USB Chapter 9 Protocol (Header File) + +Summary: + This file defines data structures, constants, and macros that are used to + to support the USB Device Framework protocol described in Chapter 9 of the + USB 2.0 specification. + +Description: + This file defines data structures, constants, and macros that are used to + to support the USB Device Framework protocol described in Chapter 9 of the + USB 2.0 specification. + + This file is located in the "\\\Microchip\\Include\\USB" + directory. + + When including this file in a new project, this file can either be + referenced from the directory in which it was installed or copied + directly into the user application folder. If the first method is + chosen to keep the file located in the folder in which it is installed + then include paths need to be added so that the library and the + application both know where to reference each others files. If the + application folder is located in the same folder as the Microchip + folder (like the current demo folders), then the following include + paths need to be added to the application's project: + + . + + ..\\..\\Microchip\\Include + + If a different directory structure is used, modify the paths as + required. An example using absolute paths instead of relative paths + would be the following: + + C:\\Microchip Solutions\\Microchip\\Include + + C:\\Microchip Solutions\\My Demo Application +*******************************************************************************/ +//DOM-IGNORE-BEGIN +/******************************************************************************* + +* FileName: usb_ch9.h +* Dependencies: None +* Processor: PIC18/PIC24/PIC32MX microcontrollers with USB module +* Compiler: C18 v3.13+/C30 v2.01+/C32 v0.00.18+ +* Company: Microchip Technology, Inc. +* File Description: +* This file contains the definitions and prototypes used for +* specification chapter 9 compliance. + +Software License Agreement + +The software supplied herewith by Microchip Technology Incorporated +(the “Company”) for its PICmicro® Microcontroller is intended and +supplied to you, the Company’s customer, for use solely and +exclusively on Microchip PICmicro Microcontroller products. The +software is owned by the Company and/or its supplier, and is +protected under applicable copyright laws. All rights are reserved. +Any use in violation of the foregoing restrictions may subject the +user to criminal sanctions under applicable laws, as well as to +civil liability for the breach of the terms and conditions of this +license. + +THIS SOFTWARE IS PROVIDED IN AN “AS IS” CONDITION. NO WARRANTIES, +WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED +TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT, +IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. + +*******************************************************************************/ +//DOM-IGNORE-END + +//DOM-IGNORE-BEGIN +/******************************************************************** + Change History: + Rev Description + ---- ----------- + 2.6 Moved many of the CH9 defintions from the device stack files + into this file. +********************************************************************/ +//DOM-IGNORE-END + +//DOM-IGNORE-BEGIN +#ifndef _USB_CH9_H_ +#define _USB_CH9_H_ +//DOM-IGNORE-END + + +// ***************************************************************************** +// ***************************************************************************** +// Section: USB Descriptors +// ***************************************************************************** +// ***************************************************************************** + +#define USB_DESCRIPTOR_DEVICE 0x01 // bDescriptorType for a Device Descriptor. +#define USB_DESCRIPTOR_CONFIGURATION 0x02 // bDescriptorType for a Configuration Descriptor. +#define USB_DESCRIPTOR_STRING 0x03 // bDescriptorType for a String Descriptor. +#define USB_DESCRIPTOR_INTERFACE 0x04 // bDescriptorType for an Interface Descriptor. +#define USB_DESCRIPTOR_ENDPOINT 0x05 // bDescriptorType for an Endpoint Descriptor. +#define USB_DESCRIPTOR_DEVICE_QUALIFIER 0x06 // bDescriptorType for a Device Qualifier. +#define USB_DESCRIPTOR_OTHER_SPEED 0x07 // bDescriptorType for a Other Speed Configuration. +#define USB_DESCRIPTOR_INTERFACE_POWER 0x08 // bDescriptorType for Interface Power. +#define USB_DESCRIPTOR_OTG 0x09 // bDescriptorType for an OTG Descriptor. + +// ***************************************************************************** +/* USB Device Descriptor Structure + +This struct defines the structure of a USB Device Descriptor. Note that this +structure may need to be packed, or even accessed as bytes, to properly access +the correct fields when used on some device architectures. +*/ +typedef struct __attribute__ ((packed)) _USB_DEVICE_DESCRIPTOR +{ + BYTE bLength; // Length of this descriptor. + BYTE bDescriptorType; // DEVICE descriptor type (USB_DESCRIPTOR_DEVICE). + WORD bcdUSB; // USB Spec Release Number (BCD). + BYTE bDeviceClass; // Class code (assigned by the USB-IF). 0xFF-Vendor specific. + BYTE bDeviceSubClass; // Subclass code (assigned by the USB-IF). + BYTE bDeviceProtocol; // Protocol code (assigned by the USB-IF). 0xFF-Vendor specific. + BYTE bMaxPacketSize0; // Maximum packet size for endpoint 0. + WORD idVendor; // Vendor ID (assigned by the USB-IF). + WORD idProduct; // Product ID (assigned by the manufacturer). + WORD bcdDevice; // Device release number (BCD). + BYTE iManufacturer; // Index of String Descriptor describing the manufacturer. + BYTE iProduct; // Index of String Descriptor describing the product. + BYTE iSerialNumber; // Index of String Descriptor with the device's serial number. + BYTE bNumConfigurations; // Number of possible configurations. +} USB_DEVICE_DESCRIPTOR; + + +// ***************************************************************************** +/* USB Configuration Descriptor Structure + +This struct defines the structure of a USB Configuration Descriptor. Note that this +structure may need to be packed, or even accessed as bytes, to properly access +the correct fields when used on some device architectures. +*/ +typedef struct __attribute__ ((packed)) _USB_CONFIGURATION_DESCRIPTOR +{ + BYTE bLength; // Length of this descriptor. + BYTE bDescriptorType; // CONFIGURATION descriptor type (USB_DESCRIPTOR_CONFIGURATION). + WORD wTotalLength; // Total length of all descriptors for this configuration. + BYTE bNumInterfaces; // Number of interfaces in this configuration. + BYTE bConfigurationValue; // Value of this configuration (1 based). + BYTE iConfiguration; // Index of String Descriptor describing the configuration. + BYTE bmAttributes; // Configuration characteristics. + BYTE bMaxPower; // Maximum power consumed by this configuration. +} USB_CONFIGURATION_DESCRIPTOR; + +// Attributes bits +#define USB_CFG_DSC_REQUIRED 0x80 // Required attribute +#define USB_CFG_DSC_SELF_PWR (0x40|USB_CFG_DSC_REQUIRED) // Device is self powered. +#define USB_CFG_DSC_REM_WAKE (0x20|USB_CFG_DSC_REQUIRED) // Device can request remote wakup + + +// ***************************************************************************** +/* USB Interface Descriptor Structure + +This struct defines the structure of a USB Interface Descriptor. Note that this +structure may need to be packed, or even accessed as bytes, to properly access +the correct fields when used on some device architectures. +*/ +typedef struct __attribute__ ((packed)) _USB_INTERFACE_DESCRIPTOR +{ + BYTE bLength; // Length of this descriptor. + BYTE bDescriptorType; // INTERFACE descriptor type (USB_DESCRIPTOR_INTERFACE). + BYTE bInterfaceNumber; // Number of this interface (0 based). + BYTE bAlternateSetting; // Value of this alternate interface setting. + BYTE bNumEndpoints; // Number of endpoints in this interface. + BYTE bInterfaceClass; // Class code (assigned by the USB-IF). 0xFF-Vendor specific. + BYTE bInterfaceSubClass; // Subclass code (assigned by the USB-IF). + BYTE bInterfaceProtocol; // Protocol code (assigned by the USB-IF). 0xFF-Vendor specific. + BYTE iInterface; // Index of String Descriptor describing the interface. +} USB_INTERFACE_DESCRIPTOR; + + +// ***************************************************************************** +/* USB Endpoint Descriptor Structure + +This struct defines the structure of a USB Endpoint Descriptor. Note that this +structure may need to be packed, or even accessed as bytes, to properly access +the correct fields when used on some device architectures. +*/ +typedef struct __attribute__ ((packed)) _USB_ENDPOINT_DESCRIPTOR +{ + BYTE bLength; // Length of this descriptor. + BYTE bDescriptorType; // ENDPOINT descriptor type (USB_DESCRIPTOR_ENDPOINT). + BYTE bEndpointAddress; // Endpoint address. Bit 7 indicates direction (0=OUT, 1=IN). + BYTE bmAttributes; // Endpoint transfer type. + WORD wMaxPacketSize; // Maximum packet size. + BYTE bInterval; // Polling interval in frames. +} USB_ENDPOINT_DESCRIPTOR; + + +// Endpoint Direction +#define EP_DIR_IN 0x80 // Data flows from device to host +#define EP_DIR_OUT 0x00 // Data flows from host to device + + +// ****************************************************************** +// USB Endpoint Attributes +// ****************************************************************** + +// Section: Transfer Types +#define EP_ATTR_CONTROL (0<<0) // Endoint used for control transfers +#define EP_ATTR_ISOCH (1<<0) // Endpoint used for isochronous transfers +#define EP_ATTR_BULK (2<<0) // Endpoint used for bulk transfers +#define EP_ATTR_INTR (3<<0) // Endpoint used for interrupt transfers + +// Section: Synchronization Types (for isochronous enpoints) +#define EP_ATTR_NO_SYNC (0<<2) // No Synchronization +#define EP_ATTR_ASYNC (1<<2) // Asynchronous +#define EP_ATTR_ADAPT (2<<2) // Adaptive synchronization +#define EP_ATTR_SYNC (3<<2) // Synchronous + +// Section: Usage Types (for isochronous endpoints) +#define EP_ATTR_DATA (0<<4) // Data Endpoint +#define EP_ATTR_FEEDBACK (1<<4) // Feedback endpoint +#define EP_ATTR_IMP_FB (2<<4) // Implicit Feedback data EP + +// Section: Max Packet Sizes +#define EP_MAX_PKT_INTR_LS 8 // Max low-speed interrupt packet +#define EP_MAX_PKT_INTR_FS 64 // Max full-speed interrupt packet +#define EP_MAX_PKT_ISOCH_FS 1023 // Max full-speed isochronous packet +#define EP_MAX_PKT_BULK_FS 64 // Max full-speed bulk packet +#define EP_LG_PKT_BULK_FS 32 // Large full-speed bulk packet +#define EP_MED_PKT_BULK_FS 16 // Medium full-speed bulk packet +#define EP_SM_PKT_BULK_FS 8 // Small full-speed bulk packet + +/* Descriptor IDs +The descriptor ID type defines the information required by the HOST during a +GET_DESCRIPTOR request +*/ +typedef struct +{ + BYTE index; + BYTE type; + UINT16 language_id; + +} DESCRIPTOR_ID; + +// ***************************************************************************** +/* USB OTG Descriptor Structure + +This struct defines the structure of a USB OTG Descriptor. Note that this +structure may need to be packed, or even accessed as bytes, to properly access +the correct fields when used on some device architectures. +*/ +typedef struct __attribute__ ((packed)) _USB_OTG_DESCRIPTOR +{ + BYTE bLength; // Length of this descriptor. + BYTE bDescriptorType; // OTG descriptor type (USB_DESCRIPTOR_OTG). + BYTE bmAttributes; // OTG attributes. +} USB_OTG_DESCRIPTOR; + + +// ****************************************************************** +// Section: USB String Descriptor Structure +// ****************************************************************** +// This structure describes the USB string descriptor. The string +// descriptor provides user-readable information about various aspects of +// the device. The first string desriptor (string descriptor zero (0)), +// provides a list of the number of languages supported by the set of +// string descriptors for this device instead of an actual string. +// +// Note: The strings are in 2-byte-per-character unicode, not ASCII. +// +// Note: This structure only describes the "header" of the string +// descriptor. The actual data (either the language ID array or the +// array of unicode characters making up the string, must be allocated +// immediately following this header with no padding between them. + +typedef struct __attribute__ ((packed)) _USB_STRING_DSC +{ + BYTE bLength; // Size of this descriptor + BYTE bDescriptorType; // Type, USB_DSC_STRING + +} USB_STRING_DESCRIPTOR; + + +// ****************************************************************** +// Section: USB Device Qualifier Descriptor Structure +// ****************************************************************** +// This structure describes the device qualifier descriptor. The device +// qualifier descriptor provides overall device information if the device +// supports "other" speeds. +// +// Note: A high-speed device may support "other" speeds (ie. full or low). +// If so, it may need to implement the the device qualifier and other +// speed descriptors. + +typedef struct __attribute__ ((packed)) _USB_DEVICE_QUALIFIER_DESCRIPTOR +{ + BYTE bLength; // Size of this descriptor + BYTE bType; // Type, always USB_DESCRIPTOR_DEVICE_QUALIFIER + WORD bcdUSB; // USB spec version, in BCD + BYTE bDeviceClass; // Device class code + BYTE bDeviceSubClass; // Device sub-class code + BYTE bDeviceProtocol; // Device protocol + BYTE bMaxPacketSize0; // EP0, max packet size + BYTE bNumConfigurations; // Number of "other-speed" configurations + BYTE bReserved; // Always zero (0) + +} USB_DEVICE_QUALIFIER_DESCRIPTOR; + +// ****************************************************************** +// Section: USB Setup Packet Structure +// ****************************************************************** +// This structure describes the data contained in a USB standard device +// request's setup packet. It is the data packet sent from the host to +// the device to control and configure the device. +// +// Note: Refer to the USB 2.0 specification for additional details on the +// usage of the setup packet and standard device requests. +typedef union __attribute__ ((packed)) +{ + /** Standard Device Requests ***********************************/ + struct __attribute__ ((packed)) + { + BYTE bmRequestType; //from table 9-2 of USB2.0 spec + BYTE bRequest; //from table 9-2 of USB2.0 spec + WORD wValue; //from table 9-2 of USB2.0 spec + WORD wIndex; //from table 9-2 of USB2.0 spec + WORD wLength; //from table 9-2 of USB2.0 spec + }; + struct __attribute__ ((packed)) + { + unsigned :8; + unsigned :8; + WORD_VAL W_Value; //from table 9-2 of USB2.0 spec, allows byte/bitwise access + WORD_VAL W_Index; //from table 9-2 of USB2.0 spec, allows byte/bitwise access + WORD_VAL W_Length; //from table 9-2 of USB2.0 spec, allows byte/bitwise access + }; + struct __attribute__ ((packed)) + { + unsigned Recipient:5; //Device,Interface,Endpoint,Other + unsigned RequestType:2; //Standard,Class,Vendor,Reserved + unsigned DataDir:1; //Host-to-device,Device-to-host + unsigned :8; + BYTE bFeature; //DEVICE_REMOTE_WAKEUP,ENDPOINT_HALT + unsigned :8; + unsigned :8; + unsigned :8; + unsigned :8; + unsigned :8; + }; + struct __attribute__ ((packed)) + { + union // offset description + { // ------ ------------------------ + BYTE bmRequestType; // 0 Bit-map of request type + struct + { + BYTE recipient: 5; // Recipient of the request + BYTE type: 2; // Type of request + BYTE direction: 1; // Direction of data X-fer + }; + }requestInfo; + }; + struct __attribute__ ((packed)) + { + unsigned :8; + unsigned :8; + BYTE bDscIndex; //For Configuration and String DSC Only + BYTE bDescriptorType; //Device,Configuration,String + WORD wLangID; //Language ID + unsigned :8; + unsigned :8; + }; + struct __attribute__ ((packed)) + { + unsigned :8; + unsigned :8; + BYTE_VAL bDevADR; //Device Address 0-127 + BYTE bDevADRH; //Must equal zero + unsigned :8; + unsigned :8; + unsigned :8; + unsigned :8; + }; + struct __attribute__ ((packed)) + { + unsigned :8; + unsigned :8; + BYTE bConfigurationValue; //Configuration Value 0-255 + BYTE bCfgRSD; //Must equal zero (Reserved) + unsigned :8; + unsigned :8; + unsigned :8; + unsigned :8; + }; + struct __attribute__ ((packed)) + { + unsigned :8; + unsigned :8; + BYTE bAltID; //Alternate Setting Value 0-255 + BYTE bAltID_H; //Must equal zero + BYTE bIntfID; //Interface Number Value 0-255 + BYTE bIntfID_H; //Must equal zero + unsigned :8; + unsigned :8; + }; + struct __attribute__ ((packed)) + { + unsigned :8; + unsigned :8; + unsigned :8; + unsigned :8; + BYTE bEPID; //Endpoint ID (Number & Direction) + BYTE bEPID_H; //Must equal zero + unsigned :8; + unsigned :8; + }; + struct __attribute__ ((packed)) + { + unsigned :8; + unsigned :8; + unsigned :8; + unsigned :8; + unsigned EPNum:4; //Endpoint Number 0-15 + unsigned :3; + unsigned EPDir:1; //Endpoint Direction: 0-OUT, 1-IN + unsigned :8; + unsigned :8; + unsigned :8; + }; + + /** End: Standard Device Requests ******************************/ + +} CTRL_TRF_SETUP, SETUP_PKT, *PSETUP_PKT; + + +// ****************************************************************** +// ****************************************************************** +// Section: USB Specification Constants +// ****************************************************************** +// ****************************************************************** + +// Section: Valid PID Values +//DOM-IGNORE-BEGIN +#define PID_OUT 0x1 // PID for an OUT token +#define PID_ACK 0x2 // PID for an ACK handshake +#define PID_DATA0 0x3 // PID for DATA0 data +#define PID_PING 0x4 // Special PID PING +#define PID_SOF 0x5 // PID for a SOF token +#define PID_NYET 0x6 // PID for a NYET handshake +#define PID_DATA2 0x7 // PID for DATA2 data +#define PID_SPLIT 0x8 // Special PID SPLIT +#define PID_IN 0x9 // PID for a IN token +#define PID_NAK 0xA // PID for a NAK handshake +#define PID_DATA1 0xB // PID for DATA1 data +#define PID_PRE 0xC // Special PID PRE (Same as PID_ERR) +#define PID_ERR 0xC // Special PID ERR (Same as PID_PRE) +#define PID_SETUP 0xD // PID for a SETUP token +#define PID_STALL 0xE // PID for a STALL handshake +#define PID_MDATA 0xF // PID for MDATA data + +#define PID_MASK_DATA 0x03 // Data PID mask +#define PID_MASK_DATA_SHIFTED (PID_MASK_DATA << 2) // Data PID shift to proper position +//DOM-IGNORE-END + +// Section: USB Token Types +//DOM-IGNORE-BEGIN +#define USB_TOKEN_OUT 0x01 // U1TOK - OUT token +#define USB_TOKEN_IN 0x09 // U1TOK - IN token +#define USB_TOKEN_SETUP 0x0D // U1TOK - SETUP token +//DOM-IGNORE-END + +// Section: OTG Descriptor Constants + +#define OTG_HNP_SUPPORT 0x02 // OTG Descriptor bmAttributes - HNP support flag +#define OTG_SRP_SUPPORT 0x01 // OTG Descriptor bmAttributes - SRP support flag + +// Section: Endpoint Directions + +#define USB_IN_EP 0x80 // IN endpoint mask +#define USB_OUT_EP 0x00 // OUT endpoint mask + +// Section: Standard Device Requests + +#define USB_REQUEST_GET_STATUS 0 // Standard Device Request - GET STATUS +#define USB_REQUEST_CLEAR_FEATURE 1 // Standard Device Request - CLEAR FEATURE +#define USB_REQUEST_SET_FEATURE 3 // Standard Device Request - SET FEATURE +#define USB_REQUEST_SET_ADDRESS 5 // Standard Device Request - SET ADDRESS +#define USB_REQUEST_GET_DESCRIPTOR 6 // Standard Device Request - GET DESCRIPTOR +#define USB_REQUEST_SET_DESCRIPTOR 7 // Standard Device Request - SET DESCRIPTOR +#define USB_REQUEST_GET_CONFIGURATION 8 // Standard Device Request - GET CONFIGURATION +#define USB_REQUEST_SET_CONFIGURATION 9 // Standard Device Request - SET CONFIGURATION +#define USB_REQUEST_GET_INTERFACE 10 // Standard Device Request - GET INTERFACE +#define USB_REQUEST_SET_INTERFACE 11 // Standard Device Request - SET INTERFACE +#define USB_REQUEST_SYNCH_FRAME 12 // Standard Device Request - SYNCH FRAME + +#define USB_FEATURE_ENDPOINT_HALT 0 // CLEAR/SET FEATURE - Endpoint Halt +#define USB_FEATURE_DEVICE_REMOTE_WAKEUP 1 // CLEAR/SET FEATURE - Device remote wake-up +#define USB_FEATURE_TEST_MODE 2 // CLEAR/SET FEATURE - Test mode + +// Section: Setup Data Constants + +#define USB_SETUP_HOST_TO_DEVICE 0x00 // Device Request bmRequestType transfer direction - host to device transfer +#define USB_SETUP_DEVICE_TO_HOST 0x80 // Device Request bmRequestType transfer direction - device to host transfer +#define USB_SETUP_TYPE_STANDARD 0x00 // Device Request bmRequestType type - standard +#define USB_SETUP_TYPE_CLASS 0x20 // Device Request bmRequestType type - class +#define USB_SETUP_TYPE_VENDOR 0x40 // Device Request bmRequestType type - vendor +#define USB_SETUP_RECIPIENT_DEVICE 0x00 // Device Request bmRequestType recipient - device +#define USB_SETUP_RECIPIENT_INTERFACE 0x01 // Device Request bmRequestType recipient - interface +#define USB_SETUP_RECIPIENT_ENDPOINT 0x02 // Device Request bmRequestType recipient - endpoint +#define USB_SETUP_RECIPIENT_OTHER 0x03 // Device Request bmRequestType recipient - other + +#define USB_SETUP_HOST_TO_DEVICE_BITFIELD (USB_SETUP_HOST_TO_DEVICE>>7) // Device Request bmRequestType transfer direction - host to device transfer - bit definition +#define USB_SETUP_DEVICE_TO_HOST_BITFIELD (USB_SETUP_DEVICE_TO_HOST>>7) // Device Request bmRequestType transfer direction - device to host transfer - bit definition +#define USB_SETUP_TYPE_STANDARD_BITFIELD (USB_SETUP_TYPE_STANDARD>>5) // Device Request bmRequestType type - standard +#define USB_SETUP_TYPE_CLASS_BITFIELD (USB_SETUP_TYPE_CLASS>>5) // Device Request bmRequestType type - class +#define USB_SETUP_TYPE_VENDOR_BITFIELD (USB_SETUP_TYPE_VENDOR>>5) // Device Request bmRequestType type - vendor +#define USB_SETUP_RECIPIENT_DEVICE_BITFIELD (USB_SETUP_RECIPIENT_DEVICE) // Device Request bmRequestType recipient - device +#define USB_SETUP_RECIPIENT_INTERFACE_BITFIELD (USB_SETUP_RECIPIENT_INTERFACE) // Device Request bmRequestType recipient - interface +#define USB_SETUP_RECIPIENT_ENDPOINT_BITFIELD (USB_SETUP_RECIPIENT_ENDPOINT) // Device Request bmRequestType recipient - endpoint +#define USB_SETUP_RECIPIENT_OTHER_BITFIELD (USB_SETUP_RECIPIENT_OTHER) // Device Request bmRequestType recipient - other + +// Section: OTG SET FEATURE Constants + +#define OTG_FEATURE_B_HNP_ENABLE 3 // SET FEATURE OTG - Enable B device to perform HNP +#define OTG_FEATURE_A_HNP_SUPPORT 4 // SET FEATURE OTG - A device supports HNP +#define OTG_FEATURE_A_ALT_HNP_SUPPORT 5 // SET FEATURE OTG - Another port on the A device supports HNP + +// Section: USB Endpoint Transfer Types + +#define USB_TRANSFER_TYPE_CONTROL 0x00 // Endpoint is a control endpoint. +#define USB_TRANSFER_TYPE_ISOCHRONOUS 0x01 // Endpoint is an isochronous endpoint. +#define USB_TRANSFER_TYPE_BULK 0x02 // Endpoint is a bulk endpoint. +#define USB_TRANSFER_TYPE_INTERRUPT 0x03 // Endpoint is an interrupt endpoint. + +// Section: Standard Feature Selectors for CLEAR_FEATURE Requests +#define USB_FEATURE_ENDPOINT_STALL 0 // Endpoint recipient +#define USB_FEATURE_DEVICE_REMOTE_WAKEUP 1 // Device recipient +#define USB_FEATURE_TEST_MODE 2 // Device recipient + + +// Section: USB Class Code Definitions +#define USB_HUB_CLASSCODE 0x09 // Class code for a hub. + +/******************************************************************** +USB Endpoint Definitions +USB Standard EP Address Format: DIR:X:X:X:EP3:EP2:EP1:EP0 +This is used in the descriptors. +********************************************************************/ +#define _EP_IN 0x80 +#define _EP_OUT 0x00 +#define _EP01_OUT 0x01 +#define _EP01_IN 0x81 +#define _EP02_OUT 0x02 +#define _EP02_IN 0x82 +#define _EP03_OUT 0x03 +#define _EP03_IN 0x83 +#define _EP04_OUT 0x04 +#define _EP04_IN 0x84 +#define _EP05_OUT 0x05 +#define _EP05_IN 0x85 +#define _EP06_OUT 0x06 +#define _EP06_IN 0x86 +#define _EP07_OUT 0x07 +#define _EP07_IN 0x87 +#define _EP08_OUT 0x08 +#define _EP08_IN 0x88 +#define _EP09_OUT 0x09 +#define _EP09_IN 0x89 +#define _EP10_OUT 0x0A +#define _EP10_IN 0x8A +#define _EP11_OUT 0x0B +#define _EP11_IN 0x8B +#define _EP12_OUT 0x0C +#define _EP12_IN 0x8C +#define _EP13_OUT 0x0D +#define _EP13_IN 0x8D +#define _EP14_OUT 0x0E +#define _EP14_IN 0x8E +#define _EP15_OUT 0x0F +#define _EP15_IN 0x8F + +/* Configuration Attributes */ +#define _DEFAULT (0x01<<7) //Default Value (Bit 7 is set) +#define _SELF (0x01<<6) //Self-powered (Supports if set) +#define _RWU (0x01<<5) //Remote Wakeup (Supports if set) +#define _HNP (0x01 << 1) //HNP (Supports if set) +#define _SRP (0x01) //SRP (Supports if set) + +/* Endpoint Transfer Type */ +#define _CTRL 0x00 //Control Transfer +#define _ISO 0x01 //Isochronous Transfer +#define _BULK 0x02 //Bulk Transfer + +#define _INTERRUPT 0x03 //Interrupt Transfer +#if defined(__18CXX) || defined(__C30__) || defined __XC16__ + #define _INT 0x03 //Interrupt Transfer +#endif + +/* Isochronous Endpoint Synchronization Type */ +#define _NS (0x00<<2) //No Synchronization +#define _AS (0x01<<2) //Asynchronous +#define _AD (0x02<<2) //Adaptive +#define _SY (0x03<<2) //Synchronous + +/* Isochronous Endpoint Usage Type */ +#define _DE (0x00<<4) //Data endpoint +#define _FE (0x01<<4) //Feedback endpoint +#define _IE (0x02<<4) //Implicit feedback Data endpoint + +//These are the directional indicators used for the USBTransferOnePacket() +// function. +#define OUT_FROM_HOST 0 +#define IN_TO_HOST 1 + +#endif // _USB_CH9_H_ +/************************************************************************* + * EOF + */ + diff --git a/software/front/US_BootLoader.X/usb/usb_common.h b/software/front/US_BootLoader.X/usb/usb_common.h new file mode 100644 index 0000000..106e8f7 --- /dev/null +++ b/software/front/US_BootLoader.X/usb/usb_common.h @@ -0,0 +1,601 @@ +/****************************************************************************** + + Common USB Library Definitions (Header File) + +Summary: + This file defines data types, constants, and macros that are common to + multiple layers of the Microchip USB Firmware Stack. + +Description: + This file defines data types, constants, and macros that are common to + multiple layers of the Microchip USB Firmware Stack. + + This file is located in the "\\\Microchip\\Include\\USB" + directory. + + When including this file in a new project, this file can either be + referenced from the directory in which it was installed or copied + directly into the user application folder. If the first method is + chosen to keep the file located in the folder in which it is installed + then include paths need to be added so that the library and the + application both know where to reference each others files. If the + application folder is located in the same folder as the Microchip + folder (like the current demo folders), then the following include + paths need to be added to the application's project: + + . + ..\\..\\MicrochipInclude + + If a different directory structure is used, modify the paths as + required. An example using absolute paths instead of relative paths + would be the following: + + C:\\Microchip Solutions\\Microchip\\Include + + C:\\Microchip Solutions\\My Demo Application +*******************************************************************************/ +//DOM-IGNORE-BEGIN +/******************************************************************************* + + FileName: usb_common.h + Dependencies: See included files, below. + Processor: PIC18/PIC24/PIC32MX microcontrollers with USB module + Compiler: C18 v3.13+/C30 v2.01+/C32 v0.00.18+ + Company: Microchip Technology, Inc. + +Software License Agreement + +The software supplied herewith by Microchip Technology Incorporated +(the “Company”) for its PICmicro® Microcontroller is intended and +supplied to you, the Company’s customer, for use solely and +exclusively on Microchip PICmicro Microcontroller products. The +software is owned by the Company and/or its supplier, and is +protected under applicable copyright laws. All rights are reserved. +Any use in violation of the foregoing restrictions may subject the +user to criminal sanctions under applicable laws, as well as to +civil liability for the breach of the terms and conditions of this +license. + +THIS SOFTWARE IS PROVIDED IN AN “AS IS” CONDITION. NO WARRANTIES, +WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED +TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT, +IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. + +*******************************************************************************/ +//DOM-IGNORE-END + +//DOM-IGNORE-BEGIN +/******************************************************************** + Change History: + Rev Description + ---- ----------- + 2.6 Moved many of the USB events + 2.6a Changed the limit of USB_EVENT from UINT_MAX to INT_MAX + 2.7 No change +********************************************************************/ +//DOM-IGNORE-END + + +//DOM-IGNORE-BEGIN +#ifndef _USB_COMMON_H_ +#define _USB_COMMON_H_ +//DOM-IGNORE-END + +#include + +// ***************************************************************************** +// ***************************************************************************** +// Section: USB Constants +// ***************************************************************************** +// ***************************************************************************** + +// Section: Error Code Values + +#define USB_SUCCESS 0x00 // USB operation successful. +#define USB_INVALID_STATE 0x01 // Operation cannot be performed in current state. +#define USB_BUSY 0x02 // A transaction is already in progress. +#define USB_ILLEGAL_REQUEST 0x03 // Cannot perform requested operation. +#define USB_INVALID_CONFIGURATION 0x04 // Configuration descriptor not found. +#define USB_MEMORY_ALLOCATION_ERROR 0x05 // Out of dynamic memory. +#define USB_UNKNOWN_DEVICE 0x06 // Device with specified address is not attached. +#define USB_CANNOT_ENUMERATE 0x07 // Cannot enumerate the attached device. +#define USB_EVENT_QUEUE_FULL 0x08 // Event queue was full when an event occured. +#define USB_ENDPOINT_BUSY 0x10 // Endpoint is currently processing a transaction. +#define USB_ENDPOINT_STALLED 0x11 // Endpoint is currently stalled. User must clear the condition. +#define USB_ENDPOINT_ERROR 0x12 // Will need more than this eventually +#define USB_ENDPOINT_ERROR_ILLEGAL_PID 0x13 // Illegal PID received. +#define USB_ENDPOINT_NOT_FOUND 0x14 // Requested endpoint does not exist on device. +#define USB_ENDPOINT_ILLEGAL_DIRECTION 0x15 // Reads must be performe on IN endpoints, writes on OUT endpoints. +//#define USB_ENDPOINT_TRANSACTION_IN_PROGRESS 0x16 +#define USB_ENDPOINT_NAK_TIMEOUT 0x17 // Too many NAK's occurred while waiting for the current transaction. +#define USB_ENDPOINT_ILLEGAL_TYPE 0x18 // Transfer type must match endpoint description. +#define USB_ENDPOINT_UNRESOLVED_STATE 0x19 // Endpoint is in an unknown state after completing a transaction. +#define USB_ENDPOINT_ERROR_BIT_STUFF 0x20 // USB Module - Bit stuff error. +#define USB_ENDPOINT_ERROR_DMA 0x21 // USB Module - DMA error. +#define USB_ENDPOINT_ERROR_TIMEOUT 0x22 // USB Module - Bus timeout. +#define USB_ENDPOINT_ERROR_DATA_FIELD 0x23 // USB Module - Data field size error. +#define USB_ENDPOINT_ERROR_CRC16 0x24 // USB Module - CRC16 failure. +#define USB_ENDPOINT_ERROR_END_OF_FRAME 0x25 // USB Module - End of Frame error. +#define USB_ENDPOINT_ERROR_PID_CHECK 0x26 // USB Module - Illegal PID received. +#define USB_ENDPOINT_ERROR_BMX 0x27 // USB Module - Bus Matrix error. +#define USB_ERROR_INSUFFICIENT_POWER 0x28 // Too much power was requested + +// Section: Return values for USBHostDeviceStatus() + +#define USB_DEVICE_STATUS 0x30 // Offset for USBHostDeviceStatus() return codes +#define USB_DEVICE_ATTACHED (USB_DEVICE_STATUS | 0x30) // Device is attached and running +#define USB_DEVICE_DETACHED (USB_DEVICE_STATUS | 0x01) // No device is attached +#define USB_DEVICE_ENUMERATING (USB_DEVICE_STATUS | 0x02) // Device is enumerating +#define USB_HOLDING_OUT_OF_MEMORY (USB_DEVICE_STATUS | 0x03) // Not enough heap space available +#define USB_HOLDING_UNSUPPORTED_DEVICE (USB_DEVICE_STATUS | 0x04) // Invalid configuration or unsupported class +#define USB_HOLDING_UNSUPPORTED_HUB (USB_DEVICE_STATUS | 0x05) // Hubs are not supported +#define USB_HOLDING_INVALID_CONFIGURATION (USB_DEVICE_STATUS | 0x06) // Invalid configuration requested +#define USB_HOLDING_PROCESSING_CAPACITY (USB_DEVICE_STATUS | 0x07) // Processing requirement excessive +#define USB_HOLDING_POWER_REQUIREMENT (USB_DEVICE_STATUS | 0x08) // Power requirement excessive +#define USB_HOLDING_CLIENT_INIT_ERROR (USB_DEVICE_STATUS | 0x09) // Client driver failed to initialize +#define USB_DEVICE_SUSPENDED (USB_DEVICE_STATUS | 0x0A) // Device is suspended + +#define USB_ERROR_CLASS_DEFINED 0x50 // Offset for application defined errors + +#define USB_SINGLE_DEVICE_ADDRESS 0x01 // Default USB device address (single device support) + + +// ***************************************************************************** +// ***************************************************************************** +// Section: USB Data Types +// ***************************************************************************** +// ***************************************************************************** + +// ***************************************************************************** +/* Data Transfer Flags + +The following flags are used in the flags parameter of the "USBDEVTransferData" +and "USBHALTransferData" routines. They can be accessed by the bitfield +definitions or the macros can be OR'd together to identify the endpoint number +and properties of the data transfer. + + + 7 6 5 4 3 2 1 0 - Field name + | | | | \_____/ + | | | | +----- ep_num - Endpoint number + | | | +---------- zero_pkt - End transfer with short or zero-sized packet + | | +------------ dts - 0=DATA0 packet, 1=DATA1 packet + | +-------------- force_dts - Force data toggle sync to match dts field + +---------------- direction - Transfer direction: 0=Receive, 1=Transmit + +*/ + +typedef union +{ + BYTE bitmap; + struct + { + BYTE ep_num: 4; + BYTE zero_pkt: 1; + BYTE dts: 1; + BYTE force_dts: 1; + BYTE direction: 1; + }field; + +} TRANSFER_FLAGS; + +// ***************************************************************************** +/* Data Transfer Flags, Endpoint Number Constants + +These macros can be used as values for the "ep_num" field of the TRANSFER_FLAGS +data type. +*/ +#define USB_EP0 0 // +#define USB_EP1 1 // +#define USB_EP2 2 // +#define USB_EP3 3 // +#define USB_EP4 4 // +#define USB_EP5 5 // +#define USB_EP6 6 // +#define USB_EP7 7 // +#define USB_EP8 8 // +#define USB_EP9 9 // +#define USB_EP10 10 // +#define USB_EP11 11 // +#define USB_EP12 12 // +#define USB_EP13 13 // +#define USB_EP14 14 // +#define USB_EP15 15 // + +// ***************************************************************************** +/* Data Transfer Flags, Bitmap Constants + +These macros can be used as values for the "bitmap" field of the TRANSFER_FLAGS +data type. +*/ +#define USB_TRANSMIT 0x80 // Data will be transmitted to the USB +#define USB_RECEIVE 0x00 // Data will be received from the USB +#define USB_FORCE_DTS 0x40 // Forces data toggle sync as below: +#define USB_DTS_MASK 0x20 // Mask for DTS bit (below) +#define USB_ZERO_PKT 0x10 // End transfer w/a short or zero-length packet +#define USB_DATA0 0x00|USB_FORCE_DTS // Force DATA0 +#define USB_DATA1 0x20|USB_FORCE_DTS // Force DATA1 +#define USB_SETUP_PKT USB_RECEIVE|USB_DATA0|USB_EP0 // Setup Packet +#define USB_SETUP_DATA USB_DATA1|USB_ZERO_PKT|USB_EP0 // Setup-transfer Data Packet +#define USB_SETUP_STATUS USB_DATA1|USB_EP0 // Setup-transfer Status Packet +#define USB_EP_NUM_MASK 0x0F // Endpoint number (ep_num) mask + +// ***************************************************************************** +/* Data Transfer Flags, Initialization Macro + +This macro can be used with the above bitmap constants to initialize a +TRANSFER_FLAGS value. It provides the correct data type to avoid compiler +warnings. +*/ +#define XFLAGS(f) ((TRANSFER_FLAGS)((BYTE)(f))) // Initialization Macro + + +// ***************************************************************************** +/* USB Events + +This enumeration identifies USB events that occur. It is used to +inform USB drivers and applications of events on the bus. It is passed +as a parameter to the event-handling routine, which must match the +prototype of the USB_CLIENT_EVENT_HANDLER data type, when an event occurs. +*/ + +typedef enum +{ + // No event occured (NULL event) + EVENT_NONE = 0, + + EVENT_DEVICE_STACK_BASE = 1, + + EVENT_HOST_STACK_BASE = 100, + + // A USB hub has been attached. Hub support is not currently available. + EVENT_HUB_ATTACH, + + // A stall has occured. This event is not used by the Host stack. + EVENT_STALL, + + // VBus SRP Pulse, (VBus > 2.0v), Data: BYTE Port Number (For future support) + EVENT_VBUS_SES_REQUEST, + + // The voltage on Vbus has dropped below 4.4V/4.7V. The application is + // responsible for monitoring Vbus and calling USBHostVbusEvent() with this + // event. This event is not generated by the stack. + EVENT_VBUS_OVERCURRENT, + + // An enumerating device is requesting power. The data associated with this + // event is of the data type USB_VBUS_POWER_EVENT_DATA. Note that + // the requested current is specified in 2mA units, identical to the power + // specification in a device's Configuration Descriptor. + EVENT_VBUS_REQUEST_POWER, + + // Release power from a detaching device. The data associated with this + // event is of the data type USB_VBUS_POWER_EVENT_DATA. The current value + // specified in the data can be ignored. + EVENT_VBUS_RELEASE_POWER, + + // The voltage on Vbus is good, and the USB OTG module can be powered on. + // The application is responsible for monitoring Vbus and calling + // USBHostVbusEvent() with this event. This event is not generated by the + // stack. If the application issues an EVENT_VBUS_OVERCURRENT, then no + // power will be applied to that port, and no device can attach to that + // port, until the application issues the EVENT_VBUS_POWER_AVAILABLE for + // the port. + EVENT_VBUS_POWER_AVAILABLE, + + // The attached device is not supported by the application. The attached + // device is not allowed to enumerate. + EVENT_UNSUPPORTED_DEVICE, + + // Cannot enumerate the attached device. This is generated if communication + // errors prevent the device from enumerating. + EVENT_CANNOT_ENUMERATE, + + // The client driver cannot initialize the the attached device. The + // attached is not allowed to enumerate. + EVENT_CLIENT_INIT_ERROR, + + // The Host stack does not have enough heap space to enumerate the device. + // Check the amount of heap space allocated to the application. In MPLAB, + // select Project> Build Options...> Project. Select the appropriate + // linker tab, and inspect the "Heap size" entry. + EVENT_OUT_OF_MEMORY, + + // Unspecified host error. (This error should not occur). + EVENT_UNSPECIFIED_ERROR, + + // USB cable has been detached. The data associated with this event is the + // address of detached device, a single BYTE. + EVENT_DETACH, + + // A USB transfer has completed. The data associated with this event is of + // the data type HOST_TRANSFER_DATA if the event is generated from the host + // stack. + EVENT_TRANSFER, + + // A USB Start of Frame token has been received. This event is not + // used by the Host stack. + EVENT_SOF, + + // Device-mode resume received. This event is not used by the Host stack. + EVENT_RESUME, + + // Device-mode suspend/idle event received. This event is not used by the + // Host stack. + EVENT_SUSPEND, + + // Device-mode bus reset received. This event is not used by the Host + // stack. + EVENT_RESET, + + // In Host mode, an isochronous data read has completed. This event will only + // be passed to the DataEventHandler, which is only utilized if it is defined. + // Note that the DataEventHandler is called from within the USB interrupt, so + // it is critical that it return in time for the next isochronous data packet. + EVENT_DATA_ISOC_READ, + + // In Host mode, an isochronous data write has completed. This event will only + // be passed to the DataEventHandler, which is only utilized if it is defined. + // Note that the DataEventHandler is called from within the USB interrupt, so + // it is critical that it return in time for the next isochronous data packet. + EVENT_DATA_ISOC_WRITE, + + // In Host mode, this event gives the application layer the option to reject + // a client driver that was selected by the stack. This is needed when multiple + // devices are supported by class level support, but one configuration and client + // driver is preferred over another. Since configuration number is not guaranteed, + // the stack cannot do this automatically. This event is issued only when + // looking through configuration descriptors; the driver selected at the device + // level cannot be overridden, since there shouldn't be any other options to + // choose from. + EVENT_OVERRIDE_CLIENT_DRIVER_SELECTION, + + // In host mode, this event is thrown for every millisecond that passes. Like all + // events, this is thrown from the USBHostTasks() or USBTasks() routine so its + // timeliness will be determined by the rate that these functions are called. If + // they are not called very often, then the 1ms events will build up and be + // dispatched as the USBTasks() or USBHostTasks() functions are called (one event + // per call to these functions. + EVENT_1MS, + + // Class-defined event offsets start here: + EVENT_GENERIC_BASE = 400, // Offset for Generic class events + + EVENT_MSD_BASE = 500, // Offset for Mass Storage Device class events + + EVENT_HID_BASE = 600, // Offset for Human Interface Device class events + + EVENT_PRINTER_BASE = 700, // Offset for Printer class events + + EVENT_CDC_BASE = 800, // Offset for CDC class events + + EVENT_CHARGER_BASE = 900, // Offset for Charger client driver events. + + EVENT_AUDIO_BASE = 1000, // Offset for Audio client driver events. + + EVENT_USER_BASE = 10000, // Add integral values to this event number + // to create user-defined events. + + // There was a transfer error on the USB. The data associated with this + // event is of data type HOST_TRANSFER_DATA. + EVENT_BUS_ERROR = INT_MAX + +} USB_EVENT; + + +// ***************************************************************************** +/* EVENT_TRANSFER Data + +This data structure is passed to the appropriate layer's +USB_EVENT_HANDLER when an EVT_XFER event has occured, indicating +that a transfer has completed on the USB. It provides the endpoint, +direction, and actual size of the transfer. + */ + +typedef struct _transfer_event_data +{ + TRANSFER_FLAGS flags; // Transfer flags (see above) + UINT32 size; // Actual number of bytes transferred + BYTE pid; // Packet ID + +} USB_TRANSFER_EVENT_DATA; + + +// ***************************************************************************** +/* EVENT_VBUS_REQUEST_POWER and EVENT_VBUS_RELEASE_POWER Data + +This data structure is passed to the appropriate layer's +USB_EVENT_HANDLER when an EVENT_VBUS_REQUEST_POWER or EVENT_VBUS_RELEASE_POWER +event has occured, indicating that a change in Vbus power is being requested. +*/ + +typedef struct _vbus_power_data +{ + BYTE port; // Physical port number + BYTE current; // Current in 2mA units +} USB_VBUS_POWER_EVENT_DATA; + + +// ***************************************************************************** +/* USB_OVERRIDE_CLIENT_DRIVER_EVENT_DATA Data + +This data structure is passed to the application layer when a client driver is +select, in case multiple client drivers can support a particular device. +*/ +typedef struct _override_client_driver_data +{ + WORD idVendor; + WORD idProduct; + BYTE bDeviceClass; + BYTE bDeviceSubClass; + BYTE bDeviceProtocol; +} USB_OVERRIDE_CLIENT_DRIVER_EVENT_DATA; + + +// ***************************************************************************** +/* EVT_STALL Data + +The EVT_STALL event has a 16-bit data value associated with it where +a bit is set in the position for each endpoint that is currently +stalled (ie. bit 0 = EP0, bit 1 = EP1, etc.) +*/ + + +// ***************************************************************************** +// ***************************************************************************** +// Section: Event Handling Routines +// ***************************************************************************** +// ***************************************************************************** + +/******************************************************************************* + Function: + BOOL ( USB_EVENT event, + void *data, unsigned int size ) + + Description: + This routine is a "call out" routine that must be implemented by + any layer of the USB SW Stack (except the HAL which is at the + root of the event-call tree that needs to receive events. When + an event occurs, the HAL calls the next higher layer in the + stack to handle the event. Each layer either handles the event + or calls the layer above it to handle the event. Events are + identified by the "event" parameter and may have associated + data. If the higher layer was able to handle the event, it + should return TRUE. If not, it should return FALSE. + + Preconditions: + USBInitialize must have been called to initialize the USB SW + Stack. + + Paramters: + USB_EVENT event - Identifies the bus event that occured + void *data - Pointer to event-specific data + unsigned int size - Size of the event-specific data + + Return Values: + None + + Remarks: + The function is name is defined by the layer that implements + it. A pointer to the function will be placed by into a table + that the lower-layer will use to call it. This requires the + function to use a specific call "signature" (return data type + and values and data parameter types and values). + +*******************************************************************************/ + +typedef BOOL (*USB_EVENT_HANDLER) ( USB_EVENT event, void *data, unsigned int size ); + + +// ***************************************************************************** +// ***************************************************************************** +// Section: USB Application Program Interface (API) Routines +// ***************************************************************************** +// ***************************************************************************** + +/**************************************************************************** + Function: + BOOL USBInitialize ( unsigned long flags ) + + Summary: + This interface initializes the variables of the USB host stack. + + Description: + This interface initializes the USB stack. + + Precondition: + None + + Parameters: + flags - reserved + + Return Values: + TRUE - Initialization successful + FALSE - Initialization failure + + Remarks: + This interface is implemented as a macro that can be defined by the + application or by default is defined correctly for the stack mode. + + ***************************************************************************/ + +#ifndef USBInitialize + #if defined( USB_SUPPORT_DEVICE ) + #if defined( USB_SUPPORT_HOST ) + #if defined( USB_SUPPORT_OTG ) + #error "USB OTG is not yet supported." + #else + #define USBInitialize(f) \ + (USBDEVInitialize(f) && USBHostInit(f)) ? \ + TRUE : FALSE + #endif + #else + #define USBInitialize(f) USBDeviceInit() + #endif + #else + #if defined( USB_SUPPORT_HOST ) + #define USBInitialize(f) USBHostInit(f) + #else + #error "Application must define support mode in usb_config.h" + #endif + #endif +#endif + + +/**************************************************************************** + Function: + void USBTasks( void ) + + Summary: + This function executes the tasks for USB operation. + + Description: + This function executes the tasks for USB host operation. It must be + executed on a regular basis to keep everything functioning. + + Precondition: + USBInitialize() has been called. + + Parameters: + None + + Returns: + None + + Remarks: + This interface is implemented as a macro that can be defined by the + application or by default is defined correctly for the stack mode. + + ***************************************************************************/ + +#ifndef USBTasks // Implemented as a macro that can be overridden. + #if defined( USB_SUPPORT_DEVICE ) + #if defined( USB_SUPPORT_HOST ) + #if defined( USB_SUPPORT_OTG ) + #error "USB OTG is not yet supported." + #else + #define USBTasks() {USBHostTasks(); USBHALHandleBusEvent();} + #endif + #else + #define USBTasks() USBDeviceTasks() + #endif + #else + #if defined( USB_SUPPORT_HOST ) + #define USBTasks() USBHostTasks() + #else + #error "Application must define support mode in usb_config.h" + #endif + #endif +#endif + +#define USB_PING_PONG__NO_PING_PONG 0x00 //0b00 +#define USB_PING_PONG__EP0_OUT_ONLY 0x01 //0b01 +#define USB_PING_PONG__FULL_PING_PONG 0x02 //0b10 +#define USB_PING_PONG__ALL_BUT_EP0 0x03 //0b11 + +#endif // _USB_COMMON_H_ +/************************************************************************* + * EOF + */ + diff --git a/software/front/US_BootLoader.X/usb/usb_config.h b/software/front/US_BootLoader.X/usb/usb_config.h new file mode 100644 index 0000000..2a6eb66 --- /dev/null +++ b/software/front/US_BootLoader.X/usb/usb_config.h @@ -0,0 +1,194 @@ +/******************************************************************** + FileName: usb_config.h + Dependencies: Always: GenericTypeDefs.h, usb_device.h + Situational: usb_function_hid.h, usb_function_cdc.h, usb_function_msd.h, etc. + Processor: PIC18 or PIC24 USB Microcontrollers + Hardware: The code is natively intended to be used on the following + hardware platforms: PICDEM� FS USB Demo Board, + PIC18F87J50 FS USB Plug-In Module, or + Explorer 16 + PIC24 USB PIM. The firmware may be + modified for use on other USB platforms by editing the + HardwareProfile.h file. + Complier: Microchip C18 (for PIC18) or C30 (for PIC24) + Company: Microchip Technology, Inc. + + Software License Agreement: + + The software supplied herewith by Microchip Technology Incorporated + (the "Company") for its PIC(R) Microcontroller is intended and + supplied to you, the Company's customer, for use solely and + exclusively on Microchip PIC Microcontroller products. The + software is owned by the Company and/or its supplier, and is + protected under applicable copyright laws. All rights are reserved. + Any use in violation of the foregoing restrictions may subject the + user to criminal sanctions under applicable laws, as well as to + civil liability for the breach of the terms and conditions of this + license. + + THIS SOFTWARE IS PROVIDED IN AN "AS IS" CONDITION. NO WARRANTIES, + WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED + TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT, + IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR + CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. + +******************************************************************** + File Description: + + Change History: + Rev Date Description + 1.0 11/19/2004 Initial release + 2.1 02/26/2007 Updated for simplicity and to use common + coding style + *******************************************************************/ + +/********************************************************************* + * Descriptor specific type definitions are defined in: usbd.h + ********************************************************************/ + +#ifndef USBCFG_H +#define USBCFG_H + +/** DEFINITIONS ****************************************************/ +#define USB_EP0_BUFF_SIZE 8 // Valid Options: 8, 16, 32, or 64 bytes. + // Using larger options take more SRAM, but + // does not provide much advantage in most types + // of applications. Exceptions to this, are applications + // that use EP0 IN or OUT for sending large amounts of + // application related data. + +#define USB_MAX_NUM_INT 1 //Set this number to match the maximum interface number used in the descriptors for this firmware project +#define USB_MAX_EP_NUMBER 1 //Set this number to match the maximum endpoint number used in the descriptors for this firmware project + +//Device descriptor - if these two definitions are not defined then +// a ROM USB_DEVICE_DESCRIPTOR variable by the exact name of device_dsc +// must exist. +#define USB_USER_DEVICE_DESCRIPTOR &device_dsc +#define USB_USER_DEVICE_DESCRIPTOR_INCLUDE extern ROM USB_DEVICE_DESCRIPTOR device_dsc + +//Configuration descriptors - if these two definitions do not exist then +// a ROM BYTE *ROM variable named exactly USB_CD_Ptr[] must exist. +#define USB_USER_CONFIG_DESCRIPTOR USB_CD_Ptr +#define USB_USER_CONFIG_DESCRIPTOR_INCLUDE extern ROM BYTE *ROM USB_CD_Ptr[] + + +//------------------------------------------------------------------------------ +//Select an endpoint ping-pong bufferring mode. Some microcontrollers only +//support certain modes. For most applications, it is recommended to use either +//the USB_PING_PONG__FULL_PING_PONG or USB_PING_PONG__EP0_OUT_ONLY options. +//The other settings are supported on some devices, but they are not +//recommended, as they offer inferior control transfer timing performance. +//See inline code comments in usb_device.c for additional details. +//Enabling ping pong bufferring on an endpoint generally increases firmware +//overhead somewhat, but when both buffers are used simultaneously in the +//firmware, can offer better sustained bandwidth, especially for OUT endpoints. +//------------------------------------------------------ +//#define USB_PING_PONG_MODE USB_PING_PONG__NO_PING_PONG //Not recommended +#define USB_PING_PONG_MODE USB_PING_PONG__FULL_PING_PONG //A good all around setting +//#define USB_PING_PONG_MODE USB_PING_PONG__EP0_OUT_ONLY //Another good setting +//#define USB_PING_PONG_MODE USB_PING_PONG__ALL_BUT_EP0 //Not recommended +//------------------------------------------------------------------------------ + + +//------------------------------------------------------------------------------ +//Select a USB stack operating mode. In the USB_INTERRUPT mode, the USB stack +//main task handler gets called only when necessary as an interrupt handler. +//This can potentially minimize CPU utilization, but adds context saving +//and restoring overhead associated with interrupts, which can potentially +//decrease performance. +//When the USB_POLLING mode is selected, the USB stack main task handler +//(ex: USBDeviceTasks()) must be called periodically by the application firmware +//at a minimum rate as described in the inline code comments in usb_device.c. +//------------------------------------------------------ +#define USB_POLLING +//#define USB_INTERRUPT +//------------------------------------------------------------------------------ + +/* Parameter definitions are defined in usb_device.h */ +#define USB_PULLUP_OPTION USB_PULLUP_ENABLE +//#define USB_PULLUP_OPTION USB_PULLUP_DISABLED + +#define USB_TRANSCEIVER_OPTION USB_INTERNAL_TRANSCEIVER +//External Transceiver support is not available on all product families. Please +// refer to the product family datasheet for more information if this feature +// is available on the target processor. +//#define USB_TRANSCEIVER_OPTION USB_EXTERNAL_TRANSCEIVER + +#define USB_SPEED_OPTION USB_FULL_SPEED +//#define USB_SPEED_OPTION USB_LOW_SPEED //(this mode is only supported on some microcontrollers) + +//------------------------------------------------------------------------------------------------------------------ +//Option to enable auto-arming of the status stage of control transfers, if no +//"progress" has been made for the USB_STATUS_STAGE_TIMEOUT value. +//If progress is made (any successful transactions completing on EP0 IN or OUT) +//the timeout counter gets reset to the USB_STATUS_STAGE_TIMEOUT value. +// +//During normal control transfer processing, the USB stack or the application +//firmware will call USBCtrlEPAllowStatusStage() as soon as the firmware is finished +//processing the control transfer. Therefore, the status stage completes as +//quickly as is physically possible. The USB_ENABLE_STATUS_STAGE_TIMEOUTS +//feature, and the USB_STATUS_STAGE_TIMEOUT value are only relevant, when: +//1. The application uses the USBDeferStatusStage() API function, but never calls +// USBCtrlEPAllowStatusStage(). Or: +//2. The application uses host to device (OUT) control transfers with data stage, +// and some abnormal error occurs, where the host might try to abort the control +// transfer, before it has sent all of the data it claimed it was going to send. +// +//If the application firmware never uses the USBDeferStatusStage() API function, +//and it never uses host to device control transfers with data stage, then +//it is not required to enable the USB_ENABLE_STATUS_STAGE_TIMEOUTS feature. + +#define USB_ENABLE_STATUS_STAGE_TIMEOUTS //Comment this out to disable this feature. + +//Section 9.2.6 of the USB 2.0 specifications indicate that: +//1. Control transfers with no data stage: Status stage must complete within +// 50ms of the start of the control transfer. +//2. Control transfers with (IN) data stage: Status stage must complete within +// 50ms of sending the last IN data packet in fullfilment of the data stage. +//3. Control transfers with (OUT) data stage: No specific status stage timing +// requirement. However, the total time of the entire control transfer (ex: +// including the OUT data stage and IN status stage) must not exceed 5 seconds. +// +//Therefore, if the USB_ENABLE_STATUS_STAGE_TIMEOUTS feature is used, it is suggested +//to set the USB_STATUS_STAGE_TIMEOUT value to timeout in less than 50ms. If the +//USB_ENABLE_STATUS_STAGE_TIMEOUTS feature is not enabled, then the USB_STATUS_STAGE_TIMEOUT +//parameter is not relevant. + +#define USB_STATUS_STAGE_TIMEOUT (BYTE)45 //Approximate timeout in milliseconds, except when + //USB_POLLING mode is used, and USBDeviceTasks() is called at < 1kHz + //In this special case, the timeout becomes approximately: +//Timeout(in milliseconds) = ((1000 * (USB_STATUS_STAGE_TIMEOUT - 1)) / (USBDeviceTasks() polling frequency in Hz)) +//------------------------------------------------------------------------------------------------------------------ + +#define USB_SUPPORT_DEVICE + +#define USB_NUM_STRING_DESCRIPTORS 3 + +//#define USB_INTERRUPT_LEGACY_CALLBACKS +#define USB_ENABLE_ALL_HANDLERS +//#define USB_ENABLE_SUSPEND_HANDLER +//#define USB_ENABLE_WAKEUP_FROM_SUSPEND_HANDLER +//#define USB_ENABLE_SOF_HANDLER +//#define USB_ENABLE_ERROR_HANDLER +//#define USB_ENABLE_OTHER_REQUEST_HANDLER +//#define USB_ENABLE_SET_DESCRIPTOR_HANDLER +//#define USB_ENABLE_INIT_EP_HANDLER +//#define USB_ENABLE_EP0_DATA_HANDLER +//#define USB_ENABLE_TRANSFER_COMPLETE_HANDLER + +/** DEVICE CLASS USAGE *********************************************/ +#define USB_USE_HID + +/** ENDPOINTS ALLOCATION *******************************************/ + +/* HID */ +#define HID_INTF_ID 0x00 +#define HID_EP 1 +#define HID_INT_OUT_EP_SIZE 3 +#define HID_INT_IN_EP_SIZE 3 +#define HID_NUM_OF_DSC 1 +#define HID_RPT01_SIZE 28 + +/** DEFINITIONS ****************************************************/ + +#endif //USBCFG_H diff --git a/software/front/US_BootLoader.X/usb/usb_descriptors.c b/software/front/US_BootLoader.X/usb/usb_descriptors.c new file mode 100644 index 0000000..e5fefdc --- /dev/null +++ b/software/front/US_BootLoader.X/usb/usb_descriptors.c @@ -0,0 +1,286 @@ +/******************************************************************** + FileName: usb_descriptors.c + Dependencies: See INCLUDES section + Processor: PIC18 or PIC24 USB Microcontrollers + Hardware: The code is natively intended to be used on the following + hardware platforms: PICDEM™ FS USB Demo Board, + PIC18F87J50 FS USB Plug-In Module, or + Explorer 16 + PIC24 USB PIM. The firmware may be + modified for use on other USB platforms by editing the + HardwareProfile.h file. + Complier: Microchip C18 (for PIC18) or C30 (for PIC24) + Company: Microchip Technology, Inc. + + Software License Agreement: + + The software supplied herewith by Microchip Technology Incorporated + (the “Company”) for its PIC® Microcontroller is intended and + supplied to you, the Company’s customer, for use solely and + exclusively on Microchip PIC Microcontroller products. The + software is owned by the Company and/or its supplier, and is + protected under applicable copyright laws. All rights are reserved. + Any use in violation of the foregoing restrictions may subject the + user to criminal sanctions under applicable laws, as well as to + civil liability for the breach of the terms and conditions of this + license. + + THIS SOFTWARE IS PROVIDED IN AN “AS IS” CONDITION. NO WARRANTIES, + WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED + TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT, + IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR + CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. + +********************************************************************* +-usb_descriptors.c- +------------------------------------------------------------------- +Filling in the descriptor values in the usb_descriptors.c file: +------------------------------------------------------------------- + +[Device Descriptors] +The device descriptor is defined as a USB_DEVICE_DESCRIPTOR type. +This type is defined in usb_ch9.h Each entry into this structure +needs to be the correct length for the data type of the entry. + +[Configuration Descriptors] +The configuration descriptor was changed in v2.x from a structure +to a BYTE array. Given that the configuration is now a byte array +each byte of multi-byte fields must be listed individually. This +means that for fields like the total size of the configuration where +the field is a 16-bit value "64,0," is the correct entry for a +configuration that is only 64 bytes long and not "64," which is one +too few bytes. + +The configuration attribute must always have the _DEFAULT +definition at the minimum. Additional options can be ORed +to the _DEFAULT attribute. Available options are _SELF and _RWU. +These definitions are defined in the usb_device.h file. The +_SELF tells the USB host that this device is self-powered. The +_RWU tells the USB host that this device supports Remote Wakeup. + +[Endpoint Descriptors] +Like the configuration descriptor, the endpoint descriptors were +changed in v2.x of the stack from a structure to a BYTE array. As +endpoint descriptors also has a field that are multi-byte entities, +please be sure to specify both bytes of the field. For example, for +the endpoint size an endpoint that is 64 bytes needs to have the size +defined as "64,0," instead of "64," + +Take the following example: + // Endpoint Descriptor // + 0x07, //the size of this descriptor // + USB_DESCRIPTOR_ENDPOINT, //Endpoint Descriptor + _EP02_IN, //EndpointAddress + _INT, //Attributes + 0x08,0x00, //size (note: 2 bytes) + 0x02, //Interval + +The first two parameters are self-explanatory. They specify the +length of this endpoint descriptor (7) and the descriptor type. +The next parameter identifies the endpoint, the definitions are +defined in usb_device.h and has the following naming +convention: +_EP<##>_ +where ## is the endpoint number and dir is the direction of +transfer. The dir has the value of either 'OUT' or 'IN'. +The next parameter identifies the type of the endpoint. Available +options are _BULK, _INT, _ISO, and _CTRL. The _CTRL is not +typically used because the default control transfer endpoint is +not defined in the USB descriptors. When _ISO option is used, +addition options can be ORed to _ISO. Example: +_ISO|_AD|_FE +This describes the endpoint as an isochronous pipe with adaptive +and feedback attributes. See usb_device.h and the USB +specification for details. The next parameter defines the size of +the endpoint. The last parameter in the polling interval. + +------------------------------------------------------------------- +Adding a USB String +------------------------------------------------------------------- +A string descriptor array should have the following format: + +rom struct{byte bLength;byte bDscType;word string[size];}sdxxx={ +sizeof(sdxxx),DSC_STR,}; + +The above structure provides a means for the C compiler to +calculate the length of string descriptor sdxxx, where xxx is the +index number. The first two bytes of the descriptor are descriptor +length and type. The rest are string texts which must be +in the unicode format. The unicode format is achieved by declaring +each character as a word type. The whole text string is declared +as a word array with the number of characters equals to . + has to be manually counted and entered into the array +declaration. Let's study this through an example: +if the string is "USB" , then the string descriptor should be: +(Using index 02) +rom struct{byte bLength;byte bDscType;word string[3];}sd002={ +sizeof(sd002),DSC_STR,'U','S','B'}; + +A USB project may have multiple strings and the firmware supports +the management of multiple strings through a look-up table. +The look-up table is defined as: +rom const unsigned char *rom USB_SD_Ptr[]={&sd000,&sd001,&sd002}; + +The above declaration has 3 strings, sd000, sd001, and sd002. +Strings can be removed or added. sd000 is a specialized string +descriptor. It defines the language code, usually this is +US English (0x0409). The index of the string must match the index +position of the USB_SD_Ptr array, &sd000 must be in position +USB_SD_Ptr[0], &sd001 must be in position USB_SD_Ptr[1] and so on. +The look-up table USB_SD_Ptr is used by the get string handler +function. + +------------------------------------------------------------------- + +The look-up table scheme also applies to the configuration +descriptor. A USB device may have multiple configuration +descriptors, i.e. CFG01, CFG02, etc. To add a configuration +descriptor, user must implement a structure similar to CFG01. +The next step is to add the configuration descriptor name, i.e. +cfg01, cfg02,.., to the look-up table USB_CD_Ptr. USB_CD_Ptr[0] +is a dummy place holder since configuration 0 is the un-configured +state according to the definition in the USB specification. + +********************************************************************/ + +/********************************************************************* + * Descriptor specific type definitions are defined in: + * usb_device.h + * + * Configuration options are defined in: + * usb_config.h + ********************************************************************/ +#ifndef __USB_DESCRIPTORS_C +#define __USB_DESCRIPTORS_C + +/** INCLUDES *******************************************************/ +#include "usb.h" +#include "usb_function_hid.h" + +/** CONSTANTS ******************************************************/ +#if defined(__18CXX) +#pragma romdata +#endif + +/* Device Descriptor */ +ROM USB_DEVICE_DESCRIPTOR device_dsc= +{ + 0x12, // Size of this descriptor in bytes + USB_DESCRIPTOR_DEVICE, // DEVICE descriptor type + 0x0200, // USB Spec Release Number in BCD format + 0x00, // Class Code + 0x00, // Subclass code + 0x00, // Protocol code + USB_EP0_BUFF_SIZE, // Max packet size for EP0, see usb_config.h + 0x04D8, // Vendor ID + 0x003C, // Product ID: Custom HID device demo + 0x0002, // Device release number in BCD format + 0x01, // Manufacturer string index + 0x02, // Product string index + 0x00, // Device serial number string index + 0x01 // Number of possible configurations +}; + +/* Configuration 1 Descriptor */ +ROM BYTE configDescriptor1[]={ + /* Configuration Descriptor */ + 0x09,//sizeof(USB_CFG_DSC), // Size of this descriptor in bytes + USB_DESCRIPTOR_CONFIGURATION, // CONFIGURATION descriptor type + 0x29,0x00, // Total length of data for this cfg + 1, // Number of interfaces in this cfg + 1, // Index value of this configuration + 0, // Configuration string index + _DEFAULT | _SELF, // Attributes, see usb_device.h + 50, // Max power consumption (2X mA) + + /* Interface Descriptor */ + 0x09,//sizeof(USB_INTF_DSC), // Size of this descriptor in bytes + USB_DESCRIPTOR_INTERFACE, // INTERFACE descriptor type + 0, // Interface Number + 0, // Alternate Setting Number + 2, // Number of endpoints in this intf + HID_INTF, // Class code + 0, // Subclass code + 0, // Protocol code + 0, // Interface string index + + /* HID Class-Specific Descriptor */ + 0x09,//sizeof(USB_HID_DSC)+3, // Size of this descriptor in bytes + DSC_HID, // HID descriptor type + 0x11,0x01, // HID Spec Release Number in BCD format (1.11) + 0x00, // Country Code (0x00 for Not supported) + HID_NUM_OF_DSC, // Number of class descriptors, see usbcfg.h + DSC_RPT, // Report descriptor type + HID_RPT01_SIZE,0x00,//sizeof(hid_rpt01), // Size of the report descriptor + + /* Endpoint Descriptor */ + 0x07,/*sizeof(USB_EP_DSC)*/ + USB_DESCRIPTOR_ENDPOINT, //Endpoint Descriptor + HID_EP | _EP_IN, //EndpointAddress + _INTERRUPT, //Attributes + 0x40,0x00, //size + 0x01, //Interval + + /* Endpoint Descriptor */ + 0x07,/*sizeof(USB_EP_DSC)*/ + USB_DESCRIPTOR_ENDPOINT, //Endpoint Descriptor + HID_EP | _EP_OUT, //EndpointAddress + _INTERRUPT, //Attributes + 0x40,0x00, //size + 0x01 //Interval +}; + +//Language code string descriptor +ROM struct{BYTE bLength;BYTE bDscType;WORD string[1];}sd000={ +sizeof(sd000),USB_DESCRIPTOR_STRING,{0x0409 +}}; + +//Manufacturer string descriptor +ROM struct{BYTE bLength;BYTE bDscType;WORD string[15];}sd001={ +sizeof(sd001),USB_DESCRIPTOR_STRING, +{'S','p','a','r','k','y','S','o','f','t',' ','l','t','d','.' +}}; + +//Product string descriptor +ROM struct{BYTE bLength;BYTE bDscType;WORD string[30];}sd002={ +sizeof(sd002),USB_DESCRIPTOR_STRING, +{'U','n','i','S','o','l','d','e','r',' ','S','o','l','d','e','r','i','n','g',' ','C','o','n','t','r','o','l','l','e','r' +}}; + +//Class specific descriptor - HID +ROM struct{BYTE report[HID_RPT01_SIZE];}hid_rpt01={ +{ + 0x06, 0x00, 0xFF, // Usage Page = 0xFF00 (Vendor Defined Page 1) + 0x09, 0x01, // Usage (Vendor Usage 1) + 0xA1, 0x01, // Collection (Application) + 0x19, 0x01, // Usage Minimum + 0x29, 0x40, // Usage Maximum //64 input usages total (0x01 to 0x40) + 0x15, 0x01, // Logical Minimum (data bytes in the report may have minimum value = 0x00) + 0x25, 0x40, // Logical Maximum (data bytes in the report may have maximum value = 0x00FF = unsigned 255) + 0x75, 0x08, // Report Size: 8-bit field size + 0x95, 0x40, // Report Count: Make sixty-four 8-bit fields (the next time the parser hits an "Input", "Output", or "Feature" item) + 0x81, 0x00, // Input (Data, Array, Abs): Instantiates input packet fields based on the above report size, count, logical min/max, and usage. + 0x19, 0x01, // Usage Minimum + 0x29, 0x40, // Usage Maximum //64 output usages total (0x01 to 0x40) + 0x91, 0x00, // Output (Data, Array, Abs): Instantiates output packet fields. Uses same report size and count as "Input" fields, since nothing new/different was specified to the parser since the "Input" item. + 0xC0} // End Collection +}; + + +//Array of configuration descriptors +ROM BYTE *ROM USB_CD_Ptr[]= +{ + (ROM BYTE *ROM)&configDescriptor1 +}; + +//Array of string descriptors +ROM BYTE *ROM USB_SD_Ptr[]= +{ + (ROM BYTE *ROM)&sd000, + (ROM BYTE *ROM)&sd001, + (ROM BYTE *ROM)&sd002 +}; + +/** EOF usb_descriptors.c ***************************************************/ + +#endif diff --git a/software/front/US_BootLoader.X/usb/usb_device.c b/software/front/US_BootLoader.X/usb/usb_device.c new file mode 100644 index 0000000..2e37a8b --- /dev/null +++ b/software/front/US_BootLoader.X/usb/usb_device.c @@ -0,0 +1,3135 @@ +/******************************************************************** + File Information: + FileName: usb_device.c + Dependencies: See INCLUDES section + Processor: PIC18,PIC24, PIC32 and dsPIC33E USB Microcontrollers + Hardware: This code is natively intended to be used on Mirochip USB + demo boards. See www.microchip.com/usb (Software & Tools + section) for list of available platforms. The firmware may + be modified for use on other USB platforms by editing the + HardwareProfile.h and HardwareProfile - [platform].h files. + Complier: Microchip C18 (for PIC18),C30 (for PIC24 and dsPIC33E) + and C32 (for PIC32) + Company: Microchip Technology, Inc. + + Software License Agreement: + + The software supplied herewith by Microchip Technology Incorporated + (the "Company") for its PIC(r) Microcontroller is intended and + supplied to you, the Company's customer, for use solely and + exclusively on Microchip PIC Microcontroller products. The + software is owned by the Company and/or its supplier, and is + protected under applicable copyright laws. All rights are reserved. + Any use in violation of the foregoing restrictions may subject the + user to criminal sanctions under applicable laws, as well as to + civil liability for the breach of the terms and conditions of this + license. + + THIS SOFTWARE IS PROVIDED IN AN "AS IS" CONDITION. NO WARRANTIES, + WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED + TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT, + IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR + CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. + + Summary: + This file contains functions, macros, definitions, variables, + datatypes, etc. that are required for usage with the MCHPFSUSB device + stack. This file should be included in projects that use the device stack. + + This file is located in the "\\\Microchip\\USB" + directory. + + Description: + USB Device Stack File + + This file contains functions, macros, definitions, variables, + datatypes, etc. that are required for usage with the MCHPFSUSB device + stack. This file should be included in projects that use the device stack. + + This file is located in the "\\\Microchip\\USB" + directory. + + When including this file in a new project, this file can either be + referenced from the directory in which it was installed or copied + directly into the user application folder. If the first method is + chosen to keep the file located in the folder in which it is installed + then include paths need to be added so that the library and the + application both know where to reference each others files. If the + application folder is located in the same folder as the Microchip + folder (like the current demo folders), then the following include + paths need to be added to the application's project: + + . + ..\\..\\MicrochipInclude + + If a different directory structure is used, modify the paths as + required. An example using absolute paths instead of relative paths + would be the following: + + C:\\Microchip Solutions\\Microchip\\Include + + C:\\Microchip Solutions\\My Demo Application + +******************************************************************** + File Description: + + Change History: + Rev Description + ---- ----------- + 2.6 Added USBCancelIO() function. Moved and some stack + defintions to be more consistant with the host stack. + + 2.6a Fixed issue where a SET_CONFIGURATION received could cause + inability to transmit on an endpoint if using ping-pong + and an odd number of packets had been sent on that endpoint + + 2.7 Fixed error where the USB error interrupt flag was not getting + cleared properly for PIC32 resulting in lots of extra error interrupts. + http://www.microchip.com/forums/tm.aspx?m=479085 + + Fixed issue with dual role mode when device run in polling + mode. Interrupts were remaining enabled after the host mode + operation was complete. This was incompatible with polling + mode operation. + + Changed how the bus sensing works. In previous revisions it + was impossible to use the USBDeviceDetach to detach from the + bus if the bus voltage was still present. This is now + possible. It was also possible to move the device to the + ATTACHED state in interrupt mode even if the bus voltage + wasn't available. This is now prohibited unless VBUS is + present. + + Improved error case handling when the host sends more OUT + bytes in a control transfer than the firmware was expecting + to receive (based on the size parameter when calling USBEP0Receive()). + + In the USBStdSetCfgHandler(), modified the code so the USBDeviceState + variable only gets updated to the CONFIGURED_STATE at the end of the + function. + + 2.7a Update to support the PIC18F47J53 A1 and later revision + devices. + + Fixed an error on 16-bit and 32-bit processors where a word access + could be performed on a byte pointer resulting in possible address + errors with odd aligned pointers. + + 2.8 Several changes to the way control transfers get processed, + so as to support the ability to allow application/class specific + handler code to defer the status stage. + Implemented USBCtrlEPAllowStatusStage() API function. + Implemented USBDeferStatusStage() API function (macro). + These changes also greatly relax the USBDeviceTasks() calling frequency + requirement, while allowing USB class handlers more flexibility. + + Also implemented the following API functions and macros, for delaying + the data stage of a control transfer (with data stage): + USBDeferINDataStage() + USBDeferOUTDataStage() + USBOUTDataStageDeferred() + USBINDataStageDeferred() + USBCtrlEPAllowDataStage() + + Fixed USB reset event handler issue, where the USB stack would + re-initialize global interrupt settings in the interrupt context, on + PIC18 devices with the stack operated in USB_INTERRUPT mode. + + Fixed handling of SET/CLEAR FEATURE (endpoint halt) host requests. + Previous implementation would not always initialize endpoints correctly + to DATA0 DTS state after a clear feature endpoint halt request, for + all ping pong mode and usage scenarios. + + 2.9 Fixed an issue with STALL handling behavior on non-EP0 endpoints, for + PIC24 and PIC32 devices. + + Fixed an issue where the ep_data_in[]/ep_data_out[] flags weren't + getting re-initialized coincident with the hardware ping pong pointer + reset during set configuration events. + + Implemented USBGetNextHandle() API function (actually a macro, defined + in usb_device.h). + + 2.9d Added build option for disabling DTS checking + + 2.9f Adding pragma for PIC18F97J94 Family BDT location. + + 2.9h Updated to be able to support optional Microsoft OS Descriptors + + 2.9i Updated to set UCON bit on PIC16F USB devices during + suspend, so as to save power. + +********************************************************************/ + +/*---------------------------------------------------------------------------------- +The USBDeviceTasks() function is responsible for detecting and processing various +USB bus events and host requests, such as those required for USB enumeration, when +the USB cable is first attached to the host. This function is the main dispatcher +routine for the USB stack. + +Additional API functions and macros are also provided by the USB stack, which can be +used to send/receive USB data to/from the host, among other things. A full list +of the available implemented functions/macros are provided in the +"MCHPFSUSB Library Help". For normal installations of the MCHPFSUSB Framework, +the USB API documentation can be found from: + +Start menu --> (All Programs) --> Microchip --> MCHPFSUSB vX.x --> Documents --> MCHPFSUSB Library Help + +Once the help file is opened, the API functions/macros are described in the following section: +Library Interface (API) --> Device/Peripheral --> Device Stack --> Interface Routines +Additional API functions may also be provided depending upon the specific USB device class +implemented, and these functions are also documented in the MCHPFSUSB Library Help. + + +If the USB stack is operated in "USB_POLLING" mode (user selectable option in +usb_config.h), then the application firmware is reponsible for calling the +USBDeviceTasks() function periodically. If the USB stack is operated in the +"USB_INTERRUPT" mode, then the application firmware does not have to directly +call USBDeviceTasks(), as it will execute only when necessary as an interrupt handler. + +In order to properly operate a USB connection, and to correctly process and respond +to control transfers in the maximum time allowed by the USB specifications, the +USBDeviceTasks() function/interrupt handler must be allowed to execute in a timely +fashion. + +When the USB module is enabled, the USB cable is attached to the host, the USB bus +is not in the suspend state, and the USB stack is operated in the USB_POLLING mode +with ping pong buffering enabled (at least) on EP0 OUT, then the maximum allowed +time between calls to the USBDeviceTasks() function needs to be: + +The faster of: +1. Once per ~1.8ms, when USBDeviceState == ADR_PENDING_STATE +2. Once per ~9.8ms, when USBDeviceState == (any other value other than ADR_PENDING_STATE) +3. Fast enough to ensure the USTAT FIFO can never get full. See additional explanation below. + +Additional details of the above timing limits are provided: + +Timing item #1: This parameter originates from the 2ms set address "recovery interval" +specification dictated by section "9.2.6.3 Set Address Processing" of the official +USB 2.0 specifications. + +Timing item #2: This parameter originates from several "10 ms" criteria in the +USB 2.0 specifications. For example, reset recovery intervals, resume recovery +intervals, suspend to actual current reduction, etc. have timing maximums of 10ms. + +Timing item #3: This is not a fixed X.X ms parameter, but depends on the +transaction rate implemented by the application. The USBDeviceTasks() function is +responsible for popping entries off the USTAT FIFO. If the FIFO ever gets full, +then no further USB transactions are allowed to occur, until the firmware pops entries +off the FIFO. In practice, this means the firmware should call USBDeviceTasks() at +a rate at least as fast as once every three times the USBTransferOnePacket() function +is called. This ensures that the rate that USTAT FIFO entries are getting added to +the FIFO is lower than the rate that the entries are getting popped off the FIFO (the +USBDeviceTasks() function will pop up to 4 entries per call), which is a +necessary criteria to ensure the USTAT FIFO entries don't "pile up." Calling +USBDeviceTasks() even more often, ex: >=1 to 1 ratio of USBDeviceTasks() to +USBTransferOnePacket(), adds further protection against the USTAT FIFO getting full, +and is therefore recommended. + +When the USB stack is operated in USB_INTERRUPT mode, then the above timing +parameters should be interpreted to be the longest allowed time that the USB +interrupts may be masked/disabled for, before re-enabling the USB interrupts. + +Calling USBDeviceTasks() (or allowing USBDeviceTasks() to be called) more often +will still have potential USB data rate speed and processing latency benefits. +It is also beneficial to call USBDeviceTasks() more often than theoretically +required, since it has been observed that not all host/drivers/bios/hubs are +100% consistently compliant with all timing parameters of the USB 2.0 specifications. +Therefore, in a USB_POLLING based application, it is still suggested to call +USBDeviceTasks() as often as there are free CPU cycles. This ensures best +performance, along with best possible compatibility with all existing USB +hosts/hubs (both those that are compliant and [partially] non-compliant). + +If ping pong buffering is not enabled on (at least) EP0 OUT, then it is required +to call (or allow to execute) USBDeviceTasks() much more frequently (ex: once +per 100us, or preferrably faster). Therefore, in all applications, it is +normally recommended to select either the USB_PING_PONG__FULL_PING_PONG or +USB_PING_PONG__EP0_OUT_ONLY mode (user option in usb_config.h), as these modes +allow for much more relaxed timing requirements, and therefore greater application +firmware design flexibility. +//----------------------------------------------------------------------------------*/ + +/** INCLUDES *******************************************************/ +#include "..\mcu.h" + +#include "usb.h" + +#include "usb_device_local.h" + + +#if defined(USB_USE_MSD) + #include "./USB/usb_function_msd.h" +#endif + +#if !defined(USE_USB_BUS_SENSE_IO) + #undef USB_BUS_SENSE + #define USB_BUS_SENSE 1 +#endif + +#if defined(USB_DEVICE_DISABLE_DTS_CHECKING) + #define _DTS_CHECKING_ENABLED 0 +#else + #define _DTS_CHECKING_ENABLED _DTSEN +#endif + +/** DEFINITIONS ****************************************************/ + +/** VARIABLES ******************************************************/ +#if defined(__18CXX) + #pragma udata +#endif + +USB_VOLATILE USB_DEVICE_STATE USBDeviceState; +USB_VOLATILE BYTE USBActiveConfiguration; +USB_VOLATILE BYTE USBAlternateInterface[USB_MAX_NUM_INT]; +volatile BDT_ENTRY *pBDTEntryEP0OutCurrent; +volatile BDT_ENTRY *pBDTEntryEP0OutNext; +volatile BDT_ENTRY *pBDTEntryOut[USB_MAX_EP_NUMBER+1]; +volatile BDT_ENTRY *pBDTEntryIn[USB_MAX_EP_NUMBER+1]; +USB_VOLATILE BYTE shortPacketStatus; +USB_VOLATILE BYTE controlTransferState; +USB_VOLATILE IN_PIPE inPipes[1]; +USB_VOLATILE OUT_PIPE outPipes[1]; +USB_VOLATILE BYTE *pDst; +USB_VOLATILE BOOL RemoteWakeup; +USB_VOLATILE BOOL USBBusIsSuspended; +USB_VOLATILE USTAT_FIELDS USTATcopy; +USB_VOLATILE BYTE endpoint_number; +USB_VOLATILE BOOL BothEP0OutUOWNsSet; +USB_VOLATILE EP_STATUS ep_data_in[USB_MAX_EP_NUMBER+1]; +USB_VOLATILE EP_STATUS ep_data_out[USB_MAX_EP_NUMBER+1]; +USB_VOLATILE BYTE USBStatusStageTimeoutCounter; +volatile BOOL USBDeferStatusStagePacket; +volatile BOOL USBStatusStageEnabledFlag1; +volatile BOOL USBStatusStageEnabledFlag2; +volatile BOOL USBDeferINDataStagePackets; +volatile BOOL USBDeferOUTDataStagePackets; + + +#if (USB_PING_PONG_MODE == USB_PING_PONG__NO_PING_PONG) + #define BDT_NUM_ENTRIES ((USB_MAX_EP_NUMBER + 1) * 2) +#elif (USB_PING_PONG_MODE == USB_PING_PONG__EP0_OUT_ONLY) + #define BDT_NUM_ENTRIES (((USB_MAX_EP_NUMBER + 1) * 2)+1) +#elif (USB_PING_PONG_MODE == USB_PING_PONG__FULL_PING_PONG) + #define BDT_NUM_ENTRIES ((USB_MAX_EP_NUMBER + 1) * 4) +#elif (USB_PING_PONG_MODE == USB_PING_PONG__ALL_BUT_EP0) + #define BDT_NUM_ENTRIES (((USB_MAX_EP_NUMBER + 1) * 4)-2) +#else + #error "No ping pong mode defined." +#endif + +/** USB FIXED LOCATION VARIABLES ***********************************/ +#if defined(__18CXX) + #pragma udata USB_BDT=USB_BDT_ADDRESS +#endif + +volatile BDT_ENTRY BDT[BDT_NUM_ENTRIES] BDT_BASE_ADDR_TAG; + +/******************************************************************** + * Section B: EP0 Buffer Space + *******************************************************************/ +volatile CTRL_TRF_SETUP SetupPkt CTRL_TRF_SETUP_ADDR_TAG; +volatile BYTE CtrlTrfData[USB_EP0_BUFF_SIZE] CTRL_TRF_DATA_ADDR_TAG; + +/******************************************************************** + * Section C: non-EP0 Buffer Space + *******************************************************************/ +#if defined(USB_USE_MSD) + //volatile far USB_MSD_CBW_CSW msd_cbw_csw; + volatile USB_MSD_CBW msd_cbw; + volatile USB_MSD_CSW msd_csw; + //#pragma udata + + #if defined(__18CXX) + #pragma udata myMSD=MSD_BUFFER_ADDRESS + #endif + volatile char msd_buffer[512]; +#endif + + + +////Depricated in v2.2 - will be removed in a future revision +#if !defined(USB_USER_DEVICE_DESCRIPTOR) + //Device descriptor + extern ROM USB_DEVICE_DESCRIPTOR device_dsc; +#else + USB_USER_DEVICE_DESCRIPTOR_INCLUDE; +#endif + +#if !defined(USB_USER_CONFIG_DESCRIPTOR) + //Array of configuration descriptors + extern ROM BYTE *ROM USB_CD_Ptr[]; +#else + USB_USER_CONFIG_DESCRIPTOR_INCLUDE; +#endif + +extern ROM BYTE *ROM USB_SD_Ptr[]; + +/** DECLARATIONS ***************************************************/ +#if defined(__18CXX) + #pragma code +#endif + +/** Macros *********************************************************/ + +/** Function Prototypes ********************************************/ +//External +//This is the prototype for the required user event handler +BOOL USER_USB_CALLBACK_EVENT_HANDLER(int event, void *pdata, WORD size); + +//Internal Functions +static void USBCtrlEPService(void); +static void USBCtrlTrfSetupHandler(void); +static void USBCtrlTrfInHandler(void); +static void USBCheckStdRequest(void); +static void USBStdGetDscHandler(void); +static void USBCtrlEPServiceComplete(void); +static void USBCtrlTrfTxService(void); +static void USBCtrlTrfRxService(void); +static void USBStdSetCfgHandler(void); +static void USBStdGetStatusHandler(void); +static void USBStdFeatureReqHandler(void); +static void USBCtrlTrfOutHandler(void); +static void USBConfigureEndpoint(BYTE EPNum, BYTE direction); +static void USBWakeFromSuspend(void); +static void USBSuspend(void); +static void USBStallHandler(void); + +//static BOOL USBIsTxBusy(BYTE EPNumber); +//static void USBPut(BYTE EPNum, BYTE Data); +//static void USBEPService(void); +//static void USBProtocolResetHandler(void); + +/******************************************************************************/ +/** Function Implementations *************************************************/ +/******************************************************************************/ + +/******************************************************************************/ +/** Internal Macros *********************************************************/ +/******************************************************************************/ + +/**************************************************************************** + Function: + void USBAdvancePingPongBuffer(BDT_ENTRY** buffer) + + Description: + This function will advance the passed pointer to the next buffer based on + the ping pong option setting. This function should be used for EP1-EP15 + only. This function is not valid for EP0. + + Precondition: + None + + Parameters: + BDT_ENTRY** - pointer to the BDT_ENTRY pointer that you want to be advanced + to the next buffer state + + Return Values: + None + + Remarks: + None + + ***************************************************************************/ +#define USBAdvancePingPongBuffer(buffer) ((BYTE_VAL*)buffer)->Val ^= USB_NEXT_PING_PONG; +#define USBHALPingPongSetToOdd(buffer) {((BYTE_VAL*)buffer)->Val |= USB_NEXT_PING_PONG;} +#define USBHALPingPongSetToEven(buffer) {((BYTE_VAL*)buffer)->Val &= ~USB_NEXT_PING_PONG;} + + +/******************************************************************************/ +/** External API Functions ****************************************************/ +/******************************************************************************/ + +/************************************************************************** + Function: + void USBDeviceInit(void) + + Description: + This function initializes the device stack it in the default state. The + USB module will be completely reset including all of the internal + variables, registers, and interrupt flags. + + Precondition: + This function must be called before any of the other USB Device + functions can be called, including USBDeviceTasks(). + + Parameters: + None + + Return Values: + None + + Remarks: + None + + ***************************************************************************/ +void USBDeviceInit(void) +{ + BYTE i; + + USBDisableInterrupts(); + + // Clear all USB error flags + USBClearInterruptRegister(U1EIR); + + // Clears all USB interrupts + USBClearInterruptRegister(U1IR); + + //Clear all of the endpoint control registers + U1EP0 = 0; + + DisableNonZeroEndpoints(USB_MAX_EP_NUMBER); + + SetConfigurationOptions(); + + //power up the module (if not already powered) + USBPowerModule(); + + //set the address of the BDT (if applicable) + USBSetBDTAddress(BDT); + + //Clear all of the BDT entries + for(i=0;i<(sizeof(BDT)/sizeof(BDT_ENTRY));i++) + { + BDT[i].Val = 0x00; + } + + // Assert reset request to all of the Ping Pong buffer pointers + USBPingPongBufferReset = 1; + + // Reset to default address + U1ADDR = 0x00; + + // Make sure packet processing is enabled + USBPacketDisable = 0; + + //Stop trying to reset ping pong buffer pointers + USBPingPongBufferReset = 0; + + // Flush any pending transactions + while(USBTransactionCompleteIF == 1) + { + USBClearInterruptFlag(USBTransactionCompleteIFReg,USBTransactionCompleteIFBitNum); + //Initialize USB stack software state variables + inPipes[0].info.Val = 0; + outPipes[0].info.Val = 0; + outPipes[0].wCount.Val = 0; + } + + //Set flags to TRUE, so the USBCtrlEPAllowStatusStage() function knows not to + //try and arm a status stage, even before the first control transfer starts. + USBStatusStageEnabledFlag1 = TRUE; + USBStatusStageEnabledFlag2 = TRUE; + //Initialize other flags + USBDeferINDataStagePackets = FALSE; + USBDeferOUTDataStagePackets = FALSE; + USBBusIsSuspended = FALSE; + + //Initialize all pBDTEntryIn[] and pBDTEntryOut[] + //pointers to NULL, so they don't get used inadvertently. + for(i = 0; i < (BYTE)(USB_MAX_EP_NUMBER+1u); i++) + { + pBDTEntryIn[i] = 0u; + pBDTEntryOut[i] = 0u; + ep_data_in[i].Val = 0u; + ep_data_out[i].Val = 0u; + } + + //Get ready for the first packet + pBDTEntryIn[0] = (volatile BDT_ENTRY*)&BDT[EP0_IN_EVEN]; + // Initialize EP0 as a Ctrl EP + U1EP0 = EP_CTRL|USB_HANDSHAKE_ENABLED; + //Prepare for the first SETUP on EP0 OUT + BDT[EP0_OUT_EVEN].ADR = ConvertToPhysicalAddress(&SetupPkt); + BDT[EP0_OUT_EVEN].CNT = USB_EP0_BUFF_SIZE; + BDT[EP0_OUT_EVEN].STAT.Val = _USIE|_DAT0|_BSTALL; + + // Clear active configuration + USBActiveConfiguration = 0; + + //Indicate that we are now in the detached state + USBDeviceState = DETACHED_STATE; +} + +/************************************************************************** + Function: + void USBDeviceTasks(void) + + Summary: + This function is the main state machine/transaction handler of the USB + device side stack. When the USB stack is operated in "USB_POLLING" mode + (usb_config.h user option) the USBDeviceTasks() function should be called + periodically to receive and transmit packets through the stack. This + function also takes care of control transfers associated with the USB + enumeration process, and detecting various USB events (such as suspend). + This function should be called at least once every 1.8ms during the USB + enumeration process. After the enumeration process is complete (which can + be determined when USBGetDeviceState() returns CONFIGURED_STATE), the + USBDeviceTasks() handler may be called the faster of: either once + every 9.8ms, or as often as needed to make sure that the hardware USTAT + FIFO never gets full. A good rule of thumb is to call USBDeviceTasks() at + a minimum rate of either the frequency that USBTransferOnePacket() gets + called, or, once/1.8ms, whichever is faster. See the inline code comments + near the top of usb_device.c for more details about minimum timing + requirements when calling USBDeviceTasks(). + + When the USB stack is operated in "USB_INTERRUPT" mode, it is not necessary + to call USBDeviceTasks() from the main loop context. In the USB_INTERRUPT + mode, the USBDeviceTasks() handler only needs to execute when a USB + interrupt occurs, and therefore only needs to be called from the interrupt + context. + + Description: + This function is the main state machine/transaction handler of the USB + device side stack. When the USB stack is operated in "USB_POLLING" mode + (usb_config.h user option) the USBDeviceTasks() function should be called + periodically to receive and transmit packets through the stack. This + function also takes care of control transfers associated with the USB + enumeration process, and detecting various USB events (such as suspend). + This function should be called at least once every 1.8ms during the USB + enumeration process. After the enumeration process is complete (which can + be determined when USBGetDeviceState() returns CONFIGURED_STATE), the + USBDeviceTasks() handler may be called the faster of: either once + every 9.8ms, or as often as needed to make sure that the hardware USTAT + FIFO never gets full. A good rule of thumb is to call USBDeviceTasks() at + a minimum rate of either the frequency that USBTransferOnePacket() gets + called, or, once/1.8ms, whichever is faster. See the inline code comments + near the top of usb_device.c for more details about minimum timing + requirements when calling USBDeviceTasks(). + + When the USB stack is operated in "USB_INTERRUPT" mode, it is not necessary + to call USBDeviceTasks() from the main loop context. In the USB_INTERRUPT + mode, the USBDeviceTasks() handler only needs to execute when a USB + interrupt occurs, and therefore only needs to be called from the interrupt + context. + + Typical usage: + + void main(void) + { + USBDeviceInit(); + while(1) + { + USBDeviceTasks(); //Takes care of enumeration and other USB events + if((USBGetDeviceState() \< CONFIGURED_STATE) || + (USBIsDeviceSuspended() == TRUE)) + { + //Either the device is not configured or we are suspended, + // so we don't want to execute any USB related application code + continue; //go back to the top of the while loop + } + else + { + //Otherwise we are free to run USB and non-USB related user + //application code. + UserApplication(); + } + } + } + + + Precondition: + Make sure the USBDeviceInit() function has been called prior to calling + USBDeviceTasks() for the first time. + Remarks: + USBDeviceTasks() does not need to be called while in the USB suspend mode, + if the user application firmware in the USBCBSuspend() callback function + enables the ACTVIF USB interrupt source and put the microcontroller into + sleep mode. If the application firmware decides not to sleep the + microcontroller core during USB suspend (ex: continues running at full + frequency, or clock switches to a lower frequency), then the USBDeviceTasks() + function must still be called periodically, at a rate frequent enough to + ensure the 10ms resume recovery interval USB specification is met. Assuming + a worst case primary oscillator and PLL start up time of <5ms, then + USBDeviceTasks() should be called once every 5ms in this scenario. + + When the USB cable is detached, or the USB host is not actively powering + the VBUS line to +5V nominal, the application firmware does not always have + to call USBDeviceTasks() frequently, as no USB activity will be taking + place. However, if USBDeviceTasks() is not called regularly, some + alternative means of promptly detecting when VBUS is powered (indicating + host attachment), or not powered (host powered down or USB cable unplugged) + is still needed. For self or dual self/bus powered USB applications, see + the USBDeviceAttach() and USBDeviceDetach() API documentation for additional + considerations. + + **************************************************************************/ + +#if defined(USB_INTERRUPT) +#if defined(__18CXX) || defined (_PIC14E) + void USBDeviceTasks(void) + #elif defined(__C30__) || defined __XC16__ + void __attribute__((interrupt,auto_psv)) _USB1Interrupt() + #elif defined(__PIC32MX__) + void __attribute__((interrupt(),vector(_USB_1_VECTOR))) _USB1Interrupt( void ) + #endif +#else +void USBDeviceTasks(void) +#endif +{ + BYTE i; + +#ifdef USB_SUPPORT_OTG + //SRP Time Out Check + if (USBOTGSRPIsReady()) + { + if (USBT1MSECIF && USBT1MSECIE) + { + if (USBOTGGetSRPTimeOutFlag()) + { + if (USBOTGIsSRPTimeOutExpired()) + { + USB_OTGEventHandler(0,OTG_EVENT_SRP_FAILED,0,0); + } + } + + //Clear Interrupt Flag + USBClearInterruptFlag(USBT1MSECIFReg,USBT1MSECIFBitNum); + } + } +#endif + + #if defined(USB_POLLING) + //If the interrupt option is selected then the customer is required + // to notify the stack when the device is attached or removed from the + // bus by calling the USBDeviceAttach() and USBDeviceDetach() functions. + if (USB_BUS_SENSE != 1) + { + // Disable module & detach from bus + U1CON = 0; + + // Mask all USB interrupts + U1IE = 0; + + //Move to the detached state + USBDeviceState = DETACHED_STATE; + + #ifdef USB_SUPPORT_OTG + //Disable D+ Pullup + U1OTGCONbits.DPPULUP = 0; + + //Disable HNP + USBOTGDisableHnp(); + + //Deactivate HNP + USBOTGDeactivateHnp(); + + //If ID Pin Changed State + if (USBIDIF && USBIDIE) + { + //Re-detect & Initialize + USBOTGInitialize(); + + //Clear ID Interrupt Flag + USBClearInterruptFlag(USBIDIFReg,USBIDIFBitNum); + } + #endif + + #if defined __C30__ || defined __XC16__ + //USBClearInterruptFlag(U1OTGIR, 3); + #endif + //return so that we don't go through the rest of + //the state machine + USBClearUSBInterrupt(); + return; + } + + #ifdef USB_SUPPORT_OTG + //If Session Is Started Then + else + { + //If SRP Is Ready + if (USBOTGSRPIsReady()) + { + //Clear SRPReady + USBOTGClearSRPReady(); + + //Clear SRP Timeout Flag + USBOTGClearSRPTimeOutFlag(); + + //Indicate Session Started + UART2PrintString( "\r\n***** USB OTG B Event - Session Started *****\r\n" ); + } + } + #endif //#ifdef USB_SUPPORT_OTG + + //if we are in the detached state + if(USBDeviceState == DETACHED_STATE) + { + //Initialize register to known value + U1CON = 0; + + // Mask all USB interrupts + U1IE = 0; + + //Enable/set things like: pull ups, full/low-speed mode, + //set the ping pong mode, and set internal transceiver + SetConfigurationOptions(); + + // Enable module & attach to bus + while(!U1CONbits.USBEN){U1CONbits.USBEN = 1;} + + //moved to the attached state + USBDeviceState = ATTACHED_STATE; + + #ifdef USB_SUPPORT_OTG + U1OTGCON |= USB_OTG_DPLUS_ENABLE | USB_OTG_ENABLE; + #endif + } + #endif //#if defined(USB_POLLING) + + if(USBDeviceState == ATTACHED_STATE) + { + /* + * After enabling the USB module, it takes some time for the + * voltage on the D+ or D- line to rise high enough to get out + * of the SE0 condition. The USB Reset interrupt should not be + * unmasked until the SE0 condition is cleared. This helps + * prevent the firmware from misinterpreting this unique event + * as a USB bus reset from the USB host. + */ + + if(!USBSE0Event) + { + USBClearInterruptRegister(U1IR);// Clear all USB interrupts + #if defined(USB_POLLING) + U1IE=0; // Mask all USB interrupts + #endif + USBResetIE = 1; // Unmask RESET interrupt + USBIdleIE = 1; // Unmask IDLE interrupt + USBDeviceState = POWERED_STATE; + } + } + + #ifdef USB_SUPPORT_OTG + //If ID Pin Changed State + if (USBIDIF && USBIDIE) + { + //Re-detect & Initialize + USBOTGInitialize(); + + USBClearInterruptFlag(USBIDIFReg,USBIDIFBitNum); + } + #endif + + /* + * Task A: Service USB Activity Interrupt + */ + if(USBActivityIF && USBActivityIE) + { + USBClearInterruptFlag(USBActivityIFReg,USBActivityIFBitNum); + #if defined(USB_SUPPORT_OTG) + U1OTGIR = 0x10; + #else + USBWakeFromSuspend(); + #endif + } + + /* + * Pointless to continue servicing if the device is in suspend mode. + */ + if(USBSuspendControl==1) + { + USBClearUSBInterrupt(); + return; + } + + /* + * Task B: Service USB Bus Reset Interrupt. + * When bus reset is received during suspend, ACTVIF will be set first, + * once the UCONbits.SUSPND is clear, then the URSTIF bit will be asserted. + * This is why URSTIF is checked after ACTVIF. + * + * The USB reset flag is masked when the USB state is in + * DETACHED_STATE or ATTACHED_STATE, and therefore cannot + * cause a USB reset event during these two states. + */ + if(USBResetIF && USBResetIE) + { + USBDeviceInit(); + + //Re-enable the interrupts since the USBDeviceInit() function will + // disable them. This will do nothing in a polling setup + USBUnmaskInterrupts(); + + USBDeviceState = DEFAULT_STATE; + + #ifdef USB_SUPPORT_OTG + //Disable HNP + USBOTGDisableHnp(); + + //Deactivate HNP + USBOTGDeactivateHnp(); + #endif + + USBClearInterruptFlag(USBResetIFReg,USBResetIFBitNum); + } + + /* + * Task C: Service other USB interrupts + */ + if(USBIdleIF && USBIdleIE) + { + #ifdef USB_SUPPORT_OTG + //If Suspended, Try to switch to Host + USBOTGSelectRole(ROLE_HOST); + #else + USBSuspend(); + #endif + + USBClearInterruptFlag(USBIdleIFReg,USBIdleIFBitNum); + } + + if(USBSOFIF) + { + if(USBSOFIE) + { + USB_SOF_HANDLER(EVENT_SOF,0,1); + } + USBClearInterruptFlag(USBSOFIFReg,USBSOFIFBitNum); + + #if defined(USB_ENABLE_STATUS_STAGE_TIMEOUTS) + //Supporting this feature requires a 1ms timebase for keeping track of the timeout interval. + #if(USB_SPEED_OPTION == USB_LOW_SPEED) + #warning "Double click this message. See inline code comments." + //The "USB_ENABLE_STATUS_STAGE_TIMEOUTS" feature is optional and is + //not strictly needed in all applications (ex: those that never call + //USBDeferStatusStage() and don't use host to device (OUT) control + //transfers with data stage). + //However, if this feature is enabled and used, it requires a timer + //(preferrably 1ms) to decrement the USBStatusStageTimeoutCounter. + //In USB Full Speed applications, the host sends Start-of-Frame (SOF) + //packets at a 1ms rate, which generates SOFIF interrupts. + //These interrupts can be used to decrement USBStatusStageTimeoutCounter as shown + //below. However, the host does not send SOF packets to Low Speed devices. + //Therefore, some other method (ex: using a general purpose microcontroller + //timer, such as Timer0) needs to be implemented to call and execute the below code + //at a once/1ms rate, in a low speed USB application. + //Note: Pre-condition to executing the below code: USBDeviceInit() should have + //been called at least once (since the last microcontroller reset/power up), + //prior to executing the below code. + #endif + + //Decrement our status stage counter. + if(USBStatusStageTimeoutCounter != 0u) + { + USBStatusStageTimeoutCounter--; + } + //Check if too much time has elapsed since progress was made in + //processing the control transfer, without arming the status stage. + //If so, auto-arm the status stage to ensure that the control + //transfer can [eventually] complete, within the timing limits + //dictated by section 9.2.6 of the official USB 2.0 specifications. + if(USBStatusStageTimeoutCounter == 0) + { + USBCtrlEPAllowStatusStage(); //Does nothing if the status stage was already armed. + } + #endif + } + + if(USBStallIF && USBStallIE) + { + USBStallHandler(); + } + + if(USBErrorIF && USBErrorIE) + { + USB_ERROR_HANDLER(EVENT_BUS_ERROR,0,1); + USBClearInterruptRegister(U1EIR); // This clears UERRIF + + //On PIC18, clearing the source of the error will automatically clear + // the interrupt flag. On other devices the interrupt flag must be + // manually cleared. + #if defined(__C32__) || defined(__C30__) || defined __XC16__ + USBClearInterruptFlag( USBErrorIFReg, USBErrorIFBitNum ); + #endif + } + + /* + * Pointless to continue servicing if the host has not sent a bus reset. + * Once bus reset is received, the device transitions into the DEFAULT + * state and is ready for communication. + */ + if(USBDeviceState < DEFAULT_STATE) + { + USBClearUSBInterrupt(); + return; + } + + /* + * Task D: Servicing USB Transaction Complete Interrupt + */ + if(USBTransactionCompleteIE) + { + for(i = 0; i < 4u; i++) //Drain or deplete the USAT FIFO entries. If the USB FIFO ever gets full, USB bandwidth + { //utilization can be compromised, and the device won't be able to receive SETUP packets. + if(USBTransactionCompleteIF) + { + //Save and extract USTAT register info. Will use this info later. + USTATcopy.Val = U1STAT; + endpoint_number = USBHALGetLastEndpoint(USTATcopy); + + USBClearInterruptFlag(USBTransactionCompleteIFReg,USBTransactionCompleteIFBitNum); + + //Keep track of the hardware ping pong state for endpoints other + //than EP0, if ping pong buffering is enabled. + #if (USB_PING_PONG_MODE == USB_PING_PONG__ALL_BUT_EP0) || (USB_PING_PONG_MODE == USB_PING_PONG__FULL_PING_PONG) + if(USBHALGetLastDirection(USTATcopy) == OUT_FROM_HOST) + { + ep_data_out[endpoint_number].bits.ping_pong_state ^= 1; + } + else + { + ep_data_in[endpoint_number].bits.ping_pong_state ^= 1; + } + #endif + + //USBCtrlEPService only services transactions over EP0. + //It ignores all other EP transactions. + if(endpoint_number == 0) + { + USBCtrlEPService(); + } + else + { + USB_TRANSFER_COMPLETE_HANDLER(EVENT_TRANSFER, (BYTE*)&USTATcopy.Val, 0); + } + }//end if(USBTransactionCompleteIF) + else + break; //USTAT FIFO must be empty. + }//end for() + }//end if(USBTransactionCompleteIE) + + USBClearUSBInterrupt(); +}//end of USBDeviceTasks() + +/******************************************************************************* + Function: + void USBEnableEndpoint(BYTE ep, BYTE options) + + Summary: + This function will enable the specified endpoint with the specified + options + Description: + This function will enable the specified endpoint with the specified + options. + + Typical Usage: + + void USBCBInitEP(void) + { + USBEnableEndpoint(MSD_DATA_IN_EP,USB_IN_ENABLED|USB_OUT_ENABLED|USB_HANDSHAKE_ENABLED|USB_DISALLOW_SETUP); + USBMSDInit(); + } + + + In the above example endpoint number MSD_DATA_IN_EP is being configured + for both IN and OUT traffic with handshaking enabled. Also since + MSD_DATA_IN_EP is not endpoint 0 (MSD does not allow this), then we can + explicitly disable SETUP packets on this endpoint. + Conditions: + None + Input: + BYTE ep - the endpoint to be configured + BYTE options - optional settings for the endpoint. The options should + be ORed together to form a single options string. The + available optional settings for the endpoint. The + options should be ORed together to form a single options + string. The available options are the following\: + * USB_HANDSHAKE_ENABLED enables USB handshaking (ACK, + NAK) + * USB_HANDSHAKE_DISABLED disables USB handshaking (ACK, + NAK) + * USB_OUT_ENABLED enables the out direction + * USB_OUT_DISABLED disables the out direction + * USB_IN_ENABLED enables the in direction + * USB_IN_DISABLED disables the in direction + * USB_ALLOW_SETUP enables control transfers + * USB_DISALLOW_SETUP disables control transfers + * USB_STALL_ENDPOINT STALLs this endpoint + Return: + None + Remarks: + None + *****************************************************************************/ +void USBEnableEndpoint(BYTE ep, BYTE options) +{ + unsigned char* p; + + //Use USBConfigureEndpoint() to set up the pBDTEntryIn/Out[ep] pointer and + //starting DTS state in the BDT entry. + if(options & USB_OUT_ENABLED) + { + USBConfigureEndpoint(ep, OUT_FROM_HOST); + } + if(options & USB_IN_ENABLED) + { + USBConfigureEndpoint(ep, IN_TO_HOST); + } + + //Update the relevant UEPx register to actually enable the endpoint with + //the specified options (ex: handshaking enabled, control transfers allowed, + //etc.) + #if defined(__C32__) + p = (unsigned char*)(&U1EP0+(4*ep)); + #else + p = (unsigned char*)(&U1EP0+ep); + #endif + *p = options; +} + + +/************************************************************************* + Function: + USB_HANDLE USBTransferOnePacket(BYTE ep, BYTE dir, BYTE* data, BYTE len) + + Summary: + Transfers a single packet (one transaction) of data on the USB bus. + + Description: + The USBTransferOnePacket() function prepares a USB endpoint + so that it may send data to the host (an IN transaction), or + receive data from the host (an OUT transaction). The + USBTransferOnePacket() function can be used both to receive and + send data to the host. This function is the primary API function + provided by the USB stack firmware for sending or receiving application + data over the USB port. + + The USBTransferOnePacket() is intended for use with all application + endpoints. It is not used for sending or receiving applicaiton data + through endpoint 0 by using control transfers. Separate API + functions, such as USBEP0Receive(), USBEP0SendRAMPtr(), and + USBEP0SendROMPtr() are provided for this purpose. + + The USBTransferOnePacket() writes to the Buffer Descriptor Table (BDT) + entry associated with an endpoint buffer, and sets the UOWN bit, which + prepares the USB hardware to allow the transaction to complete. The + application firmware can use the USBHandleBusy() macro to check the + status of the transaction, to see if the data has been successfully + transmitted yet. + + + Typical Usage + + //make sure that the we are in the configured state + if(USBGetDeviceState() == CONFIGURED_STATE) + { + //make sure that the last transaction isn't busy by checking the handle + if(!USBHandleBusy(USBInHandle)) + { + //Write the new data that we wish to send to the host to the INPacket[] array + INPacket[0] = USEFUL_APPLICATION_VALUE1; + INPacket[1] = USEFUL_APPLICATION_VALUE2; + //INPacket[2] = ... (fill in the rest of the packet data) + + //Send the data contained in the INPacket[] array through endpoint "EP_NUM" + USBInHandle = USBTransferOnePacket(EP_NUM,IN_TO_HOST,(BYTE*)&INPacket[0],sizeof(INPacket)); + } + } + + + Conditions: + Before calling USBTransferOnePacket(), the following should be true. + 1. The USB stack has already been initialized (USBDeviceInit() was called). + 2. A transaction is not already pending on the specified endpoint. This + is done by checking the previous request using the USBHandleBusy() + macro (see the typical usage example). + 3. The host has already sent a set configuration request and the + enumeration process is complete. + This can be checked by verifying that the USBGetDeviceState() + macro returns "CONFIGURED_STATE", prior to calling + USBTransferOnePacket(). + + Input: + BYTE ep - The endpoint number that the data will be transmitted or + received on + BYTE dir - The direction of the transfer + This value is either OUT_FROM_HOST or IN_TO_HOST + BYTE* data - For IN transactions: pointer to the RAM buffer containing + the data to be sent to the host. For OUT transactions: pointer + to the RAM buffer that the received data should get written to. + BYTE len - Length of the data needing to be sent (for IN transactions). + For OUT transactions, the len parameter should normally be set + to the endpoint size specified in the endpoint descriptor. + + Return Values: + USB_HANDLE - handle to the transfer. The handle is a pointer to + the BDT entry associated with this transaction. The + status of the transaction (ex: if it is complete or still + pending) can be checked using the USBHandleBusy() macro + and supplying the USB_HANDLE provided by + USBTransferOnePacket(). + + Remarks: + If calling the USBTransferOnePacket() function from within the USBCBInitEP() + callback function, the set configuration is still being processed and the + USBDeviceState may not be == CONFIGURED_STATE yet. In this special case, + the USBTransferOnePacket() may still be called, but make sure that the + endpoint has been enabled and initialized by the USBEnableEndpoint() + function first. + + *************************************************************************/ +USB_HANDLE USBTransferOnePacket(BYTE ep,BYTE dir,BYTE* data,BYTE len) +{ + volatile BDT_ENTRY* handle; + + //If the direction is IN + if(dir != 0) + { + //point to the IN BDT of the specified endpoint + handle = pBDTEntryIn[ep]; + } + else + { + //else point to the OUT BDT of the specified endpoint + handle = pBDTEntryOut[ep]; + } + + //Error checking code. Make sure the handle (pBDTEntryIn[ep] or + //pBDTEntryOut[ep]) is initialized before using it. + if(handle == 0) + { + return 0; + } + + //Toggle the DTS bit if required + #if (USB_PING_PONG_MODE == USB_PING_PONG__NO_PING_PONG) + handle->STAT.Val ^= _DTSMASK; + #elif (USB_PING_PONG_MODE == USB_PING_PONG__EP0_OUT_ONLY) + if(ep != 0) + { + handle->STAT.Val ^= _DTSMASK; + } + #endif + + //Set the data pointer, data length, and enable the endpoint + handle->ADR = ConvertToPhysicalAddress(data); + handle->CNT = len; + handle->STAT.Val &= _DTSMASK; + handle->STAT.Val |= _USIE | (_DTSEN & _DTS_CHECKING_ENABLED); + + //Point to the next buffer for ping pong purposes. + if(dir != OUT_FROM_HOST) + { + //toggle over the to the next buffer for an IN endpoint + USBAdvancePingPongBuffer(&pBDTEntryIn[ep]); + } + else + { + //toggle over the to the next buffer for an OUT endpoint + USBAdvancePingPongBuffer(&pBDTEntryOut[ep]); + } + return (USB_HANDLE)handle; +} + + +/******************************************************************** + Function: + void USBStallEndpoint(BYTE ep, BYTE dir) + + Summary: + Configures the specified endpoint to send STALL to the host, the next + time the host tries to access the endpoint. + + PreCondition: + None + + Parameters: + BYTE ep - The endpoint number that should be configured to send STALL. + BYTE dir - The direction of the endpoint to STALL, either + IN_TO_HOST or OUT_FROM_HOST. + + Return Values: + None + + Remarks: + None + + *******************************************************************/ +void USBStallEndpoint(BYTE ep, BYTE dir) +{ + BDT_ENTRY *p; + + if(ep == 0) + { + //For control endpoints (ex: EP0), we need to STALL both IN and OUT + //endpoints. EP0 OUT must also be prepared to receive the next SETUP + //packet that will arrrive. + pBDTEntryEP0OutNext->CNT = USB_EP0_BUFF_SIZE; + pBDTEntryEP0OutNext->ADR = ConvertToPhysicalAddress(&SetupPkt); + pBDTEntryEP0OutNext->STAT.Val = _USIE|_DAT0|(_DTSEN & _DTS_CHECKING_ENABLED)|_BSTALL; + pBDTEntryIn[0]->STAT.Val = _USIE|_BSTALL; + + } + else + { + p = (BDT_ENTRY*)(&BDT[EP(ep,dir,0)]); + p->STAT.Val |= _BSTALL | _USIE; + + //If the device is in FULL or ALL_BUT_EP0 ping pong modes + //then stall that entry as well + #if (USB_PING_PONG_MODE == USB_PING_PONG__FULL_PING_PONG) || (USB_PING_PONG_MODE == USB_PING_PONG__ALL_BUT_EP0) + + p = (BDT_ENTRY*)(&BDT[EP(ep,dir,1)]); + p->STAT.Val |= _BSTALL | _USIE; + #endif + } +} + +/************************************************************************** + Function: + void USBCancelIO(BYTE endpoint) + + Description: + This function cancels the transfers pending on the specified endpoint. + This function can only be used after a SETUP packet is received and + before that setup packet is handled. This is the time period in which + the EVENT_EP0_REQUEST is thrown, before the event handler function + returns to the stack. + + Precondition: + + Parameters: + BYTE endpoint - the endpoint number you wish to cancel the transfers for + + Return Values: + None + + Remarks: + None + + **************************************************************************/ +void USBCancelIO(BYTE endpoint) +{ + if(USBPacketDisable == 1) + { + //The PKTDIS bit is currently set right now. It is therefore "safe" + //to mess with the BDT right now. + pBDTEntryIn[endpoint]->Val &= _DTSMASK; //Makes UOWN = 0 (_UCPU mode). Deactivates endpoint. Only sends NAKs. + pBDTEntryIn[endpoint]->Val ^= _DTSMASK; //Toggle the DTS bit. This packet didn't get sent yet, and the next call to USBTransferOnePacket() will re-toggle the DTS bit back to the original (correct) value. + + //Need to do additional handling if ping-pong buffering is being used + #if ((USB_PING_PONG_MODE == USB_PING_PONG__FULL_PING_PONG) || (USB_PING_PONG_MODE == USB_PING_PONG__ALL_BUT_EP0)) + //Point to the next buffer for ping pong purposes. UOWN getting cleared + //(either due to SIE clearing it after a transaction, or the firmware + //clearing it) makes hardware ping pong pointer advance. + USBAdvancePingPongBuffer(&pBDTEntryIn[endpoint]); + + pBDTEntryIn[endpoint]->STAT.Val &= _DTSMASK; + pBDTEntryIn[endpoint]->STAT.Val ^= _DTSMASK; + #endif + } +} + +/************************************************************************** + Function: + void USBDeviceDetach(void) + + Summary: + This function configures the USB module to "soft detach" itself from + the USB host. + + Description: + This function configures the USB module to perform a "soft detach" + operation, by disabling the D+ (or D-) ~1.5k pull up resistor, which + lets the host know the device is present and attached. This will make + the host think that the device has been unplugged. This is potentially + useful, as it allows the USB device to force the host to re-enumerate + the device (on the firmware has re-enabled the USB module/pull up, by + calling USBDeviceAttach(), to "soft re-attach" to the host). + + Precondition: + Should only be called when USB_INTERRUPT is defined. See remarks + section if USB_POLLING mode option is being used (usb_config.h option). + + Additionally, this function should only be called from the main() loop + context. Do not call this function from within an interrupt handler, as + this function may modify global interrupt enable bits and settings. + + Parameters: + None + + Return Values: + None + + Remarks: + If the application firmware calls USBDeviceDetach(), it is strongly + recommended that the firmware wait at least >= 80ms before calling + USBDeviceAttach(). If the firmeware performs a soft detach, and then + re-attaches too soon (ex: after a few micro seconds for instance), some + hosts may interpret this as an unexpected "glitch" rather than as a + physical removal/re-attachment of the USB device. In this case the host + may simply ignore the event without re-enumerating the device. To + ensure that the host properly detects and processes the device soft + detach/re-attach, it is recommended to make sure the device remains + detached long enough to mimic a real human controlled USB + unplug/re-attach event (ex: after calling USBDeviceDetach(), do not + call USBDeviceAttach() for at least 80+ms, preferrably longer. + + Neither the USBDeviceDetach() or USBDeviceAttach() functions are blocking + or take long to execute. It is the application firmware's + responsibility for adding the 80+ms delay, when using these API + functions. + + Note: The Windows plug and play event handler processing is fairly + slow, especially in certain versions of Windows, and for certain USB + device classes. It has been observed that some device classes need to + provide even more USB detach dwell interval (before calling + USBDeviceAttach()), in order to work correctly after re-enumeration. + If the USB device is a CDC class device, it is recommended to wait + at least 1.5 seconds or longer, before soft re-attaching to the host, + to provide the plug and play event handler enough time to finish + processing the removal event, before the re-attach occurs. + + If the application is using the USB_POLLING mode option, then the + USBDeviceDetach() and USBDeviceAttach() functions are not available. + In this mode, the USB stack relies on the "#define USE_USB_BUS_SENSE_IO" + and "#define USB_BUS_SENSE" options in the + HardwareProfile ? [platform name].h file. + + When using the USB_POLLING mode option, and the + "#define USE_USB_BUS_SENSE_IO" definition has been commented out, then + the USB stack assumes that it should always enable the USB module at + pretty much all times. Basically, anytime the application firmware + calls USBDeviceTasks(), the firmware will automatically enable the USB + module. This mode would typically be selected if the application was + designed to be a purely bus powered device. In this case, the + application is powered from the +5V VBUS supply from the USB port, so + it is correct and sensible in this type of application to power up and + turn on the USB module, at anytime that the microcontroller is + powered (which implies the USB cable is attached and the host is also + powered). + + In a self powered application, the USB stack is designed with the + intention that the user will enable the "#define USE_USB_BUS_SENSE_IO" + option in the HardwareProfile ? [platform name].h file. When this + option is defined, then the USBDeviceTasks() function will automatically + check the I/O pin port value of the designated pin (based on the + #define USB_BUS_SENSE option in the HardwareProfile ? [platform name].h + file), every time the application calls USBDeviceTasks(). If the + USBDeviceTasks() function is executed and finds that the pin defined by + the #define USB_BUS_SENSE is in a logic low state, then it will + automatically disable the USB module and tri-state the D+ and D- pins. + If however the USBDeviceTasks() function is executed and finds the pin + defined by the #define USB_BUS_SENSE is in a logic high state, then it + will automatically enable the USB module, if it has not already been + enabled. + + **************************************************************************/ +#if defined(USB_INTERRUPT) +void USBDeviceDetach(void) +{ + //If the interrupt option is selected then the customer is required + // to notify the stack when the device is attached or removed from the + // bus by calling the USBDeviceAttach() and USBDeviceDetach() functions. +#ifdef USB_SUPPORT_OTG + if (USB_BUS_SENSE != 1) +#endif + { + // Disable module & detach from bus + U1CON = 0; + + // Mask all USB interrupts + U1IE = 0; + + //Move to the detached state + USBDeviceState = DETACHED_STATE; + + #ifdef USB_SUPPORT_OTG + //Disable D+ Pullup + U1OTGCONbits.DPPULUP = 0; + + //Disable HNP + USBOTGDisableHnp(); + + //Deactivate HNP + USBOTGDeactivateHnp(); + + //If ID Pin Changed State + if (USBIDIF && USBIDIE) + { + //Re-detect & Initialize + USBOTGInitialize(); + + //Clear ID Interrupt Flag + USBClearInterruptFlag(USBIDIFReg,USBIDIFBitNum); + } + #endif + + #if defined __C30__ || defined __XC16__ + //USBClearInterruptFlag(U1OTGIR, 3); + #endif + //return so that we don't go through the rest of + //the state machine + return; + } + +#ifdef USB_SUPPORT_OTG + //If Session Is Started Then + else + { + //If SRP Is Ready + if (USBOTGSRPIsReady()) + { + //Clear SRPReady + USBOTGClearSRPReady(); + + //Clear SRP Timeout Flag + USBOTGClearSRPTimeOutFlag(); + + //Indicate Session Started + UART2PrintString( "\r\n***** USB OTG B Event - Session Started *****\r\n" ); + } + } +#endif +} +#endif //#if defined(USB_INTERRUPT) +/************************************************************************** + Function: + void USBDeviceAttach(void) + + Summary: + Checks if VBUS is present, and that the USB module is not already + initalized, and if so, enables the USB module so as to signal device + attachment to the USB host. + + Description: + This function indicates to the USB host that the USB device has been + attached to the bus. This function needs to be called in order for the + device to start to enumerate on the bus. + + Precondition: + Should only be called when USB_INTERRUPT is defined. Also, should only + be called from the main() loop context. Do not call USBDeviceAttach() + from within an interrupt handler, as the USBDeviceAttach() function + may modify global interrupt enable bits and settings. + + For normal USB devices: + Make sure that if the module was previously on, that it has been turned off + for a long time (ex: 100ms+) before calling this function to re-enable the module. + If the device turns off the D+ (for full speed) or D- (for low speed) ~1.5k ohm + pull up resistor, and then turns it back on very quickly, common hosts will sometimes + reject this event, since no human could ever unplug and reattach a USB device in a + microseconds (or nanoseconds) timescale. The host could simply treat this as some kind + of glitch and ignore the event altogether. + Parameters: + None + + Return Values: + None + + Remarks: + See also the USBDeviceDetach() API function documentation. +****************************************************************************/ +#if defined(USB_INTERRUPT) +void USBDeviceAttach(void) +{ + //if we are in the detached state + if(USBDeviceState == DETACHED_STATE) + { + if(USB_BUS_SENSE == 1) + { + //Initialize registers to known states. + U1CON = 0; + + // Mask all USB interrupts + U1IE = 0; + + //Configure things like: pull ups, full/low-speed mode, + //set the ping pong mode, and set internal transceiver + SetConfigurationOptions(); + + USBEnableInterrupts(); //Modifies global interrupt settings + + // Enable module & attach to bus + while(!U1CONbits.USBEN){U1CONbits.USBEN = 1;} + + //moved to the attached state + USBDeviceState = ATTACHED_STATE; + + #ifdef USB_SUPPORT_OTG + U1OTGCON = USB_OTG_DPLUS_ENABLE | USB_OTG_ENABLE; + #endif + } + } +} +#endif //#if defined(USB_INTERRUPT) + + +/******************************************************************************* + Function: void USBCtrlEPAllowStatusStage(void); + + Summary: This function prepares the proper endpoint 0 IN or endpoint 0 OUT + (based on the controlTransferState) to allow the status stage packet + of a control transfer to complete. This function gets used + internally by the USB stack itself, but it may also be called from + the application firmware, IF the application firmware called + the USBDeferStatusStage() function during the initial processing + of the control transfer request. In this case, the application + must call the USBCtrlEPAllowStatusStage() once, after it has fully + completed processing and handling the data stage portion of the + request. + + If the application firmware has no need for delaying control + transfers, and therefore never calls USBDeferStatusStage(), then the + application firmware should not call USBCtrlEPAllowStatusStage(). + + Description: + + Conditions: + None + + Input: + + Return: + + Remarks: + None + *****************************************************************************/ +void USBCtrlEPAllowStatusStage(void) +{ + //Check and set two flags, prior to actually modifying any BDT entries. + //This double checking is necessary to make certain that + //USBCtrlEPAllowStatusStage() can be called twice simultaneously (ex: once + //in main loop context, while simultaneously getting an interrupt which + //tries to call USBCtrlEPAllowStatusStage() again, at the same time). + if(USBStatusStageEnabledFlag1 == FALSE) + { + USBStatusStageEnabledFlag1 = TRUE; + if(USBStatusStageEnabledFlag2 == FALSE) + { + USBStatusStageEnabledFlag2 = TRUE; + + //Determine which endpoints (EP0 IN or OUT needs arming for the status + //stage), based on the type of control transfer currently pending. + if(controlTransferState == CTRL_TRF_RX) + { + pBDTEntryIn[0]->CNT = 0; + pBDTEntryIn[0]->STAT.Val = _USIE|_DAT1|(_DTSEN & _DTS_CHECKING_ENABLED); + } + else if(controlTransferState == CTRL_TRF_TX) + { + BothEP0OutUOWNsSet = FALSE; //Indicator flag used in USBCtrlTrfOutHandler() + + //This buffer (when ping pong buffering is enabled on EP0 OUT) receives the + //next SETUP packet. + #if((USB_PING_PONG_MODE == USB_PING_PONG__EP0_OUT_ONLY) || (USB_PING_PONG_MODE == USB_PING_PONG__FULL_PING_PONG)) + pBDTEntryEP0OutCurrent->CNT = USB_EP0_BUFF_SIZE; + pBDTEntryEP0OutCurrent->ADR = ConvertToPhysicalAddress(&SetupPkt); + pBDTEntryEP0OutCurrent->STAT.Val = _USIE|_BSTALL; //Prepare endpoint to accept a SETUP transaction + BothEP0OutUOWNsSet = TRUE; //Indicator flag used in USBCtrlTrfOutHandler() + #endif + + //This EP0 OUT buffer receives the 0-byte OUT status stage packet. + pBDTEntryEP0OutNext->CNT = USB_EP0_BUFF_SIZE; + pBDTEntryEP0OutNext->ADR = ConvertToPhysicalAddress(&SetupPkt); + pBDTEntryEP0OutNext->STAT.Val = _USIE; // Note: DTSEN is 0 + } + } + } +} + + +/******************************************************************************* + Function: void USBCtrlEPAllowDataStage(void); + + Summary: This function allows the data stage of either a host-to-device or + device-to-host control transfer (with data stage) to complete. + This function is meant to be used in conjunction with either the + USBDeferOUTDataStage() or USBDeferINDataStage(). If the firmware + does not call either USBDeferOUTDataStage() or USBDeferINDataStage(), + then the firmware does not need to manually call + USBCtrlEPAllowDataStage(), as the USB stack will call this function + instead. + + Description: + + Conditions: A control transfer (with data stage) should already be pending, + if the firmware calls this function. Additionally, the firmware + should have called either USBDeferOUTDataStage() or + USBDeferINDataStage() at the start of the control transfer, if + the firmware will be calling this function manually. + + Input: + + Return: + + Remarks: + *****************************************************************************/ +void USBCtrlEPAllowDataStage(void) +{ + USBDeferINDataStagePackets = FALSE; + USBDeferOUTDataStagePackets = FALSE; + + if(controlTransferState == CTRL_TRF_RX) //(...) + { + //Prepare EP0 OUT to receive the first OUT data packet in the data stage sequence. + pBDTEntryEP0OutNext->CNT = USB_EP0_BUFF_SIZE; + pBDTEntryEP0OutNext->ADR = ConvertToPhysicalAddress(&CtrlTrfData); + pBDTEntryEP0OutNext->STAT.Val = _USIE|_DAT1|(_DTSEN & _DTS_CHECKING_ENABLED); + } + else //else must be controlTransferState == CTRL_TRF_TX (...) + { + //Error check the data stage byte count. Make sure the user specified + //value was no greater than the number of bytes the host requested. + if(SetupPkt.wLength < inPipes[0].wCount.Val) + { + inPipes[0].wCount.Val = SetupPkt.wLength; + } + USBCtrlTrfTxService(); //Copies one IN data packet worth of data from application buffer + //to CtrlTrfData buffer. Also keeps track of how many bytes remaining. + + //Cnt should have been initialized by responsible request owner (ex: by + //using the USBEP0SendRAMPtr() or USBEP0SendROMPtr() API function). + pBDTEntryIn[0]->ADR = ConvertToPhysicalAddress(&CtrlTrfData); + pBDTEntryIn[0]->STAT.Val = _USIE|_DAT1|(_DTSEN & _DTS_CHECKING_ENABLED); + } +} + + +/******************************************************************************/ +/** Internal Functions *********************************************************/ +/******************************************************************************/ + +/******************************************************************** + * Function: void USBConfigureEndpoint(BYTE EPNum, BYTE direction) + * + * PreCondition: None + * + * Input: BYTE EPNum - the endpoint to be configured + * BYTE direction - the direction to be configured + * (either OUT_FROM_HOST or IN_TO_HOST) + * + * Output: None + * + * Side Effects: None + * + * Overview: This function will configure the specified + * endpoint + * + * Note: None + *******************************************************************/ +static void USBConfigureEndpoint(BYTE EPNum, BYTE direction) +{ + volatile BDT_ENTRY* handle; + + //Compute a pointer to the even BDT entry corresponding to the + //EPNum and direction values passed to this function. + handle = (volatile BDT_ENTRY*)&BDT[EP0_OUT_EVEN]; //Get address of start of BDT + handle += EP(EPNum,direction,0u); //Add in offset to the BDT of interest + + handle->STAT.UOWN = 0; //mostly redundant, since USBStdSetCfgHandler() + //already cleared the entire BDT table + + //Make sure our pBDTEntryIn/Out[] pointer is initialized. Needed later + //for USBTransferOnePacket() API calls. + if(direction == OUT_FROM_HOST) + { + pBDTEntryOut[EPNum] = handle; + } + else + { + pBDTEntryIn[EPNum] = handle; + } + + #if (USB_PING_PONG_MODE == USB_PING_PONG__FULL_PING_PONG) + handle->STAT.DTS = 0; + (handle+1)->STAT.DTS = 1; + #elif (USB_PING_PONG_MODE == USB_PING_PONG__NO_PING_PONG) + //Set DTS to one because the first thing we will do + //when transmitting is toggle the bit + handle->STAT.DTS = 1; + #elif (USB_PING_PONG_MODE == USB_PING_PONG__EP0_OUT_ONLY) + if(EPNum != 0) + { + handle->STAT.DTS = 1; + } + #elif (USB_PING_PONG_MODE == USB_PING_PONG__ALL_BUT_EP0) + if(EPNum != 0) + { + handle->STAT.DTS = 0; + (handle+1)->STAT.DTS = 1; + } + #endif +} + + +/****************************************************************************** + * Function: void USBCtrlEPServiceComplete(void) + * + * PreCondition: None + * + * Input: None + * + * Output: None + * + * Side Effects: None + * + * Overview: This routine wrap up the remaining tasks in servicing + * a Setup Request. Its main task is to set the endpoint + * controls appropriately for a given situation. See code + * below. + * There are three main scenarios: + * a) There was no handler for the Request, in this case + * a STALL should be sent out. + * b) The host has requested a read control transfer, + * endpoints are required to be setup in a specific way. + * c) The host has requested a write control transfer, or + * a control data stage is not required, endpoints are + * required to be setup in a specific way. + * + * Packet processing is resumed by clearing PKTDIS bit. + * + * Note: None + *****************************************************************************/ +static void USBCtrlEPServiceComplete(void) +{ + /* + * PKTDIS bit is set when a Setup Transaction is received. + * Clear to resume packet processing. + */ + USBPacketDisable = 0; + + //Check the busy bits and the SetupPtk.DataDir variables to determine what type of + //control transfer is currently in progress. We need to know the type of control + //transfer that is currently pending, in order to know how to properly arm the + //EP0 IN and EP0 OUT endpoints. + if(inPipes[0].info.bits.busy == 0) + { + if(outPipes[0].info.bits.busy == 1) + { + controlTransferState = CTRL_TRF_RX; + /* + * Control Write: + * ... | + */ + + //1. Prepare OUT EP to receive data, unless a USB class request handler + // function decided to defer the data stage (ex: because the intended + // RAM buffer wasn't available yet) by calling USBDeferDataStage(). + // If it did so, it is then responsible for calling USBCtrlEPAllowDataStage(), + // once it is ready to begin receiving the data. + if(USBDeferOUTDataStagePackets == FALSE) + { + USBCtrlEPAllowDataStage(); + } + + //2. IN endpoint 0 status stage will be armed by USBCtrlEPAllowStatusStage() + //after all of the OUT data has been received and consumed, or if a timeout occurs. + USBStatusStageEnabledFlag2 = FALSE; + USBStatusStageEnabledFlag1 = FALSE; + } + else + { + /* + * If no one knows how to service this request then stall. + * Must also prepare EP0 to receive the next SETUP transaction. + */ + pBDTEntryEP0OutNext->CNT = USB_EP0_BUFF_SIZE; + pBDTEntryEP0OutNext->ADR = ConvertToPhysicalAddress(&SetupPkt); + pBDTEntryEP0OutNext->STAT.Val = _USIE|_DAT0|(_DTSEN & _DTS_CHECKING_ENABLED)|_BSTALL; + pBDTEntryIn[0]->STAT.Val = _USIE|_BSTALL; + } + } + else // A module has claimed ownership of the control transfer session. + { + if(SetupPkt.DataDir == USB_SETUP_DEVICE_TO_HOST_BITFIELD) + { + controlTransferState = CTRL_TRF_TX; + /* + * Control Read: + * ... | + * + * 1. Prepare IN EP to transfer data to the host. If however the data + * wasn't ready yet (ex: because the firmware needs to go and read it from + * some slow/currently unavailable resource, such as an external I2C EEPROM), + * Then the class request handler reponsible should call the USBDeferDataStage() + * macro. In this case, the firmware may wait up to 500ms, before it is required + * to transmit the first IN data packet. Once the data is ready, and the firmware + * is ready to begin sending the data, it should then call the + * USBCtrlEPAllowDataStage() function to start the data stage. + */ + if(USBDeferINDataStagePackets == FALSE) + { + USBCtrlEPAllowDataStage(); + } + + // 2. (Optionally) allow the status stage now, to prepare for early termination. + // Note: If a class request handler decided to set USBDeferStatusStagePacket == TRUE, + // then it is responsible for eventually calling USBCtrlEPAllowStatusStage() once it + // is ready. If the class request handler does this, it needs to be careful to + // be written so that it can handle the early termination scenario. + // Ex: It should call USBCtrlEPAllowStatusStage() when any of the following occurs: + // 1. The desired total number of bytes were sent to the host. + // 2. The number of bytes that the host originally requested (in the SETUP packet that + // started the control transfer) has been reached. + // 3. Or, if a timeout occurs (ex: <50ms since the last successful EP0 IN transaction), regardless + // of how many bytes have actually been sent. This is necessary to prevent a deadlock situation + // (where the control transfer can't complete, due to continuous NAK on status stage) if the + // host performs early termination. If enabled, the USB_ENABLE_STATUS_STAGE_TIMEOUTS usb_config.h + // option can take care of this for you. + // Note: For this type of control transfer, there is normally no harm in simply arming the + // status stage packet right now, even if the IN data is not ready yet. This allows for + // immediate early termination, without adding unecessary delay. Therefore, it is generally not + // recommended for the USB class handler firmware to call USBDeferStatusStage(), for this + // type of control transfer. If the USB class handler firmware needs more time to fetch the IN + // data that needs to be sent to the host, it should instead use the USBDeferDataStage() function. + USBStatusStageEnabledFlag2 = FALSE; + USBStatusStageEnabledFlag1 = FALSE; + if(USBDeferStatusStagePacket == FALSE) + { + USBCtrlEPAllowStatusStage(); + } + } + else // (SetupPkt.DataDir == USB_SETUP_DIRECTION_HOST_TO_DEVICE) + { + //This situation occurs for special types of control transfers, + //such as that which occurs when the host sends a SET_ADDRESS + //control transfer. Ex: + // + // | + + //Although the data direction is HOST_TO_DEVICE, there is no data stage + //(hence: outPipes[0].info.bits.busy == 0). There is however still + //an IN status stage. + + controlTransferState = CTRL_TRF_RX; //Since this is a HOST_TO_DEVICE control transfer + + //1. Prepare OUT EP to receive the next SETUP packet. + pBDTEntryEP0OutNext->CNT = USB_EP0_BUFF_SIZE; + pBDTEntryEP0OutNext->ADR = ConvertToPhysicalAddress(&SetupPkt); + pBDTEntryEP0OutNext->STAT.Val = _USIE|_BSTALL; + + //2. Prepare for IN status stage of the control transfer + USBStatusStageEnabledFlag2 = FALSE; + USBStatusStageEnabledFlag1 = FALSE; + if(USBDeferStatusStagePacket == FALSE) + { + USBCtrlEPAllowStatusStage(); + } + } + + }//end if(ctrl_trf_session_owner == MUID_NULL) + +}//end USBCtrlEPServiceComplete + + +/****************************************************************************** + * Function: void USBCtrlTrfTxService(void) + * + * PreCondition: pSrc, wCount, and usb_stat.ctrl_trf_mem are setup properly. + * + * Input: None + * + * Output: None + * + * Side Effects: None + * + * Overview: This routine is used for device to host control transfers + * (IN transactions). This function takes care of managing a + * transfer over multiple USB transactions. + * This routine should be called from only two places. + * One from USBCtrlEPServiceComplete() and one from + * USBCtrlTrfInHandler(). + * + * Note: + *****************************************************************************/ +static void USBCtrlTrfTxService(void) +{ + BYTE byteToSend; + + //Figure out how many bytes of data to send in the next IN transaction. + //Assume a full size packet, unless otherwise determined below. + byteToSend = USB_EP0_BUFF_SIZE; + if(inPipes[0].wCount.Val < (BYTE)USB_EP0_BUFF_SIZE) + { + byteToSend = inPipes[0].wCount.Val; + + //Keep track of whether or not we have sent a "short packet" yet. + //This is useful so that later on, we can configure EP0 IN to STALL, + //after we have sent all of the intended data. This makes sure the + //hardware STALLs if the host erroneously tries to send more IN token + //packets, requesting more data than intended in the control transfer. + if(shortPacketStatus == SHORT_PKT_NOT_USED) + { + shortPacketStatus = SHORT_PKT_PENDING; + } + else if(shortPacketStatus == SHORT_PKT_PENDING) + { + shortPacketStatus = SHORT_PKT_SENT; + } + } + + //Keep track of how many bytes remain to be sent in the transfer, by + //subtracting the number of bytes about to be sent from the total. + inPipes[0].wCount.Val = inPipes[0].wCount.Val - byteToSend; + + //Next, load the number of bytes to send to BC7..0 in buffer descriptor. + //Note: Control endpoints may never have a max packet size of > 64 bytes. + //Therefore, the BC8 and BC9 bits should always be maintained clear. + pBDTEntryIn[0]->CNT = byteToSend; + + //Now copy the data from the source location, to the CtrlTrfData[] buffer, + //which we will send to the host. + pDst = (USB_VOLATILE BYTE*)CtrlTrfData; // Set destination pointer + if(inPipes[0].info.bits.ctrl_trf_mem == USB_EP0_ROM) // Determine type of memory source + { + while(byteToSend) + { + *pDst++ = *inPipes[0].pSrc.bRom++; + byteToSend--; + }//end while(byte_to_send.Val) + } + else // RAM + { + while(byteToSend) + { + *pDst++ = *inPipes[0].pSrc.bRam++; + byteToSend--; + }//end while(byte_to_send.Val) + }//end if(usb_stat.ctrl_trf_mem == _ROM) +}//end USBCtrlTrfTxService + +/****************************************************************************** + * Function: void USBCtrlTrfRxService(void) + * + * PreCondition: pDst and wCount are setup properly. + * pSrc is always &CtrlTrfData + * usb_stat.ctrl_trf_mem is always USB_EP0_RAM. + * wCount should be set to 0 at the start of each control + * transfer. + * + * Input: None + * + * Output: None + * + * Side Effects: None + * + * Overview: This routine is used for host to device control transfers + * (uses OUT transactions). This function receives the data that arrives + * on EP0 OUT, and copies it into the appropriate outPipes[0].pDst.bRam + * buffer. Once the host has sent all the data it was intending + * to send, this function will call the appropriate outPipes[0].pFunc() + * handler (unless it is NULL), so that it can be used by the + * intended target firmware. + * + * Note: None + *****************************************************************************/ +static void USBCtrlTrfRxService(void) +{ + BYTE byteToRead; + BYTE i; + + //Load byteToRead with the number of bytes the host just sent us in the + //last OUT transaction. + byteToRead = pBDTEntryEP0OutCurrent->CNT; + + //Update the "outPipes[0].wCount.Val", which keeps track of the total number + //of remaining bytes expected to be received from the host, in the control + //transfer. First check to see if the host sent us more bytes than the + //application firmware was expecting to receive. + if(byteToRead > outPipes[0].wCount.Val) + { + byteToRead = outPipes[0].wCount.Val; + } + //Reduce the number of remaining bytes by the number we just received. + outPipes[0].wCount.Val = outPipes[0].wCount.Val - byteToRead; + + //Copy the OUT DATAx packet bytes that we just received from the host, + //into the user application buffer space. + for(i=0;i 0) + { + pBDTEntryEP0OutNext->CNT = USB_EP0_BUFF_SIZE; + pBDTEntryEP0OutNext->ADR = ConvertToPhysicalAddress(&CtrlTrfData); + if(pBDTEntryEP0OutCurrent->STAT.DTS == 0) + { + pBDTEntryEP0OutNext->STAT.Val = _USIE|_DAT1|(_DTSEN & _DTS_CHECKING_ENABLED); + } + else + { + pBDTEntryEP0OutNext->STAT.Val = _USIE|_DAT0|(_DTSEN & _DTS_CHECKING_ENABLED); + } + } + else + { + //We have received all OUT packets that we were expecting to + //receive for the control transfer. Prepare EP0 OUT to receive + //the next SETUP transaction that may arrive. + pBDTEntryEP0OutNext->CNT = USB_EP0_BUFF_SIZE; + pBDTEntryEP0OutNext->ADR = ConvertToPhysicalAddress(&SetupPkt); + //Configure EP0 OUT to receive the next SETUP transaction for any future + //control transfers. However, set BSTALL in case the host tries to send + //more data than it claims it was going to send. + pBDTEntryEP0OutNext->STAT.Val = _USIE|_BSTALL; + + //All data bytes for the host to device control write (OUT) have now been + //received successfully. + //Go ahead and call the user specified callback function, to use/consume + //the control transfer data (ex: if the "void (*function)" parameter + //was non-NULL when USBEP0Receive() was called). + if(outPipes[0].pFunc != NULL) + { + #if defined(__XC8) + //Special pragmas to suppress an expected/harmless warning + //message when building with the XC8 compiler + #pragma warning push + #pragma warning disable 1088 + outPipes[0].pFunc(); //Call the user's callback function + #pragma warning pop + #else + outPipes[0].pFunc(); //Call the user's callback function + #endif + } + outPipes[0].info.bits.busy = 0; + + //Ready to arm status stage IN transaction now, if the application + //firmware has completed processing the request. If it is still busy + //and needs more time to finish handling the request, then the user + //callback (the one called by the outPipes[0].pFunc();) should set the + //USBDeferStatusStagePacket to TRUE (by calling USBDeferStatusStage()). In + //this case, it is the application's firmware responsibility to call + //the USBCtrlEPAllowStatusStage() function, once it is fully done handling the request. + //Note: The application firmware must process the request and call + //USBCtrlEPAllowStatusStage() in a semi-timely fashion. "Semi-timely" + //means either 50ms, 500ms, or 5 seconds, depending on the type of + //control transfer. See the USB 2.0 specification section 9.2.6 for + //more details. + if(USBDeferStatusStagePacket == FALSE) + { + USBCtrlEPAllowStatusStage(); + } + } + +}//end USBCtrlTrfRxService + + +/******************************************************************** + * Function: void USBStdSetCfgHandler(void) + * + * PreCondition: None + * + * Input: None + * + * Output: None + * + * Side Effects: None + * + * Overview: This routine first disables all endpoints by + * clearing UEP registers. It then configures + * (initializes) endpoints by calling the callback + * function USBCBInitEP(). + * + * Note: None + *******************************************************************/ +static void USBStdSetCfgHandler(void) +{ + BYTE i; + + // This will generate a zero length packet + inPipes[0].info.bits.busy = 1; + + //Clear all of the endpoint control registers + DisableNonZeroEndpoints(USB_MAX_EP_NUMBER); + + //Clear all of the BDT entries + memset((void*)&BDT[0], 0x00, sizeof(BDT)); + + // Assert reset request to all of the Ping Pong buffer pointers + USBPingPongBufferReset = 1; + + //Re-Initialize all ping pong software state bits to 0 (which corresponds to + //the EVEN buffer being the next one that will be used), since we are also + //doing a hardware ping pong pointer reset above. + for(i = 0; i < (BYTE)(USB_MAX_EP_NUMBER+1u); i++) + { + ep_data_in[i].Val = 0u; + ep_data_out[i].Val = 0u; + } + + //clear the alternate interface settings + memset((void*)&USBAlternateInterface,0x00,USB_MAX_NUM_INT); + + //Stop trying to reset ping pong buffer pointers + USBPingPongBufferReset = 0; + + pBDTEntryIn[0] = (volatile BDT_ENTRY*)&BDT[EP0_IN_EVEN]; + + //Set the next out to the current out packet + pBDTEntryEP0OutCurrent = (volatile BDT_ENTRY*)&BDT[EP0_OUT_EVEN]; + pBDTEntryEP0OutNext = pBDTEntryEP0OutCurrent; + + //set the current configuration + USBActiveConfiguration = SetupPkt.bConfigurationValue; + + //if the configuration value == 0 + if(USBActiveConfiguration == 0) + { + //Go back to the addressed state + USBDeviceState = ADDRESS_STATE; + } + else + { + //initialize the required endpoints + USB_SET_CONFIGURATION_HANDLER(EVENT_CONFIGURED,(void*)&USBActiveConfiguration,1); + + //Otherwise go to the configured state. Update the state variable last, + //after performing all of the set configuration related initialization + //tasks. + USBDeviceState = CONFIGURED_STATE; + }//end if(SetupPkt.bConfigurationValue == 0) +}//end USBStdSetCfgHandler + + +/******************************************************************** + * Function: void USBStdGetDscHandler(void) + * + * PreCondition: None + * + * Input: None + * + * Output: None + * + * Side Effects: None + * + * Overview: This routine handles the standard GET_DESCRIPTOR + * request. + * + * Note: None + *******************************************************************/ +static void USBStdGetDscHandler(void) +{ + if(SetupPkt.bmRequestType == 0x80) + { + inPipes[0].info.Val = USB_EP0_ROM | USB_EP0_BUSY | USB_EP0_INCLUDE_ZERO; + + switch(SetupPkt.bDescriptorType) + { + case USB_DESCRIPTOR_DEVICE: + #if !defined(USB_USER_DEVICE_DESCRIPTOR) + inPipes[0].pSrc.bRom = (ROM BYTE*)&device_dsc; + #else + inPipes[0].pSrc.bRom = (ROM BYTE*)USB_USER_DEVICE_DESCRIPTOR; + #endif + inPipes[0].wCount.Val = sizeof(device_dsc); + break; + case USB_DESCRIPTOR_CONFIGURATION: + #if !defined(USB_USER_CONFIG_DESCRIPTOR) + inPipes[0].pSrc.bRom = *(USB_CD_Ptr+SetupPkt.bDscIndex); + #else + inPipes[0].pSrc.bRom = *(USB_USER_CONFIG_DESCRIPTOR+SetupPkt.bDscIndex); + #endif + + //This must be loaded using byte addressing. The source pointer + // may not be word aligned for the 16 or 32 bit machines resulting + // in an address error on the dereference. + inPipes[0].wCount.byte.LB = *(inPipes[0].pSrc.bRom+2); + inPipes[0].wCount.byte.HB = *(inPipes[0].pSrc.bRom+3); + break; + case USB_DESCRIPTOR_STRING: + //USB_NUM_STRING_DESCRIPTORS was introduced as optional in release v2.3. In v2.4 and + // later it is now manditory. This should be defined in usb_config.h and should + // indicate the number of string descriptors. + if(SetupPkt.bDscIndexSTAT.UOWN == 1) && (p->STAT.BSTALL == 1)) + CtrlTrfData[0]=0x01; // Set bit0 + break; + } + }//end switch + + if(inPipes[0].info.bits.busy == 1) + { + inPipes[0].pSrc.bRam = (BYTE*)&CtrlTrfData; // Set Source + inPipes[0].info.bits.ctrl_trf_mem = USB_EP0_RAM; // Set memory type + inPipes[0].wCount.v[0] = 2; // Set data count + }//end if(...) +}//end USBStdGetStatusHandler + +/******************************************************************** + * Function: void USBStallHandler(void) + * + * PreCondition: None + * + * Input: None + * + * Output: None + * + * Side Effects: + * + * Overview: This function handles the event of a STALL + * occuring on the bus + * + * Note: None + *******************************************************************/ +static void USBStallHandler(void) +{ + /* + * Does not really have to do anything here, + * even for the control endpoint. + * All BDs of Endpoint 0 are owned by SIE right now, + * but once a Setup Transaction is received, the ownership + * for EP0_OUT will be returned to CPU. + * When the Setup Transaction is serviced, the ownership + * for EP0_IN will then be forced back to CPU by firmware. + */ + + /* v2b fix */ + if(U1EP0bits.EPSTALL == 1) + { + // UOWN - if 0, owned by CPU, if 1, owned by SIE + if((pBDTEntryEP0OutCurrent->STAT.Val == _USIE) && (pBDTEntryIn[0]->STAT.Val == (_USIE|_BSTALL))) + { + // Set ep0Bo to stall also + pBDTEntryEP0OutCurrent->STAT.Val = _USIE|_DAT0|(_DTSEN & _DTS_CHECKING_ENABLED)|_BSTALL; + }//end if + U1EP0bits.EPSTALL = 0; // Clear stall status + }//end if + + USBClearInterruptFlag(USBStallIFReg,USBStallIFBitNum); +} + +/******************************************************************** + * Function: void USBSuspend(void) + * + * PreCondition: None + * + * Input: None + * + * Output: None + * + * Side Effects: + * + * Overview: This function handles if the host tries to + * suspend the device + * + * Note: None + *******************************************************************/ +static void USBSuspend(void) +{ + /* + * NOTE: Do not clear UIRbits.ACTVIF here! + * Reason: + * ACTVIF is only generated once an IDLEIF has been generated. + * This is a 1:1 ratio interrupt generation. + * For every IDLEIF, there will be only one ACTVIF regardless of + * the number of subsequent bus transitions. + * + * If the ACTIF is cleared here, a problem could occur when: + * [ IDLE ][bus activity -> + * <--- 3 ms -----> ^ + * ^ ACTVIF=1 + * IDLEIF=1 + * # # # # (#=Program polling flags) + * ^ + * This polling loop will see both + * IDLEIF=1 and ACTVIF=1. + * However, the program services IDLEIF first + * because ACTIVIE=0. + * If this routine clears the only ACTIVIF, + * then it can never get out of the suspend + * mode. + */ + USBActivityIE = 1; // Enable bus activity interrupt + USBClearInterruptFlag(USBIdleIFReg,USBIdleIFBitNum); + + #if defined(__18CXX) || defined(_PIC14E) + U1CONbits.SUSPND = 1; // Put USB module in power conserve + // mode, SIE clock inactive + #endif + USBBusIsSuspended = TRUE; + + /* + * At this point the PIC can go into sleep,idle, or + * switch to a slower clock, etc. This should be done in the + * USBCBSuspend() if necessary. + */ + USB_SUSPEND_HANDLER(EVENT_SUSPEND,0,0); +} + +/******************************************************************** + * Function: void USBWakeFromSuspend(void) + * + * PreCondition: None + * + * Input: None + * + * Output: None + * + * Side Effects: None + * + * Overview: + * + * Note: None + *******************************************************************/ +static void USBWakeFromSuspend(void) +{ + USBBusIsSuspended = FALSE; + + /* + * If using clock switching, the place to restore the original + * microcontroller core clock frequency is in the USBCBWakeFromSuspend() callback + */ + USB_WAKEUP_FROM_SUSPEND_HANDLER(EVENT_RESUME,0,0); + + #if defined(__18CXX) || defined(_PIC14E) + //To avoid improperly clocking the USB module, make sure the oscillator + //settings are consistant with USB operation before clearing the SUSPND bit. + //Make sure the correct oscillator settings are selected in the + //"USB_WAKEUP_FROM_SUSPEND_HANDLER(EVENT_RESUME,0,0)" handler. + U1CONbits.SUSPND = 0; // Bring USB module out of power conserve + // mode. + #endif + + + USBActivityIE = 0; + + /******************************************************************** + Bug Fix: Feb 26, 2007 v2.1 + ********************************************************************* + The ACTVIF bit cannot be cleared immediately after the USB module wakes + up from Suspend or while the USB module is suspended. A few clock cycles + are required to synchronize the internal hardware state machine before + the ACTIVIF bit can be cleared by firmware. Clearing the ACTVIF bit + before the internal hardware is synchronized may not have an effect on + the value of ACTVIF. Additonally, if the USB module uses the clock from + the 96 MHz PLL source, then after clearing the SUSPND bit, the USB + module may not be immediately operational while waiting for the 96 MHz + PLL to lock. + ********************************************************************/ + + // UIRbits.ACTVIF = 0; // Removed + #if defined(__18CXX) + while(USBActivityIF) + #endif + { + USBClearInterruptFlag(USBActivityIFReg,USBActivityIFBitNum); + } // Added + +}//end USBWakeFromSuspend + +/******************************************************************** + * Function: void USBCtrlEPService(void) + * + * PreCondition: USTAT is loaded with a valid endpoint address. + * + * Input: None + * + * Output: None + * + * Side Effects: None + * + * Overview: USBCtrlEPService checks for three transaction + * types that it knows how to service and services + * them: + * 1. EP0 SETUP + * 2. EP0 OUT + * 3. EP0 IN + * It ignores all other types (i.e. EP1, EP2, etc.) + * + * Note: None + *******************************************************************/ +static void USBCtrlEPService(void) +{ + //If we get to here, that means a successful transaction has just occurred + //on EP0. This means "progress" has occurred in the currently pending + //control transfer, so we should re-initialize our timeout counter. + #if defined(USB_ENABLE_STATUS_STAGE_TIMEOUTS) + USBStatusStageTimeoutCounter = USB_STATUS_STAGE_TIMEOUT; + #endif + + //Check if the last transaction was on EP0 OUT endpoint (of any kind, to either the even or odd buffer if ping pong buffers used) + if((USTATcopy.Val & USTAT_EP0_PP_MASK) == USTAT_EP0_OUT_EVEN) + { + //Point to the EP0 OUT buffer of the buffer that arrived + #if defined (_PIC14E) || defined(__18CXX) + pBDTEntryEP0OutCurrent = (volatile BDT_ENTRY*)&BDT[(USTATcopy.Val & USTAT_EP_MASK)>>1]; + #elif defined(__C30__) || defined(__C32__) || defined __XC16__ + pBDTEntryEP0OutCurrent = (volatile BDT_ENTRY*)&BDT[(USTATcopy.Val & USTAT_EP_MASK)>>2]; + #else + #error "unimplemented" + #endif + + //Set the next out to the current out packet + pBDTEntryEP0OutNext = pBDTEntryEP0OutCurrent; + //Toggle it to the next ping pong buffer (if applicable) + ((BYTE_VAL*)&pBDTEntryEP0OutNext)->Val ^= USB_NEXT_EP0_OUT_PING_PONG; + + //If the current EP0 OUT buffer has a SETUP packet + if(pBDTEntryEP0OutCurrent->STAT.PID == PID_SETUP) + { + unsigned char setup_cnt; + + //The SETUP transaction data may have gone into the the CtrlTrfData + //buffer, or elsewhere, depending upon how the BDT was prepared + //before the transaction. Therefore, we should copy the data to the + //SetupPkt buffer so it can be processed correctly by USBCtrlTrfSetupHandler(). + for(setup_cnt = 0; setup_cnt < 8u; setup_cnt++) //SETUP data packets always contain exactly 8 bytes. + { + *(BYTE*)((BYTE*)&SetupPkt + setup_cnt) = *(BYTE*)ConvertToVirtualAddress(pBDTEntryEP0OutCurrent->ADR); + pBDTEntryEP0OutCurrent->ADR++; + } + pBDTEntryEP0OutCurrent->ADR = ConvertToPhysicalAddress(&SetupPkt); + + //Handle the control transfer (parse the 8-byte SETUP command and figure out what to do) + USBCtrlTrfSetupHandler(); + } + else + { + //Handle the DATA transfer + USBCtrlTrfOutHandler(); + } + } + else if((USTATcopy.Val & USTAT_EP0_PP_MASK) == USTAT_EP0_IN) + { + //Otherwise the transmission was and EP0 IN + // so take care of the IN transfer + USBCtrlTrfInHandler(); + } + +}//end USBCtrlEPService + +/******************************************************************** + * Function: void USBCtrlTrfSetupHandler(void) + * + * PreCondition: SetupPkt buffer is loaded with valid USB Setup Data + * + * Input: None + * + * Output: None + * + * Side Effects: None + * + * Overview: This routine is a task dispatcher and has 3 stages. + * 1. It initializes the control transfer state machine. + * 2. It calls on each of the module that may know how to + * service the Setup Request from the host. + * Module Example: USBD, HID, CDC, MSD, ... + * A callback function, USBCBCheckOtherReq(), + * is required to call other module handlers. + * 3. Once each of the modules has had a chance to check if + * it is responsible for servicing the request, stage 3 + * then checks direction of the transfer to determine how + * to prepare EP0 for the control transfer. + * Refer to USBCtrlEPServiceComplete() for more details. + * + * Note: Microchip USB Firmware has three different states for + * the control transfer state machine: + * 1. WAIT_SETUP + * 2. CTRL_TRF_TX (device sends data to host through IN transactions) + * 3. CTRL_TRF_RX (device receives data from host through OUT transactions) + * Refer to firmware manual to find out how one state + * is transitioned to another. + * + * A Control Transfer is composed of many USB transactions. + * When transferring data over multiple transactions, + * it is important to keep track of data source, data + * destination, and data count. These three parameters are + * stored in pSrc,pDst, and wCount. A flag is used to + * note if the data source is from ROM or RAM. + * + *******************************************************************/ +static void USBCtrlTrfSetupHandler(void) +{ + //-------------------------------------------------------------------------- + //1. Re-initialize state tracking variables related to control transfers. + //-------------------------------------------------------------------------- + shortPacketStatus = SHORT_PKT_NOT_USED; + USBDeferStatusStagePacket = FALSE; + USBDeferINDataStagePackets = FALSE; + USBDeferOUTDataStagePackets = FALSE; + BothEP0OutUOWNsSet = FALSE; + controlTransferState = WAIT_SETUP; + + //Abandon any previous control transfers that might have been using EP0. + //Ordinarily, nothing actually needs abandoning, since the previous control + //transfer would have completed successfully prior to the host sending the next + //SETUP packet. However, in a timeout error case, or after an EP0 STALL event, + //one or more UOWN bits might still be set. If so, we should clear the UOWN bits, + //so the EP0 IN/OUT endpoints are in a known inactive state, ready for re-arming + //by the class request handler that will be called next. + pBDTEntryIn[0]->STAT.Val &= ~(_USIE); + ((BYTE_VAL*)&pBDTEntryIn[0])->Val ^= USB_NEXT_EP0_IN_PING_PONG; + pBDTEntryIn[0]->STAT.Val &= ~(_USIE); + ((BYTE_VAL*)&pBDTEntryIn[0])->Val ^= USB_NEXT_EP0_IN_PING_PONG; + pBDTEntryEP0OutNext->STAT.Val &= ~(_USIE); + + inPipes[0].info.Val = 0; + inPipes[0].wCount.Val = 0; + outPipes[0].info.Val = 0; + outPipes[0].wCount.Val = 0; + + + //-------------------------------------------------------------------------- + //2. Now find out what was in the SETUP packet, and begin handling the request. + //-------------------------------------------------------------------------- + USBCheckStdRequest(); //Check for standard USB "Chapter 9" requests. + USB_NONSTANDARD_EP0_REQUEST_HANDLER(EVENT_EP0_REQUEST,0,0); //Check for USB device class specific requests + + + //-------------------------------------------------------------------------- + //3. Re-arm EP0 IN and EP0 OUT endpoints, based on the control transfer in + // progress. If one of the above handlers (in step 2) knew how to process + // the request, it will have set one of the inPipes[0].info.bits.busy or + // outPipes[0].info.bits.busy flags = 1. This lets the + // USBCtrlEPServiceComplete() function know how and which endpoints to + // arm. If both info.bits.busy flags are = 0, then no one knew how to + // process the request. In this case, the default behavior will be to + // perform protocol STALL on EP0. + //-------------------------------------------------------------------------- + USBCtrlEPServiceComplete(); +}//end USBCtrlTrfSetupHandler + + +/****************************************************************************** + * Function: void USBCtrlTrfOutHandler(void) + * + * PreCondition: None + * + * Input: None + * + * Output: None + * + * Side Effects: None + * + * Overview: This routine handles an OUT transaction according to + * which control transfer state is currently active. + * + * Note: Note that if the the control transfer was from + * host to device, the session owner should be notified + * at the end of each OUT transaction to service the + * received data. + * + *****************************************************************************/ +static void USBCtrlTrfOutHandler(void) +{ + if(controlTransferState == CTRL_TRF_RX) + { + USBCtrlTrfRxService(); //Copies the newly received data into the appropriate buffer and configures EP0 OUT for next transaction. + } + else //In this case the last OUT transaction must have been a status stage of a CTRL_TRF_TX (... <-- this last OUT just occurred as the status stage) + { + //If the status stage is complete, this means we are done with the + //control transfer. Go back to the idle "WAIT_SETUP" state. + controlTransferState = WAIT_SETUP; + + //Prepare EP0 OUT for the next SETUP transaction, however, it may have + //already been prepared if ping-pong buffering was enabled on EP0 OUT, + //and the last control transfer was of direction: device to host, see + //USBCtrlEPServiceComplete(). If it was already prepared, do not want + //to do anything to the BDT. + if(BothEP0OutUOWNsSet == FALSE) + { + pBDTEntryEP0OutNext->CNT = USB_EP0_BUFF_SIZE; + pBDTEntryEP0OutNext->ADR = ConvertToPhysicalAddress(&SetupPkt); + pBDTEntryEP0OutNext->STAT.Val = _USIE|_DAT0|(_DTSEN & _DTS_CHECKING_ENABLED)|_BSTALL; + } + else + { + BothEP0OutUOWNsSet = FALSE; + } + } +} + +/****************************************************************************** + * Function: void USBCtrlTrfInHandler(void) + * + * PreCondition: None + * + * Input: None + * + * Output: None + * + * Side Effects: None + * + * Overview: This routine handles an IN transaction according to + * which control transfer state is currently active. + * + * Note: A Set Address Request must not change the acutal address + * of the device until the completion of the control + * transfer. The end of the control transfer for Set Address + * Request is an IN transaction. Therefore it is necessary + * to service this unique situation when the condition is + * right. Macro mUSBCheckAdrPendingState is defined in + * usb9.h and its function is to specifically service this + * event. + *****************************************************************************/ +static void USBCtrlTrfInHandler(void) +{ + BYTE lastDTS; + + lastDTS = pBDTEntryIn[0]->STAT.DTS; + + //switch to the next ping pong buffer + ((BYTE_VAL*)&pBDTEntryIn[0])->Val ^= USB_NEXT_EP0_IN_PING_PONG; + + //Must check if in ADR_PENDING_STATE. If so, we need to update the address + //now, since the IN status stage of the (set address) control transfer has + //evidently completed successfully. + if(USBDeviceState == ADR_PENDING_STATE) + { + U1ADDR = SetupPkt.bDevADR.Val; + if(U1ADDR != 0u) + { + USBDeviceState=ADDRESS_STATE; + } + else + { + USBDeviceState=DEFAULT_STATE; + } + }//end if + + + if(controlTransferState == CTRL_TRF_TX) + { + pBDTEntryIn[0]->ADR = ConvertToPhysicalAddress(CtrlTrfData); + USBCtrlTrfTxService(); + + //Check if we have already sent a short packet. If so, configure + //the endpoint to STALL in response to any further IN tokens (in the + //case that the host erroneously tries to receive more data than it + //should). + if(shortPacketStatus == SHORT_PKT_SENT) + { + // If a short packet has been sent, don't want to send any more, + // stall next time if host is still trying to read. + pBDTEntryIn[0]->STAT.Val = _USIE|_BSTALL; + } + else + { + if(lastDTS == 0) + { + pBDTEntryIn[0]->STAT.Val = _USIE|_DAT1|(_DTSEN & _DTS_CHECKING_ENABLED); + } + else + { + pBDTEntryIn[0]->STAT.Val = _USIE|_DAT0|(_DTSEN & _DTS_CHECKING_ENABLED); + } + }//end if(...)else + } + else // must have been a CTRL_TRF_RX status stage IN packet (... <-- this last IN just occurred as the status stage) + { + //if someone is still expecting data from the control transfer + // then make sure to terminate that request and let them know that + // they are done + if(outPipes[0].info.bits.busy == 1) + { + if(outPipes[0].pFunc != NULL) + { + outPipes[0].pFunc(); + } + outPipes[0].info.bits.busy = 0; + } + + controlTransferState = WAIT_SETUP; + //Don't need to arm EP0 OUT here. It was already armed by the last that + //got processed by the USBCtrlTrfRxService() handler. + } + +} + + +/******************************************************************** + * Function: void USBCheckStdRequest(void) + * + * PreCondition: None + * + * Input: None + * + * Output: None + * + * Side Effects: None + * + * Overview: This routine checks the setup data packet to see + * if it knows how to handle it + * + * Note: None + *******************************************************************/ +static void USBCheckStdRequest(void) +{ + if(SetupPkt.RequestType != USB_SETUP_TYPE_STANDARD_BITFIELD) return; + + switch(SetupPkt.bRequest) + { + case USB_REQUEST_SET_ADDRESS: + inPipes[0].info.bits.busy = 1; // This will generate a zero length packet + USBDeviceState = ADR_PENDING_STATE; // Update state only + /* See USBCtrlTrfInHandler() for the next step */ + break; + case USB_REQUEST_GET_DESCRIPTOR: + USBStdGetDscHandler(); + break; + case USB_REQUEST_SET_CONFIGURATION: + USBStdSetCfgHandler(); + break; + case USB_REQUEST_GET_CONFIGURATION: + inPipes[0].pSrc.bRam = (BYTE*)&USBActiveConfiguration; // Set Source + inPipes[0].info.bits.ctrl_trf_mem = USB_EP0_RAM; // Set memory type + inPipes[0].wCount.v[0] = 1; // Set data count + inPipes[0].info.bits.busy = 1; + break; + case USB_REQUEST_GET_STATUS: + USBStdGetStatusHandler(); + break; + case USB_REQUEST_CLEAR_FEATURE: + case USB_REQUEST_SET_FEATURE: + USBStdFeatureReqHandler(); + break; + case USB_REQUEST_GET_INTERFACE: + inPipes[0].pSrc.bRam = (BYTE*)&USBAlternateInterface[SetupPkt.bIntfID]; // Set source + inPipes[0].info.bits.ctrl_trf_mem = USB_EP0_RAM; // Set memory type + inPipes[0].wCount.v[0] = 1; // Set data count + inPipes[0].info.bits.busy = 1; + break; + case USB_REQUEST_SET_INTERFACE: + inPipes[0].info.bits.busy = 1; + USBAlternateInterface[SetupPkt.bIntfID] = SetupPkt.bAltID; + break; + case USB_REQUEST_SET_DESCRIPTOR: + USB_SET_DESCRIPTOR_HANDLER(EVENT_SET_DESCRIPTOR,0,0); + break; + case USB_REQUEST_SYNCH_FRAME: + default: + break; + }//end switch +}//end USBCheckStdRequest + +/******************************************************************** + * Function: void USBStdFeatureReqHandler(void) + * + * PreCondition: None + * + * Input: None + * + * Output: Can alter BDT entries. Can also modify USB stack + * Maintained variables. + * + * Side Effects: None + * + * Overview: This routine handles the standard SET & CLEAR + * FEATURES requests + * + * Note: This is a private function, intended for internal + * use by the USB stack, when processing SET/CLEAR + * feature requests. + *******************************************************************/ +static void USBStdFeatureReqHandler(void) +{ + BDT_ENTRY *p; + EP_STATUS current_ep_data; + #if defined(__C32__) + DWORD* pUEP; + #else + unsigned char* pUEP; + #endif + + + #ifdef USB_SUPPORT_OTG + //Check for USB On-The-Go (OTG) specific requests + if ((SetupPkt.bFeature == OTG_FEATURE_B_HNP_ENABLE)&& + (SetupPkt.Recipient == USB_SETUP_RECIPIENT_DEVICE_BITFIELD)) + { + inPipes[0].info.bits.busy = 1; + if(SetupPkt.bRequest == USB_REQUEST_SET_FEATURE) + USBOTGEnableHnp(); + else + USBOTGDisableHnp(); + } + + if ((SetupPkt.bFeature == OTG_FEATURE_A_HNP_SUPPORT)&& + (SetupPkt.Recipient == USB_SETUP_RECIPIENT_DEVICE_BITFIELD)) + { + inPipes[0].info.bits.busy = 1; + if(SetupPkt.bRequest == USB_REQUEST_SET_FEATURE) + USBOTGEnableSupportHnp(); + else + USBOTGDisableSupportHnp(); + } + + if ((SetupPkt.bFeature == OTG_FEATURE_A_ALT_HNP_SUPPORT)&& + (SetupPkt.Recipient == USB_SETUP_RECIPIENT_DEVICE_BITFIELD)) + { + inPipes[0].info.bits.busy = 1; + if(SetupPkt.bRequest == USB_REQUEST_SET_FEATURE) + USBOTGEnableAltHnp(); + else + USBOTGDisableAltHnp(); + } + #endif //#ifdef USB_SUPPORT_OTG + + //Check if the host sent a valid SET or CLEAR feature (remote wakeup) request. + if((SetupPkt.bFeature == USB_FEATURE_DEVICE_REMOTE_WAKEUP)&& + (SetupPkt.Recipient == USB_SETUP_RECIPIENT_DEVICE_BITFIELD)) + { + inPipes[0].info.bits.busy = 1; + if(SetupPkt.bRequest == USB_REQUEST_SET_FEATURE) + RemoteWakeup = TRUE; + else + RemoteWakeup = FALSE; + }//end if + + //Check if the host sent a valid SET or CLEAR endpoint halt request. + if((SetupPkt.bFeature == USB_FEATURE_ENDPOINT_HALT)&& + (SetupPkt.Recipient == USB_SETUP_RECIPIENT_ENDPOINT_BITFIELD)&& + (SetupPkt.EPNum != 0) && (SetupPkt.EPNum <= USB_MAX_EP_NUMBER)&& + (USBDeviceState == CONFIGURED_STATE)) + { + //The request was valid. Take control of the control transfer and + //perform the host requested action. + inPipes[0].info.bits.busy = 1; + + //Fetch a pointer to the BDT that the host wants to SET/CLEAR halt on. + if(SetupPkt.EPDir == OUT_FROM_HOST) + { + p = (BDT_ENTRY*)pBDTEntryOut[SetupPkt.EPNum]; + current_ep_data.Val = ep_data_out[SetupPkt.EPNum].Val; + } + else + { + p = (BDT_ENTRY*)pBDTEntryIn[SetupPkt.EPNum]; + current_ep_data.Val = ep_data_in[SetupPkt.EPNum].Val; + } + + //If ping pong buffering is enabled on the requested endpoint, need + //to point to the one that is the active BDT entry which the SIE will + //use for the next attempted transaction on that EP number. + #if (USB_PING_PONG_MODE == USB_PING_PONG__ALL_BUT_EP0) || (USB_PING_PONG_MODE == USB_PING_PONG__FULL_PING_PONG) + if(current_ep_data.bits.ping_pong_state == 0) //Check if even + { + USBHALPingPongSetToEven(&p); + } + else //else must have been odd + { + USBHALPingPongSetToOdd(&p); + } + #endif + + //Update the BDT pointers with the new, next entry based on the feature + // request + if(SetupPkt.EPDir == OUT_FROM_HOST) + { + pBDTEntryOut[SetupPkt.EPNum] = (volatile BDT_ENTRY *)p; + } + else + { + pBDTEntryIn[SetupPkt.EPNum] = (volatile BDT_ENTRY *)p; + } + + //Check if it was a SET_FEATURE endpoint halt request + if(SetupPkt.bRequest == USB_REQUEST_SET_FEATURE) + { + if(p->STAT.UOWN == 1) + { + //Mark that we are terminating this transfer and that the user + // needs to be notified later + if(SetupPkt.EPDir == OUT_FROM_HOST) + { + ep_data_out[SetupPkt.EPNum].bits.transfer_terminated = 1; + } + else + { + ep_data_in[SetupPkt.EPNum].bits.transfer_terminated = 1; + } + } + + //Then STALL the endpoint + p->STAT.Val |= _USIE|_BSTALL; + }//if(SetupPkt.bRequest == USB_REQUEST_SET_FEATURE) + else + { + //Else the request must have been a CLEAR_FEATURE endpoint halt. + #if (USB_PING_PONG_MODE == USB_PING_PONG__ALL_BUT_EP0) || (USB_PING_PONG_MODE == USB_PING_PONG__FULL_PING_PONG) + //toggle over the to the non-active BDT + USBAdvancePingPongBuffer(&p); + + if(p->STAT.UOWN == 1) + { + //Clear UOWN and set DTS state so it will be correct the next time + //the application firmware uses USBTransferOnePacket() on the EP. + p->STAT.Val &= (~_USIE); //Clear UOWN bit + p->STAT.Val |= _DAT1; //Set DTS to DATA1 + USB_TRANSFER_TERMINATED_HANDLER(EVENT_TRANSFER_TERMINATED,p,sizeof(p)); + } + else + { + //UOWN already clear, but still need to set DTS to DATA1 + p->STAT.Val |= _DAT1; + } + + //toggle back to the active BDT (the one the SIE is currently looking at + //and will use for the next successful transaction to take place on the EP + USBAdvancePingPongBuffer(&p); + + //Check if we are currently terminating, or have previously terminated + //a transaction on the given endpoint. If so, need to clear UOWN, + //set DTS to the proper state, and call the application callback + //function. + if((current_ep_data.bits.transfer_terminated != 0) || (p->STAT.UOWN == 1)) + { + if(SetupPkt.EPDir == OUT_FROM_HOST) + { + ep_data_out[SetupPkt.EPNum].bits.transfer_terminated = 0; + } + else + { + ep_data_in[SetupPkt.EPNum].bits.transfer_terminated = 0; + } + //clear UOWN, clear DTS to DATA0, and finally remove the STALL condition + p->STAT.Val &= ~(_USIE | _DAT1 | _BSTALL); + //Call the application event handler callback function, so it can + //decide if the endpoint should get re-armed again or not. + USB_TRANSFER_TERMINATED_HANDLER(EVENT_TRANSFER_TERMINATED,p,sizeof(p)); + } + else + { + //clear UOWN, clear DTS to DATA0, and finally remove the STALL condition + p->STAT.Val &= ~(_USIE | _DAT1 | _BSTALL); + } + #else //else we must not be using ping-pong buffering on the requested endpoint + //Check if we need to call the user transfer terminated event callback function. + //We should call the callback, if the endpoint was previously terminated, + //or the endpoint is currently armed, and the host is performing clear + //endpoint halt, even though the endpoint wasn't stalled. + if((current_ep_data.bits.transfer_terminated != 0) || (p->STAT.UOWN == 1)) + { + //We are going to call the user transfer terminated callback. + //Clear the flag so we know we took care of it and don't need + //to call it again later. + if(SetupPkt.EPDir == OUT_FROM_HOST) + { + ep_data_out[SetupPkt.EPNum].bits.transfer_terminated = 0; + } + else + { + ep_data_in[SetupPkt.EPNum].bits.transfer_terminated = 0; + } + + //Clear UOWN and remove the STALL condition. + // In this case we also need to set the DTS bit to 1 so that + // it toggles to DATA0 the next time the application firmware + // calls USBTransferOnePacket() (or equivalent macro). + p->STAT.Val &= ~(_USIE | _BSTALL); + p->STAT.Val |= _DAT1; + //Let the application firmware know a transaction just + //got terminated by the host, and that it is now free to + //re-arm the endpoint or do other tasks if desired. + USB_TRANSFER_TERMINATED_HANDLER(EVENT_TRANSFER_TERMINATED,p,sizeof(p)); + } + else + { + //Clear UOWN and remove the STALL condition. + // In this case we also need to set the DTS bit to 1 so that + // it toggles to DATA0 the next time the application firmware + // calls USBTransferOnePacket() (or equivalent macro). + p->STAT.Val &= ~(_USIE | _BSTALL); + p->STAT.Val |= _DAT1; + } + #endif //end of #if (USB_PING_PONG_MODE == USB_PING_PONG__ALL_BUT_EP0) || (USB_PING_PONG_MODE == USB_PING_PONG__FULL_PING_PONG) + + //Get a pointer to the appropriate UEPn register + #if defined(__C32__) + pUEP = (DWORD*)(&U1EP0); + pUEP += (SetupPkt.EPNum*4); + #else + pUEP = (unsigned char*)(&U1EP0+SetupPkt.EPNum); + #endif + + //Clear the STALL bit in the UEP register + *pUEP &= ~UEP_STALL; + }//end if(SetupPkt.bRequest == USB_REQUEST_SET_FEATURE) + }//end if (lots of checks for set/clear endpoint halt) +}//end USBStdFeatureReqHandler + + +/** EOF USBDevice.c *****************************************************/ diff --git a/software/front/US_BootLoader.X/usb/usb_device.h b/software/front/US_BootLoader.X/usb/usb_device.h new file mode 100644 index 0000000..547339f --- /dev/null +++ b/software/front/US_BootLoader.X/usb/usb_device.h @@ -0,0 +1,1988 @@ +/******************************************************************************* + + USB Device header file + +Summary: + This file, with its associated C source file, provides the main substance of + the USB device side stack. These files will receive, transmit, and process + various USB commands as well as take action when required for various events + that occur on the bus. + +Description: + This file, with its associated C source file, provides the main substance of + the USB device side stack. These files will receive, transmit, and process + various USB commands as well as take action when required for various events + that occur on the bus. + + This file is located in the "\\\Microchip\\Include\\USB" + directory. + + When including this file in a new project, this file can either be + referenced from the directory in which it was installed or copied + directly into the user application folder. If the first method is + chosen to keep the file located in the folder in which it is installed + then include paths need to be added so that the library and the + application both know where to reference each others files. If the + application folder is located in the same folder as the Microchip + folder (like the current demo folders), then the following include + paths need to be added to the application's project: + + ..\\..\\Microchip\\Include + + . + + If a different directory structure is used, modify the paths as + required. An example using absolute paths instead of relative paths + would be the following: + + C:\\Microchip Solutions\\Microchip\\Include + + C:\\Microchip Solutions\\My Demo Application + +******************************************************************************/ +//DOM-IGNORE-BEGIN +/****************************************************************************** + FileName: usb_device.h + Dependencies: See INCLUDES section + Processor: All Microchip parts with a USB module + Hardware: Please see documentation in "/Microchip/Help" + folder for details. + Complier: Microchip C18 + XC16 + XC32 + Company: Microchip Technology, Inc. + + Software License Agreement: + + The software supplied herewith by Microchip Technology Incorporated + (the "Company") for its PIC(R) Microcontroller is intended and + supplied to you, the Company’s customer, for use solely and + exclusively on Microchip PIC Microcontroller products. The + software is owned by the Company and/or its supplier, and is + protected under applicable copyright laws. All rights are reserved. + Any use in violation of the foregoing restrictions may subject the + user to criminal sanctions under applicable laws, as well as to + civil liability for the breach of the terms and conditions of this + license. + + THIS SOFTWARE IS PROVIDED IN AN "AS IS" CONDITION. NO WARRANTIES, + WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED + TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT, + IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR + CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +*******************************************************************/ + +/******************************************************************** + Change History: + Rev Description + ---- ----------- + 2.1 Added "(" & ")" to EP definitions + updated for simplicity and to use common + coding style + + 2.6 Removed many of the device specific information to the + HAL layer files. Moved many of the CH9 defintions to the + CH9 file. + + 2.6a No Change + + 2.7 Fixed error where USBHandleGetAddr() didn't convert the + return address from a physical address to a virtual address + for PIC32. + + Added macro versions of USBDeviceAttach() and USBDeviceDetach() + so they will compile without error when using polling mode. + + 2.7a No Change + + 2.8 Added EVENT_TRANSFER_TERMINATED event enum item. + +********************************************************************/ + +#ifndef USBDEVICE_H +#define USBDEVICE_H +//DOM-IGNORE-END + +/** DEFINITIONS ****************************************************/ + +//USB_HANDLE is a pointer to an entry in the BDT. This pointer can be used +// to read the length of the last transfer, the status of the last transfer, +// and various other information. Insure to initialize USB_HANDLE objects +// to NULL so that they are in a known state during their first usage. +#define USB_HANDLE void* + +#define USB_EP0_ROM 0x00 //Data comes from RAM +#define USB_EP0_RAM 0x01 //Data comes from ROM +#define USB_EP0_BUSY 0x80 //The PIPE is busy +#define USB_EP0_INCLUDE_ZERO 0x40 //include a trailing zero packet +#define USB_EP0_NO_DATA 0x00 //no data to send +#define USB_EP0_NO_OPTIONS 0x00 //no options set + +/******************************************************************** + * Standard Request Codes + * USB 2.0 Spec Ref Table 9-4 + *******************************************************************/ + +/* USB Device States as returned by USBGetDeviceState(). Only the defintions + for these states should be used. The actual value for each state should + not be relied upon as constant and may change based on the implementation. */ +typedef enum +{ + /* Detached is the state in which the device is not attached to the bus. When + in the detached state a device should not have any pull-ups attached to either + the D+ or D- line. */ + DETACHED_STATE + /*DOM-IGNORE-BEGIN*/ = 0x00 /*DOM-IGNORE-END*/, + /* Attached is the state in which the device is attached ot the bus but the + hub/port that it is attached to is not yet configured. */ + ATTACHED_STATE + /*DOM-IGNORE-BEGIN*/ = 0x01 /*DOM-IGNORE-END*/, + /* Powered is the state in which the device is attached to the bus and the + hub/port that it is attached to is configured. */ + POWERED_STATE + /*DOM-IGNORE-BEGIN*/ = 0x02 /*DOM-IGNORE-END*/, + /* Default state is the state after the device receives a RESET command from + the host. */ + DEFAULT_STATE + /*DOM-IGNORE-BEGIN*/ = 0x04 /*DOM-IGNORE-END*/, + /* Address pending state is not an official state of the USB defined states. + This state is internally used to indicate that the device has received a + SET_ADDRESS command but has not received the STATUS stage of the transfer yet. + The device is should not switch addresses until after the STATUS stage is + complete. */ + ADR_PENDING_STATE + /*DOM-IGNORE-BEGIN*/ = 0x08 /*DOM-IGNORE-END*/, + /* Address is the state in which the device has its own specific address on the + bus. */ + ADDRESS_STATE + /*DOM-IGNORE-BEGIN*/ = 0x10 /*DOM-IGNORE-END*/, + /* Configured is the state where the device has been fully enumerated and is + operating on the bus. The device is now allowed to excute its application + specific tasks. It is also allowed to increase its current consumption to the + value specified in the configuration descriptor of the current configuration. + */ + CONFIGURED_STATE + /*DOM-IGNORE-BEGIN*/ = 0x20 /*DOM-IGNORE-END*/ +} USB_DEVICE_STATE; + + +/* USB device stack events description here - DWF */ +typedef enum +{ + // Notification that a SET_CONFIGURATION() command was received (device) + EVENT_CONFIGURED + /*DOM-IGNORE-BEGIN*/ = EVENT_DEVICE_STACK_BASE /*DOM-IGNORE-END*/, + + // A SET_DESCRIPTOR request was received (device) + EVENT_SET_DESCRIPTOR, + + // An endpoint 0 request was received that the stack did not know how to + // handle. This is most often a request for one of the class drivers. + // Please refer to the class driver documenation for information related + // to what to do if this request is received. (device) + EVENT_EP0_REQUEST, + +// // A USB transfer has completed. The data associated with this event is of +// // the data type HOST_TRANSFER_DATA if the event is generated from the host +// // stack. +// EVENT_TRANSFER, +// +// // A USB Start of Frame token has been received. This event is not +// // used by the Host stack. +// EVENT_SOF, +// +// // Device-mode resume received. This event is not used by the Host stack. +// EVENT_RESUME, +// +// // Device-mode suspend/idle event received. This event is not used by the +// // Host stack. +// EVENT_SUSPEND, +// +// // Device-mode bus reset received. This event is not used by the Host +// // stack. +// EVENT_RESET, + +// // Device Mode: A setup packet received (data: SETUP_PKT). This event is +// // not used by the Host stack. +// EVENT_SETUP, + + // Device-mode USB cable has been attached. This event is not used by the + // Host stack. The client driver may provide an application event when a + // device attaches. + EVENT_ATTACH, + + // A user transfer was terminated by the stack. This event will pass back + // the value of the handle that was terminated. Compare this value against + // the current valid handles to determine which transfer was terminated. + EVENT_TRANSFER_TERMINATED + +} USB_DEVICE_STACK_EVENTS; + +/** Function Prototypes **********************************************/ + + +/******************************************************************************/ +/** External API Functions ****************************************************/ +/******************************************************************************/ + +/************************************************************************** + Function: + void USBDeviceInit(void) + + Description: + This function initializes the device stack it in the default state. The + USB module will be completely reset including all of the internal + variables, registers, and interrupt flags. + + Precondition: + This function must be called before any of the other USB Device + functions can be called, including USBDeviceTasks(). + + Parameters: + None + + Return Values: + None + + Remarks: + None + + **************************************************************************/ +void USBDeviceInit(void); + +/************************************************************************** + Function: + void USBDeviceTasks(void) + + Summary: + This function is the main state machine/transaction handler of the USB + device side stack. When the USB stack is operated in "USB_POLLING" mode + (usb_config.h user option) the USBDeviceTasks() function should be called + periodically to receive and transmit packets through the stack. This + function also takes care of control transfers associated with the USB + enumeration process, and detecting various USB events (such as suspend). + This function should be called at least once every 1.8ms during the USB + enumeration process. After the enumeration process is complete (which can + be determined when USBGetDeviceState() returns CONFIGURED_STATE), the + USBDeviceTasks() handler may be called the faster of: either once + every 9.8ms, or as often as needed to make sure that the hardware USTAT + FIFO never gets full. A good rule of thumb is to call USBDeviceTasks() at + a minimum rate of either the frequency that USBTransferOnePacket() gets + called, or, once/1.8ms, whichever is faster. See the inline code comments + near the top of usb_device.c for more details about minimum timing + requirements when calling USBDeviceTasks(). + + When the USB stack is operated in "USB_INTERRUPT" mode, it is not necessary + to call USBDeviceTasks() from the main loop context. In the USB_INTERRUPT + mode, the USBDeviceTasks() handler only needs to execute when a USB + interrupt occurs, and therefore only needs to be called from the interrupt + context. + + Description: + This function is the main state machine/transaction handler of the USB + device side stack. When the USB stack is operated in "USB_POLLING" mode + (usb_config.h user option) the USBDeviceTasks() function should be called + periodically to receive and transmit packets through the stack. This + function also takes care of control transfers associated with the USB + enumeration process, and detecting various USB events (such as suspend). + This function should be called at least once every 1.8ms during the USB + enumeration process. After the enumeration process is complete (which can + be determined when USBGetDeviceState() returns CONFIGURED_STATE), the + USBDeviceTasks() handler may be called the faster of: either once + every 9.8ms, or as often as needed to make sure that the hardware USTAT + FIFO never gets full. A good rule of thumb is to call USBDeviceTasks() at + a minimum rate of either the frequency that USBTransferOnePacket() gets + called, or, once/1.8ms, whichever is faster. See the inline code comments + near the top of usb_device.c for more details about minimum timing + requirements when calling USBDeviceTasks(). + + When the USB stack is operated in "USB_INTERRUPT" mode, it is not necessary + to call USBDeviceTasks() from the main loop context. In the USB_INTERRUPT + mode, the USBDeviceTasks() handler only needs to execute when a USB + interrupt occurs, and therefore only needs to be called from the interrupt + context. + + Typical usage: + + void main(void) + { + USBDeviceInit(); + while(1) + { + USBDeviceTasks(); //Takes care of enumeration and other USB events + if((USBGetDeviceState() \< CONFIGURED_STATE) || + (USBIsDeviceSuspended() == TRUE)) + { + //Either the device is not configured or we are suspended, + // so we don't want to execute any USB related application code + continue; //go back to the top of the while loop + } + else + { + //Otherwise we are free to run USB and non-USB related user + //application code. + UserApplication(); + } + } + } + + + Precondition: + Make sure the USBDeviceInit() function has been called prior to calling + USBDeviceTasks() for the first time. + Remarks: + USBDeviceTasks() does not need to be called while in the USB suspend mode, + if the user application firmware in the USBCBSuspend() callback function + enables the ACTVIF USB interrupt source and put the microcontroller into + sleep mode. If the application firmware decides not to sleep the + microcontroller core during USB suspend (ex: continues running at full + frequency, or clock switches to a lower frequency), then the USBDeviceTasks() + function must still be called periodically, at a rate frequent enough to + ensure the 10ms resume recovery interval USB specification is met. Assuming + a worst case primary oscillator and PLL start up time of <5ms, then + USBDeviceTasks() should be called once every 5ms in this scenario. + + When the USB cable is detached, or the USB host is not actively powering + the VBUS line to +5V nominal, the application firmware does not always have + to call USBDeviceTasks() frequently, as no USB activity will be taking + place. However, if USBDeviceTasks() is not called regularly, some + alternative means of promptly detecting when VBUS is powered (indicating + host attachment), or not powered (host powered down or USB cable unplugged) + is still needed. For self or dual self/bus powered USB applications, see + the USBDeviceAttach() and USBDeviceDetach() API documentation for additional + considerations. + + **************************************************************************/ +void USBDeviceTasks(void); + + +/******************************************************************************* + Function: + void USBEnableEndpoint(BYTE ep, BYTE options) + + Summary: + This function will enable the specified endpoint with the specified + options + Description: + This function will enable the specified endpoint with the specified + options. + + Typical Usage: + + void USBCBInitEP(void) + { + USBEnableEndpoint(MSD_DATA_IN_EP,USB_IN_ENABLED|USB_OUT_ENABLED|USB_HANDSHAKE_ENABLED|USB_DISALLOW_SETUP); + USBMSDInit(); + } + + + In the above example endpoint number MSD_DATA_IN_EP is being configured + for both IN and OUT traffic with handshaking enabled. Also since + MSD_DATA_IN_EP is not endpoint 0 (MSD does not allow this), then we can + explicitly disable SETUP packets on this endpoint. + Conditions: + None + Input: + BYTE ep - the endpoint to be configured + BYTE options - optional settings for the endpoint. The options should + be ORed together to form a single options string. The + available optional settings for the endpoint. The + options should be ORed together to form a single options + string. The available options are the following\: + * USB_HANDSHAKE_ENABLED enables USB handshaking (ACK, + NAK) + * USB_HANDSHAKE_DISABLED disables USB handshaking (ACK, + NAK) + * USB_OUT_ENABLED enables the out direction + * USB_OUT_DISABLED disables the out direction + * USB_IN_ENABLED enables the in direction + * USB_IN_DISABLED disables the in direction + * USB_ALLOW_SETUP enables control transfers + * USB_DISALLOW_SETUP disables control transfers + * USB_STALL_ENDPOINT STALLs this endpoint + Return: + None + Remarks: + None + *****************************************************************************/ +void USBEnableEndpoint(BYTE ep, BYTE options); + + +/************************************************************************* + Function: + USB_HANDLE USBTransferOnePacket(BYTE ep, BYTE dir, BYTE* data, BYTE len) + + Summary: + Transfers a single packet (one transaction) of data on the USB bus. + + Description: + The USBTransferOnePacket() function prepares a USB endpoint + so that it may send data to the host (an IN transaction), or + receive data from the host (an OUT transaction). The + USBTransferOnePacket() function can be used both to receive and + send data to the host. This function is the primary API function + provided by the USB stack firmware for sending or receiving application + data over the USB port. + + The USBTransferOnePacket() is intended for use with all application + endpoints. It is not used for sending or receiving applicaiton data + through endpoint 0 by using control transfers. Separate API + functions, such as USBEP0Receive(), USBEP0SendRAMPtr(), and + USBEP0SendROMPtr() are provided for this purpose. + + The USBTransferOnePacket() writes to the Buffer Descriptor Table (BDT) + entry associated with an endpoint buffer, and sets the UOWN bit, which + prepares the USB hardware to allow the transaction to complete. The + application firmware can use the USBHandleBusy() macro to check the + status of the transaction, to see if the data has been successfully + transmitted yet. + + + Typical Usage + + //make sure that the we are in the configured state + if(USBGetDeviceState() == CONFIGURED_STATE) + { + //make sure that the last transaction isn't busy by checking the handle + if(!USBHandleBusy(USBInHandle)) + { + //Write the new data that we wish to send to the host to the INPacket[] array + INPacket[0] = USEFUL_APPLICATION_VALUE1; + INPacket[1] = USEFUL_APPLICATION_VALUE2; + //INPacket[2] = ... (fill in the rest of the packet data) + + //Send the data contained in the INPacket[] array through endpoint "EP_NUM" + USBInHandle = USBTransferOnePacket(EP_NUM,IN_TO_HOST,(BYTE*)&INPacket[0],sizeof(INPacket)); + } + } + + + Conditions: + Before calling USBTransferOnePacket(), the following should be true. + 1. The USB stack has already been initialized (USBDeviceInit() was called). + 2. A transaction is not already pending on the specified endpoint. This + is done by checking the previous request using the USBHandleBusy() + macro (see the typical usage example). + 3. The host has already sent a set configuration request and the + enumeration process is complete. + This can be checked by verifying that the USBGetDeviceState() + macro returns "CONFIGURED_STATE", prior to calling + USBTransferOnePacket(). + + Input: + BYTE ep - The endpoint number that the data will be transmitted or + received on + BYTE dir - The direction of the transfer + This value is either OUT_FROM_HOST or IN_TO_HOST + BYTE* data - For IN transactions: pointer to the RAM buffer containing + the data to be sent to the host. For OUT transactions: pointer + to the RAM buffer that the received data should get written to. + BYTE len - Length of the data needing to be sent (for IN transactions). + For OUT transactions, the len parameter should normally be set + to the endpoint size specified in the endpoint descriptor. + + Return Values: + USB_HANDLE - handle to the transfer. The handle is a pointer to + the BDT entry associated with this transaction. The + status of the transaction (ex: if it is complete or still + pending) can be checked using the USBHandleBusy() macro + and supplying the USB_HANDLE provided by + USBTransferOnePacket(). + + Remarks: + If calling the USBTransferOnePacket() function from within the USBCBInitEP() + callback function, the set configuration is still being processed and the + USBDeviceState may not be == CONFIGURED_STATE yet. In this special case, + the USBTransferOnePacket() may still be called, but make sure that the + endpoint has been enabled and initialized by the USBEnableEndpoint() + function first. + + *************************************************************************/ +USB_HANDLE USBTransferOnePacket(BYTE ep,BYTE dir,BYTE* data,BYTE len); + +/******************************************************************** + Function: + void USBStallEndpoint(BYTE ep, BYTE dir) + + Summary: + Configures the specified endpoint to send STALL to the host, the next + time the host tries to access the endpoint. + + PreCondition: + None + + Parameters: + BYTE ep - The endpoint number that should be configured to send STALL. + BYTE dir - The direction of the endpoint to STALL, either + IN_TO_HOST or OUT_FROM_HOST. + + Return Values: + None + + Remarks: + None + + *******************************************************************/ +void USBStallEndpoint(BYTE ep, BYTE dir); +/************************************************************************** + Function: + void USBCancelIO(BYTE endpoint) + + Description: + This function cancels the transfers pending on the specified endpoint. + This function can only be used after a SETUP packet is received and + before that setup packet is handled. This is the time period in which + the EVENT_EP0_REQUEST is thrown, before the event handler function + returns to the stack. + + Precondition: + + Parameters: + BYTE endpoint - the endpoint number you wish to cancel the transfers for + + Return Values: + None + + Remarks: + None + + **************************************************************************/ +void USBCancelIO(BYTE endpoint); + +/************************************************************************** + Function: + void USBDeviceDetach(void) + + Summary: + This function configures the USB module to "soft detach" itself from + the USB host. + + Description: + This function configures the USB module to perform a "soft detach" + operation, by disabling the D+ (or D-) ~1.5k pull up resistor, which + lets the host know the device is present and attached. This will make + the host think that the device has been unplugged. This is potentially + useful, as it allows the USB device to force the host to re-enumerate + the device (on the firmware has re-enabled the USB module/pull up, by + calling USBDeviceAttach(), to "soft re-attach" to the host). + + Precondition: + Should only be called when USB_INTERRUPT is defined. See remarks + section if USB_POLLING mode option is being used (usb_config.h option). + + Additionally, this function should only be called from the main() loop + context. Do not call this function from within an interrupt handler, as + this function may modify global interrupt enable bits and settings. + + Parameters: + None + + Return Values: + None + + Remarks: + If the application firmware calls USBDeviceDetach(), it is strongly + recommended that the firmware wait at least >= 80ms before calling + USBDeviceAttach(). If the firmeware performs a soft detach, and then + re-attaches too soon (ex: after a few micro seconds for instance), some + hosts may interpret this as an unexpected "glitch" rather than as a + physical removal/re-attachment of the USB device. In this case the host + may simply ignore the event without re-enumerating the device. To + ensure that the host properly detects and processes the device soft + detach/re-attach, it is recommended to make sure the device remains + detached long enough to mimic a real human controlled USB + unplug/re-attach event (ex: after calling USBDeviceDetach(), do not + call USBDeviceAttach() for at least 80+ms, preferrably longer. + + Neither the USBDeviceDetach() or USBDeviceAttach() functions are blocking + or take long to execute. It is the application firmware's + responsibility for adding the 80+ms delay, when using these API + functions. + + Note: The Windows plug and play event handler processing is fairly + slow, especially in certain versions of Windows, and for certain USB + device classes. It has been observed that some device classes need to + provide even more USB detach dwell interval (before calling + USBDeviceAttach()), in order to work correctly after re-enumeration. + If the USB device is a CDC class device, it is recommended to wait + at least 1.5 seconds or longer, before soft re-attaching to the host, + to provide the plug and play event handler enough time to finish + processing the removal event, before the re-attach occurs. + + If the application is using the USB_POLLING mode option, then the + USBDeviceDetach() and USBDeviceAttach() functions are not available. + In this mode, the USB stack relies on the "#define USE_USB_BUS_SENSE_IO" + and "#define USB_BUS_SENSE" options in the + HardwareProfile – [platform name].h file. + + When using the USB_POLLING mode option, and the + "#define USE_USB_BUS_SENSE_IO" definition has been commented out, then + the USB stack assumes that it should always enable the USB module at + pretty much all times. Basically, anytime the application firmware + calls USBDeviceTasks(), the firmware will automatically enable the USB + module. This mode would typically be selected if the application was + designed to be a purely bus powered device. In this case, the + application is powered from the +5V VBUS supply from the USB port, so + it is correct and sensible in this type of application to power up and + turn on the USB module, at anytime that the microcontroller is + powered (which implies the USB cable is attached and the host is also + powered). + + In a self powered application, the USB stack is designed with the + intention that the user will enable the "#define USE_USB_BUS_SENSE_IO" + option in the HardwareProfile – [platform name].h file. When this + option is defined, then the USBDeviceTasks() function will automatically + check the I/O pin port value of the designated pin (based on the + #define USB_BUS_SENSE option in the HardwareProfile – [platform name].h + file), every time the application calls USBDeviceTasks(). If the + USBDeviceTasks() function is executed and finds that the pin defined by + the #define USB_BUS_SENSE is in a logic low state, then it will + automatically disable the USB module and tri-state the D+ and D- pins. + If however the USBDeviceTasks() function is executed and finds the pin + defined by the #define USB_BUS_SENSE is in a logic high state, then it + will automatically enable the USB module, if it has not already been + enabled. + + **************************************************************************/ +void USBDeviceDetach(void); + +/*DOM-IGNORE-BEGIN*/ +#if !defined(USB_INTERRUPT) + #define USBDeviceDetach() +#endif +/*DOM-IGNORE-END*/ + +/************************************************************************** + Function: + void USBDeviceAttach(void) + + Summary: + Checks if VBUS is present, and that the USB module is not already + initalized, and if so, enables the USB module so as to signal device + attachment to the USB host. + + Description: + This function indicates to the USB host that the USB device has been + attached to the bus. This function needs to be called in order for the + device to start to enumerate on the bus. + + Precondition: + Should only be called when USB_INTERRUPT is defined. Also, should only + be called from the main() loop context. Do not call USBDeviceAttach() + from within an interrupt handler, as the USBDeviceAttach() function + may modify global interrupt enable bits and settings. + + For normal USB devices: + Make sure that if the module was previously on, that it has been turned off + for a long time (ex: 100ms+) before calling this function to re-enable the module. + If the device turns off the D+ (for full speed) or D- (for low speed) ~1.5k ohm + pull up resistor, and then turns it back on very quickly, common hosts will sometimes + reject this event, since no human could ever unplug and reattach a USB device in a + microseconds (or nanoseconds) timescale. The host could simply treat this as some kind + of glitch and ignore the event altogether. + Parameters: + None + + Return Values: + None + + Remarks: + See also the USBDeviceDetach() API function documentation. +****************************************************************************/ +void USBDeviceAttach(void); + +/*DOM-IGNORE-BEGIN*/ +#if !defined(USB_INTERRUPT) + #define USBDeviceAttach() +#endif +/*DOM-IGNORE-END*/ + + +/******************************************************************************* + Function: void USBCtrlEPAllowStatusStage(void); + + Summary: This function prepares the proper endpoint 0 IN or endpoint 0 OUT + (based on the controlTransferState) to allow the status stage packet + of a control transfer to complete. This function gets used + internally by the USB stack itself, but it may also be called from + the application firmware, IF the application firmware called + the USBDeferStatusStage() function during the initial processing + of the control transfer request. In this case, the application + must call the USBCtrlEPAllowStatusStage() once, after it has fully + completed processing and handling the data stage portion of the + request. + + If the application firmware has no need for delaying control + transfers, and therefore never calls USBDeferStatusStage(), then the + application firmware should not call USBCtrlEPAllowStatusStage(). + + Description: + + Conditions: + None + + Input: + + Return: + + Remarks: + None + *****************************************************************************/ +void USBCtrlEPAllowStatusStage(void); + + + +/******************************************************************************* + Function: void USBCtrlEPAllowDataStage(void); + + Summary: This function allows the data stage of either a host-to-device or + device-to-host control transfer (with data stage) to complete. + This function is meant to be used in conjunction with either the + USBDeferOUTDataStage() or USBDeferINDataStage(). If the firmware + does not call either USBDeferOUTDataStage() or USBDeferINDataStage(), + then the firmware does not need to manually call + USBCtrlEPAllowDataStage(), as the USB stack will call this function + instead. + + Description: + + Conditions: A control transfer (with data stage) should already be pending, + if the firmware calls this function. Additionally, the firmware + should have called either USBDeferOUTDataStage() or + USBDeferINDataStage() at the start of the control transfer, if + the firmware will be calling this function manually. + + Input: + + Return: + + Remarks: + *****************************************************************************/ +void USBCtrlEPAllowDataStage(void); + + +/******************************************************************************* + Function: void USBDeferOUTDataStage(void); + + Summary: This function will cause the USB hardware to continuously NAK the + OUT data packets sent from the host, during the data stage of a + device to host control transfer. This allows the firmware more time + to prepare the RAM buffer that will eventually be used to receive the + data from the host. This is also useful, if the firmware wishes to + receive the OUT data in a different context than what the + USBDeviceTasks() function executes at. + + Calling this function (macro) will assert ownership of the currently + pending control transfer. Therefore, the USB stack will not STALL + when it reaches the data stage of the control transfer, even if the + firmware has not (yet) called the USBEP0Receive() API function. + However, the application firware must still (eventually, once it is + ready) call one of the aforementioned API function. + + Example Usage: + + 1. Host sends a SETUP packet to the device, requesting a host to + device control transfer, with data stage (OUT data packets). + 2. USBDeviceTasks() executes, and then calls the USBCBCheckOtherReq() + callback event handler. The USBCBCheckOtherReq() calls the + application specific/device class specific handler that detects + the type of control transfer. + 3. If the firmware needs more time before it wishes to receive the + first OUT data packet, or, if the firmware wishes to process the + command in a different context, then it may call + USBDeferOUTDataStage(), in the context of the + USBCBCheckOtherReq() handler function. + 4. If the firmware called USBDeferOUTDataStage() in step #3 above, + then the hardware will NAK the OUT data packets sent by the + host, for the OUT data stage. + 5. Once the firmware is ready, it should then call USBEP0Receive(), + to prepare the USB stack to receive the OUT data from the host, + and to write it to the user specified buffer. + 6. The firmware should now call USBCtrlEPAllowDataStage(). This + will allow the data stage to complete. Once all OUT data has + been received, the user callback function (provided by the + function pointer provided when calling USBEP0Receive()) will + get called. + 7. Once all data has been received from the host, the status stage + (a 0-byte IN packet) will complete automatically (assuming the + firmware did not call USBDeferStatusStage() during step #3). + + + Description: + + Conditions: Before calling USBDeferOUTDataStage(), the firmware should first + verify that the control transfer has a data stage, and that + it is of type host-to-device (OUT). + + Input: + + Return: + + Remarks: Section 9.2.6 of the official USB 2.0 specifications indicates that + the USB device must be able to receive all bytes and complete the + control transfer within a maximum of 5 seconds. + + If the firmware calls USBDeferOUTDataStage(), it must eventually call + USBEP0Receive(), and then call USBCtrlEPAllowDataStage(). If it does + not do this, the control transfer will never be able to complete. + This will break the USB connection, as the host needs to be able to + communicate over EP0, in order to perform basic tasks including + enumeration. + + The firmware should never call both USBDeferINDataStage() and + USBDeferOUTDataStage() during the same control transfer. These + functions are mutually exclusive (a control transfer with data stage + can never contain both IN and OUT data packets during the data stage). + *****************************************************************************/ +void USBDeferOUTDataStage(void); +extern volatile BOOL USBDeferOUTDataStagePackets; +/*DOM-IGNORE-BEGIN*/ +#define USBDeferOUTDataStage() {USBDeferOUTDataStagePackets = TRUE; outPipes[0].info.bits.busy = 1;} +/*DOM-IGNORE-END*/ + +/******************************************************************************* + Function: void USBDeferStatusStage(void); + + Summary: Calling this function will prevent the USB stack from automatically + enabling the status stage for the currently pending control transfer + from completing immediately after all data bytes have been sent or + received. This is useful if a class handler or USB application + firmware project uses control transfers for sending/receiving data + over EP0, but requires time in order to finish processing and/or to + consume the data. + + For example: Consider an application which receives OUT data from the + USB host, through EP0 using control transfers. Now assume that this + application wishes to do something time consuming with this data (ex: + transmit it to and save it to an external EEPROM device, connected + via SPI/I2C/etc.). In this case, it would typically be desireable to + defer allowing the USB status stage of the control transfer to complete, + until after the data has been fully sent to the EEPROM device and saved. + + If the USB class handler firmware that processes the control transfer + SETUP packet determines that it will need extra time to complete the + control transfer, it may optionally call USBDeferStatusStage(). If it + does so, it is then the responsibility of the application firmware to + eventually call USBCtrlEPAllowStatusStage(), once the firmware has + finished processing the data associated with the control transfer. + + If the firmware call USBDeferStatusStage(), but never calls + USBCtrlEPAllowStatusStage(), then one of two possibilities will occur. + + 1. If the "USB_ENABLE_STATUS_STAGE_TIMEOUTS" option is commented in + usb_config.h, then the status stage of the control transfer will + never be able to complete. This is an error case and should be + avoided. + 2. If the "USB_ENABLE_STATUS_STAGE_TIMEOUTS" option is enabled in + usb_config.h, then the USBDeviceTasks() function will + automatically call USBCtrlEPAllowStatusStage(), after the + "USB_STATUS_STAGE_TIMEOUT" has elapsed, since the last quanta of + "progress" has occurred in the control transfer. Progress is + defined as the last successful transaction completing on EP0 IN or + EP0 OUT. + Although the timeouts feature allows the status stage to + [eventually] complete, it is still preferable to manually call + USBCtrlEPAllowStatusStage() after the application firmware has + finished processing/consuming the control transfer data, as this + will allow for much faster processing of control transfers, and + therefore much higher data rates and better user responsiveness. + Description: + + Conditions: + None + + Input: + + Return: + + Remarks: If this function is called, is should get called after the SETUP + packet has arrived (the control transfer has started), but before + the USBCtrlEPServiceComplete() function has been called by the USB + stack. Therefore, the normal place to call USBDeferStatusStage() + would be from within the USBCBCheckOtherReq() handler context. For + example, in a HID application using control transfers, the + USBDeferStatusStage() function would be called from within the + USER_GET_REPORT_HANDLER or USER_SET_REPORT_HANDLER functions. + *****************************************************************************/ +void USBDeferStatusStage(void); +extern volatile BOOL USBDeferStatusStagePacket; +/*DOM-IGNORE-BEGIN*/ +#define USBDeferStatusStage() {USBDeferStatusStagePacket = TRUE;} +/*DOM-IGNORE-END*/ + + +/******************************************************************************* + Function: BOOL USBOUTDataStageDeferred(void); + + Summary: Returns TRUE if a control transfer with OUT data stage is pending, + and the firmware has called USBDeferOUTDataStage(), but has not + yet called USBCtrlEPAllowDataStage(). + Returns FALSE if a control transfer with OUT data stage is either + not pending, or the firmware did not call USBDeferOUTDataStage() + at the start of the control transfer. + + This function (macro) would typically be used in the case where the + USBDeviceTasks() function executes in the interrupt context (ex: + USB_INTERRUPT option selected in usb_config.h), but the firmware + wishes to take care of handling the data stage of the control transfer + in the main loop context. + + In this scenario, typical usage would be: + 1. Host starts a control transfer with OUT data stage. + 2. USBDeviceTasks() (in this scenario, interrupt context) executes. + 3. USBDeviceTasks() calls USBCBCheckOtherReq(), which in turn + determines that the control transfer is class specific, with + OUT data stage. + 4. The user code in USBCBCheckOtherReq() (also in interrupt context, + since it is called from USBDeviceTasks(), and therefore executes + at the same priority/context) calls USBDeferOUTDataStage(). + + 5. Meanwhile, in the main loop context, a polling handler may be + periodically checking if(USBOUTDataStageDeferred() == TRUE). + Ordinarily, it would evaluate false, but when a control transfer + becomes pending, and after the USBDeferOUTDataStage() macro has + been called (ex: in the interrupt context), the if() statement + will evaluate true. In this case, the main loop context can then + take care of receiving the data, by calling USBEP0Receive() and + USBCtrlEPAllowDataStage(). + + Description: + + Conditions: + + Input: + + Return: + + Remarks: + *****************************************************************************/ +BOOL USBOUTDataStageDeferred(void); +/*DOM-IGNORE-BEGIN*/ +#define USBOUTDataStageDeferred() USBDeferOUTDataStagePackets +/*DOM-IGNORE-END*/ + +/******************************************************************************* + Function: void USBDeferINDataStage(void); + + Summary: This function will cause the USB hardware to continuously NAK the + IN token packets sent from the host, during the data stage of a + device to host control transfer. This allows the firmware more time + to process and prepare the IN data packets that will eventually be + sent to the host. This is also useful, if the firmware needs to + process/prepare the IN data in a different context than what the + USBDeviceTasks() function executes at. + + Calling this function (macro) will assert ownership of the currently + pending control transfer. Therefore, the USB stack will not STALL + when it reaches the data stage of the control transfer, even if the + firmware has not (yet) called the USBEP0SendRAMPtr() or + USBEP0SendROMPtr() API function. However, the application firware + must still (eventually, once it is ready) call one of the + aforementioned API functions. + + Example Usage: + + 1. Host sends a SETUP packet to the device, requesting a device to + host control transfer, with data stage. + 2. USBDeviceTasks() executes, and then calls the USBCBCheckOtherReq() + callback event handler. The USBCBCheckOtherReq() calls the + application specific/device class specific handler that detects + the type of control transfer. + 3. If the firmware needs more time to prepare the first IN data packet, + or, if the firmware wishes to process the command in a different + context (ex: if USBDeviceTasks() executes as an interrupt handler, + but the IN data stage data needs to be prepared in the main loop + context), then it may call USBDeferINDataStage(), in the context + of the USBCBCheckOtherReq() handler function. + 4. If the firmware called USBDeferINDataStage() in step #3 above, + then the hardware will NAK the IN token packets sent by the + host, for the IN data stage. + 5. Once the firmware is ready, and has successfully prepared the + data to be sent to the host in fulfillment of the control + transfer, it should then call USBEP0SendRAMPtr() or + USBEP0SendROMPtr(), to prepare the USB stack to know how many + bytes to send to the host, and from what source location. + 6. The firmware should now call USBCtrlEPAllowDataStage(). This + will allow the data stage to complete. The USB stack will send + the data buffer specified by the USBEP0SendRAMPtr() or + USBEP0SendROMPtr() function, when it was called. + 7. Once all data has been sent to the host, or if the host performs + early termination, the status stage (a 0-byte OUT packet) will + complete automatically (assuming the firmware did not call + USBDeferStatusStage() during step #3). + + + Description: + + Conditions: Before calling USBDeferINDataStage(), the firmware should first + verify that the control transfer has a data stage, and that + it is of type device-to-host (IN). + + Input: + + Return: + + Remarks: Section 9.2.6 of the official USB 2.0 specifications indicates that + the USB device must return the first IN data packet within 500ms + of the start of the control transfer. In order to meet this + specification, the firmware must call USBEP0SendRAMPtr() or + USBEP0SendROMPtr(), and then call USBCtrlEPAllowDataStage(), in + less than 500ms from the start of the control transfer. + + If the firmware calls USBDeferINDataStage(), it must eventually call + USBEP0SendRAMPtr() or USBEP0SendROMPtr(), and then call + USBCtrlEPAllowDataStage(). If it does not do this, the control + transfer will never be able to complete. + + The firmware should never call both USBDeferINDataStage() and + USBDeferOUTDataStage() during the same control transfer. These + functions are mutually exclusive (a control transfer with data stage + can never contain both IN and OUT data packets during the data stage). + *****************************************************************************/ +void USBDeferINDataStage(void); +extern volatile BOOL USBDeferINDataStagePackets; +/*DOM-IGNORE-BEGIN*/ +#define USBDeferINDataStage() {USBDeferINDataStagePackets = TRUE; inPipes[0].info.bits.busy = 1;} +/*DOM-IGNORE-END*/ + + + +/******************************************************************************* + Function: BOOL USBINDataStageDeferred(void); + + Summary: Returns TRUE if a control transfer with IN data stage is pending, + and the firmware has called USBDeferINDataStage(), but has not + yet called USBCtrlEPAllowDataStage(). + Returns FALSE if a control transfer with IN data stage is either + not pending, or the firmware did not call USBDeferINDataStage() + at the start of the control transfer. + + This function (macro) would typically be used in the case where the + USBDeviceTasks() function executes in the interrupt context (ex: + USB_INTERRUPT option selected in usb_config.h), but the firmware + wishes to take care of handling the data stage of the control transfer + in the main loop context. + + In this scenario, typical usage would be: + 1. Host starts a control transfer with IN data stage. + 2. USBDeviceTasks() (in this scenario, interrupt context) executes. + 3. USBDeviceTasks() calls USBCBCheckOtherReq(), which in turn + determines that the control transfer is class specific, with + IN data stage. + 4. The user code in USBCBCheckOtherReq() (also in interrupt context, + since it is called from USBDeviceTasks(), and therefore executes + at the same priority/context) calls USBDeferINDataStage(). + + 5. Meanwhile, in the main loop context, a polling handler may be + periodically checking if(USBINDataStageDeferred() == TRUE). + Ordinarily, it would evaluate false, but when a control transfer + becomes pending, and after the USBDeferINDataStage() macro has + been called (ex: in the interrupt context), the if() statement + will evaluate true. In this case, the main loop context can then + take care of sending the data (when ready), by calling + USBEP0SendRAMPtr() or USBEP0SendROMPtr() and + USBCtrlEPAllowDataStage(). + + Description: + + Conditions: + + Input: + + Return: + + Remarks: + *****************************************************************************/ +BOOL USBINDataStageDeferred(void); +/*DOM-IGNORE-BEGIN*/ +#define USBINDataStageDeferred() USBDeferINDataStagePackets +/*DOM-IGNORE-END*/ + + + +/******************************************************************** + Function: + BOOL USBGetRemoteWakeupStatus(void) + + Summary: + This function indicates if remote wakeup has been enabled by the host. + Devices that support remote wakeup should use this function to + determine if it should send a remote wakeup. + + Description: + This function indicates if remote wakeup has been enabled by the host. + Devices that support remote wakeup should use this function to + determine if it should send a remote wakeup. + + If a device does not support remote wakeup (the Remote wakeup bit, bit + 5, of the bmAttributes field of the Configuration descriptor is set to + 1), then it should not send a remote wakeup command to the PC and this + function is not of any use to the device. If a device does support + remote wakeup then it should use this function as described below. + + If this function returns FALSE and the device is suspended, it should + not issue a remote wakeup (resume). + + If this function returns TRUE and the device is suspended, it should + issue a remote wakeup (resume). + + A device can add remote wakeup support by having the _RWU symbol added + in the configuration descriptor (located in the usb_descriptors.c file + in the project). This done in the 8th byte of the configuration + descriptor. For example: + + + ROM BYTE configDescriptor1[]={ + 0x09, // Size + USB_DESCRIPTOR_CONFIGURATION, // descriptor type + DESC_CONFIG_WORD(0x0022), // Total length + 1, // Number of interfaces + 1, // Index value of this cfg + 0, // Configuration string index + _DEFAULT | _SELF | _RWU, // Attributes, see usb_device.h + 50, // Max power consumption in 2X mA(100mA) + + //The rest of the configuration descriptor should follow + + + For more information about remote wakeup, see the following section of + the USB v2.0 specification available at www.usb.org: + * Section 9.2.5.2 + * Table 9-10 + * Section 7.1.7.7 + * Section 9.4.5 + + Conditions: + None + + Return Values: + TRUE - Remote Wakeup has been enabled by the host + FALSE - Remote Wakeup is not currently enabled + + Remarks: + None + + *******************************************************************/ +BOOL USBGetRemoteWakeupStatus(void); +/*DOM-IGNORE-BEGIN*/ +#define USBGetRemoteWakeupStatus() RemoteWakeup +/*DOM-IGNORE-END*/ + +/*************************************************************************** + Function: + USB_DEVICE_STATE USBGetDeviceState(void) + + Summary: + This function will return the current state of the device on the USB. + This function should return CONFIGURED_STATE before an application + tries to send information on the bus. + Description: + This function returns the current state of the device on the USB. This + \function is used to determine when the device is ready to communicate + on the bus. Applications should not try to send or receive data until + this function returns CONFIGURED_STATE. + + It is also important that applications yield as much time as possible + to the USBDeviceTasks() function as possible while the this function + \returns any value between ATTACHED_STATE through CONFIGURED_STATE. + + For more information about the various device states, please refer to + the USB specification section 9.1 available from www.usb.org. + + Typical usage: + + void main(void) + { + USBDeviceInit() + while(1) + { + USBDeviceTasks(); + if((USBGetDeviceState() \< CONFIGURED_STATE) || + (USBIsDeviceSuspended() == TRUE)) + { + //Either the device is not configured or we are suspended + // so we don't want to do execute any application code + continue; //go back to the top of the while loop + } + else + { + //Otherwise we are free to run user application code. + UserApplication(); + } + } + } + + Conditions: + None + Return Values: + USB_DEVICE_STATE - the current state of the device on the bus + + Remarks: + None + ***************************************************************************/ +USB_DEVICE_STATE USBGetDeviceState(void); +/*DOM-IGNORE-BEGIN*/ +#define USBGetDeviceState() USBDeviceState +/*DOM-IGNORE-END*/ + + + +/*************************************************************************** + Function: + BOOL USBGetSuspendState(void) + + Summary: + This function indicates if the USB port that this device is attached to is + currently suspended. When suspended, it will not be able to transfer data + over the bus. + Description: + This function indicates if the USB port that this device is attached to is + currently suspended. When suspended, it will not be able to transfer data + over the bus. + This function can be used by the application to skip over section of + code that do not need to exectute if the device is unable to send data + over the bus. This function can also be used to help determine when it is + legal to perform USB remote wakeup signalling, for devices supporting this + feature. + + Typical usage: + + void main(void) + { + USBDeviceInit() + while(1) + { + USBDeviceTasks(); + if((USBGetDeviceState() \< CONFIGURED_STATE) || + (USBGetSuspendState() == TRUE)) + { + //Either the device is not configured or we are suspended + // so we don't want to do execute any application code + continue; //go back to the top of the while loop + } + else + { + //Otherwise we are free to run user application code. + UserApplication(); + } + } + } + + Conditions: + None + Return Values: + TRUE - the USB port this device is attached to is suspended. + FALSE - the USB port this device is attached to is not suspended. + Remarks: + This function is the same as USBIsBusSuspended(). + ***************************************************************************/ +BOOL USBGetSuspendState(void); +/*DOM-IGNORE-BEGIN*/ +#define USBGetSuspendState() USBBusIsSuspended +/*DOM-IGNORE-END*/ + +/******************************************************************************* + Function: + BOOL USBIsDeviceSuspended(void) + + Summary: + This function indicates if the USB module is in suspend mode. + + Description: + This function indicates if the USB module is in suspend mode. This function + does NOT indicate that a suspend request has been received. It only + reflects the state of the USB module. + + Typical Usage: + + if(USBIsDeviceSuspended() == TRUE) + { + return; + } + // otherwise do some application specific tasks + + + Conditions: + None + Input: + None + Return: + None + Remarks: + None + *****************************************************************************/ +BOOL USBIsDeviceSuspended(void); +/*DOM-IGNORE-BEGIN*/ +#define USBIsDeviceSuspended() USBSuspendControl +/*DOM-IGNORE-END*/ + + +/******************************************************************************* + Function: + BOOL USBIsBusSuspended(void); + + Summary: + This function indicates if the USB bus is in suspend mode. + + Description: + This function indicates if the USB bus is in suspend mode. This function + is typically used for checking if the conditions are consistent with + performing a USB remote wakeup sequence. + + Typical Usage: + + if((USBIsBusSuspended() == TRUE) && (USBGetRemoteWakeupStatus() == TRUE)) + { + //Check if some stimulus occured, which will be used as the wakeup source + if(sw3 == 0) + { + USBCBSendResume(); //Send the remote wakeup signalling to the host + } + } + // otherwise do some other application specific tasks + + + Conditions: + None + Input: + None + Return: + None + Remarks: + The USBIsBusSuspended() function relies on the USBBusIsSuspended boolean + variable, which gets updated by the USBDeviceTasks() function. Therefore, + in order to be sure the return value is not "stale", it is suggested to make + sure USBDeviceTasks() has executed recently (if using USB polling mode). + *****************************************************************************/ +BOOL USBIsBusSuspended(void); +/*DOM-IGNORE-BEGIN*/ +#define USBIsBusSuspended() USBBusIsSuspended +/*DOM-IGNORE-END*/ + +/******************************************************************************* + Function: + void USBSoftDetach(void); + + Summary: + This function performs a detach from the USB bus via software. + + Description: + This function performs a detach from the USB bus via software. + + Conditions: + None + Input: + None + Return: + None + Remarks: + Caution should be used when detaching from the bus. Some PC drivers and + programs may require additional time after a detach before a device can be + reattached to the bus. + *****************************************************************************/ +void USBSoftDetach(void); +/*DOM-IGNORE-BEGIN*/ +#define USBSoftDetach() U1CON = 0; U1IE = 0; USBDeviceState = DETACHED_STATE; +/*DOM-IGNORE-END*/ + + +/************************************************************************* + Function: + BOOL USBHandleBusy(USB_HANDLE handle) + + Summary: + Checks to see if the input handle is busy + + Description: + Checks to see if the input handle is busy + + Typical Usage + + //make sure that the last transfer isn't busy by checking the handle + if(!USBHandleBusy(USBGenericInHandle)) + { + //Send the data contained in the INPacket[] array out on + // endpoint USBGEN_EP_NUM + USBGenericInHandle = USBGenWrite(USBGEN_EP_NUM,(BYTE*)&INPacket[0],sizeof(INPacket)); + } + + + Conditions: + None + Input: + USB_HANDLE handle - handle of the transfer that you want to check the + status of + Return Values: + TRUE - The specified handle is busy + FALSE - The specified handle is free and available for a transfer + Remarks: + None + *************************************************************************/ +BOOL USBHandleBusy(USB_HANDLE handle); +/*DOM-IGNORE-BEGIN*/ +#define USBHandleBusy(handle) (handle==0?0:((volatile BDT_ENTRY*)handle)->STAT.UOWN) +/*DOM-IGNORE-END*/ + +/******************************************************************** + Function: + WORD USBHandleGetLength(USB_HANDLE handle) + + Summary: + Retrieves the length of the destination buffer of the input + handle + + Description: + Retrieves the length of the destination buffer of the input + handle + + PreCondition: + None + + Parameters: + USB_HANDLE handle - the handle to the transfer you want the + address for. + + Return Values: + WORD - length of the current buffer that the input handle + points to. If the transfer is complete then this is the + length of the data transmitted or the length of data + actually received. + + Remarks: + None + + *******************************************************************/ +WORD USBHandleGetLength(USB_HANDLE handle); +/*DOM-IGNORE-BEGIN*/ +#define USBHandleGetLength(handle) (((volatile BDT_ENTRY*)handle)->CNT) +/*DOM-IGNORE-END*/ + +/******************************************************************** + Function: + WORD USBHandleGetAddr(USB_HANDLE) + + Summary: + Retrieves the address of the destination buffer of the input + handle + + Description: + Retrieves the address of the destination buffer of the input + handle + + PreCondition: + None + + Parameters: + USB_HANDLE handle - the handle to the transfer you want the + address for. + + Return Values: + WORD - address of the current buffer that the input handle + points to. + + Remarks: + None + + *******************************************************************/ +WORD USBHandleGetAddr(USB_HANDLE); +/*DOM-IGNORE-BEGIN*/ +#define USBHandleGetAddr(handle) ConvertToVirtualAddress((((volatile BDT_ENTRY*)handle)->ADR)) +/*DOM-IGNORE-END*/ + + +/******************************************************************** + Function: + USB_HANDLE USBGetNextHandle(BYTE ep_num, BYTE ep_dir) + Summary: + Retrieves the handle to the next endpoint BDT entry that the + USBTransferOnePacket() will use. + Description: + Retrieves the handle to the next endpoint BDT that the + USBTransferOnePacket() will use. Useful for initialization and when + ping pong buffering will be used on application endpoints. + PreCondition: + Will return NULL if the USB device has not yet been configured/the + endpoint specified has not yet been initalized by USBEnableEndpoint(). + Parameters: + BYTE ep_num - The endpoint number to get the handle for (valid + values are 1-15, 0 is not a valid input value for this API) + BYTE ep_dir - The endpoint direction associated with the endpoint number + to get the handle for (valid values are OUT_FROM_HOST and IN_TO_HOST). + Return Values: + USB_HANDLE - Returns the USB_HANDLE (a pointer) to the BDT that will be + used next time the USBTransferOnePacket() function is called, for the + given ep_num and ep_dir + Remarks: + This API is useful for initializing USB_HANDLEs during initialization of + the application firmware. It is also useful when ping-pong bufferring is + enabled, and the application firmware wishes to arm both the even and odd + BDTs for an endpoint simultaneously. In this case, the application + firmware for sending data to the host would typically be something like + follows: + + + USB_HANDLE Handle1; + USB_HANDLE Handle2; + USB_HANDLE* pHandle = &Handle1; + BYTE UserDataBuffer1[64]; + BYTE UserDataBuffer2[64]; + BYTE* pDataBuffer = &UserDataBuffer1[0]; + + //Add some code that loads UserDataBuffer1[] with useful data to send, + //using the pDataBuffer pointer, for example: + //for(i = 0; i < 64; i++) + //{ + // *pDataBuffer++ = [useful data value]; + //} + + //Check if the next USB endpoint BDT is available + if(!USBHandleBusy(USBGetNextHandle(ep_num, IN_TO_HOST)) + { + //The endpoint is available. Send the data. + *pHandle = USBTransferOnePacket(ep_num, ep_dir, pDataBuffer, bytecount); + //Toggle the handle and buffer pointer for the next transaction + if(pHandle == &Handle1) + { + pHandle = &Handle2; + pDataBuffer = &UserDataBuffer2[0]; + } + else + { + pHandle = &Handle1; + pDataBuffer = &UserDataBuffer1[0]; + } + } + + //The firmware can then load the next data buffer (in this case + //UserDataBuffer2)with useful data, and send it using the same + //process. For example: + + //Add some code that loads UserDataBuffer2[] with useful data to send, + //using the pDataBuffer pointer, for example: + //for(i = 0; i < 64; i++) + //{ + // *pDataBuffer++ = [useful data value]; + //} + + //Check if the next USB endpoint BDT is available + if(!USBHandleBusy(USBGetNextHandle(ep_num, IN_TO_HOST)) + { + //The endpoint is available. Send the data. + *pHandle = USBTransferOnePacket(ep_num, ep_dir, pDataBuffer, bytecount); + //Toggle the handle and buffer pointer for the next transaction + if(pHandle == &Handle1) + { + pHandle = &Handle2; + pDataBuffer = &UserDataBuffer2[0]; + } + else + { + pHandle = &Handle1; + pDataBuffer = &UserDataBuffer1[0]; + } + } + + + *******************************************************************/ +USB_HANDLE USBGetNextHandle(BYTE ep_num, BYTE ep_dir); +/*DOM-IGNORE-BEGIN*/ +#define USBGetNextHandle(ep_num, ep_dir) ((ep_dir == OUT_FROM_HOST)?((USB_HANDLE)pBDTEntryOut[ep_num]):((USB_HANDLE)pBDTEntryIn[ep_num])) +/*DOM-IGNORE-END*/ + +/******************************************************************** + Function: + void USBEP0Transmit(BYTE options) + + Summary: + Sets the address of the data to send over the + control endpoint + + PreCondition: + None + + Paramters: + options - the various options that you want + when sending the control data. Options are: + USB_EP0_ROM + USB_EP0_RAM + USB_EP0_BUSY + USB_EP0_INCLUDE_ZERO + USB_EP0_NO_DATA + USB_EP0_NO_OPTIONS + + Return Values: + None + + Remarks: + None + + *******************************************************************/ +void USBEP0Transmit(BYTE options); +/*DOM-IGNORE-BEGIN*/ +#define USBEP0Transmit(options) inPipes[0].info.Val = options | USB_EP0_BUSY +/*DOM-IGNORE-END*/ + +/************************************************************************* + Function: + void USBEP0SendRAMPtr(BYTE* src, WORD size, BYTE Options) + + Summary: + Sets the source, size, and options of the data you wish to send from a + RAM source + Conditions: + None + Input: + src - address of the data to send + size - the size of the data needing to be transmitted + options - the various options that you want when sending the control + data. Options are\: + * USB_EP0_ROM + * USB_EP0_RAM + * USB_EP0_BUSY + * USB_EP0_INCLUDE_ZERO + * USB_EP0_NO_DATA + * USB_EP0_NO_OPTIONS + Remarks: + None + *************************************************************************/ +void USBEP0SendRAMPtr(BYTE* src, WORD size, BYTE Options); +/*DOM-IGNORE-BEGIN*/ +#define USBEP0SendRAMPtr(src,size,options) {\ + inPipes[0].pSrc.bRam = src;\ + inPipes[0].wCount.Val = size;\ + inPipes[0].info.Val = options | USB_EP0_BUSY | USB_EP0_RAM;\ + } +/*DOM-IGNORE-END*/ + +/************************************************************************** + Function: + void USBEP0SendROMPtr(BYTE* src, WORD size, BYTE Options) + + Summary: + Sets the source, size, and options of the data you wish to send from a + ROM source + Conditions: + None + Input: + src - address of the data to send + size - the size of the data needing to be transmitted + options - the various options that you want when sending the control + data. Options are\: + * USB_EP0_ROM + * USB_EP0_RAM + * USB_EP0_BUSY + * USB_EP0_INCLUDE_ZERO + * USB_EP0_NO_DATA + * USB_EP0_NO_OPTIONS + Remarks: + None + **************************************************************************/ +void USBEP0SendROMPtr(BYTE* src, WORD size, BYTE Options); +/*DOM-IGNORE-BEGIN*/ +#define USBEP0SendROMPtr(src,size,options) {\ + inPipes[0].pSrc.bRom = src;\ + inPipes[0].wCount.Val = size;\ + inPipes[0].info.Val = options | USB_EP0_BUSY | USB_EP0_ROM;\ + } +/*DOM-IGNORE-END*/ + +/*************************************************************************** + Function: + void USBEP0Receive(BYTE* dest, WORD size, void (*function)) + Summary: + Sets the destination, size, and a function to call on the completion of + the next control write. + Conditions: + None + Input: + dest - address of where the incoming data will go (make sure that this + address is directly accessable by the USB module for parts with + dedicated USB RAM this address must be in that space) + size - the size of the data being received (is almost always going tobe + presented by the preceeding setup packet SetupPkt.wLength) + (*function) - a function that you want called once the data is received. If + this is specificed as NULL then no function is called. + Remarks: + None + ***************************************************************************/ +void USBEP0Receive(BYTE* dest, WORD size, void (*function)); +/*DOM-IGNORE-BEGIN*/ +#define USBEP0Receive(dest,size,function) {outPipes[0].pDst.bRam = dest;outPipes[0].wCount.Val = size;outPipes[0].pFunc = function;outPipes[0].info.bits.busy = 1; } +/*DOM-IGNORE-END*/ + +/******************************************************************** + Function: + USB_HANDLE USBTxOnePacket(BYTE ep, BYTE* data, WORD len) + + Summary: + Sends the specified data out the specified endpoint + + PreCondition: + None + + Parameters: + ep - the endpoint number you want to send the data out of + data - pointer to a user buffer that contains the data that you wish to + send to the host. Note: This RAM buffer must be accessible by + the USB module. + len - the number of bytes of data that you wish to send to the host, + in the next transaction on this endpoint. Note: this value + should always be less than or equal to the endpoint size, as + specified in the USB endpoint descriptor. + + Return Values: + USB_HANDLE - Returns a pointer to the BDT entry associated with the + transaction. The firmware can check for completion + of the transaction by using the USBHandleBusy() function, + using the returned USB_HANDLE value. + + Remarks: + None + + *******************************************************************/ +USB_HANDLE USBTxOnePacket(BYTE ep, BYTE* data, WORD len); +/*DOM-IGNORE-BEGIN*/ +#define USBTxOnePacket(ep,data,len) USBTransferOnePacket(ep,IN_TO_HOST,data,len) +/*DOM-IGNORE-END*/ + +/******************************************************************** + Function: + USB_HANDLE USBRxOnePacket(BYTE ep, BYTE* data, WORD len) + + Summary: + Receives the specified data out the specified endpoint + + PreCondition: + None + + Parameters: + ep - The endpoint number you want to receive the data on. + data - Pointer to a user buffer where the data will go when + it arrives from the host. Note: This RAM must be USB module + accessible. + len - The len parameter should always be set to the maximum endpoint packet + size, specified in the USB descriptor for this endpoint. The host + may send <= the number of bytes as the endpoint size in the endpoint + descriptor. After the transaction is complete, the application + firmware can call USBHandleGetLength() to determine how many bytes + the host actually sent in the last transaction on this endpoint. + + Return Values: + USB_HANDLE - Returns a pointer to the BDT entry associated with the + transaction. The firmware can check for completion + of the transaction by using the USBHandleBusy() function, + using the returned USB_HANDLE value. + + Remarks: + None + + *******************************************************************/ +USB_HANDLE USBRxOnePacket(BYTE ep, BYTE* data, WORD len); +/*DOM-IGNORE-BEGIN*/ +#define USBRxOnePacket(ep,data,len) USBTransferOnePacket(ep,OUT_FROM_HOST,data,len) +/*DOM-IGNORE-END*/ + +/******************************************************************************* + Function: + BOOL USB_APPLICATION_EVENT_HANDLER(BYTE address, USB_EVENT event, void *pdata, WORD size); + + Summary: + This function is called whenever the USB stack wants to notify the user of + an event. + + Description: + This function is called whenever the USB stack wants to notify the user of + an event. This function should be implemented by the user. + + Example Usage: + Conditions: + None + + Input: + BYTE address - the address of the device when the event happened + BYTE event - The event input specifies which event happened. The + possible options are listed in the USB_DEVICE_STACK_EVENTS + enumeration. + + Return: + None + Remarks: + None + *****************************************************************************/ +BOOL USB_APPLICATION_EVENT_HANDLER(BYTE address, USB_EVENT event, void *pdata, WORD size); + +/******************************************************************************* + Function: + ROM void *USBDeviceCBGetDescriptor (UINT16 *length, DESCRIPTOR_ID *id); + + Summary: + This function is called whenever the USB stack gets a USB GET_DESCRIPTOR + request. + + Description: + This function is called whenever the USB stack gets a USB GET_DESCRIPTOR + request. This function is responsible for returning a pointer to the + requested descriptor and setting that the length for the that descriptor. + + This function should be implemented by the user. This function might be + generated automatically by the USB configuration tool. + + Conditions: + None + + Input: + BYTE *length - pointer to a variable that should be set to the length of + the requested descriptor. + BYTE *id - This structure contains information about the requested + descriptor + + Return: + ROM void* - pointer to the requested descriptor. + Remarks: + None + *****************************************************************************/ +void *USBDeviceCBGetDescriptor ( UINT16 *length, + UINT8 *ptr_type, + DESCRIPTOR_ID *id); + + + +/** Section: MACROS ******************************************************/ + +/* The DESC_CONFIG_WORD() macro is implemented for convinence. Since the + configuration descriptor array is a BYTE array, each entry needs to be a + BYTE in LSB format. The DESC_CONFIG_WORD() macro breaks up a WORD into + the appropriate BYTE entries in LSB. + Typical Usage: + + ROM BYTE configDescriptor1[]={ + 0x09, // Size of this descriptor in bytes + USB_DESCRIPTOR_CONFIGURATION, // CONFIGURATION descriptor type + DESC_CONFIG_WORD(0x0022), // Total length of data for this cfg + +*/ +#define DESC_CONFIG_WORD(a) (a&0xFF),((a>>8)&0xFF) + +/* The DESC_CONFIG_DWORD() macro is implemented for convinence. Since the + configuration descriptor array is a BYTE array, each entry needs to be a + BYTE in LSB format. The DESC_CONFIG_DWORD() macro breaks up a DWORD into + the appropriate BYTE entries in LSB. +*/ +#define DESC_CONFIG_DWORD(a) (a&0xFF),((a>>8)&0xFF),((a>>16)&0xFF),((a>>24)&0xFF) + +/* The DESC_CONFIG_BYTE() macro is implemented for convinence. The + DESC_CONFIG_BYTE() macro provides a consistant macro for use with a byte + when generating a configuratin descriptor when using either the + DESC_CONFIG_WORD() or DESC_CONFIG_DWORD() macros. +*/ +#define DESC_CONFIG_BYTE(a) (a) + + + + + + + + + + + + + + + + +/* DOM-IGNORE-BEGIN */ +/******************************************************************************* +******************************************************************************** +******************************************************************************** + This section contains implementation specific information that may vary + between releases as the implementation needs to change. This section is + included for compilation reasons only. +******************************************************************************** +******************************************************************************** +*******************************************************************************/ + +#if defined(USB_POLLING) + #define USB_VOLATILE +#else + #define USB_VOLATILE volatile +#endif + +#define CTRL_TRF_RETURN void +#define CTRL_TRF_PARAMS void + +// Defintion of the PIPE structure +// This structure is used to keep track of data that is sent out +// of the stack automatically. +typedef struct __attribute__ ((packed)) +{ + union __attribute__ ((packed)) + { + //Various options of pointers that are available to + // get the data from + BYTE *bRam; + ROM BYTE *bRom; + WORD *wRam; + ROM WORD *wRom; + }pSrc; + union __attribute__ ((packed)) + { + struct __attribute__ ((packed)) + { + //is this transfer from RAM or ROM? + BYTE ctrl_trf_mem :1; + BYTE reserved :5; + //include a zero length packet after + //data is done if data_size%ep_size = 0? + BYTE includeZero :1; + //is this PIPE currently in use + BYTE busy :1; + }bits; + BYTE Val; + }info; + WORD_VAL __attribute__((aligned)) wCount; +}IN_PIPE; + +extern USB_VOLATILE IN_PIPE inPipes[]; + +typedef struct __attribute__ ((packed)) +{ + union __attribute__ ((packed)) + { + //Various options of pointers that are available to + // get the data from + BYTE *bRam; + WORD *wRam; + }pDst; + union __attribute__ ((packed)) + { + struct __attribute__ ((packed)) + { + BYTE reserved :7; + //is this PIPE currently in use + BYTE busy :1; + }bits; + BYTE Val; + }info; + WORD_VAL wCount; + CTRL_TRF_RETURN (*pFunc)(CTRL_TRF_PARAMS); +}OUT_PIPE; + +/************* DWF - SHOULD BE REIMPLEMENTED AS AN EVENT *******************/ +//#if defined(ENABLE_EP0_DATA_RECEIVED_CALLBACK) +// void USBCBEP0DataReceived(void); +// #define USBCB_EP0_DATA_RECEIVED() USBCBEP0DataReceived() +//#else +// #define USBCB_EP0_DATA_RECEIVED() +//#endif + +extern USB_VOLATILE BOOL RemoteWakeup; +extern USB_VOLATILE BOOL USBBusIsSuspended; +extern USB_VOLATILE USB_DEVICE_STATE USBDeviceState; +extern USB_VOLATILE BYTE USBActiveConfiguration; +/******************************************************************************/ +/* DOM-IGNORE-END */ + +#endif //USBD_H diff --git a/software/front/US_BootLoader.X/usb/usb_device_local.h b/software/front/US_BootLoader.X/usb/usb_device_local.h new file mode 100644 index 0000000..a9bed48 --- /dev/null +++ b/software/front/US_BootLoader.X/usb/usb_device_local.h @@ -0,0 +1,490 @@ +/******************************************************************** + File Information: + FileName: usb_device_local.h + Dependencies: See INCLUDES section + Processor: PIC18,PIC24, PIC32 and dsPIC33E USB Microcontrollers + Hardware: The code is natively intended to be used on the following + hardware platforms: PICDEM� FS USB Demo Board, + PIC18F87J50 FS USB Plug-In Module, or + Explorer 16 + compatible USB PIM. The firmware may be + modified for use on other USB platforms by editing the + HardwareProfile.h file. + Complier: Microchip C18 (for PIC18),C30 (for PIC24 and dsPIC33E) + and C32 (for PIC32) + Company: Microchip Technology, Inc. + + Software License Agreement: + + The software supplied herewith by Microchip Technology Incorporated + (the �Company�) for its PIC� Microcontroller is intended and + supplied to you, the Company�s customer, for use solely and + exclusively on Microchip PIC Microcontroller products. The + software is owned by the Company and/or its supplier, and is + protected under applicable copyright laws. All rights are reserved. + Any use in violation of the foregoing restrictions may subject the + user to criminal sanctions under applicable laws, as well as to + civil liability for the breach of the terms and conditions of this + license. + + THIS SOFTWARE IS PROVIDED IN AN �AS IS� CONDITION. NO WARRANTIES, + WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED + TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT, + IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR + CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. + + Summary: + This file contains functions, macros, definitions, variables, + datatypes, etc. that are required for usage with the MCHPFSUSB device + stack. This file should be included in projects that use the device stack. + + This file is located in the "\\\Microchip\\USB" + directory. + + Description: + USB Device Stack File + + This file contains functions, macros, definitions, variables, + datatypes, etc. that are required for usage with the MCHPFSUSB device + stack. This file should be included in projects that use the device stack. + + This file is located in the "\\\Microchip\\USB" + directory. + + When including this file in a new project, this file can either be + referenced from the directory in which it was installed or copied + directly into the user application folder. If the first method is + chosen to keep the file located in the folder in which it is installed + then include paths need to be added so that the library and the + application both know where to reference each others files. If the + application folder is located in the same folder as the Microchip + folder (like the current demo folders), then the following include + paths need to be added to the application's project: + + . + ..\\..\\MicrochipInclude + + If a different directory structure is used, modify the paths as + required. An example using absolute paths instead of relative paths + would be the following: + + C:\\Microchip Solutions\\Microchip\\Include + + C:\\Microchip Solutions\\My Demo Application + +******************************************************************** + File Description: + + Change History: + Rev Description + ---- ----------- + 2.8 Initial revision. Contents extracted from the previous usb_device.c + file, so as to make the usb_device.c file less cluttered. + Fixed BD() and EP() macro computation error, when running in + USB_PING_PONG__EP0_OUT_ONLY mode. + 2.9 No functional change. Fixed spelling typo in the name of + "USB_TRANSFER_COMPLETE_HANDLER()" +********************************************************************/ +#include "usb_config.h" + +/* Short Packet States - Used by Control Transfer Read - CTRL_TRF_TX */ +#define SHORT_PKT_NOT_USED 0 +#define SHORT_PKT_PENDING 1 +#define SHORT_PKT_SENT 2 + +/* Control Transfer States */ +#define WAIT_SETUP 0 +#define CTRL_TRF_TX 1 +#define CTRL_TRF_RX 2 + + +typedef union +{ + struct + { + unsigned char ping_pong_state :1; + unsigned char transfer_terminated :1; + } bits; + BYTE Val; +} EP_STATUS; + +#if (USB_PING_PONG_MODE == USB_PING_PONG__NO_PING_PONG) + #define USB_NEXT_EP0_OUT_PING_PONG 0x0000 // Used in USB Device Mode only + #define USB_NEXT_EP0_IN_PING_PONG 0x0000 // Used in USB Device Mode only + #define USB_NEXT_PING_PONG 0x0000 // Used in USB Device Mode only + #define EP0_OUT_EVEN 0 // Used in USB Device Mode only + #define EP0_OUT_ODD 0 // Used in USB Device Mode only + #define EP0_IN_EVEN 1 // Used in USB Device Mode only + #define EP0_IN_ODD 1 // Used in USB Device Mode only + #define EP1_OUT_EVEN 2 // Used in USB Device Mode only + #define EP1_OUT_ODD 2 // Used in USB Device Mode only + #define EP1_IN_EVEN 3 // Used in USB Device Mode only + #define EP1_IN_ODD 3 // Used in USB Device Mode only + #define EP2_OUT_EVEN 4 // Used in USB Device Mode only + #define EP2_OUT_ODD 4 // Used in USB Device Mode only + #define EP2_IN_EVEN 5 // Used in USB Device Mode only + #define EP2_IN_ODD 5 // Used in USB Device Mode only + #define EP3_OUT_EVEN 6 // Used in USB Device Mode only + #define EP3_OUT_ODD 6 // Used in USB Device Mode only + #define EP3_IN_EVEN 7 // Used in USB Device Mode only + #define EP3_IN_ODD 7 // Used in USB Device Mode only + #define EP4_OUT_EVEN 8 // Used in USB Device Mode only + #define EP4_OUT_ODD 8 // Used in USB Device Mode only + #define EP4_IN_EVEN 9 // Used in USB Device Mode only + #define EP4_IN_ODD 9 // Used in USB Device Mode only + #define EP5_OUT_EVEN 10 // Used in USB Device Mode only + #define EP5_OUT_ODD 10 // Used in USB Device Mode only + #define EP5_IN_EVEN 11 // Used in USB Device Mode only + #define EP5_IN_ODD 11 // Used in USB Device Mode only + #define EP6_OUT_EVEN 12 // Used in USB Device Mode only + #define EP6_OUT_ODD 12 // Used in USB Device Mode only + #define EP6_IN_EVEN 13 // Used in USB Device Mode only + #define EP6_IN_ODD 13 // Used in USB Device Mode only + #define EP7_OUT_EVEN 14 // Used in USB Device Mode only + #define EP7_OUT_ODD 14 // Used in USB Device Mode only + #define EP7_IN_EVEN 15 // Used in USB Device Mode only + #define EP7_IN_ODD 15 // Used in USB Device Mode only + #define EP8_OUT_EVEN 16 // Used in USB Device Mode only + #define EP8_OUT_ODD 16 // Used in USB Device Mode only + #define EP8_IN_EVEN 17 // Used in USB Device Mode only + #define EP8_IN_ODD 17 // Used in USB Device Mode only + #define EP9_OUT_EVEN 18 // Used in USB Device Mode only + #define EP9_OUT_ODD 18 // Used in USB Device Mode only + #define EP9_IN_EVEN 19 // Used in USB Device Mode only + #define EP9_IN_ODD 19 // Used in USB Device Mode only + #define EP10_OUT_EVEN 20 // Used in USB Device Mode only + #define EP10_OUT_ODD 20 // Used in USB Device Mode only + #define EP10_IN_EVEN 21 // Used in USB Device Mode only + #define EP10_IN_ODD 21 // Used in USB Device Mode only + #define EP11_OUT_EVEN 22 // Used in USB Device Mode only + #define EP11_OUT_ODD 22 // Used in USB Device Mode only + #define EP11_IN_EVEN 23 // Used in USB Device Mode only + #define EP11_IN_ODD 23 // Used in USB Device Mode only + #define EP12_OUT_EVEN 24 // Used in USB Device Mode only + #define EP12_OUT_ODD 24 // Used in USB Device Mode only + #define EP12_IN_EVEN 25 // Used in USB Device Mode only + #define EP12_IN_ODD 25 // Used in USB Device Mode only + #define EP13_OUT_EVEN 26 // Used in USB Device Mode only + #define EP13_OUT_ODD 26 // Used in USB Device Mode only + #define EP13_IN_EVEN 27 // Used in USB Device Mode only + #define EP13_IN_ODD 27 // Used in USB Device Mode only + #define EP14_OUT_EVEN 28 // Used in USB Device Mode only + #define EP14_OUT_ODD 28 // Used in USB Device Mode only + #define EP14_IN_EVEN 29 // Used in USB Device Mode only + #define EP14_IN_ODD 29 // Used in USB Device Mode only + #define EP15_OUT_EVEN 30 // Used in USB Device Mode only + #define EP15_OUT_ODD 30 // Used in USB Device Mode only + #define EP15_IN_EVEN 31 // Used in USB Device Mode only + #define EP15_IN_ODD 31 // Used in USB Device Mode only + + #define EP(ep,dir,pp) (2*ep+dir) // Used in USB Device Mode only + #define BD(ep,dir,pp) ((8 * ep) + (4 * dir)) // Used in USB Device Mode only + +#elif (USB_PING_PONG_MODE == USB_PING_PONG__EP0_OUT_ONLY) + #define USB_NEXT_EP0_OUT_PING_PONG 0x0004 + #define USB_NEXT_EP0_IN_PING_PONG 0x0000 + #define USB_NEXT_PING_PONG 0x0000 + #define EP0_OUT_EVEN 0 + #define EP0_OUT_ODD 1 + #define EP0_IN_EVEN 2 + #define EP0_IN_ODD 2 + #define EP1_OUT_EVEN 3 + #define EP1_OUT_ODD 3 + #define EP1_IN_EVEN 4 + #define EP1_IN_ODD 4 + #define EP2_OUT_EVEN 5 + #define EP2_OUT_ODD 5 + #define EP2_IN_EVEN 6 + #define EP2_IN_ODD 6 + #define EP3_OUT_EVEN 7 + #define EP3_OUT_ODD 7 + #define EP3_IN_EVEN 8 + #define EP3_IN_ODD 8 + #define EP4_OUT_EVEN 9 + #define EP4_OUT_ODD 9 + #define EP4_IN_EVEN 10 + #define EP4_IN_ODD 10 + #define EP5_OUT_EVEN 11 + #define EP5_OUT_ODD 11 + #define EP5_IN_EVEN 12 + #define EP5_IN_ODD 12 + #define EP6_OUT_EVEN 13 + #define EP6_OUT_ODD 13 + #define EP6_IN_EVEN 14 + #define EP6_IN_ODD 14 + #define EP7_OUT_EVEN 15 + #define EP7_OUT_ODD 15 + #define EP7_IN_EVEN 16 + #define EP7_IN_ODD 16 + #define EP8_OUT_EVEN 17 + #define EP8_OUT_ODD 17 + #define EP8_IN_EVEN 18 + #define EP8_IN_ODD 18 + #define EP9_OUT_EVEN 19 + #define EP9_OUT_ODD 19 + #define EP9_IN_EVEN 20 + #define EP9_IN_ODD 20 + #define EP10_OUT_EVEN 21 + #define EP10_OUT_ODD 21 + #define EP10_IN_EVEN 22 + #define EP10_IN_ODD 22 + #define EP11_OUT_EVEN 23 + #define EP11_OUT_ODD 23 + #define EP11_IN_EVEN 24 + #define EP11_IN_ODD 24 + #define EP12_OUT_EVEN 25 + #define EP12_OUT_ODD 25 + #define EP12_IN_EVEN 26 + #define EP12_IN_ODD 26 + #define EP13_OUT_EVEN 27 + #define EP13_OUT_ODD 27 + #define EP13_IN_EVEN 28 + #define EP13_IN_ODD 28 + #define EP14_OUT_EVEN 29 + #define EP14_OUT_ODD 29 + #define EP14_IN_EVEN 30 + #define EP14_IN_ODD 30 + #define EP15_OUT_EVEN 31 + #define EP15_OUT_ODD 31 + #define EP15_IN_EVEN 32 + #define EP15_IN_ODD 32 + + #define EP(ep,dir,pp) (2u*ep+dir+(((ep==0)&&(dir==0))?pp:1)) + #define BD(ep,dir,pp) (4u*((2u*ep)+dir+(((ep==0)&&(dir==0))?pp:1))) + +#elif (USB_PING_PONG_MODE == USB_PING_PONG__FULL_PING_PONG) +#if defined (__18CXX) || defined(__C30__) || defined __XC16__ || defined(__XC8) + #if (defined (__dsPIC33E__) || defined (__PIC24E__)) + #define USB_NEXT_EP0_OUT_PING_PONG 0x0008 + #define USB_NEXT_EP0_IN_PING_PONG 0x0008 + #define USB_NEXT_PING_PONG 0x0008 + #else + #define USB_NEXT_EP0_OUT_PING_PONG 0x0004 + #define USB_NEXT_EP0_IN_PING_PONG 0x0004 + #define USB_NEXT_PING_PONG 0x0004 + #endif + #elif defined(__C32__) + #define USB_NEXT_EP0_OUT_PING_PONG 0x0008 + #define USB_NEXT_EP0_IN_PING_PONG 0x0008 + #define USB_NEXT_PING_PONG 0x0008 + #else + #error "Not defined for this compiler" + #endif + #define EP0_OUT_EVEN 0 + #define EP0_OUT_ODD 1 + #define EP0_IN_EVEN 2 + #define EP0_IN_ODD 3 + #define EP1_OUT_EVEN 4 + #define EP1_OUT_ODD 5 + #define EP1_IN_EVEN 6 + #define EP1_IN_ODD 7 + #define EP2_OUT_EVEN 8 + #define EP2_OUT_ODD 9 + #define EP2_IN_EVEN 10 + #define EP2_IN_ODD 11 + #define EP3_OUT_EVEN 12 + #define EP3_OUT_ODD 13 + #define EP3_IN_EVEN 14 + #define EP3_IN_ODD 15 + #define EP4_OUT_EVEN 16 + #define EP4_OUT_ODD 17 + #define EP4_IN_EVEN 18 + #define EP4_IN_ODD 19 + #define EP5_OUT_EVEN 20 + #define EP5_OUT_ODD 21 + #define EP5_IN_EVEN 22 + #define EP5_IN_ODD 23 + #define EP6_OUT_EVEN 24 + #define EP6_OUT_ODD 25 + #define EP6_IN_EVEN 26 + #define EP6_IN_ODD 27 + #define EP7_OUT_EVEN 28 + #define EP7_OUT_ODD 29 + #define EP7_IN_EVEN 30 + #define EP7_IN_ODD 31 + #define EP8_OUT_EVEN 32 + #define EP8_OUT_ODD 33 + #define EP8_IN_EVEN 34 + #define EP8_IN_ODD 35 + #define EP9_OUT_EVEN 36 + #define EP9_OUT_ODD 37 + #define EP9_IN_EVEN 38 + #define EP9_IN_ODD 39 + #define EP10_OUT_EVEN 40 + #define EP10_OUT_ODD 41 + #define EP10_IN_EVEN 42 + #define EP10_IN_ODD 43 + #define EP11_OUT_EVEN 44 + #define EP11_OUT_ODD 45 + #define EP11_IN_EVEN 46 + #define EP11_IN_ODD 47 + #define EP12_OUT_EVEN 48 + #define EP12_OUT_ODD 49 + #define EP12_IN_EVEN 50 + #define EP12_IN_ODD 51 + #define EP13_OUT_EVEN 52 + #define EP13_OUT_ODD 53 + #define EP13_IN_EVEN 54 + #define EP13_IN_ODD 55 + #define EP14_OUT_EVEN 56 + #define EP14_OUT_ODD 57 + #define EP14_IN_EVEN 58 + #define EP14_IN_ODD 59 + #define EP15_OUT_EVEN 60 + #define EP15_OUT_ODD 61 + #define EP15_IN_EVEN 62 + #define EP15_IN_ODD 63 + + #define EP(ep,dir,pp) (4*ep+2*dir+pp) + + #if defined (__18CXX) || defined(__C30__) || defined __XC16__ || (__XC8) + #if (defined(__dsPIC33E__) || defined (__PIC24E__)) + #define BD(ep,dir,pp) (8*(4*ep+2*dir+pp)) + #else + #define BD(ep,dir,pp) (4*(4*ep+2*dir+pp)) + #endif + #elif defined(__C32__) + #define BD(ep,dir,pp) (8*(4*ep+2*dir+pp)) + #else + #error "Not defined for this compiler" + #endif + +#elif (USB_PING_PONG_MODE == USB_PING_PONG__ALL_BUT_EP0) + #define USB_NEXT_EP0_OUT_PING_PONG 0x0000 + #define USB_NEXT_EP0_IN_PING_PONG 0x0000 + #define USB_NEXT_PING_PONG 0x0004 + #define EP0_OUT_EVEN 0 + #define EP0_OUT_ODD 0 + #define EP0_IN_EVEN 1 + #define EP0_IN_ODD 1 + #define EP1_OUT_EVEN 2 + #define EP1_OUT_ODD 3 + #define EP1_IN_EVEN 4 + #define EP1_IN_ODD 5 + #define EP2_OUT_EVEN 6 + #define EP2_OUT_ODD 7 + #define EP2_IN_EVEN 8 + #define EP2_IN_ODD 9 + #define EP3_OUT_EVEN 10 + #define EP3_OUT_ODD 11 + #define EP3_IN_EVEN 12 + #define EP3_IN_ODD 13 + #define EP4_OUT_EVEN 14 + #define EP4_OUT_ODD 15 + #define EP4_IN_EVEN 16 + #define EP4_IN_ODD 17 + #define EP5_OUT_EVEN 18 + #define EP5_OUT_ODD 19 + #define EP5_IN_EVEN 20 + #define EP5_IN_ODD 21 + #define EP6_OUT_EVEN 22 + #define EP6_OUT_ODD 23 + #define EP6_IN_EVEN 24 + #define EP6_IN_ODD 25 + #define EP7_OUT_EVEN 26 + #define EP7_OUT_ODD 27 + #define EP7_IN_EVEN 28 + #define EP7_IN_ODD 29 + #define EP8_OUT_EVEN 30 + #define EP8_OUT_ODD 31 + #define EP8_IN_EVEN 32 + #define EP8_IN_ODD 33 + #define EP9_OUT_EVEN 34 + #define EP9_OUT_ODD 35 + #define EP9_IN_EVEN 36 + #define EP9_IN_ODD 37 + #define EP10_OUT_EVEN 38 + #define EP10_OUT_ODD 39 + #define EP10_IN_EVEN 40 + #define EP10_IN_ODD 41 + #define EP11_OUT_EVEN 42 + #define EP11_OUT_ODD 43 + #define EP11_IN_EVEN 44 + #define EP11_IN_ODD 45 + #define EP12_OUT_EVEN 46 + #define EP12_OUT_ODD 47 + #define EP12_IN_EVEN 48 + #define EP12_IN_ODD 49 + #define EP13_OUT_EVEN 50 + #define EP13_OUT_ODD 51 + #define EP13_IN_EVEN 52 + #define EP13_IN_ODD 53 + #define EP14_OUT_EVEN 54 + #define EP14_OUT_ODD 55 + #define EP14_IN_EVEN 56 + #define EP14_IN_ODD 57 + #define EP15_OUT_EVEN 58 + #define EP15_OUT_ODD 59 + #define EP15_IN_EVEN 60 + #define EP15_IN_ODD 61 + + #define EP(ep,dir,pp) (4*ep+2*dir+((ep==0)?0:(pp-2))) + #define BD(ep,dir,pp) (4*(4*ep+2*dir+((ep==0)?0:(pp-2)))) + +#else + #error "No ping pong mode defined." +#endif + +/****** Event callback enabling/disabling macros ******************** + This section of code is used to disable specific USB events that may not be + desired by the user. This can save code size and increase throughput and + decrease CPU utiliazation. +********************************************************************/ +#if defined USB_DISABLE_SUSPEND_HANDLER + #define USB_SUSPEND_HANDLER(event,pointer,size) + + #warning "Disabling the suspend handler is not recommended. Proper suspend handling is required to create a compliant USB device." +#else + #define USB_SUSPEND_HANDLER(event,pointer,size) USER_USB_CALLBACK_EVENT_HANDLER(event,pointer,size) +#endif + +#if defined USB_DISABLE_WAKEUP_FROM_SUSPEND_HANDLER + #define USB_WAKEUP_FROM_SUSPEND_HANDLER(event,pointer,size) + + #warning "Disabling the wake from suspend handler is not recommended. Proper suspend handling is required to create a compliant USB device." +#else + #define USB_WAKEUP_FROM_SUSPEND_HANDLER(event,pointer,size) USER_USB_CALLBACK_EVENT_HANDLER(event,pointer,size) +#endif + +#if defined USB_DISABLE_SOF_HANDLER + #define USB_SOF_HANDLER(event,pointer,size) +#else + #define USB_SOF_HANDLER(event,pointer,size) USER_USB_CALLBACK_EVENT_HANDLER(event,pointer,size) +#endif + +#if defined USB_DISABLE_TRANSFER_TERMINATED_HANDLER + #define USB_TRANSFER_TERMINATED_HANDLER(event,pointer,size) +#else + #define USB_TRANSFER_TERMINATED_HANDLER(event,pointer,size) USER_USB_CALLBACK_EVENT_HANDLER(event,pointer,size) +#endif + +#if defined USB_DISABLE_ERROR_HANDLER + #define USB_ERROR_HANDLER(event,pointer,size) +#else + #define USB_ERROR_HANDLER(event,pointer,size) USER_USB_CALLBACK_EVENT_HANDLER(event,pointer,size) +#endif + +#if defined USB_DISABLE_NONSTANDARD_EP0_REQUEST_HANDLER + #define USB_NONSTANDARD_EP0_REQUEST_HANDLER(event,pointer,size) +#else + #define USB_NONSTANDARD_EP0_REQUEST_HANDLER(event,pointer,size) USER_USB_CALLBACK_EVENT_HANDLER(event,pointer,size) +#endif + +#if defined USB_DISABLE_SET_DESCRIPTOR_HANDLER + #define USB_SET_DESCRIPTOR_HANDLER(event,pointer,size) +#else + #define USB_SET_DESCRIPTOR_HANDLER(event,pointer,size) USER_USB_CALLBACK_EVENT_HANDLER(event,pointer,size) +#endif + +#if defined USB_DISABLE_SET_CONFIGURATION_HANDLER + #define USB_SET_CONFIGURATION_HANDLER(event,pointer,size) +#else + #define USB_SET_CONFIGURATION_HANDLER(event,pointer,size) USER_USB_CALLBACK_EVENT_HANDLER(event,pointer,size) +#endif + +#if defined USB_DISABLE_TRANSFER_COMPLETE_HANDLER + #define USB_TRANSFER_COMPLETE_HANDLER(event,pointer,size) +#else + #define USB_TRANSFER_COMPLETE_HANDLER(event,pointer,size) USER_USB_CALLBACK_EVENT_HANDLER(event,pointer,size) +#endif + diff --git a/software/front/US_BootLoader.X/usb/usb_driver.c b/software/front/US_BootLoader.X/usb/usb_driver.c new file mode 100644 index 0000000..832192f --- /dev/null +++ b/software/front/US_BootLoader.X/usb/usb_driver.c @@ -0,0 +1,834 @@ +/******************************************************************** + FileName: main.c + Dependencies: See INCLUDES section + Processor: PIC18, PIC24, dsPIC, and PIC32 USB Microcontrollers + Hardware: This demo is natively intended to be used on Microchip USB demo + boards supported by the MCHPFSUSB stack. See release notes for + support matrix. This demo can be modified for use on other + hardware platforms. + Complier: Microchip C18 (for PIC18), XC16 (for PIC24/dsPIC), XC32 (for PIC32) + Company: Microchip Technology, Inc. + + Software License Agreement: + + The software supplied herewith by Microchip Technology Incorporated + (the "Company") for its PIC(R) Microcontroller is intended and + supplied to you, the Company's customer, for use solely and + exclusively on Microchip PIC Microcontroller products. The + software is owned by the Company and/or its supplier, and is + protected under applicable copyright laws. All rights are reserved. + Any use in violation of the foregoing restrictions may subject the + user to criminal sanctions under applicable laws, as well as to + civil liability for the breach of the terms and conditions of this + license. + + THIS SOFTWARE IS PROVIDED IN AN "AS IS" CONDITION. NO WARRANTIES, + WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED + TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT, + IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR + CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. + +******************************************************************** + File Description: + + Change History: + Rev Description + ---- ----------------------------------------- + 1.0 Initial release + 2.1 Updated for simplicity and to use common + coding style + 2.7b Improvements to USBCBSendResume(), to make it easier to use. + 2.9f Adding new part support + 2.9j Updates to support new bootloader features (ex: app version + fetching). +********************************************************************/ + +#ifndef MAIN_C +#define MAIN_C + +/** INCLUDES *******************************************************/ +#include "../mcu.h" +#include "../typedefs.h" +#include "usb.h" +#include "usb_function_hid.h" + +/** VARIABLES ******************************************************/ +#if defined(__18CXX) + #pragma udata + + //The ReceivedDataBuffer[] and ToSendDataBuffer[] arrays are used as + //USB packet buffers in this firmware. Therefore, they must be located in + //a USB module accessible portion of microcontroller RAM. + #if defined(__18F14K50) || defined(__18F13K50) || defined(__18LF14K50) || defined(__18LF13K50) + #pragma udata USB_VARIABLES=0x260 + #elif defined(__18F2455) || defined(__18F2550) || defined(__18F4455) || defined(__18F4550)\ + || defined(__18F2458) || defined(__18F2553) || defined(__18F4458) || defined(__18F4553)\ + || defined(__18LF24K50) || defined(__18F24K50) || defined(__18LF25K50)\ + || defined(__18F25K50) || defined(__18LF45K50) || defined(__18F45K50) + #pragma udata USB_VARIABLES=0x500 + #elif defined(__18F4450) || defined(__18F2450) + #pragma udata USB_VARIABLES=0x480 + #else + #pragma udata + #endif +#endif + +#if defined(__XC8) + #if defined(_18F14K50) || defined(_18F13K50) || defined(_18LF14K50) || defined(_18LF13K50) + #define RX_DATA_BUFFER_ADDRESS @0x260 + #define TX_DATA_BUFFER_ADDRESS @0x2A0 + #elif defined(_18F2455) || defined(_18F2550) || defined(_18F4455) || defined(_18F4550)\ + || defined(_18F2458) || defined(_18F2453) || defined(_18F4558) || defined(_18F4553)\ + || defined(_18LF24K50) || defined(_18F24K50) || defined(_18LF25K50)\ + || defined(_18F25K50) || defined(_18LF45K50) || defined(_18F45K50) + #define RX_DATA_BUFFER_ADDRESS @0x500 + #define TX_DATA_BUFFER_ADDRESS @0x540 + #elif defined(_18F4450) || defined(_18F2450) + #define RX_DATA_BUFFER_ADDRESS @0x480 + #define TX_DATA_BUFFER_ADDRESS @0x4C0 + #elif defined(_16F1459) + #define RX_DATA_BUFFER_ADDRESS @0x2050 + #define TX_DATA_BUFFER_ADDRESS @0x20A0 + #else + #define RX_DATA_BUFFER_ADDRESS + #define RX_DATA_BUFFER_ADDRESS + #endif +#else + #define RX_DATA_BUFFER_ADDRESS + #define TX_DATA_BUFFER_ADDRESS +#endif + +unsigned char USBRxBuffer[64] RX_DATA_BUFFER_ADDRESS; +unsigned char USBTxBuffer[64] TX_DATA_BUFFER_ADDRESS; + +#if defined(__18CXX) +#pragma udata +#endif + +USB_HANDLE USBOutHandle = 0; //USB handle. Must be initialized to 0 at startup. +USB_HANDLE USBInHandle = 0; //USB handle. Must be initialized to 0 at startup. + +void USBCBSendResume(void); + +/** VECTOR REMAPPING ***********************************************/ +#if defined(__18CXX) + //On PIC18 devices, addresses 0x00, 0x08, and 0x18 are used for + //the reset, high priority interrupt, and low priority interrupt + //vectors. However, the Microchip HID bootloader occupies the + //0x00-0xFFF program memory region. Therefore, the bootloader code remaps + //these vectors to new locations as indicated below. This remapping is + //only necessary if you wish to be able to (optionally) program the hex file + //generated from this project with the USB bootloader. + #define REMAPPED_RESET_VECTOR_ADDRESS 0x1000 + #define REMAPPED_HIGH_INTERRUPT_VECTOR_ADDRESS 0x1008 + #define REMAPPED_LOW_INTERRUPT_VECTOR_ADDRESS 0x1018 + #define APP_VERSION_ADDRESS 0x1016 //Fixed location, so the App FW image version can be read by the bootloader. + #define APP_SIGNATURE_ADDRESS 0x1006 //Signature location that must be kept at blaknk value (0xFFFF) in this project (has special purpose for bootloader). + + //-------------------------------------------------------------------------- + //Application firmware image version values, as reported to the bootloader + //firmware. These are useful so the bootloader can potentially know if the + //user is trying to program an older firmware image onto a device that + //has already been programmed with a with a newer firmware image. + //Format is APP_FIRMWARE_VERSION_MAJOR.APP_FIRMWARE_VERSION_MINOR. + //The valid minor version is from 00 to 99. Example: + //if APP_FIRMWARE_VERSION_MAJOR == 1, APP_FIRMWARE_VERSION_MINOR == 1, + //then the version is "1.01" + #define APP_FIRMWARE_VERSION_MAJOR 1 //valid values 0-255 + #define APP_FIRMWARE_VERSION_MINOR 0 //valid values 0-99 + //-------------------------------------------------------------------------- + + #pragma romdata AppVersionAndSignatureSection = APP_VERSION_ADDRESS + ROM unsigned char AppVersion[2] = {APP_FIRMWARE_VERSION_MINOR, APP_FIRMWARE_VERSION_MAJOR}; + #pragma romdata AppSignatureSection = APP_SIGNATURE_ADDRESS + ROM unsigned short int SignaturePlaceholder = 0xFFFF; + + #pragma code HIGH_INTERRUPT_VECTOR = 0x08 + void High_ISR (void) + { + _asm goto REMAPPED_HIGH_INTERRUPT_VECTOR_ADDRESS _endasm + } + #pragma code LOW_INTERRUPT_VECTOR = 0x18 + void Low_ISR (void) + { + _asm goto REMAPPED_LOW_INTERRUPT_VECTOR_ADDRESS _endasm + } + extern void _startup (void); // See c018i.c in your C18 compiler dir + #pragma code REMAPPED_RESET_VECTOR = REMAPPED_RESET_VECTOR_ADDRESS + void _reset (void) + { + _asm goto _startup _endasm + } + #pragma code REMAPPED_HIGH_INTERRUPT_VECTOR = REMAPPED_HIGH_INTERRUPT_VECTOR_ADDRESS + void Remapped_High_ISR (void) + { + _asm goto YourHighPriorityISRCode _endasm + } + #pragma code REMAPPED_LOW_INTERRUPT_VECTOR = REMAPPED_LOW_INTERRUPT_VECTOR_ADDRESS + void Remapped_Low_ISR (void) + { + _asm goto YourLowPriorityISRCode _endasm + } + #pragma code + + + //These are your actual interrupt handling routines. + #pragma interrupt YourHighPriorityISRCode + void YourHighPriorityISRCode() + { + //Check which interrupt flag caused the interrupt. + //Service the interrupt + //Clear the interrupt flag + //Etc. + #if defined(USB_INTERRUPT) + USBDeviceTasks(); + #endif + + } //This return will be a "retfie fast", since this is in a #pragma interrupt section + #pragma interruptlow YourLowPriorityISRCode + void YourLowPriorityISRCode() + { + //Check which interrupt flag caused the interrupt. + //Service the interrupt + //Clear the interrupt flag + //Etc. + + } //This return will be a "retfie", since this is in a #pragma interruptlow section +#elif defined(_PIC14E) + //These are your actual interrupt handling routines. + void interrupt ISRCode() + { + //Check which interrupt flag caused the interrupt. + //Service the interrupt + //Clear the interrupt flag + //Etc. + #if defined(USB_INTERRUPT) + + USBDeviceTasks(); + #endif + } +#endif + + +/** DECLARATIONS ***************************************************/ +#if defined(__18CXX) +#pragma code +#endif + +/******************************************************************** + * Function: void main(void) + * + * PreCondition: None + * + * Input: None + * + * Output: None + * + * Side Effects: None + * + * Overview: Main program entry point. + * + * Note: None + *******************************************************************/ +/*#if defined(__18CXX) +void main(void) +#else +int main(void) +#endif +{ + InitializeSystem(); + + #if defined(USB_INTERRUPT) + USBDeviceAttach(); + #endif + + while(1) + { + #if defined(USB_POLLING) + // Check bus status and service USB interrupts. + USBDeviceTasks(); // Interrupt or polling method. If using polling, must call + // this function periodically. This function will take care + // of processing and responding to SETUP transactions + // (such as during the enumeration process when you first + // plug in). USB hosts require that USB devices should accept + // and process SETUP packets in a timely fashion. Therefore, + // when using polling, this function should be called + // regularly (such as once every 1.8ms or faster** [see + // inline code comments in usb_device.c for explanation when + // "or faster" applies]) In most cases, the USBDeviceTasks() + // function does not take very long to execute (ex: <100 + // instruction cycles) before it returns. + #endif + + + // Application-specific tasks. + // Application related code may be added here, or in the ProcessIO() function. + ProcessIO(); + }//end while +}//end main*/ + + +/******************************************************************** + * Function: static void InitializeSystem(void) + * + * PreCondition: None + * + * Input: None + * + * Output: None + * + * Side Effects: None + * + * Overview: InitializeSystem is a centralize initialization + * routine. All required USB initialization routines + * are called from here. + * + * User application initialization routine should + * also be called from here. + * + * Note: None + *******************************************************************/ +void USBDriverInit(void) +{ + + USBOutHandle = 0; + USBInHandle = 0; + USBDeviceInit(); //usb_device.c. Initializes USB module SFRs and firmware + //variables to known states. +}//end InitializeSystem + + +/******************************************************************** + * Function: void ProcessIO(void) + * + * PreCondition: None + * + * Input: None + * + * Output: None + * + * Side Effects: None + * + * Overview: This function is a place holder for other user + * routines. It is a mixture of both USB and + * non-USB tasks. + * + * Note: None + *******************************************************************/ +/*void ProcessIO(void) +{ + //Blink the LEDs according to the USB device status + + // User Application USB tasks + if((USBDeviceState < CONFIGURED_STATE)||(USBSuspendControl==1)) return; + + //Check if we have received an OUT data packet from the host + if(!HIDRxHandleBusy(USBOutHandle)) + { + //We just received a packet of data from the USB host. + //Check the first byte of the packet to see what command the host + //application software wants us to fulfill. + switch(ReceivedDataBuffer[0]) //Look at the data the host sent, to see what kind of application specific command it sent. + { + case 0x80: //Toggle LEDs command + case 0x81: //Get push button state + //Check to make sure the endpoint/buffer is free before we modify the contents + if(!HIDTxHandleBusy(USBInHandle)) + { + ToSendDataBuffer[0] = 0x81; //Echo back to the host PC the command we are fulfilling in the first byte. In this case, the Get Pushbutton State command. + USBInHandle = HIDTxPacket(HID_EP,(BYTE*)&ToSendDataBuffer[0],64); + } + break; + + case 0x37: //Read POT command. Uses ADC to measure an analog voltage on one of the ANxx I/O pins, and returns the result to the host + { + WORD_VAL w; + + //Check to make sure the endpoint/buffer is free before we modify the contents + if(!HIDTxHandleBusy(USBInHandle)) + { + //Some demo boards, like the PIC18F87J50 FS USB Plug-In Module board, do not have a potentiometer (when used stand alone). + //This function call will still measure the analog voltage on the I/O pin however. To make the demo more interesting, it + //is suggested that an external adjustable analog voltage should be applied to this pin. + ToSendDataBuffer[0] = 0x37; //Echo back to the host the command we are fulfilling in the first byte. In this case, the Read POT (analog voltage) command. + ToSendDataBuffer[1] = w.v[0]; //Measured analog voltage LSB + ToSendDataBuffer[2] = w.v[1]; //Measured analog voltage MSB + + //Prepare the USB module to send the data packet to the host + USBInHandle = HIDTxPacket(HID_EP,(BYTE*)&ToSendDataBuffer[0],64); + } + } + break; + } + //Re-arm the OUT endpoint, so we can receive the next OUT data packet + //that the host may try to send us. + USBOutHandle = HIDRxPacket(HID_EP, (BYTE*)&ReceivedDataBuffer, 64); + } + + +}//end ProcessIO */ + + +// ****************************************************************************************************** +// ************** USB Callback Functions **************************************************************** +// ****************************************************************************************************** +// The USB firmware stack will call the callback functions USBCBxxx() in response to certain USB related +// events. For example, if the host PC is powering down, it will stop sending out Start of Frame (SOF) +// packets to your device. In response to this, all USB devices are supposed to decrease their power +// consumption from the USB Vbus to <2.5mA* each. The USB module detects this condition (which according +// to the USB specifications is 3+ms of no bus activity/SOF packets) and then calls the USBCBSuspend() +// function. You should modify these callback functions to take appropriate actions for each of these +// conditions. For example, in the USBCBSuspend(), you may wish to add code that will decrease power +// consumption from Vbus to <2.5mA (such as by clock switching, turning off LEDs, putting the +// microcontroller to sleep, etc.). Then, in the USBCBWakeFromSuspend() function, you may then wish to +// add code that undoes the power saving things done in the USBCBSuspend() function. + +// The USBCBSendResume() function is special, in that the USB stack will not automatically call this +// function. This function is meant to be called from the application firmware instead. See the +// additional comments near the function. + +// Note *: The "usb_20.pdf" specs indicate 500uA or 2.5mA, depending upon device classification. However, +// the USB-IF has officially issued an ECN (engineering change notice) changing this to 2.5mA for all +// devices. Make sure to re-download the latest specifications to get all of the newest ECNs. + +/****************************************************************************** + * Function: void USBCBSuspend(void) + * + * PreCondition: None + * + * Input: None + * + * Output: None + * + * Side Effects: None + * + * Overview: Call back that is invoked when a USB suspend is detected + * + * Note: None + *****************************************************************************/ +//void USBCBSuspend(void) +//{ + //Example power saving code. Insert appropriate code here for the desired + //application behavior. If the microcontroller will be put to sleep, a + //process similar to that shown below may be used: + + //ConfigureIOPinsForLowPower(); + //SaveStateOfAllInterruptEnableBits(); + //DisableAllInterruptEnableBits(); + //EnableOnlyTheInterruptsWhichWillBeUsedToWakeTheMicro(); //should enable at least USBActivityIF as a wake source + //Sleep(); + //RestoreStateOfAllPreviouslySavedInterruptEnableBits(); //Preferrably, this should be done in the USBCBWakeFromSuspend() function instead. + //RestoreIOPinsToNormal(); //Preferrably, this should be done in the USBCBWakeFromSuspend() function instead. + + //IMPORTANT NOTE: Do not clear the USBActivityIF (ACTVIF) bit here. This bit is + //cleared inside the usb_device.c file. Clearing USBActivityIF here will cause + //things to not work as intended. + + +// #if defined(__C30__) || defined __XC16__ + //This function requires that the _IPL level be something other than 0. + // We can set it here to something other than +// #ifndef DSPIC33E_USB_STARTER_KIT +// _IPL = 1; +// USBSleepOnSuspend(); +// #endif +// #endif +//} + + + +/****************************************************************************** + * Function: void USBCBWakeFromSuspend(void) + * + * PreCondition: None + * + * Input: None + * + * Output: None + * + * Side Effects: None + * + * Overview: The host may put USB peripheral devices in low power + * suspend mode (by "sending" 3+ms of idle). Once in suspend + * mode, the host may wake the device back up by sending non- + * idle state signalling. + * + * This call back is invoked when a wakeup from USB suspend + * is detected. + * + * Note: None + *****************************************************************************/ +//void USBCBWakeFromSuspend(void) +//{ + // If clock switching or other power savings measures were taken when + // executing the USBCBSuspend() function, now would be a good time to + // switch back to normal full power run mode conditions. The host allows + // 10+ milliseconds of wakeup time, after which the device must be + // fully back to normal, and capable of receiving and processing USB + // packets. In order to do this, the USB module must receive proper + // clocking (IE: 48MHz clock must be available to SIE for full speed USB + // operation). + // Make sure the selected oscillator settings are consistent with USB + // operation before returning from this function. +//} + +/******************************************************************** + * Function: void USBCB_SOF_Handler(void) + * + * PreCondition: None + * + * Input: None + * + * Output: None + * + * Side Effects: None + * + * Overview: The USB host sends out a SOF packet to full-speed + * devices every 1 ms. This interrupt may be useful + * for isochronous pipes. End designers should + * implement callback routine as necessary. + * + * Note: None + *******************************************************************/ +//void USBCB_SOF_Handler(void) +//{ + // No need to clear UIRbits.SOFIF to 0 here. + // Callback caller is already doing that. +//} + +/******************************************************************* + * Function: void USBCBErrorHandler(void) + * + * PreCondition: None + * + * Input: None + * + * Output: None + * + * Side Effects: None + * + * Overview: The purpose of this callback is mainly for + * debugging during development. Check UEIR to see + * which error causes the interrupt. + * + * Note: None + *******************************************************************/ +//void USBCBErrorHandler(void) +//{ + // No need to clear UEIR to 0 here. + // Callback caller is already doing that. + + // Typically, user firmware does not need to do anything special + // if a USB error occurs. For example, if the host sends an OUT + // packet to your device, but the packet gets corrupted (ex: + // because of a bad connection, or the user unplugs the + // USB cable during the transmission) this will typically set + // one or more USB error interrupt flags. Nothing specific + // needs to be done however, since the SIE will automatically + // send a "NAK" packet to the host. In response to this, the + // host will normally retry to send the packet again, and no + // data loss occurs. The system will typically recover + // automatically, without the need for application firmware + // intervention. + + // Nevertheless, this callback function is provided, such as + // for debugging purposes. +//} + + +/******************************************************************* + * Function: void USBCBCheckOtherReq(void) + * + * PreCondition: None + * + * Input: None + * + * Output: None + * + * Side Effects: None + * + * Overview: When SETUP packets arrive from the host, some + * firmware must process the request and respond + * appropriately to fulfill the request. Some of + * the SETUP packets will be for standard + * USB "chapter 9" (as in, fulfilling chapter 9 of + * the official USB specifications) requests, while + * others may be specific to the USB device class + * that is being implemented. For example, a HID + * class device needs to be able to respond to + * "GET REPORT" type of requests. This + * is not a standard USB chapter 9 request, and + * therefore not handled by usb_device.c. Instead + * this request should be handled by class specific + * firmware, such as that contained in usb_function_hid.c. + * + * Note: None + *******************************************************************/ +void USBCBCheckOtherReq(void) +{ + USBCheckHIDRequest(); +}//end + + +/******************************************************************* + * Function: void USBCBStdSetDscHandler(void) + * + * PreCondition: None + * + * Input: None + * + * Output: None + * + * Side Effects: None + * + * Overview: The USBCBStdSetDscHandler() callback function is + * called when a SETUP, bRequest: SET_DESCRIPTOR request + * arrives. Typically SET_DESCRIPTOR requests are + * not used in most applications, and it is + * optional to support this type of request. + * + * Note: None + *******************************************************************/ +//void USBCBStdSetDscHandler(void) +//{ + // Must claim session ownership if supporting this request +//}//end + + +/******************************************************************* + * Function: void USBCBInitEP(void) + * + * PreCondition: None + * + * Input: None + * + * Output: None + * + * Side Effects: None + * + * Overview: This function is called when the device becomes + * initialized, which occurs after the host sends a + * SET_CONFIGURATION (wValue not = 0) request. This + * callback function should initialize the endpoints + * for the device's usage according to the current + * configuration. + * + * Note: None + *******************************************************************/ +void USBCBInitEP(void) +{ + //enable the HID endpoint + USBEnableEndpoint(HID_EP,USB_IN_ENABLED|USB_OUT_ENABLED|USB_HANDSHAKE_ENABLED|USB_DISALLOW_SETUP); + //Re-arm the OUT endpoint for the next packet + USBOutHandle = HIDRxPacket(HID_EP,(BYTE*)&USBRxBuffer,64); +} + +/******************************************************************** + * Function: void USBCBSendResume(void) + * + * PreCondition: None + * + * Input: None + * + * Output: None + * + * Side Effects: None + * + * Overview: The USB specifications allow some types of USB + * peripheral devices to wake up a host PC (such + * as if it is in a low power suspend to RAM state). + * This can be a very useful feature in some + * USB applications, such as an Infrared remote + * control receiver. If a user presses the "power" + * button on a remote control, it is nice that the + * IR receiver can detect this signalling, and then + * send a USB "command" to the PC to wake up. + * + * The USBCBSendResume() "callback" function is used + * to send this special USB signalling which wakes + * up the PC. This function may be called by + * application firmware to wake up the PC. This + * function will only be able to wake up the host if + * all of the below are true: + * + * 1. The USB driver used on the host PC supports + * the remote wakeup capability. + * 2. The USB configuration descriptor indicates + * the device is remote wakeup capable in the + * bmAttributes field. + * 3. The USB host PC is currently sleeping, + * and has previously sent your device a SET + * FEATURE setup packet which "armed" the + * remote wakeup capability. + * + * If the host has not armed the device to perform remote wakeup, + * then this function will return without actually performing a + * remote wakeup sequence. This is the required behavior, + * as a USB device that has not been armed to perform remote + * wakeup must not drive remote wakeup signalling onto the bus; + * doing so will cause USB compliance testing failure. + * + * This callback should send a RESUME signal that + * has the period of 1-15ms. + * + * Note: This function does nothing and returns quickly, if the USB + * bus and host are not in a suspended condition, or are + * otherwise not in a remote wakeup ready state. Therefore, it + * is safe to optionally call this function regularly, ex: + * anytime application stimulus occurs, as the function will + * have no effect, until the bus really is in a state ready + * to accept remote wakeup. + * + * When this function executes, it may perform clock switching, + * depending upon the application specific code in + * USBCBWakeFromSuspend(). This is needed, since the USB + * bus will no longer be suspended by the time this function + * returns. Therefore, the USB module will need to be ready + * to receive traffic from the host. + * + * The modifiable section in this routine may be changed + * to meet the application needs. Current implementation + * temporary blocks other functions from executing for a + * period of ~3-15 ms depending on the core frequency. + * + * According to USB 2.0 specification section 7.1.7.7, + * "The remote wakeup device must hold the resume signaling + * for at least 1 ms but for no more than 15 ms." + * The idea here is to use a delay counter loop, using a + * common value that would work over a wide range of core + * frequencies. + * That value selected is 1800. See table below: + * ========================================================== + * Core Freq(MHz) MIP RESUME Signal Period (ms) + * ========================================================== + * 48 12 1.05 + * 4 1 12.6 + * ========================================================== + * * These timing could be incorrect when using code + * optimization or extended instruction mode, + * or when having other interrupts enabled. + * Make sure to verify using the MPLAB SIM's Stopwatch + * and verify the actual signal on an oscilloscope. + *******************************************************************/ +void USBCBSendResume(void) +{ + static WORD delay_count; + + //First verify that the host has armed us to perform remote wakeup. + //It does this by sending a SET_FEATURE request to enable remote wakeup, + //usually just before the host goes to standby mode (note: it will only + //send this SET_FEATURE request if the configuration descriptor declares + //the device as remote wakeup capable, AND, if the feature is enabled + //on the host (ex: on Windows based hosts, in the device manager + //properties page for the USB device, power management tab, the + //"Allow this device to bring the computer out of standby." checkbox + //should be checked). + if(USBGetRemoteWakeupStatus() == TRUE) + { + //Verify that the USB bus is in fact suspended, before we send + //remote wakeup signalling. + if(USBIsBusSuspended() == TRUE) + { + USBMaskInterrupts(); + + //Clock switch to settings consistent with normal USB operation. +// USBCBWakeFromSuspend(); + USBSuspendControl = 0; + USBBusIsSuspended = FALSE; //So we don't execute this code again, + //until a new suspend condition is detected. + + //Section 7.1.7.7 of the USB 2.0 specifications indicates a USB + //device must continuously see 5ms+ of idle on the bus, before it sends + //remote wakeup signalling. One way to be certain that this parameter + //gets met, is to add a 2ms+ blocking delay here (2ms plus at + //least 3ms from bus idle to USBIsBusSuspended() == TRUE, yeilds + //5ms+ total delay since start of idle). + delay_count = 3600U; + do + { + delay_count--; + }while(delay_count); + + //Now drive the resume K-state signalling onto the USB bus. + USBResumeControl = 1; // Start RESUME signaling + delay_count = 1800U; // Set RESUME line for 1-13 ms + do + { + delay_count--; + }while(delay_count); + USBResumeControl = 0; //Finished driving resume signalling + + USBUnmaskInterrupts(); + } + } +} + + +/******************************************************************* + * Function: BOOL USER_USB_CALLBACK_EVENT_HANDLER( + * USB_EVENT event, void *pdata, WORD size) + * + * PreCondition: None + * + * Input: USB_EVENT event - the type of event + * void *pdata - pointer to the event data + * WORD size - size of the event data + * + * Output: None + * + * Side Effects: None + * + * Overview: This function is called from the USB stack to + * notify a user application that a USB event + * occured. This callback is in interrupt context + * when the USB_INTERRUPT option is selected. + * + * Note: None + *******************************************************************/ +BOOL USER_USB_CALLBACK_EVENT_HANDLER(int event, void *pdata, WORD size) +{ + switch(event) + { +// case EVENT_TRANSFER: + //Add application specific callback task or callback function here if desired. +// break; +// case EVENT_SOF: +// USBCB_SOF_Handler(); +// break; +// case EVENT_SUSPEND: +// USBCBSuspend(); +// break; +// case EVENT_RESUME: +// USBCBWakeFromSuspend(); +// break; + case EVENT_CONFIGURED: + USBCBInitEP(); + break; +// case EVENT_SET_DESCRIPTOR: +// USBCBStdSetDscHandler(); +// break; + case EVENT_EP0_REQUEST: + USBCBCheckOtherReq(); + break; +// case EVENT_BUS_ERROR: +// USBCBErrorHandler(); +// break; +// case EVENT_TRANSFER_TERMINATED: + //Add application specific callback task or callback function here if desired. + //The EVENT_TRANSFER_TERMINATED event occurs when the host performs a CLEAR + //FEATURE (endpoint halt) request on an application endpoint which was + //previously armed (UOWN was = 1). Here would be a good place to: + //1. Determine which endpoint the transaction that just got terminated was + // on, by checking the handle value in the *pdata. + //2. Re-arm the endpoint if desired (typically would be the case for OUT + // endpoints). +// break; + default: + break; + } + return TRUE; +} + +/** EOF main.c *************************************************/ +#endif diff --git a/software/front/US_BootLoader.X/usb/usb_driver.h b/software/front/US_BootLoader.X/usb/usb_driver.h new file mode 100644 index 0000000..4455524 --- /dev/null +++ b/software/front/US_BootLoader.X/usb/usb_driver.h @@ -0,0 +1,27 @@ +/* + * File: usb_driver.h + * Author: Sparky + * + * Created on ??????????, 2013, ?????? 5, 23:55 + */ + +#ifndef USB_DRIVER_H +#define USB_DRIVER_H + +#ifdef __cplusplus +extern "C" { +#endif +#include "..\typedefs.h" + +extern void USBDriverInit(void); +extern unsigned char USBTxBuffer[64]; +extern unsigned char USBRxBuffer[64]; +extern volatile USB_HANDLE USBOutHandle; //USB handle. Must be initialized to 0 at startup. +extern volatile USB_HANDLE USBInHandle; //USB handle. Must be initialized to 0 at startup. + +#ifdef __cplusplus +} +#endif + +#endif /* USB_DRIVER_H */ + diff --git a/software/front/US_BootLoader.X/usb/usb_function_hid.c b/software/front/US_BootLoader.X/usb/usb_function_hid.c new file mode 100644 index 0000000..0658284 --- /dev/null +++ b/software/front/US_BootLoader.X/usb/usb_function_hid.c @@ -0,0 +1,343 @@ +/******************************************************************** + File Information: + FileName: usb_function_hid.c + Dependencies: See INCLUDES section + Processor: PIC18 or PIC24 USB Microcontrollers + Hardware: The code is natively intended to be used on the following + hardware platforms: PICDEM� FS USB Demo Board, + PIC18F87J50 FS USB Plug-In Module, or + Explorer 16 + PIC24 USB PIM. The firmware may be + modified for use on other USB platforms by editing the + HardwareProfile.h file. + Complier: Microchip C18 (for PIC18) or C30 (for PIC24) + Company: Microchip Technology, Inc. + + Software License Agreement: + + The software supplied herewith by Microchip Technology Incorporated + (the �Company�) for its PIC� Microcontroller is intended and + supplied to you, the Company�s customer, for use solely and + exclusively on Microchip PIC Microcontroller products. The + software is owned by the Company and/or its supplier, and is + protected under applicable copyright laws. All rights are reserved. + Any use in violation of the foregoing restrictions may subject the + user to criminal sanctions under applicable laws, as well as to + civil liability for the breach of the terms and conditions of this + license. + + THIS SOFTWARE IS PROVIDED IN AN �AS IS� CONDITION. NO WARRANTIES, + WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED + TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT, + IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR + CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. + + File Description: + + Change History: + Rev Date Description + 1.0 11/19/2004 Initial release + 2.1 02/26/2007 Updated for simplicity and to use common + coding style + + Summary: + This file contains all of functions, macros, definitions, variables, + datatypes, etc. that are required for usage with the HID function + driver. This file should be included in projects that use the HID + \function driver. + + + + This file is located in the "\\\Microchip\\USB\\HID + Device Driver" directory. + Description: + USB HID Function Driver File + + This file contains all of functions, macros, definitions, variables, + datatypes, etc. that are required for usage with the HID function + driver. This file should be included in projects that use the HID + \function driver. + + This file is located in the "\\\Microchip\\USB\\HID + Device Driver" directory. + + When including this file in a new project, this file can either be + referenced from the directory in which it was installed or copied + directly into the user application folder. If the first method is + chosen to keep the file located in the folder in which it is installed + then include paths need to be added so that the library and the + application both know where to reference each others files. If the + application folder is located in the same folder as the Microchip + folder (like the current demo folders), then the following include + paths need to be added to the application's project: + + ..\\Include + + ..\\..\\Include + + ..\\..\\Microchip\\Include + + ..\\..\\\ + + ..\\..\\..\\\ + + If a different directory structure is used, modify the paths as + required. An example using absolute paths instead of relative paths + would be the following: + + C:\\Microchip Solutions\\Microchip\\Include + + C:\\Microchip Solutions\\My Demo Application + + + Change History: + Rev Description + ---- ------------------------------------------ + 1.0 Initial release + 2.1 Updated for simplicity and to use common + coding style + 2.6 Minor changes in defintions + +*******************************************************************/ + +#ifndef USB_FUNCTION_HID_C +#define USB_FUNCTION_HID_C + +/** INCLUDES *******************************************************/ +#include "GenericTypeDefs.h" +#include "Compiler.h" +#include "usb.h" +#include "usb_function_hid.h" + + +/** VARIABLES ******************************************************/ +#if defined(COMPILER_MPLAB_C18) + #pragma udata +#endif + +BYTE idle_rate; +BYTE active_protocol; // [0] Boot Protocol [1] Report Protocol + +/** EXTERNAL PROTOTYPES ********************************************/ +#if defined USER_GET_REPORT_HANDLER + void USER_GET_REPORT_HANDLER(void); +#endif + +#if defined USER_SET_REPORT_HANDLER + void USER_SET_REPORT_HANDLER(void); +#endif + +/** Section: DECLARATIONS ***************************************************/ +#if defined(__18CXX) + #pragma code +#endif + +/** Section: CLASS SPECIFIC REQUESTS ****************************************/ + +/******************************************************************** + Function: + void USBCheckHIDRequest(void) + + Summary: + This routine handles HID specific request that happen on EP0. + This function should be called from the USBCBCheckOtherReq() call back + function whenever implementing a HID device. + + Description: + This routine handles HID specific request that happen on EP0. These + include, but are not limited to, requests for the HID report + descriptors. This function should be called from the + USBCBCheckOtherReq() call back function whenever using an HID device. + + Typical Usage: + + void USBCBCheckOtherReq(void) + { + //Since the stack didn't handle the request I need to check + // my class drivers to see if it is for them + USBCheckHIDRequest(); + } + + + PreCondition: + None + + Parameters: + None + + Return Values: + None + + Remarks: + None + + *******************************************************************/ +void USBCheckHIDRequest(void) +{ + if(SetupPkt.Recipient != USB_SETUP_RECIPIENT_INTERFACE_BITFIELD) return; + if(SetupPkt.bIntfID != HID_INTF_ID) return; + + /* + * There are two standard requests that hid.c may support. + * 1. GET_DSC(DSC_HID,DSC_RPT,DSC_PHY); + * 2. SET_DSC(DSC_HID,DSC_RPT,DSC_PHY); + */ + if(SetupPkt.bRequest == USB_REQUEST_GET_DESCRIPTOR) + { + switch(SetupPkt.bDescriptorType) + { + case DSC_HID: //HID Descriptor + if(USBActiveConfiguration == 1) + { + USBEP0SendROMPtr( + (ROM BYTE*)&configDescriptor1 + 18, //18 is a magic number. It is the offset from start of the configuration descriptor to the start of the HID descriptor. + sizeof(USB_HID_DSC)+3, + USB_EP0_INCLUDE_ZERO); + } + break; + case DSC_RPT: //Report Descriptor + //if(USBActiveConfiguration == 1) + { + USBEP0SendROMPtr( + (ROM BYTE*)&hid_rpt01, + HID_RPT01_SIZE, //See usbcfg.h + USB_EP0_INCLUDE_ZERO); + } + break; + case DSC_PHY: //Physical Descriptor + //Note: The below placeholder code is commented out. HID Physical Descriptors are optional and are not used + //in many types of HID applications. If an application does not have a physical descriptor, + //then the device should return STALL in response to this request (stack will do this automatically + //if no-one claims ownership of the control transfer). + //If an application does implement a physical descriptor, then make sure to declare + //hid_phy01 (rom structure containing the descriptor data), and hid_phy01 (the size of the descriptors in bytes), + //and then uncomment the below code. + //if(USBActiveConfiguration == 1) + //{ + // USBEP0SendROMPtr((ROM BYTE*)&hid_phy01, sizeof(hid_phy01), USB_EP0_INCLUDE_ZERO); + //} + break; + }//end switch(SetupPkt.bDescriptorType) + }//end if(SetupPkt.bRequest == GET_DSC) + + if(SetupPkt.RequestType != USB_SETUP_TYPE_CLASS_BITFIELD) + { + return; + } + + switch(SetupPkt.bRequest) + { + case GET_REPORT: + #if defined USER_GET_REPORT_HANDLER + USER_GET_REPORT_HANDLER(); + #endif + break; + case SET_REPORT: + #if defined USER_SET_REPORT_HANDLER + USER_SET_REPORT_HANDLER(); + #endif + break; + case GET_IDLE: + USBEP0SendRAMPtr( + (BYTE*)&idle_rate, + 1, + USB_EP0_INCLUDE_ZERO); + break; + case SET_IDLE: + USBEP0Transmit(USB_EP0_NO_DATA); + idle_rate = SetupPkt.W_Value.byte.HB; + break; + case GET_PROTOCOL: + USBEP0SendRAMPtr( + (BYTE*)&active_protocol, + 1, + USB_EP0_NO_OPTIONS); + break; + case SET_PROTOCOL: + USBEP0Transmit(USB_EP0_NO_DATA); + active_protocol = SetupPkt.W_Value.byte.LB; + break; + }//end switch(SetupPkt.bRequest) + +}//end USBCheckHIDRequest + +/******************************************************************** + Function: + USB_HANDLE HIDTxPacket(BYTE ep, BYTE* data, WORD len) + + Summary: + Sends the specified data out the specified endpoint + + Description: + This function sends the specified data out the specified + endpoint and returns a handle to the transfer information. + + Typical Usage: + + //make sure that the last transfer isn't busy by checking the handle + if(!HIDTxHandleBusy(USBInHandle)) + { + //Send the data contained in the ToSendDataBuffer[] array out on + // endpoint HID_EP + USBInHandle = HIDTxPacket(HID_EP,(BYTE*)&ToSendDataBuffer[0],sizeof(ToSendDataBuffer)); + } + + + PreCondition: + None + + Parameters: + BYTE ep - the endpoint you want to send the data out of + BYTE* data - pointer to the data that you wish to send + WORD len - the length of the data that you wish to send + + Return Values: + USB_HANDLE - a handle for the transfer. This information + should be kept to track the status of the transfer + + Remarks: + None + + *******************************************************************/ + // Implemented as a macro. See usb_function_hid.h + +/******************************************************************** + Function: + USB_HANDLE HIDRxPacket(BYTE ep, BYTE* data, WORD len) + + Summary: + Receives the specified data out the specified endpoint + + Description: + Receives the specified data out the specified endpoint. + + Typical Usage: + + //Read 64-bytes from endpoint HID_EP, into the ReceivedDataBuffer array. + // Make sure to save the return handle so that we can check it later + // to determine when the transfer is complete. + USBOutHandle = HIDRxPacket(HID_EP,(BYTE*)&ReceivedDataBuffer,64); + + + PreCondition: + None + + Parameters: + BYTE ep - the endpoint you want to receive the data into + BYTE* data - pointer to where the data will go when it arrives + WORD len - the length of the data that you wish to receive + + Return Values: + USB_HANDLE - a handle for the transfer. This information + should be kept to track the status of the transfer + + Remarks: + None + + *******************************************************************/ + // Implemented as a macro. See usb_function_hid.h + +/** USER API *******************************************************/ + +#endif +/** EOF usb_function_hid.c ******************************************************/ diff --git a/software/front/US_BootLoader.X/usb/usb_function_hid.h b/software/front/US_BootLoader.X/usb/usb_function_hid.h new file mode 100644 index 0000000..2f0f998 --- /dev/null +++ b/software/front/US_BootLoader.X/usb/usb_function_hid.h @@ -0,0 +1,387 @@ +/******************************************************************************* + File Information: + FileName: usb_function_hid.h + Dependencies: See INCLUDES section + Processor: Microchip USB Microcontrollers + Hardware: The code is natively intended to be used on the following + hardware platforms: PICDEM FS USB Demo Board, + PIC18F87J50 FS USB Plug-In Module, or + Explorer 16 + PIC24 USB PIM. The firmware may be + modified for use on other USB platforms by editing the + HardwareProfile.h file. + Complier: Microchip C18, C30, C32 + Company: Microchip Technology, Inc. + + Software License Agreement: + + The software supplied herewith by Microchip Technology Incorporated + (the “Companyâ€) for its PIC® Microcontroller is intended and + supplied to you, the Company’s customer, for use solely and + exclusively on Microchip PIC Microcontroller products. The + software is owned by the Company and/or its supplier, and is + protected under applicable copyright laws. All rights are reserved. + Any use in violation of the foregoing restrictions may subject the + user to criminal sanctions under applicable laws, as well as to + civil liability for the breach of the terms and conditions of this + license. + + THIS SOFTWARE IS PROVIDED IN AN “AS IS†CONDITION. NO WARRANTIES, + WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED + TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT, + IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR + CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. + + File Description: + + Change History: + Rev Date Description + 1.0 11/19/2004 Initial release + 2.1 02/26/2007 Updated for simplicity and to use common + coding style + + Summary: + This file contains all of functions, macros, definitions, variables, + datatypes, etc. that are required for usage with the HID function + driver. This file should be included in projects that use the HID + \function driver. This file should also be included into the + usb_descriptors.c file and any other user file that requires access to the + HID interface. + + + + This file is located in the "\\\Microchip\\Include\\USB" + directory. + + Description: + USB HID Function Driver File + + This file contains all of functions, macros, definitions, variables, + datatypes, etc. that are required for usage with the HID function + driver. This file should be included in projects that use the HID + \function driver. This file should also be included into the + usb_descriptors.c file and any other user file that requires access to the + HID interface. + + This file is located in the "\\\Microchip\\Include\\USB" + directory. + + When including this file in a new project, this file can either be + referenced from the directory in which it was installed or copied + directly into the user application folder. If the first method is + chosen to keep the file located in the folder in which it is installed + then include paths need to be added so that the library and the + application both know where to reference each others files. If the + application folder is located in the same folder as the Microchip + folder (like the current demo folders), then the following include + paths need to be added to the application's project: + + ..\\..\\Microchip\\Include + . + + If a different directory structure is used, modify the paths as + required. An example using absolute paths instead of relative paths + would be the following: + + C:\\Microchip Solutions\\Microchip\\Include + + C:\\Microchip Solutions\\My Demo Application + + + Change History: + Rev Description + ---- ------------------------------------------ + 1.0 Initial release + 2.1 Updated for simplicity and to use common + coding style + 2.6 Minor changes in defintions + +*******************************************************************/ +#ifndef HID_H +#define HID_H +//DOM-IGNORE-END + +/** INCLUDES *******************************************************/ + +/** DEFINITIONS ****************************************************/ + +/* Class-Specific Requests */ +#define GET_REPORT 0x01 +#define GET_IDLE 0x02 +#define GET_PROTOCOL 0x03 +#define SET_REPORT 0x09 +#define SET_IDLE 0x0A +#define SET_PROTOCOL 0x0B + +/* Class Descriptor Types */ +#define DSC_HID 0x21 +#define DSC_RPT 0x22 +#define DSC_PHY 0x23 + +/* Protocol Selection */ +#define BOOT_PROTOCOL 0x00 +#define RPT_PROTOCOL 0x01 + +/* HID Interface Class Code */ +#define HID_INTF 0x03 + +/* HID Interface Class SubClass Codes */ +#define BOOT_INTF_SUBCLASS 0x01 + +/* HID Interface Class Protocol Codes */ +#define HID_PROTOCOL_NONE 0x00 +#define HID_PROTOCOL_KEYBOARD 0x01 +#define HID_PROTOCOL_MOUSE 0x02 + +/******************************************************************** + Function: + void USBCheckHIDRequest(void) + + Summary: + This routine handles HID specific request that happen on EP0. + This function should be called from the USBCBCheckOtherReq() call back + function whenever implementing a HID device. + + Description: + This routine handles HID specific request that happen on EP0. These + include, but are not limited to, requests for the HID report + descriptors. This function should be called from the + USBCBCheckOtherReq() call back function whenever using an HID device. + + Typical Usage: + + void USBCBCheckOtherReq(void) + { + //Since the stack didn't handle the request I need to check + // my class drivers to see if it is for them + USBCheckHIDRequest(); + } + + + PreCondition: + None + + Parameters: + None + + Return Values: + None + + Remarks: + None + + *******************************************************************/ +void USBCheckHIDRequest(void); + +/******************************************************************** + Function: + BOOL HIDTxHandleBusy(USB_HANDLE handle) + + Summary: + Retreives the status of the buffer ownership + + Description: + Retreives the status of the buffer ownership. This function will + indicate if the previous transfer is complete or not. + + This function will take the input handle (pointer to a BDT entry) and + will check the UOWN bit. If the UOWN bit is set then that indicates + that the transfer is not complete and the USB module still owns the data + memory. If the UOWN bit is clear that means that the transfer is + complete and that the CPU now owns the data memory. + + For more information about the BDT, please refer to the appropriate + datasheet for the device in use. + + Typical Usage: + + //make sure that the last transfer isn't busy by checking the handle + if(!HIDTxHandleBusy(USBInHandle)) + { + //Send the data contained in the ToSendDataBuffer[] array out on + // endpoint HID_EP + USBInHandle = HIDTxPacket(HID_EP,(BYTE*)&ToSendDataBuffer[0],sizeof(ToSendDataBuffer)); + } + + + PreCondition: + None. + + Parameters: + USB_HANDLE handle - the handle for the transfer in question. + The handle is returned by the HIDTxPacket() and HIDRxPacket() + functions. Please insure that USB_HANDLE objects are initialized + to NULL. + + Return Values: + TRUE - the HID handle is still busy + FALSE - the HID handle is not busy and is ready to send + additional data. + + Remarks: + None + + *******************************************************************/ +#define HIDTxHandleBusy(handle) USBHandleBusy(handle) + +/******************************************************************** + Function: + BOOL HIDRxHandleBusy(USB_HANDLE handle) + + Summary: + Retreives the status of the buffer ownership + + Description: + Retreives the status of the buffer ownership. This function will + indicate if the previous transfer is complete or not. + + This function will take the input handle (pointer to a BDT entry) and + will check the UOWN bit. If the UOWN bit is set then that indicates + that the transfer is not complete and the USB module still owns the data + memory. If the UOWN bit is clear that means that the transfer is + complete and that the CPU now owns the data memory. + + For more information about the BDT, please refer to the appropriate + datasheet for the device in use. + + Typical Usage: + + if(!HIDRxHandleBusy(USBOutHandle)) + { + //The data is available in the buffer that was specified when the + // HIDRxPacket() was called. + } + + + PreCondition: + None + + Parameters: + USB_HANDLE handle - the handle for the transfer in question. + The handle is returned by the HIDTxPacket() and HIDRxPacket() + functions. Please insure that USB_HANDLE objects are initialized + to NULL. + + Return Values: + TRUE - the HID handle is still busy + FALSE - the HID handle is not busy and is ready to receive + additional data. + + Remarks: + None + + *******************************************************************/ +#define HIDRxHandleBusy(handle) USBHandleBusy(handle) + +/******************************************************************** + Function: + USB_HANDLE HIDTxPacket(BYTE ep, BYTE* data, WORD len) + + Summary: + Sends the specified data out the specified endpoint + + Description: + This function sends the specified data out the specified + endpoint and returns a handle to the transfer information. + + Typical Usage: + + //make sure that the last transfer isn't busy by checking the handle + if(!HIDTxHandleBusy(USBInHandle)) + { + //Send the data contained in the ToSendDataBuffer[] array out on + // endpoint HID_EP + USBInHandle = HIDTxPacket(HID_EP,(BYTE*)&ToSendDataBuffer[0],sizeof(ToSendDataBuffer)); + } + + + PreCondition: + None + + Parameters: + BYTE ep - the endpoint you want to send the data out of + BYTE* data - pointer to the data that you wish to send + WORD len - the length of the data that you wish to send + + Return Values: + USB_HANDLE - a handle for the transfer. This information + should be kept to track the status of the transfer + + Remarks: + None + + *******************************************************************/ +#define HIDTxPacket USBTxOnePacket + +/******************************************************************** + Function: + USB_HANDLE HIDRxPacket(BYTE ep, BYTE* data, WORD len) + + Summary: + Receives the specified data out the specified endpoint + + Description: + Receives the specified data out the specified endpoint. + + Typical Usage: + + //Read 64-bytes from endpoint HID_EP, into the ReceivedDataBuffer array. + // Make sure to save the return handle so that we can check it later + // to determine when the transfer is complete. + USBOutHandle = HIDRxPacket(HID_EP,(BYTE*)&ReceivedDataBuffer,64); + + + PreCondition: + None + + Parameters: + BYTE ep - the endpoint you want to receive the data into + BYTE* data - pointer to where the data will go when it arrives + WORD len - the length of the data that you wish to receive + + Return Values: + USB_HANDLE - a handle for the transfer. This information + should be kept to track the status of the transfer + + Remarks: + None + + *******************************************************************/ +#define HIDRxPacket USBRxOnePacket + +// Section: STRUCTURES *********************************************/ + +//USB HID Descriptor header as detailed in section +//"6.2.1 HID Descriptor" of the HID class definition specification +typedef struct _USB_HID_DSC_HEADER +{ + BYTE bDescriptorType; //offset 9 + WORD wDscLength; //offset 10 +} USB_HID_DSC_HEADER; + +//USB HID Descriptor header as detailed in section +//"6.2.1 HID Descriptor" of the HID class definition specification +typedef struct _USB_HID_DSC +{ + BYTE bLength; //offset 0 + BYTE bDescriptorType; //offset 1 + WORD bcdHID; //offset 2 + BYTE bCountryCode; //offset 4 + BYTE bNumDsc; //offset 5 + + + //USB_HID_DSC_HEADER hid_dsc_header[HID_NUM_OF_DSC]; + /* HID_NUM_OF_DSC is defined in usbcfg.h */ + +} USB_HID_DSC; + +/** Section: EXTERNS ********************************************************/ +extern volatile CTRL_TRF_SETUP SetupPkt; +extern ROM BYTE configDescriptor1[]; +extern volatile BYTE CtrlTrfData[USB_EP0_BUFF_SIZE]; + +#if !defined(__USB_DESCRIPTORS_C) +extern ROM struct{BYTE report[HID_RPT01_SIZE];}hid_rpt01; +#endif + +#endif //HID_H diff --git a/software/front/US_BootLoader.X/usb/usb_hal.h b/software/front/US_BootLoader.X/usb/usb_hal.h new file mode 100644 index 0000000..8f012bc --- /dev/null +++ b/software/front/US_BootLoader.X/usb/usb_hal.h @@ -0,0 +1,653 @@ +/****************************************************************************** + + USB Hardware Abstraction Layer (HAL) (Header File) + +Summary: + This file abstracts the hardware interface. + +Description: + This file abstracts the hardware interface. + + This file is located in the "\\\Microchip\\Include\\USB" + directory. + + When including this file in a new project, this file can either be + referenced from the directory in which it was installed or copied + directly into the user application folder. If the first method is + chosen to keep the file located in the folder in which it is installed + then include paths need to be added so that the library and the + application both know where to reference each others files. If the + application folder is located in the same folder as the Microchip + folder (like the current demo folders), then the following include + paths need to be added to the application's project: + + . + ..\\..\\MicrochipInclude + + If a different directory structure is used, modify the paths as + required. An example using absolute paths instead of relative paths + would be the following: + + C:\\Microchip Solutions\\Microchip\\Include + + C:\\Microchip Solutions\\My Demo Application +*******************************************************************************/ +//DOM-IGNORE-BEGIN +/****************************************************************************** + + File Description: + + This file defines the interface to the USB hardware abstraction layer. + + Filename: usb_hal.h + Dependancies: none + Processor: PIC18, PIC24, or PIC32 USB Microcontrollers + Hardware: The code is natively intended to be used on the following + hardware platforms: PICDEM™ FS USB Demo Board, + PIC18F87J50 FS USB Plug-In Module, or + Explorer 16 + PIC24 USB PIM. The firmware may be + modified for use on other USB platforms by editing the + HardwareProfile.h file. + Compiler: Microchip C18 (for PIC18) or C30 (for PIC24) + Company: Microchip Technology, Inc. + + Software License Agreement: + + The software supplied herewith by Microchip Technology Incorporated + (the “Company”) for its PICmicro® Microcontroller is intended and + supplied to you, the Company’s customer, for use solely and + exclusively on Microchip PICmicro Microcontroller products. The + software is owned by the Company and/or its supplier, and is + protected under applicable copyright laws. All rights are reserved. + Any use in violation of the foregoing restrictions may subject the + user to criminal sanctions under applicable laws, as well as to + civil liability for the breach of the terms and conditions of this + license. + + THIS SOFTWARE IS PROVIDED IN AN “AS IS” CONDITION. NO WARRANTIES, + WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED + TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT, + IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR + CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. + + *************************************************************************/ + +/******************************************************************** + Change History: + Rev Description + ---- ----------- + 2.6- No Change + 2.6a + + 2.7 Minor changes changes to the structure of the conditional + compilation statement ordering. + + 2.7a No Change +********************************************************************/ + +#ifndef _USB_HAL_H_ +#define _USB_HAL_H_ +//DOM-IGNORE-END + +#if defined(__18CXX) + #include "USB/usb_hal_pic18.h" +#elif defined(__C30__) || defined __XC16__ + #if defined(__dsPIC33E__) + #include "USB/usb_hal_dspic33E.h" + #elif defined(__PIC24E__) + #include "USB/usb_hal_pic24e.h" + #else + #include "USB/usb_hal_pic24.h" + #endif +#elif defined(__PIC32MX__) + #include "usb_hal_pic32.h" +#elif defined(_PIC14E) + #include "USB/usb_hal_pic16f1.h" +#else + #error "Silicon Platform not defined" +#endif + + +/********************** + Interface Routines + **********************/ + +/************************************************************************* + Function: + void USBHALSetBusAddress( BYTE addr ) + + Description: + This routine sets the address of the system on the USB + when acting as a peripheral device. + + Preconditions: + 1. USBHALInitialize must have been called to + initialize the USB HAL. + 2. Endpoint zero (0) must be configured as appropriate + by calls to USBHALSetEpConfiguration. + 3. The system must have been enumerated on the USB (as + a device). + + Parameters: + addr Desired address of this device on the USB. + + Return Values: + None + + Side Effect: + The bus address has been set. + + Remmarks: + The address is assigned by the host and is received in + a SET_ADDRESS setup request. + + *************************************************************************/ +/* + This routine is implemented as a macro to a lower-level level routine. + */ + +#define USBHALSetBusAddress OTGCORE_SetDeviceAddr + +void USBHALSetBusAddress( BYTE addr ); + + +/************************************************************************* + Function: + void USBHALControlUsbResistors( BYTE flags ); + + Description: + This routine enables or disables the USB pull-up or + pull-down resistors as requested. + + Precondition: + USBInitialize must have been called to initialize the + USB SW stack. + + Parameters: + flags - This is a bit-mapped flags value indicating + which resistors to enable or disable (see below). + + Return Values: + TRUE if successful, FALSE if not. + + Side Effects: + The resistors are enabled as requested. + + Remarks: + Used for USB peripheral control to connect to or + disconnect from the bus. Otherwise, used for OTG + SRP/HNP and host support. + + *************************************************************************/ + +/* + This routine is implemented as a macro to a lower-level level routine. + */ + #if defined(__18CXX) + void USBHALControlUsbResistors( BYTE flags ); + #else + #define USBHALControlUsbResistors OTGCORE_ControlUsbResistors + void USBHALControlUsbResistors( BYTE flags ); +#endif + +/* USBHALControlUsbResistors flags */ +#define USB_HAL_PULL_UP_D_PLUS 0x80 // Pull D+ line high +#define USB_HAL_PULL_UP_D_MINUS 0x40 // Pull D- line high +#define USB_HAL_PULL_DN_D_PLUS 0x20 // Pull D+ line low +#define USB_HAL_PULL_DN_D_MINUS 0x10 // Pull D- line low +/* + The following are defined for convenience: + */ +#define USB_HAL_DEV_CONN_FULL_SPD USB_HAL_PULL_UP_D_PLUS +#define USB_HAL_DEV_CONN_LOW_SPD USB_HAL_PULL_UP_D_MINUS +#define USB_HAL_DEV_DISCONNECT 0 + + +/* + MCHP: Define a method to check for SE0 & a way to send a reset (SE0). + */ + + +/************************************************************************* + Function: + BOOL USBHALSessionIsValid( void ) + + Description: + This routine determines if there is currently a valid + USB session or not. + + Precondition: + USBInitialize must have been called to initialize the + USB SW stack. + + Parameters: + None + + Return Values: + TRUE if the session is currently valid, FALSE if not. + + Remarks: + Only used for host and OTG support. + + *************************************************************************/ + +BOOL USBHALSessionIsValid( void ); + + +/************************************************************************* + Function: + USBHALControlBusPower + + Description: + This routine provides a bitmap of the most recent + error conditions to occur. + + Precondition: + USBInitialize must have been called to initialize the + USB SW stack. + + Parameters: + cmd - Identifies desired command (see below). + + Return Values: + TRUE if successful, FALSE if not. + + Remarks: + Only used for host and OTG support. + + *************************************************************************/ + +BOOL USBHALControlBusPower( BYTE cmd ); + +/* USBHALControlBusPower Commands */ +#define USB_VBUS_DISCHARGE 0 // Dicharge Vbus via resistor +#define USB_VBUS_CHARGE 1 // Charge Vbus via resistor +#define USB_VBUS_POWER_ON 3 // Supply power to Vbus +#define USB_VBUS_POWER_OFF 4 // Do not supply power to Vbus +/* + Note: All commands except USB_VBUS_POWER_ON imply that this device + does not actively supply power to Vbus. + */ + + +/************************************************************************* + Function: + unsigned long USBHALGetLastError( void ) + + Description: + This routine provides a bitmap of the most recent + error conditions to occur. + + Precondition: + USBInitialize must have been called to initialize the + USB SW stack. + + Parameters: + None + + Return Values: + Bitmap indicating the most recent error condition(s). + + Side Effect: + Error record is cleared. + + Remarks: + Although record of the error state is cleared, nothing + is done to fix the condition or recover from the + error. The client must take appropriate steps. + + *************************************************************************/ + +unsigned long USBHALGetLastError( void ); + +/* + USBHALGetLastError Error Bits. + */ +#define USBHAL_PID_ERR 0x00000001 // Packet ID Error +#define USBHAL_CRC5 0x00000002 // (Host) Token CRC5 check failed +#define USBHAL_HOST_EOF 0x00000002 // (Host) EOF not reached before next SOF +#define USBHAL_CRC16 0x00000004 // Data packet CRC error +#define USBHAL_DFN8 0x00000008 // Data field size not n*8 bits +#define USBHAL_BTO_ERR 0x00000010 // Bus turn-around timeout +#define USBHAL_DMA_ERR 0x00000020 // DMA error, unable to read/write memory +#define USBHAL_BTS_ERR 0x00000080 // Bit-stuffing error +#define USBHAL_XFER_ID 0x00000100 // Unable to identify transfer EP +#define USBHAL_NO_EP 0x00000200 // Invalid endpoint number +#define USBHAL_DMA_ERR2 0x00000400 // Error starting DMA transaction + + +/************************************************************************* + Function: + void USBHALHandleBusEvent ( void ) + + Description: + This routine checks the USB for any events that may + have occured and handles them appropriately. It may + be called directly to poll the USB and handle events + or it may be called in response to an interrupt. + + Precondition: + USBInitialize must have been called to initialize the + USB SW stack. + + Parameters: + None + + Return Values: + None + + Side Effects: + Depend on the event that may have occured. + + Remarks: + None + + *************************************************************************/ + +void USBHALHandleBusEvent ( void ); + + +/************************************************************************* + Function: + BOOL USBHALStallPipe( TRANSFER_FLAGS pipe ) + + Description: + This routine stalls the given endpoint. + + Preconditions: + USBHALInitialize must have been called to initialize + the USB HAL. + + Parameters: + pipe - Uses the TRANSFER_FLAGS (see USBCommon.h) format to + identify the endpoint and direction making up the + pipe to stall. + + Note: Only ep_num and direction fields are required. + + Return Values: + TRUE if able to stall endpoint, FALSE if not. + + Side Effects: + The endpoint will stall if additional data transfer is + attempted. + Given endpoint has been stalled. + + Remarks: + Starting another data transfer automatically + "un-stalls" the endpoint. + + *************************************************************************/ +/* + Note: This function is implemented as a macro, calling directly into + an internal HAL routine. + */ + +#define USBHALStallPipe OTGCORE_StallPipe + +BOOL USBHALStallPipe( TRANSFER_FLAGS pipe ); + + +/****************************************************************************** + Function: + BOOL USBHALUnstallPipe( TRANSFER_FLAGS pipe ) + + Description: + This routine clears the stall condition for the given pipe. + + PreCondition: + Assumes OTGCORE_DeviceEnable has been called and + OTGCORE_StallPipe has been called on the given pipe. + + Parameters: + pipe - Uses the TRANSFER_FLAGS (see USBCommon.h) format to + identify the endpoint and direction making up the + pipe to unstall. + + Return Values: + TRUE if able to stall the pipe, FALSE if not. + + Side Effects: + The BSTALL and UOWN bits (and all other control bits) in + the BDT for the given pipe will be cleared. + + Remarks: + None + + *****************************************************************************/ +/* + Note: This function is implemented as a macro, calling directly into + an internal HAL routine. + */ + +#define USBHALUnstallPipe OTGCORE_UnstallPipe + +BOOL USBHALUnstallPipe( TRANSFER_FLAGS pipe ); + + +/************************************************************************** + Function: + USBHALGetStalledEndpoints + + Description: + This function returns a 16-bit bitmapped value with a + bit set in the position of any endpoint that is stalled + (i.e. if endpoint 0 is stalled then bit 0 is set, if + endpoint 1 is stalled then bit 1 is set, etc.). + + Preconditions: + USBHALInitialize must have been called to initialize + the USB HAL. + + Parameters: + None + + Return Values: + Bitmap of the currently stalled endpoints (see overview). + + Remarks: + None + *************************************************************************/ + +/* + Note: This function is implemented as a macro, calling directly into + a HAL routine. + */ + +#define USBHALGetStalledEndpoints OTGCORE_GetStalledEndpoints + +UINT16 USBHALGetStalledEndpoints ( void ); + + +/****************************************************************************** + Function: + BOOL USBHALFlushPipe( TRANSFER_FLAGS pipe ) + + Description: + This routine clears any pending transfers on the given + pipe. + + Preconditions: + USBHALInitialize must have been called to initialize the + USB HAL. + + The caller must ensure that there is no possible way for + hardware to be currently accessing the pipe (see notes). + + Parameters: + pipe - Uses the TRANSFER_FLAGS (see USBCommon.h) format to + identify the endpoint and direction making up the + pipe to flush. + + Return Values: + TRUE if successful, FALSE if not. + + Side Effects: + Transfer data for this pipe has been zero'd out. + + Remarks: + This routine ignores the normal HW protocol for ownership + of the pipe data and flushes the pipe, even if it is in + process. Thus, the caller must ensure that data transfer + cannot be in process. This situation occurs when a + transfer has been terminated early by the host. + *****************************************************************************/ + +BOOL USBHALFlushPipe( TRANSFER_FLAGS pipe ); + + +/************************************************************************** + Function: + USBHALTransferData + + Description: + This routine prepares to transfer data on the USB. + If the system is in device mode, the actual transfer + will not occur until the host peforms an OUT request + to the given endpoint. If the system is in host mode, + the transfer will not start until the token has been + sent on the bus. + + Preconditions: + 1. USBHALInitialize must have been called to + initialize the USB HAL. + 2. The endpoint through which the data will be + transferred must be configured as appropriate by a + call to USBHALSetEpConfiguration. + 3. The bus must have been enumerated (either as a host + or device). Except for EP0 transfers. + + Parameters: + flags - Flags consists of the endpoint number OR'd + with one or more flags indicating transfer + direction and such (see "Data Transfer + Macros" in USBCommon.h): + + 7 6 5 4 3 2 1 0 - Description + | | | | \_____/ + | | | | +----- Endpoint Number + | | | +---------- Short or zero-size pkt + | | +------------ Data Toggle 0/1 + | +-------------- Force Data Toggle + +---------------- 1=Transmit/0=Receive + + buffer Address of the buffer to receive data. + + size Number of bytes of data to transfer. + + Return Values: + TRUE if the HAL was able to successfully start the + data transfer, FALSE if not. + + Side Effects: + The HAL has prepared to transfer the data on the USB. + + Ramarks: + The HAL will continue the data transfer, keeping track + of the buffer address, data remaining, and ping-pong + buffer details internally when USBHALHandleBusEvent is + called (either polled or in response to an interrupt). + The caller will receive notification that the transfer + has completed when the EVT_XFER event is passed into + the USBHALBusEventCallout call-out function. + + *************************************************************************/ + +BOOL USBHALTransferData ( TRANSFER_FLAGS flags, + void *buffer, + unsigned int size ); + + +/************************************************************************* + Function: + USBHALSetEpConfiguration + + Description: + This routine allows the caller to configure various + options (see "Flags for USBHALSetEpConfiguration", + below) and set the behavior for the given endpoint. + + Precondition: + USBHALInitialize has been called. + + Parameters: + ep_num - Number of endpoint to configur, Must be + (ep_num >=0) && (ep_num <= USB_DEV_HIGHEST_EP_NUMBER) + max_pkt_size Size of largest packet this enpoint can + transfer. + + flags - Configuration flags (see below) + + Return Values: + TRUE if successful, FALSE if not. + + Side Effects: + The endpoint has been configured as desired. + + Remarks: + The base address and size of the buffer is not set by + this routine. Those features of an endpoint are + dynamically managed by the USBHALTransferData routine. + An endpoint can be "de-configured" by setting its max + packet size to 0. When doing this, you should also + set all flags to 0. + *************************************************************************/ + +BOOL USBHALSetEpConfiguration ( BYTE ep_num, UINT16 max_pkt_size, UINT16 flags ); + +/* Flags for USBHALSetEpConfiguration */ +#if defined(__18CXX) + #define USB_HAL_TRANSMIT 0x0400 // Enable EP for transmitting data + #define USB_HAL_RECEIVE 0x0200 // Enable EP for receiving data + #define USB_HAL_HANDSHAKE 0x1000 // Enable EP to give ACK/NACK (non isoch) + + #define USB_HAL_NO_INC 0x0010 // Use for DMA to another device FIFO + #define USB_HAL_HW_KEEPS 0x0020 // Cause HW to keep EP +#else + #define USB_HAL_TRANSMIT 0x0400 // Enable EP for transmitting data + #define USB_HAL_RECEIVE 0x0800 // Enable EP for receiving data + #define USB_HAL_HANDSHAKE 0x0100 // Enable EP to give ACK/NACK (non isoch) + + /* Does not work, Fix this if needed. 3/1/07 - Bud + #define USB_HAL_NO_INC 0x0010 // Use for DMA to another device FIFO + #define USB_HAL_HW_KEEPS 0x0020 // Cause HW to keep EP + */ + #define USB_HAL_ALLOW_HUB 0x8000 // (host only) Enable low-spd hub support + #define USB_HAL_NO_RETRY 0x4000 // (host only) disable auto-retry on NACK +#endif + + +/************************************************************************* + Function: + USBHALInitialize + + Description: + This call performs the basic initialization of the USB + HAL. This routine must be called before any of the + other HAL interface routines are called. + + Precondition: + The system has been initialized. + + Paramters: + flags - Initialization flags + + Return Values: + TRUE if successful, FALSE if not. + + Side Effects: + The USB HAL SW stack was initialized. + + Remarks: + This routine can be called to reset the controller. + + *************************************************************************/ + +BOOL USBHALInitialize ( unsigned long flags ); + +#endif // _USB_HAL_H_ +/************************************************************************* + * EOF + */ + diff --git a/software/front/US_BootLoader.X/usb/usb_hal_pic24.c b/software/front/US_BootLoader.X/usb/usb_hal_pic24.c new file mode 100644 index 0000000..467b7c5 --- /dev/null +++ b/software/front/US_BootLoader.X/usb/usb_hal_pic24.c @@ -0,0 +1,183 @@ +/****************************************************************************** + + USB Hardware Abstraction Layer (HAL) + +Summary: + This file abstracts the hardware interface. The USB stack firmware can be + compiled to work on different USB microcontrollers, such as PIC18 and PIC24. + The USB related special function registers and bit names are generally very + similar between the device families, but small differences in naming exist. + +Description: + This file abstracts the hardware interface. The USB stack firmware can be + compiled to work on different USB microcontrollers, such as PIC18 and PIC24. + The USB related special function registers and bit names are generally very + similar between the device families, but small differences in naming exist. + + In order to make the same set of firmware work accross the device families, + when modifying SFR contents, a slightly abstracted name is used, which is + then "mapped" to the appropriate real name in the usb_hal_picxx.h header. + + Make sure to include the correct version of the usb_hal_picxx.h file for + the microcontroller family which will be used. + + When including this file in a new project, this file can either be + referenced from the directory in which it was installed or copied + directly into the user application folder. If the first method is + chosen to keep the file located in the folder in which it is installed + then include paths need to be added so that the library and the + application both know where to reference each others files. If the + application folder is located in the same folder as the Microchip + folder (like the current demo folders), then the following include + paths need to be added to the application's project: + + . + + ..\\..\\Microchip\\Include + + If a different directory structure is used, modify the paths as + required. An example using absolute paths instead of relative paths + would be the following: + + C:\\Microchip Solutions\\Microchip\\Include + + C:\\Microchip Solutions\\My Demo Application + + +*******************************************************************************/ +//DOM-IGNORE-BEGIN +/****************************************************************************** + + File Description: + + This file defines the interface to the USB hardware abstraction layer. + + Filename: usb_hal_pic24.c + Dependancies: none + Processor: PIC24F USB Microcontrollers + Hardware: PIC24F USB Microcontrollers + Compiler: Microchip C30 (for PIC24) + Company: Microchip Technology, Inc. + + Software License Agreement: + + The software supplied herewith by Microchip Technology Incorporated + (the "Company") for its PICmicro(R) Microcontroller is intended and + supplied to you, the Company's customer, for use solely and + exclusively on Microchip PICmicro Microcontroller products. The + software is owned by the Company and/or its supplier, and is + protected under applicable copyright laws. All rights are reserved. + Any use in violation of the foregoing restrictions may subject the + user to criminal sanctions under applicable laws, as well as to + civil liability for the breach of the terms and conditions of this + license. + + THIS SOFTWARE IS PROVIDED IN AN "AS IS" CONDITION. NO WARRANTIES, + WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED + TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT, + IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR + CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. + + *************************************************************************/ + +//DOM-IGNORE-BEGIN +/******************************************************************** + Change History: + Rev Description + ---- ----------- + 2.7 Created USBSleepOnSuspend() function to simply process of putting + the PIC24F device in the correct state before issuing the sleep + instruction and returning the device to the correct state after + exiting sleep. +********************************************************************/ +//DOM-IGNORE-END + +#ifndef USB_HAL_PIC24F_C +#define USB_HAL_PIC24F_C + +#include "usb.h" + +//Only include the source for this file if you are using C30. This code +// applies only to PIC24 parts. +#if defined(__C30__) || defined __XC16__ + +/******************************************************************** +Function: + BOOL USBSleepOnSuspend(void) + +Summary: + Places the PIC24F core into sleep and sets up the USB module + to wake up the device on USB activity. + +PreCondition: + IPL (in the SR register) must be non-zero. + +Parameters: + None + +Return Values: + TRUE - if entered sleep successfully + FALSE - if there was an error entering sleep + +Remarks: + Please note that before calling this function that it is the + responsibility of the application to place all of the other + peripherals or board features into a lower power state if + required. + +*******************************************************************/ +BOOL USBSleepOnSuspend(void) +{ + unsigned int U1EIE_save, U1IE_save, U1OTGIE_save; + unsigned char USB1IE_save; + + #if defined(USB_POLLING) + //If IPL is equal to 0 then there is no way for the USB module to + // generate an interrupt to wake up the device. + if(_IPL == 0) + { + return FALSE; + } + + //Set the interrupt priority to a level that will wake up the part (>0) + // but will not cause a interrupt vector jump (USB1IP<=IPL) + _USB1IP = 1; + #endif + + //Save the old interrupt and CPU settings + U1EIE_save = U1EIE; + U1IE_save = U1IE; + U1OTGIE_save = U1OTGIE; + USB1IE_save = IEC5bits.USB1IE; + + //Disable all USB interrupts + U1EIE = 0; + U1IE = 0; + U1OTGIE = 0; + + //Enable the interrupt + IFS5bits.USB1IF = 0; + U1OTGIEbits.ACTVIE = 1; + USBClearInterruptFlag(USBActivityIFReg,USBActivityIFBitNum); + IEC5bits.USB1IE = 1; + + Sleep(); + + #if defined(USB_POLLING) + //Disable the interrupt + _USB1IP = 0; + #endif + + //restore the previous interrupt settings + IEC5bits.USB1IE = USB1IE_save; + U1EIE = U1EIE_save; + U1IE = U1IE_save; + U1OTGIE = U1OTGIE_save; + + return TRUE; +} + +#endif //__C30__ + +#endif //USB_HAL_PIC24F_C diff --git a/software/front/US_BootLoader.X/usb/usb_hal_pic24f.h b/software/front/US_BootLoader.X/usb/usb_hal_pic24f.h new file mode 100644 index 0000000..1c41ebe --- /dev/null +++ b/software/front/US_BootLoader.X/usb/usb_hal_pic24f.h @@ -0,0 +1,579 @@ +/****************************************************************************** + + USB Hardware Abstraction Layer (HAL) + +Summary: + This file abstracts the hardware interface. The USB stack firmware can be + compiled to work on different USB microcontrollers, such as PIC18 and PIC24. + The USB related special function registers and bit names are generally very + similar between the device families, but small differences in naming exist. + +Description: + This file abstracts the hardware interface. The USB stack firmware can be + compiled to work on different USB microcontrollers, such as PIC18 and PIC24. + The USB related special function registers and bit names are generally very + similar between the device families, but small differences in naming exist. + + In order to make the same set of firmware work accross the device families, + when modifying SFR contents, a slightly abstracted name is used, which is + then "mapped" to the appropriate real name in the usb_hal_picxx.h header. + + Make sure to include the correct version of the usb_hal_picxx.h file for + the microcontroller family which will be used. + + When including this file in a new project, this file can either be + referenced from the directory in which it was installed or copied + directly into the user application folder. If the first method is + chosen to keep the file located in the folder in which it is installed + then include paths need to be added so that the library and the + application both know where to reference each others files. If the + application folder is located in the same folder as the Microchip + folder (like the current demo folders), then the following include + paths need to be added to the application's project: + + . + + ..\\..\\Microchip\\Include + + If a different directory structure is used, modify the paths as + required. An example using absolute paths instead of relative paths + would be the following: + + C:\\Microchip Solutions\\Microchip\\Include + + C:\\Microchip Solutions\\My Demo Application + + +*******************************************************************************/ +//DOM-IGNORE-BEGIN +/****************************************************************************** + + File Description: + + This file defines the interface to the USB hardware abstraction layer. + + Filename: usb_hal_pic24.h + Dependancies: none + Processor: PIC24F USB Microcontrollers + Hardware: PIC24F USB Microcontrollers + Compiler: Microchip C30 (for PIC24) + Company: Microchip Technology, Inc. + + Software License Agreement: + + The software supplied herewith by Microchip Technology Incorporated + (the "Company") for its PICmicro(R) Microcontroller is intended and + supplied to you, the Company's customer, for use solely and + exclusively on Microchip PICmicro Microcontroller products. The + software is owned by the Company and/or its supplier, and is + protected under applicable copyright laws. All rights are reserved. + Any use in violation of the foregoing restrictions may subject the + user to criminal sanctions under applicable laws, as well as to + civil liability for the breach of the terms and conditions of this + license. + + THIS SOFTWARE IS PROVIDED IN AN "AS IS" CONDITION. NO WARRANTIES, + WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED + TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT, + IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR + CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. + + *************************************************************************/ + +//DOM-IGNORE-BEGIN +/******************************************************************** + Change History: + Rev Description + ---- ----------- + 2.6 Changed the inplementation of the interrupt clearing macro + to be more efficient. + + 2.6a Added DisableNonZeroEndpoints() function + + 2.7 Addition of ConvertToVirtualAddress() function for + compatibility with PIC32. + + Added prototype for USBSleepOnSuspend() function. This + function shows how to put the PIC24F to sleep while the USB + module is in suspend and have the USB module wake up the device + on activity on the bus. + + 2.7a No change + + 2.8 Added USTAT_FIELDS typedef and associated macros. +********************************************************************/ +//DOM-IGNORE-END + +#ifndef USB_HAL_PIC24F_H +#define USB_HAL_PIC24F_H + +/*****************************************************************************/ +/****** include files ********************************************************/ +/*****************************************************************************/ + +#include "Compiler.h" +#include "usb_config.h" + +/*****************************************************************************/ +/****** Constant definitions *************************************************/ +/*****************************************************************************/ + +//----- USBEnableEndpoint() input defintions ---------------------------------- +#define USB_HANDSHAKE_ENABLED 0x01 +#define USB_HANDSHAKE_DISABLED 0x00 + +#define USB_OUT_ENABLED 0x08 +#define USB_OUT_DISABLED 0x00 + +#define USB_IN_ENABLED 0x04 +#define USB_IN_DISABLED 0x00 + +#define USB_ALLOW_SETUP 0x00 +#define USB_DISALLOW_SETUP 0x10 + +#define USB_STALL_ENDPOINT 0x02 + +//----- usb_config.h input defintions ----------------------------------------- +#define USB_PULLUP_ENABLE 0x00 +//#define USB_PULLUP_DISABLE 0x00 + +#define USB_INTERNAL_TRANSCEIVER 0x00 +#define USB_EXTERNAL_TRANSCEIVER 0x01 + +#define USB_FULL_SPEED 0x04 +//USB_LOW_SPEED not currently supported in PIC24F USB products + +#define USB_OTG_ENABLE 0x04 + +//----- Interrupt Flag definitions -------------------------------------------- +#define USBTransactionCompleteIE U1IEbits.TRNIE +#define USBTransactionCompleteIF U1IRbits.TRNIF +#define USBTransactionCompleteIFReg U1IR +#define USBTransactionCompleteIFBitNum 3 + +#define USBResetIE U1IEbits.URSTIE +#define USBResetIF U1IRbits.URSTIF +#define USBResetIFReg U1IR +#define USBResetIFBitNum 0 + +#define USBIdleIE U1IEbits.IDLEIE +#define USBIdleIF U1IRbits.IDLEIF +#define USBIdleIFReg U1IR +#define USBIdleIFBitNum 4 + +#define USBActivityIE U1OTGIEbits.ACTVIE +#define USBActivityIF U1OTGIRbits.ACTVIF +#define USBActivityIFReg U1OTGIR +#define USBActivityIFBitNum 4 + +#define USBSOFIE U1IEbits.SOFIE +#define USBSOFIF U1IRbits.SOFIF +#define USBSOFIFReg U1IR +#define USBSOFIFBitNum 2 + +#define USBStallIE U1IEbits.STALLIE +#define USBStallIF U1IRbits.STALLIF +#define USBStallIFReg U1IR +#define USBStallIFBitNum 7 + +#define USBErrorIE U1IEbits.UERRIE +#define USBErrorIF U1IRbits.UERRIF +#define USBErrorIFReg U1IR +#define USBErrorIFBitNum 1 + +#define USBT1MSECIE U1OTGIEbits.T1MSECIE +#define USBT1MSECIF U1OTGIRbits.T1MSECIF +#define USBT1MSECIFReg U1OTGIR +#define USBT1MSECIFBitNum 6 + +#define USBIDIE U1OTGIEbits.IDIE +#define USBIDIF U1OTGIRbits.IDIF +#define USBIDIFReg U1OTGIR +#define USBIDIFBitNum 7 + +//----- Event call back defintions -------------------------------------------- +#if defined(USB_DISABLE_SOF_HANDLER) + #define USB_SOF_INTERRUPT 0x00 +#else + #define USB_SOF_INTERRUPT 0x04 +#endif +#if defined(USB_DISABLE_ERROR_HANDLER) + #define USB_ERROR_INTERRUPT 0x02 +#else + #define USB_ERROR_INTERRUPT 0x02 +#endif + +//----- USB module control bits ----------------------------------------------- +#define USBPingPongBufferReset U1CONbits.PPBRST +#define USBSE0Event U1CONbits.SE0 +#define USBSuspendControl U1PWRCbits.USUSPEND +#define USBPacketDisable U1CONbits.PKTDIS +#define USBResumeControl U1CONbits.RESUME + +//----- BDnSTAT bit definitions ----------------------------------------------- +#define _BSTALL 0x04 //Buffer Stall enable +#define _DTSEN 0x08 //Data Toggle Synch enable +#define _DAT0 0x00 //DATA0 packet expected next +#define _DAT1 0x40 //DATA1 packet expected next +#define _DTSMASK 0x40 //DTS Mask +#define _USIE 0x80 //SIE owns buffer +#define _UCPU 0x00 //CPU owns buffer +#define _STAT_MASK 0xFC + +//----- USTAT bit definitions ------------------------------------------------- +#define USTAT_EP0_PP_MASK ~0x04 +#define USTAT_EP_MASK 0xFC +#define USTAT_EP0_OUT 0x00 +#define USTAT_EP0_OUT_EVEN 0x00 +#define USTAT_EP0_OUT_ODD 0x04 +#define USTAT_EP0_IN 0x08 +#define USTAT_EP0_IN_EVEN 0x08 +#define USTAT_EP0_IN_ODD 0x0C +#define ENDPOINT_MASK 0b11110000 + +//----- U1OTGCON bit definitions ---------------------------------------------- +#define USB_OTG_DPLUS_ENABLE 0x80 + +//----- U1EP bit definitions -------------------------------------------------- +#define UEP_STALL 0x0002 +// Cfg Control pipe for this ep +#define EP_CTRL 0x0C + + +#define BDT_BASE_ADDR_TAG __attribute__ ((aligned (512))) +#define CTRL_TRF_SETUP_ADDR_TAG +#define CTRL_TRF_DATA_ADDR_TAG + +//----- Depricated defintions - will be removed at some point of time---------- +//--------- Depricated in v2.2 +#define _LS 0x00 // Use Low-Speed USB Mode +#define _FS 0x00 // Use Full-Speed USB Mode +#define _TRINT 0x00 // Use internal transceiver +#define _TREXT 0x00 // Use external transceiver +#define _PUEN 0x00 // Use internal pull-up resistor +#define _OEMON 0x00 // Use SIE output indicator + +/*****************************************************************************/ +/****** Type definitions *****************************************************/ +/*****************************************************************************/ + +// Buffer Descriptor Status Register layout. +typedef union _BD_STAT +{ + struct{ + unsigned :2; //Byte count + unsigned BSTALL :1; //Buffer Stall Enable + unsigned DTSEN :1; //Data Toggle Synch Enable + unsigned :2; //Reserved - write as 00 + unsigned DTS :1; //Data Toggle Synch Value + unsigned UOWN :1; //USB Ownership + }; + struct{ + unsigned :2; + unsigned PID0 :1; + unsigned PID1 :1; + unsigned PID2 :1; + unsigned PID3 :1; + }; + struct{ + unsigned :2; + unsigned PID :4; // Packet Identifier + }; + BYTE Val; +} BD_STAT; //Buffer Descriptor Status Register + +// BDT Entry Layout +typedef union __BDT +{ + union + { + struct + { + BYTE CNT __attribute__ ((packed)); + BD_STAT STAT __attribute__ ((packed)); + }; + struct + { + WORD count:10; //test + BYTE :6; + WORD ADR; //Buffer Address + }; + }; + DWORD Val; + WORD v[2]; +} BDT_ENTRY; + +// USTAT Register Layout +typedef union __USTAT +{ + struct + { + unsigned char filler1 :2; + unsigned char ping_pong :1; + unsigned char direction :1; + unsigned char endpoint_number :4; + }; + BYTE Val; +} USTAT_FIELDS; + +//Macros for fetching parameters from a USTAT_FIELDS variable. +#define USBHALGetLastEndpoint(stat) stat.endpoint_number +#define USBHALGetLastDirection(stat) stat.direction +#define USBHALGetLastPingPong(stat) stat.ping_pong + + +typedef union _POINTER +{ + struct + { + BYTE bLow; + BYTE bHigh; + //byte bUpper; + }; + WORD _word; // bLow & bHigh + + //pFunc _pFunc; // Usage: ptr.pFunc(); Init: ptr.pFunc = &; + + BYTE* bRam; // Ram byte pointer: 2 bytes pointer pointing + // to 1 byte of data + WORD* wRam; // Ram word poitner: 2 bytes poitner pointing + // to 2 bytes of data + + ROM BYTE* bRom; // Size depends on compiler setting + ROM WORD* wRom; + //rom near byte* nbRom; // Near = 2 bytes pointer + //rom near word* nwRom; + //rom far byte* fbRom; // Far = 3 bytes pointer + //rom far word* fwRom; +} POINTER; + +/*****************************************************************************/ +/****** Function prototypes and macro functions ******************************/ +/*****************************************************************************/ + +#define ConvertToPhysicalAddress(a) ((WORD)(a)) +#define ConvertToVirtualAddress(a) ((void *)(a)) +#define USBClearUSBInterrupt() IFS5bits.USB1IF = 0; +#if defined(USB_INTERRUPT) + #define USBMaskInterrupts() {IEC5bits.USB1IE = 0;} + #define USBUnmaskInterrupts() {IEC5bits.USB1IE = 1;} +#else + #define USBMaskInterrupts() + #define USBUnmaskInterrupts() +#endif + +//STALLIE, IDLEIE, TRNIE, and URSTIE are all enabled by default and are required +#if defined(USB_INTERRUPT) + #define USBEnableInterrupts() {IEC5bits.USB1IE=1;} +#else + #define USBEnableInterrupts() +#endif + +#define USBDisableInterrupts() {IEC5bits.USB1IE=0;} +#define USBInterruptFlag IFS5bits.USB1IF + + + +#if (USB_PULLUP_OPTION == USB_PULLUP_ENABLE) || !defined(USB_PULLUP_OPTION) + #define PullUpConfiguration() U1OTGCONbits.OTGEN = 0; +#else + #define PullUpConfiguration() U1OTGCONbits.OTGEN = 1; U1OTGCON &= 0xFF0F; +#endif + + #define SetConfigurationOptions() {\ + U1CNFG1 = USB_PING_PONG_MODE;\ + U1CNFG2 = USB_TRANSCEIVER_OPTION;\ + PullUpConfiguration();\ + U1EIE = 0x9F;\ + U1IE = 0x99 | USB_SOF_INTERRUPT | USB_ERROR_INTERRUPT;\ + } + + +/******************************************************************** +Function: + BOOL USBSleepOnSuspend(void) + +Summary: + Places the PIC24F core into sleep and sets up the USB module + to wake up the device on USB activity. + +PreCondition: + IPL (in the SR register) must be non-zero. + +Parameters: + None + +Return Values: + TRUE - if entered sleep successfully + FALSE - if there was an error entering sleep + +Remarks: + Please note that before calling this function that it is the + responsibility of the application to place all of the other + peripherals or board features into a lower power state if + required. + +*******************************************************************/ +BOOL USBSleepOnSuspend(void); + +/**************************************************************** + Function: + void USBPowerModule(void) + + Description: + This macro is used to power up the USB module if required
+ PIC18: defines as nothing
+ PIC24: defines as U1PWRCbits.USBPWR = 1;
+ + Parameters: + None + + Return Values: + None + + Remarks: + None + + ****************************************************************/ +#define USBPowerModule() U1PWRCbits.USBPWR = 1; + +/**************************************************************** + Function: + void USBModuleDisable(void) + + Description: + This macro is used to disable the USB module + + Parameters: + None + + Return Values: + None + + Remarks: + None + + ****************************************************************/ +#define USBModuleDisable() {\ + U1CON = 0;\ + U1IE = 0;\ + U1OTGIE = 0;\ + U1PWRCbits.USBPWR = 1;\ + USBDeviceState = DETACHED_STATE;\ +} + +/**************************************************************** + Function: + USBSetBDTAddress(addr) + + Description: + This macro is used to power up the USB module if required + + Parameters: + None + + Return Values: + None + + Remarks: + None + + ****************************************************************/ +#define USBSetBDTAddress(addr) U1BDTP1 = (((unsigned int)addr)/256); + +/**************************************************************** + Function: + void USBClearInterruptRegister(int register) + + Description: + Clears all of the interrupts in the requested register + + Parameters: + register - the regsister that needs to be cleared. + + Return Values: + None + + Remarks: + Note that on these devices to clear an interrupt you must + write a '1' to the interrupt location. + + ****************************************************************/ +#define USBClearInterruptRegister(reg) reg = 0xFFFF; + +/******************************************************************** + Function: + void USBClearInterruptFlag(register, BYTE if_flag_offset) + + Summary: + Clears the specified USB interrupt flag. + + PreCondition: + None + + Parameters: + register - the register mnemonic for the register holding the interrupt + flag to be cleared + BYTE if_flag_offset - the bit position offset (for the interrupt flag to + clear) from the "right of the register" + + Return Values: + None + + Remarks: + Individual USB interrupt flag bits are cleared by writing '1' to the + bit, in a word write operation. + + *******************************************************************/ +#define USBClearInterruptFlag(reg_name, if_flag_offset) (reg_name = (1 << if_flag_offset)) + +/******************************************************************** + Function: + void DisableNonZeroEndpoints(UINT8 last_ep_num) + + Summary: + Clears the control registers for the specified non-zero endpoints + + PreCondition: + None + + Parameters: + UINT8 last_ep_num - the last endpoint number to clear. This + number should include all endpoints used in any configuration. + + Return Values: + None + + Remarks: + None + + *******************************************************************/ +#define DisableNonZeroEndpoints(last_ep_num) memset((void*)&U1EP1,0x00,(last_ep_num * 2)); + + +/*****************************************************************************/ +/****** Compiler checks ******************************************************/ +/*****************************************************************************/ + +//Definitions for the BDT +#ifndef USB_PING_PONG_MODE + #error "No ping pong mode defined." +#endif + +/*****************************************************************************/ +/****** Extern variable definitions ******************************************/ +/*****************************************************************************/ + +#if defined(USB_SUPPORT_DEVICE) | defined(USB_SUPPORT_OTG) + #if !defined(USBDEVICE_C) + //extern USB_VOLATILE USB_DEVICE_STATE USBDeviceState; + extern USB_VOLATILE BYTE USBActiveConfiguration; + extern USB_VOLATILE IN_PIPE inPipes[1]; + extern USB_VOLATILE OUT_PIPE outPipes[1]; + #endif + extern volatile BDT_ENTRY* pBDTEntryOut[USB_MAX_EP_NUMBER+1]; + extern volatile BDT_ENTRY* pBDTEntryIn[USB_MAX_EP_NUMBER+1]; +#endif + +#endif //USB_HAL_PIC24F_H diff --git a/software/front/US_BootLoader.X/usb/usb_hal_pic32.h b/software/front/US_BootLoader.X/usb/usb_hal_pic32.h new file mode 100644 index 0000000..d475576 --- /dev/null +++ b/software/front/US_BootLoader.X/usb/usb_hal_pic32.h @@ -0,0 +1,506 @@ +/****************************************************************************** + + USB Hardware Abstraction Layer (HAL) (Header File) + +Summary: + This file abstracts the hardware interface. The USB stack firmware can be + compiled to work on different USB microcontrollers, such as PIC18 and PIC24. + The USB related special function registers and bit names are generally very + similar between the device families, but small differences in naming exist. + +Description: + This file abstracts the hardware interface. The USB stack firmware can be + compiled to work on different USB microcontrollers, such as PIC18 and PIC24. + The USB related special function registers and bit names are generally very + similar between the device families, but small differences in naming exist. + + In order to make the same set of firmware work accross the device families, + when modifying SFR contents, a slightly abstracted name is used, which is + then "mapped" to the appropriate real name in the usb_hal_picxx.h header. + + Make sure to include the correct version of the usb_hal_picxx.h file for + the microcontroller family which will be used. + + This file is located in the "\\\Microchip\\Include\\USB" + directory. + + When including this file in a new project, this file can either be + referenced from the directory in which it was installed or copied + directly into the user application folder. If the first method is + chosen to keep the file located in the folder in which it is installed + then include paths need to be added so that the library and the + application both know where to reference each others files. If the + application folder is located in the same folder as the Microchip + folder (like the current demo folders), then the following include + paths need to be added to the application's project: + + . + + ..\\..\\Microchip\\Include + + If a different directory structure is used, modify the paths as + required. An example using absolute paths instead of relative paths + would be the following: + + C:\\Microchip Solutions\\Microchip\\Include + + C:\\Microchip Solutions\\My Demo Application + + +*******************************************************************************/ +//DOM-IGNORE-BEGIN +/****************************************************************************** + + File Description: + + This file defines the interface to the USB hardware abstraction layer. + + Filename: usb_hal.h + Dependancies: none + Processor: PIC18, PIC24, or PIC32 USB Microcontrollers + Hardware: The code is natively intended to be used on the following + hardware platforms: PICDEM™ FS USB Demo Board, + PIC18F87J50 FS USB Plug-In Module, or + Explorer 16 + PIC24 USB PIM. The firmware may be + modified for use on other USB platforms by editing the + HardwareProfile.h file. + Compiler: Microchip C18 (for PIC18) or C30 (for PIC24) + Company: Microchip Technology, Inc. + + Software License Agreement: + + The software supplied herewith by Microchip Technology Incorporated + (the “Company”) for its PICmicro® Microcontroller is intended and + supplied to you, the Company’s customer, for use solely and + exclusively on Microchip PICmicro Microcontroller products. The + software is owned by the Company and/or its supplier, and is + protected under applicable copyright laws. All rights are reserved. + Any use in violation of the foregoing restrictions may subject the + user to criminal sanctions under applicable laws, as well as to + civil liability for the breach of the terms and conditions of this + license. + + THIS SOFTWARE IS PROVIDED IN AN “AS IS” CONDITION. NO WARRANTIES, + WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED + TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT, + IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR + CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. + + Change History: + Rev Description + ---- ----------- + 2.6 Changed the inplementation of the interrupt clearing macro + to be more efficient. + + 2.6a Added DisableNonZeroEndpoints() function + + 2.7 Changed the definition of USB_PULLUP_ENABLE and USB_PULLUP_DISABLE + to be more useful. + + Added CovertToVirtualAddress() function for compatibility with PIC32. + + Added USBDisableInterrupts() function that disables the USB + interrupts on the initialization function. This is required if + running a dual role application where the host uses interrupts + and the device mode runs polling mode. In this case the host + doesn't disable the interrupts so the first interrupt caused by + the USB device will incorrectly vector to the host interrupt + interrupt handler. + + Modified the SetConfigurationOptions() function to explicitly + reconfigure the pull-up/pull-down settings for the D+/D- pins + in case the host leaves the pull-downs enabled. + + 2.7a Fixed USBSetBDTAddress() macro, so that it correctly loads the entire + U1BDTPx register set, enabling the BDT to be anywhere in RAM. Previous + implementation wouldn't work on a large RAM device if the linker + decided to place the BDT[] array at an address > 64kB + + 2.8 Added USTAT_FIELDS typedef and associated macros. + + *************************************************************************/ + +#if !defined(USB_HAL_PIC32_H) +#define USB_HAL_PIC32_H + +#include "Compiler.h" +#include "usb_config.h" + +#if (USB_PING_PONG_MODE != USB_PING_PONG__FULL_PING_PONG) + #error "PIC32 only supports full ping pong mode. A different mode other than full ping pong is selected in the usb_config.h file." +#endif + +#define USBSetBDTAddress(addr) {U1BDTP3 = (((DWORD)KVA_TO_PA(addr)) >> 24); U1BDTP2 = (((DWORD)KVA_TO_PA(addr)) >> 16); U1BDTP1 = (((DWORD)KVA_TO_PA(addr)) >> 8);} +#define USBPowerModule() U1PWRCbits.USBPWR = 1; +#define USBPingPongBufferReset U1CONbits.PPBRST + +#define USBTransactionCompleteIE U1IEbits.TRNIE +#define USBTransactionCompleteIF U1IRbits.TRNIF +#define USBTransactionCompleteIFReg U1IR +#define USBTransactionCompleteIFBitNum 3 + +#define USBResetIE U1IEbits.URSTIE +#define USBResetIF U1IRbits.URSTIF +#define USBResetIFReg U1IR +#define USBResetIFBitNum 0 + +#define USBIdleIE U1IEbits.IDLEIE +#define USBIdleIF U1IRbits.IDLEIF +#define USBIdleIFReg U1IR +#define USBIdleIFBitNum 4 + +#define USBActivityIE U1OTGIEbits.ACTVIE +#define USBActivityIF U1OTGIRbits.ACTVIF +#define USBActivityIFReg U1OTGIR +#define USBActivityIFBitNum 4 + +#define USBSOFIE U1IEbits.SOFIE +#define USBSOFIF U1IRbits.SOFIF +#define USBSOFIFReg U1IR +#define USBSOFIFBitNum 2 + +#define USBStallIE U1IEbits.STALLIE +#define USBStallIF U1IRbits.STALLIF +#define USBStallIFReg U1IR +#define USBStallIFBitNum 7 + +#define USBErrorIE U1IEbits.UERRIE +#define USBErrorIF U1IRbits.UERRIF +#define USBErrorIFReg U1IR +#define USBErrorIFBitNum 1 + +#define USBSE0Event 0// U1IRbits.URSTIF// U1CONbits.SE0 +#define USBSuspendControl U1PWRCbits.USUSPEND +#define USBPacketDisable U1CONbits.PKTDIS +#define USBResumeControl U1CONbits.RESUME + +#define USBT1MSECIE U1OTGIEbits.T1MSECIE +#define USBT1MSECIF U1OTGIRbits.T1MSECIF +#define USBT1MSECIFReg U1OTGIR +#define USBT1MSECIFBitNum 6 + +#define USBIDIE U1OTGIEbits.IDIE +#define USBIDIF U1OTGIRbits.IDIF +#define USBIDIFReg U1OTGIR +#define USBIDIFBitNum 7 + +#define USB_OTG_ENABLE 0x04 +#define USB_OTG_DPLUS_ENABLE 0x80 + +/* Buffer Descriptor Status Register Initialization Parameters */ + +//The _BSTALL definition is changed from 0x04 to 0x00 to +// fix a difference in the PIC18 and PIC24 definitions of this +// bit. This should be changed back once the definitions are +// synced. +#define _BSTALL 0x04 //Buffer Stall enable +#define _DTSEN 0x08 //Data Toggle Synch enable +#define _DAT0 0x00 //DATA0 packet expected next +#define _DAT1 0x40 //DATA1 packet expected next +#define _DTSMASK 0x40 //DTS Mask +#define _USIE 0x80 //SIE owns buffer +#define _UCPU 0x00 //CPU owns buffer + +#define _STAT_MASK 0xFC + + + +#define USTAT_EP0_PP_MASK ~0x04 +#define USTAT_EP_MASK 0xFC +#define USTAT_EP0_OUT 0x00 +#define USTAT_EP0_OUT_EVEN 0x00 +#define USTAT_EP0_OUT_ODD 0x04 + +#define USTAT_EP0_IN 0x08 +#define USTAT_EP0_IN_EVEN 0x08 +#define USTAT_EP0_IN_ODD 0x0C +#define ENDPOINT_MASK 0xF0 + +#define BDT_BASE_ADDR_TAG __attribute__ ((aligned (512))) +#define CTRL_TRF_SETUP_ADDR_TAG +#define CTRL_TRF_DATA_ADDR_TAG + +typedef union +{ + WORD UEP[16]; +} _UEP; + +#define UEP_STALL 0x0002 + +typedef union _POINTER +{ + struct + { + BYTE bLow; + BYTE bHigh; + //byte bUpper; + }; + WORD _word; // bLow & bHigh + + //pFunc _pFunc; // Usage: ptr.pFunc(); Init: ptr.pFunc = &; + + BYTE* bRam; // Ram byte pointer: 2 bytes pointer pointing + // to 1 byte of data + WORD* wRam; // Ram word poitner: 2 bytes poitner pointing + // to 2 bytes of data + + ROM BYTE* bRom; // Size depends on compiler setting + ROM WORD* wRom; + //rom near byte* nbRom; // Near = 2 bytes pointer + //rom near word* nwRom; + //rom far byte* fbRom; // Far = 3 bytes pointer + //rom far word* fwRom; +} POINTER; + + //******** Depricated: v2.2 - will be removed at some point of time *** +#define _LS 0x00 // Use Low-Speed USB Mode +#define _FS 0x00 // Use Full-Speed USB Mode +#define _TRINT 0x00 // Use internal transceiver +#define _TREXT 0x00 // Use external transceiver +#define _PUEN 0x00 // Use internal pull-up resistor +#define _OEMON 0x00 // Use SIE output indicator +//********************************************************************** + +#define USB_PULLUP_ENABLE 0x00 +#define USB_PULLUP_DISABLE 0x04 + +#define USB_INTERNAL_TRANSCEIVER 0x00 +#define USB_EXTERNAL_TRANSCEIVER 0x01 + +#define USB_FULL_SPEED 0x04 +//USB_LOW_SPEED not currently supported in PIC24F USB products + +#define ConvertToPhysicalAddress(a) ((DWORD)KVA_TO_PA(a)) +#define ConvertToVirtualAddress(a) PA_TO_KVA1(a) + +#if ((__PIC32_FEATURE_SET__ >= 100) && (__PIC32_FEATURE_SET__ <= 299)) +#define USBIE 0x00000008 +#else +#define USBIE 0x02000000 +#endif +/**************************************************************** + Function: + void USBModuleDisable(void) + + Description: + This macro is used to disable the USB module + + Parameters: + None + + Return Values: + None + + Remarks: + None + + ****************************************************************/ +#define USBModuleDisable() {\ + U1CON = 0;\ + U1IE = 0;\ + U1OTGIE = 0;\ + U1PWRCbits.USBPWR = 1;\ + USBDeviceState = DETACHED_STATE;\ +} + +/******************************************************************** + * Function (macro): void USBClearInterruptFlag(register, BYTE if_flag_offset) + * + * PreCondition: None + * + * Input: + * register - the register mnemonic for the register holding the interrupt + * flag to be "kleared" + * BYTE if_flag_offset - the bit position offset (for the interrupt flag to + * "klear") from the "right of the register" + * + * Output: None + * + * Side Effects: None + * + * Overview: Klears the specified USB interrupt flag. + * + * Note: Individual USB interrupt flag bits are "Kleared" by writing + * '1' to the bit + *******************************************************************/ +#define USBClearInterruptFlag(reg_name, if_flag_offset) (reg_name = (1 << if_flag_offset)) + +/******************************************************************** + Function: + void DisableNonZeroEndpoints(UINT8 last_ep_num) + + Summary: + Clears the control registers for the specified non-zero endpoints + + PreCondition: + None + + Parameters: + UINT8 last_ep_num - the last endpoint number to clear. This + number should include all endpoints used in any configuration. + + Return Values: + None + + Remarks: + None + + *******************************************************************/ +#define DisableNonZeroEndpoints(last_ep_num) {\ + UINT8 i;\ + UINT32 *p = (UINT32*)&U1EP1;\ + for(i=0;i= 100) && (__PIC32_FEATURE_SET__ <= 299)) + #define USBEnableInterrupts() {\ + IEC1SET = USBIE;\ + IPC7CLR=0x00FF0000;\ + IPC7SET=0x00100000;\ + INTEnableSystemMultiVectoredInt();\ + INTEnableInterrupts();\ + } + #else + #define USBEnableInterrupts() {\ + IEC1SET = USBIE;\ + IPC11CLR = 0x0000FF00;\ + IPC11SET = 0x00001000;\ + INTEnableSystemMultiVectoredInt();\ + INTEnableInterrupts();\ + } + #endif +#else + #define USBEnableInterrupts() +#endif + +#define USBDisableInterrupts() {IEC1CLR = USBIE;} + +#if defined(USB_INTERRUPT) + #define USBMaskInterrupts() {IEC1CLR = USBIE;} + #define USBUnmaskInterrupts() {IEC1SET = USBIE;} +#else + #define USBMaskInterrupts() + #define USBUnmaskInterrupts() +#endif + + #define EP_CTRL 0x0C // Cfg Control pipe for this ep + #define EP_OUT 0x18 // Cfg OUT only pipe for this ep + #define EP_IN 0x14 // Cfg IN only pipe for this ep + #define EP_OUT_IN 0x1C // Cfg both OUT & IN pipes for this ep + #define HSHK_EN 0x01 // Enable handshake packet + // Handshake should be disable for isoch + + #define USB_HANDSHAKE_ENABLED 0x01 + #define USB_HANDSHAKE_DISABLED 0x00 + + #define USB_OUT_ENABLED 0x08 + #define USB_OUT_DISABLED 0x00 + + #define USB_IN_ENABLED 0x04 + #define USB_IN_DISABLED 0x00 + + #define USB_ALLOW_SETUP 0x00 + #define USB_DISALLOW_SETUP 0x10 + + #define USB_STALL_ENDPOINT 0x02 + + #define SetConfigurationOptions() {U1CNFG1 = 0;U1EIE = 0x9F;U1IE = 0x99 | USB_SOF_INTERRUPT | USB_ERROR_INTERRUPT; U1OTGCON &= 0x000F; U1OTGCON |= USB_PULLUP_OPTION;} + + #define USBClearInterruptRegister(reg) reg = 0xFF; + +// Buffer Descriptor Status Register layout. +typedef union __attribute__ ((packed)) _BD_STAT +{ + struct __attribute__ ((packed)){ + unsigned :2; + unsigned BSTALL :1; //Buffer Stall Enable + unsigned DTSEN :1; //Data Toggle Synch Enable + unsigned :2; //Reserved - write as 00 + unsigned DTS :1; //Data Toggle Synch Value + unsigned UOWN :1; //USB Ownership + }; + struct __attribute__ ((packed)){ + unsigned :2; + unsigned PID0 :1; + unsigned PID1 :1; + unsigned PID2 :1; + unsigned PID3 :1; + + }; + struct __attribute__ ((packed)){ + unsigned :2; + unsigned PID :4; //Packet Identifier + }; + WORD Val; +} BD_STAT; + +// BDT Entry Layout +typedef union __attribute__ ((packed))__BDT +{ + struct __attribute__ ((packed)) + { + BD_STAT STAT; + WORD CNT:10; + DWORD ADR; //Buffer Address + }; + struct __attribute__ ((packed)) + { + DWORD res :16; + DWORD count:10; + }; + DWORD w[2]; + WORD v[4]; + QWORD Val; +} BDT_ENTRY; + +// USTAT Register Layout +typedef union __USTAT +{ + struct + { + unsigned char filler1 :2; + unsigned char ping_pong :1; + unsigned char direction :1; + unsigned char endpoint_number :4; + }; + BYTE Val; +} USTAT_FIELDS; + +//Macros for fetching parameters from a USTAT_FIELDS variable. +#define USBHALGetLastEndpoint(stat) stat.endpoint_number +#define USBHALGetLastDirection(stat) stat.direction +#define USBHALGetLastPingPong(stat) stat.ping_pong + + +#if defined(USB_SUPPORT_DEVICE) | defined(USB_SUPPORT_OTG) + #if !defined(USBDEVICE_C) + //extern USB_VOLATILE USB_DEVICE_STATE USBDeviceState; + extern USB_VOLATILE BYTE USBActiveConfiguration; + extern USB_VOLATILE IN_PIPE inPipes[1]; + extern USB_VOLATILE OUT_PIPE outPipes[1]; + #endif + extern volatile BDT_ENTRY* pBDTEntryOut[USB_MAX_EP_NUMBER+1]; + extern volatile BDT_ENTRY* pBDTEntryIn[USB_MAX_EP_NUMBER+1]; +#endif + +#endif //USB_HAL_PIC32_H diff --git a/software/front/US_Firmware.X/EEP.c b/software/front/US_Firmware.X/EEP.c new file mode 100644 index 0000000..40fa3ce --- /dev/null +++ b/software/front/US_Firmware.X/EEP.c @@ -0,0 +1,42 @@ +#define _EEP_C + +#include "isr.h" + +void EEPWrite(UINT16 a, UINT8 * b, UINT16 c){ + if(c){ + while(EEPAddrW != 0xFFFF){}; + EEPAddrW = a; + EEPDataW = b; + EEPCntW = c; + I2CAddCommands(I2C_EEPWRITE); + while(EEPAddrW != 0xFFFF){}; + } +} + +void EEPWriteImm(UINT16 a, UINT8 b){ + while(EEPAddrW != 0xFFFF){}; + EEPAddrW = a; + EEPDataW = &b; + EEPCntW = 1; + I2CAddCommands(I2C_EEPWRITE); + while(EEPAddrW != 0xFFFF){}; +} + +UINT8 EEPRead(UINT16 a, UINT8 * b, UINT16 c){ + UINT8 lb; + if(c){ + if(b == 0){ + b = &lb; + c = 1; + } + while(EEPAddrR != 0xFFFF); + EEPAddrR = a; + EEPDataR = b; + EEPCntR = c; + I2CAddCommands(I2C_EEPREAD); + while(EEPAddrR != 0xFFFF); + return b[c-1]; + } +} + +#undef __EEP_C diff --git a/software/front/US_Firmware.X/EEP.h b/software/front/US_Firmware.X/EEP.h new file mode 100644 index 0000000..8cc4a78 --- /dev/null +++ b/software/front/US_Firmware.X/EEP.h @@ -0,0 +1,30 @@ +/* + * File: EEP.h + * Author: Sparky + * + * Created on ?????, 2013, ????????? 6, 15:20 + */ + +#ifndef EEP_H +#define EEP_H + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef _EEP_C +#define EEP_EXTERN extern +#else +#define EEP_EXTERN +#endif + +EEP_EXTERN void EEPWrite(UINT16 a, UINT8 * b, UINT16 c); +EEP_EXTERN void EEPWriteImm(UINT16 a, UINT8 b); +EEP_EXTERN UINT8 EEPRead(UINT16 a, UINT8 * b, UINT16 c); + +#ifdef __cplusplus +} +#endif + +#endif /* EEP_H */ + diff --git a/software/front/US_Firmware.X/ExtFloat.h b/software/front/US_Firmware.X/ExtFloat.h new file mode 100644 index 0000000..4bdd064 --- /dev/null +++ b/software/front/US_Firmware.X/ExtFloat.h @@ -0,0 +1,105 @@ +/* + * File: ExtFloat.h + * Author: Sparky + * + * Created on ??????, 2015, ??? 17, 19:35 + */ + +#ifndef EXTFLOAT_H +#define EXTFLOAT_H + +#ifdef __cplusplus +extern "C" { +#endif + +typedef union{ + struct __PACKED + { + unsigned int m:23; + unsigned int e:8; + unsigned int s:1; + }; + float f; +}SFLOAT; + +typedef struct { + UINT32 m; + INT32 e; +}ExtFloat; + +#define float2ExtFloat(ef, f) \ +{ \ + ef.m = ( ((UINT32)((SFLOAT)f).m) & 0x7FFFFFUL) << 8; \ + if(ef.e = ((SFLOAT)f).e) ef.m |= 0x80000000; \ +} + +#define ExtFloatDivByUInt(ef, ui) \ +{ \ + if(ef.m /= ui){ \ + while (ef.m < 0x80000000UL){ \ + ef.m <<= 1; \ + ef.e--; \ + } \ + } \ + else { \ + ef.e = 0; \ + } \ +} + +#define ExtFloatMul(ef1, ef2) \ +{ \ + if(ef1.m = ((UINT64)ef1.m * (UINT64)ef2.m) >> 32){ \ + ef1.e += ef2.e - 126; \ + while(ef1.m < 0x80000000UL){ \ + ef1.m <<= 1; \ + ef1.e--; \ + } \ + } \ + else { \ + ef1.e = 0; \ + } \ +} + +#define ExtFloatAdd(ef1, ef2) \ +{\ + if(ef1.e >= ef2.e){ \ + if((ef1.e - ef2.e) < 31){ \ + if(ef1.m = (ef1.m >> 1) + (ef2.m >> (ef1.e - ef2.e + 1))){ \ + if(ef1.m >= 0x80000000UL){ \ + ef1.e++; \ + } \ + else{ \ + ef1.m <<= 1; \ + } \ + }\ + else{ \ + ef1.e = 0; \ + } \ + } \ + } \ + else { \ + if((ef2.e - ef1.e) < 31){ \ + if(ef1.m = (ef2.m >> 1) + (ef1.m >> (ef2.e - ef1.e + 1))){ \ + ef1.e = ef2.e; \ + if(ef1.m >= 0x80000000UL){ \ + ef1.e++; \ + } \ + else{ \ + ef1.m <<= 1; \ + } \ + }\ + else{ \ + ef1.e = 0; \ + } \ + } \ + else{ \ + ef1 = ef2; \ + } \ + } \ +} +#ifdef __cplusplus +} +#endif + +#endif /* EXTFLOAT_H */ + diff --git a/software/front/US_Firmware.X/Makefile b/software/front/US_Firmware.X/Makefile new file mode 100644 index 0000000..05a3fb1 --- /dev/null +++ b/software/front/US_Firmware.X/Makefile @@ -0,0 +1,108 @@ +# +# There exist several targets which are by default empty and which can be +# used for execution of your targets. These targets are usually executed +# before and after some main targets. They are: +# +# .build-pre: called before 'build' target +# .build-post: called after 'build' target +# .clean-pre: called before 'clean' target +# .clean-post: called after 'clean' target +# .clobber-pre: called before 'clobber' target +# .clobber-post: called after 'clobber' target +# .all-pre: called before 'all' target +# .all-post: called after 'all' target +# .help-pre: called before 'help' target +# .help-post: called after 'help' target +# +# Targets beginning with '.' are not intended to be called on their own. +# +# Main targets can be executed directly, and they are: +# +# build build a specific configuration +# clean remove built files from a configuration +# clobber remove all built files +# all build all configurations +# help print help mesage +# +# Targets .build-impl, .clean-impl, .clobber-impl, .all-impl, and +# .help-impl are implemented in nbproject/makefile-impl.mk. +# +# Available make variables: +# +# CND_BASEDIR base directory for relative paths +# CND_DISTDIR default top distribution directory (build artifacts) +# CND_BUILDDIR default top build directory (object files, ...) +# CONF name of current configuration +# CND_ARTIFACT_DIR_${CONF} directory of build artifact (current configuration) +# CND_ARTIFACT_NAME_${CONF} name of build artifact (current configuration) +# CND_ARTIFACT_PATH_${CONF} path to build artifact (current configuration) +# CND_PACKAGE_DIR_${CONF} directory of package (current configuration) +# CND_PACKAGE_NAME_${CONF} name of package (current configuration) +# CND_PACKAGE_PATH_${CONF} path to package (current configuration) +# +# NOCDDL + + +# Environment +MKDIR=mkdir +CP=cp +CCADMIN=CCadmin +RANLIB=ranlib + + +# build +build: .build-post + +.build-pre: +# Add your pre 'build' code here... + +.build-post: .build-impl +# Add your post 'build' code here... + + +# clean +clean: .clean-post + +.clean-pre: +# Add your pre 'clean' code here... + +.clean-post: .clean-impl +# Add your post 'clean' code here... + + +# clobber +clobber: .clobber-post + +.clobber-pre: +# Add your pre 'clobber' code here... + +.clobber-post: .clobber-impl +# Add your post 'clobber' code here... + + +# all +all: .all-post + +.all-pre: +# Add your pre 'all' code here... + +.all-post: .all-impl +# Add your post 'all' code here... + + +# help +help: .help-post + +.help-pre: +# Add your pre 'help' code here... + +.help-post: .help-impl +# Add your post 'help' code here... + + + +# include project implementation makefile +include nbproject/Makefile-impl.mk + +# include project make variables +include nbproject/Makefile-variables.mk diff --git a/software/front/US_Firmware.X/OLED.c b/software/front/US_Firmware.X/OLED.c new file mode 100644 index 0000000..a4213fc --- /dev/null +++ b/software/front/US_Firmware.X/OLED.c @@ -0,0 +1,152 @@ +#define _OLED_C + +#include "main.h" +#include "mcu.h" +#include "font32x48numbers.h" +#include "fonts.h" +#include "font6x8.h" +#include "font8x16.h" +#include "OLED.h" + +//const unsigned char OLEDInitBuff[31]={0xAE, 0xD5,0xF0,0xA8,0x3F,0xD3,0x00,0x40,0x8D,0x10,0xA0,0xC0,0xDA,0x12,0x81,0xFF,0xD9,0x22,0xDB,0x40,0xA4,0xA6,0xAF,0x20,0x00,0x21,0,127,0x22,0,7}; +const unsigned char OLEDInitBuff[31]={ + 0xAE, //display off + 0xD5,0x80, //set clock & divide ratio + 0xA8,0x3F, //set MUX ratio + 0xD3,0x00, //set display offset + 0x40, //set display start line + 0x8D, 0x10, //disable charge pump + 0xA0, //set segment remap + 0xC0, //set COM direction + 0xDA,0x12, //set COM hardware configuration + 0x81,0xFF, //set contrast + 0xD9,0x22, //set precharge period + 0xDB,0x20, //set DCOM deselect level + 0xA4, //disable entire on + 0xA6, //set normal display + 0xAF, //display on + 0x20,0x00, //set horizontal addressing mode + 0x21,0,127, //start/end column + 0x22,0,7 //start/end row +}; + +void OLEDInit(){ + _delay_ms(1); + OLED_RES = 0; + _delay_ms(1); + OLED_RES = 1; + OLED_VCC = 0; + _delay_ms(100); + OLED_DC = 0; + OLED_CS = 0; + _delay_ms(100); + mcuSPISendBytes((int*)OLEDInitBuff, 31); + mcuSPIWait(); + OLEDFill(0, 128, 0, 8, 0); + OLEDUpdate(); +} + +void OLEDUpdate(){ + OLED_DC = 1; + OLED_CS = 0; + mcuSPISendBytes((unsigned int *) OLEDBUFF.B[0], 128*8); + mcuSPIWait(); + OLED_CS = 1; +} + + +void OLEDFill(int col, int colnum, int row, int rownum, UINT8 b){ + int cc; + while(rownum--){ + cc = colnum; + while(cc--)OLEDBUFF.B[row][col++] = b; + col -= colnum; + row++; + } +} + +void OLEDInvert(int col,int colnum, int row, int rownum){ + int cc; + while(rownum--){ + cc = colnum; + while(cc--)OLEDBUFF.B[row][col++] ^= 255; + col -= colnum; + row++; + } +} + +void OLEDWrite(int col, int colnum, int row, void * buf, int num){ + int cc; + while(num){ + cc = colnum; + while(num && cc--){ + OLEDBUFF.B[row][col++] = *(UINT8*)buf; + buf++; + num--; + } + col -= colnum; + row++; + } +} + + +void OLEDPrintNum3248(int col, int row, int num){ + int i, cd; + col += 64; + i = 3; + while(i--){ + cd = num % 10; + num /= 10; + if(num || cd || (i>1)) { + OLEDWrite(col, 32, row, (void *)numbers32x48[cd],192); + } + else{ + OLEDFill(col, 32, row, 6, 0); + } + col -= 32; + } +} +void OLEDPrintCF1648(int col, int row, int CF){ + CF+=10; + OLEDWrite(col, 16, row++, (void *)&numbers32x48[CF][0],16); + OLEDWrite(col, 16, row++, (void *)&numbers32x48[CF][32],16); + OLEDWrite(col, 16, row++, (void *)&numbers32x48[CF][64],16); + OLEDWrite(col, 16, row++, (void *)&numbers32x48[CF][96],16); + OLEDWrite(col, 16, row++, (void *)&numbers32x48[CF][128],16); +} + +void OLEDPrintNum(int col, int row, int dec, int num, void* font, int startChar, int width, int height, int blank ){ + int cb = width * height; + int cw = width + blank; + int i, cd; + i = dec; + dec--; + col += cw * dec; + if(num<0)num=-num; + while(i--){ + cd = num % 10; + num /= 10; + if(num || cd || (i == dec)) { + OLEDWrite(col, width, row, (void *)font + cb * (cd + 0x30 - startChar), cb); + OLEDFill(col + width, blank, row, height, 0); + } + else{ + OLEDFill(col, cw, row, height, 0); + } + col -= cw; + } +} + +void OLEDPrint(int col, int row, const char * s, int num, void * font, int startChar, int width, int height, int blank){ + int cb = width * height; + if(num == 0) num = 128; + while(num--){ + if(s[0] == 0) break; + OLEDWrite(col, width, row, (void *)font + cb * (s[0] - startChar), cb); + col += width; + OLEDFill(col, blank, row, height, 0); + col += blank; + s++; + } +} +#undef _OLED_C diff --git a/software/front/US_Firmware.X/OLED.h b/software/front/US_Firmware.X/OLED.h new file mode 100644 index 0000000..b935d7a --- /dev/null +++ b/software/front/US_Firmware.X/OLED.h @@ -0,0 +1,57 @@ +/* + * File: OLED.h + * Author: Sparky + * + * Created on ?????, 2014, ??? 16, 18:51 + */ + +#ifndef OLED_H +#define OLED_H + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef _OLED_C +#define OLEDC_EXTERN extern +extern const UINT8 font8x8[128][8]; +extern const UINT8 font6x8[96][5]; +extern const UINT8 degrees4x8[4]; +extern const UINT8 font8x16[128][16]; +extern const UINT8 degrees4x16[8]; +#else +#define OLEDC_EXTERN +#endif + +OLEDC_EXTERN union { + UINT32 D[8][32]; + UINT8 B[8][128]; +}OLEDBUFF; + +OLEDC_EXTERN void OLEDInit(); +OLEDC_EXTERN void OLEDUpdate(); +OLEDC_EXTERN void OLEDInvert(int col,int colnum, int row, int rownum); +OLEDC_EXTERN void OLEDFill(int col, int colnum, int row, int rownum, UINT8 b); +OLEDC_EXTERN void OLEDPrintNum3248(int col, int row, int num); +OLEDC_EXTERN void OLEDPrintCF1648(int col, int row, int CF); +OLEDC_EXTERN void OLEDPrintNum(int col, int row, int dec, int num, void* font, int startChar, int width, int height, int blank ); +OLEDC_EXTERN void OLEDPrint(int col, int row, const char * s, int num, void * font, int startChar, int width, int height, int blank); + + +#define OLEDPrint68(col, row, s, num) OLEDPrint(col, row, s, num, font6x8, 32, 5, 1, 1) +#define OLEDPrintNum68(col, row, dec, num) OLEDPrintNum(col, row, dec, num, font6x8, 32, 5, 1, 1) +#define OLEDPrint88(col, row, s, num) OLEDPrint(col, row, s, num, font8x8, 0, 8, 1, 0) +#define OLEDPrintNum88(col, row, dec, num) OLEDPrintNum(col, row, dec, num, font8x8, 0, 8, 1, 0) +#define OLEDPrint816(col, row, s, num) OLEDPrint(col, row, s, num, font8x16, 0, 8, 2, 0) +#define OLEDPrintNum816(col, row, dec, num) OLEDPrintNum(col, row, dec, num, font8x16, 0, 8, 2, 0) + +#undef OLEDC_EXTERN + + + +#ifdef __cplusplus +} +#endif + +#endif /* OLED_H */ + diff --git a/software/front/US_Firmware.X/PIC32MX534F064H.c b/software/front/US_Firmware.X/PIC32MX534F064H.c new file mode 100644 index 0000000..2d6e91a --- /dev/null +++ b/software/front/US_Firmware.X/PIC32MX534F064H.c @@ -0,0 +1,352 @@ +#define _PIC32MX534F064H_C + +#include +// DEVCFG3 +// USERID = No Setting +#pragma config FSRSSEL = PRIORITY_7 // SRS Select (SRS Priority 7) +#pragma config FCANIO = OFF // CAN I/O Pin Select (Alternate CAN I/O) +#pragma config FUSBIDIO = OFF // USB USID Selection (Controlled by Port Function) +#pragma config FVBUSONIO = OFF // USB VBUS OFF Selection (Not Controlled by USB Module) + +// DEVCFG2 +#pragma config FPLLIDIV = DIV_2 // PLL Input Divider (2x Divider) +#pragma config FPLLMUL = MUL_20 // PLL Multiplier (20x Multiplier) +#pragma config UPLLIDIV = DIV_2 // USB PLL Input Divider (2x Divider) +#pragma config UPLLEN = ON // USB PLL Enable (Enabled) +#pragma config FPLLODIV = DIV_1 // System PLL Output Clock Divider (PLL Divide by 1) + +// DEVCFG1 +#pragma config FNOSC = PRIPLL // Oscillator Selection Bits (Primary Osc w/PLL (XT+,HS+,EC+PLL)) +#pragma config FSOSCEN = OFF // Secondary Oscillator Enable (Disabled) +#pragma config IESO = OFF // Internal/External Switch Over (Disabled) +#pragma config POSCMOD = XT // Primary Oscillator Configuration (XT osc mode) +#pragma config OSCIOFNC = OFF // CLKO Output Signal Active on the OSCO Pin (Disabled) +#pragma config FPBDIV = DIV_2 // Peripheral Clock Divisor (Pb_Clk is Sys_Clk/1) +#pragma config FCKSM = CSDCMD // Clock Switching and Monitor Selection (Clock Switch Disable, FSCM Disabled) +#pragma config WDTPS = PS1048576 // Watchdog Timer Postscaler (1:1048576) +#pragma config FWDTEN = OFF // Watchdog Timer Enable (WDT Disabled (SWDTEN Bit Controls)) + +// DEVCFG0 +#pragma config DEBUG = OFF // Background Debugger Enable (Debugger is disabled) +#pragma config ICESEL = ICS_PGx2 // ICE/ICD Comm Channel Select (ICE EMUC2/EMUD2 pins shared with PGC2/PGD2) +#pragma config PWP = OFF // Program Flash Write Protect (Disable) +#pragma config BWP = OFF // Boot Flash Write Protect bit (Protection Disabled) +#pragma config CP = OFF // Code Protect (Protection Disabled) + +#include +#include "PIC32MX534F064H.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "main.h" +#include "isr.h" +#include "OLED.h" + +void mcuInit1(){ + INTDisableInterrupts(); + OpenCoreTimer(0xFFFFFFFF); + SYSTEMConfigWaitStates(80000000); + + LATB=0b1000000000000000; + LATC=0b0110000000000000; + LATD=0b100001010000; + LATE=0; + LATF=0; + LATG=0; + TRISB=0b1100000000111111; + TRISC=0b1001000000000000; + TRISD=0; + TRISE=0; + TRISF=0; + TRISG=0b1000111111; + ODCB=0; + ODCC=0; + ODCD=0; + ODCE=0; + ODCF=0; + ODCG=0; + + TRISBbits.TRISB7=0; + + HCH=0; + ID_3S=0; + ID_OUT=0; + HEATER=0; + CBANDA=1; + CBANDB=1; + CHSEL1=0; + CHSEL2=1; + CHPOL=0; + + SPEAKER=1; + + mcuADCStop(); +} + +void mcuInit2(){ + OLEDPrintNum816(0, 0, 2, 10); + OLEDUpdate(); + OpenTimer3(T3_ON | T3_IDLE_STOP | T3_GATE_OFF | T3_PS_1_256 | T3_SOURCE_INT, 40); + OLEDPrintNum816(0, 0, 2, 11); + OLEDUpdate(); + OpenOC1(OC_ON | OC_IDLE_STOP | OC_TIMER_MODE16 | OC_TIMER3_SRC | OC_PWM_FAULT_PIN_DISABLE, 0x20, 0); + OLEDPrintNum816(0, 0, 2, 12); + OLEDUpdate(); + + DmaEnable(1); + OLEDPrintNum816(0, 0, 2, 13); + OLEDUpdate(); + + I2CEnable(I2C4, FALSE); + OLEDPrintNum816(0, 0, 2, 14); + mcuI2CReset(); + OLEDPrintNum816(0, 0, 2, 15); + OLEDUpdate(); + I2CSetFrequency(I2C4, PER_FREQ, 400000); + OLEDPrintNum816(0, 0, 2, 16); + OLEDUpdate(); + I2CEnable(I2C4,TRUE); + OLEDPrintNum816(0, 0, 2, 17); + OLEDUpdate(); + + CVREFOpen(CVREF_ENABLE | CVREF_OUTPUT_DISABLE | CVREF_RANGE_HIGH | CVREF_SOURCE_VREF); + OLEDPrintNum816(0, 0, 2, 18); + OLEDUpdate(); + + COMPREF = 2; //(3*(0.25+2/32))*6 = 5.625V on Vin + CMP2Open(CMP_STOP_IN_IDLE | CMP_ENABLE | CMP_OUTPUT_DISABLE | CMP_OUTPUT_INVERT | CMP_EVENT_HIGH_TO_LOW | CMP_POS_INPUT_CVREF | CMP2_NEG_INPUT_C2IN_NEG); + OLEDPrintNum816(0, 0, 2, 19); + OLEDUpdate(); +} + +unsigned int mcuSqrt(register unsigned int n){ + register unsigned int r, x; + r=0; + for(x = 0x8000L; x; x >>= 1){ + r += x; + if((UINT32)(r * r) > n)r -= x; + } + return r; +} + +void DelayTicks(UINT32 a){ + UINT32 StartTime; + StartTime=ReadCoreTimer(); + while((UINT32)(ReadCoreTimer()-StartTime)> 2; + DmaChnAbortTxfer(DMA_CHANNEL0); + DmaChnAbortTxfer(DMA_CHANNEL1); + DmaChnDisable(DMA_CHANNEL0); + DmaChnDisable(DMA_CHANNEL1); + CloseADC10(); + i=ADC1BUF0; + i=ADC1BUF1; + i=ADC1BUF2; + i=ADC1BUF3; + i=ADC1BUF4; + i=ADC1BUF5; + i=ADC1BUF6; + i=ADC1BUF7; + i=ADC1BUF8; + i=ADC1BUF9; + i=ADC1BUFA; + i=ADC1BUFB; + i=ADC1BUFC; + i=ADC1BUFD; + i=ADC1BUFE; + i=ADC1BUFF; + mAD1ClearIntFlag(); + mAD1IntEnable(0); + ADCAuto=0; +} + +void mcuADCStartManual(){ + mcuADCStop(); + OpenADC10(\ + ADC_MODULE_ON | ADC_IDLE_STOP | ADC_FORMAT_INTG16 | ADC_CLK_AUTO | ADC_AUTO_SAMPLING_OFF | ADC_SAMP_OFF , \ + ADC_VREF_EXT_EXT | ADC_OFFSET_CAL_DISABLE | ADC_SCAN_OFF | ADC_SAMPLES_PER_INT_1 | ADC_BUF_16 | ADC_ALT_INPUT_OFF, \ + ADC_SAMPLE_TIME_13 | ADC_CONV_CLK_PB | ADC_CONV_CLK_5Tcy, \ + ENABLE_AN0_ANA | ENABLE_AN1_ANA | ENABLE_AN2_ANA | ENABLE_AN3_ANA | ENABLE_AN4_ANA | ENABLE_AN5_ANA | ENABLE_AN14_ANA, \ + SKIP_SCAN_ALL); + AD1CON1bits.CLRASAM = 0; + mAD1IntEnable(1); + ADCAuto = 0; +} + +void mcuADCStartAuto(){ + mcuADCStop(); + + DmaChnOpen(DMA_CHANNEL0,DMA_CHN_PRI1, DMA_OPEN_DEFAULT); + DmaChnSetEventControl(DMA_CHANNEL0, DMA_EV_START_IRQ_EN | DMA_EV_START_IRQ(_ADC_IRQ)); + DmaChnSetTxfer(DMA_CHANNEL0,(void*)&ADC1BUF0,(void*)VBuff,4,sizeof(VBuff),2); + DmaChnWriteEvEnableFlags(DMA_CHANNEL0, DMA_EV_CELL_DONE); + DmaChnEnable(DMA_CHANNEL0); + + DmaChnOpen(DMA_CHANNEL1,DMA_CHN_PRI0, DMA_OPEN_DEFAULT); + DmaChnSetEventControl(DMA_CHANNEL1, DMA_EV_START_IRQ_EN | DMA_EV_START_IRQ(_ADC_IRQ)); + DmaChnSetTxfer(DMA_CHANNEL1,(void*)&ADC1BUF1,(void*)IBuff,4,sizeof(IBuff),4); + DmaChnWriteEvEnableFlags(DMA_CHANNEL1, 0); + DmaChnEnable(DMA_CHANNEL1); + + SetChanADC10(ADCH_VIN);// | (ADCH_VSHUNT<<8)); + OpenADC10(\ + ADC_MODULE_ON | ADC_IDLE_STOP | ADC_FORMAT_INTG32 | ADC_CLK_AUTO | ADC_AUTO_SAMPLING_ON | ADC_SAMP_ON , \ + ADC_VREF_EXT_EXT | ADC_OFFSET_CAL_DISABLE | ADC_SCAN_ON | ADC_SAMPLES_PER_INT_2 | ADC_ALT_BUF_OFF | ADC_ALT_INPUT_OFF, \ + ADC_SAMPLE_TIME_31 | ADC_CONV_CLK_PB | ADC_CONV_CLK_35Tcy2, \ + ENABLE_AN0_ANA | ENABLE_AN1_ANA | ENABLE_AN2_ANA | ENABLE_AN3_ANA | ENABLE_AN4_ANA | ENABLE_AN5_ANA | ENABLE_AN14_ANA, \ + SKIP_SCAN_ALL ^ (ADCH_VIN_SCAN | ADCH_VSHUNT_SCAN)); + AD1CON1bits.CLRASAM = 0; + ADCAuto = 1; +} + +void mcuADCRead(int ADCCH, int num){ + SetChanADC10(ADCCH); + AD1CON2bits.SMPI = num-1; + AD1CON1bits.ASAM = 1; + AD1CON1bits.CLRASAM = 1; + AcquireADC10(); +} + +int mcuADCReadWait(int ADCCH, int num){ + int ADCInt,i; + ADCInt = mAD1GetIntEnable(); + mAD1IntEnable(0); + mAD1ClearIntFlag(); + mcuADCRead(ADCCH, num); + while(!mAD1GetIntFlag()); + i=0; + while(num--) i += ReadADC10(num); + mAD1ClearIntFlag(); + mAD1IntEnable(ADCInt); + return i; +} + +static UINT32 H2LTime = 0; +void __ISR(_COMPARATOR_2_VECTOR, IPL7SRS) ComparatorISR(void) +{ + static int oh; + static int oas; + UINT32 ccon = CM2CON; + mcuCompDisable(); + if(ccon & CMP_EVENT_HIGH_TO_LOW){ + mcuDCTimerReset(); + oh = HEATER; + oas = (ADCStep & 1); + //if(oh && oas)LATBbits.LATB7 = 1; + H2LTime = ReadCoreTimer(); + ISRHigh(CompH2L); + } + else{ + CompLowTime = 0; + if(H2LTime){ + CompLowTime = (ReadCoreTimer() - H2LTime) / 80; + H2LTime = 0; + //if(oh && oas)LATBbits.LATB7 = 0; + } + ISRHigh(CompL2H); + } +} + +void __ISR(_TIMER_1_VECTOR, IPL7SRS) Timer1ISR(void) +{ + mT1ClearIntFlag(); + H2LTime = 0; + CompLowTime = 0; + ISRHigh(DCTimer); +} + +void __ISR(_TIMER_2_VECTOR, IPL7SRS) Timer2ISR(void) +{ + mT2ClearIntFlag(); + T2CONbits.ON = 0; + ISRHigh(0); +} + +void __ISR(_ADC_VECTOR,IPL7SRS) ADCISR(void) +{ + int n, i=0; + for(n = AD1CON2bits.SMPI + 1; n--;) i += ReadADC10(n); + mcuADCRES = i; + mAD1ClearIntFlag(); + ISRHigh(0); +} + +void __ISR(_I2C_4_VECTOR,IPL6SOFT) I2CISR(void) +{ + INTClearFlag(INT_I2C4B); + INTClearFlag(INT_I2C4M); + INTClearFlag(INT_I2C4S); + INTClearFlag(INT_I2C4); + I2CISRTasks(); +} + +void __ISR(_OUTPUT_COMPARE_2_VECTOR,IPL5SOFT) PIDISR(void){ + INTClearFlag(INT_OC2); +} + +#undef _PIC32MX534F064H_C diff --git a/software/front/US_Firmware.X/PIC32MX534F064H.h b/software/front/US_Firmware.X/PIC32MX534F064H.h new file mode 100644 index 0000000..64fcfe4 --- /dev/null +++ b/software/front/US_Firmware.X/PIC32MX534F064H.h @@ -0,0 +1,178 @@ +/* + * File: PIC32MX.h + * Author: Sparky + * + * Created on ???????, 2013, ??? 30, 1:56 + */ + +#ifndef PIC32MX534F064H_H +#define PIC32MX534F064H_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef _PIC32MX534F064H_C +#define P32_EXTERN +#else +#define P32_EXTERN extern +#endif + +#define SYS_FREQ (80000000UL) +#define CORETIMER_FREQ (SYS_FREQ/2UL) +#define PER_FREQ (SYS_FREQ/2UL) +#define I2C_CLOCK_FREQ (400000UL) + + +P32_EXTERN void DelayTicks(UINT32 a); +#define _delay_us(a) DelayTicks(a*(CORETIMER_FREQ/1000000UL)) +#define _delay_ms(a) DelayTicks(a*(CORETIMER_FREQ/1000UL)) + +P32_EXTERN unsigned int mcuSqrt(unsigned int); + +//outputs +#define HEATER LATEbits.LATE6 +#define HCH LATEbits.LATE7 +#define CBANDA LATEbits.LATE2 +#define CBANDB LATFbits.LATF3 +#define CHSEL1 LATEbits.LATE5 +#define CHSEL2 LATEbits.LATE4 +#define CHPOL LATEbits.LATE3 +#define OLED_VDD LATCbits.LATD11 +#define OLED_VCC LATCbits.LATC14 +#define OLED_RES LATDbits.LATD7 +#define OLED_DC LATDbits.LATD6 +#define OLED_CS LATDbits.LATD4 +#define OLED_SCK LATDbits.LATD1 +#define OLED_SDI LATDbits.LATD2 +#define OLED_SDO LATDbits.LATD3 +#define ID_OUT LATBbits.LATB15 + +//inputs +#define B1 PORTDbits.RD8 +#define B2 PORTDbits.RD9 +#define B3 PORTDbits.RD10 +#define ID_IN PORTBbits.RB15 +#define NAP PORTGbits.RG9 +#define ID_3S TRISBbits.TRISB15 + +#define SPEAKER OC1CONbits.ON +#define SPKON if(!SPEAKER)SPEAKER=1 +#define SPKOFF if(SPEAKER)SPEAKER=0 + +#define SDISDO_IO {TRISDSET=0b100;TRISDCLR=0b1000;} +#define SDISDO_OI {TRISDCLR=0b100;TRISDSET=0b1000;} +#define SDISDO_OO {TRISDCLR=0b1100;} +#define SDI_IN PORTDbits.RD2 +#define SDI_OUT LATDbits.LATD2 +#define SDO_IN PORTDbits.RD3 +#define SDO_OUT LATDbits.LATD3 + + +//I2C devices +#define CPOT 0b01011110 +#define GAINPOT 0b01011100 +#define OFFADC 0b11000000 +#define EEP 0b10100000 + +#define SDA PORTGbits.RG7 +#define SDAOUT TRISGbits.TRISG7 +#define SDALAT LATGbits.LATG7 +#define SCL TRISGbits.TRISG8 +#define SCLLAT LATGbits.LATG8 + +#define mcuReset() Reset(); + +P32_EXTERN void mcuInit1(); +P32_EXTERN void mcuInit2(); + +P32_EXTERN void mcuJumpToBootLoader(); + +#define mcuDisableInterrupts() INTDisableInterrupts() +#define mcuEnableInterrupts() INTEnableInterrupts() +#define mcuRestoreInterrupts(a) INTRestoreInterrupts(a) + +P32_EXTERN void mcuI2CReset(); + +#define COMPREF CVRCONbits.CVR + +#define MAINS CM2CONbits.COUT + +P32_EXTERN void mcuDCTimerReset(); + +P32_EXTERN void mcuInitISRTimer(); +P32_EXTERN void mcuStopISRTimer(); +P32_EXTERN void mcuStartISRTimer(unsigned int per); +#define mcuStartISRTimer_us(us) mcuStartISRTimer((us*(PER_FREQ/1000000))/256); + +//DMA +#define mcuVBuffPos() DmaChnGetDstPnt(DMA_CHANNEL0) +#define mcuIBuffPos() DmaChnGetDstPnt(DMA_CHANNEL1) + +//ADC channels +#define ADCH_RT ADC_CH0_POS_SAMPLEA_AN14 +#define ADCH_ID ADC_CH0_POS_SAMPLEA_AN15 +#define ADCH_TEMP ADC_CH0_POS_SAMPLEA_AN5 +#define ADCH_VIN ADC_CH0_POS_SAMPLEA_AN3 +#define ADCH_VIN_SCAN SKIP_SCAN_AN3 +#define ADCH_VSHUNT ADC_CH0_POS_SAMPLEA_AN4 +#define ADCH_VSHUNT_SCAN SKIP_SCAN_AN4 + +#define mcuADCRefVdd() AD1CON2bits.VCFG=0b010 +#define mcuADCRefVref() AD1CON2bits.VCFG=0b011 +P32_EXTERN volatile int mcuADCRES; +P32_EXTERN void mcuADCStop(); +P32_EXTERN void mcuADCStartManual(); +P32_EXTERN void mcuADCRead(int ADCCH, int num); +P32_EXTERN int mcuADCReadWait(int ADCCH, int num); + +#define mcuSPIOpen() SpiChnOpen(SPI_CHANNEL3,SPI_OPEN_MSTEN | SPI_OPEN_MODE8 | SPI_OPEN_CKP_HIGH, 4) +#define mcuSPIClose() SpiChnClose(SPI_CHANNEL3) +#define mcuSPISendByte(b) SpiChnPutC(SPI_CHANNEL3, b) +#define mcuSPISendBytes(b,n) SpiChnPutS(SPI_CHANNEL3,b,n) +#define mcuSPIIsBusy() SpiChnIsBusy(SPI_CHANNEL3) +P32_EXTERN void mcuSPIWait(); + +#define mcuI2CStart() {int i=INTDisableInterrupts(); I2CStart(I2C4); INTRestoreInterrupts(i); } +#define mcuI2CStop() {int i=INTDisableInterrupts(); I2CStop(I2C4); INTRestoreInterrupts(i); } +#define mcuI2CSendByte(b) {int i=INTDisableInterrupts(); I2CSendByte(I2C4,b); INTRestoreInterrupts(i); } +#define mcuI2CReceiverEnable() I2CReceiverEnable(I2C4, TRUE); +#define mcuI2CReceiverDisable() I2CReceiverEnable(I2C4, FALSE); +#define mcuI2CGetByte() I2CGetByte(I2C4); +#define mcuI2CSendAddrW(b) mcuI2CSendByte(b) +#define mcuI2CSendAddrR(b) mcuI2CSendByte(b | 1) +#define mcuI2CIsACK() I2CByteWasAcknowledged(I2C4) +#define mcuI2CACK() I2CAcknowledgeByte(I2C4, TRUE); +#define mcuI2CWakeUp() INTSetFlag(INT_I2C4) + +#define mcuPIDWakeUp() INTSetFlag(INT_OC2) + +#define mcuCompDisable() (mCMP2IntEnable(0), MAINS = MAINS, mCMP2ClearIntFlag() ) //, CM2CONCLR=CMP_ENABLE) +#define mcuCompEnableH2L() (MAINS = MAINS, mCMP2ClearIntFlag(), CM2CONCLR = 3 << _CM1CON_EVPOL0_POSITION, CM2CONSET = 2 << _CM1CON_EVPOL0_POSITION, mCMP2IntEnable(1)) +#define mcuCompEnableL2H() (MAINS = MAINS, mCMP2ClearIntFlag(), CM2CONCLR = 3 << _CM1CON_EVPOL0_POSITION, CM2CONSET = 1 << _CM1CON_EVPOL0_POSITION, mCMP2IntEnable(1)) + +#define mcuIDIn() +#define mcuIDOut() + +//USB Stack definitions +#define self_power 1 +#define USB_BUS_SENSE 1 + + +#undef P32_EXTERN + +#ifdef __cplusplus +} +#endif + +#endif /* PIC32MX_H */ + diff --git a/software/front/US_Firmware.X/PID.c b/software/front/US_Firmware.X/PID.c new file mode 100644 index 0000000..24291b6 --- /dev/null +++ b/software/front/US_Firmware.X/PID.c @@ -0,0 +1,479 @@ +#define _PID_C + +#include +#include "PID.h" +#include "isr.h" +#include "iron.h" +#include "ExtFloat.h" + +//volatile int LastOn; +//volatile unsigned char OffCnt; +//volatile unsigned char NoHeaterCnt; + +void PIDInit(){ + int i; + for(i = 2; i--;){ + PIDVars[i].Starting = 1; + PIDVars[i].PIDDuty = 0; + PIDVars[i].PIDDutyP = 0; + PIDVars[i].PIDDutyI = 0; + PIDVars[i].PIDDutyFull = 0; + PIDVars[i].PWM = 0; + PIDVars[i].OffDelay = 1600; + } +}; + +#define intshr(a,b) ((a < 0) ? (-((-a) >> b)) : (a >> b)) + +#define assertin(a,b,c) \ + if(bc)a=c;\ + }\ + else{\ + if(ab)a=b;\ + } + +void PID(int PIDStep) { + int i, w, AVG; + INT32 dw, pdt; + t_PIDVars * PV; + t_IronConfig * IC; + int WSL; + + AVG = ADCAVG; + PV =(t_PIDVars *)&PIDVars[PIDStep]; + IC =(t_IronConfig *)&IronPars.Config[PIDStep]; + if(IronPars.Config[1].Type){ + AVG--; + } + else{ + PV =(t_PIDVars *)&PIDVars[0]; + IC =(t_IronConfig *)&IronPars.Config[0]; + } + WSL = IC->WSLen; + if(WSL < 0) WSL = (IronPars.Config[1].Type ? 4 : 8); + + if(PV->NoHeater || PV->NoSensor || PV->Starting || PV->ShortCircuit || PV->LastTTemp != CTTemp)PV->DestinationReached = 0; + PV->LastTTemp = CTTemp; + +/**** GET ROOM TEMPERATURE **********************************************************/ + if(PIDStep){ + dw = ADCData.VRT >> 2; + dw *= 147; + dw >>= 8; + dw -= 100; + RTAvg -= intshr(RTAvg, ADCAVG); + RTAvg += dw; + CRTemp = intshr(RTAvg, ADCAVG); + } +/************************************************************************************/ + +/**** GET HEATER RESISTANCE *********************************************************/ + if(PV->NoHeater) PV->NoHeaterCnt = (1 << (AVG + 1)); + if(PV->NoHeaterCnt) PV->NoHeaterCnt--; + if(PV->NoHeater){ + PV->HInitData = 1; + PV->HVAvg = 0; + PV->HIAvg = 0; + PV->HRAvg = 0x7FFF; + PV->HPAvg = 0; + PV->OffDelay = 1600; + } + else{ + if(PV->HInitData) PV->HRAvg = PV->HR << AVG; + if(PV->HNewData){ + if(PV->HInitData){ + PV->HVAvg = PV->HV << AVG; + PV->HIAvg = PV->HI << AVG; + PV->HRAvg = PV->HR << AVG; + PV->HPAvg = PV->HP << AVG; + PV->HInitData = 0; + } + PV->HVAvg -= PV->HVAvg >> AVG; + PV->HVAvg += PV->HV; + PV->HIAvg -= PV->HIAvg >> AVG; + PV->HIAvg += PV->HI; + PV->HRAvg -= PV->HRAvg >> AVG; + PV->HRAvg += PV->HR; + PV->HPAvg -= PV->HPAvg >> AVG; + PV->HPAvg += PV->HP; + PV->HNewData=0; + } + } +/************************************************************************************/ + + PV->ADCTemp[1]=PV->ADCTemp[0]; + PV->ADCTemp[0] = ADCData.VTEMP[1]; + +/**** WAVE SHAPING *****************************************************/ + PV->WSCorr = 0; + if(IC->WSLen){ + if(PV->Starting || PV->NoHeaterCnt || PV->NoSensor || PV->ShortCircuit){ + for(i = 8; i--; ){ + PV->WSDelta[i].cnt = 0; + PV->WSDelta[i].val = 0; + PV->WSMul = 32768; + PV->WSTemp = 0; + } + } + else{ + //if(PV->DestinationReached == 0) for(i = 8; i--;) PV->WSDelta[i].cnt = 0; + if(ADCData.HeaterOn){ + if(PV->OffCnt > 1){ + i = min(PV->OffCnt, 8); + w = PV->WSDelta[0].val; + if(i > PV->WSDelta[0].cnt){ + PV->WSDelta[0].cnt = i; + PV->WSDelta[0].val = (PV->ADCTemp[1] - PV->ADCTemp[0]) << 1; + } + else if(i == PV->WSDelta[0].cnt){ + PV->WSDelta[0].val = intshr(PV->WSDelta[0].val, 1); + PV->WSDelta[0].val += (PV->ADCTemp[1] - PV->ADCTemp[0]); + } + w -= PV->WSDelta[0].val; + for(i = 1; i < 8; i++) PV->WSDelta[i].val -= w; + } + PV->LastOn = PV->ADCTemp[0]; + PV->OffCnt = 0; + PV->WSCorr = intshr(PV->WSDelta[0].val, 1); + } + else{ + if(PV->OffCnt < 8){ + if(PV->OffCnt > 0){ + if(PV->WSDelta[PV->OffCnt].cnt==0){ + PV->WSDelta[PV->OffCnt].val = intshr(PV->WSDelta[0].val, 1) - (PV->ADCTemp[0] - PV->LastOn); + PV->WSDelta[PV->OffCnt].cnt = 1; + } + else{ + PV->WSDelta[PV->OffCnt].val = intshr(PV->WSDelta[PV->OffCnt].val, 1); + } + PV->WSDelta[PV->OffCnt].val += intshr(PV->WSDelta[0].val, 1) - (PV->ADCTemp[0] - PV->LastOn); + assertin(PV->WSDelta[PV->OffCnt].val, 0, PV->WSDelta[PV->OffCnt - 1].val); + if(PV->OffCnt == 1){ + //WSMul = multiplier for damping waveshaping + if(PV->WSDelta[0].val != 0){ + PV->WSMul = (((INT32)PV->WSDelta[1].val) << 16) / ((INT32)PV->WSDelta[0].val); + //PV->WSMul *= 1200; + //PV->WSMul >>= 10; + if(PV->WSMul < 0) PV->WSMul = 0; + if(PV->WSMul > 32768) PV->WSMul = 32768; + } + } + } + if(IC->WSLen < 0){ + //damping waveshaping + if(PV->WSDelta[0].val > 0){ + dw = (PV->WSMul * 1152) >> 10; + for(i = 1; i < PV->OffCnt; i++){ + dw = (dw * ((PV->WSMul * 1700) >> 10)) >> 16; + } + } + else{ + dw = PV->WSMul; + for(i = 1; i < PV->OffCnt; i++){ + dw = (dw * PV->WSMul) >> 16; + } + } + PV->WSCorr = intshr((((INT32)PV->WSDelta[0].val) * dw), 17); + } + else{ + //sample waveshaping + if(PV->OffCnt < IC->WSLen)PV->WSCorr = intshr(PV->WSDelta[PV->OffCnt].val, 1); + } + } + } + //if(IC->WSLen > 0){ + //sample waveshaping + //if(PV->OffCnt < IC->WSLen){ + //PV->WSCorr = intshr(PV->WSDelta[PV->OffCnt].val, 1); + //} + //else{ + //PV->WSCorr += (intshr(PV->WSDelta[IC->WSLen - 1].val, 1) * (IC->WSLen-1)) / PV->OffCnt; + //} + //} + if(PV->OffCnt < 255)PV->OffCnt++; + } + } +/************************************************************************************/ + w = PV->WSCorr *= 1024; + w >>= 10;//PV->WSCorr >>= 10 +/**** GET AND NORMALISE IRON TEMPRATURE *********************************************/ + w += PV->ADCTemp[0]; + //w = PV->ADCTemp[0] + PV->WSCorr; + if(w < 0) w = 0; + + //heater resistance compensation for series TC + //compensation = (HRCompCurrent * 19.6 * Gain * HRAvg)/65536 + //compensation = (((HRCompCurrent * Gain * 20070) / 32767) * HRAvg) / 2048; + w -= ((((INT32)IC->Gain * (INT32)IC->HRCompCurrent * 20070L) >> 15) * (INT32)(PV->HRAvg >> AVG)) >> 11; + + +/************************************************************************************/ + + { + dw = w + IC->Offset; + if(dw < 0)dw = 0; + if(dw > 2047)dw = 2047; + +/******* INPUT MILLIVOLTS CALCULATION ***********************************************/ + //ADC = Vin * 750 * (IC->Gain / 256) * (1024 / 3000mV) + //mV = (256 * 3000 * ADC) / (750 * 1024 * IC->Gain)) = ADC / IC->Gain + ExtFloat x1; + if(x1.m = ((UINT32)dw) << 20){ + x1.e = 138; + while (x1.m < 0x80000000){ + x1.m <<=1; + x1.e--; + } + } + ExtFloatDivByUInt(x1, IC->Gain); + +/******* Resistance calculation if resistive sensor *********************************/ + //R=mV/Current=mV / ((1.225V * IC->Current) / (1600 * 256)) + if(IC->Type==2){ + const ExtFloat rcc = { + 0xA72F0539, //1.6*256/1.225 32 bit mantissa + 127+8 //1.6*256/1.225 exponent + }; + ExtFloatMul(x1, rcc); + UINT32 Current; + if(IC->InputInv){ + Current = IC->CurrentA; //divide by current A if channel A selected as positive input + if(!IC->CBandA) x1.e -=4; //divide by 16 if higher current band on channel A + } + else{ + Current = IC->CurrentB; //divide by current B if channel B selected as positive input + if(!IC->CBandB) x1.e =-4; //divide by 16 if higher current band on channel B + } + if(Current == 0) Current = 1; + ExtFloatDivByUInt(x1, Current); + } + SFLOAT CX = { + { + x1.m >> 8, + x1.e, + 0 + } + }; + PV->CPolyX = CX.f; + +// >>> At this point in x1 we have millivolts if thermocouple sensor, or ohms if PTC/NTC sensor. <<< + +/******* TEMPERATURE POLYNOMIAL CALCULATION *****************************************************/ + //T = C0 + C1 * X + c2 * X^2 + C3 * X^3 + ... + C9 * X^9 + + LATBbits.LATB7 = 0; + + int n; //current polynomial power + ExtFloat xn = x1; + ExtFloat PSum; + ExtFloat NSum; + + //Load positive or negative sum with the first polynomial coefficient depending on it's sign + float2ExtFloat(PSum, IC->TPoly[0]); + if(((SFLOAT)IC->TPoly[0]).s){ + NSum = PSum; + PSum.m = 0; + PSum.e = 0; + } + + for(n = 1; n < 10; n++){ + ExtFloat CSum, cn; + + float2ExtFloat(cn, IC->TPoly[n]); + + //get positive or negative sum depending on current coefficient sign + if(((SFLOAT)IC->TPoly[n]).s){ + CSum = NSum; + } + else{ + CSum = PSum; + } + + ExtFloatMul(cn, xn); + + ExtFloatAdd(CSum, cn); + + //store in positive or negative sum depending on current coefficient + if(((SFLOAT)IC->TPoly[n]).s){ + NSum = CSum; + } + else{ + PSum = CSum; + } + + //don't calculate next argument power if the end is reached + if(n >= 9) break; + + //calculate next polynomial argument power + ExtFloatMul(xn, x1); + } + + //calculate (PSum - NSum) * 2 in order to get integer temperature * 2 + dw=0; + if(PSum.e >= NSum.e){ + NSum.m >>= min(PSum.e - NSum.e, 32); + if(PSum.m > NSum.m){ + if(PSum.e >= 125 + 32){ + dw=1023; + } + else{ + PSum.m -= NSum.m; + dw = ((UINT64)PSum.m << (PSum.e - 125)) >> 32; + if(dw > 1023)dw = 1023; + } + } + } + + //Add room temperature if thermocouple + if(IC->Type == 1) dw += CRTemp; + if(dw > 1023)dw = 1023; + + PV->CTemp[0] = dw; + LATBbits.LATB7 = 1; + + } + +// >>> At this point in CTemp[0] we have temeprature in degrees Celsius, multiplied by 2. <<< + + if(PV->Starting || PV->NoHeaterCnt){ + PV->Starting = 0; + i = (1 << ADCAVG); + while(i--){ + PV->TBuff[i] = PV->CTemp[0]; + PV->SlopeBuff[i] = PV->CTemp[0]; + } + PV->TAvgP[0] = PV->CTemp[0]; + PV->TAvgP[1] = PV->CTemp[0]; + PV->TAvg=PV->CTemp[0]; + i = AVG; + while(i--)PV->TAvg += PV->TAvg; + PV->TAvgF[0] = PV->TAvg; + PV->TAvgF[1] = PV->TAvg; + PV->TSlope = 0; + PV->TBPos = 0; + PV->SBPos = 0; + } + + //TAvg = averaged temperature + PV->TAvg -= PV->TBuff[PV->TBPos]; + PV->TAvg += PV->CTemp[0]; + + //TBuff is array with most recent temperatures, used for TAvg calculation + PV->TBuff[PV->TBPos] = PV->CTemp[0]; + PV->TBPos++; + PV->TBPos &= (1 << AVG) - 1; + + //TAvgF = software RC filtered temperature + PV->TAvgF[1] = PV->TAvgF[0]; + PV->TAvgF[0] -= PV->TAvgF[0] >> AVG; + PV->TAvgF[0] += PV->CTemp[0]; + + //SlopeBuff is array with most recent averaged temperatures, used for TSlope calculation + PV->SlopeBuff[PV->SBPos] = PV->TAvg; + PV->SBPos++; + PV->SBPos &= (1 << AVG) - 1; + + //TSlope is current temperature slope, used with DGain to calculate current predicted temperature for PI controller + PV->TSlope -= intshr(PV->TSlope, 2); + PV->TSlope += PV->SlopeBuff[(PV->SBPos - 1) & ((1 << AVG) - 1)]; + PV->TSlope -= PV->SlopeBuff[PV->SBPos]; + + dw = ((INT32)IC->PID_DGain) * intshr(PV->TSlope, 2); + dw = intshr(dw, AVG + 2); + + //TAvgP is array with current end previous temperature for PI controller, TAvgP=TAvgF + (TSlope * DGain) / 4 + PV->TAvgP[1] = PV->TAvgP[0]; + PV->TAvgP[0] = (PV->TAvgF[0] >> AVG); + PV->TAvgP[0] += dw; + if(PV->TAvgP[0] < 0) PV->TAvgP[0] = 0; + if(PV->TAvgP[0] > 2047) PV->TAvgP[0] = 2047; + + if(PV->DestinationReached == 0 && WSL > 0){ + if(!PV->NoHeater && !PV->NoSensor && !PV->Starting && !PV->ShortCircuit){ + w = CTTemp << 2; + if( ((PV->TAvgP[0] >= w) && (PV->TAvgP[1] < w)) || ((PV->CTemp[0] >= w) && (PV->CTemp[1] < w)) ){ + //Shut off the power when destination is reached in order to calculate waveshaping shape. + PV->WSDelta[0].cnt = WSL - 1; + PV->KeepOff = WSL + 1; //(1 << AVG) + 1; + PV->DestinationReached = 1; + } + } + if(PV->DestinationReached == 0){ + w = PV->TAvgF[0] >> AVG; + w -= PV->WSTemp; + if(w <= -99 || w > 99){ + PV->WSTemp += w;//PV->TAvgF[0] >> AVG; + PV->WSDelta[0].cnt = WSL - 1; + PV->KeepOff = WSL + 1; //(1 << AVG) + 1; + } + } + } + + + //Delta is array with current and previous difference between set and current TAvgP, multiplied by 8 + PV->Delta[1] = PV->Delta[0]; + PV->Delta[0] = CTTemp << 2; + PV->Delta[0] -= PV->TAvgP[0]; + if(PV->Delta[0] > 511) PV->Delta[0] = 511; + if(PV->Delta[0] < -511) PV->Delta[0] = -511; + PV->Delta[0] <<= 5; + + + PV->PIDDutyI += PV->Delta[0] * (int)IC->PID_KI; + if((PV->PIDDutyP = PV->Delta[0] * (int)IC->PID_KP) >= 0){ + dw = 0x00FFFFFF; + if(PV->PIDDutyP > dw) PV->PIDDutyP = dw; + dw -= PV->PIDDutyP; + if(PV->PIDDutyI > dw || (PV->DestinationReached == 0 && PV->Delta[0] > (100<<6) )) PV->PIDDutyI = dw; + } + else{ + if(PV->PIDDutyI < 0) PV->PIDDutyI = 0; + dw = -(PV->Delta[0]) * (int)IC->PID_OVSGain; + if(dw > 4095) dw = 4095; + dw <<= 12; + dw = 0x00FFFFFF - dw; + if(PV->PIDDutyI > dw) PV->PIDDutyI = dw; + } + pdt = PV->PIDDutyP + PV->PIDDutyI; + if(pdt < 0) pdt = 0; + if((IC->Type == 0) || (IC->Type == 255) || PV->NoSensor) pdt = 0; + + PV->PIDDutyFull = pdt; //normalized duty + +/**** RECALCULATE DUTY FOR REAL VS RATED POWER*********************************/ + //Duty=Duty * rated power / peak power + pdt += 0x7FL; + pdt >>= 8; + if(PV->HP){ + dw = PV->HPAvg >> AVG; + pdt *= (INT32)IC->PID_PMax; + pdt /= dw; + } +/******************************************************************************/ + +/**** RECALCULATE DUTY FOR MAX 6.0A RMS CURRENT******************************/ + dw=0xFA00L; + if(PV->HI){ + dw = PV->HIAvg >> AVG; + if(dw > 192){ + dw = (INT32)(65535 * 192) / dw; + } + else{ + dw=0xFA00; + } + } + if(pdt > dw) pdt = dw; +/******************************************************************************/ + + pdt <<= 8; + if(PV->NoHeater) pdt=0x28F5C; //PWM = once per 2 seconds in order to detect heater resistance on open heater + if(PV->ShortCircuit) pdt=0x10624; //PWM = once per 5 seconds in order to detect heater resistance on short circuit + + PV->PIDDuty = pdt; + +} + +#undef _PID_C diff --git a/software/front/US_Firmware.X/PID.h b/software/front/US_Firmware.X/PID.h new file mode 100644 index 0000000..ca02fb8 --- /dev/null +++ b/software/front/US_Firmware.X/PID.h @@ -0,0 +1,109 @@ +/* + * File: PID.h + * Author: Sparky + * + * Created on ??????????, 2013, ?????? 21, 2:41 + */ + +#ifndef PID_H +#define PID_H +#include +#include "typedefs.h" +#include "ExtFloat.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define ADCAVG 3 + +#ifndef _PID_C +#define PID_H_EXTERN extern +#else +#define PID_H_EXTERN +#endif + + typedef struct { + int cnt; + int val; + }t_WSDelta; + + typedef struct { + UINT32 PWM; + INT32 PIDDutyP; + INT32 PIDDutyI; + UINT32 PIDDuty; + UINT32 PIDDutyFull; + + int Starting; + int LastTTemp; + int DestinationReached; + int KeepOff; + + int NoSensor; + int NoHeater; + int NoHeaterCnt; + int ShortCircuit; + + UINT32 OffDelay; //Delay between comparator threshold and zero cross point when heater is on, microseconds + + int ADCTemp[4]; + + t_WSDelta WSDelta[8]; + UINT32 WSMul; + int WSTemp; + int LastOn; + int OnCnt; + int OffCnt; + int WSCorr; + + int CTemp[2]; + int CHRes; + + int TAvg; + int TAvgF[2]; + int TAvgP[2]; + + int TBuff[(1< config3 + .config_BFC02FF4 : { + KEEP(*(.config_BFC02FF4)) + } > config2 + .config_BFC02FF8 : { + KEEP(*(.config_BFC02FF8)) + } > config1 + .config_BFC02FFC : { + KEEP(*(.config_BFC02FFC)) + } > config0 +} + + + + +PROVIDE(_DBG_CODE_ADDR = 0xBFC02000) ; +PROVIDE(_DBG_CODE_SIZE = 0xFF0) ; +SECTIONS +{ + + /* Boot Sections */ + .reset _RESET_ADDR : + { + KEEP(*(.reset)) + KEEP(*(.reset.startup)) + } > kseg1_boot_mem + .bev_excpt _BEV_EXCPT_ADDR : + { + KEEP(*(.bev_handler)) + } > kseg1_boot_mem + .dbg_excpt _DBG_EXCPT_ADDR (NOLOAD) : + { + . += (DEFINED (_DEBUGGER) ? 0x8 : 0x0); + } > kseg1_boot_mem + .dbg_code _DBG_CODE_ADDR (NOLOAD) : + { + . += (DEFINED (_DEBUGGER) ? _DBG_CODE_SIZE : 0x0); + } > debug_exec_mem + .app_excpt _GEN_EXCPT_ADDR : + { + KEEP(*(.gen_handler)) + } > exception_mem + .vector_0 _ebase_address + 0x200 : + { + KEEP(*(.vector_0)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_0) <= (_vector_spacing << 5), "function at exception vector 0 too large") + .vector_1 _ebase_address + 0x200 + (_vector_spacing << 5) * 1 : + { + KEEP(*(.vector_1)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_1) <= (_vector_spacing << 5), "function at exception vector 1 too large") + .vector_2 _ebase_address + 0x200 + (_vector_spacing << 5) * 2 : + { + KEEP(*(.vector_2)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_2) <= (_vector_spacing << 5), "function at exception vector 2 too large") + .vector_3 _ebase_address + 0x200 + (_vector_spacing << 5) * 3 : + { + KEEP(*(.vector_3)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_3) <= (_vector_spacing << 5), "function at exception vector 3 too large") + .vector_4 _ebase_address + 0x200 + (_vector_spacing << 5) * 4 : + { + KEEP(*(.vector_4)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_4) <= (_vector_spacing << 5), "function at exception vector 4 too large") + .vector_5 _ebase_address + 0x200 + (_vector_spacing << 5) * 5 : + { + KEEP(*(.vector_5)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_5) <= (_vector_spacing << 5), "function at exception vector 5 too large") + .vector_6 _ebase_address + 0x200 + (_vector_spacing << 5) * 6 : + { + KEEP(*(.vector_6)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_6) <= (_vector_spacing << 5), "function at exception vector 6 too large") + .vector_7 _ebase_address + 0x200 + (_vector_spacing << 5) * 7 : + { + KEEP(*(.vector_7)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_7) <= (_vector_spacing << 5), "function at exception vector 7 too large") + .vector_8 _ebase_address + 0x200 + (_vector_spacing << 5) * 8 : + { + KEEP(*(.vector_8)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_8) <= (_vector_spacing << 5), "function at exception vector 8 too large") + .vector_9 _ebase_address + 0x200 + (_vector_spacing << 5) * 9 : + { + KEEP(*(.vector_9)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_9) <= (_vector_spacing << 5), "function at exception vector 9 too large") + .vector_10 _ebase_address + 0x200 + (_vector_spacing << 5) * 10 : + { + KEEP(*(.vector_10)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_10) <= (_vector_spacing << 5), "function at exception vector 10 too large") + .vector_11 _ebase_address + 0x200 + (_vector_spacing << 5) * 11 : + { + KEEP(*(.vector_11)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_11) <= (_vector_spacing << 5), "function at exception vector 11 too large") + .vector_12 _ebase_address + 0x200 + (_vector_spacing << 5) * 12 : + { + KEEP(*(.vector_12)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_12) <= (_vector_spacing << 5), "function at exception vector 12 too large") + .vector_13 _ebase_address + 0x200 + (_vector_spacing << 5) * 13 : + { + KEEP(*(.vector_13)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_13) <= (_vector_spacing << 5), "function at exception vector 13 too large") + .vector_14 _ebase_address + 0x200 + (_vector_spacing << 5) * 14 : + { + KEEP(*(.vector_14)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_14) <= (_vector_spacing << 5), "function at exception vector 14 too large") + .vector_15 _ebase_address + 0x200 + (_vector_spacing << 5) * 15 : + { + KEEP(*(.vector_15)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_15) <= (_vector_spacing << 5), "function at exception vector 15 too large") + .vector_16 _ebase_address + 0x200 + (_vector_spacing << 5) * 16 : + { + KEEP(*(.vector_16)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_16) <= (_vector_spacing << 5), "function at exception vector 16 too large") + .vector_17 _ebase_address + 0x200 + (_vector_spacing << 5) * 17 : + { + KEEP(*(.vector_17)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_17) <= (_vector_spacing << 5), "function at exception vector 17 too large") + .vector_18 _ebase_address + 0x200 + (_vector_spacing << 5) * 18 : + { + KEEP(*(.vector_18)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_18) <= (_vector_spacing << 5), "function at exception vector 18 too large") + .vector_19 _ebase_address + 0x200 + (_vector_spacing << 5) * 19 : + { + KEEP(*(.vector_19)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_19) <= (_vector_spacing << 5), "function at exception vector 19 too large") + .vector_20 _ebase_address + 0x200 + (_vector_spacing << 5) * 20 : + { + KEEP(*(.vector_20)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_20) <= (_vector_spacing << 5), "function at exception vector 20 too large") + .vector_21 _ebase_address + 0x200 + (_vector_spacing << 5) * 21 : + { + KEEP(*(.vector_21)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_21) <= (_vector_spacing << 5), "function at exception vector 21 too large") + .vector_22 _ebase_address + 0x200 + (_vector_spacing << 5) * 22 : + { + KEEP(*(.vector_22)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_22) <= (_vector_spacing << 5), "function at exception vector 22 too large") + .vector_23 _ebase_address + 0x200 + (_vector_spacing << 5) * 23 : + { + KEEP(*(.vector_23)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_23) <= (_vector_spacing << 5), "function at exception vector 23 too large") + .vector_24 _ebase_address + 0x200 + (_vector_spacing << 5) * 24 : + { + KEEP(*(.vector_24)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_24) <= (_vector_spacing << 5), "function at exception vector 24 too large") + .vector_25 _ebase_address + 0x200 + (_vector_spacing << 5) * 25 : + { + KEEP(*(.vector_25)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_25) <= (_vector_spacing << 5), "function at exception vector 25 too large") + .vector_26 _ebase_address + 0x200 + (_vector_spacing << 5) * 26 : + { + KEEP(*(.vector_26)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_26) <= (_vector_spacing << 5), "function at exception vector 26 too large") + .vector_27 _ebase_address + 0x200 + (_vector_spacing << 5) * 27 : + { + KEEP(*(.vector_27)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_27) <= (_vector_spacing << 5), "function at exception vector 27 too large") + .vector_28 _ebase_address + 0x200 + (_vector_spacing << 5) * 28 : + { + KEEP(*(.vector_28)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_28) <= (_vector_spacing << 5), "function at exception vector 28 too large") + .vector_29 _ebase_address + 0x200 + (_vector_spacing << 5) * 29 : + { + KEEP(*(.vector_29)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_29) <= (_vector_spacing << 5), "function at exception vector 29 too large") + .vector_30 _ebase_address + 0x200 + (_vector_spacing << 5) * 30 : + { + KEEP(*(.vector_30)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_30) <= (_vector_spacing << 5), "function at exception vector 30 too large") + .vector_31 _ebase_address + 0x200 + (_vector_spacing << 5) * 31 : + { + KEEP(*(.vector_31)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_31) <= (_vector_spacing << 5), "function at exception vector 31 too large") + .vector_32 _ebase_address + 0x200 + (_vector_spacing << 5) * 32 : + { + KEEP(*(.vector_32)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_32) <= (_vector_spacing << 5), "function at exception vector 32 too large") + .vector_33 _ebase_address + 0x200 + (_vector_spacing << 5) * 33 : + { + KEEP(*(.vector_33)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_33) <= (_vector_spacing << 5), "function at exception vector 33 too large") + .vector_34 _ebase_address + 0x200 + (_vector_spacing << 5) * 34 : + { + KEEP(*(.vector_34)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_34) <= (_vector_spacing << 5), "function at exception vector 34 too large") + .vector_35 _ebase_address + 0x200 + (_vector_spacing << 5) * 35 : + { + KEEP(*(.vector_35)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_35) <= (_vector_spacing << 5), "function at exception vector 35 too large") + .vector_36 _ebase_address + 0x200 + (_vector_spacing << 5) * 36 : + { + KEEP(*(.vector_36)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_36) <= (_vector_spacing << 5), "function at exception vector 36 too large") + .vector_37 _ebase_address + 0x200 + (_vector_spacing << 5) * 37 : + { + KEEP(*(.vector_37)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_37) <= (_vector_spacing << 5), "function at exception vector 37 too large") + .vector_38 _ebase_address + 0x200 + (_vector_spacing << 5) * 38 : + { + KEEP(*(.vector_38)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_38) <= (_vector_spacing << 5), "function at exception vector 38 too large") + .vector_39 _ebase_address + 0x200 + (_vector_spacing << 5) * 39 : + { + KEEP(*(.vector_39)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_39) <= (_vector_spacing << 5), "function at exception vector 39 too large") + .vector_40 _ebase_address + 0x200 + (_vector_spacing << 5) * 40 : + { + KEEP(*(.vector_40)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_40) <= (_vector_spacing << 5), "function at exception vector 40 too large") + .vector_41 _ebase_address + 0x200 + (_vector_spacing << 5) * 41 : + { + KEEP(*(.vector_41)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_41) <= (_vector_spacing << 5), "function at exception vector 41 too large") + .vector_42 _ebase_address + 0x200 + (_vector_spacing << 5) * 42 : + { + KEEP(*(.vector_42)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_42) <= (_vector_spacing << 5), "function at exception vector 42 too large") + .vector_43 _ebase_address + 0x200 + (_vector_spacing << 5) * 43 : + { + KEEP(*(.vector_43)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_43) <= (_vector_spacing << 5), "function at exception vector 43 too large") + .vector_44 _ebase_address + 0x200 + (_vector_spacing << 5) * 44 : + { + KEEP(*(.vector_44)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_44) <= (_vector_spacing << 5), "function at exception vector 44 too large") + .vector_45 _ebase_address + 0x200 + (_vector_spacing << 5) * 45 : + { + KEEP(*(.vector_45)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_45) <= (_vector_spacing << 5), "function at exception vector 45 too large") + .vector_46 _ebase_address + 0x200 + (_vector_spacing << 5) * 46 : + { + KEEP(*(.vector_46)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_46) <= (_vector_spacing << 5), "function at exception vector 46 too large") + .vector_47 _ebase_address + 0x200 + (_vector_spacing << 5) * 47 : + { + KEEP(*(.vector_47)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_47) <= (_vector_spacing << 5), "function at exception vector 47 too large") + .vector_48 _ebase_address + 0x200 + (_vector_spacing << 5) * 48 : + { + KEEP(*(.vector_48)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_48) <= (_vector_spacing << 5), "function at exception vector 48 too large") + .vector_49 _ebase_address + 0x200 + (_vector_spacing << 5) * 49 : + { + KEEP(*(.vector_49)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_49) <= (_vector_spacing << 5), "function at exception vector 49 too large") + .vector_50 _ebase_address + 0x200 + (_vector_spacing << 5) * 50 : + { + KEEP(*(.vector_50)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_50) <= (_vector_spacing << 5), "function at exception vector 50 too large") + .vector_51 _ebase_address + 0x200 + (_vector_spacing << 5) * 51 : + { + KEEP(*(.vector_51)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_51) <= (_vector_spacing << 5), "function at exception vector 51 too large") + .vector_52 _ebase_address + 0x200 + (_vector_spacing << 5) * 52 : + { + KEEP(*(.vector_52)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_52) <= (_vector_spacing << 5), "function at exception vector 52 too large") + .vector_53 _ebase_address + 0x200 + (_vector_spacing << 5) * 53 : + { + KEEP(*(.vector_53)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_53) <= (_vector_spacing << 5), "function at exception vector 53 too large") + .vector_54 _ebase_address + 0x200 + (_vector_spacing << 5) * 54 : + { + KEEP(*(.vector_54)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_54) <= (_vector_spacing << 5), "function at exception vector 54 too large") + .vector_55 _ebase_address + 0x200 + (_vector_spacing << 5) * 55 : + { + KEEP(*(.vector_55)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_55) <= (_vector_spacing << 5), "function at exception vector 55 too large") + .vector_56 _ebase_address + 0x200 + (_vector_spacing << 5) * 56 : + { + KEEP(*(.vector_56)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_56) <= (_vector_spacing << 5), "function at exception vector 56 too large") + .vector_57 _ebase_address + 0x200 + (_vector_spacing << 5) * 57 : + { + KEEP(*(.vector_57)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_57) <= (_vector_spacing << 5), "function at exception vector 57 too large") + .vector_58 _ebase_address + 0x200 + (_vector_spacing << 5) * 58 : + { + KEEP(*(.vector_58)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_58) <= (_vector_spacing << 5), "function at exception vector 58 too large") + .vector_59 _ebase_address + 0x200 + (_vector_spacing << 5) * 59 : + { + KEEP(*(.vector_59)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_59) <= (_vector_spacing << 5), "function at exception vector 59 too large") + .vector_60 _ebase_address + 0x200 + (_vector_spacing << 5) * 60 : + { + KEEP(*(.vector_60)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_60) <= (_vector_spacing << 5), "function at exception vector 60 too large") + .vector_61 _ebase_address + 0x200 + (_vector_spacing << 5) * 61 : + { + KEEP(*(.vector_61)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_61) <= (_vector_spacing << 5), "function at exception vector 61 too large") + .vector_62 _ebase_address + 0x200 + (_vector_spacing << 5) * 62 : + { + KEEP(*(.vector_62)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_62) <= (_vector_spacing << 5), "function at exception vector 62 too large") + .vector_63 _ebase_address + 0x200 + (_vector_spacing << 5) * 63 : + { + KEEP(*(.vector_63)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_63) <= (_vector_spacing << 5), "function at exception vector 63 too large") + /* Starting with C32 v2.00, the startup code is in the .reset.startup section. + * Keep this here for backwards compatibility. + */ + .startup ORIGIN(kseg0_boot_mem) : + { + KEEP(*(.startup)) + } > kseg0_boot_mem + /* Code Sections - Note that input sections *(.text) and *(.text.*) + ** are not mapped here. Starting in C32 v2.00, the best-fit allocator + ** locates them, so that .text may flow around absolute sections + ** as needed. + */ + .text : + { + *(.stub .gnu.linkonce.t.*) + KEEP (*(.text.*personality*)) + *(.mips16.fn.*) + *(.mips16.call.*) + *(.gnu.warning) + . = ALIGN(4) ; + } >kseg0_program_mem + /* Global-namespace object initialization */ + .init : + { + KEEP (*crti.o(.init)) + KEEP (*crtbegin.o(.init)) + KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o *crtn.o ).init)) + KEEP (*crtend.o(.init)) + KEEP (*crtn.o(.init)) + . = ALIGN(4) ; + } >kseg0_program_mem + .fini : + { + KEEP (*(.fini)) + . = ALIGN(4) ; + } >kseg0_program_mem + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + . = ALIGN(4) ; + } >kseg0_program_mem + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + . = ALIGN(4) ; + } >kseg0_program_mem + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + . = ALIGN(4) ; + } >kseg0_program_mem + .ctors : + { + /* XC32 uses crtbegin.o to find the start of + the constructors, so we make sure it is + first. Because this is a wildcard, it + doesn't matter if the user does not + actually link against crtbegin.o; the + linker won't look for a file to match a + wildcard. The wildcard also means that it + doesn't matter which directory crtbegin.o + is in. */ + KEEP (*crtbegin.o(.ctors)) + KEEP (*crtbegin?.o(.ctors)) + /* We don't want to include the .ctor section from + the crtend.o file until after the sorted ctors. + The .ctor section from the crtend file contains the + end of ctors marker and it must be last */ + KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) + KEEP (*(SORT(.ctors.*))) + KEEP (*(.ctors)) + . = ALIGN(4) ; + } >kseg0_program_mem + .dtors : + { + KEEP (*crtbegin.o(.dtors)) + KEEP (*crtbegin?.o(.dtors)) + KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) + KEEP (*(SORT(.dtors.*))) + KEEP (*(.dtors)) + . = ALIGN(4) ; + } >kseg0_program_mem + /* Read-only sections */ + .rodata : + { + *( .gnu.linkonce.r.*) + *(.rodata1) + . = ALIGN(4) ; + } >kseg0_program_mem + /* + * Small initialized constant global and static data can be placed in the + * .sdata2 section. This is different from .sdata, which contains small + * initialized non-constant global and static data. + */ + .sdata2 ALIGN(4) : + { + *(.sdata2 .sdata2.* .gnu.linkonce.s2.*) + . = ALIGN(4) ; + } >kseg0_program_mem + /* + * Uninitialized constant global and static data (i.e., variables which will + * always be zero). Again, this is different from .sbss, which contains + * small non-initialized, non-constant global and static data. + */ + .sbss2 ALIGN(4) : + { + *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*) + . = ALIGN(4) ; + } >kseg0_program_mem + .eh_frame_hdr : + { + *(.eh_frame_hdr) + } >kseg0_program_mem + . = ALIGN(4) ; + .eh_frame : ONLY_IF_RO + { + KEEP (*(.eh_frame)) + } >kseg0_program_mem + . = ALIGN(4) ; + .gcc_except_table : ONLY_IF_RO + { + *(.gcc_except_table .gcc_except_table.*) + } >kseg0_program_mem + . = ALIGN(4) ; + .dbg_data (NOLOAD) : + { + . += (DEFINED (_DEBUGGER) ? 0x200 : 0x0); + } >kseg1_data_mem + .jcr : + { + KEEP (*(.jcr)) + . = ALIGN(4) ; + } >kseg1_data_mem + .eh_frame : ONLY_IF_RW + { + KEEP (*(.eh_frame)) + } >kseg1_data_mem + . = ALIGN(4) ; + .gcc_except_table : ONLY_IF_RW + { + *(.gcc_except_table .gcc_except_table.*) + } >kseg1_data_mem + . = ALIGN(4) ; + /* Persistent data - Use the new C 'persistent' attribute instead. */ + .persist : + { + _persist_begin = .; + *(.persist .persist.*) + *(.pbss .pbss.*) + . = ALIGN(4) ; + _persist_end = .; + } >kseg1_data_mem + /* + * Note that input sections named .data* are no longer mapped here. + * Starting in C32 v2.00, the best-fit allocator locates them, so + * that they may flow around absolute sections as needed. + */ + .data : + { + *( .gnu.linkonce.d.*) + SORT(CONSTRUCTORS) + *(.data1) + . = ALIGN(4) ; + } >kseg1_data_mem + . = .; + _gp = ALIGN(16) + 0x7ff0; + .got ALIGN(4) : + { + *(.got.plt) *(.got) + . = ALIGN(4) ; + } >kseg1_data_mem /* AT>kseg0_program_mem */ + /* + * Note that "small" data sections are still mapped in the linker + * script. This ensures that they are grouped together for + * gp-relative addressing. Absolute sections are allocated after + * the "small" data sections so small data cannot flow around them. + */ + /* + * We want the small data sections together, so single-instruction offsets + * can access them all, and initialized data all before uninitialized, so + * we can shorten the on-disk segment size. + */ + .sdata ALIGN(4) : + { + _sdata_begin = . ; + *(.sdata .sdata.* .gnu.linkonce.s.*) + . = ALIGN(4) ; + _sdata_end = . ; + } >kseg1_data_mem + .lit8 : + { + *(.lit8) + } >kseg1_data_mem + .lit4 : + { + *(.lit4) + } >kseg1_data_mem + . = ALIGN (4) ; + _data_end = . ; + _bss_begin = . ; + .sbss ALIGN(4) : + { + _sbss_begin = . ; + *(.dynsbss) + *(.sbss .sbss.* .gnu.linkonce.sb.*) + *(.scommon) + _sbss_end = . ; + . = ALIGN(4) ; + } >kseg1_data_mem + /* + * Align here to ensure that the .bss section occupies space up to + * _end. Align after .bss to ensure correct alignment even if the + * .bss section disappears because there are no input sections. + * + * Note that input sections named .bss* are no longer mapped here. + * Starting in C32 v2.00, the best-fit allocator locates them, so + * that they may flow around absolute sections as needed. + * + */ + .bss : + { + *(.dynbss) + *(COMMON) + /* Align here to ensure that the .bss section occupies space up to + _end. Align after .bss to ensure correct alignment even if the + .bss section disappears because there are no input sections. */ + . = ALIGN(. != 0 ? 4 : 1); + } >kseg1_data_mem + . = ALIGN(4) ; + _end = . ; + _bss_end = . ; + /* Starting with C32 v2.00, the heap and stack are dynamically + * allocated by the linker. + */ + /* + * RAM functions go at the end of our stack and heap allocation. + * Alignment of 2K required by the boundary register (BMXDKPBA). + * + * RAM functions are now allocated by the linker. The linker generates + * _ramfunc_begin and _bmxdkpba_address symbols depending on the + * location of RAM functions. + */ + _bmxdudba_address = LENGTH(kseg1_data_mem) ; + _bmxdupba_address = LENGTH(kseg1_data_mem) ; + /* The .pdr section belongs in the absolute section */ + /DISCARD/ : { *(.pdr) } + .gptab.sdata : { *(.gptab.data) *(.gptab.sdata) } + .gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) } + .mdebug.abi32 : { KEEP(*(.mdebug.abi32)) } + .mdebug.abiN32 : { KEEP(*(.mdebug.abiN32)) } + .mdebug.abi64 : { KEEP(*(.mdebug.abi64)) } + .mdebug.abiO64 : { KEEP(*(.mdebug.abiO64)) } + .mdebug.eabi32 : { KEEP(*(.mdebug.eabi32)) } + .mdebug.eabi64 : { KEEP(*(.mdebug.eabi64)) } + .gcc_compiled_long32 : { KEEP(*(.gcc_compiled_long32)) } + .gcc_compiled_long64 : { KEEP(*(.gcc_compiled_long64)) } + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + /* DWARF debug sections. + Symbols in the DWARF debugging sections are relative to the beginning + of the section so we begin them at 0. */ + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } + .debug_pubtypes 0 : { *(.debug_pubtypes) } + .debug_ranges 0 : { *(.debug_ranges) } + /DISCARD/ : { *(.rel.dyn) } + .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } + /DISCARD/ : { *(.note.GNU-stack) } + /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) *(.discard) } +} diff --git a/software/front/US_Firmware.X/font24x32numbers.h b/software/front/US_Firmware.X/font24x32numbers.h new file mode 100644 index 0000000..ccde52e --- /dev/null +++ b/software/front/US_Firmware.X/font24x32numbers.h @@ -0,0 +1,994 @@ +/* + * File: font24x32numbers.h + * Author: Sparky + * + * Created on ?????????, 2014, ??? 15, 20:44 + */ + +#ifndef FONT24X32NUMBERS_H +#define FONT24X32NUMBERS_H + +#ifdef __cplusplus +extern "C" { +#endif + +/*const UINT8 numbers24x32[10][96]={ +0b00000000, +0b00000000, +0b00000000, +0b11000000, +0b11100000, +0b11111000, +0b11111000, +0b11111100, +0b11111100, +0b11111110, +0b01111110, +0b00111110, +0b00111110, +0b00111110, +0b01111110, +0b11111110, +0b11111100, +0b11111100, +0b11111000, +0b11111000, +0b11100000, +0b11000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11111100, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b00000001, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000001, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111100, +0b00000000, +0b00000000, +0b00000000, +0b00111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b10000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b10000000, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b00111111, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000011, +0b00000111, +0b00011111, +0b00011111, +0b00111111, +0b00111111, +0b01111111, +0b01111110, +0b01111100, +0b01111100, +0b01111100, +0b01111110, +0b01111111, +0b00111111, +0b00111111, +0b00011111, +0b00011111, +0b00000111, +0b00000011, +0b00000000, +0b00000000, + +0b00000000, +0b00000000, +0b00000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11100000, +0b11100000, +0b11111000, +0b11111100, +0b11111100, +0b11111100, +0b11111100, +0b11111100, +0b11111100, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b01111100, +0b01111100, +0b01111100, +0b01111100, +0b01111100, +0b01111100, +0b01111111, +0b01111111, +0b01111111, +0b01111111, +0b01111111, +0b01111111, +0b01111111, +0b01111100, +0b01111100, +0b01111100, +0b01111100, +0b01111100, +0b01111100, +0b00000000, +0b00000000, + +0b00000000, +0b00000000, +0b00000000, +0b11111000, +0b11111100, +0b11111100, +0b11111100, +0b01111110, +0b01111110, +0b01111110, +0b01111110, +0b01111110, +0b01111110, +0b11111110, +0b11111110, +0b11111110, +0b11111100, +0b11111100, +0b11111000, +0b11111000, +0b11100000, +0b10000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000001, +0b00000001, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11000001, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b00011111, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b10000000, +0b11000000, +0b11100000, +0b11110000, +0b11111000, +0b11111100, +0b11111110, +0b11111111, +0b01111111, +0b00111111, +0b00011111, +0b00001111, +0b00000111, +0b00000011, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b01111100, +0b01111110, +0b01111110, +0b01111111, +0b01111111, +0b01111111, +0b01111111, +0b01111111, +0b01111111, +0b01111111, +0b01111101, +0b01111100, +0b01111100, +0b01111100, +0b01111100, +0b01111100, +0b01111100, +0b01111100, +0b01111100, +0b01111100, +0b01111100, +0b00000000, + +0b00000000, +0b00000000, +0b00000000, +0b11111000, +0b11111100, +0b11111100, +0b11111100, +0b01111110, +0b01111110, +0b01111110, +0b01111110, +0b01111110, +0b01111110, +0b01111110, +0b11111110, +0b11111110, +0b11111100, +0b11111100, +0b11111100, +0b11111000, +0b11110000, +0b11000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000001, +0b00000001, +0b00000000, +0b00000000, +0b00000000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11110000, +0b11110000, +0b11111111, +0b11111111, +0b11111111, +0b01111111, +0b00111111, +0b00011111, +0b00000111, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b10000000, +0b10000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000111, +0b10000111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111110, +0b11111100, +0b11111000, +0b00000000, +0b00000000, +0b00000000, +0b00011111, +0b00111111, +0b00111111, +0b00111111, +0b01111111, +0b01111110, +0b01111110, +0b01111110, +0b01111110, +0b01111110, +0b01111110, +0b01111110, +0b01111111, +0b01111111, +0b00111111, +0b00111111, +0b00011111, +0b00011111, +0b00001111, +0b00000111, +0b00000001, +0b00000000, + +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b10000000, +0b11100000, +0b11110000, +0b11111100, +0b11111100, +0b11111100, +0b11111100, +0b11111100, +0b11111100, +0b11111100, +0b11111100, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b10000000, +0b11000000, +0b11110000, +0b11111000, +0b11111100, +0b01111111, +0b00011111, +0b00001111, +0b00000011, +0b00000001, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11111100, +0b11111110, +0b11111111, +0b11111111, +0b11111111, +0b11111011, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111000, +0b11111000, +0b11111000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b01111111, +0b01111111, +0b01111111, +0b01111111, +0b01111111, +0b01111111, +0b01111111, +0b00000000, +0b00000000, +0b00000000, +0b00000000, + +0b00000000, +0b00000000, +0b00000000, +0b11111100, +0b11111100, +0b11111100, +0b11111100, +0b11111100, +0b11111100, +0b11111100, +0b01111100, +0b01111100, +0b01111100, +0b01111100, +0b01111100, +0b01111100, +0b01111100, +0b01111100, +0b01111100, +0b01111100, +0b01111100, +0b01111100, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11100000, +0b11100000, +0b11000000, +0b11000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b10000000, +0b10000011, +0b00000011, +0b00000001, +0b00000001, +0b00000001, +0b00000001, +0b00000001, +0b00000001, +0b00000001, +0b00000001, +0b00000011, +0b00000011, +0b10000111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111110, +0b00000000, +0b00000000, +0b00000000, +0b00011111, +0b00111111, +0b00111111, +0b00111111, +0b01111111, +0b01111110, +0b01111110, +0b01111110, +0b01111110, +0b01111110, +0b01111110, +0b01111111, +0b01111111, +0b01111111, +0b00111111, +0b00111111, +0b00011111, +0b00011111, +0b00001111, +0b00000011, +0b00000000, +0b00000000, + +0b00000000, +0b00000000, +0b00000000, +0b10000000, +0b11000000, +0b11100000, +0b11110000, +0b11111000, +0b11111000, +0b11111100, +0b11111100, +0b01111110, +0b01111110, +0b00111110, +0b00111110, +0b00111110, +0b00111110, +0b00111110, +0b00111110, +0b01111110, +0b01111110, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11110000, +0b11111110, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11100111, +0b11110001, +0b11110000, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11110000, +0b11110000, +0b11100000, +0b10000000, +0b00000000, +0b00000000, +0b00000000, +0b00111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b10000001, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000001, +0b00000011, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111110, +0b00000000, +0b00000000, +0b00000000, +0b00000001, +0b00000111, +0b00001111, +0b00011111, +0b00111111, +0b00111111, +0b01111111, +0b01111110, +0b01111100, +0b01111100, +0b01111100, +0b01111100, +0b01111110, +0b01111111, +0b00111111, +0b00111111, +0b00011111, +0b00011111, +0b00001111, +0b00000011, +0b00000000, +0b00000000, + +0b00000000, +0b00000000, +0b01111100, +0b01111100, +0b01111100, +0b01111100, +0b01111100, +0b01111100, +0b01111100, +0b01111100, +0b01111100, +0b01111100, +0b01111100, +0b01111100, +0b01111100, +0b11111100, +0b11111100, +0b11111100, +0b11111100, +0b11111100, +0b11111100, +0b11111100, +0b11111100, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b10000000, +0b11100000, +0b11111000, +0b11111110, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b00111111, +0b00001111, +0b00000011, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11000000, +0b11110000, +0b11111100, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b00111111, +0b00001111, +0b00000011, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b01000000, +0b01110000, +0b01111100, +0b01111111, +0b01111111, +0b01111111, +0b01111111, +0b01111111, +0b00111111, +0b00001111, +0b00000011, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, + +0b00000000, +0b11000000, +0b11100000, +0b11110000, +0b11111000, +0b11111100, +0b11111100, +0b11111110, +0b01111110, +0b00111110, +0b00111110, +0b00111110, +0b00111110, +0b00111110, +0b01111110, +0b11111110, +0b11111100, +0b11111100, +0b11111000, +0b11111000, +0b11110000, +0b11000000, +0b00000000, +0b00000000, +0b00000000, +0b00001111, +0b00011111, +0b00111111, +0b01111111, +0b11111111, +0b11111111, +0b11111111, +0b11111100, +0b11111000, +0b11110000, +0b11110000, +0b11100000, +0b11100000, +0b11110000, +0b11111111, +0b11111111, +0b11111111, +0b10111111, +0b00011111, +0b00001111, +0b00000111, +0b00000000, +0b00000000, +0b00000000, +0b11110000, +0b11111100, +0b11111110, +0b11111111, +0b11111111, +0b11111111, +0b00000111, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000111, +0b00000111, +0b00001111, +0b00011111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111110, +0b11111100, +0b11111000, +0b00000000, +0b00000000, +0b00000011, +0b00001111, +0b00011111, +0b00111111, +0b00111111, +0b00111111, +0b01111111, +0b01111110, +0b01111100, +0b01111100, +0b01111100, +0b01111100, +0b01111100, +0b01111110, +0b01111111, +0b00111111, +0b00111111, +0b00011111, +0b00011111, +0b00001111, +0b00000111, +0b00000001, +0b00000000, + +0b00000000, +0b00000000, +0b11000000, +0b11110000, +0b11111000, +0b11111000, +0b11111100, +0b11111100, +0b11111110, +0b01111110, +0b00111110, +0b00111110, +0b00111110, +0b00111110, +0b01111110, +0b11111110, +0b11111100, +0b11111100, +0b11111000, +0b11110000, +0b11100000, +0b11000000, +0b00000000, +0b00000000, +0b00000000, +0b01111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11000000, +0b10000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b10000001, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111110, +0b00000000, +0b00000000, +0b00000000, +0b00000001, +0b00000111, +0b00001111, +0b00001111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00001111, +0b10001111, +0b11100111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b01111111, +0b00001111, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b01111110, +0b01111110, +0b01111100, +0b01111100, +0b01111100, +0b01111100, +0b01111100, +0b01111100, +0b01111110, +0b01111110, +0b00111111, +0b00111111, +0b00011111, +0b00011111, +0b00001111, +0b00000111, +0b00000011, +0b00000001, +0b00000000, +0b00000000, +0b00000000 + +};*/ + + +#ifdef __cplusplus +} +#endif + +#endif /* FONT24X32NUMBERS_H */ + diff --git a/software/front/US_Firmware.X/font32x48numbers.h b/software/front/US_Firmware.X/font32x48numbers.h new file mode 100644 index 0000000..368da8f --- /dev/null +++ b/software/front/US_Firmware.X/font32x48numbers.h @@ -0,0 +1,4273 @@ +/* + * File: font32x48numbers.h + * Author: Sparky + * + * Created on ?????, 2014, ??? 16, 0:01 + */ + +#ifndef FONT32X48NUMBERS_H +#define FONT32X48NUMBERS_H + +#ifdef __cplusplus +extern "C" { +#endif + +const char numbers32x48[12][192]={ +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b10000000, +0b10000000, +0b11000000, +0b11000000, +0b11000000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11000000, +0b11000000, +0b11000000, +0b10000000, +0b10000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11100000, +0b11111000, +0b11111110, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b00111111, +0b00011111, +0b00001111, +0b00001111, +0b00001111, +0b00001111, +0b00011111, +0b00111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111110, +0b11111000, +0b11100000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11111110, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b00000001, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000001, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111110, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b01111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b10000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b10000000, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b01111111, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000111, +0b00011111, +0b01111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111100, +0b11111000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11111000, +0b11111100, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b01111111, +0b00011111, +0b00000111, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000001, +0b00000001, +0b00000011, +0b00000011, +0b00000011, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000011, +0b00000011, +0b00000011, +0b00000001, +0b00000001, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, + +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11111100, +0b11111100, +0b11111110, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000001, +0b00000001, +0b00000001, +0b00000001, +0b00000001, +0b00000001, +0b00000001, +0b00000001, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000000, +0b00000000, +0b00000000, +0b00000000, + +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b10000000, +0b10000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11000000, +0b11000000, +0b11000000, +0b10000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b01111111, +0b01111111, +0b00111111, +0b00011111, +0b00011111, +0b00011111, +0b00001111, +0b00001111, +0b00001111, +0b00001111, +0b00001111, +0b00001111, +0b00011111, +0b00011111, +0b01111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111110, +0b11111100, +0b11110000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b10000000, +0b11000000, +0b11110000, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b00111111, +0b00001111, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b10000000, +0b10000000, +0b11000000, +0b11100000, +0b11110000, +0b11111000, +0b11111100, +0b11111110, +0b11111111, +0b11111111, +0b11111111, +0b01111111, +0b00111111, +0b00011111, +0b00001111, +0b00000111, +0b00000001, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11110000, +0b11111000, +0b11111100, +0b11111110, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111011, +0b11111001, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000000, +0b00000000, + +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b10000000, +0b10000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11000000, +0b11000000, +0b11000000, +0b10000000, +0b10000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b01111111, +0b01111111, +0b00111111, +0b00111111, +0b00011111, +0b00011111, +0b00011111, +0b00001111, +0b00001111, +0b00001111, +0b00001111, +0b00001111, +0b00001111, +0b00001111, +0b00011111, +0b00111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111110, +0b11111000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11111000, +0b11111000, +0b11111100, +0b11111111, +0b11111111, +0b11111111, +0b10111111, +0b10111111, +0b00011111, +0b00001111, +0b00000111, +0b00000001, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000111, +0b00000111, +0b00001111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111110, +0b11111100, +0b11110000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11111110, +0b11111110, +0b11111100, +0b11111100, +0b11111000, +0b11111000, +0b11111000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11111000, +0b11111100, +0b11111110, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b01111111, +0b00111111, +0b00011111, +0b00000111, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000001, +0b00000001, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000011, +0b00000011, +0b00000011, +0b00000001, +0b00000001, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, + +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11000000, +0b11100000, +0b11110000, +0b11111100, +0b11111110, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b10000000, +0b11000000, +0b11100000, +0b11111000, +0b11111100, +0b11111110, +0b11111111, +0b11111111, +0b00111111, +0b00011111, +0b00001111, +0b00000111, +0b00000001, +0b00000000, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11111100, +0b11111110, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111011, +0b11111001, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b00000000, +0b00000000, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, + +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11110000, +0b11110000, +0b11110000, +0b11100000, +0b11000000, +0b10000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000111, +0b00000111, +0b00000111, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000111, +0b00000111, +0b00001111, +0b00011111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111100, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11111110, +0b11111110, +0b11111100, +0b11111100, +0b11111000, +0b11111000, +0b11111000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11111000, +0b11111000, +0b11111100, +0b11111110, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b01111111, +0b00111111, +0b00001111, +0b00000011, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000001, +0b00000001, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000011, +0b00000011, +0b00000011, +0b00000001, +0b00000001, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, + +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b10000000, +0b10000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11000000, +0b11110000, +0b11111000, +0b11111100, +0b11111110, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b01111111, +0b00111111, +0b00011111, +0b00011111, +0b00001111, +0b00001111, +0b00001111, +0b00001111, +0b00001111, +0b00001111, +0b00001111, +0b00001111, +0b00011111, +0b00011111, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11110000, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11110111, +0b11110000, +0b11111000, +0b11111000, +0b11111100, +0b11111100, +0b11111100, +0b11111100, +0b11111100, +0b11111100, +0b11111100, +0b11111100, +0b11111000, +0b11111000, +0b11110000, +0b11100000, +0b11000000, +0b10000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b00000001, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000001, +0b00000001, +0b00000111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111100, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000111, +0b00011111, +0b00111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111000, +0b11110000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11110000, +0b11111000, +0b11111100, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b01111111, +0b00111111, +0b00001111, +0b00000011, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000001, +0b00000011, +0b00000011, +0b00000011, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000011, +0b00000011, +0b00000001, +0b00000001, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, + +0b00000000, +0b00000000, +0b00000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b11011111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b00111111, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b10000000, +0b11100000, +0b11111000, +0b11111100, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b01111111, +0b00111111, +0b00001111, +0b00000011, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11000000, +0b11110000, +0b11111000, +0b11111110, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b01111111, +0b00011111, +0b00000111, +0b00000001, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b10000000, +0b11100000, +0b11110000, +0b11111100, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b00111111, +0b00001111, +0b00000011, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000010, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000001, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, + +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b10000000, +0b10000000, +0b11000000, +0b11000000, +0b11000000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11000000, +0b11000000, +0b11000000, +0b10000000, +0b10000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11110000, +0b11111100, +0b11111110, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b00011111, +0b00001111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00001111, +0b00011111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111110, +0b11111000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000011, +0b00001111, +0b00011111, +0b00111111, +0b01111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111110, +0b11111100, +0b11111000, +0b11111000, +0b11111000, +0b11110000, +0b11110000, +0b11111100, +0b11111111, +0b11111111, +0b11111111, +0b10111111, +0b10111111, +0b00011111, +0b00001111, +0b00000111, +0b00000001, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11100000, +0b11111000, +0b11111100, +0b11111110, +0b11111110, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b00011111, +0b00000111, +0b00000011, +0b00000011, +0b00000111, +0b00000111, +0b00001111, +0b00001111, +0b00011111, +0b00111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111110, +0b11111000, +0b11100000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00001111, +0b00111111, +0b01111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111100, +0b11111000, +0b11110000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11110000, +0b11111000, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b01111111, +0b00011111, +0b00000111, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000001, +0b00000001, +0b00000011, +0b00000011, +0b00000011, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000011, +0b00000011, +0b00000011, +0b00000001, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, + +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b10000000, +0b10000000, +0b11000000, +0b11000000, +0b11000000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11000000, +0b11000000, +0b11000000, +0b10000000, +0b10000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11000000, +0b11110000, +0b11111100, +0b11111110, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b01111111, +0b00011111, +0b00001111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00001111, +0b00011111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111110, +0b11111000, +0b11100000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11100000, +0b10000000, +0b10000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b10000000, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000001, +0b00000011, +0b00000111, +0b00001111, +0b00011111, +0b00011111, +0b00111111, +0b00111111, +0b00111111, +0b00111111, +0b00111111, +0b00111111, +0b00111111, +0b00111111, +0b00011111, +0b00011111, +0b00001111, +0b11101111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b00001111, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11111000, +0b11111000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11111000, +0b11111000, +0b11111100, +0b11111110, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b01111111, +0b00111111, +0b00011111, +0b00001111, +0b00000011, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000011, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000001, +0b00000001, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, + +0b00000000, +0b10000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b10000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00001111, +0b00011111, +0b00111001, +0b00110000, +0b00110000, +0b00111001, +0b00011111, +0b10001111, +0b10000000, +0b10000000, +0b10000000, +0b10000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11100000, +0b11111000, +0b11111110, +0b00111111, +0b00001111, +0b00000111, +0b00000011, +0b00000011, +0b00000011, +0b00000111, +0b00001111, +0b00011111, +0b00011110, +0b00011000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00001111, +0b00111111, +0b11111111, +0b11111000, +0b11100000, +0b11000000, +0b10000000, +0b10000000, +0b10000000, +0b11000000, +0b11100000, +0b11111000, +0b11111000, +0b00111000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000001, +0b00000001, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000001, +0b00000001, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, + +0b00000000, +0b10000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b10000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00001111, +0b00011111, +0b00111001, +0b00110000, +0b00110000, +0b00111001, +0b00011111, +0b00001111, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11111111, +0b11111111, +0b11111111, +0b10000111, +0b10000111, +0b10000111, +0b10000111, +0b10000111, +0b10000111, +0b10000111, +0b00000111, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11111111, +0b11111111, +0b11111111, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000011, +0b00000011, +0b00000011, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000 +}; + + +/*0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b10000000, +0b10000000, +0b11000000, +0b11000000, +0b11000000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11000000, +0b11000000, +0b11000000, +0b10000000, +0b10000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11100000, +0b11111000, +0b11111110, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b00111111, +0b00011111, +0b00001111, +0b00001111, +0b00001111, +0b00001111, +0b00011111, +0b00111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111110, +0b11111000, +0b11100000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11111110, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b00000001, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000001, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111110, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b01111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b10000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b10000000, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b01111111, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000111, +0b00011111, +0b01111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111100, +0b11111000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11111000, +0b11111100, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b01111111, +0b00011111, +0b00000111, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000001, +0b00000001, +0b00000011, +0b00000011, +0b00000011, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000011, +0b00000011, +0b00000011, +0b00000001, +0b00000001, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, + +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11111100, +0b11111100, +0b11111110, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000001, +0b00000001, +0b00000001, +0b00000001, +0b00000001, +0b00000001, +0b00000001, +0b00000001, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000000, +0b00000000, +0b00000000, +0b00000000, + +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b10000000, +0b10000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11000000, +0b11000000, +0b11000000, +0b10000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b01111111, +0b01111111, +0b00111111, +0b00011111, +0b00011111, +0b00011111, +0b00001111, +0b00001111, +0b00001111, +0b00001111, +0b00001111, +0b00001111, +0b00011111, +0b00011111, +0b01111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111110, +0b11111100, +0b11110000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b10000000, +0b11000000, +0b11110000, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b00111111, +0b00001111, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b10000000, +0b10000000, +0b11000000, +0b11100000, +0b11110000, +0b11111000, +0b11111100, +0b11111110, +0b11111111, +0b11111111, +0b11111111, +0b01111111, +0b00111111, +0b00011111, +0b00001111, +0b00000111, +0b00000001, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11110000, +0b11111000, +0b11111100, +0b11111110, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111011, +0b11111001, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000000, +0b00000000, + +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b10000000, +0b10000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11000000, +0b11000000, +0b11000000, +0b10000000, +0b10000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b01111111, +0b01111111, +0b00111111, +0b00111111, +0b00011111, +0b00011111, +0b00011111, +0b00001111, +0b00001111, +0b00001111, +0b00001111, +0b00001111, +0b00001111, +0b00001111, +0b00011111, +0b00111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111110, +0b11111000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11111000, +0b11111000, +0b11111100, +0b11111111, +0b11111111, +0b11111111, +0b10111111, +0b10111111, +0b00011111, +0b00001111, +0b00000111, +0b00000001, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000111, +0b00000111, +0b00001111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111110, +0b11111100, +0b11110000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11111110, +0b11111110, +0b11111100, +0b11111100, +0b11111000, +0b11111000, +0b11111000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11111000, +0b11111100, +0b11111110, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b01111111, +0b00111111, +0b00011111, +0b00000111, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000001, +0b00000001, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000011, +0b00000011, +0b00000011, +0b00000001, +0b00000001, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, + +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11000000, +0b11100000, +0b11110000, +0b11111100, +0b11111110, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b10000000, +0b11000000, +0b11100000, +0b11111000, +0b11111100, +0b11111110, +0b11111111, +0b11111111, +0b00111111, +0b00011111, +0b00001111, +0b00000111, +0b00000001, +0b00000000, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11111100, +0b11111110, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111011, +0b11111001, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b00000000, +0b00000000, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, + +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11111000, +0b11110000, +0b11110000, +0b11110000, +0b11100000, +0b11000000, +0b10000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000111, +0b00000111, +0b00000111, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000111, +0b00000111, +0b00001111, +0b00011111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111100, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11111110, +0b11111110, +0b11111100, +0b11111100, +0b11111000, +0b11111000, +0b11111000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11111000, +0b11111000, +0b11111100, +0b11111110, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b01111111, +0b00111111, +0b00001111, +0b00000011, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000001, +0b00000001, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000011, +0b00000011, +0b00000011, +0b00000001, +0b00000001, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, + +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b10000000, +0b10000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11000000, +0b11110000, +0b11111000, +0b11111100, +0b11111110, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b01111111, +0b00111111, +0b00011111, +0b00011111, +0b00001111, +0b00001111, +0b00001111, +0b00001111, +0b00001111, +0b00001111, +0b00001111, +0b00001111, +0b00011111, +0b00011111, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11110000, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11110111, +0b11110000, +0b11111000, +0b11111000, +0b11111100, +0b11111100, +0b11111100, +0b11111100, +0b11111100, +0b11111100, +0b11111100, +0b11111100, +0b11111000, +0b11111000, +0b11110000, +0b11100000, +0b11000000, +0b10000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b00000001, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000001, +0b00000001, +0b00000111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111100, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000111, +0b00011111, +0b00111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111000, +0b11110000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11110000, +0b11111000, +0b11111100, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b01111111, +0b00111111, +0b00001111, +0b00000011, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000001, +0b00000011, +0b00000011, +0b00000011, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000011, +0b00000011, +0b00000001, +0b00000001, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, + +0b00000000, +0b00000000, +0b00000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b11000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b00011111, +0b11011111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b00111111, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b10000000, +0b11100000, +0b11111000, +0b11111100, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b01111111, +0b00111111, +0b00001111, +0b00000011, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11000000, +0b11110000, +0b11111000, +0b11111110, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b01111111, +0b00011111, +0b00000111, +0b00000001, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b10000000, +0b11100000, +0b11110000, +0b11111100, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b00111111, +0b00001111, +0b00000011, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000010, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000001, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, + +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b10000000, +0b10000000, +0b11000000, +0b11000000, +0b11000000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11000000, +0b11000000, +0b11000000, +0b10000000, +0b10000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11110000, +0b11111100, +0b11111110, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b00011111, +0b00001111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00001111, +0b00011111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111110, +0b11111000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000011, +0b00001111, +0b00011111, +0b00111111, +0b01111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111110, +0b11111100, +0b11111000, +0b11111000, +0b11111000, +0b11110000, +0b11110000, +0b11111100, +0b11111111, +0b11111111, +0b11111111, +0b10111111, +0b10111111, +0b00011111, +0b00001111, +0b00000111, +0b00000001, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11100000, +0b11111000, +0b11111100, +0b11111110, +0b11111110, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b00011111, +0b00000111, +0b00000011, +0b00000011, +0b00000111, +0b00000111, +0b00001111, +0b00001111, +0b00011111, +0b00111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111110, +0b11111000, +0b11100000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00001111, +0b00111111, +0b01111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111100, +0b11111000, +0b11110000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11110000, +0b11111000, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b01111111, +0b00011111, +0b00000111, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000001, +0b00000001, +0b00000011, +0b00000011, +0b00000011, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000011, +0b00000011, +0b00000011, +0b00000001, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, + +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b10000000, +0b10000000, +0b11000000, +0b11000000, +0b11000000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11100000, +0b11000000, +0b11000000, +0b11000000, +0b10000000, +0b10000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11000000, +0b11110000, +0b11111100, +0b11111110, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b01111111, +0b00011111, +0b00001111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00001111, +0b00011111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111110, +0b11111000, +0b11100000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11100000, +0b10000000, +0b10000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b10000000, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000001, +0b00000011, +0b00000111, +0b00001111, +0b00011111, +0b00011111, +0b00111111, +0b00111111, +0b00111111, +0b00111111, +0b00111111, +0b00111111, +0b00111111, +0b00111111, +0b00011111, +0b00011111, +0b00001111, +0b11101111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b00001111, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11111000, +0b11111000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11111000, +0b11111000, +0b11111100, +0b11111110, +0b11111111, +0b11111111, +0b11111111, +0b11111111, +0b01111111, +0b00111111, +0b00011111, +0b00001111, +0b00000011, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000011, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000011, +0b00000011, +0b00000011, +0b00000011, +0b00000001, +0b00000001, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000 +};*/ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* FONT32X48NUMBERS_H */ + diff --git a/software/front/US_Firmware.X/font6x8.h b/software/front/US_Firmware.X/font6x8.h new file mode 100644 index 0000000..58f4efa --- /dev/null +++ b/software/front/US_Firmware.X/font6x8.h @@ -0,0 +1,122 @@ +/* + * File: font6x8.h + * Author: Sparky + * + * Created on ??????, 2015, ????? 11, 19:42 + */ + +#ifndef FONT6X8_H +#define FONT6X8_H + +#ifdef __cplusplus +extern "C" { +#endif + +const UINT8 font6x8[96][5] = { + 0x00, 0x00, 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x5F, 0x00, 0x00, // ! + 0x00, 0x07, 0x00, 0x07, 0x00, // " + 0x14, 0x7F, 0x14, 0x7F, 0x14, // # + 0x24, 0x2A, 0x7F, 0x2A, 0x12, // $ + 0x23, 0x13, 0x08, 0x64, 0x62, // % + 0x36, 0x49, 0x56, 0x20, 0x50, // & + 0x00, 0x08, 0x07, 0x03, 0x00, // ' + 0x00, 0x1C, 0x22, 0x41, 0x00, // ( + 0x00, 0x41, 0x22, 0x1C, 0x00, // ) + 0x2A, 0x1C, 0x7F, 0x1C, 0x2A, // * + 0x08, 0x08, 0x3E, 0x08, 0x08, // + + 0x00, 0x40, 0x38, 0x18, 0x00, // , + 0x08, 0x08, 0x08, 0x08, 0x08, // - + 0x00, 0x00, 0x60, 0x60, 0x00, // . + 0x20, 0x10, 0x08, 0x04, 0x02, // / + 0x3E, 0x51, 0x49, 0x45, 0x3E, // 0 + 0x00, 0x42, 0x7F, 0x40, 0x00, // 1 + 0x42, 0x61, 0x51, 0x49, 0x46, // 2 + 0x21, 0x41, 0x49, 0x4D, 0x33, // 3 + 0x18, 0x14, 0x12, 0x7F, 0x10, // 4 + 0x27, 0x45, 0x45, 0x45, 0x39, // 5 + 0x3C, 0x4A, 0x49, 0x49, 0x30, // 6 + 0x41, 0x21, 0x11, 0x09, 0x07, // 7 + 0x36, 0x49, 0x49, 0x49, 0x36, // 8 + 0x06, 0x49, 0x49, 0x29, 0x1E, // 9 + 0x00, 0x00, 0x14, 0x00, 0x00, // : + 0x00, 0x00, 0x40, 0x34, 0x00, // ; + 0x00, 0x08, 0x14, 0x22, 0x41, // < + 0x14, 0x14, 0x14, 0x14, 0x14, // = + 0x00, 0x41, 0x22, 0x14, 0x08, // > + 0x02, 0x01, 0x51, 0x09, 0x06, // ? + 0x3E, 0x41, 0x5D, 0x59, 0x4E, // @ + 0x7C, 0x12, 0x11, 0x12, 0x7C, // A + 0x7F, 0x49, 0x49, 0x49, 0x36, // B + 0x3E, 0x41, 0x41, 0x41, 0x22, // C + 0x7F, 0x41, 0x41, 0x41, 0x3E, // D + 0x7F, 0x49, 0x49, 0x49, 0x41, // E + 0x7F, 0x09, 0x09, 0x09, 0x01, // F + 0x3E, 0x41, 0x49, 0x49, 0x7A, // G + 0x7F, 0x08, 0x08, 0x08, 0x7F, // H + 0x00, 0x41, 0x7F, 0x41, 0x00, // I + 0x20, 0x40, 0x41, 0x3F, 0x01, // J + 0x7F, 0x08, 0x14, 0x22, 0x41, // K + 0x7F, 0x40, 0x40, 0x40, 0x40, // L + 0x7F, 0x02, 0x1C, 0x02, 0x7F, // M + 0x7F, 0x04, 0x08, 0x10, 0x7F, // N + 0x3E, 0x41, 0x41, 0x41, 0x3E, // O + 0x7F, 0x09, 0x09, 0x09, 0x06, // P + 0x3E, 0x41, 0x51, 0x21, 0x5E, // Q + 0x7F, 0x09, 0x19, 0x29, 0x46, // R + 0x26, 0x49, 0x49, 0x49, 0x32, // S + 0x01, 0x01, 0x7F, 0x01, 0x01, // T + 0x3F, 0x40, 0x40, 0x40, 0x3F, // U + 0x1F, 0x20, 0x40, 0x20, 0x1F, // V + 0x3F, 0x40, 0x38, 0x40, 0x3F, // W + 0x63, 0x14, 0x08, 0x14, 0x63, // X + 0x03, 0x04, 0x78, 0x04, 0x03, // Y + 0x61, 0x51, 0x49, 0x45, 0x43, // Z + 0x00, 0x7F, 0x41, 0x41, 0x41, // [ + 0x02, 0x04, 0x08, 0x10, 0x20, // '\' + 0x00, 0x41, 0x41, 0x41, 0x7F, // ] + 0x04, 0x02, 0x01, 0x02, 0x04, // ^ + 0x80, 0x80, 0x80, 0x80, 0x80, // _ + 0x00, 0x03, 0x07, 0x08, 0x00, // ' + 0x20, 0x54, 0x54, 0x54, 0x78, // a + 0x7F, 0x28, 0x44, 0x44, 0x38, // b + 0x38, 0x44, 0x44, 0x44, 0x28, // c + 0x38, 0x44, 0x44, 0x28, 0x7F, // d + 0x38, 0x54, 0x54, 0x54, 0x18, // e + 0x00, 0x08, 0x7E, 0x09, 0x02, // f + 0x18, 0xA4, 0xA4, 0xA4, 0x7C, // g + 0x7F, 0x08, 0x04, 0x04, 0x78, // h + 0x00, 0x44, 0x7D, 0x40, 0x00, // i + 0x00, 0x20, 0x40, 0x40, 0x3D, // j + 0x00, 0x7F, 0x10, 0x28, 0x44, // k + 0x00, 0x41, 0x7F, 0x40, 0x00, // l + 0x7C, 0x04, 0x78, 0x04, 0x78, // m + 0x7C, 0x08, 0x04, 0x04, 0x78, // n + 0x38, 0x44, 0x44, 0x44, 0x38, // o + 0xFC, 0x18, 0x24, 0x24, 0x18, // p + 0x18, 0x24, 0x24, 0x18, 0xFC, // q + 0x7C, 0x08, 0x04, 0x04, 0x08, // r + 0x48, 0x54, 0x54, 0x54, 0x24, // s + 0x04, 0x04, 0x3F, 0x44, 0x24, // t + 0x3C, 0x40, 0x40, 0x20, 0x7C, // u + 0x1C, 0x20, 0x40, 0x20, 0x1C, // v + 0x3C, 0x40, 0x30, 0x40, 0x3C, // w + 0x44, 0x28, 0x10, 0x28, 0x44, // x + 0x4C, 0x90, 0x90, 0x90, 0x7C, // y + 0x44, 0x64, 0x54, 0x4C, 0x44, // z + 0x00, 0x08, 0x36, 0x41, 0x00, // { + 0x00, 0x00, 0x77, 0x00, 0x00, // | + 0x00, 0x41, 0x36, 0x08, 0x00, // } + 0x02, 0x01, 0x02, 0x04, 0x02, // ~ + 0x00, 0x06, 0x09, 0x09, 0x06, // degrees +}; + + + + +#ifdef __cplusplus +} +#endif + +#endif /* FONT6X8_H */ + diff --git a/software/front/US_Firmware.X/font8x16.h b/software/front/US_Firmware.X/font8x16.h new file mode 100644 index 0000000..3958be6 --- /dev/null +++ b/software/front/US_Firmware.X/font8x16.h @@ -0,0 +1,2215 @@ +/* + * File: font8x16.h + * Author: Sparky + * + * Created on ??????, 2014, ?????? 24, 2:56 + */ + +#ifndef FONT8X16_H +#define FONT8X16_H + +#ifdef __cplusplus +extern "C" { +#endif +const UINT8 degrees4x16[8] = { +0b00000000, +0b00001000, +0b00010100, +0b00001000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +}; + +const UINT8 font8x16[128][16] = { +//0 +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +//1 (Celsius) +0b00000000, +0b00001100, +0b11101100, +0b11110000, +0b00010000, +0b00010000, +0b01110000, +0b01100000, +0b00000000, +0b00000000, +0b00000111, +0b00001111, +0b00001000, +0b00001000, +0b00001110, +0b00000110, +//2 (Farenheit) +0b00000000, +0b00001100, +0b11101100, +0b11110000, +0b00010000, +0b00010000, +0b00010000, +0b00010000, +0b00000000, +0b00000000, +0b00001111, +0b00001111, +0b00000001, +0b00000001, +0b00000001, +0b00000001, + +//3 +0b11000000, +0b11100000, +0b11100000, +0b11000000, +0b11000000, +0b11100000, +0b11100000, +0b11000000, +0b00000000, +0b00000001, +0b00000011, +0b00000111, +0b00000111, +0b00000011, +0b00000001, +0b00000000, +//4 +0b10000000, +0b11000000, +0b11100000, +0b11110000, +0b11110000, +0b11100000, +0b11000000, +0b10000000, +0b00000000, +0b00000001, +0b00000011, +0b00000111, +0b00000111, +0b00000011, +0b00000001, +0b00000000, +//5 +0b10000000, +0b11000000, +0b10110000, +0b11111000, +0b11111000, +0b10110000, +0b11000000, +0b10000000, +0b00000001, +0b00000011, +0b00001011, +0b00001101, +0b00001101, +0b00001011, +0b00000011, +0b00000001, +//6 +0b10000000, +0b11000000, +0b11100000, +0b11110000, +0b11110000, +0b11100000, +0b11000000, +0b10000000, +0b00000001, +0b00000011, +0b00001001, +0b00001111, +0b00001111, +0b00001001, +0b00000011, +0b00000001, +//7 +0b00000000, +0b00000000, +0b10000000, +0b11000000, +0b11000000, +0b10000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000001, +0b00000011, +0b00000011, +0b00000001, +0b00000000, +0b00000000, +//8 +0b11111110, +0b11111110, +0b01111110, +0b00111110, +0b00111110, +0b01111110, +0b11111110, +0b11111110, +0b01111111, +0b01111111, +0b01111110, +0b01111100, +0b01111100, +0b01111110, +0b01111111, +0b01111111, +//9 +0b00000000, +0b11000000, +0b01100000, +0b00100000, +0b00100000, +0b01100000, +0b11000000, +0b00000000, +0b00000000, +0b00000011, +0b00000110, +0b00000100, +0b00000100, +0b00000110, +0b00000011, +0b00000000, +//10 +0b11111110, +0b00111110, +0b10011110, +0b11011110, +0b11011110, +0b10011110, +0b00111110, +0b11111110, +0b01111111, +0b01111100, +0b01111001, +0b01111011, +0b01111011, +0b01111001, +0b01111100, +0b01111111, +//11 +0b00000000, +0b00000000, +0b10000000, +0b10000000, +0b11001000, +0b11111000, +0b00111000, +0b01111000, +0b00000000, +0b00000111, +0b00001111, +0b00001000, +0b00001000, +0b00001111, +0b00000111, +0b00000000, +//12 +0b00000000, +0b01110000, +0b11111000, +0b10001000, +0b10001000, +0b11111000, +0b01110000, +0b00000000, +0b00000000, +0b00000010, +0b00000010, +0b00001111, +0b00001111, +0b00000010, +0b00000010, +0b00000000, +//13 +0b00000000, +0b00000000, +0b11111000, +0b11111000, +0b00101000, +0b00101000, +0b00111000, +0b00111000, +0b00001100, +0b00001110, +0b00001111, +0b00000111, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +//14 +0b00000000, +0b11111000, +0b11111000, +0b00101000, +0b00101000, +0b00101000, +0b11111000, +0b11111000, +0b00011100, +0b00011111, +0b00001111, +0b00000000, +0b00000000, +0b00001110, +0b00001111, +0b00000111, +//15 +0b10100000, +0b10100000, +0b11000000, +0b01110000, +0b01110000, +0b11000000, +0b10100000, +0b10100000, +0b00000010, +0b00000010, +0b00000001, +0b00000111, +0b00000111, +0b00000001, +0b00000010, +0b00000010, +//16 +0b00000000, +0b11111000, +0b11110000, +0b11100000, +0b11000000, +0b11000000, +0b10000000, +0b10000000, +0b00000000, +0b00001111, +0b00000111, +0b00000011, +0b00000001, +0b00000001, +0b00000000, +0b00000000, +//17 +0b00000000, +0b10000000, +0b10000000, +0b11000000, +0b11000000, +0b11100000, +0b11110000, +0b11111000, +0b00000000, +0b00000000, +0b00000000, +0b00000001, +0b00000001, +0b00000011, +0b00000111, +0b00001111, +//18 +0b00000000, +0b00100000, +0b00110000, +0b11111000, +0b11111000, +0b00110000, +0b00100000, +0b00000000, +0b00000000, +0b00000010, +0b00000110, +0b00001111, +0b00001111, +0b00000110, +0b00000010, +0b00000000, +//19 +0b00000000, +0b01110000, +0b11111000, +0b01110000, +0b00000000, +0b01110000, +0b11111000, +0b01110000, +0b00000000, +0b00000000, +0b00001101, +0b00000000, +0b00000000, +0b00000000, +0b00001101, +0b00000000, +//20 +0b01110000, +0b11111000, +0b10001000, +0b11111000, +0b11111000, +0b00001000, +0b11111000, +0b11111000, +0b00000000, +0b00000000, +0b00000000, +0b00001111, +0b00001111, +0b00000000, +0b00001111, +0b00001111, +//21 +0b00000000, +0b10001000, +0b11011100, +0b01110100, +0b00100100, +0b01100100, +0b11001100, +0b10001000, +0b00000000, +0b00010001, +0b00110011, +0b00100110, +0b00100100, +0b00101110, +0b00111011, +0b00010001, +//22 +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00001110, +0b00001110, +0b00001110, +0b00001110, +0b00001110, +0b00001110, +0b00001110, +//23 +0b00000000, +0b00100000, +0b00110000, +0b11111000, +0b11111000, +0b00110000, +0b00100000, +0b00000000, +0b00000000, +0b00010010, +0b00010110, +0b00011111, +0b00011111, +0b00010110, +0b00010010, +0b00000000, +//24 +0b00000000, +0b00100000, +0b00110000, +0b11111000, +0b11111000, +0b00110000, +0b00100000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00001111, +0b00001111, +0b00000000, +0b00000000, +0b00000000, +//25 +0b00000000, +0b00000000, +0b00000000, +0b11111000, +0b11111000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000010, +0b00000110, +0b00001111, +0b00001111, +0b00000110, +0b00000010, +0b00000000, +//26 +0b10000000, +0b10000000, +0b10000000, +0b10000000, +0b10100000, +0b11100000, +0b11000000, +0b10000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000010, +0b00000011, +0b00000001, +0b00000000, +//27 +0b10000000, +0b11000000, +0b11100000, +0b10100000, +0b10000000, +0b10000000, +0b10000000, +0b10000000, +0b00000000, +0b00000001, +0b00000011, +0b00000010, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +//28 +0b00000000, +0b11000000, +0b11000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000011, +0b00000011, +0b00000010, +0b00000010, +0b00000010, +0b00000010, +0b00000010, +//29 +0b10000000, +0b11000000, +0b11100000, +0b10000000, +0b10000000, +0b11100000, +0b11000000, +0b10000000, +0b00000000, +0b00000001, +0b00000011, +0b00000000, +0b00000000, +0b00000011, +0b00000001, +0b00000000, +//30 +0b00000000, +0b00000000, +0b10000000, +0b11100000, +0b11110000, +0b11100000, +0b10000000, +0b00000000, +0b00000000, +0b00000110, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000111, +0b00000110, +//31 +0b00000000, +0b00110000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b11110000, +0b00110000, +0b00000000, +0b00000000, +0b00000000, +0b00000011, +0b00000111, +0b00000011, +0b00000000, +0b00000000, +//32 +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +//33 +0b00000000, +0b00000000, +0b00111000, +0b11111100, +0b11111100, +0b00111000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00001101, +0b00001101, +0b00000000, +0b00000000, +0b00000000, +//34 +0b00000000, +0b00111100, +0b00111100, +0b00000000, +0b00000000, +0b00111100, +0b00111100, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +//35 +0b00000000, +0b00100000, +0b11111000, +0b11111000, +0b00100000, +0b11111000, +0b11111000, +0b00100000, +0b00000000, +0b00000010, +0b00001111, +0b00001111, +0b00000010, +0b00001111, +0b00001111, +0b00000010, +//36 +0b00000000, +0b01110000, +0b11111000, +0b10001000, +0b10001110, +0b10001110, +0b10011000, +0b00110000, +0b00000000, +0b00000110, +0b00001100, +0b00001000, +0b00111000, +0b00111000, +0b00001111, +0b00000111, +//37 +0b00000000, +0b00110000, +0b00110000, +0b00000000, +0b10000000, +0b11000000, +0b01100000, +0b00110000, +0b00000000, +0b00001100, +0b00000110, +0b00000011, +0b00000001, +0b00000000, +0b00001100, +0b00001100, +//38 +0b00000000, +0b00000000, +0b10110000, +0b11111000, +0b11001000, +0b01111000, +0b10110000, +0b10000000, +0b00000000, +0b00000111, +0b00001111, +0b00001000, +0b00001001, +0b00000111, +0b00001111, +0b00001000, +//39 +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00111100, +0b00111100, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +//40 +0b00000000, +0b00000000, +0b00000000, +0b11100000, +0b11110000, +0b00011000, +0b00001000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000011, +0b00000111, +0b00001100, +0b00001000, +0b00000000, +//41 +0b00000000, +0b00000000, +0b00001000, +0b00011000, +0b11110000, +0b11100000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00001000, +0b00001100, +0b00000111, +0b00000011, +0b00000000, +0b00000000, +//42 +0b00000000, +0b10000000, +0b10100000, +0b11100000, +0b11000000, +0b11100000, +0b10100000, +0b10000000, +0b00000000, +0b00000000, +0b00000010, +0b00000011, +0b00000001, +0b00000011, +0b00000010, +0b00000000, +//43 +0b10000000, +0b10000000, +0b10000000, +0b11110000, +0b11110000, +0b10000000, +0b10000000, +0b10000000, +0b00000000, +0b00000000, +0b00000000, +0b00000111, +0b00000111, +0b00000000, +0b00000000, +0b00000000, +//44 +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00010000, +0b00011110, +0b00001110, +0b00000000, +0b00000000, +//45 +0b00000000, +0b10000000, +0b10000000, +0b10000000, +0b10000000, +0b10000000, +0b10000000, +0b10000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +//46 +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00001100, +0b00001100, +0b00000000, +0b00000000, +0b00000000, +//47 +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b10000000, +0b11000000, +0b01100000, +0b00110000, +0b00000000, +0b00001100, +0b00000110, +0b00000011, +0b00000001, +0b00000000, +0b00000000, +0b00000000, +//48 +0b00000000, +0b11100000, +0b11110000, +0b00011000, +0b00001000, +0b00011000, +0b11110000, +0b11100000, +0b00000000, +0b00000011, +0b00000111, +0b00001100, +0b00001000, +0b00001100, +0b00000111, +0b00000011, +//49 +0b00000000, +0b00000000, +0b00100000, +0b00110000, +0b11111000, +0b11111000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00001111, +0b00001111, +0b00000000, +0b00000000, +//50 +0b00000000, +0b00010000, +0b00011000, +0b00001000, +0b10001000, +0b11001000, +0b01111000, +0b00110000, +0b00000000, +0b00001100, +0b00001110, +0b00001011, +0b00001001, +0b00001000, +0b00001000, +0b00001000, +//51 +0b00000000, +0b00010000, +0b00011000, +0b10001000, +0b10001000, +0b10001000, +0b11111000, +0b01110000, +0b00000000, +0b00000100, +0b00001100, +0b00001000, +0b00001000, +0b00001000, +0b00001111, +0b00000111, +//52 +0b00000000, +0b11111000, +0b11111000, +0b00000000, +0b00000000, +0b11111000, +0b11111000, +0b00000000, +0b00000000, +0b00000001, +0b00000001, +0b00000001, +0b00000001, +0b00001111, +0b00001111, +0b00000001, +//53 +0b00000000, +0b01111000, +0b01111000, +0b01001000, +0b01001000, +0b01001000, +0b11001000, +0b10001000, +0b00000000, +0b00000100, +0b00001100, +0b00001000, +0b00001000, +0b00001000, +0b00001111, +0b00000111, +//54 +0b00000000, +0b11100000, +0b11110000, +0b10011000, +0b10001000, +0b10001000, +0b10000000, +0b00000000, +0b00000000, +0b00000111, +0b00001111, +0b00001000, +0b00001000, +0b00001000, +0b00001111, +0b00000111, +//55 +0b00000000, +0b00001000, +0b00001000, +0b00001000, +0b00001000, +0b11001000, +0b11111000, +0b00111000, +0b00000000, +0b00000000, +0b00000000, +0b00001100, +0b00001111, +0b00000011, +0b00000000, +0b00000000, +//56 +0b00000000, +0b01110000, +0b11111000, +0b10001000, +0b10001000, +0b10001000, +0b11111000, +0b01110000, +0b00000000, +0b00000111, +0b00001111, +0b00001000, +0b00001000, +0b00001000, +0b00001111, +0b00000111, +//57 +0b00000000, +0b01110000, +0b11111000, +0b10001000, +0b10001000, +0b10001000, +0b11111000, +0b11110000, +0b00000000, +0b00000000, +0b00001000, +0b00001000, +0b00001000, +0b00001100, +0b00000111, +0b00000011, +//58 +0b00000000, +0b00000000, +0b00000000, +0b00110000, +0b00110000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000110, +0b00000110, +0b00000000, +0b00000000, +0b00000000, +//59 +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00110000, +0b00110000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00010000, +0b00011110, +0b00001110, +0b00000000, +0b00000000, +//60 +0b00000000, +0b10000000, +0b11000000, +0b01100000, +0b00110000, +0b00011000, +0b00001000, +0b00000000, +0b00000000, +0b00000000, +0b00000001, +0b00000011, +0b00000110, +0b00001100, +0b00001000, +0b00000000, +//61 +0b00000000, +0b01000000, +0b01000000, +0b01000000, +0b01000000, +0b01000000, +0b01000000, +0b01000000, +0b00000000, +0b00000010, +0b00000010, +0b00000010, +0b00000010, +0b00000010, +0b00000010, +0b00000010, +//62 +0b00000000, +0b00000000, +0b00001000, +0b00011000, +0b00110000, +0b01100000, +0b11000000, +0b10000000, +0b00000000, +0b00000000, +0b00001000, +0b00001100, +0b00000110, +0b00000011, +0b00000001, +0b00000000, +//63 +0b00000000, +0b00110000, +0b00111000, +0b00001000, +0b10001000, +0b11001000, +0b01111000, +0b00110000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00001101, +0b00001101, +0b00000000, +0b00000000, +//64 +0b00000000, +0b11110000, +0b11111000, +0b00001000, +0b11001000, +0b01101000, +0b11001000, +0b11110000, +0b00000000, +0b00000111, +0b00001111, +0b00001000, +0b00001011, +0b00001010, +0b00001011, +0b00000001, +//65 +0b00000000, +0b11100000, +0b11110000, +0b00011000, +0b00001000, +0b00001000, +0b11111000, +0b11110000, +0b00000000, +0b00001111, +0b00001111, +0b00000001, +0b00000001, +0b00000001, +0b00001111, +0b00001111, +//66 +0b00000000, +0b11111000, +0b11111000, +0b10001000, +0b10001000, +0b10001000, +0b11111000, +0b01110000, +0b00000000, +0b00001111, +0b00001111, +0b00001000, +0b00001000, +0b00001000, +0b00001111, +0b00000111, +//67 +0b00000000, +0b11110000, +0b11111000, +0b00001000, +0b00001000, +0b00001000, +0b00111000, +0b00110000, +0b00000000, +0b00000111, +0b00001111, +0b00001000, +0b00001000, +0b00001000, +0b00001110, +0b00000110, +//68 +0b00000000, +0b11111000, +0b11111000, +0b00001000, +0b00001000, +0b00001000, +0b11111000, +0b11110000, +0b00000000, +0b00001111, +0b00001111, +0b00001000, +0b00001000, +0b00001100, +0b00000111, +0b00000011, +//69 +0b00000000, +0b11111000, +0b11111000, +0b10001000, +0b10001000, +0b10001000, +0b00001000, +0b00000000, +0b00000000, +0b00001111, +0b00001111, +0b00001000, +0b00001000, +0b00001000, +0b00001000, +0b00000000, +//70 +0b00000000, +0b11111000, +0b11111000, +0b10001000, +0b10001000, +0b10001000, +0b00001000, +0b00000000, +0b00000000, +0b00001111, +0b00001111, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +//71 +0b00000000, +0b11110000, +0b11111000, +0b00001000, +0b00001000, +0b10001000, +0b10011000, +0b10010000, +0b00000000, +0b00000111, +0b00001111, +0b00001000, +0b00001000, +0b00001000, +0b00001111, +0b00000111, +//72 +0b00000000, +0b11111000, +0b11111000, +0b10000000, +0b10000000, +0b10000000, +0b11111000, +0b11111000, +0b00000000, +0b00001111, +0b00001111, +0b00000000, +0b00000000, +0b00000000, +0b00001111, +0b00001111, +//73 +0b00000000, +0b00000000, +0b00001000, +0b11111000, +0b11111000, +0b00001000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00001000, +0b00001111, +0b00001111, +0b00001000, +0b00000000, +0b00000000, +//74 +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11111000, +0b11111000, +0b00000000, +0b00000000, +0b00000110, +0b00001110, +0b00001000, +0b00001000, +0b00001111, +0b00000111, +0b00000000, +//75 +0b00000000, +0b11111000, +0b11111000, +0b10000000, +0b11000000, +0b01100000, +0b00111000, +0b00011000, +0b00000000, +0b00001111, +0b00001111, +0b00000000, +0b00000001, +0b00000011, +0b00001110, +0b00001100, +//76 +0b00000000, +0b11111000, +0b11111000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00001111, +0b00001111, +0b00001000, +0b00001000, +0b00001000, +0b00001000, +0b00000000, +//77 +0b00000000, +0b11111000, +0b11111000, +0b01110000, +0b11100000, +0b01110000, +0b11111000, +0b11111000, +0b00000000, +0b00001111, +0b00001111, +0b00000000, +0b00000000, +0b00000000, +0b00001111, +0b00001111, +//78 +0b00000000, +0b11111000, +0b11111000, +0b01110000, +0b11100000, +0b11000000, +0b11111000, +0b11111000, +0b00000000, +0b00001111, +0b00001111, +0b00000000, +0b00000000, +0b00000001, +0b00001111, +0b00001111, +//79 +0b00000000, +0b11110000, +0b11111000, +0b00001000, +0b00001000, +0b00001000, +0b11111000, +0b11110000, +0b00000000, +0b00000111, +0b00001111, +0b00001000, +0b00001000, +0b00001000, +0b00001111, +0b00000111, +//80 +0b00000000, +0b11110000, +0b11111000, +0b00001000, +0b00001000, +0b00001000, +0b11111000, +0b11110000, +0b00000000, +0b00001111, +0b00001111, +0b00000001, +0b00000001, +0b00000001, +0b00000001, +0b00000000, +//81 +0b00000000, +0b11110000, +0b11111000, +0b00001000, +0b00001000, +0b00001000, +0b11111000, +0b11110000, +0b00000000, +0b00000011, +0b00000111, +0b00000100, +0b00000111, +0b00001110, +0b00011111, +0b00010011, +//82 +0b00000000, +0b11110000, +0b11111000, +0b10001000, +0b10001000, +0b10001000, +0b11111000, +0b01110000, +0b00000000, +0b00001111, +0b00001111, +0b00000000, +0b00000000, +0b00000001, +0b00001111, +0b00001110, +//83 +0b00000000, +0b00110000, +0b01111000, +0b11001000, +0b10001000, +0b10001000, +0b00011000, +0b00010000, +0b00000000, +0b00000100, +0b00001100, +0b00001000, +0b00001000, +0b00001001, +0b00001111, +0b00000110, +//84 +0b00000000, +0b00001000, +0b00001000, +0b11111000, +0b11111000, +0b00001000, +0b00001000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00001111, +0b00001111, +0b00000000, +0b00000000, +0b00000000, +//85 +0b00000000, +0b11111000, +0b11111000, +0b00000000, +0b00000000, +0b00000000, +0b11111000, +0b11111000, +0b00000000, +0b00000111, +0b00001111, +0b00001000, +0b00001000, +0b00001000, +0b00001111, +0b00000111, +//86 +0b00000000, +0b11111000, +0b11111000, +0b00000000, +0b00000000, +0b00000000, +0b11111000, +0b11111000, +0b00000000, +0b00000111, +0b00001111, +0b00001100, +0b00001100, +0b00000110, +0b00000011, +0b00000001, +//87 +0b00000000, +0b11111000, +0b11111000, +0b00000000, +0b10000000, +0b00000000, +0b11111000, +0b11111000, +0b00000000, +0b00001111, +0b00001111, +0b00000111, +0b00000011, +0b00000111, +0b00001111, +0b00001111, +//88 +0b00000000, +0b00011000, +0b00111000, +0b11100000, +0b11000000, +0b11100000, +0b00111000, +0b00011000, +0b00000000, +0b00001100, +0b00001110, +0b00000011, +0b00000001, +0b00000011, +0b00001110, +0b00001100, +//89 +0b00000000, +0b01111000, +0b11111000, +0b10000000, +0b10000000, +0b11000000, +0b01111000, +0b00111000, +0b00000000, +0b00000000, +0b00000000, +0b00001111, +0b00001111, +0b00000000, +0b00000000, +0b00000000, +//90 +0b00000000, +0b00001000, +0b00001000, +0b10001000, +0b11001000, +0b01101000, +0b00111000, +0b00011000, +0b00000000, +0b00001110, +0b00001111, +0b00001001, +0b00001000, +0b00001000, +0b00001000, +0b00001000, +//91 +0b00000000, +0b00000000, +0b11111000, +0b11111000, +0b00001000, +0b00001000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00001111, +0b00001111, +0b00001000, +0b00001000, +0b00000000, +0b00000000, +//92 +0b00000000, +0b00110000, +0b01100000, +0b11000000, +0b10000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000001, +0b00000011, +0b00000110, +0b00001100, +//93 +0b00000000, +0b00000000, +0b00000000, +0b00001000, +0b00001000, +0b11111000, +0b11111000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00001000, +0b00001000, +0b00001111, +0b00001111, +0b00000000, +//94 +0b00000000, +0b11000000, +0b01100000, +0b00110000, +0b00011000, +0b00110000, +0b01100000, +0b11000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +//95 +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00100000, +0b00100000, +0b00100000, +0b00100000, +0b00100000, +0b00100000, +0b00100000, +0b00100000, +//96 +0b00000000, +0b00000000, +0b00000000, +0b00001100, +0b00111100, +0b00110000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +//97 +0b00000000, +0b00000000, +0b01000000, +0b01000000, +0b01000000, +0b01000000, +0b11000000, +0b10000000, +0b00000000, +0b00001110, +0b00001111, +0b00001001, +0b00001001, +0b00000001, +0b00001111, +0b00001111, +//98 +0b00000000, +0b11111000, +0b11111000, +0b01000000, +0b01000000, +0b11000000, +0b10000000, +0b00000000, +0b00000000, +0b00001111, +0b00001111, +0b00001000, +0b00001000, +0b00001000, +0b00001111, +0b00000111, +//99 +0b00000000, +0b10000000, +0b11000000, +0b01000000, +0b01000000, +0b01000000, +0b11000000, +0b10000000, +0b00000000, +0b00000111, +0b00001111, +0b00001000, +0b00001000, +0b00001000, +0b00001100, +0b00000100, +//100 +0b00000000, +0b00000000, +0b10000000, +0b11000000, +0b01000000, +0b01000000, +0b11111000, +0b11111000, +0b00000000, +0b00001111, +0b00001111, +0b00001000, +0b00001000, +0b00000000, +0b00001111, +0b00001111, +//101 +0b00000000, +0b10000000, +0b11000000, +0b01000000, +0b01000000, +0b01000000, +0b11000000, +0b10000000, +0b00000000, +0b00000111, +0b00001111, +0b00001001, +0b00001001, +0b00001001, +0b00001101, +0b00000101, +//102 +0b00000000, +0b11110000, +0b11111000, +0b00001000, +0b00001000, +0b00111000, +0b00110000, +0b00000000, +0b00000000, +0b00001111, +0b00001111, +0b00000001, +0b00000001, +0b00000001, +0b00000000, +0b00000000, +//103 +0b00000000, +0b10000000, +0b11000000, +0b01000000, +0b01000000, +0b01000000, +0b11000000, +0b11000000, +0b00000000, +0b00110011, +0b00110111, +0b00100100, +0b00100100, +0b00100100, +0b00111111, +0b00011111, +//104 +0b00000000, +0b11111000, +0b11111000, +0b01000000, +0b01000000, +0b11000000, +0b10000000, +0b00000000, +0b00000000, +0b00001111, +0b00001111, +0b00000000, +0b00000000, +0b00000000, +0b00001111, +0b00001111, +//105 +0b00000000, +0b00000000, +0b00000000, +0b11011000, +0b11011000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00001111, +0b00001111, +0b00000000, +0b00000000, +0b00000000, +//106 +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b11011000, +0b11011000, +0b00000000, +0b00000000, +0b00111000, +0b00111000, +0b00100000, +0b00100000, +0b00111111, +0b00011111, +0b00000000, +//107 +0b00000000, +0b11111000, +0b11111000, +0b00000000, +0b10000000, +0b11000000, +0b01000000, +0b00000000, +0b00000000, +0b00001111, +0b00001111, +0b00000001, +0b00000011, +0b00000110, +0b00001100, +0b00001000, +//108 +0b00000000, +0b00000000, +0b00000000, +0b11111000, +0b11111000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00001111, +0b00001111, +0b00000000, +0b00000000, +0b00000000, +//109 +0b00000000, +0b11000000, +0b11000000, +0b11000000, +0b10000000, +0b11000000, +0b11000000, +0b10000000, +0b00000000, +0b00001111, +0b00001111, +0b00000000, +0b00000111, +0b00000000, +0b00001111, +0b00001111, +//110 +0b00000000, +0b11000000, +0b11000000, +0b01000000, +0b01000000, +0b01000000, +0b11000000, +0b10000000, +0b00000000, +0b00001111, +0b00001111, +0b00000000, +0b00000000, +0b00000000, +0b00001111, +0b00001111, +//111 +0b00000000, +0b10000000, +0b11000000, +0b01000000, +0b01000000, +0b01000000, +0b11000000, +0b10000000, +0b00000000, +0b00000111, +0b00001111, +0b00001000, +0b00001000, +0b00001000, +0b00001111, +0b00000111, +//112 +0b00000000, +0b10000000, +0b11000000, +0b01000000, +0b01000000, +0b01000000, +0b11000000, +0b10000000, +0b00000000, +0b00111111, +0b00111111, +0b00000100, +0b00000100, +0b00000100, +0b00000111, +0b00000011, +//113 +0b00000000, +0b10000000, +0b11000000, +0b01000000, +0b01000000, +0b01000000, +0b11000000, +0b11000000, +0b00000000, +0b00000011, +0b00000111, +0b00000100, +0b00000100, +0b00000100, +0b00111111, +0b00111111, +//114 +0b00000000, +0b11000000, +0b11000000, +0b10000000, +0b11000000, +0b01000000, +0b01000000, +0b01000000, +0b00000000, +0b00001111, +0b00001111, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +//115 +0b00000000, +0b10000000, +0b11000000, +0b01000000, +0b01000000, +0b01000000, +0b01000000, +0b00000000, +0b00000000, +0b00001000, +0b00001001, +0b00001001, +0b00001001, +0b00001001, +0b00001111, +0b00000110, +//116 +0b00000000, +0b01000000, +0b11110000, +0b11111000, +0b01000000, +0b01000000, +0b01000000, +0b00000000, +0b00000000, +0b00000000, +0b00000111, +0b00001111, +0b00001000, +0b00001000, +0b00001000, +0b00000000, +//117 +0b00000000, +0b11000000, +0b11000000, +0b00000000, +0b00000000, +0b00000000, +0b11000000, +0b11000000, +0b00000000, +0b00000111, +0b00001111, +0b00001000, +0b00001000, +0b00001000, +0b00001111, +0b00001111, +//118 +0b00000000, +0b11000000, +0b11000000, +0b00000000, +0b00000000, +0b00000000, +0b11000000, +0b11000000, +0b00000000, +0b00000011, +0b00000111, +0b00001100, +0b00001100, +0b00000110, +0b00000011, +0b00000001, +//119 +0b00000000, +0b11000000, +0b11000000, +0b00000000, +0b00000000, +0b00000000, +0b11000000, +0b11000000, +0b00000000, +0b00001111, +0b00001111, +0b00000100, +0b00000111, +0b00001100, +0b00001111, +0b00000111, +//120 +0b00000000, +0b01000000, +0b11000000, +0b10000000, +0b00000000, +0b10000000, +0b11000000, +0b01000000, +0b00000000, +0b00001000, +0b00001100, +0b00000111, +0b00000011, +0b00000111, +0b00001100, +0b00001000, +//121 +0b00000000, +0b11000000, +0b11000000, +0b00000000, +0b00000000, +0b00000000, +0b11000000, +0b11000000, +0b00000000, +0b00000011, +0b00100111, +0b00100100, +0b00100100, +0b00110100, +0b00011111, +0b00001111, +//122 +0b00000000, +0b01000000, +0b01000000, +0b01000000, +0b01000000, +0b11000000, +0b11000000, +0b01000000, +0b00000000, +0b00001000, +0b00001100, +0b00001110, +0b00001011, +0b00001001, +0b00001000, +0b00001000, +//123 +0b00000000, +0b10000000, +0b10000000, +0b11110000, +0b01111000, +0b00001000, +0b00001000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000111, +0b00001111, +0b00001000, +0b00001000, +0b00000000, +//124 +0b00000000, +0b00000000, +0b00000000, +0b01111000, +0b01111000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00001111, +0b00001111, +0b00000000, +0b00000000, +0b00000000, +//125 +0b00000000, +0b00000000, +0b00001000, +0b00001000, +0b01111000, +0b11110000, +0b10000000, +0b10000000, +0b00000000, +0b00000000, +0b00001000, +0b00001000, +0b00001111, +0b00000111, +0b00000000, +0b00000000, +//126 +0b00110000, +0b00011000, +0b00001000, +0b00011000, +0b00110000, +0b00100000, +0b00110000, +0b00011000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +//127 +0b00000000, +0b00000000, +0b10000000, +0b11000000, +0b01100000, +0b11000000, +0b10000000, +0b00000000, +0b00000000, +0b00000111, +0b00000111, +0b00000100, +0b00000100, +0b00000100, +0b00000111, +0b00000111 + +}; + + + + + +#ifdef __cplusplus +} +#endif + +#endif /* FONR8X16_H */ + diff --git a/software/front/US_Firmware.X/fonts.h b/software/front/US_Firmware.X/fonts.h new file mode 100644 index 0000000..6e5dec7 --- /dev/null +++ b/software/front/US_Firmware.X/fonts.h @@ -0,0 +1,1185 @@ +/* + * File: fonts.h + * Author: Sparky + * + * Created on ?????, 2014, ??? 14, 20:26 + */ + +#ifndef FONTS_H +#define FONTS_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +const UINT8 degrees4x8[4] = { +0b00000000, +0b00000010, +0b00000101, +0b00000010 +}; + + +const UINT8 font8x8[128][8]={ +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +//1(Celsius) +0b00000001, +0b00111101, +0b01111110, +0b01000010, +0b01000010, +0b01100110, +0b00100100, +0b00000000, +//2(Farenheit) +0b00000001, +0b01111101, +0b01111110, +0b00010010, +0b00010010, +0b00010010, +0b00010010, +0b00000000, +//3(Power) +0b00000000, +0b11100000, +0b11000000, +0b11101000, +0b10111100, +0b00010110, +0b00000010, +0b00000000, +//4(Power +0b00000000, +0b00011100, +0b00100010, +0b01000000, +0b01001111, +0b01000000, +0b00100010, +0b00011100, +//5 +0b00011000, +0b10111010, +0b11111111, +0b11111111, +0b11111111, +0b10111010, +0b00011000, +0b00000000, + +0b00010000, +0b10111000, +0b11111100, +0b11111111, +0b11111100, +0b10111000, +0b00010000, +0b00000000, + +0b00000000, +0b00000000, +0b00011000, +0b00111100, +0b00111100, +0b00011000, +0b00000000, +0b00000000, + +0b11111111, +0b11111111, +0b11100111, +0b11000011, +0b11000011, +0b11100111, +0b11111111, +0b11111111, +//9 +0b00000000, +0b00111100, +0b01100110, +0b01000010, +0b01000010, +0b01100110, +0b00111100, +0b00000000, + +0b11111111, +0b11000011, +0b10011001, +0b10111101, +0b10111101, +0b10011001, +0b11000011, +0b11111111, + +0b01110000, +0b11111000, +0b10001000, +0b10001000, +0b11111101, +0b01111111, +0b00000111, +0b00001111, + +0b00000000, +0b01001110, +0b01011111, +0b11110001, +0b11110001, +0b01011111, +0b01001110, +0b00000000, +//12 +0b11000000, +0b11100000, +0b11111111, +0b01111111, +0b00000101, +0b00000101, +0b00000111, +0b00000111, + +0b11000000, +0b11111111, +0b01111111, +0b00000101, +0b00000101, +0b01100101, +0b01111111, +0b00111111, + +0b10011001, +0b01011010, +0b00111100, +0b11100111, +0b11100111, +0b00111100, +0b01011010, +0b10011001, + +0b01111111, +0b00111110, +0b00111110, +0b00011100, +0b00011100, +0b00001000, +0b00001000, +0b00000000, +//16 +0b00001000, +0b00001000, +0b00011100, +0b00011100, +0b00111110, +0b00111110, +0b01111111, +0b00000000, + +0b00000000, +0b00100100, +0b01100110, +0b11111111, +0b11111111, +0b01100110, +0b00100100, +0b00000000, + +0b00000000, +0b01011111, +0b01011111, +0b00000000, +0b00000000, +0b01011111, +0b01011111, +0b00000000, + +0b00000110, +0b00001111, +0b00001001, +0b01111111, +0b01111111, +0b00000001, +0b01111111, +0b01111111, +//20 +0b01000000, +0b11011010, +0b10111111, +0b10100101, +0b11111101, +0b01011001, +0b00000011, +0b00000010, + +0b00000000, +0b01110000, +0b01110000, +0b01110000, +0b01110000, +0b01110000, +0b01110000, +0b00000000, + +0b10000000, +0b10010100, +0b10110110, +0b11111111, +0b11111111, +0b10110110, +0b10010100, +0b10000000, + +0b00000000, +0b00000100, +0b00000110, +0b01111111, +0b01111111, +0b00000110, +0b00000100, +0b00000000, +//24 +0b00000000, +0b00010000, +0b00110000, +0b01111111, +0b01111111, +0b00110000, +0b00010000, +0b00000000, + +0b00001000, +0b00001000, +0b00001000, +0b00101010, +0b00111110, +0b00011100, +0b00001000, +0b00000000, + +0b00001000, +0b00011100, +0b00111110, +0b00101010, +0b00001000, +0b00001000, +0b00001000, +0b00000000, + +0b00111100, +0b00111100, +0b00100000, +0b00100000, +0b00100000, +0b00100000, +0b00100000, +0b00000000, +//28 +0b00001000, +0b00011100, +0b00111110, +0b00001000, +0b00001000, +0b00111110, +0b00011100, +0b00001000, + +0b00110000, +0b00111000, +0b00111100, +0b00111110, +0b00111110, +0b00111100, +0b00111000, +0b00110000, + +0b00000110, +0b00001110, +0b00011110, +0b00111110, +0b00111110, +0b00011110, +0b00001110, +0b00000110, + +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +//32 +0b00000000, +0b00000000, +0b00000110, +0b01011111, +0b01011111, +0b00000110, +0b00000000, +0b00000000, + +0b00000000, +0b00000111, +0b00000111, +0b00000000, +0b00000111, +0b00000111, +0b00000000, +0b00000000, + +0b00010100, +0b01111111, +0b01111111, +0b00010100, +0b01111111, +0b01111111, +0b00010100, +0b00000000, + +0b00000000, +0b00100100, +0b00101110, +0b01101011, +0b01101011, +0b00111010, +0b00010010, +0b00000000, +//36 +0b01000110, +0b01100110, +0b00110000, +0b00011000, +0b00001100, +0b01100110, +0b01100010, +0b00000000, + +0b00110000, +0b01111010, +0b01001111, +0b01011101, +0b00110111, +0b01111010, +0b01001000, +0b00000000, + +0b00000100, +0b00000111, +0b00000011, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, + +0b00000000, +0b00000000, +0b00011100, +0b00111110, +0b01100011, +0b01000001, +0b00000000, +0b00000000, +//40 +0b00000000, +0b00000000, +0b01000001, +0b01100011, +0b00111110, +0b00011100, +0b00000000, +0b00000000, + +0b00001000, +0b00101010, +0b00111110, +0b00011100, +0b00011100, +0b00111110, +0b00101010, +0b00001000, + +0b00000000, +0b00001000, +0b00001000, +0b00111110, +0b00111110, +0b00001000, +0b00001000, +0b00000000, + +0b00000000, +0b10000000, +0b11100000, +0b01100000, +0b00000000, +0b00000000, +0b00000000, +0b00000000, +//44 +0b00000000, +0b00001000, +0b00001000, +0b00001000, +0b00001000, +0b00001000, +0b00001000, +0b00000000, + +0b00000000, +0b00000000, +0b00000000, +0b01100000, +0b01100000, +0b00000000, +0b00000000, +0b00000000, + +0b01100000, +0b00110000, +0b00011000, +0b00001100, +0b00000110, +0b00000011, +0b00000001, +0b00000000, + +0b00111110, +0b01111111, +0b01010001, +0b01001001, +0b01000101, +0b01111111, +0b00111110, +0b00000000, +//48 +0b00000000, +0b00000000, +0b00000010, +0b01111111, +0b01111111, +0b00000000, +0b00000000, +0b00000000, + +0b00000000, +0b01100010, +0b01110011, +0b01011001, +0b01001001, +0b01001111, +0b01000110, +0b00000000, + +0b00000000, +0b00100010, +0b01100011, +0b01001001, +0b01001001, +0b01111111, +0b00110110, +0b00000000, + +0b00000000, +0b00011000, +0b00011100, +0b00010110, +0b00010011, +0b01111111, +0b01111111, +0b00000000, +//52 +0b00000000, +0b00100111, +0b01100111, +0b01000101, +0b01000101, +0b01111101, +0b00111001, +0b00000000, + +0b00000000, +0b00111100, +0b01111110, +0b01001011, +0b01001001, +0b01111001, +0b00110000, +0b00000000, + +0b00000000, +0b01000001, +0b01100001, +0b00110001, +0b00011001, +0b00001111, +0b00000111, +0b00000000, + +0b00000000, +0b00110110, +0b01111111, +0b01001001, +0b01001001, +0b01111111, +0b00110110, +0b00000000, +//56 +0b00000000, +0b00000110, +0b01001111, +0b01001001, +0b01101001, +0b00111111, +0b00011110, +0b00000000, + +0b00000000, +0b00000000, +0b00000000, +0b01100110, +0b01100110, +0b00000000, +0b00000000, +0b00000000, + +0b00000000, +0b00000000, +0b10000000, +0b11100110, +0b01100110, +0b00000000, +0b00000000, +0b00000000, + +0b00000000, +0b00001000, +0b00011100, +0b00110110, +0b01100011, +0b01000001, +0b00000000, +0b00000000, +//60 +0b00000000, +0b00100100, +0b00100100, +0b00100100, +0b00100100, +0b00100100, +0b00100100, +0b00000000, + +0b00000000, +0b01000001, +0b01100011, +0b00110110, +0b00011100, +0b00001000, +0b00000000, +0b00000000, + +0b00000000, +0b00000010, +0b00000011, +0b01010001, +0b01011001, +0b00001111, +0b00000110, +0b00000000, + +0b00111110, +0b01111111, +0b01000001, +0b01011101, +0b01011101, +0b00011111, +0b00011110, +0b00000000, +//64 +0b00000000, +0b01111100, +0b01111110, +0b00010011, +0b00010001, +0b01111111, +0b01111110, +0b00000000, + +0b00000000, +0b01111111, +0b01111111, +0b01001001, +0b01001001, +0b01111111, +0b00110110, +0b00000000, + +0b00000000, +0b00111110, +0b01111111, +0b01000001, +0b01000001, +0b01100011, +0b00100010, +0b00000000, + +0b00000000, +0b01111111, +0b01111111, +0b01000001, +0b01000001, +0b01111111, +0b00111110, +0b00000000, +//68 +0b00000000, +0b01111111, +0b01111111, +0b01001001, +0b01001001, +0b01001001, +0b01000001, +0b00000000, + +0b00000000, +0b01111111, +0b01111111, +0b00001001, +0b00001001, +0b00001001, +0b00000001, +0b00000000, + +0b00000000, +0b00111110, +0b01111111, +0b01000001, +0b01010001, +0b01110011, +0b01110010, +0b00000000, + +0b00000000, +0b01111111, +0b01111111, +0b00001000, +0b00001000, +0b01111111, +0b01111111, +0b00000000, + +0b00000000, +0b00000000, +0b00000000, +0b01111111, +0b01111111, +0b00000000, +0b00000000, +0b00000000, + +0b00000000, +0b00110000, +0b01110000, +0b01000000, +0b01000000, +0b01111111, +0b00111111, +0b00000000, + +0b00000000, +0b01111111, +0b01111111, +0b00001000, +0b00011100, +0b01110111, +0b01100011, +0b00000000, + +0b00000000, +0b01111111, +0b01111111, +0b01000000, +0b01000000, +0b01000000, +0b01000000, +0b00000000, + +0b01111111, +0b01111111, +0b00001110, +0b00011100, +0b00001110, +0b01111111, +0b01111111, +0b00000000, + +0b01111111, +0b01111111, +0b00000110, +0b00001100, +0b00011000, +0b01111111, +0b01111111, +0b00000000, + +0b00000000, +0b00111110, +0b01111111, +0b01000001, +0b01000001, +0b01111111, +0b00111110, +0b00000000, + +0b00000000, +0b01111111, +0b01111111, +0b00010001, +0b00010001, +0b00011111, +0b00001110, +0b00000000, + +0b00000000, +0b00011110, +0b00111111, +0b00100001, +0b01110001, +0b01111111, +0b01011110, +0b00000000, + +0b00000000, +0b01111111, +0b01111111, +0b00001001, +0b00011001, +0b01111111, +0b01100110, +0b00000000, + +0b00000000, +0b00100110, +0b01101111, +0b01001101, +0b01011001, +0b01110011, +0b00110010, +0b00000000, + +0b00000000, +0b00000001, +0b00000001, +0b01111111, +0b01111111, +0b00000001, +0b00000001, +0b00000000, + +0b00000000, +0b00111111, +0b01111111, +0b01000000, +0b01000000, +0b01111111, +0b00111111, +0b00000000, + +0b00000000, +0b00011111, +0b00111111, +0b01100000, +0b01100000, +0b00111111, +0b00011111, +0b00000000, + +0b01111111, +0b01111111, +0b00110000, +0b00011000, +0b00110000, +0b01111111, +0b01111111, +0b00000000, + +0b01000011, +0b01100111, +0b00111100, +0b00011000, +0b00111100, +0b01100111, +0b01000011, +0b00000000, + +0b00000000, +0b00000111, +0b00001111, +0b01111000, +0b01111000, +0b00001111, +0b00000111, +0b00000000, + +0b01000001, +0b01100001, +0b01110001, +0b01011001, +0b01001101, +0b01000111, +0b01000011, +0b00000000, + +0b00000000, +0b00000000, +0b01111111, +0b01111111, +0b01000001, +0b01000001, +0b00000000, +0b00000000, + +0b00000001, +0b00000011, +0b00000110, +0b00001100, +0b00011000, +0b00110000, +0b01100000, +0b00000000, + +0b00000000, +0b00000000, +0b01000001, +0b01000001, +0b01111111, +0b01111111, +0b00000000, +0b00000000, + +0b00001000, +0b00001100, +0b00000110, +0b00000011, +0b00000110, +0b00001100, +0b00001000, +0b00000000, + +0b10000000, +0b10000000, +0b10000000, +0b10000000, +0b10000000, +0b10000000, +0b10000000, +0b10000000, + +0b00000000, +0b00000000, +0b00000011, +0b00000111, +0b00000100, +0b00000000, +0b00000000, +0b00000000, + +0b00000000, +0b01100000, +0b01110100, +0b01010100, +0b00010100, +0b01111100, +0b01111000, +0b00000000, + +0b00000000, +0b01111111, +0b01111111, +0b01000100, +0b01001100, +0b01111000, +0b00110000, +0b00000000, + +0b00000000, +0b00111000, +0b01111100, +0b01000100, +0b01000100, +0b01101100, +0b00101000, +0b00000000, + +0b00000000, +0b00110000, +0b01111000, +0b01001100, +0b01000100, +0b01111111, +0b01111111, +0b00000000, + +0b00000000, +0b00111000, +0b01111100, +0b01010100, +0b01010100, +0b01011100, +0b00011000, +0b00000000, + +0b00000000, +0b01111110, +0b01111111, +0b00001001, +0b00001001, +0b00000011, +0b00000010, +0b00000000, + +0b00000000, +0b10011000, +0b10111100, +0b10100100, +0b10100100, +0b11111100, +0b01111100, +0b00000000, + +0b00000000, +0b01111111, +0b01111111, +0b00001000, +0b00000100, +0b01111100, +0b01111000, +0b00000000, + +0b00000000, +0b00000000, +0b00000000, +0b01111101, +0b01111101, +0b00000000, +0b00000000, +0b00000000, + +0b00000000, +0b01100000, +0b11100000, +0b10000000, +0b10000000, +0b11111101, +0b01111101, +0b00000000, + +0b00000000, +0b01111111, +0b01111111, +0b00010000, +0b00111000, +0b01101100, +0b01000100, +0b00000000, + +0b00000000, +0b00000000, +0b00000000, +0b01111111, +0b01111111, +0b00000000, +0b00000000, +0b00000000, + +0b01111100, +0b01111100, +0b00011000, +0b00111000, +0b00011100, +0b01111100, +0b01111000, +0b00000000, + +0b00000000, +0b01111100, +0b01111100, +0b00000100, +0b00000100, +0b01111100, +0b01111000, +0b00000000, + +0b00000000, +0b00111000, +0b01111100, +0b01000100, +0b01000100, +0b01111100, +0b00111000, +0b00000000, + +0b00000000, +0b11111100, +0b11111100, +0b00100100, +0b00100100, +0b00111100, +0b00011000, +0b00000000, + +0b00000000, +0b00011000, +0b00111100, +0b00100100, +0b00100100, +0b11111100, +0b11111100, +0b00000000, + +0b00000000, +0b01111100, +0b01111100, +0b00001000, +0b00001100, +0b00000100, +0b00000100, +0b00000000, + +0b00000000, +0b01001000, +0b01011100, +0b01010100, +0b01010100, +0b01110100, +0b00100100, +0b00000000, + +0b00000000, +0b00111110, +0b01111111, +0b01000100, +0b01100100, +0b00100100, +0b00000000, +0b00000000, + +0b00000000, +0b00111100, +0b01111100, +0b01000000, +0b01000000, +0b01111100, +0b01111100, +0b00000000, + +0b00000000, +0b00011100, +0b00111100, +0b01100000, +0b01100000, +0b00111100, +0b00011100, +0b00000000, + +0b00111100, +0b01111100, +0b01110000, +0b00111000, +0b01110000, +0b01111100, +0b00111100, +0b00000000, + +0b01000100, +0b01101100, +0b00111000, +0b00010000, +0b00111000, +0b01101100, +0b01000100, +0b00000000, + +0b00000000, +0b10011100, +0b10111100, +0b10100000, +0b10100000, +0b11111100, +0b01111100, +0b00000000, + +0b00000000, +0b01000100, +0b01100100, +0b01110100, +0b01011100, +0b01001100, +0b01000100, +0b00000000, + +0b00000000, +0b00001000, +0b00001000, +0b00111110, +0b01110111, +0b01000001, +0b01000001, +0b00000000, + +0b00000000, +0b00000000, +0b00000000, +0b01110111, +0b01110111, +0b00000000, +0b00000000, +0b00000000, + +0b00000000, +0b01000001, +0b01000001, +0b01110111, +0b00111110, +0b00001000, +0b00001000, +0b00000000, + +0b00000010, +0b00000011, +0b00000001, +0b00000011, +0b00000010, +0b00000011, +0b00000001, +0b00000000, + +0b01110000, +0b01111000, +0b01001100, +0b01000110, +0b01001100, +0b01111000, +0b01110000, +0b00000000 + +}; + +#ifdef __cplusplus +} +#endif + +#endif /* FONTS_H */ + diff --git a/software/front/US_Firmware.X/funclist b/software/front/US_Firmware.X/funclist new file mode 100644 index 0000000..f6d671a --- /dev/null +++ b/software/front/US_Firmware.X/funclist @@ -0,0 +1,66 @@ +_USB_CD_Ptr: MEDIUMCONST, 32536 0 4 +_sd001: MEDIUMCONST, 32542 0 52 +_IOInit: CODE, 9550 0 18 +_USBCtrlTrfInHandler: CODE, 9232 0 58 +_IronInit: CODE, 9478 0 26 +_USBProtocolResetHandler: CODE, 8744 0 86 +_ClearArray: CODE, 9528 0 22 +_IOTasks: CODE, 9504 0 24 +_ClassReqHandler: MEDIUMCONST, 32540 0 2 +_ShowChar: CODE, 7370 0 188 +_sd002: MEDIUMCONST, 32635 0 38 +_USBStdGetDscHandler: CODE, 6722 0 226 +_main: CODE, 5146 0 686 +_USBErrorHandler: CODE, 9612 0 4 +_cfg01: MEDIUMCONST, 32594 0 41 +_Irons: MEDIUMCONST, 32444 0 76 +_USBStdFeatureReqHandler: CODE, 7718 0 154 +_ISRHigh: CODE, 8 0 5138 +_USBCtrlTrfSetupHandler: CODE, 8830 0 84 +_PID: CODE, 346 0 1788 +_s_off: MEDIUMCONST, 32754 0 3 +_HIDGetReportHandler: CODE, 9626 0 2 +_USBDriverService: CODE, 8658 0 86 +_HIDInitEP: CODE, 9332 0 36 +_USBCtrlTrfOutHandler: CODE, 9112 0 62 +_ISRlow: CODE, 24 0 318 +_HIDSetReportHandler: CODE, 9624 0 2 +_USBCtrlEPServiceComplete: CODE, 8020 0 132 +_USBSuspend: CODE, 9604 0 8 +_MenuInit: CODE, 8568 0 90 +__initialization: CODE, 9048 0 54 +_USBStdSetCfgHandler: CODE, 8914 0 68 +_USBStdGetStatusHandler: CODE, 7872 0 148 +_USBWakeFromSuspend: CODE, 9568 0 14 +_PIDInit: CODE, 9452 0 26 +_USBCheckBusStatus: CODE, 9396 0 28 +_device_dsc: MEDIUMCONST, 32729 0 18 +_s_on: MEDIUMCONST, 32757 0 3 +_numbers: MEDIUMCONST, 32520 0 10 +_s_standby: MEDIUMCONST, 32760 0 3 +_LoadPars: CODE, 9290 0 42 +_USBCtrlTrfRxService: CODE, 8380 0 98 +_USBCtrlTrfTxService: CODE, 6948 0 212 +_CloseI2C: CODE, 9620 0 4 +_s_auto: MEDIUMCONST, 32751 0 3 +_ProcessIO: CODE, 5832 0 600 +_s_standby_hot: MEDIUMCONST, 32763 0 3 +_HIDRxReport: CODE, 8276 0 104 +_USBModuleEnable: CODE, 9582 0 12 +_MenuTasks: CODE, 2134 0 1750 +_USB_SD_Ptr: MEDIUMCONST, 32530 0 6 +_DisplayInt: CODE, 6432 0 290 +_USBPrepareForNextSetupTrf: CODE, 9594 0 10 +_DisplayData: CODE, 8982 0 66 +_hid_rpt01: MEDIUMCONST, 32673 0 29 +___wmul: CODE, 9174 0 58 +_sd000: MEDIUMCONST, 32747 0 4 +_HIDTxReport: CODE, 8478 0 90 +_USBCtrlEPService: CODE, 8152 0 124 +_parText: MEDIUMCONST, 32702 0 27 +_USBStallHandler: CODE, 9368 0 28 +_USB_SOF_Handler: CODE, 9616 0 4 +_USBCheckHIDRequest: CODE, 7160 0 210 +_USBCheckStdRequest: CODE, 7558 0 160 +_OpenI2C: CODE, 9424 0 28 +Total: 13788 \ No newline at end of file diff --git a/software/front/US_Firmware.X/io.c b/software/front/US_Firmware.X/io.c new file mode 100644 index 0000000..fc2147e --- /dev/null +++ b/software/front/US_Firmware.X/io.c @@ -0,0 +1,141 @@ +#define _IO_C + +#include +#include "typedefs.h" +#include "mcu.h" +#include "io.h" +#include "pars.h" +#include "main.h" +#include "PID.h" +#include "isr.h" +#include "iron.h" +#include "usb/usb.h" +#include "usb/usb_driver.h" +#include "usb/usb_function_hid.h" + +#define TXP (*((USBPacket *)USBTxBuffer)) +#define RXP (*((USBPacket *)USBRxBuffer)) + +//#define IO_IDLE 0 +//#define IO_BUSY 1 + +static unsigned int IO_TICKS; +static unsigned int IO_BUSY; + +static unsigned int BuffPos; + +void ProcessIO(); + +void IOInit(){ + IO_TICKS = ISRTicks; + IO_BUSY = 1; + BuffEmpty=1; + USBDriverInit(); + RXP.Command = 0; +} + +void IOTasks(){ + USBDeviceTasks(); + if((USBDeviceState < CONFIGURED_STATE)||(USBSuspendControl==1)) return; + ProcessIO(); // This is where all the actual bootloader related data transfer/self programming takes place +} + +void ProcessIO(){ + static UINT16 _IronID=0; + UINT8 i; + if(!IO_BUSY && !HIDTxHandleBusy(USBInHandle)){ + if(_IronID != IronID){ + _IronID = IronID; + TXP.Command = 1; + TXP.Data16[0] = IronID; + USBInHandle = HIDTxPacket(HID_EP, (char *)&TXP, 64); + } + else if(IO_TICKS != ADCStep && !HIDTxHandleBusy(USBInHandle)){ + IO_TICKS = ADCStep; + if(IO_TICKS & 1){ + BuffPos++; + if(BuffPos>127){ + BuffPos &= 127; + BuffEmpty=1; + } + TXP.Command=3; + TXP.LiveData.Ticks=IO_TICKS; + TXP.LiveData.CTTemp=CTTemp; // + TXP.LiveData.CTemp=PIDVars[0].CTemp[0]; // + TXP.LiveData.ADCTemp=PIDVars[0].ADCTemp[0]; // + TXP.LiveData.TAvgF=PIDVars[0].TAvgF[0] >> ADCAVG; // + TXP.LiveData.CHRes=PIDVars[0].HRAvg >> ADCAVG;// (PIDVars[0].Delta[0]>>4)+250;//HRAvg>>ADCAVG; + TXP.LiveData.TAvgP=PIDVars[0].TAvgP[0]; + TXP.LiveData.Heater=PHEATER; + TXP.LiveData.WSDelta[0] = PIDVars[0].WSDelta[0].val + 2048; // + TXP.LiveData.WSDelta[1] = PIDVars[0].WSDelta[1].val + 2048; // + TXP.LiveData.WSDelta[2] = PIDVars[0].WSDelta[2].val + 2048; // + TXP.LiveData.WSDelta[3] = PIDVars[0].WSDelta[3].val + 2048; // + TXP.LiveData.WSDelta[4] = PIDVars[0].WSDelta[4].val + 2048; // + TXP.LiveData.WSDelta[5] = PIDVars[0].WSDelta[5].val + 2048; // + TXP.LiveData.WSDelta[6] = PIDVars[0].WSDelta[6].val + 2048; // + TXP.LiveData.WSDelta[7] = PIDVars[0].WSDelta[7].val + 2048; // + TXP.LiveData.DestinationReached=PIDVars[0].DestinationReached; // + TXP.LiveData.Duty = (UINT16)(PIDVars[0].PIDDutyFull>>8); // + USBInHandle = HIDTxPacket(HID_EP, (char *)&TXP, 64); + } + } + } + else { + if(!HIDRxHandleBusy(USBOutHandle)){ + IO_BUSY = 1; + switch(RXP.Command){ + case 0x81: //jump to bootloader + mcuJumpToBootLoader(); + break; + case 0x61: //get operating mode + if(!HIDTxHandleBusy(USBInHandle)){ + TXP.Command=0x61; + TXP.OpMode=1; + USBInHandle = HIDTxPacket(HID_EP, (char *)&TXP, 64); + IO_BUSY=0; + } + break; + case 2: //Query device + BeepTicks=5; + if(!HIDTxHandleBusy(USBInHandle)){ + TXP.Command=2; + TXP.QueryDev.PacketDataFieldSize = 64; + USBInHandle = HIDTxPacket(HID_EP, (char *)&TXP, 64); + BeepTicks=20; + InvertTicks=20; + IO_BUSY=0; + } + break; + case 3: //Set current iron PID parameters + IronPars.Config[0].Gain = RXP.IronPars.Gain; + IronPars.Config[0].PID_KP = RXP.IronPars.PID_KP; + IronPars.Config[0].PID_KI = RXP.IronPars.PID_KI; + IronPars.Config[0].PID_DGain = RXP.IronPars.PID_DGain; + IronPars.Config[0].PID_OVSGain = RXP.IronPars.PID_OVSGain; + IO_BUSY = 0; + break; + case 4: //Get current iron PID parameters + if(!HIDTxHandleBusy(USBInHandle)){ + BeepTicks=20; + TXP.Command=4; + TXP.IronPars.Gain = IronPars.Config[0].Gain; + TXP.IronPars.Offset = IronPars.Config[0].Offset; + TXP.IronPars.PID_KP = IronPars.Config[0].PID_KP; + TXP.IronPars.PID_KI = IronPars.Config[0].PID_KI; + TXP.IronPars.PID_DGain = IronPars.Config[0].PID_DGain; + TXP.IronPars.PID_OVSGain = IronPars.Config[0].PID_OVSGain; + USBInHandle = HIDTxPacket(HID_EP, (char *)&TXP, 64); + IO_BUSY = 0; + } + break; + default: + IO_BUSY = 0; + break; + } + if(!IO_BUSY) USBOutHandle = HIDRxPacket(HID_EP, (char *)&RXP, 64); + } + } +} + +#undef _IO_C diff --git a/software/front/US_Firmware.X/io.h b/software/front/US_Firmware.X/io.h new file mode 100644 index 0000000..0ae8ac3 --- /dev/null +++ b/software/front/US_Firmware.X/io.h @@ -0,0 +1,79 @@ +/* + * File: io.h + * Author: Sparky + * + * Created on ?????, 2013, ??? 28, 23:18 + */ + +#ifndef IO_H +#define IO_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include "iron.h" + +typedef union { + UINT8 RAWData[64]; + struct __PACKED { + UINT8 Command; + union{ + UINT8 OpMode; + UINT8 Data[63]; + UINT16 Data16[31]; + struct __PACKED { + unsigned char PacketDataFieldSize; + unsigned char BytesPerAddress; + }QueryDev; + struct __PACKED { + UINT16 Gain; + UINT16 Offset; + UINT16 PID_KP; + UINT16 PID_KI; + UINT16 PID_DGain; + UINT16 PID_OVSGain; + }IronPars; + struct __PACKED { + UINT16 Ticks; + UINT8 CTTemp; + UINT16 CTemp; + UINT16 ADCTemp; + UINT16 TAvgF; + INT16 CHRes; + UINT16 TAvgP; + UINT8 Heater; + INT16 WSDelta[8] __PACKED; + UINT8 DestinationReached; + UINT16 Duty; + }LiveData; + }; + }; +}USBPacket; + + +#ifndef _IO_C +#define IOC_EXTERN extern +extern volatile USBPacket RXP; +extern volatile USBPacket TXP; + +#else +#define IOC_EXTERN +#endif + +IOC_EXTERN void IOInit(); +IOC_EXTERN void IOTasks(); + +IOC_EXTERN int BuffEmpty; + + +#undef IOC_EXTERN + + +#ifdef __cplusplus +} +#endif + +#endif /* IO_H */ + diff --git a/software/front/US_Firmware.X/iron.c b/software/front/US_Firmware.X/iron.c new file mode 100644 index 0000000..6ac6059 --- /dev/null +++ b/software/front/US_Firmware.X/iron.c @@ -0,0 +1,660 @@ +#define _IRON_C +#include "iron.h" +#include "isr.h" +#include "mcu.h" +#include "PID.h" + //ID 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 + //ID(HEX) 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 + //R 100 110 120 130 150 180 200 220 240 270 300 330 390 430 470 560 680 820 1K 1.2K 1.5k 2k 3k 5.6k inf. +const UINT16 IDHash[25] = { 87, 95, 104, 112, 123, 143, 161, 175, 188, 204, 223, 241, 264, 291, 310, 338, 380, 425, 470, 516, 563, 620, 690, 774, 875}; + + +const t_IronPars NoIronPars = { + 0, + 0x0000, + "NO INSTRUMENT ", + { + { + 255, //Type + { + 0, //HChannel + 5, //SChannel + 1, //CBandA + 1, //CBandB + }, + 128, //CurrentA + 128, //CurrentB + 0, //HRCompCurrent + 128, //Gain + 0, //Offset + { //TPoly + 0, //c0 + 0, //c1 + 0, //c2 + 0, //c3 + 0, //c4 + 0, //c5 + 0, //c6 + 0, //c7 + 0, //c8 + 0 //c9 + }, + 0, //WSLength + 0, //PID_DGain + 0, //PID_KP + 0, //PID_KI + 0, //PID_OVSGain + 0, //PID_PMax + 0, //PID_PNom + }, + {0} + } +}; + +const t_IronPars Irons[10] = { + { + 0, + 0x1011, + "PACE TD-100 BLACK ", + { + { + 1, //Type + { + 0, //HChannel + 5, //SChannel + 1, //CBandA + 1, //CBandB + }, + 0, //CurrentA + 10, //CurrentB + 10, //HRCompCurrent + 120, //Gain + 0, //Offset + { //TPoly + 0, //c0 + 61, //c1 + 0, //c2 + 0, //c3 + 0, //c4 + 0, //c5 + 0, //c6 + 0, //c7 + 0, //c8 + 0 //c9 + }, + -1, //WSLength + 3, //PID_DGain + (UINT16)(0.06 * 32768), //PID_KP + (UINT16)(0.001 * 32768), //PID_KI + 3, //PID_OVSGain + 120, //PID_PMax + 120 //PID_PNom + }, + {0} + } + }, + + { + 0, + 0x1813, + "HAKKO T15 ", + {//--Type----HChannel----SChannel----CBand----CurrentA----CurrentB----HRCompCurrent---Gain----Offset--SoftGain----SoftOffset--WSLength----PID_DGain---PID_KP--------------------PID_KI--------------------PID_OVFGain-PID_PMax + { + 1, //Type + { + 0, //HChannel + 5, //SChannel + 1, //CBandA + 1, //CBandB + }, + 10, //CurrentA + 0, //CurrentB + 10, //HRCompCurrent + 100, //Gain + 0, //Offset + { //TPoly + 0, //c0 + 50.1, //c1 + 0, //c2 + 0, //c3 + 0, //c4 + 0, //c5 + 0, //c6 + 0, //c7 + 0, //c8 + 0 //c9 + }, + -1, //WSLength + 2, //PID_DGain + (UINT16)(0.08 * 32768), //PID_KP + (UINT16)(0.0015 * 32768), //PID_KI + 3, //PID_OVSGain + 70, //PID_PMax + 60 //PID_PNom + }, + {0} + } + }, + + { + 0, + 0x1213, + "HAKKO FX8801 ", + {//----------------------------------------------------------------------------------------- + { + 2, //Type + { + 0, //HChannel + 5, //SChannel + 1, //CBandA + 1, //CBandB + }, + 205, //CurrentA + 0, //CurrentB + 0, //HRCompCurrent + 13, //Gain + 331, //Offset + { //TPoly + -165.5, //c0 + 3.98513793, //c1 + 0, //c2 + 0, //c3 + 0, //c4 + 0, //c5 + 0, //c6 + 0, //c7 + 0, //c8 + 0 //c9 + }, + 0, //WSLength + 20, //PID_DGain + (UINT16)(0.4 * 32768), //PID_KP + (UINT16)(0.02 * 32768), //PID_KI + 14, //PID_OVSGain + 65, //PID_PMax + 65 //PID_PNom + }, + {0} + } + }, + + { + 0, + 0x0501, + "CHIN. HAKKO 907 ", + { + { + 1, //Type + { + 0, //HChannel + 5, //SChannel + 1, //CBandA + 1, //CBandB + }, + 10, //CurrentA + 0, //CurrentB + 0, //HRCompCurrent + 49, //Gain + 0, //Offset + { //TPoly (TC Type K) + 0, //c0 + 2.508355e+1, //c1 + 7.860106e-2, //c2 + -2.503131e-1, //c3 + 8.315270e-2, //c4 + -1.228034e-2, //c5 + 9.804036e-4, //c6 + -4.413030e-5, //c7 + 1.057734e-6, //c8 + -1.052755e-8 //c9 + }, + 0, //WSLength + 11, //PID_DGain + (UINT16)(0.4 * 32768), //PID_KP + (UINT16)(0.01 * 32768), //PID_KI + 16, //PID_OVSGain + 50, //PID_PMax + 50 //PID_PNom + }, + {0} + } + }, + + { + 0, + 0x1805, + "JBC C245 ", + { + { + 1, //Type + { + 0, //HChannel + 7, //SChannel + 1, //CBandA + 1, //CBandB + }, + 0, //CurrentA + 10, //CurrentB + 0, //HRCompCurrent + 87, //Gain + 0, //Offset + { //TPoly + 0, //c0 + 43.5, //c1 + 0, //c2 + 0, //c3 + 0, //c4 + 0, //c5 + 0, //c6 + 0, //c7 + 0, //c8 + 0 //c9 + }, + 1, //WSLength + 11, //PID_DGain + (UINT16)(0.3 * 32768), //PID_KP + (UINT16)(0.003 * 32768), //PID_KI + 10, //PID_OVSGain + 130, //PID_PMax + 130 //PID_PNom + }, + {0} + } + }, + + { + 0, + 0x1817, + "JBC C210 ", + { + { + 1, //Type + { + 0, //HChannel + 7, //SChannel + 1, //CBandA + 1, //CBandB + }, + 10, //CurrentA + 0, //CurrentB + 10, //HRCompCurrent + 202, //Gain + 0, //Offset + { //TPoly + 0, //c0 + 126.25, //c1 + 0, //c2 + 0, //c3 + 0, //c4 + 0, //c5 + 0, //c6 + 0, //c7 + 0, //c8 + 0 //c9 + }, + + -1, //WSLength + 1, //PID_DGain + (UINT16)(0.25 * 32768), //PID_KP + (UINT16)(0.003 * 32768), //PID_KI + 4, //PID_OVSGain + 40, //PID_PMax + 40 //PID_PNom + }, + {0} + } + }, + + { + 0, + 0x1313, + "JBC Microtweezers ", + { + { + 1, //Type + { + 1, //HChannel + 2, //SChannel + 1, //CBandA + 1, //CBandB +// 3 //CBand + }, + 0, //CurrentA + 10, //CurrentB + 10, //HRCompCurrent + 202, //Gain + 0, //Offset + { //TPoly + 0, //c0 + 126.25, //c1 + 0, //c2 + 0, //c3 + 0, //c4 + 0, //c5 + 0, //c6 + 0, //c7 + 0, //c8 + 0 //c9 + }, + -1, //WSLength + 1, //PID_DGain + (UINT16)(0.25 * 32768), //PID_KP + (UINT16)(0.004 * 32768), //PID_KI + 4, //PID_OVSGain + 40, //PID_PMax + 40 //PID_PNom + }, + { + 1, //Type + { + 0, //HChannel + 5, //SChannel + 1, //CBandA + 1, //CBandB + }, + 10, //CurrentA + 0, //CurrentB + 10, //HRCompCurrent + 202, //Gain + 0, //Offset + { //TPoly + 0, //c0 + 126.25, //c1 + 0, //c2 + 0, //c3 + 0, //c4 + 0, //c5 + 0, //c6 + 0, //c7 + 0, //c8 + 0 //c9 + }, + -1, //WSLength + 1, //PID_DGain + (UINT16)(0.025 * 32768), //PID_KP + (UINT16)(0.004 * 32768), //PID_KI + 4, //PID_OVSGain + 40, //PID_PMax + 40 //PID_PNom + } + } + }, + { + 0, + 0x1111, + "Weller WMRT ", + { + { + 1, //Type + { + 0, //HChannel + 5, //SChannel + 1, //CBandA + 1, //CBandB +// 3 //CBand + }, + 0, //CurrentA + 0, //CurrentB + 0, //HRCompCurrent + 128, //Gain + 0, //Offset + { //TPoly + 0, //c0 + 67.95, //c1 + 0, //c2 + 0, //c3 + 0, //c4 + 0, //c5 + 0, //c6 + 0, //c7 + 0, //c8 + 0 //c9 + }, + 0, //WSLength + 1, //PID_DGain + (UINT16)(0.25 * 32768), //PID_KP + (UINT16)(0.004 * 32768), //PID_KI + 4, //PID_OVSGain + 40, //PID_PMax + 40 //PID_PNom + }, + { + 1, //Type + { + 1, //HChannel + 2, //SChannel + 1, //CBandA + 1, //CBandB + }, + 0, //CurrentA + 0, //CurrentB + 0, //HRCompCurrent + 128, //Gain + 0, //Offset + { //TPoly + 0, //c0 + 67.95, //c1 + 0, //c2 + 0, //c3 + 0, //c4 + 0, //c5 + 0, //c6 + 0, //c7 + 0, //c8 + 0 //c9 + }, + 0, //WSLength + 1, //PID_DGain + (UINT16)(0.025 * 32768), //PID_KP + (UINT16)(0.004 * 32768), //PID_KI + 4, //PID_OVSGain + 40, //PID_PMax + 40 //PID_PNom + } + } + }, + + { + 0, + 0x1803, + "WELLER WSP80 ", + { + { + 2, //Type + { + 0, //HChannel + 5, //SChannel + 1, //CBandA + 1, //CBandB + }, + 195, //CurrentA + 0, //CurrentB + 0, //HRCompCurrent + 49, //Gain + 627, //Offset + { //TPoly + -313.5, //c0 + 14.2881775, //c1 + 0, //c2 + 0, //c3 + 0, //c4 + 0, //c5 + 0, //c6 + 0, //c7 + 0, //c8 + 0 //c9 + }, + + 0, //WSLength + 30, //PID_DGain + (UINT16)(0.2 * 32768), //PID_KP + (UINT16)(0.008 * 32768), //PID_KI + 4, //PID_OVSGain + 80, //PID_PMax + 80 //PID_PNom + }, + {0} + } + }, + + { + 0, + 0x020B, + "ERSA RT80 ", + {//----------------------------------------------------------------------------------------- + { + 2, //Type + { + 0, //HChannel + 5, //SChannel + 0, //CBandA + 1, //CBandB + }, + 167, //CurrentA + 0, //CurrentB + 0, //HRCompCurrent + 21, //Gain + 284, //Offset + { //TPoly + -145.7299, //c0 + 86.2582, //c1 + 0, //c2 + 0, //c3 + 0, //c4 + 0, //c5 + 0, //c6 + 0, //c7 + 0, //c8 + 0 //c9 + }, + -1, //WSLength + 0, //PID_DGain + (UINT16)(0.4 * 32768), //PID_KP + (UINT16)(0.02 * 32768), //PID_KI + 4, //PID_OVSGain + 80, //PID_PMax + 80 //PID_PNom + }, + {0} + } + } +}; + +volatile int IronTicks; + +void IronIdentify(){ + static UINT16_VAL OID; + static UINT8 IDCnt; + UINT16_VAL CID; + UINT16_VAL NewIronID; + int i; + UINT16 w; + + ISRStop(); + + I2CData.CurrentA.ui16 = 0; + I2CData.CurrentB.ui16 = 0; + I2CAddCommands(I2C_SET_CPOT); + CBANDA = 1; + CBANDB = 1; + while(!I2CIdle); + + HCH = 0; + ID_3S = 1; + ID_OUT = 1; + mcuADCStartManual(); + mcuADCRefVdd(); + + _delay_us(1000); + w = mcuADCReadWait(ADCH_ID, 16) >> 4; + HCH = 1; + for(i = 0; i <= 24; i++)if(w < IDHash[i])break; + CID.v[0] = i; + + _delay_us(1000); + w = mcuADCReadWait(ADCH_ID, 16) >> 4; + HCH=0; + for(i = 0; i <= 24; i++)if(w < IDHash[i])break; + CID.v[1] = i; + + mcuADCRefVref(); + + NewIronID.Val = 0x1919; + if(CID.Val == OID.Val){ + if(IDCnt < 255)IDCnt++; + if(IDCnt > 2)NewIronID.Val = CID.Val; + } + else{ + IDCnt = 0; + } + OID.Val = CID.Val; + + if(NewIronID.v[0] >= 0x19)NewIronID.v[0] = NewIronID.v[1]; + if(NewIronID.v[1] >= 0x19)NewIronID.v[1] = NewIronID.v[0]; + + if(NewIronID.Val != 0x1919){ + if(IronID != NewIronID.Val){ + IronPars = NoIronPars; + for(i = 2; i--; ){ + PIDVars[i].HR = 0x7FFF; + PIDVars[i].HNewData = 0; + PIDVars[i].HInitData = 1; + PIDVars[i].HP = 0; + PIDVars[i].HI = 0; + PIDVars[i].HV = 0; + PIDVars[i].OffDelay = 1600; + } + for(i = (sizeof(Irons) / sizeof(Irons[0])); i--; ){ + if(Irons[i].ID.Val == NewIronID.Val){ + IronPars = Irons[i]; + for(i = 2; i--; )PIDVars[i].HR = 8; + break; + } + } + PIDInit(); + } + } + else{ + if(IronID != 0x1919)IronPars = NoIronPars; + for(i = 2; i--; ){ + PIDVars[i].HInitData = 1; + PIDVars[i].HP = 0; + PIDVars[i].HI = 0; + PIDVars[i].HV = 0; + PIDVars[i].OffDelay = 1600; + } + } + IronID = NewIronID.Val; + ID_OUT = 0; + ID_3S = 0; + ISRStart(); +} + +void IronInit(){ + IronID = 0x1919; + IronPars = NoIronPars; +} + +void IronTasks(){ + int i; + if(IronTicks != ISRTicks){ + IronTicks = ISRTicks; + if((IronTicks & 15) == 15){ + switch(IronID){ + case 0x1919: + IronIdentify(); + break; + default: + for(i = 2; i--;){ + if(IronPars.Config[i].Type && (PIDVars[i].NoSensor || PIDVars[i].NoHeater)){ + IronIdentify(); + break; + } + } + break; + } + } + } +} + +#undef _IRON_C diff --git a/software/front/US_Firmware.X/iron.h b/software/front/US_Firmware.X/iron.h new file mode 100644 index 0000000..0b7f479 --- /dev/null +++ b/software/front/US_Firmware.X/iron.h @@ -0,0 +1,90 @@ +/* + * File: iron.h + * Author: Sparky + * + * Created on ??????????, 2013, ??? 3, 13:34 + */ + +#ifndef IRON_H +#define IRON_H + +#ifdef __cplusplus +extern "C" { +#endif +#include +#include "typedefs.h" + +typedef struct __PACKED{ + union __PACKED{ + unsigned int Input:3; + struct __PACKED{ + unsigned int InputP:1; + unsigned int InputN:1; + unsigned int InputInv:1; + }; + }; + unsigned int CBandA:1; + unsigned int CurrentA:9; + unsigned int CBandB:1; + unsigned int CurrentB:9; + unsigned int Gain:9; + unsigned int Offset:10; +}t_MeasurementConfig; + +typedef struct __PACKED{ + UINT8 Type; //sensor type (1: TC, 2: PTC) + struct __PACKED{ + unsigned int HChannel :1; //Heater Channel + union __PACKED{ + unsigned int InputConfig:3; + struct __PACKED{ + unsigned int InputP :1; //positive input sensor channel selection (0=GND; 1=sensor channel B) + unsigned int InputN :1; //negative input sensor channel selection (0=GND; 1=sensor channel A) + unsigned int InputInv :1; //input amplifier invert (0=not inverted (ChP on +, ChN on -), 1=inverted(ChN on +, ChP on -) + }; + }; + unsigned int CBandA :1; //sensor channel A current source band (0=x16, 1=x1) + unsigned int CBandB :1; //sensor channel B current source band (0=x16, 1=x1) + unsigned int stub : 2; + }; + UINT16 CurrentA; //current for A sensor channel (0-256) current = CurrentA * (1.225/(1.6*256))mA + UINT16 CurrentB; //current for B sensor channel + INT16 HRCompCurrent; //heater resistance compensating current (0, currentA, currentB or currentA+currentB) + UINT16 Gain; //Amplifier gain for sensor, Gain = x*4, x=8-256 + UINT16 Offset; //offset to exclude from measurement (0-1024) + float TPoly[10]; //Temperature polynomial coefficients + INT8 WSLen; //Waveshaping, 0=off, 1-8 = sample waveshaping with length 1-8, -1 = damping waveshaping + UINT8 PID_DGain; //PID differential gain (0 - 32) + UINT16 PID_KP; //PID proportional coefficient (0.1 - 0.999) * 32768 + UINT16 PID_KI; //PID integral coefficient (0.1 - 0.999) * 32768 + UINT16 PID_OVSGain; //Positive overshoot prevention gain (0 - 32) + UINT16 PID_PMax; //maximum rated power (watts) + UINT16 PID_PNom; //nominal power for which PID coefficients are calculated +} t_IronConfig; + +typedef struct __PACKED { + UINT16 Version; + UINT16_VAL ID; + char Name[24]; + t_IronConfig Config[2]; +} t_IronPars; + +#ifndef _IRON_C +#define IRON_H_EXTERN extern +#else +#define IRON_H_EXTERN +#endif + +IRON_H_EXTERN UINT16 IronID; +IRON_H_EXTERN volatile t_IronPars IronPars; +IRON_H_EXTERN void IronInit(); +IRON_H_EXTERN void IronTasks(); + +#undef IRON_H_EXTERN + +#ifdef __cplusplus +} +#endif + +#endif /* IRON_H */ + diff --git a/software/front/US_Firmware.X/isr.c b/software/front/US_Firmware.X/isr.c new file mode 100644 index 0000000..9c3c4c9 --- /dev/null +++ b/software/front/US_Firmware.X/isr.c @@ -0,0 +1,552 @@ +#define _ISR_C +#include +#include +#include +#include +#include "mcu.h" +#include "isr.h" +#include "pars.h" +#include "main.h" +#include "iron.h" +#include "PID.h" +#include "io.h" + +volatile unsigned int ISRComplete = 0; + +volatile int I2CCommands; +volatile int I2CCCommand; + +void ISRInit(){ + int i; + ISRStep = 0; + ADCStep = 0; + ISRTicks = 1; + PHEATER = 0; + I2CStep = 0; + I2CCommands = 0; + I2CCCommand = 0; + I2CIdle = 1; + ISRStopped = 0; + EEPAddrR = 0xFFFF; + EEPDataR = 0; + EEPCntR = 0; + EEPAddrW = 0xFFFF; + EEPDataW = 0; + EEPCntW = 0; + for(i = 2; i--;){ + PIDVars[i].NoHeater = 255; + PIDVars[i].NoSensor = 255; + PIDVars[i].ShortCircuit = 255; + PIDVars[i].HInitData = 1; + PIDVars[i].OffDelay = 1600; + } + OffDelayOff = 1600; + VIBuffCnt = 0; + mainFlags.Calibration = 0; + ISRComplete = 0; + mainFlags.PowerLost = 0; +} + +void ISRStop(){ + ISRStopped = 1; + while(!(ISRStopped & 2)); + while(!I2CIdle); + mcuADCStop(); + mcuStopISRTimer(); + mcuCompDisable(); + mainFlags.PowerLost = 0; +} + +void ISRStart(){ + mcuDisableInterrupts(); + mcuCompDisable(); + mcuADCStop(); + mcuStopISRTimer(); + if(mainFlags.ACPower){ + while(MAINS); + while(!MAINS); + _delay_us(1000); + } + mcuDCTimerReset(); + mcuCompEnableH2L(); + VIBuffCnt = 0; + ISRStopped = 0; + mainFlags.PowerLost = 0; + mcuEnableInterrupts(); +} + +void I2CAddCommands(int c) +{ + int i; + i=mcuDisableInterrupts(); + I2CCommands |= c; + if(I2CIdle)mcuI2CWakeUp(); + mcuRestoreInterrupts(i); +} + +void OnPowerLost(){ + if(!mainFlags.PowerLost){ + mainFlags.PowerLost = 1; + HEATER = 0; + mcuADCStop(); + mcuStopISRTimer(); + mcuCompDisable(); + ISRStep = 0; + ADCStep = 0; + } +} + +void ISRHigh(int src){ + static int OldHeater; + t_PIDVars *PV; + t_IronConfig *IC; + UINT32 dw; + + switch(src){ + case CompH2L: + if(!mainFlags.ACPower) OnPowerLost(); + case DCTimer: + if(ISRStep != 9)ISRComplete = 0; + ISRStep = 0; + break; + case CompL2H: + return; + } + + PV = (t_PIDVars *)&PIDVars[1]; + IC = (t_IronConfig *)&IronPars.Config[1]; + if((ADCStep < 2) || (IC->Type == 0)){ + PV = (t_PIDVars *)&PIDVars[0]; + IC = (t_IronConfig *)&IronPars.Config[0]; + } + + switch (ISRStep){ + case 0: + OldHeater = HEATER; + if(ISRStopped){ + HEATER = 0; + if(!(ISRStopped & 2)){ + ISRStopped |= 2; + mcuADCStop(); + VIBuffCnt = 0; + } + } + else{ + mcuCompDisable(); + if(mainFlags.PowerLost) return; + dw = OffDelayOff; + if(HEATER && dw < PV->OffDelay) dw = PV->OffDelay; + dw >>= 4; + dw -= ((OffDelayOff >> 4) * 115) >> 8; + if(dw > 1000) dw = 1000; + mcuStartISRTimer_us(dw); //delay to zero current when AC power + } + break; + case 1: + //if(OldHeater && (ADCStep & 1))LATBbits.LATB7= ! LATBbits.LATB7; + if(ADCStep & 1){ + HEATER = 0; + }else{ + if(ISRComplete) mcuCompEnableL2H(); + } + if(mainFlags.ACPower){ + mcuStartISRTimer_us(50); + } + else{ + mcuStartISRTimer_us(450); + } + break; + case 2: + //if(OldHeater && (ADCStep & 1))LATBbits.LATB7= ! LATBbits.LATB7; + mcuStartISRTimer_us(150); + mcuADCStartManual(); + mcuADCRefVref(); + CHSEL1 = IC->InputP; + CHSEL2 = IC->InputN; + CHPOL = IC->InputInv; + if(ISRComplete){ + if((dw = VIBuffCnt >> 2) && (VBuff[dw] < 90) && (IBuff[dw] < 16)){ //power lost if <0.5A and <7.4V + OnPowerLost(); + ISRStep = 0; + return; + } + if(ADCStep & 1){ + if(mainFlags.ACPower && CompLowTime){ //calculate delay from comparator trigger to zero current (just before zero cross) + dw = (OldHeater ? PV->OffDelay : OffDelayOff); + if(dw <= 1600)dw = CompLowTime << 4; + dw -= dw >> 4; + dw += CompLowTime; + if(dw < 1600)dw = 1600; + + if(OldHeater){ + PV->OffDelay = dw; + } + else{ + OffDelayOff = dw; + } + } + else{ + OffDelayOff = PV->OffDelay = 1600; + } + CompLowTime = 0; + } + else{ + if(OldHeater){ + UINT32 i, l; + if((i = l = VIBuffCnt) > 1){ + UINT32 cv, ci, sv = 0, si = 0, sp = 0, ri = 0, rv = 0, r = 0; + for(i--, l--; i--;){ + cv = (VBuff[i] + VBuff[i + 1]); + ci = IBuff[i]; + if(ci < 1023 && ri < ci && VBuff[i] < 1023 && VBuff[i + 1] < 1023){ + ri = ci; + rv = cv; + r = 0; + } + if(ci >= 1023){ + if(!r && ri) r = ((rv * 6738) / ri) >> 9; + if(r) ci = ((cv * 6738) / r) >> 9; + } + sv += cv * cv; + si += ci * ci; + sp += ci * cv; + if(BuffEmpty){ + Buff1[i] = ci; + Buff2[i] = cv; + } + } + Buff1[l + 1] = 256; + BuffEmpty = 0; + + r = (ri ? (((rv * 6738) / ri) + 256) >> 9 : 0x7FFF); + //if(ri)r = ((rv * 6738) / ri) >> 8; + // 6738 = 10 * 256 * (((Rs1 * (R48 / R42)) / VRef) * 1024) / (((R51 / (R47 + R51)) / VRef) * 1024) + // = 10 * 256 * (((0.003 * (47K / 1.5K)) / 3.0V) *1024) / (((1K / (27K + 1K)) / 3.0V) * 1024) + // = 6737.92 + + sv = (sv + (l >> 1)) / l; + si = (si + (l >> 1)) / l; + l *= (UINT32)(391 * 2); + sp = (sp + (l >> 1)) / l; + // 391 = (((R51 / (R47 + R51)) / VRef) * 1024) * (((Rs1 * (R48 / R42)) / VRef) * 1024) + // = (((1K / (27K + 1K)) / 3.0V) * 1024) * (((0.003 * (47K / 1.5K)) /3.0V) * 1024) + // = 391,13549206349206349206349206349 + + dw = 1024; + if(IronPars.Config[1].Type) dw >>= 1; + PV->HV = (mcuSqrt(sv * dw) + 32) >> 6; + PV->HI = (mcuSqrt(si * dw) + 16) >> 5; + PV->HP = ((sp * dw) + 512) >> 10; + PV->HR = r; + + PV->HNewData = 1; + } + } + } + } + VIBuffCnt = 0; + ISRComplete = 0; + break; + case 3: + mcuADCRead(ADCH_RT,1); + break; + case 4: + if(ADCStep == 0){ + ADCData.VRT = mcuADCRES; + } + else{ + ADCData.VRT += mcuADCRES; + } + //if(OldHeater && (ADCStep & 1))LATBbits.LATB7= ! LATBbits.LATB7; + mcuADCRead(ADCH_TEMP, 4); + break; + case 5: + //if(OldHeater && (ADCStep & 1))LATBbits.LATB7= ! LATBbits.LATB7; + if(!mainFlags.Calibration){ + CHSEL1 = 0; + CHSEL2 = 0; + } + ADCData.HeaterOn = PHEATER; + ADCData.VTEMP[ADCStep & 1] = mcuADCRES >> 2; + + if(ADCStep & 1) { + if(PV->HR > 3000) { + if(PV->NoHeater < 255) PV->NoHeater++; + } + else{ + PV->NoHeater = 0; + } + if(PV->HR < 8){ + if(PV->ShortCircuit < 255) PV->ShortCircuit++; + } + else{ + PV->ShortCircuit = 0; + } + if(ADCData.VTEMP[1] >= 1023){ + if(PV->NoSensor < 255) PV->NoSensor++; + } + else{ + PV->NoSensor = 0; + } + PID(ADCStep >> 1); + if(PV->KeepOff)PV->KeepOff--; + } + + + ADCStep = (ADCStep + 1) & 3; + + PV = (t_PIDVars *)&PIDVars[1]; + IC = (t_IronConfig *)&IronPars.Config[1]; + if((ADCStep < 2) || (IC->Type == 0)){ + PV = (t_PIDVars *)&PIDVars[0]; + IC = (t_IronConfig *)&IronPars.Config[0]; + } + + HCH = IC->HChannel; + CBANDA = IC->CBandA; + CBANDB = IC->CBandB; + I2CData.CurrentA.ui16 = IC->CurrentA; + I2CData.CurrentB.ui16 = IC->CurrentB; + I2CData.Gain.ui16 = IC->Gain; + I2CData.Offset.ui16 = IC->Offset; + if(!mainFlags.PowerLost)I2CAddCommands(I2C_SET_CPOT | I2C_SET_GAINPOT | I2C_SET_OFFSET); + + if(!(ADCStep & 1)){ + PV->PWM += PV->PIDDuty; + PHEATER = ((PV->PWM>>24)!=0); + PV->PWM &= 0x00FFFFFF; + } + + if(mainFlags.PowerLost || PV->KeepOff || mainFlags.Calibration || IC->Type == 0 || IC->Type == 255 )PHEATER = 0; + HEATER = PHEATER; + mcuADCStartAuto(); + mcuStartISRTimer(C_PER); + break; + case 6: + mcuStartISRTimer(C_PER); + break; + case 7: + mcuStartISRTimer(C_PER); + if(!MAINS || ((VBuff[dw = (mcuIBuffPos() >> 2) - 1] < 90) && (IBuff[dw] < 16))){ //power lost if <0.5A and <7.4V + OnPowerLost(); + return; + } + mcuCompEnableH2L(); + break; + case 8: + ISRTicks++; + ISRComplete = 1; + break; + } + if(ISRStep<255)ISRStep++; +} + + +void I2CISRTasks(){ + + int i; + UINT16 ui; + BOOL CmdOK; + + if(I2CCCommand){ + I2CStep++; + } + else{ + I2CStep=0; + i=mcuDisableInterrupts(); + if(I2CCommands &= 0xFF){ + I2CCCommand = 1; + while(I2CCCommand &= 0xFF){ + if(I2CCommands & I2CCCommand){ + I2CCommands -= I2CCCommand; + I2CIdle=0; + break; + } + I2CCCommand <<= 1; + } + } + else{ + I2CIdle=1; + } + mcuRestoreInterrupts(i); + } + + CmdOK = TRUE; + switch(I2CCCommand){ + case I2C_SET_CPOT: + switch(I2CStep){ + case 0: + mcuI2CStart(); + break; + case 1: + mcuI2CSendAddrW(CPOT); + break; + case 2: + mcuI2CSendByte(0x40); //write to TCON, disable general ca?? + break; + case 3: + ui=0xFF; + if(I2CData.CurrentA.ui16 == 0) ui &= 0xF0; //disconnect R0A when currentA is 0 + if(I2CData.CurrentA.ui16 >= 256) ui &= 0xFE; //disconnect R0B when currentA is MAX + if(I2CData.CurrentB.ui16 == 0) ui &= 0x0F; //disconnect R1A when currentB is 0 + if(I2CData.CurrentB.ui16 >= 256) ui &=0xEF; //disconnect R1B when currentB is MAX + mcuI2CSendByte(ui); //write to TCON + break; + case 4: + mcuI2CSendByte(I2CData.CurrentA.ui16 >> 8); //Wiper0 + break; + case 5: + mcuI2CSendByte(I2CData.CurrentA.ui16 & 0xFF); + break; + case 6: + mcuI2CSendByte((I2CData.CurrentB.ui16 >> 8) | 0x10); //Wiper1 + break; + case 7: + mcuI2CSendByte(I2CData.CurrentB.ui16 & 0xFF); + break; + case 8: + I2CCCommand=0; + mcuI2CStop(); + break; + } + break; + case I2C_SET_GAINPOT: + switch(I2CStep){ + case 0: + mcuI2CStart(); + break; + case 1: + mcuI2CSendAddrW(GAINPOT); + break; + case 2: + mcuI2CSendByte(I2CData.Gain.ui16 >> 8); + break; + case 3: + mcuI2CSendByte(I2CData.Gain.ui16 & 0xFF); + break; + case 4: + I2CCCommand=0; + mcuI2CStop(); + break; + } + break; + case I2C_SET_OFFSET: + switch(I2CStep){ + case 0: + mcuI2CStart(); + break; + case 1: + mcuI2CSendAddrW(OFFADC); + break; + case 2: + mcuI2CSendByte(0b01011000); + break; + case 3: + mcuI2CSendByte(I2CData.Offset.ui16 >> 2); + break; + case 4: + mcuI2CSendByte((I2CData.Offset.ui16 << 6) & 0xFF); + break; + case 5: + I2CCCommand=0; + mcuI2CStop(); + break; + } + break; + case I2C_EEPWRITE: + switch(I2CStep){ + case 0: + mcuI2CStart(); + break; + case 1: + mcuI2CSendAddrW(EEP); + break; + case 2: + if(CmdOK = mcuI2CIsACK())mcuI2CSendByte(EEPAddrW >> 8); + break; + case 3: + mcuI2CSendByte(EEPAddrW & 0xFF); + break; + case 4: + mcuI2CSendByte(*((UINT8*)EEPDataW)); + break; + case 5: + EEPCntW--; + if(EEPCntW){ + EEPDataW++; + EEPAddrW++; + if(((EEPAddrW & 31) == 0) || (I2CCommands & (I2CCCommand-1))){ //Abort if EEPROM page boundary is crossed, or if there is pending higher priority command + CmdOK = FALSE; + } + else { + I2CStep = 4; + mcuI2CSendByte(*((UINT8*)EEPDataW)); + } + } + else{ + EEPAddrW=0xFFFF; + I2CCCommand=0; + mcuI2CStop(); + } + break; + } + break; + case I2C_EEPREAD: + switch(I2CStep){ + case 0: + mcuI2CStart(); + break; + case 1: + mcuI2CSendAddrW(EEP); + break; + case 2: + if(CmdOK = mcuI2CIsACK())mcuI2CSendByte(EEPAddrR >> 8); + break; + case 3: + mcuI2CSendByte(EEPAddrR & 0xFF); + break; + case 4: + mcuI2CStart(); + break; + case 5: + mcuI2CSendAddrR(EEP); + break; + case 6: + mcuI2CReceiverEnable(); + break; + case 7: + *((UINT8 *)EEPDataR) = mcuI2CGetByte(); + EEPCntR--; + if(EEPCntR){ + EEPDataR++; + EEPAddrR++; + if(((EEPAddrR & 31) == 0) || (I2CCommands & (I2CCCommand - 1))){ //Abort if EEPROM page boundary is crossed, or if there is pending higher priority command + mcuI2CReceiverDisable(); + CmdOK = FALSE; + } + else{ + mcuI2CACK(); + I2CStep = 5; + } + } + else{ + mcuI2CReceiverDisable(); + EEPAddrR = 0xFFFF; + I2CCCommand=0; + mcuI2CStop(); + } + break; + } + break; + default: + I2CCCommand=0; + break; + } + if(CmdOK == FALSE){ + I2CCommands |= I2CCCommand; + I2CCCommand=0; + mcuI2CStop(); + } +} + +#undef _ISR_C diff --git a/software/front/US_Firmware.X/isr.h b/software/front/US_Firmware.X/isr.h new file mode 100644 index 0000000..2e94bd2 --- /dev/null +++ b/software/front/US_Firmware.X/isr.h @@ -0,0 +1,117 @@ +/* + * File: isr.h + * Author: Sparky + * + * Created on ??????????, 2013, ??? 20, 2:17 + */ + +#ifndef ISR_H +#define ISR_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include "typedefs.h" +#include "mcu.h" + +//constants for output current on TC measurement +#define TC_CURRENT 10 +#define TC_RCOMP ((UINT8)(19.6*TC_CURRENT)) //compensation = (TC_COMP*RHEATER*TCGAIN)/65536 + +typedef struct { + int HeaterOn; + unsigned int VRT; + unsigned int VID; + unsigned int VTEMP[4]; + unsigned int VIN; +}ADCDataS; + +typedef struct { + SUINT16 CurrentA; + SUINT16 CurrentB; + SUINT16 Gain; + SUINT16 Offset; +}I2CDataS; + +typedef struct { + int Vin; + int Iin; +} ADCAutoDataS ; + +#ifndef _ISR_C +#define ISRC_EXTERN extern +#else +#define ISRC_EXTERN +#endif + +ISRC_EXTERN void IsrHigh(int src); + +ISRC_EXTERN volatile int ISRStep; +ISRC_EXTERN volatile int ISRTicks; + +ISRC_EXTERN volatile int ISRStopped; + +ISRC_EXTERN volatile ADCDataS ADCData; +ISRC_EXTERN volatile UINT32 VBuff[256]; +ISRC_EXTERN volatile UINT32 IBuff[256]; +ISRC_EXTERN volatile unsigned int VIBuffCnt; +ISRC_EXTERN volatile ADCAutoDataS ADCAutoData[256]; + +ISRC_EXTERN UINT32 OffDelayOff; + +ISRC_EXTERN volatile UINT32 CompLowTime; + +ISRC_EXTERN volatile I2CDataS I2CData; + +ISRC_EXTERN volatile UINT8 PHEATER; + +ISRC_EXTERN volatile int ADCStep; + +ISRC_EXTERN volatile int KeepOff; + +ISRC_EXTERN volatile unsigned char NoHeater; +ISRC_EXTERN volatile unsigned char NoSensor; +ISRC_EXTERN volatile unsigned char ShortCircuit; + +ISRC_EXTERN volatile UINT16 EEPAddrR; +ISRC_EXTERN volatile UINT16 EEPAddrW; +ISRC_EXTERN volatile void * EEPDataR; +ISRC_EXTERN volatile void * EEPDataW; +ISRC_EXTERN volatile UINT16 EEPCntR; +ISRC_EXTERN volatile UINT16 EEPCntW; + +ISRC_EXTERN volatile int Buff1[128]; +ISRC_EXTERN volatile int Buff2[128]; + +enum I2C_FLAGS{ + I2C_SET_CPOT=1, + I2C_SET_GAINPOT=2, + I2C_SET_OFFSET=4, + I2C_EEPWRITE = 8, + I2C_EEPREAD = 16 +}; + +enum IntSrc{ + CompH2L=1, + CompL2H=2, + DCTimer=3 +}; + + +ISRC_EXTERN volatile int I2CStep; +ISRC_EXTERN volatile unsigned char I2CIdle; + + +#undef ISRC_EXTERN + +//#define _I2CStart {I2CStep=0;PIR1bits.SSPIF=1;} + +#ifdef __cplusplus +} +#endif + +#endif /* ISR_H */ + diff --git a/software/front/US_Firmware.X/isr_old.c b/software/front/US_Firmware.X/isr_old.c new file mode 100644 index 0000000..c5ed485 --- /dev/null +++ b/software/front/US_Firmware.X/isr_old.c @@ -0,0 +1,700 @@ +#define _ISR_C +#include +#include "typedefs.h" +#include "mcu_pic18f4550.h" +#include "isr.h" +#include "mul.h" +#include "main.h" +#include "disp.h" +#include "heater.h" +#include "iron.h" +#include "PID.h" + +volatile UINT8 ISRStep=0; +volatile UINT8 ADCStep=0; +volatile UINT8 ISRTicks=1; //increased on every mains period + +volatile ADCDataS ADCData; + +volatile UINT8 I2CStep=0; +volatile I2CDataS I2CData; + +volatile SUINT32 PWM; + +volatile UINT8 PHEATER; + +volatile SUINT16 CTemp; +volatile SUINT16 CRTemp; +volatile SUINT16 CTTemp; + +volatile SUINT16 TAvg; +volatile SUINT16 TAvgF; +volatile SUINT16 TBuff[8]; +volatile UINT8 TBPos=0; +volatile SUINT16 TSlope; +volatile SUINT16 SlopeBuff[8]; +volatile UINT8 SBPos=0; +volatile SUINT16 TAvgS; +volatile SUINT16 Delta[2]; + +volatile UINT8 Starting = 1; + +//volatile static UINT16 ADCData[5]={0,0,0,0,0}; + + +void interrupt ISRHigh(){ + static UINT8 b; + static SUINT16 w; + if(PIR1bits.TMR1IF){ + ISRStep=0; + TMR1H=T_PER.ui8[1]; + TMR1L=T_PER.ui8[0]; + PIR1bits.TMR1IF=0; + } + if(PIR2bits.CMIF && PIE2bits.CMIE){ + if(!CMCONbits.C1OUT){ + ISRStep=0; + TMR1H=T_PER.ui8[1]; + TMR1L=T_PER.ui8[0]; + COMPREF=3; + } + else{ + COMPREF=2; + } + b=CMCON; + PIR2bits.CMIF=0; + } + switch(ISRStep){ + case 0: + PIE2bits.CMIE=0; + ADCON1bits.VCFG=0b00; //ADC reference = Vdd + TMR0H=(~_timer_us(100))>>8; + TMR0L=(~_timer_us(100)) & 0x00FF; + T0CONbits.TMR0ON=1; + break; + case 1: + INTCONbits.TMR0IF=0; + T0CONbits.TMR0ON=0; + _readADC(ADCH_ID); + break; + case 2: + ADCData.VID.ui16=ADCRESULT; + PIR1bits.ADIF=0; + ADCON1bits.VCFG=0b01; //ADC reference = Vref + TMR0H=(~_timer_us(100))>>8; + TMR0L=(~_timer_us(100)) & 0x00FF; + T0CONbits.TMR0ON=1; + break; + case 3: + INTCONbits.TMR0IF=0; + T0CONbits.TMR0ON=0; + _readADC(ADCH_RT); + break; + case 4: + ADCData.VRT.ui16-=(ADCData.VRT.ui16>>2); + ADCData.VRT.ui16+=ADCRESULT; + PIR1bits.ADIF=0; + TMR0H=(~_timer_us(800))>>8; + TMR0L=(~_timer_us(800)) & 0x00FF; + T0CONbits.TMR0ON=1; + HEATER=0; + break; + case 5: + //LATB3=0; + INTCONbits.TMR0IF=0; + T0CONbits.TMR0ON=0; + _readADC(ADCH_TEMP); + break; + case 6: + //LATB3=1; + ADCData.VTEMP[ADCStep].ui16=ADCRESULT; + PIR1bits.ADIF=0; + + if(ADCStep & 1){ + PIR1bits.CCP1IF=1; //CCP1 interrupt is used to run PID from lower priority ISR + } + else{ + PWM.ui32+=PIDDuty.ui32; + PHEATER=(PWM.ui8[3]!=0); + PWM.ui8[3]=0; + } + + ADCStep++; + ADCStep&=3; + if((ADCStep & 2)==0){ //offset or TC measurement + CBAND=1; + I2CData.Current.ui16=0; + I2CData.Offset.ui16=0; + } + if(ADCStep & 1){ //heater resistance measurement + CHSEL=0; + I2CData.Gain.ui16=HR_GAIN; + if(ADCStep & 2){ + CBAND=HR_CBAND; + I2CData.Current.ui16=HR_CURRENT; + I2CData.Offset.ui16=ADCData.VTEMP[1].ui16; //exclude offset from measurement + } + }else //TC or resistive sensor measurement + { + CHSEL=IronPars.Channel; + I2CData.Gain.ui16=IronPars.Gain.ui16; + if(ADCStep & 2){ + CBAND=IronPars.CBand; + I2CData.Current.ui16=IronPars.Current.ui16; + I2CData.Offset.ui16=ADCData.VTEMP[0].ui16+IronPars.Offset.ui16; + } + } + _I2CStart; + HEATER=PHEATER; + _showChar(1); + TMR0H=C_PER.i8[1]; + TMR0L=C_PER.i8[0]; + T0CONbits.TMR0ON=1; + break; + case 7: + INTCONbits.TMR0IF=0; + T0CONbits.TMR0ON=0; + _showChar(2); + TMR0H=C_PER.i8[1]; + TMR0L=C_PER.i8[0]; + T0CONbits.TMR0ON=1; + break; + case 8: + INTCONbits.TMR0IF=0; + T0CONbits.TMR0ON=0; + _showChar(0); + _readADC(ADCH_VIN); + break; + case 9: + ADCData.VIN.ui16=ADCRESULT; + PIR1bits.ADIF=0; + b=CMCON; + PIR2bits.CMIF=0; + PIE2bits.CMIE=1; + _showChar(3); + TMR0H=C_PER.i8[1]; + TMR0L=C_PER.i8[0]; + T0CONbits.TMR0ON=1; + break; + case 10: + _showChar(0); + INTCONbits.TMR0IF=0; + T0CONbits.TMR0ON=0; + break; + } + //if(PIR1bits.ADIF){ + // ADRES=ADRES; + //PIR1bits.ADIF=0; + //} + if(ISRStep<255)ISRStep++; +} + + +void interrupt low_priority ISRlow(){ + volatile static SUINT16 w; + volatile static SUINT32 dw; + volatile static SUINT32 pdt; + //LATB3=!LATB3; + if(PIR1bits.SSPIF){ + switch(I2CStep){ + //Set current pot position + case 0: + SSPCON2bits.SEN=1; + break; + case 1: + SSPBUF=CPOT; + break; + case 2: + SSPBUF=I2CData.Current.ui8[1] & 1; + break; + case 3: + SSPBUF=I2CData.Current.ui8[0]; + break; + case 4: + SSPCON2bits.PEN=1; + break; + + //Set gain pot position + case 5: + SSPCON2bits.SEN=1; + break; + case 6: + SSPBUF=GAINPOT; + break; + case 7: + SSPBUF=I2CData.Gain.ui8[1] & 1; + break; + case 8: + SSPBUF=I2CData.Gain.ui8[0]; + break; + case 9: + SSPCON2bits.PEN=1; + break; + + //Set offset + case 10: + SSPCON2bits.SEN=1; + break; + case 11: + SSPBUF=OFFADC; + break; + case 12: + SSPBUF=0b01011000; + break; + case 13: + w.ui16=I2CData.Offset.ui16; + w.ui16<<=6; + SSPBUF=w.ui8[1]; + break; + case 14: + w.ui16=I2CData.Offset.ui16; + w.ui16<<=6; + SSPBUF=w.ui8[0]; + break; + case 15: + SSPCON2bits.PEN=1; + break; + default: + I2CStep--; + break; + } + I2CStep++; + PIR1bits.SSPIF=0; + } + + if(PIR1bits.CCP1IF){ + LATB3=0; + PIR1bits.CCP1IF=0; + +/**** GET ROOM TEMPERATURE **********************************************************/ + GIE=0; + w.ui16=ADCData.VRT.ui16; + GIE=1; + w.i16>>=2; + w.i16-=125; + mul16s8u(dw,w,182); + CRTemp.i16=dw.mi16; +/************************************************************************************/ + +/**** GET AND NORMALISE IRON TEMPRATURE *********************************************/ + if(IronPars.Type){ + GIE=0; + w.ui16=ADCData.VTEMP[2].ui16; + GIE=1; + } + else + { + GIE=0; + w.ui16=ADCData.VTEMP[0].ui16; + GIE=1; + } + mul16s16u(dw,IronPars.SoftGain,w); + dw.hi24>>=2; + dw.mi16+=IronPars.SoftOffset.i16; + if(IronPars.Type==0)dw.mi16+=CRTemp.i16; + if(dw.mi16<0)dw.mi16=0; + CTemp.ui16=dw.mi16; +/************************************************************************************/ + + if(Starting){ + TAvg.ui16=0; + for(w.i8[0]=0;w.ui8[0]<4;w.ui8[0]++){ + TAvg.ui16+=CTemp.ui16; + TBuff[w.ui8[0]].ui16=CTemp.ui16; + } + TAvgF.ui16=TAvg.ui16; + TSlope.ui16=TAvg.ui16>>2; + for(w.i8[0]=0;w.ui8[0]<4;w.ui8[0]++){ + SlopeBuff[w.ui8[0]].ui16=TSlope.ui16; + } + TSlope.ui16=0; + Starting=0; + } + + TAvg.ui16-=TBuff[TBPos].ui16; + TAvg.ui16+=CTemp.ui16; + TBuff[TBPos].ui16=CTemp.ui16; + TBPos++; + TBPos&=3; + + TAvgF.ui16-=TAvgF.ui16>>2; + TAvgF.ui16+=CTemp.ui16; + + SlopeBuff[SBPos].ui16=TAvg.ui16>>2; + SBPos++; + SBPos&=3; + + w.i16=TSlope.i16; + if(w.i16<0)w.i16=-w.i16; + w.ui16>>=2; + if(TSlope.i16<0)w.i16=-w.i16; + TSlope.i16-=w.i16; + TSlope.i16-=SlopeBuff[(SBPos-1)&3].i16; + TSlope.i16+=SlopeBuff[SBPos].i16; + + w.i16=TSlope.i16; + if(w.i16<0)w.i16=-w.i16; + w.ui16>>=2; + mul16u8u(dw,w,IronPars.PID_DGain); + dw.lui24>>=2; + if(TSlope.i16<0)dw.i16[0]=-dw.i16[0]; + + Delta[1].i16=Delta[0].i16; + Delta[0].i16=CTTemp.i16; + Delta[0].i16-=(TAvgF.i16>>2); + Delta[0].i16-=dw.i16[0]; + Delta[0].i16<<=2; + + pdt.ui32=PIDDuty.ui32; + + mul16s16u(dw, Delta[0], IronPars.PID_K1); + pdt.i32+=dw.i32; + mul16s16u(dw, Delta[1], IronPars.PID_K2); + pdt.i32-=dw.i32; + + if(pdt.i32<0){ + pdt.i32=0; + } + else{ + if(pdt.ui32>0x00FFFFFF){ + pdt.ui32=0x00FFFFFF; + } + w.i16=-(Delta[0].i16>>2); + if(w.i16<=0){ + if(w.i16<-200)pdt.ui32=0x00FFFFFF; + } + else{ + w.i16<<=4; + if(w.i16>255)w.ui8[0]=255; + w.ui8[0]=~w.ui8[0]; + if(pdt.ui8[2]>w.ui8[0]){ + pdt.ui8[2]=w.ui8[0]; + pdt.ui16[0]=0xFFFF; + } + } + } + GIE=0; + PIDDuty.ui32=pdt.ui32; + GIE=1; +/* if(PWM.i32<0){ + PWM.i32=0; + PWMCNT.lui24=0; + } + else{ + SUINT16 w; + if(PWM.ui32>0x00FFFFFF){ + PWM.ui32=0x00FFFFFF; + } + w.i16=FPAVGT.i16-PTT.i16; + if(w.i16<0){ + if(w.i16<-200)PWM.ui32=0x00FFFFFF; + } + else{ + w.i16<<=4; + if(w.i16>255)w.ui8[0]=255; + w.ui8[0]=~w.ui8[0]; + if(PWM.ui8[2]>w.ui8[0]){ + PWM.ui8[2]=w.ui8[0]; + PWM.ui16[0]=0xFFFF; + } + w.i16=FPAVGT.i16-PTT.i16; + } + if(CTTemp==0)PWM.ui32=0; + PWMCNT.ui32+=PWM.ui32; + PHEATER=(PWMCNT.ui8[3]!=0); + if(w.i16>40)PHEATER=0; + if(CTemp>460)PHEATER=0; + } + PWMCNT.ui8[3]=0; +*/ + + +/* SUINT16 w; + if(PWM.ui32>0x00FFFFFF){ + PWM.ui32=0x00FFFFFF; + } + w.i16=FPAVGT.i16-PTT.i16; + if(w.i16<0){ + if(w.i16<-200)PWM.ui32=0x00FFFFFF; + } + else{ + w.i16<<=4; + if(w.i16>255)w.ui8[0]=255; + w.ui8[0]=~w.ui8[0]; + if(PWM.ui8[2]>w.ui8[0]){ + PWM.ui8[2]=w.ui8[0]; + PWM.ui16[0]=0xFFFF; + } + w.i16=FPAVGT.i16-PTT.i16; + } + if(CTTemp==0)PWM.ui32=0; + PWMCNT.ui32+=PWM.ui32; + PHEATER=(PWMCNT.ui8[3]!=0); + if(w.i16>40)PHEATER=0; + if(CTemp>460)PHEATER=0; +*/ + + + + + + + +/* FPAVGT.i16=PAVGT.i16+dw.i16[0]; + Delta[1].i16=Delta[0].i16; + Delta[0].i16=(PTT.i16-FPAVGT.i16); + if(Delta[0].i16<0)Delta[0].i16=-Delta[0].i16; + Delta[0].i16<<=2; + if(PTT.i16>ADC_AVG; + for(SBPos=1;SBPos<(1<>ADC_AVG); + TempAVG2.ui16+=ADVal.Val; + TBPos++; + TBPos&=((1<>ADC_AVG; + SBPos++; + SBPos&=((1<>(ADC_AVG+1); + w.i16=TSlope.i16; + if(w.i16<0)w.i16=-w.i16; + w.i16>>=2; + if(TSlope.i16<0)w.i16=-w.i16; + TSlope.i16-=w.i16; + TSlope.i16+=SlopeBuff[(SBPos-1)&((1<>ADC_AVG; + PAVGT.ui16=TempAVG2.ui16>>ADC_AVG; + PTT.ui16=CTTemp; + PTT.ui16<<=2; + + w.i16=TSlope.i16; + if(w.i16<0)w.i16=-w.i16; + w.i16>>=2; + dw.ui16[1]=0; + dw.ui16[0]=w.ui8[0]*PIDDGAIN; + dw.mui16+=w.ui8[1]*PIDDGAIN; + dw.lui24>>=2; + if(TSlope.i16<0)dw.i16[0]=-dw.i16[0]; + + FPAVGT.i16=PAVGT.i16+dw.i16[0]; + Delta[1].i16=Delta[0].i16; + Delta[0].i16=(PTT.i16-FPAVGT.i16); + if(Delta[0].i16<0)Delta[0].i16=-Delta[0].i16; + Delta[0].i16<<=2; + if(PTT.i160x00FFFFFF){ + PWM.ui32=0x00FFFFFF; + } + w.i16=FPAVGT.i16-PTT.i16; + if(w.i16<0){ + if(w.i16<-200)PWM.ui32=0x00FFFFFF; + } + else{ + w.i16<<=4; + if(w.i16>255)w.ui8[0]=255; + w.ui8[0]=~w.ui8[0]; + if(PWM.ui8[2]>w.ui8[0]){ + PWM.ui8[2]=w.ui8[0]; + PWM.ui16[0]=0xFFFF; + } + w.i16=FPAVGT.i16-PTT.i16; + } + if(CTTemp==0)PWM.ui32=0; + PWMCNT.ui32+=PWM.ui32; + PHEATER=(PWMCNT.ui8[3]!=0); + if(w.i16>40)PHEATER=0; + if(CTemp>460)PHEATER=0; + } + PWMCNT.ui8[3]=0; + } + ISRTicks++; + break; + default: + LATC=8; + IND2=0; + IND1=0; + HEATER=0; + break; + } + ISRStep++; +}*/ + diff --git a/software/front/US_Firmware.X/l.obj b/software/front/US_Firmware.X/l.obj new file mode 100644 index 0000000..40ab8b6 Binary files /dev/null and b/software/front/US_Firmware.X/l.obj differ diff --git a/software/front/US_Firmware.X/main.c b/software/front/US_Firmware.X/main.c new file mode 100644 index 0000000..990a935 --- /dev/null +++ b/software/front/US_Firmware.X/main.c @@ -0,0 +1,262 @@ +/* + * File: main.c + * Author: Sparky + * Compiler: Microchip XC8 1.12 + * + * Created on ??????, 2013, ?????? 5, 3:15 + */ +#define _MAIN_C + +#include "mcu.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "typedefs.h" + +#include "usb/usb.h" +#include "usb/usb_function_hid.h" + +#include "main.h" + +#include "isr.h" +#include "iron.h" +#include "PID.h" +#include "menu.h" +#include "io.h" +#include "EEP.h" +#include "OLED.h" +#include "pars.h" + + +volatile unsigned int BeepTicks; +volatile unsigned int InvertTicks; + +volatile unsigned int MAINS_PER; //mains voltage period +volatile unsigned int T_PER; //ISR Timer period for mains frequency/1.2 +volatile unsigned int C_PER; //Character display period + +volatile mainflags_t mainFlags = {1, 1, 1, 0}; + +/****** PARAMETERS SAVED IN EEPROM WHEN POWER IS LOST**************************/ +volatile unsigned int TTemp; //target temperature/2 +volatile pars_t pars; +/******************************************************************************/ + +void LoadPars(void) +{ + int i; + UINT8 b,oldb; + + EEPRead(0, (UINT8 *)&pars, sizeof(pars)); + for(i = 0; i < sizeof(pars); i++){ + if((pars.b[i] < ParDef[i].Min) || (pars.b[i] > ParDef[i].Max)){ + for(i = 0; i < sizeof(pars); i++){ + pars.b[i] = ParDef[i].Default; + } + break; + } + } + + TTemp = 150; + oldb=EEPRead(63 + 64, 0, 1); + for(i = 0; i < 64; i++){ + b = EEPRead(i + 64, 0, 1); + if((oldb == 0xFF) && (b >= 75) && (b <= 225)){ + TTemp = b; + break; + } + oldb = b; + } +} + + +void SavePars(void) +{ + int i; + UINT8 b, oldb; + + for(i = 0; i < sizeof(pars); i++){ + if(EEPRead(i, 0 ,1) != pars.b[i])EEPWriteImm(i, pars.b[i]); + } + oldb = EEPRead(63 + 64, 0, 1); + for(i = 0; i < 64; i++){ + b = EEPRead(i + 64, 0, 1); + if((oldb==0xFF) && (b >= 75) && (b <= 225))break; + oldb = b; + } + i &= 63; + b=EEPRead(i + 64, 0, 1); + if(b != TTemp){ + EEPWriteImm(i + 64, 0xFF); + EEPWriteImm(((i + 1) & 63) + 64, TTemp); + } +} + + +void main(void){ + int i; + + mcuInit1(); + + OLED_CS=1; + OLED_DC=1; + OLED_RES=0; + _delay_ms(100); + SDI_OUT=0; + SDO_OUT=0; + SDISDO_OO; + OLED_RES=1; + mcuSPIOpen(); + OLEDInit(); + OLEDPrintNum816(0, 0, 2, 0); + OLEDUpdate(); + + mcuInit2(); + + SPEAKER=0; + + OLEDPrintNum816(0, 0, 2, 20); + OLEDUpdate(); + OpenTimer1(T1_ON | T1_IDLE_STOP | T1_TMWDIS_OFF | T1_GATE_OFF | T1_PS_1_256 | T1_SYNC_EXT_OFF | T1_SOURCE_INT,0xFFFF); + ConfigIntTimer1(T1_INT_OFF | T1_INT_PRIOR_7 | T1_INT_SUB_PRIOR_3); + _delay_ms(100); + OLEDPrintNum816(0, 0, 2, 21); + OLEDUpdate(); + + mainFlags.ACPower = 0; + MAINS_PER = 0; + mcuDCTimerReset(); + while(MAINS && (mT1GetIntFlag() == 0)); + _delay_us(100); + while((!MAINS) && (mT1GetIntFlag() ==0)); + mcuDCTimerReset(); + for(i=0;((i<8) && (mT1GetIntFlag()==0));i++){ + _delay_us(100); + while(MAINS && (mT1GetIntFlag()==0)){}; + _delay_us(100); + while((!MAINS) && (mT1GetIntFlag()==0)){}; + MAINS_PER=ReadTimer1(); + } + if(mT1GetIntFlag()){ + MAINS_PER=(PER_FREQ/256)/110; //55Hz + T_PER=MAINS_PER; + } + else{ + MAINS_PER>>=3; + T_PER=MAINS_PER+((PER_FREQ/256)/1000); + mainFlags.ACPower=1; + } + C_PER=(MAINS_PER-(PER_FREQ/256)/500)>>2; + CloseTimer1(); + OpenTimer1(T1_ON | T1_IDLE_STOP | T1_TMWDIS_OFF | T1_GATE_OFF | T1_PS_1_256 | T1_SYNC_EXT_OFF | T1_SOURCE_INT, T_PER); + OLEDPrintNum816(0, 0, 2, 22); + OLEDUpdate(); + + IronInit(); + OLEDPrintNum816(0, 0, 2, 31); + OLEDUpdate(); + ISRInit(); + OLEDPrintNum816(0, 0, 2, 32); + OLEDUpdate(); + PIDInit(); + OLEDPrintNum816(0, 0, 2, 33); + OLEDUpdate(); + IOInit(); + OLEDPrintNum816(0, 0, 2, 34); + OLEDUpdate(); + MenuInit(); + OLEDPrintNum816(0, 0, 2, 35); + OLEDUpdate(); + + if(mainFlags.ACPower){ + while(MAINS); + while(!MAINS); + } + OLEDPrintNum816(0, 0, 2, 36); + OLEDUpdate(); + + mcuDCTimerReset(); + + CMP2ConfigInt(CMP_INT_PRIOR_7 | CMP_INT_SUB_PRI_3 | CMP_INT_ENABLE); + ConfigIntADC10(ADC_INT_PRI_7 | ADC_INT_SUB_PRI_3 | ADC_INT_ON); + ConfigIntTimer1(T1_INT_ON | T1_INT_PRIOR_7 | T1_INT_SUB_PRIOR_3); + OLEDPrintNum816(0, 0, 2, 41); + OLEDUpdate(); + + + INTClearFlag(INT_I2C4B); + INTClearFlag(INT_I2C4M); + INTClearFlag(INT_I2C4S); + INTClearFlag(INT_I2C4); + INTSetVectorPriority(INT_I2C_4_VECTOR, INT_PRIORITY_LEVEL_6); + INTSetVectorSubPriority(INT_I2C_4_VECTOR, INT_SUB_PRIORITY_LEVEL_3); + INTEnable(INT_I2C4B,INT_ENABLED); + INTEnable(INT_I2C4M,INT_ENABLED); + INTEnable(INT_I2C4S,INT_ENABLED); + INTEnable(INT_I2C4,INT_ENABLED); + OLEDPrintNum816(0, 0, 2, 42); + OLEDUpdate(); + + INTClearFlag(INT_OC2); + INTSetVectorPriority(_OUTPUT_COMPARE_2_VECTOR, INT_PRIORITY_LEVEL_5); + INTSetVectorSubPriority(_OUTPUT_COMPARE_2_VECTOR, INT_SUB_PRIORITY_LEVEL_3); + INTEnable(INT_OC2,INT_ENABLED); + OLEDPrintNum816(0, 0, 2, 43); + OLEDUpdate(); + + mcuInitISRTimer(); + INTEnableSystemMultiVectoredInt(); + OLEDPrintNum816(0, 0, 2, 44); + OLEDUpdate(); + + CBANDA=1; + CBANDB=1; + CHSEL1=0; + CHSEL2=1; + CHPOL=0; + I2CData.CurrentA.ui16=128; + I2CData.CurrentB.ui16=128; + I2CData.Gain.ui16=128; + I2CData.Offset.ui16=128; + I2CAddCommands(I2C_SET_CPOT | I2C_SET_GAINPOT | I2C_SET_OFFSET); + OLEDPrintNum816(0, 0, 2, 45); + OLEDUpdate(); + + LoadPars(); + OLEDPrintNum816(0, 0, 2, 46); + OLEDUpdate(); + + ISRStop(); + OLEDPrintNum816(0, 0, 2, 47); + OLEDUpdate(); + + mainFlags.PowerLost = 0; + + ISRStart(); + OLEDPrintNum816(0, 0, 2, 48); + OLEDUpdate(); + + while(1){ + if(mainFlags.PowerLost){ + SavePars(); + MenuTasks(); + _delay_ms(1000); + mcuReset(); + while(1); + } + MenuTasks(); + IOTasks(); + IronTasks(); + } +} + +#undef _MAIN_C \ No newline at end of file diff --git a/software/front/US_Firmware.X/main.err b/software/front/US_Firmware.X/main.err new file mode 100644 index 0000000..d327c91 --- /dev/null +++ b/software/front/US_Firmware.X/main.err @@ -0,0 +1 @@ +Warning[2058] C:\Users\Sparky\Desktop\MyProjects\Electronics\BK3000LF\software\front\BK3000LF.X\main.c 556 : call of function without prototype diff --git a/software/front/US_Firmware.X/main.h b/software/front/US_Firmware.X/main.h new file mode 100644 index 0000000..4149ea8 --- /dev/null +++ b/software/front/US_Firmware.X/main.h @@ -0,0 +1,42 @@ +/* + * File: main.h + * Author: Sparky + * + * Created on ???????, 2013, ??? 21, 3:06 + */ + +#ifndef MAIN_H +#define MAIN_H + +#include "typedefs.h" +#include "pars.h" + +#ifdef __cplusplus +extern "C" { +#endif + + typedef struct __PACKED{ + int HolderPresent:1; + int PowerLost:1; + int ACPower:1; + int Calibration:1; + }mainflags_t; + +#ifndef _MAIN_C + extern volatile unsigned int BeepTicks; + extern volatile unsigned int InvertTicks; + extern volatile unsigned int MAINS_PER; + extern volatile unsigned int T_PER; + extern volatile unsigned int C_PER; + + extern volatile unsigned int TTemp; + extern volatile mainflags_t mainFlags; + extern volatile pars_t pars; +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* MAIN_H */ + diff --git a/software/front/US_Firmware.X/make1368-1.bat b/software/front/US_Firmware.X/make1368-1.bat new file mode 100644 index 0000000..12fd9f7 --- /dev/null +++ b/software/front/US_Firmware.X/make1368-1.bat @@ -0,0 +1,2 @@ +@echo off +fixDeps "build/PIC32_with_bootloader/production/usb/usb_device.o.d" -rsi "C:\Program Files (x86)\Microchip\xc32\v1.21\bin"../ -c "C:\Program Files (x86)\Microchip\xc32\v1.21\bin\xc32-gcc.exe" -g -x c -c -mprocessor=32MX534F064H -O3 -MMD -MF "build/PIC32_with_bootloader/production/usb/usb_device.o.d" -o build/PIC32_with_bootloader/production/usb/usb_device.o usb/usb_device.c diff --git a/software/front/US_Firmware.X/make2468-1.bat b/software/front/US_Firmware.X/make2468-1.bat new file mode 100644 index 0000000..2399480 --- /dev/null +++ b/software/front/US_Firmware.X/make2468-1.bat @@ -0,0 +1,2 @@ +@echo off +fixDeps build/PIC18_XC8/production/usb/hid.p1.d -rsi "C:\Program Files (x86)\Microchip\xc8\v1.20\bin"../ diff --git a/software/front/US_Firmware.X/map.map b/software/front/US_Firmware.X/map.map new file mode 100644 index 0000000..65335da --- /dev/null +++ b/software/front/US_Firmware.X/map.map @@ -0,0 +1,42 @@ +MPLINK 4.46, Linker +Linker Error Map File - Created Tue Feb 05 20:12:02 2013 + +*Warning* - This is only a partial map file due to a link time error. + Only sections which were allocated prior to the error are shown below. + +CODEPAGES: + Memory Start End Section Address Size(Bytes) + --------- --------- --------- --------- --------- --------- + page 0x0000 0x3fff + + idlocs 0x0000 0x0007 + + config 0x0000 0x000d + + devid 0xfffe 0xffff + + eedata 0x0000 0x00ff + + +SHAREBANKS: + +DATABANKS: + Memory Start End Section Address Size(Bytes) + --------- --------- --------- --------- --------- --------- + gpr0 0x0060 0x00ff + + gpr1 0x0100 0x01ff + + gpr2 0x0200 0x02ff + + sfr15 0x0f38 0x0f5f + + +ACCESSBANKS: + Memory Start End Section Address Size(Bytes) + --------- --------- --------- --------- --------- --------- + accessram 0x0000 0x005f + + accesssfr 0x0f60 0x0fff + + diff --git a/software/front/US_Firmware.X/mcu.h b/software/front/US_Firmware.X/mcu.h new file mode 100644 index 0000000..0525ee1 --- /dev/null +++ b/software/front/US_Firmware.X/mcu.h @@ -0,0 +1,32 @@ +/* + * File: mcu.h + * Author: Sparky + * + * Created on ?????, 2013, ??? 31, 0:00 + */ + +#ifndef MCU_H +#define MCU_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#ifdef __32MX534F064H__ +#include "PIC32MX534F064H.h" +#endif + +#ifdef __32MX564F128H__ +#include "PIC32MX534F064H.h" +#endif + + + +#ifdef __cplusplus +} +#endif + +#endif /* MCU_H */ + diff --git a/software/front/US_Firmware.X/menu.c b/software/front/US_Firmware.X/menu.c new file mode 100644 index 0000000..0029780 --- /dev/null +++ b/software/front/US_Firmware.X/menu.c @@ -0,0 +1,465 @@ +#define _MENU_C + +#include +#include +#include "typedefs.h" +#include "mcu.h" +#include "pars.h" +#include "main.h" +#include "isr.h" +#include "pid.h" +#include "OLED.h" +#include "pars.h" +#include "iron.h" +#include "EEP.h" +#include "usb/usb.h" +#include "usb/usb_driver.h" +#include "usb/usb_function_hid.h" + +#define intshr(a,b) ((a < 0) ? (-((-a) >> b)) : (a >> b)) + +static int TempBeep; +static int LISRTicks; +static int CTicks; +static int CSeconds=0; +static int CMSeconds=0; +static int CMinutes=0; +static int CMode; +static int OldMode; +static int CRstTemp; +static int TopPar; +static int CPar; +static int ModeTicks; +static int DoExit; +static int DispTemp; +static int CalRes; + +static union { + UINT32 DW; + struct { __PACKED + int Header :1; + int Footer :1; + int BigTemp :1; + int Message :1; + int Set:1; + int Pars:1; + int SetPars:1; + int Cal:1; + }f; +}OLEDFlags; + +int OLEDTemp; +int OLEDPower; +const char * OLEDMsg1; +const char * OLEDMsg2; + + +//static SUINT16 LDispTime; +static struct{ + int o; + int n; + int d; +}BTicks[3]; + +void MenuInit(){ + int i,p; + CRstTemp=1; + CPar=0; + TopPar=0; + CTicks=0; + BeepTicks=0; + InvertTicks=0; + for(i=0;i<3;i++){ + BTicks[i].o=0; + BTicks[i].n=0; + BTicks[i].d=0; + } + CTTemp=TTemp; + mainFlags.HolderPresent=0; + TempBeep=1; + DispTemp=0; + CMode=1; + ModeTicks=20; +} + +void OLEDTasks(){ + int i; + //UINT8 b; + t_PIDVars * PV1; + t_PIDVars * PV2; + PV1 = (t_PIDVars *)&PIDVars[0]; + PV2 = PV1; + if(IronPars.Config[1].Type) PV2 = (t_PIDVars *)&PIDVars[1]; + OLEDFlags.DW=0; + if(mainFlags.PowerLost){ + OLEDFlags.f.Message = 1; + OLEDMsg1 = " POWER LOST"; + OLEDMsg2 = ""; + } + else{ + do{ + DoExit=1; + switch(CMode){ + case 0: //default mode - display temperature and do nothing + if(CTTemp < 75){ + CMode = 0xFF; + ModeTicks = 255; + DoExit = 0; + break; + } + if(BTicks[0].n | BTicks[2].n)CMode=1; + if(BTicks[1].o && (BTicks[1].o<100) && (BTicks[1].n==0))CMode=2; + if(CMode != 0){ + DoExit = 0; + break; + } + if((BTicks[1].o <= 100) && (BTicks[1].n > 100)){ //goto set parameters menu + CMode=3; + ModeTicks=250; + BeepTicks=2; + } + OLEDFlags.f.Header = 1; + OLEDFlags.f.Footer = 1; + if(IronPars.Config[0].Type == 255){ + } + else if(PV1->ShortCircuit || PV2->ShortCircuit){ + OLEDFlags.f.Message=1; + OLEDMsg1=" HEATER"; + OLEDMsg2=" SHORTCIRCUIT"; + } + else if(PV1->NoHeater || PV2->NoHeater){ + OLEDFlags.f.Message=1; + OLEDMsg1=" HEATER"; + OLEDMsg2=" OPEN"; + } + else if(PV1->NoSensor || PV2->NoSensor){ + OLEDFlags.f.Message = 1; + OLEDMsg1=" SENSOR"; + OLEDMsg2=" OPEN"; + } + else{ + OLEDFlags.f.BigTemp = 1; + if((LISRTicks & 15) == 1)OLEDTemp = DispTemp >> 3; + } + break; + case 1: //set temperature mode + if(BTicks[1].n > 100)CMode = 0; + if(BTicks[1].o && (BTicks[1].n == 0))CMode = 2; //goto reset temperature mode + if(CMode != 1){ + DoExit = 0; + break; + } + if(BTicks[0].n | BTicks[2].n){ //Temp inc/dec + ModeTicks = 100; + i = TTemp; + if(BTicks[0].d)TTemp += (BTicks[0].n>>6) + 1; + if(BTicks[2].d)TTemp -= (BTicks[2].n>>6) + 1; + if(TTemp < 75)TTemp = 75; + if(TTemp > 225)TTemp = 225; + if(i != TTemp)TempBeep = 1; + } + OLEDFlags.f.Header = 1; + OLEDFlags.f.Footer = 1; + OLEDFlags.f.BigTemp = 1; + OLEDFlags.f.Set = 1; + OLEDTemp = TTemp << 2; + break; + case 2: //reset temperature mode + if(BTicks[1].n > 100)CMode = 0; + if(BTicks[0].n | BTicks[2].n)CMode = 1; + if(CMode != 2){ + DoExit = 0; + break; + } + if(BTicks[1].o && (BTicks[1].n == 0)){ + ModeTicks = 75; + if(OldMode == CMode){ + CRstTemp++; + if(CRstTemp > 2)CRstTemp = 0; + } + for(i = 0; i < 3; i++){ + if(pars.RTemp[CRstTemp]){ + if(TTemp != pars.RTemp[CRstTemp]){ + TTemp = pars.RTemp[CRstTemp]; + TempBeep = 1; + } + break; + } + CRstTemp++; + if(CRstTemp > 2)CRstTemp=0; + } + if(TTemp < 75)TTemp = 75; + if(TTemp > 225)TTemp = 225; + } + OLEDFlags.f.Header = 1; + OLEDFlags.f.Footer = 1; + OLEDFlags.f.BigTemp = 1; + OLEDFlags.f.Set = 1; + OLEDTemp = TTemp << 2; + break; + case 3: + if(BTicks[0].n | BTicks[1].n | BTicks[2].n){ + if((BTicks[1].o <= 100) && (BTicks[1].n > 100)){ + CMode = 0; + break; + } + ModeTicks = 250; + if(BTicks[0].n == 1)CPar++; + if(BTicks[2].n == 1)CPar--; + if(CPar < 0)CPar = 0; + if(CPar > ((sizeof(ParDef) / sizeof(ParDef[0])) - 1))CPar = (sizeof(ParDef) / sizeof(ParDef[0])) - 1; + if(TopPar > CPar)TopPar = CPar; + if((CPar - TopPar) > 3)TopPar = CPar - 3; + } + if(BTicks[1].o &&(BTicks[1].o < 100) && (BTicks[1].n == 0)){ + CMode = (CPar == ((sizeof(ParDef) / sizeof(ParDef[0])) - 1)) ? 5 : 4; + //CMode=4; + } + OLEDFlags.f.Pars = 1; + //DisplayData(parText[CPar]); + break; + case 4: + if(BTicks[0].n | BTicks[1].n | BTicks[2].n) ModeTicks = 250; + if(BTicks[1].o && (BTicks[1].n == 0))CMode = 3; + OLEDFlags.f.Pars = 1; + if(BTicks[0].d && (pars.b[CPar] < ParDef[CPar].Max))pars.b[CPar] += 1; + if(BTicks[2].d && (pars.b[CPar] > ParDef[CPar].Min))pars.b[CPar] -= 1; + break; + case 5: //Calibration + ModeTicks = 250; + if(BTicks[1].o &&(BTicks[1].o<100) && (BTicks[1].n == 0)){ + mainFlags.Calibration = 0; + CMode = 0; + break; + } + mainFlags.Calibration = 1; + OLEDFlags.f.Cal = 1; + if(BTicks[0].d && (IronPars.Config[0].CurrentA < 256)) IronPars.Config[0].CurrentA++; + if(BTicks[2].d && (IronPars.Config[0].CurrentA > 0)) IronPars.Config[0].CurrentA--; + break; + case 0xFF: //stand-by + //OLEDFlags.f.Header = 1; + //OLEDFlags.f.Footer = 1; + //OLEDFlags.f.BigTemp = 1; + //if((LISRTicks & 15) == 1)OLEDTemp = DispTemp >> 3; + + OLEDFlags.f.Message=1; + OLEDMsg1=" ZZZ.. . ."; + OLEDMsg2=""; + break; + } + }while(!DoExit); + } + + OLEDFill(0, 128,0 ,8 ,0); + + if(OLEDFlags.f.BigTemp){ + OLEDPrintNum3248(12, 1, pars.Deg ? ((OLEDTemp * 461) >> 9) + 32 : OLEDTemp >> 1); + OLEDPrintCF1648(108, 1, pars.Deg ? 1 : 0); + //OLEDPrint68(104, 6, "/", 1); + //OLEDPrintNum68(110, 6, 3, CTTemp); + } + + if(OLEDFlags.f.Set){ + OLEDPrint68(3, 3, "S", 1); + OLEDPrint68(3, 4, "E", 1); + OLEDPrint68(3, 5, "T", 1); + } + + if(OLEDFlags.f.Message){ + OLEDPrint68(0, 3, OLEDMsg1, 21); + OLEDPrint68(0, 4, OLEDMsg2, 21); + } + + if(OLEDFlags.f.Header){ + //OLEDPrintNum68(0,0,8,PIDVars[0].CPolyX * 10.0); + //OLEDPrintNum68(64,0,8,PIDVars[0].PrbFCTemp1); + OLEDPrint68(0,0,(const char *)&IronPars.Name, 21); + } + if(OLEDFlags.f.Footer){ + UINT8 b; + int p, + df = PIDVars[0].PIDDutyFull, + AVG = ADCAVG; + //OLEDPrintNum88(0, 6, 8, PIDVars[0].Stub); + //OLEDPrintNum88(0, 7, 5, ((PIDVars[0].HVAvg >> ADCAVG) * 840) >> 10); + //OLEDPrintNum88(48, 7, 5, ((PIDVars[0].HIAvg >> ADCAVG) * 241) >> 10); + //OLEDPrintNum88(96, 7, 3, PIDVars[0].HPAvg >> ADCAVG); + + OLEDPrint68(0, 7, mainFlags.ACPower ? "AC" : "DC", 2); + + if(IronPars.Config[1].Type) AVG--; + p = ((PIDVars[0].PIDDuty + 0x7FL) >> 8) * (PIDVars[0].HPAvg >> AVG); + if(IronPars.Config[1].Type){ + df += PIDVars[1].PIDDutyFull; + p += ((PIDVars[1].PIDDuty + 0x7FL) >> 8) * (PIDVars[1].HPAvg >> AVG); + } + else{ + df += df; + } + df >>= 19; + p += 0x7FFFL; + p >>= 16; + for(i = 0; i <= 64; i++){ + b = 0; + if((i & 1)==0)b += 16; + if((i & 15)==0)b += 40; + if((i & 31)==0)b += 68; + if((i & 63)==0)b += 130; + if(i && df){ + df--; + b =~ b; + } + b &= 254; + OLEDBUFF.B[7][i + 31] = b; + } + if((LISRTicks & 15) == 1)OLEDPower = p; + OLEDPrintNum68(100, 7, 3, OLEDPower); + OLEDPrint68(118, 7, "W", 1); + if(HEATER)OLEDWrite(21, 8, 7, font8x8[4], 8); + } + if(OLEDFlags.f.Pars){ + i = 4; + while(i--){ + OLEDPrint816(0, i * 2, ParDef[TopPar + i].Name, 11); + if(ParDef[TopPar + i].OLEDDispFunc)(*ParDef[TopPar + i].OLEDDispFunc)(88, i * 2, pars.b[TopPar + i]); + if((TopPar + i) == CPar){ + if(CMode == 3){ + OLEDInvert(0, 128 - 44, i * 2, 2); + } + if(CMode == 4){ + OLEDInvert(128 - 44, 44, i * 2, 2); + } + } + } + + } + if(OLEDFlags.f.Cal){ + UINT32 dw = (INT32)IronPars.Config[0].CurrentA * (INT32)IronPars.Config[0].Gain; + if(dw){ + CalRes -= CalRes >> 3; + CalRes += ((INT32)PIDVars[0].ADCTemp[0] * (INT32)33437L) / dw; + } + else{ + CalRes = 0; + } + + OLEDPrint68(0,0,"CALIBRATION",0); + OLEDPrint68(0,2,"IRON ID:",0); + OLEDPrint68(0,3,"CURRENT:",0); + OLEDPrint68(0,4,"ADC:",0); + OLEDPrint68(0,5,"R:",0); + OLEDPrint68(0,6,"ROOM:",0); + OLEDPrintNum68(64,2,2,IronID >> 8); + OLEDPrintNum68(80,2,2,IronID & 255); + if(IronPars.Config[1].Type==0 || (LISRTicks % 200) <100){ + OLEDPrintNum68(64,3,1,0); + OLEDPrintNum68(80,3,3,IronPars.Config[0].CurrentA); + OLEDPrintNum68(32,4,4,PIDVars[0].ADCTemp[0]); + } + else{ + OLEDPrintNum68(64,3,1,1); + OLEDPrintNum68(80,3,3,IronPars.Config[1].CurrentB); + OLEDPrintNum68(32,4,4,PIDVars[1].ADCTemp[0]); + } + OLEDPrintNum68(16,5,4,CalRes >> 3); + OLEDPrintNum68(40,6,3,CRTemp >> 1); + } + if(InvertTicks) OLEDInvert(0, 128, 0, 8); + + OLEDUpdate(); +} + +void MenuTasks(){ + int i; + if(mainFlags.PowerLost){ + OLEDTasks(); + }else{ + if(LISRTicks != ISRTicks){ + LISRTicks = ISRTicks; + if((LISRTicks & 1) || mainFlags.PowerLost){ + for(i = 0; i < 3; i++){ + BTicks[i].o = BTicks[i].n; + if(BTicks[i].n < 240)BTicks[i].n++; + BTicks[i].d = (BTicks[i].n == 1) || ((BTicks[i].n > 25) && ((LISRTicks & 3) == 1)); + } + if(!B1){BTicks[0].n = 0;BTicks[0].d = 0;} + if(!B2){BTicks[1].n = 0;BTicks[1].d = 0;} + if(!B3){BTicks[2].n = 0;BTicks[2].d = 0;} + + DispTemp -= DispTemp >> 3; + i = PIDVars[0].CTemp[0]; + if(IronPars.Config[1].Type) i = (i + PIDVars[1].CTemp[0]) >> 1; + DispTemp += i; + //i <<= 3; + //if(abs(DispTemp-i)>320)DispTemp=i; + + OldMode = CMode; + + OLEDTasks(); + + if(BeepTicks){ + BeepTicks--; + SPKON; + } + else + { + SPKOFF; + } + + if(InvertTicks)InvertTicks--; + + if(ModeTicks){ + ModeTicks--; + } + else{ + CMode = 0; + } + + if(CMode == 0xFF){ + ModeTicks = 255; + CTTemp = 0; + } + else{ + if((CTicks++) >= 50){ + CTicks -= 50; + if(CSeconds < 255)CSeconds++; + if((CMSeconds++) >= 60){ + CMSeconds -= 60; + if(CMinutes < 255)CMinutes++; + } + } + if(B1 || B2 || B3 || (((pars.Holder == 1) || ((pars.Holder == 2) && mainFlags.HolderPresent)) && NAP)){ + CTicks = 0; + CSeconds = 0; + CMSeconds = 0; + CMinutes = 0; + } + + i = TTemp; + if(!NAP){ + mainFlags.HolderPresent = 1; + if(i > pars.HTemp) i = pars.HTemp; + } + if(pars.SlTime && (i > pars.SlTemp)){ + if((pars.Holder == 1) || ((pars.Holder == 2) && mainFlags.HolderPresent)){ + if(CSeconds >= pars.SlTime) i = pars.SlTemp; + } + else{ + if(CMinutes >= pars.SlTime) i = pars.SlTemp; + } + } + if(pars.STBTime && (CMinutes >= pars.STBTime)) i = 0; + CTTemp = i; + + if(TempBeep && (CTTemp == TTemp) && (CTTemp == (DispTemp >> 5))){ + BeepTicks = 2; + TempBeep = 0; + } + } + } + } + } +} + +#undef _MENU_C diff --git a/software/front/US_Firmware.X/menu.h b/software/front/US_Firmware.X/menu.h new file mode 100644 index 0000000..76038b7 --- /dev/null +++ b/software/front/US_Firmware.X/menu.h @@ -0,0 +1,23 @@ +/* + * File: menu.h + * Author: Sparky + * + * Created on ???????, 2013, ??? 2, 23:27 + */ + +#ifndef MENU_H +#define MENU_H + +#ifdef __cplusplus +extern "C" { +#endif + +extern void MenuInit(); +extern void MenuTasks(); + +#ifdef __cplusplus +} +#endif + +#endif /* MENU_H */ + diff --git a/software/front/US_Firmware.X/nbproject/Makefile-PIC32_NoOptimization.mk b/software/front/US_Firmware.X/nbproject/Makefile-PIC32_NoOptimization.mk new file mode 100644 index 0000000..9b9af41 --- /dev/null +++ b/software/front/US_Firmware.X/nbproject/Makefile-PIC32_NoOptimization.mk @@ -0,0 +1,319 @@ +# +# Generated Makefile - do not edit! +# +# Edit the Makefile in the project folder instead (../Makefile). Each target +# has a -pre and a -post target defined where you can add customized code. +# +# This makefile implements configuration specific macros and targets. + + +# Include project Makefile +ifeq "${IGNORE_LOCAL}" "TRUE" +# do not include local makefile. User is passing all local related variables already +else +include Makefile +# Include makefile containing local settings +ifeq "$(wildcard nbproject/Makefile-local-PIC32_NoOptimization.mk)" "nbproject/Makefile-local-PIC32_NoOptimization.mk" +include nbproject/Makefile-local-PIC32_NoOptimization.mk +endif +endif + +# Environment +MKDIR=gnumkdir -p +RM=rm -f +MV=mv +CP=cp + +# Macros +CND_CONF=PIC32_NoOptimization +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +IMAGE_TYPE=debug +OUTPUT_SUFFIX=elf +DEBUGGABLE_SUFFIX=elf +FINAL_IMAGE=dist/${CND_CONF}/${IMAGE_TYPE}/US_Firmware.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} +else +IMAGE_TYPE=production +OUTPUT_SUFFIX=hex +DEBUGGABLE_SUFFIX=elf +FINAL_IMAGE=dist/${CND_CONF}/${IMAGE_TYPE}/US_Firmware.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} +endif + +# Object Directory +OBJECTDIR=build/${CND_CONF}/${IMAGE_TYPE} + +# Distribution Directory +DISTDIR=dist/${CND_CONF}/${IMAGE_TYPE} + +# Source Files Quoted if spaced +SOURCEFILES_QUOTED_IF_SPACED=usb/usb_descriptors.c usb/usb_device.c usb/usb_driver.c usb/usb_function_hid.c usb/usb_hal_pic24.c main.c isr.c iron.c PID.c io.c menu.c PIC32MX534F064H.c EEP.c OLED.c pars.c + +# Object Files Quoted if spaced +OBJECTFILES_QUOTED_IF_SPACED=${OBJECTDIR}/usb/usb_descriptors.o ${OBJECTDIR}/usb/usb_device.o ${OBJECTDIR}/usb/usb_driver.o ${OBJECTDIR}/usb/usb_function_hid.o ${OBJECTDIR}/usb/usb_hal_pic24.o ${OBJECTDIR}/main.o ${OBJECTDIR}/isr.o ${OBJECTDIR}/iron.o ${OBJECTDIR}/PID.o ${OBJECTDIR}/io.o ${OBJECTDIR}/menu.o ${OBJECTDIR}/PIC32MX534F064H.o ${OBJECTDIR}/EEP.o ${OBJECTDIR}/OLED.o ${OBJECTDIR}/pars.o +POSSIBLE_DEPFILES=${OBJECTDIR}/usb/usb_descriptors.o.d ${OBJECTDIR}/usb/usb_device.o.d ${OBJECTDIR}/usb/usb_driver.o.d ${OBJECTDIR}/usb/usb_function_hid.o.d ${OBJECTDIR}/usb/usb_hal_pic24.o.d ${OBJECTDIR}/main.o.d ${OBJECTDIR}/isr.o.d ${OBJECTDIR}/iron.o.d ${OBJECTDIR}/PID.o.d ${OBJECTDIR}/io.o.d ${OBJECTDIR}/menu.o.d ${OBJECTDIR}/PIC32MX534F064H.o.d ${OBJECTDIR}/EEP.o.d ${OBJECTDIR}/OLED.o.d ${OBJECTDIR}/pars.o.d + +# Object Files +OBJECTFILES=${OBJECTDIR}/usb/usb_descriptors.o ${OBJECTDIR}/usb/usb_device.o ${OBJECTDIR}/usb/usb_driver.o ${OBJECTDIR}/usb/usb_function_hid.o ${OBJECTDIR}/usb/usb_hal_pic24.o ${OBJECTDIR}/main.o ${OBJECTDIR}/isr.o ${OBJECTDIR}/iron.o ${OBJECTDIR}/PID.o ${OBJECTDIR}/io.o ${OBJECTDIR}/menu.o ${OBJECTDIR}/PIC32MX534F064H.o ${OBJECTDIR}/EEP.o ${OBJECTDIR}/OLED.o ${OBJECTDIR}/pars.o + +# Source Files +SOURCEFILES=usb/usb_descriptors.c usb/usb_device.c usb/usb_driver.c usb/usb_function_hid.c usb/usb_hal_pic24.c main.c isr.c iron.c PID.c io.c menu.c PIC32MX534F064H.c EEP.c OLED.c pars.c + + +CFLAGS= +ASFLAGS= +LDLIBSOPTIONS= + +############# Tool locations ########################################## +# If you copy a project from one host to another, the path where the # +# compiler is installed may be different. # +# If you open this project with MPLAB X in the new host, this # +# makefile will be regenerated and the paths will be corrected. # +####################################################################### +# fixDeps replaces a bunch of sed/cat/printf statements that slow down the build +FIXDEPS=fixDeps + +.build-conf: ${BUILD_SUBPROJECTS} +ifneq ($(INFORMATION_MESSAGE), ) + @echo $(INFORMATION_MESSAGE) +endif + ${MAKE} -f nbproject/Makefile-PIC32_NoOptimization.mk dist/${CND_CONF}/${IMAGE_TYPE}/US_Firmware.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} + +MP_PROCESSOR_OPTION=32MX564F128H +MP_LINKER_FILE_OPTION= +# ------------------------------------------------------------------------------------ +# Rules for buildStep: assemble +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +else +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: assembleWithPreprocess +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +else +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: compile +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +${OBJECTDIR}/usb/usb_descriptors.o: usb/usb_descriptors.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/usb" + @${RM} ${OBJECTDIR}/usb/usb_descriptors.o.d + @${RM} ${OBJECTDIR}/usb/usb_descriptors.o + @${FIXDEPS} "${OBJECTDIR}/usb/usb_descriptors.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_PK3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/usb/usb_descriptors.o.d" -o ${OBJECTDIR}/usb/usb_descriptors.o usb/usb_descriptors.c + +${OBJECTDIR}/usb/usb_device.o: usb/usb_device.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/usb" + @${RM} ${OBJECTDIR}/usb/usb_device.o.d + @${RM} ${OBJECTDIR}/usb/usb_device.o + @${FIXDEPS} "${OBJECTDIR}/usb/usb_device.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_PK3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/usb/usb_device.o.d" -o ${OBJECTDIR}/usb/usb_device.o usb/usb_device.c + +${OBJECTDIR}/usb/usb_driver.o: usb/usb_driver.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/usb" + @${RM} ${OBJECTDIR}/usb/usb_driver.o.d + @${RM} ${OBJECTDIR}/usb/usb_driver.o + @${FIXDEPS} "${OBJECTDIR}/usb/usb_driver.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_PK3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/usb/usb_driver.o.d" -o ${OBJECTDIR}/usb/usb_driver.o usb/usb_driver.c + +${OBJECTDIR}/usb/usb_function_hid.o: usb/usb_function_hid.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/usb" + @${RM} ${OBJECTDIR}/usb/usb_function_hid.o.d + @${RM} ${OBJECTDIR}/usb/usb_function_hid.o + @${FIXDEPS} "${OBJECTDIR}/usb/usb_function_hid.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_PK3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/usb/usb_function_hid.o.d" -o ${OBJECTDIR}/usb/usb_function_hid.o usb/usb_function_hid.c + +${OBJECTDIR}/usb/usb_hal_pic24.o: usb/usb_hal_pic24.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/usb" + @${RM} ${OBJECTDIR}/usb/usb_hal_pic24.o.d + @${RM} ${OBJECTDIR}/usb/usb_hal_pic24.o + @${FIXDEPS} "${OBJECTDIR}/usb/usb_hal_pic24.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_PK3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/usb/usb_hal_pic24.o.d" -o ${OBJECTDIR}/usb/usb_hal_pic24.o usb/usb_hal_pic24.c + +${OBJECTDIR}/main.o: main.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/main.o.d + @${RM} ${OBJECTDIR}/main.o + @${FIXDEPS} "${OBJECTDIR}/main.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_PK3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/main.o.d" -o ${OBJECTDIR}/main.o main.c + +${OBJECTDIR}/isr.o: isr.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/isr.o.d + @${RM} ${OBJECTDIR}/isr.o + @${FIXDEPS} "${OBJECTDIR}/isr.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_PK3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/isr.o.d" -o ${OBJECTDIR}/isr.o isr.c + +${OBJECTDIR}/iron.o: iron.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/iron.o.d + @${RM} ${OBJECTDIR}/iron.o + @${FIXDEPS} "${OBJECTDIR}/iron.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_PK3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/iron.o.d" -o ${OBJECTDIR}/iron.o iron.c + +${OBJECTDIR}/PID.o: PID.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/PID.o.d + @${RM} ${OBJECTDIR}/PID.o + @${FIXDEPS} "${OBJECTDIR}/PID.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_PK3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/PID.o.d" -o ${OBJECTDIR}/PID.o PID.c + +${OBJECTDIR}/io.o: io.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/io.o.d + @${RM} ${OBJECTDIR}/io.o + @${FIXDEPS} "${OBJECTDIR}/io.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_PK3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/io.o.d" -o ${OBJECTDIR}/io.o io.c + +${OBJECTDIR}/menu.o: menu.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/menu.o.d + @${RM} ${OBJECTDIR}/menu.o + @${FIXDEPS} "${OBJECTDIR}/menu.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_PK3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/menu.o.d" -o ${OBJECTDIR}/menu.o menu.c + +${OBJECTDIR}/PIC32MX534F064H.o: PIC32MX534F064H.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/PIC32MX534F064H.o.d + @${RM} ${OBJECTDIR}/PIC32MX534F064H.o + @${FIXDEPS} "${OBJECTDIR}/PIC32MX534F064H.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_PK3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/PIC32MX534F064H.o.d" -o ${OBJECTDIR}/PIC32MX534F064H.o PIC32MX534F064H.c + +${OBJECTDIR}/EEP.o: EEP.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/EEP.o.d + @${RM} ${OBJECTDIR}/EEP.o + @${FIXDEPS} "${OBJECTDIR}/EEP.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_PK3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/EEP.o.d" -o ${OBJECTDIR}/EEP.o EEP.c + +${OBJECTDIR}/OLED.o: OLED.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/OLED.o.d + @${RM} ${OBJECTDIR}/OLED.o + @${FIXDEPS} "${OBJECTDIR}/OLED.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_PK3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/OLED.o.d" -o ${OBJECTDIR}/OLED.o OLED.c + +${OBJECTDIR}/pars.o: pars.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/pars.o.d + @${RM} ${OBJECTDIR}/pars.o + @${FIXDEPS} "${OBJECTDIR}/pars.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_PK3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/pars.o.d" -o ${OBJECTDIR}/pars.o pars.c + +else +${OBJECTDIR}/usb/usb_descriptors.o: usb/usb_descriptors.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/usb" + @${RM} ${OBJECTDIR}/usb/usb_descriptors.o.d + @${RM} ${OBJECTDIR}/usb/usb_descriptors.o + @${FIXDEPS} "${OBJECTDIR}/usb/usb_descriptors.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/usb/usb_descriptors.o.d" -o ${OBJECTDIR}/usb/usb_descriptors.o usb/usb_descriptors.c + +${OBJECTDIR}/usb/usb_device.o: usb/usb_device.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/usb" + @${RM} ${OBJECTDIR}/usb/usb_device.o.d + @${RM} ${OBJECTDIR}/usb/usb_device.o + @${FIXDEPS} "${OBJECTDIR}/usb/usb_device.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/usb/usb_device.o.d" -o ${OBJECTDIR}/usb/usb_device.o usb/usb_device.c + +${OBJECTDIR}/usb/usb_driver.o: usb/usb_driver.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/usb" + @${RM} ${OBJECTDIR}/usb/usb_driver.o.d + @${RM} ${OBJECTDIR}/usb/usb_driver.o + @${FIXDEPS} "${OBJECTDIR}/usb/usb_driver.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/usb/usb_driver.o.d" -o ${OBJECTDIR}/usb/usb_driver.o usb/usb_driver.c + +${OBJECTDIR}/usb/usb_function_hid.o: usb/usb_function_hid.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/usb" + @${RM} ${OBJECTDIR}/usb/usb_function_hid.o.d + @${RM} ${OBJECTDIR}/usb/usb_function_hid.o + @${FIXDEPS} "${OBJECTDIR}/usb/usb_function_hid.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/usb/usb_function_hid.o.d" -o ${OBJECTDIR}/usb/usb_function_hid.o usb/usb_function_hid.c + +${OBJECTDIR}/usb/usb_hal_pic24.o: usb/usb_hal_pic24.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/usb" + @${RM} ${OBJECTDIR}/usb/usb_hal_pic24.o.d + @${RM} ${OBJECTDIR}/usb/usb_hal_pic24.o + @${FIXDEPS} "${OBJECTDIR}/usb/usb_hal_pic24.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/usb/usb_hal_pic24.o.d" -o ${OBJECTDIR}/usb/usb_hal_pic24.o usb/usb_hal_pic24.c + +${OBJECTDIR}/main.o: main.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/main.o.d + @${RM} ${OBJECTDIR}/main.o + @${FIXDEPS} "${OBJECTDIR}/main.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/main.o.d" -o ${OBJECTDIR}/main.o main.c + +${OBJECTDIR}/isr.o: isr.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/isr.o.d + @${RM} ${OBJECTDIR}/isr.o + @${FIXDEPS} "${OBJECTDIR}/isr.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/isr.o.d" -o ${OBJECTDIR}/isr.o isr.c + +${OBJECTDIR}/iron.o: iron.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/iron.o.d + @${RM} ${OBJECTDIR}/iron.o + @${FIXDEPS} "${OBJECTDIR}/iron.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/iron.o.d" -o ${OBJECTDIR}/iron.o iron.c + +${OBJECTDIR}/PID.o: PID.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/PID.o.d + @${RM} ${OBJECTDIR}/PID.o + @${FIXDEPS} "${OBJECTDIR}/PID.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/PID.o.d" -o ${OBJECTDIR}/PID.o PID.c + +${OBJECTDIR}/io.o: io.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/io.o.d + @${RM} ${OBJECTDIR}/io.o + @${FIXDEPS} "${OBJECTDIR}/io.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/io.o.d" -o ${OBJECTDIR}/io.o io.c + +${OBJECTDIR}/menu.o: menu.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/menu.o.d + @${RM} ${OBJECTDIR}/menu.o + @${FIXDEPS} "${OBJECTDIR}/menu.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/menu.o.d" -o ${OBJECTDIR}/menu.o menu.c + +${OBJECTDIR}/PIC32MX534F064H.o: PIC32MX534F064H.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/PIC32MX534F064H.o.d + @${RM} ${OBJECTDIR}/PIC32MX534F064H.o + @${FIXDEPS} "${OBJECTDIR}/PIC32MX534F064H.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/PIC32MX534F064H.o.d" -o ${OBJECTDIR}/PIC32MX534F064H.o PIC32MX534F064H.c + +${OBJECTDIR}/EEP.o: EEP.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/EEP.o.d + @${RM} ${OBJECTDIR}/EEP.o + @${FIXDEPS} "${OBJECTDIR}/EEP.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/EEP.o.d" -o ${OBJECTDIR}/EEP.o EEP.c + +${OBJECTDIR}/OLED.o: OLED.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/OLED.o.d + @${RM} ${OBJECTDIR}/OLED.o + @${FIXDEPS} "${OBJECTDIR}/OLED.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/OLED.o.d" -o ${OBJECTDIR}/OLED.o OLED.c + +${OBJECTDIR}/pars.o: pars.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/pars.o.d + @${RM} ${OBJECTDIR}/pars.o + @${FIXDEPS} "${OBJECTDIR}/pars.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/pars.o.d" -o ${OBJECTDIR}/pars.o pars.c + +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: compileCPP +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +else +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: link +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +dist/${CND_CONF}/${IMAGE_TYPE}/US_Firmware.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX}: ${OBJECTFILES} nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} dist/${CND_CONF}/${IMAGE_TYPE} + ${MP_CC} $(MP_EXTRA_LD_PRE) -mdebugger -D__MPLAB_DEBUGGER_PK3=1 -mprocessor=$(MP_PROCESSOR_OPTION) -o dist/${CND_CONF}/${IMAGE_TYPE}/US_Firmware.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} ${OBJECTFILES_QUOTED_IF_SPACED} -mreserve=boot@0x1FC02000:0x1FC02FEF -mreserve=boot@0x1FC02000:0x1FC024FF -Wl,--defsym=__MPLAB_BUILD=1$(MP_EXTRA_LD_POST)$(MP_LINKER_FILE_OPTION),--defsym=__MPLAB_DEBUG=1,--defsym=__DEBUG=1,--defsym=__MPLAB_DEBUGGER_PK3=1,--gc-sections,-Map="${DISTDIR}/${PROJECTNAME}.${IMAGE_TYPE}.map" + +else +dist/${CND_CONF}/${IMAGE_TYPE}/US_Firmware.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX}: ${OBJECTFILES} nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} dist/${CND_CONF}/${IMAGE_TYPE} + ${MP_CC} $(MP_EXTRA_LD_PRE) -mprocessor=$(MP_PROCESSOR_OPTION) -o dist/${CND_CONF}/${IMAGE_TYPE}/US_Firmware.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} ${OBJECTFILES_QUOTED_IF_SPACED} -Wl,--defsym=__MPLAB_BUILD=1$(MP_EXTRA_LD_POST)$(MP_LINKER_FILE_OPTION),--gc-sections,-Map="${DISTDIR}/${PROJECTNAME}.${IMAGE_TYPE}.map" + ${MP_CC_DIR}\\xc32-bin2hex dist/${CND_CONF}/${IMAGE_TYPE}/US_Firmware.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} +endif + + +# Subprojects +.build-subprojects: + + +# Subprojects +.clean-subprojects: + +# Clean Targets +.clean-conf: ${CLEAN_SUBPROJECTS} + ${RM} -r build/PIC32_NoOptimization + ${RM} -r dist/PIC32_NoOptimization + +# Enable dependency checking +.dep.inc: .depcheck-impl + +DEPFILES=$(shell mplabwildcard ${POSSIBLE_DEPFILES}) +ifneq (${DEPFILES},) +include ${DEPFILES} +endif diff --git a/software/front/US_Firmware.X/nbproject/Makefile-PIC32_Standalone.mk b/software/front/US_Firmware.X/nbproject/Makefile-PIC32_Standalone.mk new file mode 100644 index 0000000..86a6a7b --- /dev/null +++ b/software/front/US_Firmware.X/nbproject/Makefile-PIC32_Standalone.mk @@ -0,0 +1,319 @@ +# +# Generated Makefile - do not edit! +# +# Edit the Makefile in the project folder instead (../Makefile). Each target +# has a -pre and a -post target defined where you can add customized code. +# +# This makefile implements configuration specific macros and targets. + + +# Include project Makefile +ifeq "${IGNORE_LOCAL}" "TRUE" +# do not include local makefile. User is passing all local related variables already +else +include Makefile +# Include makefile containing local settings +ifeq "$(wildcard nbproject/Makefile-local-PIC32_Standalone.mk)" "nbproject/Makefile-local-PIC32_Standalone.mk" +include nbproject/Makefile-local-PIC32_Standalone.mk +endif +endif + +# Environment +MKDIR=gnumkdir -p +RM=rm -f +MV=mv +CP=cp + +# Macros +CND_CONF=PIC32_Standalone +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +IMAGE_TYPE=debug +OUTPUT_SUFFIX=elf +DEBUGGABLE_SUFFIX=elf +FINAL_IMAGE=dist/${CND_CONF}/${IMAGE_TYPE}/US_Firmware.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} +else +IMAGE_TYPE=production +OUTPUT_SUFFIX=hex +DEBUGGABLE_SUFFIX=elf +FINAL_IMAGE=dist/${CND_CONF}/${IMAGE_TYPE}/US_Firmware.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} +endif + +# Object Directory +OBJECTDIR=build/${CND_CONF}/${IMAGE_TYPE} + +# Distribution Directory +DISTDIR=dist/${CND_CONF}/${IMAGE_TYPE} + +# Source Files Quoted if spaced +SOURCEFILES_QUOTED_IF_SPACED=usb/usb_descriptors.c usb/usb_device.c usb/usb_driver.c usb/usb_function_hid.c usb/usb_hal_pic24.c main.c isr.c iron.c PID.c io.c menu.c PIC32MX534F064H.c EEP.c OLED.c pars.c + +# Object Files Quoted if spaced +OBJECTFILES_QUOTED_IF_SPACED=${OBJECTDIR}/usb/usb_descriptors.o ${OBJECTDIR}/usb/usb_device.o ${OBJECTDIR}/usb/usb_driver.o ${OBJECTDIR}/usb/usb_function_hid.o ${OBJECTDIR}/usb/usb_hal_pic24.o ${OBJECTDIR}/main.o ${OBJECTDIR}/isr.o ${OBJECTDIR}/iron.o ${OBJECTDIR}/PID.o ${OBJECTDIR}/io.o ${OBJECTDIR}/menu.o ${OBJECTDIR}/PIC32MX534F064H.o ${OBJECTDIR}/EEP.o ${OBJECTDIR}/OLED.o ${OBJECTDIR}/pars.o +POSSIBLE_DEPFILES=${OBJECTDIR}/usb/usb_descriptors.o.d ${OBJECTDIR}/usb/usb_device.o.d ${OBJECTDIR}/usb/usb_driver.o.d ${OBJECTDIR}/usb/usb_function_hid.o.d ${OBJECTDIR}/usb/usb_hal_pic24.o.d ${OBJECTDIR}/main.o.d ${OBJECTDIR}/isr.o.d ${OBJECTDIR}/iron.o.d ${OBJECTDIR}/PID.o.d ${OBJECTDIR}/io.o.d ${OBJECTDIR}/menu.o.d ${OBJECTDIR}/PIC32MX534F064H.o.d ${OBJECTDIR}/EEP.o.d ${OBJECTDIR}/OLED.o.d ${OBJECTDIR}/pars.o.d + +# Object Files +OBJECTFILES=${OBJECTDIR}/usb/usb_descriptors.o ${OBJECTDIR}/usb/usb_device.o ${OBJECTDIR}/usb/usb_driver.o ${OBJECTDIR}/usb/usb_function_hid.o ${OBJECTDIR}/usb/usb_hal_pic24.o ${OBJECTDIR}/main.o ${OBJECTDIR}/isr.o ${OBJECTDIR}/iron.o ${OBJECTDIR}/PID.o ${OBJECTDIR}/io.o ${OBJECTDIR}/menu.o ${OBJECTDIR}/PIC32MX534F064H.o ${OBJECTDIR}/EEP.o ${OBJECTDIR}/OLED.o ${OBJECTDIR}/pars.o + +# Source Files +SOURCEFILES=usb/usb_descriptors.c usb/usb_device.c usb/usb_driver.c usb/usb_function_hid.c usb/usb_hal_pic24.c main.c isr.c iron.c PID.c io.c menu.c PIC32MX534F064H.c EEP.c OLED.c pars.c + + +CFLAGS= +ASFLAGS= +LDLIBSOPTIONS= + +############# Tool locations ########################################## +# If you copy a project from one host to another, the path where the # +# compiler is installed may be different. # +# If you open this project with MPLAB X in the new host, this # +# makefile will be regenerated and the paths will be corrected. # +####################################################################### +# fixDeps replaces a bunch of sed/cat/printf statements that slow down the build +FIXDEPS=fixDeps + +.build-conf: ${BUILD_SUBPROJECTS} +ifneq ($(INFORMATION_MESSAGE), ) + @echo $(INFORMATION_MESSAGE) +endif + ${MAKE} -f nbproject/Makefile-PIC32_Standalone.mk dist/${CND_CONF}/${IMAGE_TYPE}/US_Firmware.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} + +MP_PROCESSOR_OPTION=32MX534F064H +MP_LINKER_FILE_OPTION= +# ------------------------------------------------------------------------------------ +# Rules for buildStep: assemble +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +else +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: assembleWithPreprocess +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +else +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: compile +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +${OBJECTDIR}/usb/usb_descriptors.o: usb/usb_descriptors.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/usb" + @${RM} ${OBJECTDIR}/usb/usb_descriptors.o.d + @${RM} ${OBJECTDIR}/usb/usb_descriptors.o + @${FIXDEPS} "${OBJECTDIR}/usb/usb_descriptors.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_PK3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/usb/usb_descriptors.o.d" -o ${OBJECTDIR}/usb/usb_descriptors.o usb/usb_descriptors.c + +${OBJECTDIR}/usb/usb_device.o: usb/usb_device.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/usb" + @${RM} ${OBJECTDIR}/usb/usb_device.o.d + @${RM} ${OBJECTDIR}/usb/usb_device.o + @${FIXDEPS} "${OBJECTDIR}/usb/usb_device.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_PK3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/usb/usb_device.o.d" -o ${OBJECTDIR}/usb/usb_device.o usb/usb_device.c + +${OBJECTDIR}/usb/usb_driver.o: usb/usb_driver.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/usb" + @${RM} ${OBJECTDIR}/usb/usb_driver.o.d + @${RM} ${OBJECTDIR}/usb/usb_driver.o + @${FIXDEPS} "${OBJECTDIR}/usb/usb_driver.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_PK3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/usb/usb_driver.o.d" -o ${OBJECTDIR}/usb/usb_driver.o usb/usb_driver.c + +${OBJECTDIR}/usb/usb_function_hid.o: usb/usb_function_hid.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/usb" + @${RM} ${OBJECTDIR}/usb/usb_function_hid.o.d + @${RM} ${OBJECTDIR}/usb/usb_function_hid.o + @${FIXDEPS} "${OBJECTDIR}/usb/usb_function_hid.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_PK3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/usb/usb_function_hid.o.d" -o ${OBJECTDIR}/usb/usb_function_hid.o usb/usb_function_hid.c + +${OBJECTDIR}/usb/usb_hal_pic24.o: usb/usb_hal_pic24.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/usb" + @${RM} ${OBJECTDIR}/usb/usb_hal_pic24.o.d + @${RM} ${OBJECTDIR}/usb/usb_hal_pic24.o + @${FIXDEPS} "${OBJECTDIR}/usb/usb_hal_pic24.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_PK3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/usb/usb_hal_pic24.o.d" -o ${OBJECTDIR}/usb/usb_hal_pic24.o usb/usb_hal_pic24.c + +${OBJECTDIR}/main.o: main.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/main.o.d + @${RM} ${OBJECTDIR}/main.o + @${FIXDEPS} "${OBJECTDIR}/main.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_PK3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/main.o.d" -o ${OBJECTDIR}/main.o main.c + +${OBJECTDIR}/isr.o: isr.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/isr.o.d + @${RM} ${OBJECTDIR}/isr.o + @${FIXDEPS} "${OBJECTDIR}/isr.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_PK3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/isr.o.d" -o ${OBJECTDIR}/isr.o isr.c + +${OBJECTDIR}/iron.o: iron.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/iron.o.d + @${RM} ${OBJECTDIR}/iron.o + @${FIXDEPS} "${OBJECTDIR}/iron.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_PK3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/iron.o.d" -o ${OBJECTDIR}/iron.o iron.c + +${OBJECTDIR}/PID.o: PID.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/PID.o.d + @${RM} ${OBJECTDIR}/PID.o + @${FIXDEPS} "${OBJECTDIR}/PID.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_PK3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/PID.o.d" -o ${OBJECTDIR}/PID.o PID.c + +${OBJECTDIR}/io.o: io.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/io.o.d + @${RM} ${OBJECTDIR}/io.o + @${FIXDEPS} "${OBJECTDIR}/io.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_PK3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/io.o.d" -o ${OBJECTDIR}/io.o io.c + +${OBJECTDIR}/menu.o: menu.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/menu.o.d + @${RM} ${OBJECTDIR}/menu.o + @${FIXDEPS} "${OBJECTDIR}/menu.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_PK3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/menu.o.d" -o ${OBJECTDIR}/menu.o menu.c + +${OBJECTDIR}/PIC32MX534F064H.o: PIC32MX534F064H.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/PIC32MX534F064H.o.d + @${RM} ${OBJECTDIR}/PIC32MX534F064H.o + @${FIXDEPS} "${OBJECTDIR}/PIC32MX534F064H.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_PK3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/PIC32MX534F064H.o.d" -o ${OBJECTDIR}/PIC32MX534F064H.o PIC32MX534F064H.c + +${OBJECTDIR}/EEP.o: EEP.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/EEP.o.d + @${RM} ${OBJECTDIR}/EEP.o + @${FIXDEPS} "${OBJECTDIR}/EEP.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_PK3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/EEP.o.d" -o ${OBJECTDIR}/EEP.o EEP.c + +${OBJECTDIR}/OLED.o: OLED.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/OLED.o.d + @${RM} ${OBJECTDIR}/OLED.o + @${FIXDEPS} "${OBJECTDIR}/OLED.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_PK3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/OLED.o.d" -o ${OBJECTDIR}/OLED.o OLED.c + +${OBJECTDIR}/pars.o: pars.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/pars.o.d + @${RM} ${OBJECTDIR}/pars.o + @${FIXDEPS} "${OBJECTDIR}/pars.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_PK3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/pars.o.d" -o ${OBJECTDIR}/pars.o pars.c + +else +${OBJECTDIR}/usb/usb_descriptors.o: usb/usb_descriptors.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/usb" + @${RM} ${OBJECTDIR}/usb/usb_descriptors.o.d + @${RM} ${OBJECTDIR}/usb/usb_descriptors.o + @${FIXDEPS} "${OBJECTDIR}/usb/usb_descriptors.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/usb/usb_descriptors.o.d" -o ${OBJECTDIR}/usb/usb_descriptors.o usb/usb_descriptors.c + +${OBJECTDIR}/usb/usb_device.o: usb/usb_device.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/usb" + @${RM} ${OBJECTDIR}/usb/usb_device.o.d + @${RM} ${OBJECTDIR}/usb/usb_device.o + @${FIXDEPS} "${OBJECTDIR}/usb/usb_device.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/usb/usb_device.o.d" -o ${OBJECTDIR}/usb/usb_device.o usb/usb_device.c + +${OBJECTDIR}/usb/usb_driver.o: usb/usb_driver.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/usb" + @${RM} ${OBJECTDIR}/usb/usb_driver.o.d + @${RM} ${OBJECTDIR}/usb/usb_driver.o + @${FIXDEPS} "${OBJECTDIR}/usb/usb_driver.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/usb/usb_driver.o.d" -o ${OBJECTDIR}/usb/usb_driver.o usb/usb_driver.c + +${OBJECTDIR}/usb/usb_function_hid.o: usb/usb_function_hid.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/usb" + @${RM} ${OBJECTDIR}/usb/usb_function_hid.o.d + @${RM} ${OBJECTDIR}/usb/usb_function_hid.o + @${FIXDEPS} "${OBJECTDIR}/usb/usb_function_hid.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/usb/usb_function_hid.o.d" -o ${OBJECTDIR}/usb/usb_function_hid.o usb/usb_function_hid.c + +${OBJECTDIR}/usb/usb_hal_pic24.o: usb/usb_hal_pic24.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/usb" + @${RM} ${OBJECTDIR}/usb/usb_hal_pic24.o.d + @${RM} ${OBJECTDIR}/usb/usb_hal_pic24.o + @${FIXDEPS} "${OBJECTDIR}/usb/usb_hal_pic24.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/usb/usb_hal_pic24.o.d" -o ${OBJECTDIR}/usb/usb_hal_pic24.o usb/usb_hal_pic24.c + +${OBJECTDIR}/main.o: main.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/main.o.d + @${RM} ${OBJECTDIR}/main.o + @${FIXDEPS} "${OBJECTDIR}/main.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/main.o.d" -o ${OBJECTDIR}/main.o main.c + +${OBJECTDIR}/isr.o: isr.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/isr.o.d + @${RM} ${OBJECTDIR}/isr.o + @${FIXDEPS} "${OBJECTDIR}/isr.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/isr.o.d" -o ${OBJECTDIR}/isr.o isr.c + +${OBJECTDIR}/iron.o: iron.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/iron.o.d + @${RM} ${OBJECTDIR}/iron.o + @${FIXDEPS} "${OBJECTDIR}/iron.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/iron.o.d" -o ${OBJECTDIR}/iron.o iron.c + +${OBJECTDIR}/PID.o: PID.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/PID.o.d + @${RM} ${OBJECTDIR}/PID.o + @${FIXDEPS} "${OBJECTDIR}/PID.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/PID.o.d" -o ${OBJECTDIR}/PID.o PID.c + +${OBJECTDIR}/io.o: io.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/io.o.d + @${RM} ${OBJECTDIR}/io.o + @${FIXDEPS} "${OBJECTDIR}/io.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/io.o.d" -o ${OBJECTDIR}/io.o io.c + +${OBJECTDIR}/menu.o: menu.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/menu.o.d + @${RM} ${OBJECTDIR}/menu.o + @${FIXDEPS} "${OBJECTDIR}/menu.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/menu.o.d" -o ${OBJECTDIR}/menu.o menu.c + +${OBJECTDIR}/PIC32MX534F064H.o: PIC32MX534F064H.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/PIC32MX534F064H.o.d + @${RM} ${OBJECTDIR}/PIC32MX534F064H.o + @${FIXDEPS} "${OBJECTDIR}/PIC32MX534F064H.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/PIC32MX534F064H.o.d" -o ${OBJECTDIR}/PIC32MX534F064H.o PIC32MX534F064H.c + +${OBJECTDIR}/EEP.o: EEP.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/EEP.o.d + @${RM} ${OBJECTDIR}/EEP.o + @${FIXDEPS} "${OBJECTDIR}/EEP.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/EEP.o.d" -o ${OBJECTDIR}/EEP.o EEP.c + +${OBJECTDIR}/OLED.o: OLED.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/OLED.o.d + @${RM} ${OBJECTDIR}/OLED.o + @${FIXDEPS} "${OBJECTDIR}/OLED.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/OLED.o.d" -o ${OBJECTDIR}/OLED.o OLED.c + +${OBJECTDIR}/pars.o: pars.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/pars.o.d + @${RM} ${OBJECTDIR}/pars.o + @${FIXDEPS} "${OBJECTDIR}/pars.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -Os -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/pars.o.d" -o ${OBJECTDIR}/pars.o pars.c + +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: compileCPP +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +else +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: link +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +dist/${CND_CONF}/${IMAGE_TYPE}/US_Firmware.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX}: ${OBJECTFILES} nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} dist/${CND_CONF}/${IMAGE_TYPE} + ${MP_CC} $(MP_EXTRA_LD_PRE) -mdebugger -D__MPLAB_DEBUGGER_PK3=1 -mprocessor=$(MP_PROCESSOR_OPTION) -Os -o dist/${CND_CONF}/${IMAGE_TYPE}/US_Firmware.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} ${OBJECTFILES_QUOTED_IF_SPACED} -mreserve=boot@0x1FC02000:0x1FC02FEF -mreserve=boot@0x1FC02000:0x1FC024FF -Wl,--defsym=__MPLAB_BUILD=1$(MP_EXTRA_LD_POST)$(MP_LINKER_FILE_OPTION),--defsym=__MPLAB_DEBUG=1,--defsym=__DEBUG=1,--defsym=__MPLAB_DEBUGGER_PK3=1,--gc-sections,-Map="${DISTDIR}/${PROJECTNAME}.${IMAGE_TYPE}.map" + +else +dist/${CND_CONF}/${IMAGE_TYPE}/US_Firmware.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX}: ${OBJECTFILES} nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} dist/${CND_CONF}/${IMAGE_TYPE} + ${MP_CC} $(MP_EXTRA_LD_PRE) -mprocessor=$(MP_PROCESSOR_OPTION) -Os -o dist/${CND_CONF}/${IMAGE_TYPE}/US_Firmware.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} ${OBJECTFILES_QUOTED_IF_SPACED} -Wl,--defsym=__MPLAB_BUILD=1$(MP_EXTRA_LD_POST)$(MP_LINKER_FILE_OPTION),--gc-sections,-Map="${DISTDIR}/${PROJECTNAME}.${IMAGE_TYPE}.map" + ${MP_CC_DIR}\\xc32-bin2hex dist/${CND_CONF}/${IMAGE_TYPE}/US_Firmware.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} +endif + + +# Subprojects +.build-subprojects: + + +# Subprojects +.clean-subprojects: + +# Clean Targets +.clean-conf: ${CLEAN_SUBPROJECTS} + ${RM} -r build/PIC32_Standalone + ${RM} -r dist/PIC32_Standalone + +# Enable dependency checking +.dep.inc: .depcheck-impl + +DEPFILES=$(shell mplabwildcard ${POSSIBLE_DEPFILES}) +ifneq (${DEPFILES},) +include ${DEPFILES} +endif diff --git a/software/front/US_Firmware.X/nbproject/Makefile-PIC32_with_bootloader.mk b/software/front/US_Firmware.X/nbproject/Makefile-PIC32_with_bootloader.mk new file mode 100644 index 0000000..1aca89f --- /dev/null +++ b/software/front/US_Firmware.X/nbproject/Makefile-PIC32_with_bootloader.mk @@ -0,0 +1,319 @@ +# +# Generated Makefile - do not edit! +# +# Edit the Makefile in the project folder instead (../Makefile). Each target +# has a -pre and a -post target defined where you can add customized code. +# +# This makefile implements configuration specific macros and targets. + + +# Include project Makefile +ifeq "${IGNORE_LOCAL}" "TRUE" +# do not include local makefile. User is passing all local related variables already +else +include Makefile +# Include makefile containing local settings +ifeq "$(wildcard nbproject/Makefile-local-PIC32_with_bootloader.mk)" "nbproject/Makefile-local-PIC32_with_bootloader.mk" +include nbproject/Makefile-local-PIC32_with_bootloader.mk +endif +endif + +# Environment +MKDIR=gnumkdir -p +RM=rm -f +MV=mv +CP=cp + +# Macros +CND_CONF=PIC32_with_bootloader +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +IMAGE_TYPE=debug +OUTPUT_SUFFIX=elf +DEBUGGABLE_SUFFIX=elf +FINAL_IMAGE=dist/${CND_CONF}/${IMAGE_TYPE}/US_Firmware.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} +else +IMAGE_TYPE=production +OUTPUT_SUFFIX=hex +DEBUGGABLE_SUFFIX=elf +FINAL_IMAGE=dist/${CND_CONF}/${IMAGE_TYPE}/US_Firmware.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} +endif + +# Object Directory +OBJECTDIR=build/${CND_CONF}/${IMAGE_TYPE} + +# Distribution Directory +DISTDIR=dist/${CND_CONF}/${IMAGE_TYPE} + +# Source Files Quoted if spaced +SOURCEFILES_QUOTED_IF_SPACED=usb/usb_descriptors.c usb/usb_device.c usb/usb_driver.c usb/usb_function_hid.c usb/usb_hal_pic24.c main.c isr.c iron.c PID.c io.c menu.c PIC32MX534F064H.c EEP.c OLED.c pars.c + +# Object Files Quoted if spaced +OBJECTFILES_QUOTED_IF_SPACED=${OBJECTDIR}/usb/usb_descriptors.o ${OBJECTDIR}/usb/usb_device.o ${OBJECTDIR}/usb/usb_driver.o ${OBJECTDIR}/usb/usb_function_hid.o ${OBJECTDIR}/usb/usb_hal_pic24.o ${OBJECTDIR}/main.o ${OBJECTDIR}/isr.o ${OBJECTDIR}/iron.o ${OBJECTDIR}/PID.o ${OBJECTDIR}/io.o ${OBJECTDIR}/menu.o ${OBJECTDIR}/PIC32MX534F064H.o ${OBJECTDIR}/EEP.o ${OBJECTDIR}/OLED.o ${OBJECTDIR}/pars.o +POSSIBLE_DEPFILES=${OBJECTDIR}/usb/usb_descriptors.o.d ${OBJECTDIR}/usb/usb_device.o.d ${OBJECTDIR}/usb/usb_driver.o.d ${OBJECTDIR}/usb/usb_function_hid.o.d ${OBJECTDIR}/usb/usb_hal_pic24.o.d ${OBJECTDIR}/main.o.d ${OBJECTDIR}/isr.o.d ${OBJECTDIR}/iron.o.d ${OBJECTDIR}/PID.o.d ${OBJECTDIR}/io.o.d ${OBJECTDIR}/menu.o.d ${OBJECTDIR}/PIC32MX534F064H.o.d ${OBJECTDIR}/EEP.o.d ${OBJECTDIR}/OLED.o.d ${OBJECTDIR}/pars.o.d + +# Object Files +OBJECTFILES=${OBJECTDIR}/usb/usb_descriptors.o ${OBJECTDIR}/usb/usb_device.o ${OBJECTDIR}/usb/usb_driver.o ${OBJECTDIR}/usb/usb_function_hid.o ${OBJECTDIR}/usb/usb_hal_pic24.o ${OBJECTDIR}/main.o ${OBJECTDIR}/isr.o ${OBJECTDIR}/iron.o ${OBJECTDIR}/PID.o ${OBJECTDIR}/io.o ${OBJECTDIR}/menu.o ${OBJECTDIR}/PIC32MX534F064H.o ${OBJECTDIR}/EEP.o ${OBJECTDIR}/OLED.o ${OBJECTDIR}/pars.o + +# Source Files +SOURCEFILES=usb/usb_descriptors.c usb/usb_device.c usb/usb_driver.c usb/usb_function_hid.c usb/usb_hal_pic24.c main.c isr.c iron.c PID.c io.c menu.c PIC32MX534F064H.c EEP.c OLED.c pars.c + + +CFLAGS= +ASFLAGS= +LDLIBSOPTIONS= + +############# Tool locations ########################################## +# If you copy a project from one host to another, the path where the # +# compiler is installed may be different. # +# If you open this project with MPLAB X in the new host, this # +# makefile will be regenerated and the paths will be corrected. # +####################################################################### +# fixDeps replaces a bunch of sed/cat/printf statements that slow down the build +FIXDEPS=fixDeps + +.build-conf: ${BUILD_SUBPROJECTS} +ifneq ($(INFORMATION_MESSAGE), ) + @echo $(INFORMATION_MESSAGE) +endif + ${MAKE} -f nbproject/Makefile-PIC32_with_bootloader.mk dist/${CND_CONF}/${IMAGE_TYPE}/US_Firmware.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} + +MP_PROCESSOR_OPTION=32MX534F064H +MP_LINKER_FILE_OPTION=,--script="firmware.ld" +# ------------------------------------------------------------------------------------ +# Rules for buildStep: assemble +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +else +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: assembleWithPreprocess +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +else +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: compile +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +${OBJECTDIR}/usb/usb_descriptors.o: usb/usb_descriptors.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/usb" + @${RM} ${OBJECTDIR}/usb/usb_descriptors.o.d + @${RM} ${OBJECTDIR}/usb/usb_descriptors.o + @${FIXDEPS} "${OBJECTDIR}/usb/usb_descriptors.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_SIMULATOR=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -Os -fschedule-insns -fschedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/usb/usb_descriptors.o.d" -o ${OBJECTDIR}/usb/usb_descriptors.o usb/usb_descriptors.c + +${OBJECTDIR}/usb/usb_device.o: usb/usb_device.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/usb" + @${RM} ${OBJECTDIR}/usb/usb_device.o.d + @${RM} ${OBJECTDIR}/usb/usb_device.o + @${FIXDEPS} "${OBJECTDIR}/usb/usb_device.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_SIMULATOR=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -Os -fschedule-insns -fschedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/usb/usb_device.o.d" -o ${OBJECTDIR}/usb/usb_device.o usb/usb_device.c + +${OBJECTDIR}/usb/usb_driver.o: usb/usb_driver.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/usb" + @${RM} ${OBJECTDIR}/usb/usb_driver.o.d + @${RM} ${OBJECTDIR}/usb/usb_driver.o + @${FIXDEPS} "${OBJECTDIR}/usb/usb_driver.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_SIMULATOR=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -Os -fschedule-insns -fschedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/usb/usb_driver.o.d" -o ${OBJECTDIR}/usb/usb_driver.o usb/usb_driver.c + +${OBJECTDIR}/usb/usb_function_hid.o: usb/usb_function_hid.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/usb" + @${RM} ${OBJECTDIR}/usb/usb_function_hid.o.d + @${RM} ${OBJECTDIR}/usb/usb_function_hid.o + @${FIXDEPS} "${OBJECTDIR}/usb/usb_function_hid.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_SIMULATOR=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -Os -fschedule-insns -fschedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/usb/usb_function_hid.o.d" -o ${OBJECTDIR}/usb/usb_function_hid.o usb/usb_function_hid.c + +${OBJECTDIR}/usb/usb_hal_pic24.o: usb/usb_hal_pic24.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/usb" + @${RM} ${OBJECTDIR}/usb/usb_hal_pic24.o.d + @${RM} ${OBJECTDIR}/usb/usb_hal_pic24.o + @${FIXDEPS} "${OBJECTDIR}/usb/usb_hal_pic24.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_SIMULATOR=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -Os -fschedule-insns -fschedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/usb/usb_hal_pic24.o.d" -o ${OBJECTDIR}/usb/usb_hal_pic24.o usb/usb_hal_pic24.c + +${OBJECTDIR}/main.o: main.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/main.o.d + @${RM} ${OBJECTDIR}/main.o + @${FIXDEPS} "${OBJECTDIR}/main.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_SIMULATOR=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -Os -fschedule-insns -fschedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/main.o.d" -o ${OBJECTDIR}/main.o main.c + +${OBJECTDIR}/isr.o: isr.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/isr.o.d + @${RM} ${OBJECTDIR}/isr.o + @${FIXDEPS} "${OBJECTDIR}/isr.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_SIMULATOR=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -Os -fschedule-insns -fschedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/isr.o.d" -o ${OBJECTDIR}/isr.o isr.c + +${OBJECTDIR}/iron.o: iron.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/iron.o.d + @${RM} ${OBJECTDIR}/iron.o + @${FIXDEPS} "${OBJECTDIR}/iron.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_SIMULATOR=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -Os -fschedule-insns -fschedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/iron.o.d" -o ${OBJECTDIR}/iron.o iron.c + +${OBJECTDIR}/PID.o: PID.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/PID.o.d + @${RM} ${OBJECTDIR}/PID.o + @${FIXDEPS} "${OBJECTDIR}/PID.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_SIMULATOR=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -Os -fschedule-insns -fschedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/PID.o.d" -o ${OBJECTDIR}/PID.o PID.c + +${OBJECTDIR}/io.o: io.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/io.o.d + @${RM} ${OBJECTDIR}/io.o + @${FIXDEPS} "${OBJECTDIR}/io.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_SIMULATOR=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -Os -fschedule-insns -fschedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/io.o.d" -o ${OBJECTDIR}/io.o io.c + +${OBJECTDIR}/menu.o: menu.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/menu.o.d + @${RM} ${OBJECTDIR}/menu.o + @${FIXDEPS} "${OBJECTDIR}/menu.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_SIMULATOR=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -Os -fschedule-insns -fschedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/menu.o.d" -o ${OBJECTDIR}/menu.o menu.c + +${OBJECTDIR}/PIC32MX534F064H.o: PIC32MX534F064H.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/PIC32MX534F064H.o.d + @${RM} ${OBJECTDIR}/PIC32MX534F064H.o + @${FIXDEPS} "${OBJECTDIR}/PIC32MX534F064H.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_SIMULATOR=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -Os -fschedule-insns -fschedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/PIC32MX534F064H.o.d" -o ${OBJECTDIR}/PIC32MX534F064H.o PIC32MX534F064H.c + +${OBJECTDIR}/EEP.o: EEP.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/EEP.o.d + @${RM} ${OBJECTDIR}/EEP.o + @${FIXDEPS} "${OBJECTDIR}/EEP.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_SIMULATOR=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -Os -fschedule-insns -fschedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/EEP.o.d" -o ${OBJECTDIR}/EEP.o EEP.c + +${OBJECTDIR}/OLED.o: OLED.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/OLED.o.d + @${RM} ${OBJECTDIR}/OLED.o + @${FIXDEPS} "${OBJECTDIR}/OLED.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_SIMULATOR=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -Os -fschedule-insns -fschedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/OLED.o.d" -o ${OBJECTDIR}/OLED.o OLED.c + +${OBJECTDIR}/pars.o: pars.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/pars.o.d + @${RM} ${OBJECTDIR}/pars.o + @${FIXDEPS} "${OBJECTDIR}/pars.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_SIMULATOR=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -Os -fschedule-insns -fschedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/pars.o.d" -o ${OBJECTDIR}/pars.o pars.c + +else +${OBJECTDIR}/usb/usb_descriptors.o: usb/usb_descriptors.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/usb" + @${RM} ${OBJECTDIR}/usb/usb_descriptors.o.d + @${RM} ${OBJECTDIR}/usb/usb_descriptors.o + @${FIXDEPS} "${OBJECTDIR}/usb/usb_descriptors.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -Os -fschedule-insns -fschedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/usb/usb_descriptors.o.d" -o ${OBJECTDIR}/usb/usb_descriptors.o usb/usb_descriptors.c + +${OBJECTDIR}/usb/usb_device.o: usb/usb_device.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/usb" + @${RM} ${OBJECTDIR}/usb/usb_device.o.d + @${RM} ${OBJECTDIR}/usb/usb_device.o + @${FIXDEPS} "${OBJECTDIR}/usb/usb_device.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -Os -fschedule-insns -fschedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/usb/usb_device.o.d" -o ${OBJECTDIR}/usb/usb_device.o usb/usb_device.c + +${OBJECTDIR}/usb/usb_driver.o: usb/usb_driver.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/usb" + @${RM} ${OBJECTDIR}/usb/usb_driver.o.d + @${RM} ${OBJECTDIR}/usb/usb_driver.o + @${FIXDEPS} "${OBJECTDIR}/usb/usb_driver.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -Os -fschedule-insns -fschedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/usb/usb_driver.o.d" -o ${OBJECTDIR}/usb/usb_driver.o usb/usb_driver.c + +${OBJECTDIR}/usb/usb_function_hid.o: usb/usb_function_hid.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/usb" + @${RM} ${OBJECTDIR}/usb/usb_function_hid.o.d + @${RM} ${OBJECTDIR}/usb/usb_function_hid.o + @${FIXDEPS} "${OBJECTDIR}/usb/usb_function_hid.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -Os -fschedule-insns -fschedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/usb/usb_function_hid.o.d" -o ${OBJECTDIR}/usb/usb_function_hid.o usb/usb_function_hid.c + +${OBJECTDIR}/usb/usb_hal_pic24.o: usb/usb_hal_pic24.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/usb" + @${RM} ${OBJECTDIR}/usb/usb_hal_pic24.o.d + @${RM} ${OBJECTDIR}/usb/usb_hal_pic24.o + @${FIXDEPS} "${OBJECTDIR}/usb/usb_hal_pic24.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -Os -fschedule-insns -fschedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/usb/usb_hal_pic24.o.d" -o ${OBJECTDIR}/usb/usb_hal_pic24.o usb/usb_hal_pic24.c + +${OBJECTDIR}/main.o: main.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/main.o.d + @${RM} ${OBJECTDIR}/main.o + @${FIXDEPS} "${OBJECTDIR}/main.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -Os -fschedule-insns -fschedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/main.o.d" -o ${OBJECTDIR}/main.o main.c + +${OBJECTDIR}/isr.o: isr.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/isr.o.d + @${RM} ${OBJECTDIR}/isr.o + @${FIXDEPS} "${OBJECTDIR}/isr.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -Os -fschedule-insns -fschedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/isr.o.d" -o ${OBJECTDIR}/isr.o isr.c + +${OBJECTDIR}/iron.o: iron.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/iron.o.d + @${RM} ${OBJECTDIR}/iron.o + @${FIXDEPS} "${OBJECTDIR}/iron.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -Os -fschedule-insns -fschedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/iron.o.d" -o ${OBJECTDIR}/iron.o iron.c + +${OBJECTDIR}/PID.o: PID.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/PID.o.d + @${RM} ${OBJECTDIR}/PID.o + @${FIXDEPS} "${OBJECTDIR}/PID.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -Os -fschedule-insns -fschedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/PID.o.d" -o ${OBJECTDIR}/PID.o PID.c + +${OBJECTDIR}/io.o: io.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/io.o.d + @${RM} ${OBJECTDIR}/io.o + @${FIXDEPS} "${OBJECTDIR}/io.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -Os -fschedule-insns -fschedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/io.o.d" -o ${OBJECTDIR}/io.o io.c + +${OBJECTDIR}/menu.o: menu.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/menu.o.d + @${RM} ${OBJECTDIR}/menu.o + @${FIXDEPS} "${OBJECTDIR}/menu.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -Os -fschedule-insns -fschedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/menu.o.d" -o ${OBJECTDIR}/menu.o menu.c + +${OBJECTDIR}/PIC32MX534F064H.o: PIC32MX534F064H.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/PIC32MX534F064H.o.d + @${RM} ${OBJECTDIR}/PIC32MX534F064H.o + @${FIXDEPS} "${OBJECTDIR}/PIC32MX534F064H.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -Os -fschedule-insns -fschedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/PIC32MX534F064H.o.d" -o ${OBJECTDIR}/PIC32MX534F064H.o PIC32MX534F064H.c + +${OBJECTDIR}/EEP.o: EEP.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/EEP.o.d + @${RM} ${OBJECTDIR}/EEP.o + @${FIXDEPS} "${OBJECTDIR}/EEP.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -Os -fschedule-insns -fschedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/EEP.o.d" -o ${OBJECTDIR}/EEP.o EEP.c + +${OBJECTDIR}/OLED.o: OLED.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/OLED.o.d + @${RM} ${OBJECTDIR}/OLED.o + @${FIXDEPS} "${OBJECTDIR}/OLED.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -Os -fschedule-insns -fschedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/OLED.o.d" -o ${OBJECTDIR}/OLED.o OLED.c + +${OBJECTDIR}/pars.o: pars.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/pars.o.d + @${RM} ${OBJECTDIR}/pars.o + @${FIXDEPS} "${OBJECTDIR}/pars.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -ffunction-sections -mips16 -Os -fschedule-insns -fschedule-insns2 -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/pars.o.d" -o ${OBJECTDIR}/pars.o pars.c + +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: compileCPP +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +else +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: link +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +dist/${CND_CONF}/${IMAGE_TYPE}/US_Firmware.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX}: ${OBJECTFILES} nbproject/Makefile-${CND_CONF}.mk firmware.ld + @${MKDIR} dist/${CND_CONF}/${IMAGE_TYPE} + ${MP_CC} $(MP_EXTRA_LD_PRE) -mdebugger -D__MPLAB_DEBUGGER_SIMULATOR=1 -mprocessor=$(MP_PROCESSOR_OPTION) -Os -mips16 -o dist/${CND_CONF}/${IMAGE_TYPE}/US_Firmware.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} ${OBJECTFILES_QUOTED_IF_SPACED} -Wl,--defsym=__MPLAB_BUILD=1$(MP_EXTRA_LD_POST)$(MP_LINKER_FILE_OPTION),--defsym=__MPLAB_DEBUG=1,--defsym=__DEBUG=1,--defsym=__MPLAB_DEBUGGER_SIMULATOR=1,--gc-sections,-Map="${DISTDIR}/${PROJECTNAME}.${IMAGE_TYPE}.map" + +else +dist/${CND_CONF}/${IMAGE_TYPE}/US_Firmware.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX}: ${OBJECTFILES} nbproject/Makefile-${CND_CONF}.mk firmware.ld + @${MKDIR} dist/${CND_CONF}/${IMAGE_TYPE} + ${MP_CC} $(MP_EXTRA_LD_PRE) -mprocessor=$(MP_PROCESSOR_OPTION) -Os -mips16 -o dist/${CND_CONF}/${IMAGE_TYPE}/US_Firmware.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} ${OBJECTFILES_QUOTED_IF_SPACED} -Wl,--defsym=__MPLAB_BUILD=1$(MP_EXTRA_LD_POST)$(MP_LINKER_FILE_OPTION),--gc-sections,-Map="${DISTDIR}/${PROJECTNAME}.${IMAGE_TYPE}.map" + ${MP_CC_DIR}\\xc32-bin2hex dist/${CND_CONF}/${IMAGE_TYPE}/US_Firmware.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} +endif + + +# Subprojects +.build-subprojects: + + +# Subprojects +.clean-subprojects: + +# Clean Targets +.clean-conf: ${CLEAN_SUBPROJECTS} + ${RM} -r build/PIC32_with_bootloader + ${RM} -r dist/PIC32_with_bootloader + +# Enable dependency checking +.dep.inc: .depcheck-impl + +DEPFILES=$(shell mplabwildcard ${POSSIBLE_DEPFILES}) +ifneq (${DEPFILES},) +include ${DEPFILES} +endif diff --git a/software/front/US_Firmware.X/nbproject/Makefile-genesis.properties b/software/front/US_Firmware.X/nbproject/Makefile-genesis.properties new file mode 100644 index 0000000..2dae72a --- /dev/null +++ b/software/front/US_Firmware.X/nbproject/Makefile-genesis.properties @@ -0,0 +1,15 @@ +# +#Tue Apr 04 00:59:00 EEST 2017 +PIC32_with_bootloader.languagetoolchain.version=1.33 +conf.ids=PIC32_Standalone,PIC32_with_bootloader,PIC32_NoOptimization +PIC32_NoOptimization.languagetoolchain.dir=C\:\\Program Files (x86)\\Microchip\\xc32\\v1.33\\bin +PIC32_with_bootloader.languagetoolchain.dir=C\:\\Program Files (x86)\\Microchip\\xc32\\v1.33\\bin +configurations-xml=c9f115710782b4c8df7821e0ab05e6dc +PIC32_NoOptimization.languagetoolchain.version=1.33 +PIC32_NoOptimization.com-microchip-mplab-nbide-toolchainXC32-XC32LanguageToolchain.md5=7c6f696c4b3352f7d84fe1d22087e24a +PIC32_with_bootloader.com-microchip-mplab-nbide-toolchainXC32-XC32LanguageToolchain.md5=7c6f696c4b3352f7d84fe1d22087e24a +PIC32_Standalone.languagetoolchain.dir=C\:\\Program Files (x86)\\Microchip\\xc32\\v1.33\\bin +com-microchip-mplab-nbide-embedded-makeproject-MakeProject.md5=86cd07c925781d185dcd90a0ee6d03fc +PIC32_Standalone.com-microchip-mplab-nbide-toolchainXC32-XC32LanguageToolchain.md5=7c6f696c4b3352f7d84fe1d22087e24a +host.platform=windows +PIC32_Standalone.languagetoolchain.version=1.33 diff --git a/software/front/US_Firmware.X/nbproject/Makefile-impl.mk b/software/front/US_Firmware.X/nbproject/Makefile-impl.mk new file mode 100644 index 0000000..128e094 --- /dev/null +++ b/software/front/US_Firmware.X/nbproject/Makefile-impl.mk @@ -0,0 +1,73 @@ +# +# Generated Makefile - do not edit! +# +# Edit the Makefile in the project folder instead (../Makefile). Each target +# has a pre- and a post- target defined where you can add customization code. +# +# This makefile implements macros and targets common to all configurations. +# +# NOCDDL + + +# Building and Cleaning subprojects are done by default, but can be controlled with the SUB +# macro. If SUB=no, subprojects will not be built or cleaned. The following macro +# statements set BUILD_SUB-CONF and CLEAN_SUB-CONF to .build-reqprojects-conf +# and .clean-reqprojects-conf unless SUB has the value 'no' +SUB_no=NO +SUBPROJECTS=${SUB_${SUB}} +BUILD_SUBPROJECTS_=.build-subprojects +BUILD_SUBPROJECTS_NO= +BUILD_SUBPROJECTS=${BUILD_SUBPROJECTS_${SUBPROJECTS}} +CLEAN_SUBPROJECTS_=.clean-subprojects +CLEAN_SUBPROJECTS_NO= +CLEAN_SUBPROJECTS=${CLEAN_SUBPROJECTS_${SUBPROJECTS}} + + +# Project Name +PROJECTNAME=US_Firmware.X + +# Active Configuration +DEFAULTCONF=PIC32_with_bootloader +CONF=${DEFAULTCONF} + +# All Configurations +ALLCONFS=PIC32_Standalone PIC32_with_bootloader PIC32_NoOptimization + + +# build +.build-impl: .build-pre + ${MAKE} -f nbproject/Makefile-${CONF}.mk SUBPROJECTS=${SUBPROJECTS} .build-conf + + +# clean +.clean-impl: .clean-pre + ${MAKE} -f nbproject/Makefile-${CONF}.mk SUBPROJECTS=${SUBPROJECTS} .clean-conf + +# clobber +.clobber-impl: .clobber-pre .depcheck-impl + ${MAKE} SUBPROJECTS=${SUBPROJECTS} CONF=PIC32_Standalone clean + ${MAKE} SUBPROJECTS=${SUBPROJECTS} CONF=PIC32_with_bootloader clean + ${MAKE} SUBPROJECTS=${SUBPROJECTS} CONF=PIC32_NoOptimization clean + + + +# all +.all-impl: .all-pre .depcheck-impl + ${MAKE} SUBPROJECTS=${SUBPROJECTS} CONF=PIC32_Standalone build + ${MAKE} SUBPROJECTS=${SUBPROJECTS} CONF=PIC32_with_bootloader build + ${MAKE} SUBPROJECTS=${SUBPROJECTS} CONF=PIC32_NoOptimization build + + + +# dependency checking support +.depcheck-impl: +# @echo "# This code depends on make tool being used" >.dep.inc +# @if [ -n "${MAKE_VERSION}" ]; then \ +# echo "DEPFILES=\$$(wildcard \$$(addsuffix .d, \$${OBJECTFILES}))" >>.dep.inc; \ +# echo "ifneq (\$${DEPFILES},)" >>.dep.inc; \ +# echo "include \$${DEPFILES}" >>.dep.inc; \ +# echo "endif" >>.dep.inc; \ +# else \ +# echo ".KEEP_STATE:" >>.dep.inc; \ +# echo ".KEEP_STATE_FILE:.make.state.\$${CONF}" >>.dep.inc; \ +# fi diff --git a/software/front/US_Firmware.X/nbproject/Makefile-local-PIC32_NoOptimization.mk b/software/front/US_Firmware.X/nbproject/Makefile-local-PIC32_NoOptimization.mk new file mode 100644 index 0000000..ead1508 --- /dev/null +++ b/software/front/US_Firmware.X/nbproject/Makefile-local-PIC32_NoOptimization.mk @@ -0,0 +1,37 @@ +# +# Generated Makefile - do not edit! +# +# +# This file contains information about the location of compilers and other tools. +# If you commmit this file into your revision control server, you will be able to +# to checkout the project and build it from the command line with make. However, +# if more than one person works on the same project, then this file might show +# conflicts since different users are bound to have compilers in different places. +# In that case you might choose to not commit this file and let MPLAB X recreate this file +# for each user. The disadvantage of not commiting this file is that you must run MPLAB X at +# least once so the file gets created and the project can be built. Finally, you can also +# avoid using this file at all if you are only building from the command line with make. +# You can invoke make with the values of the macros: +# $ makeMP_CC="/opt/microchip/mplabc30/v3.30c/bin/pic30-gcc" ... +# +SHELL=cmd.exe +PATH_TO_IDE_BIN=C:/Program Files (x86)/Microchip/MPLABX/v3.20/mplab_ide/mplab_ide/modules/../../bin/ +# Adding MPLAB X bin directory to path. +PATH:=C:/Program Files (x86)/Microchip/MPLABX/v3.20/mplab_ide/mplab_ide/modules/../../bin/:$(PATH) +# Path to java used to run MPLAB X when this makefile was created +MP_JAVA_PATH="C:\Program Files (x86)\Microchip\MPLABX\v3.20\sys\java\jre1.8.0_65/bin/" +OS_CURRENT="$(shell uname -s)" +MP_CC="C:\Program Files (x86)\Microchip\xc32\v1.33\bin\xc32-gcc.exe" +MP_CPPC="C:\Program Files (x86)\Microchip\xc32\v1.33\bin\xc32-g++.exe" +# MP_BC is not defined +MP_AS="C:\Program Files (x86)\Microchip\xc32\v1.33\bin\xc32-as.exe" +MP_LD="C:\Program Files (x86)\Microchip\xc32\v1.33\bin\xc32-ld.exe" +MP_AR="C:\Program Files (x86)\Microchip\xc32\v1.33\bin\xc32-ar.exe" +DEP_GEN=${MP_JAVA_PATH}java -jar "C:/Program Files (x86)/Microchip/MPLABX/v3.20/mplab_ide/mplab_ide/modules/../../bin/extractobjectdependencies.jar" +MP_CC_DIR="C:\Program Files (x86)\Microchip\xc32\v1.33\bin" +MP_CPPC_DIR="C:\Program Files (x86)\Microchip\xc32\v1.33\bin" +# MP_BC_DIR is not defined +MP_AS_DIR="C:\Program Files (x86)\Microchip\xc32\v1.33\bin" +MP_LD_DIR="C:\Program Files (x86)\Microchip\xc32\v1.33\bin" +MP_AR_DIR="C:\Program Files (x86)\Microchip\xc32\v1.33\bin" +# MP_BC_DIR is not defined diff --git a/software/front/US_Firmware.X/nbproject/Makefile-local-PIC32_Standalone.mk b/software/front/US_Firmware.X/nbproject/Makefile-local-PIC32_Standalone.mk new file mode 100644 index 0000000..ead1508 --- /dev/null +++ b/software/front/US_Firmware.X/nbproject/Makefile-local-PIC32_Standalone.mk @@ -0,0 +1,37 @@ +# +# Generated Makefile - do not edit! +# +# +# This file contains information about the location of compilers and other tools. +# If you commmit this file into your revision control server, you will be able to +# to checkout the project and build it from the command line with make. However, +# if more than one person works on the same project, then this file might show +# conflicts since different users are bound to have compilers in different places. +# In that case you might choose to not commit this file and let MPLAB X recreate this file +# for each user. The disadvantage of not commiting this file is that you must run MPLAB X at +# least once so the file gets created and the project can be built. Finally, you can also +# avoid using this file at all if you are only building from the command line with make. +# You can invoke make with the values of the macros: +# $ makeMP_CC="/opt/microchip/mplabc30/v3.30c/bin/pic30-gcc" ... +# +SHELL=cmd.exe +PATH_TO_IDE_BIN=C:/Program Files (x86)/Microchip/MPLABX/v3.20/mplab_ide/mplab_ide/modules/../../bin/ +# Adding MPLAB X bin directory to path. +PATH:=C:/Program Files (x86)/Microchip/MPLABX/v3.20/mplab_ide/mplab_ide/modules/../../bin/:$(PATH) +# Path to java used to run MPLAB X when this makefile was created +MP_JAVA_PATH="C:\Program Files (x86)\Microchip\MPLABX\v3.20\sys\java\jre1.8.0_65/bin/" +OS_CURRENT="$(shell uname -s)" +MP_CC="C:\Program Files (x86)\Microchip\xc32\v1.33\bin\xc32-gcc.exe" +MP_CPPC="C:\Program Files (x86)\Microchip\xc32\v1.33\bin\xc32-g++.exe" +# MP_BC is not defined +MP_AS="C:\Program Files (x86)\Microchip\xc32\v1.33\bin\xc32-as.exe" +MP_LD="C:\Program Files (x86)\Microchip\xc32\v1.33\bin\xc32-ld.exe" +MP_AR="C:\Program Files (x86)\Microchip\xc32\v1.33\bin\xc32-ar.exe" +DEP_GEN=${MP_JAVA_PATH}java -jar "C:/Program Files (x86)/Microchip/MPLABX/v3.20/mplab_ide/mplab_ide/modules/../../bin/extractobjectdependencies.jar" +MP_CC_DIR="C:\Program Files (x86)\Microchip\xc32\v1.33\bin" +MP_CPPC_DIR="C:\Program Files (x86)\Microchip\xc32\v1.33\bin" +# MP_BC_DIR is not defined +MP_AS_DIR="C:\Program Files (x86)\Microchip\xc32\v1.33\bin" +MP_LD_DIR="C:\Program Files (x86)\Microchip\xc32\v1.33\bin" +MP_AR_DIR="C:\Program Files (x86)\Microchip\xc32\v1.33\bin" +# MP_BC_DIR is not defined diff --git a/software/front/US_Firmware.X/nbproject/Makefile-local-PIC32_with_bootloader.mk b/software/front/US_Firmware.X/nbproject/Makefile-local-PIC32_with_bootloader.mk new file mode 100644 index 0000000..ead1508 --- /dev/null +++ b/software/front/US_Firmware.X/nbproject/Makefile-local-PIC32_with_bootloader.mk @@ -0,0 +1,37 @@ +# +# Generated Makefile - do not edit! +# +# +# This file contains information about the location of compilers and other tools. +# If you commmit this file into your revision control server, you will be able to +# to checkout the project and build it from the command line with make. However, +# if more than one person works on the same project, then this file might show +# conflicts since different users are bound to have compilers in different places. +# In that case you might choose to not commit this file and let MPLAB X recreate this file +# for each user. The disadvantage of not commiting this file is that you must run MPLAB X at +# least once so the file gets created and the project can be built. Finally, you can also +# avoid using this file at all if you are only building from the command line with make. +# You can invoke make with the values of the macros: +# $ makeMP_CC="/opt/microchip/mplabc30/v3.30c/bin/pic30-gcc" ... +# +SHELL=cmd.exe +PATH_TO_IDE_BIN=C:/Program Files (x86)/Microchip/MPLABX/v3.20/mplab_ide/mplab_ide/modules/../../bin/ +# Adding MPLAB X bin directory to path. +PATH:=C:/Program Files (x86)/Microchip/MPLABX/v3.20/mplab_ide/mplab_ide/modules/../../bin/:$(PATH) +# Path to java used to run MPLAB X when this makefile was created +MP_JAVA_PATH="C:\Program Files (x86)\Microchip\MPLABX\v3.20\sys\java\jre1.8.0_65/bin/" +OS_CURRENT="$(shell uname -s)" +MP_CC="C:\Program Files (x86)\Microchip\xc32\v1.33\bin\xc32-gcc.exe" +MP_CPPC="C:\Program Files (x86)\Microchip\xc32\v1.33\bin\xc32-g++.exe" +# MP_BC is not defined +MP_AS="C:\Program Files (x86)\Microchip\xc32\v1.33\bin\xc32-as.exe" +MP_LD="C:\Program Files (x86)\Microchip\xc32\v1.33\bin\xc32-ld.exe" +MP_AR="C:\Program Files (x86)\Microchip\xc32\v1.33\bin\xc32-ar.exe" +DEP_GEN=${MP_JAVA_PATH}java -jar "C:/Program Files (x86)/Microchip/MPLABX/v3.20/mplab_ide/mplab_ide/modules/../../bin/extractobjectdependencies.jar" +MP_CC_DIR="C:\Program Files (x86)\Microchip\xc32\v1.33\bin" +MP_CPPC_DIR="C:\Program Files (x86)\Microchip\xc32\v1.33\bin" +# MP_BC_DIR is not defined +MP_AS_DIR="C:\Program Files (x86)\Microchip\xc32\v1.33\bin" +MP_LD_DIR="C:\Program Files (x86)\Microchip\xc32\v1.33\bin" +MP_AR_DIR="C:\Program Files (x86)\Microchip\xc32\v1.33\bin" +# MP_BC_DIR is not defined diff --git a/software/front/US_Firmware.X/nbproject/Makefile-variables.mk b/software/front/US_Firmware.X/nbproject/Makefile-variables.mk new file mode 100644 index 0000000..4fc98a9 --- /dev/null +++ b/software/front/US_Firmware.X/nbproject/Makefile-variables.mk @@ -0,0 +1,27 @@ +# +# Generated - do not edit! +# +# NOCDDL +# +CND_BASEDIR=`pwd` +# PIC32_Standalone configuration +CND_ARTIFACT_DIR_PIC32_Standalone=dist/PIC32_Standalone/production +CND_ARTIFACT_NAME_PIC32_Standalone=US_Firmware.X.production.hex +CND_ARTIFACT_PATH_PIC32_Standalone=dist/PIC32_Standalone/production/US_Firmware.X.production.hex +CND_PACKAGE_DIR_PIC32_Standalone=${CND_DISTDIR}/PIC32_Standalone/package +CND_PACKAGE_NAME_PIC32_Standalone=usfirmware.x.tar +CND_PACKAGE_PATH_PIC32_Standalone=${CND_DISTDIR}/PIC32_Standalone/package/usfirmware.x.tar +# PIC32_with_bootloader configuration +CND_ARTIFACT_DIR_PIC32_with_bootloader=dist/PIC32_with_bootloader/production +CND_ARTIFACT_NAME_PIC32_with_bootloader=US_Firmware.X.production.hex +CND_ARTIFACT_PATH_PIC32_with_bootloader=dist/PIC32_with_bootloader/production/US_Firmware.X.production.hex +CND_PACKAGE_DIR_PIC32_with_bootloader=${CND_DISTDIR}/PIC32_with_bootloader/package +CND_PACKAGE_NAME_PIC32_with_bootloader=usfirmware.x.tar +CND_PACKAGE_PATH_PIC32_with_bootloader=${CND_DISTDIR}/PIC32_with_bootloader/package/usfirmware.x.tar +# PIC32_NoOptimization configuration +CND_ARTIFACT_DIR_PIC32_NoOptimization=dist/PIC32_NoOptimization/production +CND_ARTIFACT_NAME_PIC32_NoOptimization=US_Firmware.X.production.hex +CND_ARTIFACT_PATH_PIC32_NoOptimization=dist/PIC32_NoOptimization/production/US_Firmware.X.production.hex +CND_PACKAGE_DIR_PIC32_NoOptimization=${CND_DISTDIR}/PIC32_NoOptimization/package +CND_PACKAGE_NAME_PIC32_NoOptimization=usfirmware.x.tar +CND_PACKAGE_PATH_PIC32_NoOptimization=${CND_DISTDIR}/PIC32_NoOptimization/package/usfirmware.x.tar diff --git a/software/front/US_Firmware.X/nbproject/Package-PIC32_NoOptimization.bash b/software/front/US_Firmware.X/nbproject/Package-PIC32_NoOptimization.bash new file mode 100644 index 0000000..0fe0926 --- /dev/null +++ b/software/front/US_Firmware.X/nbproject/Package-PIC32_NoOptimization.bash @@ -0,0 +1,73 @@ +#!/bin/bash -x + +# +# Generated - do not edit! +# + +# Macros +TOP=`pwd` +CND_CONF=PIC32_NoOptimization +CND_DISTDIR=dist +TMPDIR=build/${CND_CONF}/${IMAGE_TYPE}/tmp-packaging +TMPDIRNAME=tmp-packaging +OUTPUT_PATH=dist/${CND_CONF}/${IMAGE_TYPE}/US_Firmware.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} +OUTPUT_BASENAME=US_Firmware.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} +PACKAGE_TOP_DIR=usfirmware.x/ + +# Functions +function checkReturnCode +{ + rc=$? + if [ $rc != 0 ] + then + exit $rc + fi +} +function makeDirectory +# $1 directory path +# $2 permission (optional) +{ + mkdir -p "$1" + checkReturnCode + if [ "$2" != "" ] + then + chmod $2 "$1" + checkReturnCode + fi +} +function copyFileToTmpDir +# $1 from-file path +# $2 to-file path +# $3 permission +{ + cp "$1" "$2" + checkReturnCode + if [ "$3" != "" ] + then + chmod $3 "$2" + checkReturnCode + fi +} + +# Setup +cd "${TOP}" +mkdir -p ${CND_DISTDIR}/${CND_CONF}/package +rm -rf ${TMPDIR} +mkdir -p ${TMPDIR} + +# Copy files and create directories and links +cd "${TOP}" +makeDirectory ${TMPDIR}/usfirmware.x/bin +copyFileToTmpDir "${OUTPUT_PATH}" "${TMPDIR}/${PACKAGE_TOP_DIR}bin/${OUTPUT_BASENAME}" 0755 + + +# Generate tar file +cd "${TOP}" +rm -f ${CND_DISTDIR}/${CND_CONF}/package/usfirmware.x.tar +cd ${TMPDIR} +tar -vcf ../../../../${CND_DISTDIR}/${CND_CONF}/package/usfirmware.x.tar * +checkReturnCode + +# Cleanup +cd "${TOP}" +rm -rf ${TMPDIR} diff --git a/software/front/US_Firmware.X/nbproject/Package-PIC32_Standalone.bash b/software/front/US_Firmware.X/nbproject/Package-PIC32_Standalone.bash new file mode 100644 index 0000000..71bcfdf --- /dev/null +++ b/software/front/US_Firmware.X/nbproject/Package-PIC32_Standalone.bash @@ -0,0 +1,73 @@ +#!/bin/bash -x + +# +# Generated - do not edit! +# + +# Macros +TOP=`pwd` +CND_CONF=PIC32_Standalone +CND_DISTDIR=dist +TMPDIR=build/${CND_CONF}/${IMAGE_TYPE}/tmp-packaging +TMPDIRNAME=tmp-packaging +OUTPUT_PATH=dist/${CND_CONF}/${IMAGE_TYPE}/US_Firmware.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} +OUTPUT_BASENAME=US_Firmware.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} +PACKAGE_TOP_DIR=usfirmware.x/ + +# Functions +function checkReturnCode +{ + rc=$? + if [ $rc != 0 ] + then + exit $rc + fi +} +function makeDirectory +# $1 directory path +# $2 permission (optional) +{ + mkdir -p "$1" + checkReturnCode + if [ "$2" != "" ] + then + chmod $2 "$1" + checkReturnCode + fi +} +function copyFileToTmpDir +# $1 from-file path +# $2 to-file path +# $3 permission +{ + cp "$1" "$2" + checkReturnCode + if [ "$3" != "" ] + then + chmod $3 "$2" + checkReturnCode + fi +} + +# Setup +cd "${TOP}" +mkdir -p ${CND_DISTDIR}/${CND_CONF}/package +rm -rf ${TMPDIR} +mkdir -p ${TMPDIR} + +# Copy files and create directories and links +cd "${TOP}" +makeDirectory ${TMPDIR}/usfirmware.x/bin +copyFileToTmpDir "${OUTPUT_PATH}" "${TMPDIR}/${PACKAGE_TOP_DIR}bin/${OUTPUT_BASENAME}" 0755 + + +# Generate tar file +cd "${TOP}" +rm -f ${CND_DISTDIR}/${CND_CONF}/package/usfirmware.x.tar +cd ${TMPDIR} +tar -vcf ../../../../${CND_DISTDIR}/${CND_CONF}/package/usfirmware.x.tar * +checkReturnCode + +# Cleanup +cd "${TOP}" +rm -rf ${TMPDIR} diff --git a/software/front/US_Firmware.X/nbproject/Package-PIC32_with_bootloader.bash b/software/front/US_Firmware.X/nbproject/Package-PIC32_with_bootloader.bash new file mode 100644 index 0000000..33d1a41 --- /dev/null +++ b/software/front/US_Firmware.X/nbproject/Package-PIC32_with_bootloader.bash @@ -0,0 +1,73 @@ +#!/bin/bash -x + +# +# Generated - do not edit! +# + +# Macros +TOP=`pwd` +CND_CONF=PIC32_with_bootloader +CND_DISTDIR=dist +TMPDIR=build/${CND_CONF}/${IMAGE_TYPE}/tmp-packaging +TMPDIRNAME=tmp-packaging +OUTPUT_PATH=dist/${CND_CONF}/${IMAGE_TYPE}/US_Firmware.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} +OUTPUT_BASENAME=US_Firmware.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} +PACKAGE_TOP_DIR=usfirmware.x/ + +# Functions +function checkReturnCode +{ + rc=$? + if [ $rc != 0 ] + then + exit $rc + fi +} +function makeDirectory +# $1 directory path +# $2 permission (optional) +{ + mkdir -p "$1" + checkReturnCode + if [ "$2" != "" ] + then + chmod $2 "$1" + checkReturnCode + fi +} +function copyFileToTmpDir +# $1 from-file path +# $2 to-file path +# $3 permission +{ + cp "$1" "$2" + checkReturnCode + if [ "$3" != "" ] + then + chmod $3 "$2" + checkReturnCode + fi +} + +# Setup +cd "${TOP}" +mkdir -p ${CND_DISTDIR}/${CND_CONF}/package +rm -rf ${TMPDIR} +mkdir -p ${TMPDIR} + +# Copy files and create directories and links +cd "${TOP}" +makeDirectory ${TMPDIR}/usfirmware.x/bin +copyFileToTmpDir "${OUTPUT_PATH}" "${TMPDIR}/${PACKAGE_TOP_DIR}bin/${OUTPUT_BASENAME}" 0755 + + +# Generate tar file +cd "${TOP}" +rm -f ${CND_DISTDIR}/${CND_CONF}/package/usfirmware.x.tar +cd ${TMPDIR} +tar -vcf ../../../../${CND_DISTDIR}/${CND_CONF}/package/usfirmware.x.tar * +checkReturnCode + +# Cleanup +cd "${TOP}" +rm -rf ${TMPDIR} diff --git a/software/front/US_Firmware.X/nbproject/configurations.xml b/software/front/US_Firmware.X/nbproject/configurations.xml new file mode 100644 index 0000000..157dec5 --- /dev/null +++ b/software/front/US_Firmware.X/nbproject/configurations.xml @@ -0,0 +1,1355 @@ + + + + + ../../../PDF/PIC32_DS.pdf + ../../../PDF/PIC32_CONFIG.pdf + ../../../PDF/PIC32_ADC.pdf + ../../../PDF/PIC32_I2C.pdf + ../../../PDF/PIC32_INT.pdf + ../../../PDF/PIC32_USB.pdf + ../../../PDF/24LC64.pdf + ../../../PDF/PIC32_DMA.pdf + ../../../PDF/MCP4561.pdf + + + + usb/Compiler.h + usb/usb.h + usb/usb_ch9.h + usb/usb_common.h + usb/usb_config.h + usb/usb_device.h + usb/usb_device_local.h + usb/usb_driver.h + usb/usb_function_hid.h + usb/usb_hal.h + usb/usb_hal_pic24f.h + usb/usb_hal_pic32.h + + typedefs.h + PID.h + isr.h + main.h + iron.h + io.h + menu.h + PIC32MX534F064H.h + mcu.h + EEP.h + fonts.h + font24x32numbers.h + font32x48numbers.h + OLED.h + font8x16.h + pars.h + font6x8.h + ExtFloat.h + + + firmware.ld + + + + usb/usb_descriptors.c + usb/usb_device.c + usb/usb_driver.c + usb/usb_function_hid.c + usb/usb_hal_pic24.c + + main.c + isr.c + iron.c + PID.c + io.c + menu.c + PIC32MX534F064H.c + EEP.c + OLED.c + pars.c + + + Makefile + + + + usb + ../../../PDF + usb_new + + Makefile + + + + localhost + PIC32MX534F064H + + + PICkit3PlatformTool + XC32 + 1.33 + 3 + + + + + + + + + + false + true + + + + + false + + false + + false + false + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + localhost + PIC32MX534F064H + + + Simulator + XC32 + 1.33 + 3 + + + + + + + + + + false + true + + + + + false + + false + + false + false + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + localhost + PIC32MX564F128H + + + PICkit3PlatformTool + XC32 + 1.33 + 3 + + + + + + + + + + false + true + + + + + false + + false + + false + false + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/software/front/US_Firmware.X/nbproject/private/SuppressibleMessageMemo.properties b/software/front/US_Firmware.X/nbproject/private/SuppressibleMessageMemo.properties new file mode 100644 index 0000000..649a13b --- /dev/null +++ b/software/front/US_Firmware.X/nbproject/private/SuppressibleMessageMemo.properties @@ -0,0 +1,3 @@ +# +#Sat Jan 05 03:34:07 EET 2013 +pk3/CHECK_4_HIGH_VOLTAGE_VPP=true diff --git a/software/front/US_Firmware.X/nbproject/private/configurations.xml b/software/front/US_Firmware.X/nbproject/private/configurations.xml new file mode 100644 index 0000000..173e8cf --- /dev/null +++ b/software/front/US_Firmware.X/nbproject/private/configurations.xml @@ -0,0 +1,61 @@ + + + Makefile + 1 + + + + C:\Program Files (x86)\Microchip\xc32\v1.33\bin + + place holder 1 + place holder 2 + + + + + true + 0 + 0 + 0 + + + + + + + C:\Program Files (x86)\Microchip\xc32\v1.33\bin + + place holder 1 + place holder 2 + + + + + true + 0 + 0 + 0 + + + + + + + C:\Program Files (x86)\Microchip\xc32\v1.33\bin + + place holder 1 + place holder 2 + + + + + true + 0 + 0 + 0 + + + + + + diff --git a/software/front/US_Firmware.X/nbproject/private/private.properties b/software/front/US_Firmware.X/nbproject/private/private.properties new file mode 100644 index 0000000..e69de29 diff --git a/software/front/US_Firmware.X/nbproject/private/private.xml b/software/front/US_Firmware.X/nbproject/private/private.xml new file mode 100644 index 0000000..9d5faba --- /dev/null +++ b/software/front/US_Firmware.X/nbproject/private/private.xml @@ -0,0 +1,26 @@ + + + + + + + file:/C:/Users/Sparky/Desktop/MyProjects/Electronics/UniSolder/software/front/US_Firmware.X/menu.c + file:/C:/Users/Sparky/Desktop/MyProjects/Electronics/UniSolder/software/front/US_Firmware.X/PID.h + file:/C:/Users/Sparky/Desktop/MyProjects/Electronics/UniSolder/software/front/US_Firmware.X/PID.c + file:/C:/Users/Sparky/Desktop/MyProjects/Electronics/UniSolder/software/front/US_Firmware.X/iron.c + file:/C:/Users/Sparky/Desktop/MyProjects/Electronics/UniSolder/software/front/US_Firmware.X/isr.c + file:/C:/Users/Sparky/Desktop/MyProjects/Electronics/UniSolder/software/front/US_Firmware.X/main.h + file:/C:/Users/Sparky/Desktop/MyProjects/Electronics/UniSolder/software/front/US_Firmware.X/menu.h + file:/C:/Users/Sparky/Desktop/MyProjects/Electronics/UniSolder/software/front/US_Firmware.X/io.c + file:/C:/Users/Sparky/Desktop/MyProjects/Electronics/UniSolder/software/front/US_Firmware.X/pars.h + file:/C:/Users/Sparky/Desktop/MyProjects/Electronics/UniSolder/software/front/US_Firmware.X/io.h + file:/C:/Users/Sparky/Desktop/MyProjects/Electronics/UniSolder/software/front/US_Firmware.X/main.c + file:/C:/Users/Sparky/Desktop/MyProjects/Electronics/UniSolder/software/front/US_Firmware.X/isr.h + file:/C:/Users/Sparky/Desktop/MyProjects/Electronics/UniSolder/software/front/US_Firmware.X/OLED.h + file:/C:/Users/Sparky/Desktop/MyProjects/Electronics/UniSolder/software/front/US_Firmware.X/iron.h + file:/C:/Users/Sparky/Desktop/MyProjects/Electronics/UniSolder/software/front/US_Firmware.X/pars.c + file:/C:/Users/Sparky/Desktop/MyProjects/Electronics/UniSolder/software/front/US_Firmware.X/ExtFloat.h + file:/C:/Users/Sparky/Desktop/MyProjects/Electronics/UniSolder/software/front/US_Firmware.X/OLED.c + + + diff --git a/software/front/US_Firmware.X/nbproject/project.properties b/software/front/US_Firmware.X/nbproject/project.properties new file mode 100644 index 0000000..e69de29 diff --git a/software/front/US_Firmware.X/nbproject/project.xml b/software/front/US_Firmware.X/nbproject/project.xml new file mode 100644 index 0000000..3608d05 --- /dev/null +++ b/software/front/US_Firmware.X/nbproject/project.xml @@ -0,0 +1,17 @@ + + + com.microchip.mplab.nbide.embedded.makeproject + + + US_Firmware + 68e9919b-5e52-4fb7-8c57-0194a6578f80 + 0 + c + + h + ISO-8859-1 + + + + + diff --git a/software/front/US_Firmware.X/pars.c b/software/front/US_Firmware.X/pars.c new file mode 100644 index 0000000..d6523d5 --- /dev/null +++ b/software/front/US_Firmware.X/pars.c @@ -0,0 +1,72 @@ +#define _PARS_C + +#include "main.h" +#include "OLED.h" +#include "pars.h" + +void ParDispNum(int col, int row, int num); +void ParDispNumOff(int col, int row, int num); +void ParDispOnOffAuto(int col, int row, int temp); +void ParDispTemp(int col, int row, int temp); +void ParDispCF(int col, int row, int num); +void Temp(int T, int C_F); + +const t_ParDef ParDef[11] = { + {" T1 ", {78 , 160, 0}, 125, 75, 225, &ParDispTemp}, + {" T2 ", {78 , 62, 0}, 150, 75, 225, &ParDispTemp}, + {" T3 ", {78 , 186, 0}, 175, 75, 225, &ParDispTemp}, + {" HOL. TEMP ", {230 , 78, 0}, 150, 75, 225, &ParDispTemp}, + {"SLEEP TEMP ", {218 , 78, 0}, 125, 75, 225, &ParDispTemp}, + {"SLEEP TIME ", {218 , 78, 128}, 20, 0, 255, &ParDispNumOff}, + {" STAND-BY ", {218 , 206, 78}, 30, 0, 255, &ParDispNumOff}, + {" HOLDER ", {230 , 252, 76}, 2, 0, 2, &ParDispOnOffAuto}, + {" DEGREES ", {230 , 252, 76}, 0, 0, 1, &ParDispCF}, + {"BRIGHTNESS ", {206 , 6, 128}, 15, 1, 15, &ParDispNum}, + {"CALIBRATION", { 92 , 246, 76}, 15, 1, 15, 0} +}; + +void ParDispCF(int col, int row, int num){ + OLEDWrite(col,4,row,degrees4x16,8); + OLEDPrint816(col+4,row,num?"F":"C",0); +} + +void ParDispNum(int col, int row, int num){ + OLEDPrintNum816(col,row,3,num); +} + +void ParDispNumOff(int col, int row, int num){ + if(num){ + ParDispNum(col,row,num); + } + else{ + OLEDPrint816(col,row,"OFF",0); + } +} + +void ParDispOnOffAuto(int col, int row, int num){ + const char* s; + switch(num){ + case 0: + s="OFF"; + break; + case 1: + s="ON"; + break; + default: + s="AUTO"; + break; + } + OLEDPrint816(col,row,s,0); +} + +void ParDispTemp(int col, int row, int temp){ + if(pars.Deg){ + ParDispNum(col, row, ((temp * 461) >> 7) + 32); + } + else{ + ParDispNum(col, row, temp * 2); + } + ParDispCF(col + 24, row, pars.Deg); +} +#undef _PARS_C + diff --git a/software/front/US_Firmware.X/pars.h b/software/front/US_Firmware.X/pars.h new file mode 100644 index 0000000..5af6725 --- /dev/null +++ b/software/front/US_Firmware.X/pars.h @@ -0,0 +1,50 @@ +/* + * File: pars.h + * Author: Sparky + * + * Created on ??????????, 2014, ?????? 25, 20:49 + */ + +#ifndef PARS_H +#define PARS_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef union { + struct __PACKED { + UINT8 RTemp[3]; //Reset temperatures + UINT8 HTemp; //Holder temperature + UINT8 SlTemp; //Sleep temperature + UINT8 SlTime; //Sleep Time (0(off) - 240 seconds(holder with sensor)/minutes(holder without sensor)) + UINT8 STBTime; //StandBy Time (0(off) - 240 minutes) + UINT8 Holder; //Holder sensor (0(off), 1(on), 2(auto) + UINT8 Deg; //Celsius/Farenheit (0-Celsous), 1-Farenheit)) + UINT8 Bri; //display brightness (1-16) + UINT8 Cal; + }; + UINT8 b[11]; +}pars_t; + +typedef struct { + const char * Name; + const char ShortName[3]; + UINT8 Default; + UINT8 Min; + UINT8 Max; + void (*OLEDDispFunc)(int,int,int); +}t_ParDef; + +#ifndef _PARS_C +extern const t_ParDef ParDef[11]; +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* PARS_H */ + diff --git a/software/front/US_Firmware.X/typedefs.h b/software/front/US_Firmware.X/typedefs.h new file mode 100644 index 0000000..6febc79 --- /dev/null +++ b/software/front/US_Firmware.X/typedefs.h @@ -0,0 +1,76 @@ +/* + * File: typedefs.h + * Author: Sparky + * + * Created on ??????, 2013, ?????? 19, 0:40 + */ + +#ifndef __TYPEDEFS_H__ +#define __TYPEDEFS_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#if !defined(__PACKED) + #define __PACKED __attribute__((__packed__)) +#endif + +typedef union{ + int i; + unsigned int ui; +}SUINT; + +typedef union{ + INT8 i8; + UINT8 ui8; +}SUINT8; + +typedef union{ + INT16 i16; + UINT16 ui16; + INT8 i8[2]; + UINT8 ui8[2]; +}SUINT16; + +typedef union { + INT32 i32; + UINT32 ui32; + INT16 i16[2] __PACKED; + UINT16 ui16[2] __PACKED; + INT8 i8[4]; + UINT8 ui8[4]; + struct __PACKED + { + UINT8 z1; + INT16 mi16; + UINT8 z2; + }; + struct __PACKED + { + UINT8 z3; + INT16 mui16; + UINT8 z4; + }; +}SUINT32; + +typedef union { + INT64 i64; + UINT64 ui64; + INT32 i32[2]; + UINT32 ui32[2]; + INT16 i16[4] __PACKED; + UINT16 ui16[4] __PACKED; + INT8 i8[8]; + UINT8 ui8[8]; +}SUINT64; + + +#ifdef __cplusplus +} +#endif + + +#endif /* __TYPEDEFS_H__ */ \ No newline at end of file diff --git a/software/front/US_Firmware.X/usb/Compiler.h b/software/front/US_Firmware.X/usb/Compiler.h new file mode 100644 index 0000000..3a3840f --- /dev/null +++ b/software/front/US_Firmware.X/usb/Compiler.h @@ -0,0 +1,218 @@ +/********************************************************************* + * + * Compiler and hardware specific definitions + * + ********************************************************************* + * FileName: Compiler.h + * Dependencies: None + * Processor: PIC10, PIC12, PIC16, PIC18, PIC24, dsPIC, PIC32 + * Compiler: Microchip C32 v2.02 or higher + * Microchip C30 v3.31 or higher + * Microchip C18 v3.40 or higher + * HI-TECH PICC-18 PRO 9.66 or higher + * HI-TECH PICC PRO V9.81 or higher + * Company: Microchip Technology, Inc. + * + * Software License Agreement + * + * Copyright (C) 2012 Microchip Technology Inc. All rights + * reserved. + * + * Microchip licenses to you the right to use, modify, copy, and + * distribute: + * (i) the Software when embedded on a Microchip microcontroller or + * digital signal controller product ("Device") which is + * integrated into Licensee's product; or + * (ii) ONLY the Software driver source files ENC28J60.c and + * ENC28J60.h ported to a non-Microchip device used in + * conjunction with a Microchip ethernet controller for the + * sole purpose of interfacing with the ethernet controller. + * + * You should refer to the license agreement accompanying this + * Software for additional information regarding your rights and + * obligations. + * + * THE SOFTWARE AND DOCUMENTATION ARE PROVIDED "AS IS" WITHOUT + * WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT + * LIMITATION, ANY WARRANTY OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * MICROCHIP BE LIABLE FOR ANY INCIDENTAL, SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF + * PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY OR SERVICES, ANY CLAIMS + * BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE + * THEREOF), ANY CLAIMS FOR INDEMNITY OR CONTRIBUTION, OR OTHER + * SIMILAR COSTS, WHETHER ASSERTED ON THE BASIS OF CONTRACT, TORT + * (INCLUDING NEGLIGENCE), BREACH OF WARRANTY, OR OTHERWISE. + * + * + * Date Comment + *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * 10/03/2006 Original, copied from old Compiler.h + * 11/07/2007 Reorganized and simplified + * 03/31/2010 Removed dependency on WORD and DWORD typedefs + * 04/14/2010 Added defines to uniquely identify each compiler + * 10/13/2010 Added support for PIC10, PIC12, and PIC16 with PICC compiler + * 02/15/2012 Added re-define check for Nop, ClrWdt, Reset, Sleep + ********************************************************************/ +#ifndef __COMPILER_H +#define __COMPILER_H + +// Include proper device header file +#if defined(__18CXX) && !defined(HI_TECH_C) + // PIC18 processor with Microchip C18 compiler + #define COMPILER_MPLAB_C18 + #include +#elif defined(__PICC18__) && defined(HI_TECH_C) + // PIC18 processor with (Microchip) HI-TECH PICC-18 compiler + #if !defined(__18CXX) + #define __18CXX + #endif + #define COMPILER_HITECH_PICC18 + #include +#elif (defined(_PIC12) || defined(_PIC14) || defined(_PIC14E)) && defined(HI_TECH_C) + // PIC10/12/16 processor with (Microchip) HI-TECH PICC compiler + #define COMPILER_HITECH_PICC + #include +#elif (defined(__PIC24F__) || defined(__PIC24FK__)) && defined(__C30__) // Microchip C30 compiler + // PIC24F processor + #define COMPILER_MPLAB_C30 + #include +#elif defined(__PIC24H__) && defined(__C30__) // Microchip C30 compiler + // PIC24H processor + #define COMPILER_MPLAB_C30 + #include +#elif defined(__PIC24E__) && defined(__C30__) // Microchip C30 compiler + // PIC24E processor + #define COMPILER_MPLAB_C30 + #include +#elif defined(__dsPIC33F__) && defined(__C30__) // Microchip C30 compiler + // dsPIC33F processor + #define COMPILER_MPLAB_C30 + #include +#elif defined(__dsPIC33E__) && defined(__C30__) // Microchip C30 compiler + // dsPIC33E processor + #define COMPILER_MPLAB_C30 + #include +#elif defined(__dsPIC30F__) && defined(__C30__) // Microchip C30 compiler + // dsPIC30F processor + #define COMPILER_MPLAB_C30 + #include +#elif defined(__C30__) // Microchip C30 compiler, but targeting "generic-16bit" processor. + #define COMPILER_MPLAB_C30 + #include + // Define some useful inline assembly functions which are normally in the + // processor header files, but absent from the generic p30sim.h file. + #if !defined(Nop) + #define Nop() __builtin_nop() + #define ClrWdt() {__asm__ volatile ("clrwdt");} + #define Sleep() {__asm__ volatile ("pwrsav #0");} + #define Idle() {__asm__ volatile ("pwrsav #1");} + #endif +#elif defined(__PIC32MX__) // Microchip C32 compiler + #if !defined(__C32__) + #define __C32__ + #endif + #define COMPILER_MPLAB_C32 + #include + #include +#else + #error Unknown processor or compiler. See Compiler.h +#endif + +#include +#include +#include + + +// Base RAM and ROM pointer types for given architecture +#if defined(__PIC32MX__) + #define PTR_BASE unsigned long + #define ROM_PTR_BASE unsigned long +#elif defined(__C30__) + #define PTR_BASE unsigned short + #define ROM_PTR_BASE unsigned short +#elif defined(COMPILER_MPLAB_C18) + #define PTR_BASE unsigned short + #define ROM_PTR_BASE unsigned short long +#elif defined(COMPILER_HITECH_PICC18) + #define PTR_BASE unsigned short + #define ROM_PTR_BASE unsigned long +#endif + + +// Definitions that apply to all except Microchip MPLAB C Compiler for PIC18 MCUs (C18) +#if !defined(COMPILER_MPLAB_C18) + #define memcmppgm2ram(a,b,c) memcmp(a,b,c) + #define strcmppgm2ram(a,b) strcmp(a,b) + #define memcpypgm2ram(a,b,c) memcpy(a,b,c) + #define strcpypgm2ram(a,b) strcpy(a,b) + #define strncpypgm2ram(a,b,c) strncpy(a,b,c) + #define strstrrampgm(a,b) strstr(a,b) + #define strlenpgm(a) strlen(a) + #define strchrpgm(a,b) strchr(a,b) + #define strcatpgm2ram(a,b) strcat(a,b) +#endif + + +// Definitions that apply to all 8-bit products +// (PIC10, PIC12, PIC16, PIC18) +#if defined(__18CXX) || defined(COMPILER_HITECH_PICC) + #define __attribute__(a) + + #define FAR far + + // Microchip C18 specific defines + #if defined(COMPILER_MPLAB_C18) + #define ROM rom + #endif + + // HI TECH specific defines + #if defined(COMPILER_HITECH_PICC18) || defined(COMPILER_HITECH_PICC) + #define ROM const + #define rom + #ifndef Nop() + #define Nop() asm("NOP"); + #endif + #ifndef ClrWdt() + #define ClrWdt() asm("CLRWDT"); + #endif + #ifndef Reset() + #define Reset() asm("RESET"); + #endif + #ifndef Sleep() + #define Sleep() asm("SLEEP"); + #endif + #endif + +// Definitions that apply to all 16-bit and 32-bit products +// (PIC24F, PIC24H, dsPIC30F, dsPIC33F, and PIC32) +#else + #define ROM const + + // 16-bit specific defines (PIC24F, PIC24H, dsPIC30F, dsPIC33F) + #if defined(__C30__) + #define Reset() asm("reset") + #define FAR __attribute__((far)) + #endif + + // 32-bit specific defines (PIC32) + #if defined(__PIC32MX__) + #if (__C32_VERSION__ < 200) + #define persistent + #endif + #define far + #define FAR + #define Reset() SoftReset() + #define ClrWdt() (WDTCONSET = _WDTCON_WDTCLR_MASK) + + // MPLAB C Compiler for PIC32 MCUs version 1.04 and below don't have a + // Nop() function. However, version 1.05 has Nop() declared as _nop(). + #if !defined(Nop) && (__C32_VERSION__ <= 104) + #define Nop() asm("nop") + #endif + #endif +#endif + + + +#endif diff --git a/software/front/US_Firmware.X/usb/usb.h b/software/front/US_Firmware.X/usb/usb.h new file mode 100644 index 0000000..3b70f8b --- /dev/null +++ b/software/front/US_Firmware.X/usb/usb.h @@ -0,0 +1,146 @@ +//DOM-IGNORE-BEGIN +/********************************************************************* + * The following lines are used by VDI. + * GUID=E537A0C0-6FEE-4afd-89B9-0C35BF72A80B + * GUIInterfaceVersion=1.00 + * LibraryVersion=2.4 + *********************************************************************/ +//DOM-IGNORE-END +/******************************************************************************* + + USB Header File + +Summary: + This file aggregates all necessary header files for the Microchip USB Host, + Device, and OTG libraries. It provides a single-file can be included in + application code. The USB libraries simplify the implementation of USB + applications by providing an abstraction of the USB module and its registers + and bits such that the source code for the can be the same across various + hardware platforms. + +Description: + This file aggregates all necessary header files for the Microchip USB Host, + Device, and OTG libraries. It provides a single-file can be included in + application code. The USB libraries simplify the implementation of USB + applications by providing an abstraction of the USB module and its registers + and bits such that the source code for the can be the same across various + hardware platforms. + + Note that this file does not include the header files for any client or + function drivers. + + This file is located in the "\\\Microchip\\Include\\USB" + directory. + + When including this file in a new project, this file can either be + referenced from the directory in which it was installed or copied + directly into the user application folder. If the first method is + chosen to keep the file located in the folder in which it is installed + then include paths need to be added so that the library and the + application both know where to reference each others files. If the + application folder is located in the same folder as the Microchip + folder (like the current demo folders), then the following include + paths need to be added to the application's project: + + . + + ..\\..\\Microchip\\Include + + If a different directory structure is used, modify the paths as + required. An example using absolute paths instead of relative paths + would be the following: + + C:\\Microchip Solutions\\Microchip\\Include + + C:\\Microchip Solutions\\My Demo Application + +******************************************************************************/ +/****************************************************************************** + FileName: usb.h + Dependencies: See INCLUDES section + Processor: PIC18, PIC24, & PIC32 USB Microcontrollers + Hardware: + Complier: Microchip C18 (for PIC18), C30 (for PIC24), or C32 (for PIC32) + Company: Microchip Technology, Inc. + + Software License Agreement: + + The software supplied herewith by Microchip Technology Incorporated + (the "Company") for its PICmicro(r) Microcontroller is intended and + supplied to you, the Company's customer, for use solely and + exclusively on Microchip PICmicro Microcontroller products. The + software is owned by the Company and/or its supplier, and is + protected under applicable copyright laws. All rights are reserved. + Any use in violation of the foregoing restrictions may subject the + user to criminal sanctions under applicable laws, as well as to + civil liability for the breach of the terms and conditions of this + license. + + THIS SOFTWARE IS PROVIDED IN AN "AS IS" CONDITION. NO WARRANTIES, + WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED + TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT, + IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR + CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +********************************************************************/ +//DOM-IGNORE-END + +//DOM-IGNORE-BEGIN +/******************************************************************** + File Description: + + Change History: + Rev Description + ---------- ----------- + 2.6 - 2.9 No change except stack revision number +********************************************************************/ +//DOM-IGNORE-END + +#ifndef _USB_H_ +#define _USB_H_ +//DOM-IGNORE-END + + +// ***************************************************************************** +// ***************************************************************************** +// Section: All necessary USB Library headers +// ***************************************************************************** +// ***************************************************************************** + +#include +#include "Compiler.h" + +#include "usb_config.h" // Must be defined by the application + +#include "usb_common.h" // Common USB library definitions +#include "usb_ch9.h" // USB device framework definitions + +#if defined( USB_SUPPORT_DEVICE ) + #include "usb_device.h" // USB Device abstraction layer interface +#endif + +#if defined( USB_SUPPORT_HOST ) + #include "usb_host.h" // USB Host abstraction layer interface +#endif + +#if defined ( USB_SUPPORT_OTG ) + #include "usb_otg.h" +#endif + +#include "usb_hal.h" // Hardware Abstraction Layer interface + +// ***************************************************************************** +// ***************************************************************************** +// Section: MCHPFSUSB Firmware Version +// ***************************************************************************** +// ***************************************************************************** + +#define USB_MAJOR_VER 2 // Firmware version, major release number. +#define USB_MINOR_VER 9 // Firmware version, minor release number. +#define USB_DOT_VER 0 // Firmware version, dot release number. + +#endif // _USB_H_ +/************************************************************************* + * EOF + */ + diff --git a/software/front/US_Firmware.X/usb/usb_ch9.h b/software/front/US_Firmware.X/usb/usb_ch9.h new file mode 100644 index 0000000..62e4588 --- /dev/null +++ b/software/front/US_Firmware.X/usb/usb_ch9.h @@ -0,0 +1,618 @@ +/******************************************************************************* + + USB Chapter 9 Protocol (Header File) + +Summary: + This file defines data structures, constants, and macros that are used to + to support the USB Device Framework protocol described in Chapter 9 of the + USB 2.0 specification. + +Description: + This file defines data structures, constants, and macros that are used to + to support the USB Device Framework protocol described in Chapter 9 of the + USB 2.0 specification. + + This file is located in the "\\\Microchip\\Include\\USB" + directory. + + When including this file in a new project, this file can either be + referenced from the directory in which it was installed or copied + directly into the user application folder. If the first method is + chosen to keep the file located in the folder in which it is installed + then include paths need to be added so that the library and the + application both know where to reference each others files. If the + application folder is located in the same folder as the Microchip + folder (like the current demo folders), then the following include + paths need to be added to the application's project: + + . + + ..\\..\\Microchip\\Include + + If a different directory structure is used, modify the paths as + required. An example using absolute paths instead of relative paths + would be the following: + + C:\\Microchip Solutions\\Microchip\\Include + + C:\\Microchip Solutions\\My Demo Application +*******************************************************************************/ +//DOM-IGNORE-BEGIN +/******************************************************************************* + +* FileName: usb_ch9.h +* Dependencies: None +* Processor: PIC18/PIC24/PIC32MX microcontrollers with USB module +* Compiler: C18 v3.13+/C30 v2.01+/C32 v0.00.18+ +* Company: Microchip Technology, Inc. +* File Description: +* This file contains the definitions and prototypes used for +* specification chapter 9 compliance. + +Software License Agreement + +The software supplied herewith by Microchip Technology Incorporated +(the “Company”) for its PICmicro® Microcontroller is intended and +supplied to you, the Company’s customer, for use solely and +exclusively on Microchip PICmicro Microcontroller products. The +software is owned by the Company and/or its supplier, and is +protected under applicable copyright laws. All rights are reserved. +Any use in violation of the foregoing restrictions may subject the +user to criminal sanctions under applicable laws, as well as to +civil liability for the breach of the terms and conditions of this +license. + +THIS SOFTWARE IS PROVIDED IN AN “AS IS” CONDITION. NO WARRANTIES, +WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED +TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT, +IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. + +*******************************************************************************/ +//DOM-IGNORE-END + +//DOM-IGNORE-BEGIN +/******************************************************************** + Change History: + Rev Description + ---- ----------- + 2.6 Moved many of the CH9 defintions from the device stack files + into this file. +********************************************************************/ +//DOM-IGNORE-END + +//DOM-IGNORE-BEGIN +#ifndef _USB_CH9_H_ +#define _USB_CH9_H_ +//DOM-IGNORE-END + + +// ***************************************************************************** +// ***************************************************************************** +// Section: USB Descriptors +// ***************************************************************************** +// ***************************************************************************** + +#define USB_DESCRIPTOR_DEVICE 0x01 // bDescriptorType for a Device Descriptor. +#define USB_DESCRIPTOR_CONFIGURATION 0x02 // bDescriptorType for a Configuration Descriptor. +#define USB_DESCRIPTOR_STRING 0x03 // bDescriptorType for a String Descriptor. +#define USB_DESCRIPTOR_INTERFACE 0x04 // bDescriptorType for an Interface Descriptor. +#define USB_DESCRIPTOR_ENDPOINT 0x05 // bDescriptorType for an Endpoint Descriptor. +#define USB_DESCRIPTOR_DEVICE_QUALIFIER 0x06 // bDescriptorType for a Device Qualifier. +#define USB_DESCRIPTOR_OTHER_SPEED 0x07 // bDescriptorType for a Other Speed Configuration. +#define USB_DESCRIPTOR_INTERFACE_POWER 0x08 // bDescriptorType for Interface Power. +#define USB_DESCRIPTOR_OTG 0x09 // bDescriptorType for an OTG Descriptor. + +// ***************************************************************************** +/* USB Device Descriptor Structure + +This struct defines the structure of a USB Device Descriptor. Note that this +structure may need to be packed, or even accessed as bytes, to properly access +the correct fields when used on some device architectures. +*/ +typedef struct __attribute__ ((packed)) _USB_DEVICE_DESCRIPTOR +{ + BYTE bLength; // Length of this descriptor. + BYTE bDescriptorType; // DEVICE descriptor type (USB_DESCRIPTOR_DEVICE). + WORD bcdUSB; // USB Spec Release Number (BCD). + BYTE bDeviceClass; // Class code (assigned by the USB-IF). 0xFF-Vendor specific. + BYTE bDeviceSubClass; // Subclass code (assigned by the USB-IF). + BYTE bDeviceProtocol; // Protocol code (assigned by the USB-IF). 0xFF-Vendor specific. + BYTE bMaxPacketSize0; // Maximum packet size for endpoint 0. + WORD idVendor; // Vendor ID (assigned by the USB-IF). + WORD idProduct; // Product ID (assigned by the manufacturer). + WORD bcdDevice; // Device release number (BCD). + BYTE iManufacturer; // Index of String Descriptor describing the manufacturer. + BYTE iProduct; // Index of String Descriptor describing the product. + BYTE iSerialNumber; // Index of String Descriptor with the device's serial number. + BYTE bNumConfigurations; // Number of possible configurations. +} USB_DEVICE_DESCRIPTOR; + + +// ***************************************************************************** +/* USB Configuration Descriptor Structure + +This struct defines the structure of a USB Configuration Descriptor. Note that this +structure may need to be packed, or even accessed as bytes, to properly access +the correct fields when used on some device architectures. +*/ +typedef struct __attribute__ ((packed)) _USB_CONFIGURATION_DESCRIPTOR +{ + BYTE bLength; // Length of this descriptor. + BYTE bDescriptorType; // CONFIGURATION descriptor type (USB_DESCRIPTOR_CONFIGURATION). + WORD wTotalLength; // Total length of all descriptors for this configuration. + BYTE bNumInterfaces; // Number of interfaces in this configuration. + BYTE bConfigurationValue; // Value of this configuration (1 based). + BYTE iConfiguration; // Index of String Descriptor describing the configuration. + BYTE bmAttributes; // Configuration characteristics. + BYTE bMaxPower; // Maximum power consumed by this configuration. +} USB_CONFIGURATION_DESCRIPTOR; + +// Attributes bits +#define USB_CFG_DSC_REQUIRED 0x80 // Required attribute +#define USB_CFG_DSC_SELF_PWR (0x40|USB_CFG_DSC_REQUIRED) // Device is self powered. +#define USB_CFG_DSC_REM_WAKE (0x20|USB_CFG_DSC_REQUIRED) // Device can request remote wakup + + +// ***************************************************************************** +/* USB Interface Descriptor Structure + +This struct defines the structure of a USB Interface Descriptor. Note that this +structure may need to be packed, or even accessed as bytes, to properly access +the correct fields when used on some device architectures. +*/ +typedef struct __attribute__ ((packed)) _USB_INTERFACE_DESCRIPTOR +{ + BYTE bLength; // Length of this descriptor. + BYTE bDescriptorType; // INTERFACE descriptor type (USB_DESCRIPTOR_INTERFACE). + BYTE bInterfaceNumber; // Number of this interface (0 based). + BYTE bAlternateSetting; // Value of this alternate interface setting. + BYTE bNumEndpoints; // Number of endpoints in this interface. + BYTE bInterfaceClass; // Class code (assigned by the USB-IF). 0xFF-Vendor specific. + BYTE bInterfaceSubClass; // Subclass code (assigned by the USB-IF). + BYTE bInterfaceProtocol; // Protocol code (assigned by the USB-IF). 0xFF-Vendor specific. + BYTE iInterface; // Index of String Descriptor describing the interface. +} USB_INTERFACE_DESCRIPTOR; + + +// ***************************************************************************** +/* USB Endpoint Descriptor Structure + +This struct defines the structure of a USB Endpoint Descriptor. Note that this +structure may need to be packed, or even accessed as bytes, to properly access +the correct fields when used on some device architectures. +*/ +typedef struct __attribute__ ((packed)) _USB_ENDPOINT_DESCRIPTOR +{ + BYTE bLength; // Length of this descriptor. + BYTE bDescriptorType; // ENDPOINT descriptor type (USB_DESCRIPTOR_ENDPOINT). + BYTE bEndpointAddress; // Endpoint address. Bit 7 indicates direction (0=OUT, 1=IN). + BYTE bmAttributes; // Endpoint transfer type. + WORD wMaxPacketSize; // Maximum packet size. + BYTE bInterval; // Polling interval in frames. +} USB_ENDPOINT_DESCRIPTOR; + + +// Endpoint Direction +#define EP_DIR_IN 0x80 // Data flows from device to host +#define EP_DIR_OUT 0x00 // Data flows from host to device + + +// ****************************************************************** +// USB Endpoint Attributes +// ****************************************************************** + +// Section: Transfer Types +#define EP_ATTR_CONTROL (0<<0) // Endoint used for control transfers +#define EP_ATTR_ISOCH (1<<0) // Endpoint used for isochronous transfers +#define EP_ATTR_BULK (2<<0) // Endpoint used for bulk transfers +#define EP_ATTR_INTR (3<<0) // Endpoint used for interrupt transfers + +// Section: Synchronization Types (for isochronous enpoints) +#define EP_ATTR_NO_SYNC (0<<2) // No Synchronization +#define EP_ATTR_ASYNC (1<<2) // Asynchronous +#define EP_ATTR_ADAPT (2<<2) // Adaptive synchronization +#define EP_ATTR_SYNC (3<<2) // Synchronous + +// Section: Usage Types (for isochronous endpoints) +#define EP_ATTR_DATA (0<<4) // Data Endpoint +#define EP_ATTR_FEEDBACK (1<<4) // Feedback endpoint +#define EP_ATTR_IMP_FB (2<<4) // Implicit Feedback data EP + +// Section: Max Packet Sizes +#define EP_MAX_PKT_INTR_LS 8 // Max low-speed interrupt packet +#define EP_MAX_PKT_INTR_FS 64 // Max full-speed interrupt packet +#define EP_MAX_PKT_ISOCH_FS 1023 // Max full-speed isochronous packet +#define EP_MAX_PKT_BULK_FS 64 // Max full-speed bulk packet +#define EP_LG_PKT_BULK_FS 32 // Large full-speed bulk packet +#define EP_MED_PKT_BULK_FS 16 // Medium full-speed bulk packet +#define EP_SM_PKT_BULK_FS 8 // Small full-speed bulk packet + +/* Descriptor IDs +The descriptor ID type defines the information required by the HOST during a +GET_DESCRIPTOR request +*/ +typedef struct +{ + BYTE index; + BYTE type; + UINT16 language_id; + +} DESCRIPTOR_ID; + +// ***************************************************************************** +/* USB OTG Descriptor Structure + +This struct defines the structure of a USB OTG Descriptor. Note that this +structure may need to be packed, or even accessed as bytes, to properly access +the correct fields when used on some device architectures. +*/ +typedef struct __attribute__ ((packed)) _USB_OTG_DESCRIPTOR +{ + BYTE bLength; // Length of this descriptor. + BYTE bDescriptorType; // OTG descriptor type (USB_DESCRIPTOR_OTG). + BYTE bmAttributes; // OTG attributes. +} USB_OTG_DESCRIPTOR; + + +// ****************************************************************** +// Section: USB String Descriptor Structure +// ****************************************************************** +// This structure describes the USB string descriptor. The string +// descriptor provides user-readable information about various aspects of +// the device. The first string desriptor (string descriptor zero (0)), +// provides a list of the number of languages supported by the set of +// string descriptors for this device instead of an actual string. +// +// Note: The strings are in 2-byte-per-character unicode, not ASCII. +// +// Note: This structure only describes the "header" of the string +// descriptor. The actual data (either the language ID array or the +// array of unicode characters making up the string, must be allocated +// immediately following this header with no padding between them. + +typedef struct __attribute__ ((packed)) _USB_STRING_DSC +{ + BYTE bLength; // Size of this descriptor + BYTE bDescriptorType; // Type, USB_DSC_STRING + +} USB_STRING_DESCRIPTOR; + + +// ****************************************************************** +// Section: USB Device Qualifier Descriptor Structure +// ****************************************************************** +// This structure describes the device qualifier descriptor. The device +// qualifier descriptor provides overall device information if the device +// supports "other" speeds. +// +// Note: A high-speed device may support "other" speeds (ie. full or low). +// If so, it may need to implement the the device qualifier and other +// speed descriptors. + +typedef struct __attribute__ ((packed)) _USB_DEVICE_QUALIFIER_DESCRIPTOR +{ + BYTE bLength; // Size of this descriptor + BYTE bType; // Type, always USB_DESCRIPTOR_DEVICE_QUALIFIER + WORD bcdUSB; // USB spec version, in BCD + BYTE bDeviceClass; // Device class code + BYTE bDeviceSubClass; // Device sub-class code + BYTE bDeviceProtocol; // Device protocol + BYTE bMaxPacketSize0; // EP0, max packet size + BYTE bNumConfigurations; // Number of "other-speed" configurations + BYTE bReserved; // Always zero (0) + +} USB_DEVICE_QUALIFIER_DESCRIPTOR; + +// ****************************************************************** +// Section: USB Setup Packet Structure +// ****************************************************************** +// This structure describes the data contained in a USB standard device +// request's setup packet. It is the data packet sent from the host to +// the device to control and configure the device. +// +// Note: Refer to the USB 2.0 specification for additional details on the +// usage of the setup packet and standard device requests. +typedef union __attribute__ ((packed)) +{ + /** Standard Device Requests ***********************************/ + struct __attribute__ ((packed)) + { + BYTE bmRequestType; //from table 9-2 of USB2.0 spec + BYTE bRequest; //from table 9-2 of USB2.0 spec + WORD wValue; //from table 9-2 of USB2.0 spec + WORD wIndex; //from table 9-2 of USB2.0 spec + WORD wLength; //from table 9-2 of USB2.0 spec + }; + struct __attribute__ ((packed)) + { + unsigned :8; + unsigned :8; + WORD_VAL W_Value; //from table 9-2 of USB2.0 spec, allows byte/bitwise access + WORD_VAL W_Index; //from table 9-2 of USB2.0 spec, allows byte/bitwise access + WORD_VAL W_Length; //from table 9-2 of USB2.0 spec, allows byte/bitwise access + }; + struct __attribute__ ((packed)) + { + unsigned Recipient:5; //Device,Interface,Endpoint,Other + unsigned RequestType:2; //Standard,Class,Vendor,Reserved + unsigned DataDir:1; //Host-to-device,Device-to-host + unsigned :8; + BYTE bFeature; //DEVICE_REMOTE_WAKEUP,ENDPOINT_HALT + unsigned :8; + unsigned :8; + unsigned :8; + unsigned :8; + unsigned :8; + }; + struct __attribute__ ((packed)) + { + union // offset description + { // ------ ------------------------ + BYTE bmRequestType; // 0 Bit-map of request type + struct + { + BYTE recipient: 5; // Recipient of the request + BYTE type: 2; // Type of request + BYTE direction: 1; // Direction of data X-fer + }; + }requestInfo; + }; + struct __attribute__ ((packed)) + { + unsigned :8; + unsigned :8; + BYTE bDscIndex; //For Configuration and String DSC Only + BYTE bDescriptorType; //Device,Configuration,String + WORD wLangID; //Language ID + unsigned :8; + unsigned :8; + }; + struct __attribute__ ((packed)) + { + unsigned :8; + unsigned :8; + BYTE_VAL bDevADR; //Device Address 0-127 + BYTE bDevADRH; //Must equal zero + unsigned :8; + unsigned :8; + unsigned :8; + unsigned :8; + }; + struct __attribute__ ((packed)) + { + unsigned :8; + unsigned :8; + BYTE bConfigurationValue; //Configuration Value 0-255 + BYTE bCfgRSD; //Must equal zero (Reserved) + unsigned :8; + unsigned :8; + unsigned :8; + unsigned :8; + }; + struct __attribute__ ((packed)) + { + unsigned :8; + unsigned :8; + BYTE bAltID; //Alternate Setting Value 0-255 + BYTE bAltID_H; //Must equal zero + BYTE bIntfID; //Interface Number Value 0-255 + BYTE bIntfID_H; //Must equal zero + unsigned :8; + unsigned :8; + }; + struct __attribute__ ((packed)) + { + unsigned :8; + unsigned :8; + unsigned :8; + unsigned :8; + BYTE bEPID; //Endpoint ID (Number & Direction) + BYTE bEPID_H; //Must equal zero + unsigned :8; + unsigned :8; + }; + struct __attribute__ ((packed)) + { + unsigned :8; + unsigned :8; + unsigned :8; + unsigned :8; + unsigned EPNum:4; //Endpoint Number 0-15 + unsigned :3; + unsigned EPDir:1; //Endpoint Direction: 0-OUT, 1-IN + unsigned :8; + unsigned :8; + unsigned :8; + }; + + /** End: Standard Device Requests ******************************/ + +} CTRL_TRF_SETUP, SETUP_PKT, *PSETUP_PKT; + + +// ****************************************************************** +// ****************************************************************** +// Section: USB Specification Constants +// ****************************************************************** +// ****************************************************************** + +// Section: Valid PID Values +//DOM-IGNORE-BEGIN +#define PID_OUT 0x1 // PID for an OUT token +#define PID_ACK 0x2 // PID for an ACK handshake +#define PID_DATA0 0x3 // PID for DATA0 data +#define PID_PING 0x4 // Special PID PING +#define PID_SOF 0x5 // PID for a SOF token +#define PID_NYET 0x6 // PID for a NYET handshake +#define PID_DATA2 0x7 // PID for DATA2 data +#define PID_SPLIT 0x8 // Special PID SPLIT +#define PID_IN 0x9 // PID for a IN token +#define PID_NAK 0xA // PID for a NAK handshake +#define PID_DATA1 0xB // PID for DATA1 data +#define PID_PRE 0xC // Special PID PRE (Same as PID_ERR) +#define PID_ERR 0xC // Special PID ERR (Same as PID_PRE) +#define PID_SETUP 0xD // PID for a SETUP token +#define PID_STALL 0xE // PID for a STALL handshake +#define PID_MDATA 0xF // PID for MDATA data + +#define PID_MASK_DATA 0x03 // Data PID mask +#define PID_MASK_DATA_SHIFTED (PID_MASK_DATA << 2) // Data PID shift to proper position +//DOM-IGNORE-END + +// Section: USB Token Types +//DOM-IGNORE-BEGIN +#define USB_TOKEN_OUT 0x01 // U1TOK - OUT token +#define USB_TOKEN_IN 0x09 // U1TOK - IN token +#define USB_TOKEN_SETUP 0x0D // U1TOK - SETUP token +//DOM-IGNORE-END + +// Section: OTG Descriptor Constants + +#define OTG_HNP_SUPPORT 0x02 // OTG Descriptor bmAttributes - HNP support flag +#define OTG_SRP_SUPPORT 0x01 // OTG Descriptor bmAttributes - SRP support flag + +// Section: Endpoint Directions + +#define USB_IN_EP 0x80 // IN endpoint mask +#define USB_OUT_EP 0x00 // OUT endpoint mask + +// Section: Standard Device Requests + +#define USB_REQUEST_GET_STATUS 0 // Standard Device Request - GET STATUS +#define USB_REQUEST_CLEAR_FEATURE 1 // Standard Device Request - CLEAR FEATURE +#define USB_REQUEST_SET_FEATURE 3 // Standard Device Request - SET FEATURE +#define USB_REQUEST_SET_ADDRESS 5 // Standard Device Request - SET ADDRESS +#define USB_REQUEST_GET_DESCRIPTOR 6 // Standard Device Request - GET DESCRIPTOR +#define USB_REQUEST_SET_DESCRIPTOR 7 // Standard Device Request - SET DESCRIPTOR +#define USB_REQUEST_GET_CONFIGURATION 8 // Standard Device Request - GET CONFIGURATION +#define USB_REQUEST_SET_CONFIGURATION 9 // Standard Device Request - SET CONFIGURATION +#define USB_REQUEST_GET_INTERFACE 10 // Standard Device Request - GET INTERFACE +#define USB_REQUEST_SET_INTERFACE 11 // Standard Device Request - SET INTERFACE +#define USB_REQUEST_SYNCH_FRAME 12 // Standard Device Request - SYNCH FRAME + +#define USB_FEATURE_ENDPOINT_HALT 0 // CLEAR/SET FEATURE - Endpoint Halt +#define USB_FEATURE_DEVICE_REMOTE_WAKEUP 1 // CLEAR/SET FEATURE - Device remote wake-up +#define USB_FEATURE_TEST_MODE 2 // CLEAR/SET FEATURE - Test mode + +// Section: Setup Data Constants + +#define USB_SETUP_HOST_TO_DEVICE 0x00 // Device Request bmRequestType transfer direction - host to device transfer +#define USB_SETUP_DEVICE_TO_HOST 0x80 // Device Request bmRequestType transfer direction - device to host transfer +#define USB_SETUP_TYPE_STANDARD 0x00 // Device Request bmRequestType type - standard +#define USB_SETUP_TYPE_CLASS 0x20 // Device Request bmRequestType type - class +#define USB_SETUP_TYPE_VENDOR 0x40 // Device Request bmRequestType type - vendor +#define USB_SETUP_RECIPIENT_DEVICE 0x00 // Device Request bmRequestType recipient - device +#define USB_SETUP_RECIPIENT_INTERFACE 0x01 // Device Request bmRequestType recipient - interface +#define USB_SETUP_RECIPIENT_ENDPOINT 0x02 // Device Request bmRequestType recipient - endpoint +#define USB_SETUP_RECIPIENT_OTHER 0x03 // Device Request bmRequestType recipient - other + +#define USB_SETUP_HOST_TO_DEVICE_BITFIELD (USB_SETUP_HOST_TO_DEVICE>>7) // Device Request bmRequestType transfer direction - host to device transfer - bit definition +#define USB_SETUP_DEVICE_TO_HOST_BITFIELD (USB_SETUP_DEVICE_TO_HOST>>7) // Device Request bmRequestType transfer direction - device to host transfer - bit definition +#define USB_SETUP_TYPE_STANDARD_BITFIELD (USB_SETUP_TYPE_STANDARD>>5) // Device Request bmRequestType type - standard +#define USB_SETUP_TYPE_CLASS_BITFIELD (USB_SETUP_TYPE_CLASS>>5) // Device Request bmRequestType type - class +#define USB_SETUP_TYPE_VENDOR_BITFIELD (USB_SETUP_TYPE_VENDOR>>5) // Device Request bmRequestType type - vendor +#define USB_SETUP_RECIPIENT_DEVICE_BITFIELD (USB_SETUP_RECIPIENT_DEVICE) // Device Request bmRequestType recipient - device +#define USB_SETUP_RECIPIENT_INTERFACE_BITFIELD (USB_SETUP_RECIPIENT_INTERFACE) // Device Request bmRequestType recipient - interface +#define USB_SETUP_RECIPIENT_ENDPOINT_BITFIELD (USB_SETUP_RECIPIENT_ENDPOINT) // Device Request bmRequestType recipient - endpoint +#define USB_SETUP_RECIPIENT_OTHER_BITFIELD (USB_SETUP_RECIPIENT_OTHER) // Device Request bmRequestType recipient - other + +// Section: OTG SET FEATURE Constants + +#define OTG_FEATURE_B_HNP_ENABLE 3 // SET FEATURE OTG - Enable B device to perform HNP +#define OTG_FEATURE_A_HNP_SUPPORT 4 // SET FEATURE OTG - A device supports HNP +#define OTG_FEATURE_A_ALT_HNP_SUPPORT 5 // SET FEATURE OTG - Another port on the A device supports HNP + +// Section: USB Endpoint Transfer Types + +#define USB_TRANSFER_TYPE_CONTROL 0x00 // Endpoint is a control endpoint. +#define USB_TRANSFER_TYPE_ISOCHRONOUS 0x01 // Endpoint is an isochronous endpoint. +#define USB_TRANSFER_TYPE_BULK 0x02 // Endpoint is a bulk endpoint. +#define USB_TRANSFER_TYPE_INTERRUPT 0x03 // Endpoint is an interrupt endpoint. + +// Section: Standard Feature Selectors for CLEAR_FEATURE Requests +#define USB_FEATURE_ENDPOINT_STALL 0 // Endpoint recipient +#define USB_FEATURE_DEVICE_REMOTE_WAKEUP 1 // Device recipient +#define USB_FEATURE_TEST_MODE 2 // Device recipient + + +// Section: USB Class Code Definitions +#define USB_HUB_CLASSCODE 0x09 // Class code for a hub. + +/******************************************************************** +USB Endpoint Definitions +USB Standard EP Address Format: DIR:X:X:X:EP3:EP2:EP1:EP0 +This is used in the descriptors. +********************************************************************/ +#define _EP_IN 0x80 +#define _EP_OUT 0x00 +#define _EP01_OUT 0x01 +#define _EP01_IN 0x81 +#define _EP02_OUT 0x02 +#define _EP02_IN 0x82 +#define _EP03_OUT 0x03 +#define _EP03_IN 0x83 +#define _EP04_OUT 0x04 +#define _EP04_IN 0x84 +#define _EP05_OUT 0x05 +#define _EP05_IN 0x85 +#define _EP06_OUT 0x06 +#define _EP06_IN 0x86 +#define _EP07_OUT 0x07 +#define _EP07_IN 0x87 +#define _EP08_OUT 0x08 +#define _EP08_IN 0x88 +#define _EP09_OUT 0x09 +#define _EP09_IN 0x89 +#define _EP10_OUT 0x0A +#define _EP10_IN 0x8A +#define _EP11_OUT 0x0B +#define _EP11_IN 0x8B +#define _EP12_OUT 0x0C +#define _EP12_IN 0x8C +#define _EP13_OUT 0x0D +#define _EP13_IN 0x8D +#define _EP14_OUT 0x0E +#define _EP14_IN 0x8E +#define _EP15_OUT 0x0F +#define _EP15_IN 0x8F + +/* Configuration Attributes */ +#define _DEFAULT (0x01<<7) //Default Value (Bit 7 is set) +#define _SELF (0x01<<6) //Self-powered (Supports if set) +#define _RWU (0x01<<5) //Remote Wakeup (Supports if set) +#define _HNP (0x01 << 1) //HNP (Supports if set) +#define _SRP (0x01) //SRP (Supports if set) + +/* Endpoint Transfer Type */ +#define _CTRL 0x00 //Control Transfer +#define _ISO 0x01 //Isochronous Transfer +#define _BULK 0x02 //Bulk Transfer + +#define _INTERRUPT 0x03 //Interrupt Transfer +#if defined(__18CXX) || defined(__C30__) || defined __XC16__ + #define _INT 0x03 //Interrupt Transfer +#endif + +/* Isochronous Endpoint Synchronization Type */ +#define _NS (0x00<<2) //No Synchronization +#define _AS (0x01<<2) //Asynchronous +#define _AD (0x02<<2) //Adaptive +#define _SY (0x03<<2) //Synchronous + +/* Isochronous Endpoint Usage Type */ +#define _DE (0x00<<4) //Data endpoint +#define _FE (0x01<<4) //Feedback endpoint +#define _IE (0x02<<4) //Implicit feedback Data endpoint + +//These are the directional indicators used for the USBTransferOnePacket() +// function. +#define OUT_FROM_HOST 0 +#define IN_TO_HOST 1 + +#endif // _USB_CH9_H_ +/************************************************************************* + * EOF + */ + diff --git a/software/front/US_Firmware.X/usb/usb_common.h b/software/front/US_Firmware.X/usb/usb_common.h new file mode 100644 index 0000000..106e8f7 --- /dev/null +++ b/software/front/US_Firmware.X/usb/usb_common.h @@ -0,0 +1,601 @@ +/****************************************************************************** + + Common USB Library Definitions (Header File) + +Summary: + This file defines data types, constants, and macros that are common to + multiple layers of the Microchip USB Firmware Stack. + +Description: + This file defines data types, constants, and macros that are common to + multiple layers of the Microchip USB Firmware Stack. + + This file is located in the "\\\Microchip\\Include\\USB" + directory. + + When including this file in a new project, this file can either be + referenced from the directory in which it was installed or copied + directly into the user application folder. If the first method is + chosen to keep the file located in the folder in which it is installed + then include paths need to be added so that the library and the + application both know where to reference each others files. If the + application folder is located in the same folder as the Microchip + folder (like the current demo folders), then the following include + paths need to be added to the application's project: + + . + ..\\..\\MicrochipInclude + + If a different directory structure is used, modify the paths as + required. An example using absolute paths instead of relative paths + would be the following: + + C:\\Microchip Solutions\\Microchip\\Include + + C:\\Microchip Solutions\\My Demo Application +*******************************************************************************/ +//DOM-IGNORE-BEGIN +/******************************************************************************* + + FileName: usb_common.h + Dependencies: See included files, below. + Processor: PIC18/PIC24/PIC32MX microcontrollers with USB module + Compiler: C18 v3.13+/C30 v2.01+/C32 v0.00.18+ + Company: Microchip Technology, Inc. + +Software License Agreement + +The software supplied herewith by Microchip Technology Incorporated +(the “Company”) for its PICmicro® Microcontroller is intended and +supplied to you, the Company’s customer, for use solely and +exclusively on Microchip PICmicro Microcontroller products. The +software is owned by the Company and/or its supplier, and is +protected under applicable copyright laws. All rights are reserved. +Any use in violation of the foregoing restrictions may subject the +user to criminal sanctions under applicable laws, as well as to +civil liability for the breach of the terms and conditions of this +license. + +THIS SOFTWARE IS PROVIDED IN AN “AS IS” CONDITION. NO WARRANTIES, +WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED +TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT, +IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. + +*******************************************************************************/ +//DOM-IGNORE-END + +//DOM-IGNORE-BEGIN +/******************************************************************** + Change History: + Rev Description + ---- ----------- + 2.6 Moved many of the USB events + 2.6a Changed the limit of USB_EVENT from UINT_MAX to INT_MAX + 2.7 No change +********************************************************************/ +//DOM-IGNORE-END + + +//DOM-IGNORE-BEGIN +#ifndef _USB_COMMON_H_ +#define _USB_COMMON_H_ +//DOM-IGNORE-END + +#include + +// ***************************************************************************** +// ***************************************************************************** +// Section: USB Constants +// ***************************************************************************** +// ***************************************************************************** + +// Section: Error Code Values + +#define USB_SUCCESS 0x00 // USB operation successful. +#define USB_INVALID_STATE 0x01 // Operation cannot be performed in current state. +#define USB_BUSY 0x02 // A transaction is already in progress. +#define USB_ILLEGAL_REQUEST 0x03 // Cannot perform requested operation. +#define USB_INVALID_CONFIGURATION 0x04 // Configuration descriptor not found. +#define USB_MEMORY_ALLOCATION_ERROR 0x05 // Out of dynamic memory. +#define USB_UNKNOWN_DEVICE 0x06 // Device with specified address is not attached. +#define USB_CANNOT_ENUMERATE 0x07 // Cannot enumerate the attached device. +#define USB_EVENT_QUEUE_FULL 0x08 // Event queue was full when an event occured. +#define USB_ENDPOINT_BUSY 0x10 // Endpoint is currently processing a transaction. +#define USB_ENDPOINT_STALLED 0x11 // Endpoint is currently stalled. User must clear the condition. +#define USB_ENDPOINT_ERROR 0x12 // Will need more than this eventually +#define USB_ENDPOINT_ERROR_ILLEGAL_PID 0x13 // Illegal PID received. +#define USB_ENDPOINT_NOT_FOUND 0x14 // Requested endpoint does not exist on device. +#define USB_ENDPOINT_ILLEGAL_DIRECTION 0x15 // Reads must be performe on IN endpoints, writes on OUT endpoints. +//#define USB_ENDPOINT_TRANSACTION_IN_PROGRESS 0x16 +#define USB_ENDPOINT_NAK_TIMEOUT 0x17 // Too many NAK's occurred while waiting for the current transaction. +#define USB_ENDPOINT_ILLEGAL_TYPE 0x18 // Transfer type must match endpoint description. +#define USB_ENDPOINT_UNRESOLVED_STATE 0x19 // Endpoint is in an unknown state after completing a transaction. +#define USB_ENDPOINT_ERROR_BIT_STUFF 0x20 // USB Module - Bit stuff error. +#define USB_ENDPOINT_ERROR_DMA 0x21 // USB Module - DMA error. +#define USB_ENDPOINT_ERROR_TIMEOUT 0x22 // USB Module - Bus timeout. +#define USB_ENDPOINT_ERROR_DATA_FIELD 0x23 // USB Module - Data field size error. +#define USB_ENDPOINT_ERROR_CRC16 0x24 // USB Module - CRC16 failure. +#define USB_ENDPOINT_ERROR_END_OF_FRAME 0x25 // USB Module - End of Frame error. +#define USB_ENDPOINT_ERROR_PID_CHECK 0x26 // USB Module - Illegal PID received. +#define USB_ENDPOINT_ERROR_BMX 0x27 // USB Module - Bus Matrix error. +#define USB_ERROR_INSUFFICIENT_POWER 0x28 // Too much power was requested + +// Section: Return values for USBHostDeviceStatus() + +#define USB_DEVICE_STATUS 0x30 // Offset for USBHostDeviceStatus() return codes +#define USB_DEVICE_ATTACHED (USB_DEVICE_STATUS | 0x30) // Device is attached and running +#define USB_DEVICE_DETACHED (USB_DEVICE_STATUS | 0x01) // No device is attached +#define USB_DEVICE_ENUMERATING (USB_DEVICE_STATUS | 0x02) // Device is enumerating +#define USB_HOLDING_OUT_OF_MEMORY (USB_DEVICE_STATUS | 0x03) // Not enough heap space available +#define USB_HOLDING_UNSUPPORTED_DEVICE (USB_DEVICE_STATUS | 0x04) // Invalid configuration or unsupported class +#define USB_HOLDING_UNSUPPORTED_HUB (USB_DEVICE_STATUS | 0x05) // Hubs are not supported +#define USB_HOLDING_INVALID_CONFIGURATION (USB_DEVICE_STATUS | 0x06) // Invalid configuration requested +#define USB_HOLDING_PROCESSING_CAPACITY (USB_DEVICE_STATUS | 0x07) // Processing requirement excessive +#define USB_HOLDING_POWER_REQUIREMENT (USB_DEVICE_STATUS | 0x08) // Power requirement excessive +#define USB_HOLDING_CLIENT_INIT_ERROR (USB_DEVICE_STATUS | 0x09) // Client driver failed to initialize +#define USB_DEVICE_SUSPENDED (USB_DEVICE_STATUS | 0x0A) // Device is suspended + +#define USB_ERROR_CLASS_DEFINED 0x50 // Offset for application defined errors + +#define USB_SINGLE_DEVICE_ADDRESS 0x01 // Default USB device address (single device support) + + +// ***************************************************************************** +// ***************************************************************************** +// Section: USB Data Types +// ***************************************************************************** +// ***************************************************************************** + +// ***************************************************************************** +/* Data Transfer Flags + +The following flags are used in the flags parameter of the "USBDEVTransferData" +and "USBHALTransferData" routines. They can be accessed by the bitfield +definitions or the macros can be OR'd together to identify the endpoint number +and properties of the data transfer. + + + 7 6 5 4 3 2 1 0 - Field name + | | | | \_____/ + | | | | +----- ep_num - Endpoint number + | | | +---------- zero_pkt - End transfer with short or zero-sized packet + | | +------------ dts - 0=DATA0 packet, 1=DATA1 packet + | +-------------- force_dts - Force data toggle sync to match dts field + +---------------- direction - Transfer direction: 0=Receive, 1=Transmit + +*/ + +typedef union +{ + BYTE bitmap; + struct + { + BYTE ep_num: 4; + BYTE zero_pkt: 1; + BYTE dts: 1; + BYTE force_dts: 1; + BYTE direction: 1; + }field; + +} TRANSFER_FLAGS; + +// ***************************************************************************** +/* Data Transfer Flags, Endpoint Number Constants + +These macros can be used as values for the "ep_num" field of the TRANSFER_FLAGS +data type. +*/ +#define USB_EP0 0 // +#define USB_EP1 1 // +#define USB_EP2 2 // +#define USB_EP3 3 // +#define USB_EP4 4 // +#define USB_EP5 5 // +#define USB_EP6 6 // +#define USB_EP7 7 // +#define USB_EP8 8 // +#define USB_EP9 9 // +#define USB_EP10 10 // +#define USB_EP11 11 // +#define USB_EP12 12 // +#define USB_EP13 13 // +#define USB_EP14 14 // +#define USB_EP15 15 // + +// ***************************************************************************** +/* Data Transfer Flags, Bitmap Constants + +These macros can be used as values for the "bitmap" field of the TRANSFER_FLAGS +data type. +*/ +#define USB_TRANSMIT 0x80 // Data will be transmitted to the USB +#define USB_RECEIVE 0x00 // Data will be received from the USB +#define USB_FORCE_DTS 0x40 // Forces data toggle sync as below: +#define USB_DTS_MASK 0x20 // Mask for DTS bit (below) +#define USB_ZERO_PKT 0x10 // End transfer w/a short or zero-length packet +#define USB_DATA0 0x00|USB_FORCE_DTS // Force DATA0 +#define USB_DATA1 0x20|USB_FORCE_DTS // Force DATA1 +#define USB_SETUP_PKT USB_RECEIVE|USB_DATA0|USB_EP0 // Setup Packet +#define USB_SETUP_DATA USB_DATA1|USB_ZERO_PKT|USB_EP0 // Setup-transfer Data Packet +#define USB_SETUP_STATUS USB_DATA1|USB_EP0 // Setup-transfer Status Packet +#define USB_EP_NUM_MASK 0x0F // Endpoint number (ep_num) mask + +// ***************************************************************************** +/* Data Transfer Flags, Initialization Macro + +This macro can be used with the above bitmap constants to initialize a +TRANSFER_FLAGS value. It provides the correct data type to avoid compiler +warnings. +*/ +#define XFLAGS(f) ((TRANSFER_FLAGS)((BYTE)(f))) // Initialization Macro + + +// ***************************************************************************** +/* USB Events + +This enumeration identifies USB events that occur. It is used to +inform USB drivers and applications of events on the bus. It is passed +as a parameter to the event-handling routine, which must match the +prototype of the USB_CLIENT_EVENT_HANDLER data type, when an event occurs. +*/ + +typedef enum +{ + // No event occured (NULL event) + EVENT_NONE = 0, + + EVENT_DEVICE_STACK_BASE = 1, + + EVENT_HOST_STACK_BASE = 100, + + // A USB hub has been attached. Hub support is not currently available. + EVENT_HUB_ATTACH, + + // A stall has occured. This event is not used by the Host stack. + EVENT_STALL, + + // VBus SRP Pulse, (VBus > 2.0v), Data: BYTE Port Number (For future support) + EVENT_VBUS_SES_REQUEST, + + // The voltage on Vbus has dropped below 4.4V/4.7V. The application is + // responsible for monitoring Vbus and calling USBHostVbusEvent() with this + // event. This event is not generated by the stack. + EVENT_VBUS_OVERCURRENT, + + // An enumerating device is requesting power. The data associated with this + // event is of the data type USB_VBUS_POWER_EVENT_DATA. Note that + // the requested current is specified in 2mA units, identical to the power + // specification in a device's Configuration Descriptor. + EVENT_VBUS_REQUEST_POWER, + + // Release power from a detaching device. The data associated with this + // event is of the data type USB_VBUS_POWER_EVENT_DATA. The current value + // specified in the data can be ignored. + EVENT_VBUS_RELEASE_POWER, + + // The voltage on Vbus is good, and the USB OTG module can be powered on. + // The application is responsible for monitoring Vbus and calling + // USBHostVbusEvent() with this event. This event is not generated by the + // stack. If the application issues an EVENT_VBUS_OVERCURRENT, then no + // power will be applied to that port, and no device can attach to that + // port, until the application issues the EVENT_VBUS_POWER_AVAILABLE for + // the port. + EVENT_VBUS_POWER_AVAILABLE, + + // The attached device is not supported by the application. The attached + // device is not allowed to enumerate. + EVENT_UNSUPPORTED_DEVICE, + + // Cannot enumerate the attached device. This is generated if communication + // errors prevent the device from enumerating. + EVENT_CANNOT_ENUMERATE, + + // The client driver cannot initialize the the attached device. The + // attached is not allowed to enumerate. + EVENT_CLIENT_INIT_ERROR, + + // The Host stack does not have enough heap space to enumerate the device. + // Check the amount of heap space allocated to the application. In MPLAB, + // select Project> Build Options...> Project. Select the appropriate + // linker tab, and inspect the "Heap size" entry. + EVENT_OUT_OF_MEMORY, + + // Unspecified host error. (This error should not occur). + EVENT_UNSPECIFIED_ERROR, + + // USB cable has been detached. The data associated with this event is the + // address of detached device, a single BYTE. + EVENT_DETACH, + + // A USB transfer has completed. The data associated with this event is of + // the data type HOST_TRANSFER_DATA if the event is generated from the host + // stack. + EVENT_TRANSFER, + + // A USB Start of Frame token has been received. This event is not + // used by the Host stack. + EVENT_SOF, + + // Device-mode resume received. This event is not used by the Host stack. + EVENT_RESUME, + + // Device-mode suspend/idle event received. This event is not used by the + // Host stack. + EVENT_SUSPEND, + + // Device-mode bus reset received. This event is not used by the Host + // stack. + EVENT_RESET, + + // In Host mode, an isochronous data read has completed. This event will only + // be passed to the DataEventHandler, which is only utilized if it is defined. + // Note that the DataEventHandler is called from within the USB interrupt, so + // it is critical that it return in time for the next isochronous data packet. + EVENT_DATA_ISOC_READ, + + // In Host mode, an isochronous data write has completed. This event will only + // be passed to the DataEventHandler, which is only utilized if it is defined. + // Note that the DataEventHandler is called from within the USB interrupt, so + // it is critical that it return in time for the next isochronous data packet. + EVENT_DATA_ISOC_WRITE, + + // In Host mode, this event gives the application layer the option to reject + // a client driver that was selected by the stack. This is needed when multiple + // devices are supported by class level support, but one configuration and client + // driver is preferred over another. Since configuration number is not guaranteed, + // the stack cannot do this automatically. This event is issued only when + // looking through configuration descriptors; the driver selected at the device + // level cannot be overridden, since there shouldn't be any other options to + // choose from. + EVENT_OVERRIDE_CLIENT_DRIVER_SELECTION, + + // In host mode, this event is thrown for every millisecond that passes. Like all + // events, this is thrown from the USBHostTasks() or USBTasks() routine so its + // timeliness will be determined by the rate that these functions are called. If + // they are not called very often, then the 1ms events will build up and be + // dispatched as the USBTasks() or USBHostTasks() functions are called (one event + // per call to these functions. + EVENT_1MS, + + // Class-defined event offsets start here: + EVENT_GENERIC_BASE = 400, // Offset for Generic class events + + EVENT_MSD_BASE = 500, // Offset for Mass Storage Device class events + + EVENT_HID_BASE = 600, // Offset for Human Interface Device class events + + EVENT_PRINTER_BASE = 700, // Offset for Printer class events + + EVENT_CDC_BASE = 800, // Offset for CDC class events + + EVENT_CHARGER_BASE = 900, // Offset for Charger client driver events. + + EVENT_AUDIO_BASE = 1000, // Offset for Audio client driver events. + + EVENT_USER_BASE = 10000, // Add integral values to this event number + // to create user-defined events. + + // There was a transfer error on the USB. The data associated with this + // event is of data type HOST_TRANSFER_DATA. + EVENT_BUS_ERROR = INT_MAX + +} USB_EVENT; + + +// ***************************************************************************** +/* EVENT_TRANSFER Data + +This data structure is passed to the appropriate layer's +USB_EVENT_HANDLER when an EVT_XFER event has occured, indicating +that a transfer has completed on the USB. It provides the endpoint, +direction, and actual size of the transfer. + */ + +typedef struct _transfer_event_data +{ + TRANSFER_FLAGS flags; // Transfer flags (see above) + UINT32 size; // Actual number of bytes transferred + BYTE pid; // Packet ID + +} USB_TRANSFER_EVENT_DATA; + + +// ***************************************************************************** +/* EVENT_VBUS_REQUEST_POWER and EVENT_VBUS_RELEASE_POWER Data + +This data structure is passed to the appropriate layer's +USB_EVENT_HANDLER when an EVENT_VBUS_REQUEST_POWER or EVENT_VBUS_RELEASE_POWER +event has occured, indicating that a change in Vbus power is being requested. +*/ + +typedef struct _vbus_power_data +{ + BYTE port; // Physical port number + BYTE current; // Current in 2mA units +} USB_VBUS_POWER_EVENT_DATA; + + +// ***************************************************************************** +/* USB_OVERRIDE_CLIENT_DRIVER_EVENT_DATA Data + +This data structure is passed to the application layer when a client driver is +select, in case multiple client drivers can support a particular device. +*/ +typedef struct _override_client_driver_data +{ + WORD idVendor; + WORD idProduct; + BYTE bDeviceClass; + BYTE bDeviceSubClass; + BYTE bDeviceProtocol; +} USB_OVERRIDE_CLIENT_DRIVER_EVENT_DATA; + + +// ***************************************************************************** +/* EVT_STALL Data + +The EVT_STALL event has a 16-bit data value associated with it where +a bit is set in the position for each endpoint that is currently +stalled (ie. bit 0 = EP0, bit 1 = EP1, etc.) +*/ + + +// ***************************************************************************** +// ***************************************************************************** +// Section: Event Handling Routines +// ***************************************************************************** +// ***************************************************************************** + +/******************************************************************************* + Function: + BOOL ( USB_EVENT event, + void *data, unsigned int size ) + + Description: + This routine is a "call out" routine that must be implemented by + any layer of the USB SW Stack (except the HAL which is at the + root of the event-call tree that needs to receive events. When + an event occurs, the HAL calls the next higher layer in the + stack to handle the event. Each layer either handles the event + or calls the layer above it to handle the event. Events are + identified by the "event" parameter and may have associated + data. If the higher layer was able to handle the event, it + should return TRUE. If not, it should return FALSE. + + Preconditions: + USBInitialize must have been called to initialize the USB SW + Stack. + + Paramters: + USB_EVENT event - Identifies the bus event that occured + void *data - Pointer to event-specific data + unsigned int size - Size of the event-specific data + + Return Values: + None + + Remarks: + The function is name is defined by the layer that implements + it. A pointer to the function will be placed by into a table + that the lower-layer will use to call it. This requires the + function to use a specific call "signature" (return data type + and values and data parameter types and values). + +*******************************************************************************/ + +typedef BOOL (*USB_EVENT_HANDLER) ( USB_EVENT event, void *data, unsigned int size ); + + +// ***************************************************************************** +// ***************************************************************************** +// Section: USB Application Program Interface (API) Routines +// ***************************************************************************** +// ***************************************************************************** + +/**************************************************************************** + Function: + BOOL USBInitialize ( unsigned long flags ) + + Summary: + This interface initializes the variables of the USB host stack. + + Description: + This interface initializes the USB stack. + + Precondition: + None + + Parameters: + flags - reserved + + Return Values: + TRUE - Initialization successful + FALSE - Initialization failure + + Remarks: + This interface is implemented as a macro that can be defined by the + application or by default is defined correctly for the stack mode. + + ***************************************************************************/ + +#ifndef USBInitialize + #if defined( USB_SUPPORT_DEVICE ) + #if defined( USB_SUPPORT_HOST ) + #if defined( USB_SUPPORT_OTG ) + #error "USB OTG is not yet supported." + #else + #define USBInitialize(f) \ + (USBDEVInitialize(f) && USBHostInit(f)) ? \ + TRUE : FALSE + #endif + #else + #define USBInitialize(f) USBDeviceInit() + #endif + #else + #if defined( USB_SUPPORT_HOST ) + #define USBInitialize(f) USBHostInit(f) + #else + #error "Application must define support mode in usb_config.h" + #endif + #endif +#endif + + +/**************************************************************************** + Function: + void USBTasks( void ) + + Summary: + This function executes the tasks for USB operation. + + Description: + This function executes the tasks for USB host operation. It must be + executed on a regular basis to keep everything functioning. + + Precondition: + USBInitialize() has been called. + + Parameters: + None + + Returns: + None + + Remarks: + This interface is implemented as a macro that can be defined by the + application or by default is defined correctly for the stack mode. + + ***************************************************************************/ + +#ifndef USBTasks // Implemented as a macro that can be overridden. + #if defined( USB_SUPPORT_DEVICE ) + #if defined( USB_SUPPORT_HOST ) + #if defined( USB_SUPPORT_OTG ) + #error "USB OTG is not yet supported." + #else + #define USBTasks() {USBHostTasks(); USBHALHandleBusEvent();} + #endif + #else + #define USBTasks() USBDeviceTasks() + #endif + #else + #if defined( USB_SUPPORT_HOST ) + #define USBTasks() USBHostTasks() + #else + #error "Application must define support mode in usb_config.h" + #endif + #endif +#endif + +#define USB_PING_PONG__NO_PING_PONG 0x00 //0b00 +#define USB_PING_PONG__EP0_OUT_ONLY 0x01 //0b01 +#define USB_PING_PONG__FULL_PING_PONG 0x02 //0b10 +#define USB_PING_PONG__ALL_BUT_EP0 0x03 //0b11 + +#endif // _USB_COMMON_H_ +/************************************************************************* + * EOF + */ + diff --git a/software/front/US_Firmware.X/usb/usb_config.h b/software/front/US_Firmware.X/usb/usb_config.h new file mode 100644 index 0000000..c230c3a --- /dev/null +++ b/software/front/US_Firmware.X/usb/usb_config.h @@ -0,0 +1,193 @@ +/******************************************************************** + FileName: usb_config.h + Dependencies: Always: GenericTypeDefs.h, usb_device.h + Situational: usb_function_hid.h, usb_function_cdc.h, usb_function_msd.h, etc. + Processor: PIC18 or PIC24 USB Microcontrollers + Hardware: The code is natively intended to be used on the following + hardware platforms: PICDEM� FS USB Demo Board, + PIC18F87J50 FS USB Plug-In Module, or + Explorer 16 + PIC24 USB PIM. The firmware may be + modified for use on other USB platforms by editing the + HardwareProfile.h file. + Complier: Microchip C18 (for PIC18) or C30 (for PIC24) + Company: Microchip Technology, Inc. + + Software License Agreement: + + The software supplied herewith by Microchip Technology Incorporated + (the "Company") for its PIC(R) Microcontroller is intended and + supplied to you, the Company's customer, for use solely and + exclusively on Microchip PIC Microcontroller products. The + software is owned by the Company and/or its supplier, and is + protected under applicable copyright laws. All rights are reserved. + Any use in violation of the foregoing restrictions may subject the + user to criminal sanctions under applicable laws, as well as to + civil liability for the breach of the terms and conditions of this + license. + + THIS SOFTWARE IS PROVIDED IN AN "AS IS" CONDITION. NO WARRANTIES, + WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED + TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT, + IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR + CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. + +******************************************************************** + File Description: + + Change History: + Rev Date Description + 1.0 11/19/2004 Initial release + 2.1 02/26/2007 Updated for simplicity and to use common + coding style + *******************************************************************/ + +/********************************************************************* + * Descriptor specific type definitions are defined in: usbd.h + ********************************************************************/ + +#ifndef USBCFG_H +#define USBCFG_H + +/** DEFINITIONS ****************************************************/ +#define USB_EP0_BUFF_SIZE 8 // Valid Options: 8, 16, 32, or 64 bytes. + // Using larger options take more SRAM, but + // does not provide much advantage in most types + // of applications. Exceptions to this, are applications + // that use EP0 IN or OUT for sending large amounts of + // application related data. + +#define USB_MAX_NUM_INT 1 //Set this number to match the maximum interface number used in the descriptors for this firmware project +#define USB_MAX_EP_NUMBER 1 //Set this number to match the maximum endpoint number used in the descriptors for this firmware project + +//Device descriptor - if these two definitions are not defined then +// a ROM USB_DEVICE_DESCRIPTOR variable by the exact name of device_dsc +// must exist. +#define USB_USER_DEVICE_DESCRIPTOR &device_dsc +#define USB_USER_DEVICE_DESCRIPTOR_INCLUDE extern ROM USB_DEVICE_DESCRIPTOR device_dsc + +//Configuration descriptors - if these two definitions do not exist then +// a ROM BYTE *ROM variable named exactly USB_CD_Ptr[] must exist. +#define USB_USER_CONFIG_DESCRIPTOR USB_CD_Ptr +#define USB_USER_CONFIG_DESCRIPTOR_INCLUDE extern ROM BYTE *ROM USB_CD_Ptr[] + +//------------------------------------------------------------------------------ +//Select an endpoint ping-pong bufferring mode. Some microcontrollers only +//support certain modes. For most applications, it is recommended to use either +//the USB_PING_PONG__FULL_PING_PONG or USB_PING_PONG__EP0_OUT_ONLY options. +//The other settings are supported on some devices, but they are not +//recommended, as they offer inferior control transfer timing performance. +//See inline code comments in usb_device.c for additional details. +//Enabling ping pong bufferring on an endpoint generally increases firmware +//overhead somewhat, but when both buffers are used simultaneously in the +//firmware, can offer better sustained bandwidth, especially for OUT endpoints. +//------------------------------------------------------ +//#define USB_PING_PONG_MODE USB_PING_PONG__NO_PING_PONG //Not recommended +#define USB_PING_PONG_MODE USB_PING_PONG__FULL_PING_PONG //A good all around setting +//#define USB_PING_PONG_MODE USB_PING_PONG__EP0_OUT_ONLY //Another good setting +//#define USB_PING_PONG_MODE USB_PING_PONG__ALL_BUT_EP0 //Not recommended +//------------------------------------------------------------------------------ + + +//------------------------------------------------------------------------------ +//Select a USB stack operating mode. In the USB_INTERRUPT mode, the USB stack +//main task handler gets called only when necessary as an interrupt handler. +//This can potentially minimize CPU utilization, but adds context saving +//and restoring overhead associated with interrupts, which can potentially +//decrease performance. +//When the USB_POLLING mode is selected, the USB stack main task handler +//(ex: USBDeviceTasks()) must be called periodically by the application firmware +//at a minimum rate as described in the inline code comments in usb_device.c. +//------------------------------------------------------ +#define USB_POLLING +//#define USB_INTERRUPT +//------------------------------------------------------------------------------ + +/* Parameter definitions are defined in usb_device.h */ +#define USB_PULLUP_OPTION USB_PULLUP_ENABLE +//#define USB_PULLUP_OPTION USB_PULLUP_DISABLE + +#define USB_TRANSCEIVER_OPTION USB_INTERNAL_TRANSCEIVER +//External Transceiver support is not available on all product families. Please +// refer to the product family datasheet for more information if this feature +// is available on the target processor. +//#define USB_TRANSCEIVER_OPTION USB_EXTERNAL_TRANSCEIVER + +#define USB_SPEED_OPTION USB_FULL_SPEED +//#define USB_SPEED_OPTION USB_LOW_SPEED //(this mode is only supported on some microcontrollers) + +//------------------------------------------------------------------------------------------------------------------ +//Option to enable auto-arming of the status stage of control transfers, if no +//"progress" has been made for the USB_STATUS_STAGE_TIMEOUT value. +//If progress is made (any successful transactions completing on EP0 IN or OUT) +//the timeout counter gets reset to the USB_STATUS_STAGE_TIMEOUT value. +// +//During normal control transfer processing, the USB stack or the application +//firmware will call USBCtrlEPAllowStatusStage() as soon as the firmware is finished +//processing the control transfer. Therefore, the status stage completes as +//quickly as is physically possible. The USB_ENABLE_STATUS_STAGE_TIMEOUTS +//feature, and the USB_STATUS_STAGE_TIMEOUT value are only relevant, when: +//1. The application uses the USBDeferStatusStage() API function, but never calls +// USBCtrlEPAllowStatusStage(). Or: +//2. The application uses host to device (OUT) control transfers with data stage, +// and some abnormal error occurs, where the host might try to abort the control +// transfer, before it has sent all of the data it claimed it was going to send. +// +//If the application firmware never uses the USBDeferStatusStage() API function, +//and it never uses host to device control transfers with data stage, then +//it is not required to enable the USB_ENABLE_STATUS_STAGE_TIMEOUTS feature. + +#define USB_ENABLE_STATUS_STAGE_TIMEOUTS //Comment this out to disable this feature. + +//Section 9.2.6 of the USB 2.0 specifications indicate that: +//1. Control transfers with no data stage: Status stage must complete within +// 50ms of the start of the control transfer. +//2. Control transfers with (IN) data stage: Status stage must complete within +// 50ms of sending the last IN data packet in fullfilment of the data stage. +//3. Control transfers with (OUT) data stage: No specific status stage timing +// requirement. However, the total time of the entire control transfer (ex: +// including the OUT data stage and IN status stage) must not exceed 5 seconds. +// +//Therefore, if the USB_ENABLE_STATUS_STAGE_TIMEOUTS feature is used, it is suggested +//to set the USB_STATUS_STAGE_TIMEOUT value to timeout in less than 50ms. If the +//USB_ENABLE_STATUS_STAGE_TIMEOUTS feature is not enabled, then the USB_STATUS_STAGE_TIMEOUT +//parameter is not relevant. + +#define USB_STATUS_STAGE_TIMEOUT (BYTE)45 //Approximate timeout in milliseconds, except when + //USB_POLLING mode is used, and USBDeviceTasks() is called at < 1kHz + //In this special case, the timeout becomes approximately: +//Timeout(in milliseconds) = ((1000 * (USB_STATUS_STAGE_TIMEOUT - 1)) / (USBDeviceTasks() polling frequency in Hz)) +//------------------------------------------------------------------------------------------------------------------ + +#define USB_SUPPORT_DEVICE + +#define USB_NUM_STRING_DESCRIPTORS 3 + +//#define USB_INTERRUPT_LEGACY_CALLBACKS +#define USB_ENABLE_ALL_HANDLERS +//#define USB_ENABLE_SUSPEND_HANDLER +//#define USB_ENABLE_WAKEUP_FROM_SUSPEND_HANDLER +//#define USB_ENABLE_SOF_HANDLER +//#define USB_ENABLE_ERROR_HANDLER +//#define USB_ENABLE_OTHER_REQUEST_HANDLER +//#define USB_ENABLE_SET_DESCRIPTOR_HANDLER +//#define USB_ENABLE_INIT_EP_HANDLER +//#define USB_ENABLE_EP0_DATA_HANDLER +//#define USB_ENABLE_TRANSFER_COMPLETE_HANDLER + +/** DEVICE CLASS USAGE *********************************************/ +#define USB_USE_HID + +/** ENDPOINTS ALLOCATION *******************************************/ + +/* HID */ +#define HID_INTF_ID 0x00 +#define HID_EP 1 +#define HID_INT_OUT_EP_SIZE 3 +#define HID_INT_IN_EP_SIZE 3 +#define HID_NUM_OF_DSC 1 +#define HID_RPT01_SIZE 28 + +/** DEFINITIONS ****************************************************/ + +#endif //USBCFG_H \ No newline at end of file diff --git a/software/front/US_Firmware.X/usb/usb_descriptors.c b/software/front/US_Firmware.X/usb/usb_descriptors.c new file mode 100644 index 0000000..9307872 --- /dev/null +++ b/software/front/US_Firmware.X/usb/usb_descriptors.c @@ -0,0 +1,288 @@ +/******************************************************************** + FileName: usb_descriptors.c + Dependencies: See INCLUDES section + Processor: PIC18 or PIC24 USB Microcontrollers + Hardware: The code is natively intended to be used on the following + hardware platforms: PICDEM™ FS USB Demo Board, + PIC18F87J50 FS USB Plug-In Module, or + Explorer 16 + PIC24 USB PIM. The firmware may be + modified for use on other USB platforms by editing the + HardwareProfile.h file. + Complier: Microchip C18 (for PIC18) or C30 (for PIC24) + Company: Microchip Technology, Inc. + + Software License Agreement: + + The software supplied herewith by Microchip Technology Incorporated + (the “Company”) for its PIC® Microcontroller is intended and + supplied to you, the Company’s customer, for use solely and + exclusively on Microchip PIC Microcontroller products. The + software is owned by the Company and/or its supplier, and is + protected under applicable copyright laws. All rights are reserved. + Any use in violation of the foregoing restrictions may subject the + user to criminal sanctions under applicable laws, as well as to + civil liability for the breach of the terms and conditions of this + license. + + THIS SOFTWARE IS PROVIDED IN AN “AS IS” CONDITION. NO WARRANTIES, + WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED + TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT, + IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR + CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. + +********************************************************************* +-usb_descriptors.c- +------------------------------------------------------------------- +Filling in the descriptor values in the usb_descriptors.c file: +------------------------------------------------------------------- + +[Device Descriptors] +The device descriptor is defined as a USB_DEVICE_DESCRIPTOR type. +This type is defined in usb_ch9.h Each entry into this structure +needs to be the correct length for the data type of the entry. + +[Configuration Descriptors] +The configuration descriptor was changed in v2.x from a structure +to a BYTE array. Given that the configuration is now a byte array +each byte of multi-byte fields must be listed individually. This +means that for fields like the total size of the configuration where +the field is a 16-bit value "64,0," is the correct entry for a +configuration that is only 64 bytes long and not "64," which is one +too few bytes. + +The configuration attribute must always have the _DEFAULT +definition at the minimum. Additional options can be ORed +to the _DEFAULT attribute. Available options are _SELF and _RWU. +These definitions are defined in the usb_device.h file. The +_SELF tells the USB host that this device is self-powered. The +_RWU tells the USB host that this device supports Remote Wakeup. + +[Endpoint Descriptors] +Like the configuration descriptor, the endpoint descriptors were +changed in v2.x of the stack from a structure to a BYTE array. As +endpoint descriptors also has a field that are multi-byte entities, +please be sure to specify both bytes of the field. For example, for +the endpoint size an endpoint that is 64 bytes needs to have the size +defined as "64,0," instead of "64," + +Take the following example: + // Endpoint Descriptor // + 0x07, //the size of this descriptor // + USB_DESCRIPTOR_ENDPOINT, //Endpoint Descriptor + _EP02_IN, //EndpointAddress + _INT, //Attributes + 0x08,0x00, //size (note: 2 bytes) + 0x02, //Interval + +The first two parameters are self-explanatory. They specify the +length of this endpoint descriptor (7) and the descriptor type. +The next parameter identifies the endpoint, the definitions are +defined in usb_device.h and has the following naming +convention: +_EP<##>_ +where ## is the endpoint number and dir is the direction of +transfer. The dir has the value of either 'OUT' or 'IN'. +The next parameter identifies the type of the endpoint. Available +options are _BULK, _INT, _ISO, and _CTRL. The _CTRL is not +typically used because the default control transfer endpoint is +not defined in the USB descriptors. When _ISO option is used, +addition options can be ORed to _ISO. Example: +_ISO|_AD|_FE +This describes the endpoint as an isochronous pipe with adaptive +and feedback attributes. See usb_device.h and the USB +specification for details. The next parameter defines the size of +the endpoint. The last parameter in the polling interval. + +------------------------------------------------------------------- +Adding a USB String +------------------------------------------------------------------- +A string descriptor array should have the following format: + +rom struct{byte bLength;byte bDscType;word string[size];}sdxxx={ +sizeof(sdxxx),DSC_STR,}; + +The above structure provides a means for the C compiler to +calculate the length of string descriptor sdxxx, where xxx is the +index number. The first two bytes of the descriptor are descriptor +length and type. The rest are string texts which must be +in the unicode format. The unicode format is achieved by declaring +each character as a word type. The whole text string is declared +as a word array with the number of characters equals to . + has to be manually counted and entered into the array +declaration. Let's study this through an example: +if the string is "USB" , then the string descriptor should be: +(Using index 02) +rom struct{byte bLength;byte bDscType;word string[3];}sd002={ +sizeof(sd002),DSC_STR,'U','S','B'}; + +A USB project may have multiple strings and the firmware supports +the management of multiple strings through a look-up table. +The look-up table is defined as: +rom const unsigned char *rom USB_SD_Ptr[]={&sd000,&sd001,&sd002}; + +The above declaration has 3 strings, sd000, sd001, and sd002. +Strings can be removed or added. sd000 is a specialized string +descriptor. It defines the language code, usually this is +US English (0x0409). The index of the string must match the index +position of the USB_SD_Ptr array, &sd000 must be in position +USB_SD_Ptr[0], &sd001 must be in position USB_SD_Ptr[1] and so on. +The look-up table USB_SD_Ptr is used by the get string handler +function. + +------------------------------------------------------------------- + +The look-up table scheme also applies to the configuration +descriptor. A USB device may have multiple configuration +descriptors, i.e. CFG01, CFG02, etc. To add a configuration +descriptor, user must implement a structure similar to CFG01. +The next step is to add the configuration descriptor name, i.e. +cfg01, cfg02,.., to the look-up table USB_CD_Ptr. USB_CD_Ptr[0] +is a dummy place holder since configuration 0 is the un-configured +state according to the definition in the USB specification. + +********************************************************************/ + +/********************************************************************* + * Descriptor specific type definitions are defined in: + * usb_device.h + * + * Configuration options are defined in: + * usb_config.h + ********************************************************************/ +#ifndef __USB_DESCRIPTORS_C +#define __USB_DESCRIPTORS_C + +/** INCLUDES *******************************************************/ +#include "usb.h" +#include "usb_function_hid.h" + +/** CONSTANTS ******************************************************/ +#if defined(__18CXX) +#pragma romdata +#endif + +/* Device Descriptor */ +ROM USB_DEVICE_DESCRIPTOR device_dsc= +{ + 0x12, // Size of this descriptor in bytes + USB_DESCRIPTOR_DEVICE, // DEVICE descriptor type + 0x0200, // USB Spec Release Number in BCD format + 0x00, // Class Code + 0x00, // Subclass code + 0x00, // Protocol code + USB_EP0_BUFF_SIZE, // Max packet size for EP0, see usb_config.h + 0x04D8, // Vendor ID + 0x003C, // Product ID: Custom HID device demo + 0x0002, // Device release number in BCD format + 0x01, // Manufacturer string index + 0x02, // Product string index + 0x00, // Device serial number string index + 0x01 // Number of possible configurations +}; + +/* Configuration 1 Descriptor */ +ROM BYTE configDescriptor1[]={ + /* Configuration Descriptor */ + 0x09,//sizeof(USB_CFG_DSC), // Size of this descriptor in bytes + USB_DESCRIPTOR_CONFIGURATION, // CONFIGURATION descriptor type + 0x29,0x00, // Total length of data for this cfg + 1, // Number of interfaces in this cfg + 1, // Index value of this configuration + 0, // Configuration string index + _DEFAULT | _SELF, // Attributes, see usb_device.h + 50, // Max power consumption (2X mA) + + /* Interface Descriptor */ + 0x09,//sizeof(USB_INTF_DSC), // Size of this descriptor in bytes + USB_DESCRIPTOR_INTERFACE, // INTERFACE descriptor type + 0, // Interface Number + 0, // Alternate Setting Number + 2, // Number of endpoints in this intf + HID_INTF, // Class code + 0, // Subclass code + 0, // Protocol code + 0, // Interface string index + + /* HID Class-Specific Descriptor */ + 0x09,//sizeof(USB_HID_DSC)+3, // Size of this descriptor in bytes + DSC_HID, // HID descriptor type + 0x11,0x01, // HID Spec Release Number in BCD format (1.11) + 0x00, // Country Code (0x00 for Not supported) + HID_NUM_OF_DSC, // Number of class descriptors, see usbcfg.h + DSC_RPT, // Report descriptor type + HID_RPT01_SIZE,0x00,//sizeof(hid_rpt01), // Size of the report descriptor + + /* Endpoint Descriptor */ + 0x07,/*sizeof(USB_EP_DSC)*/ + USB_DESCRIPTOR_ENDPOINT, //Endpoint Descriptor + HID_EP | _EP_IN, //EndpointAddress + _INTERRUPT, //Attributes + 0x40,0x00, //size + 0x01, //Interval + + /* Endpoint Descriptor */ + 0x07,/*sizeof(USB_EP_DSC)*/ + USB_DESCRIPTOR_ENDPOINT, //Endpoint Descriptor + HID_EP | _EP_OUT, //EndpointAddress + _INTERRUPT, //Attributes + 0x40,0x00, //size + 0x01 //Interval +}; + +//Language code string descriptor +ROM struct{BYTE bLength;BYTE bDscType;WORD string[1];}sd000={ +sizeof(sd000),USB_DESCRIPTOR_STRING,{0x0409 +}}; + +//Manufacturer string descriptor +ROM struct{BYTE bLength;BYTE bDscType;WORD string[25];}sd001={ +sizeof(sd001),USB_DESCRIPTOR_STRING, +{'M','i','c','r','o','c','h','i','p',' ', +'T','e','c','h','n','o','l','o','g','y',' ','I','n','c','.' +}}; + +//Product string descriptor +ROM struct{BYTE bLength;BYTE bDscType;WORD string[22];}sd002={ +sizeof(sd002),USB_DESCRIPTOR_STRING, +{'S','i','m','p','l','e',' ','H','I','D',' ', +'D','e','v','i','c','e',' ','D','e','m','o' +}}; + +//Class specific descriptor - HID +ROM struct{BYTE report[HID_RPT01_SIZE];}hid_rpt01={ +{ + 0x06, 0x00, 0xFF, // Usage Page = 0xFF00 (Vendor Defined Page 1) + 0x09, 0x01, // Usage (Vendor Usage 1) + 0xA1, 0x01, // Collection (Application) + 0x19, 0x01, // Usage Minimum + 0x29, 0x40, // Usage Maximum //64 input usages total (0x01 to 0x40) + 0x15, 0x01, // Logical Minimum (data bytes in the report may have minimum value = 0x00) + 0x25, 0x40, // Logical Maximum (data bytes in the report may have maximum value = 0x00FF = unsigned 255) + 0x75, 0x08, // Report Size: 8-bit field size + 0x95, 0x40, // Report Count: Make sixty-four 8-bit fields (the next time the parser hits an "Input", "Output", or "Feature" item) + 0x81, 0x00, // Input (Data, Array, Abs): Instantiates input packet fields based on the above report size, count, logical min/max, and usage. + 0x19, 0x01, // Usage Minimum + 0x29, 0x40, // Usage Maximum //64 output usages total (0x01 to 0x40) + 0x91, 0x00, // Output (Data, Array, Abs): Instantiates output packet fields. Uses same report size and count as "Input" fields, since nothing new/different was specified to the parser since the "Input" item. + 0xC0} // End Collection +}; + + +//Array of configuration descriptors +ROM BYTE *ROM USB_CD_Ptr[]= +{ + (ROM BYTE *ROM)&configDescriptor1 +}; + +//Array of string descriptors +ROM BYTE *ROM USB_SD_Ptr[]= +{ + (ROM BYTE *ROM)&sd000, + (ROM BYTE *ROM)&sd001, + (ROM BYTE *ROM)&sd002 +}; + +/** EOF usb_descriptors.c ***************************************************/ + +#endif diff --git a/software/front/US_Firmware.X/usb/usb_device.c b/software/front/US_Firmware.X/usb/usb_device.c new file mode 100644 index 0000000..2e37a8b --- /dev/null +++ b/software/front/US_Firmware.X/usb/usb_device.c @@ -0,0 +1,3135 @@ +/******************************************************************** + File Information: + FileName: usb_device.c + Dependencies: See INCLUDES section + Processor: PIC18,PIC24, PIC32 and dsPIC33E USB Microcontrollers + Hardware: This code is natively intended to be used on Mirochip USB + demo boards. See www.microchip.com/usb (Software & Tools + section) for list of available platforms. The firmware may + be modified for use on other USB platforms by editing the + HardwareProfile.h and HardwareProfile - [platform].h files. + Complier: Microchip C18 (for PIC18),C30 (for PIC24 and dsPIC33E) + and C32 (for PIC32) + Company: Microchip Technology, Inc. + + Software License Agreement: + + The software supplied herewith by Microchip Technology Incorporated + (the "Company") for its PIC(r) Microcontroller is intended and + supplied to you, the Company's customer, for use solely and + exclusively on Microchip PIC Microcontroller products. The + software is owned by the Company and/or its supplier, and is + protected under applicable copyright laws. All rights are reserved. + Any use in violation of the foregoing restrictions may subject the + user to criminal sanctions under applicable laws, as well as to + civil liability for the breach of the terms and conditions of this + license. + + THIS SOFTWARE IS PROVIDED IN AN "AS IS" CONDITION. NO WARRANTIES, + WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED + TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT, + IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR + CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. + + Summary: + This file contains functions, macros, definitions, variables, + datatypes, etc. that are required for usage with the MCHPFSUSB device + stack. This file should be included in projects that use the device stack. + + This file is located in the "\\\Microchip\\USB" + directory. + + Description: + USB Device Stack File + + This file contains functions, macros, definitions, variables, + datatypes, etc. that are required for usage with the MCHPFSUSB device + stack. This file should be included in projects that use the device stack. + + This file is located in the "\\\Microchip\\USB" + directory. + + When including this file in a new project, this file can either be + referenced from the directory in which it was installed or copied + directly into the user application folder. If the first method is + chosen to keep the file located in the folder in which it is installed + then include paths need to be added so that the library and the + application both know where to reference each others files. If the + application folder is located in the same folder as the Microchip + folder (like the current demo folders), then the following include + paths need to be added to the application's project: + + . + ..\\..\\MicrochipInclude + + If a different directory structure is used, modify the paths as + required. An example using absolute paths instead of relative paths + would be the following: + + C:\\Microchip Solutions\\Microchip\\Include + + C:\\Microchip Solutions\\My Demo Application + +******************************************************************** + File Description: + + Change History: + Rev Description + ---- ----------- + 2.6 Added USBCancelIO() function. Moved and some stack + defintions to be more consistant with the host stack. + + 2.6a Fixed issue where a SET_CONFIGURATION received could cause + inability to transmit on an endpoint if using ping-pong + and an odd number of packets had been sent on that endpoint + + 2.7 Fixed error where the USB error interrupt flag was not getting + cleared properly for PIC32 resulting in lots of extra error interrupts. + http://www.microchip.com/forums/tm.aspx?m=479085 + + Fixed issue with dual role mode when device run in polling + mode. Interrupts were remaining enabled after the host mode + operation was complete. This was incompatible with polling + mode operation. + + Changed how the bus sensing works. In previous revisions it + was impossible to use the USBDeviceDetach to detach from the + bus if the bus voltage was still present. This is now + possible. It was also possible to move the device to the + ATTACHED state in interrupt mode even if the bus voltage + wasn't available. This is now prohibited unless VBUS is + present. + + Improved error case handling when the host sends more OUT + bytes in a control transfer than the firmware was expecting + to receive (based on the size parameter when calling USBEP0Receive()). + + In the USBStdSetCfgHandler(), modified the code so the USBDeviceState + variable only gets updated to the CONFIGURED_STATE at the end of the + function. + + 2.7a Update to support the PIC18F47J53 A1 and later revision + devices. + + Fixed an error on 16-bit and 32-bit processors where a word access + could be performed on a byte pointer resulting in possible address + errors with odd aligned pointers. + + 2.8 Several changes to the way control transfers get processed, + so as to support the ability to allow application/class specific + handler code to defer the status stage. + Implemented USBCtrlEPAllowStatusStage() API function. + Implemented USBDeferStatusStage() API function (macro). + These changes also greatly relax the USBDeviceTasks() calling frequency + requirement, while allowing USB class handlers more flexibility. + + Also implemented the following API functions and macros, for delaying + the data stage of a control transfer (with data stage): + USBDeferINDataStage() + USBDeferOUTDataStage() + USBOUTDataStageDeferred() + USBINDataStageDeferred() + USBCtrlEPAllowDataStage() + + Fixed USB reset event handler issue, where the USB stack would + re-initialize global interrupt settings in the interrupt context, on + PIC18 devices with the stack operated in USB_INTERRUPT mode. + + Fixed handling of SET/CLEAR FEATURE (endpoint halt) host requests. + Previous implementation would not always initialize endpoints correctly + to DATA0 DTS state after a clear feature endpoint halt request, for + all ping pong mode and usage scenarios. + + 2.9 Fixed an issue with STALL handling behavior on non-EP0 endpoints, for + PIC24 and PIC32 devices. + + Fixed an issue where the ep_data_in[]/ep_data_out[] flags weren't + getting re-initialized coincident with the hardware ping pong pointer + reset during set configuration events. + + Implemented USBGetNextHandle() API function (actually a macro, defined + in usb_device.h). + + 2.9d Added build option for disabling DTS checking + + 2.9f Adding pragma for PIC18F97J94 Family BDT location. + + 2.9h Updated to be able to support optional Microsoft OS Descriptors + + 2.9i Updated to set UCON bit on PIC16F USB devices during + suspend, so as to save power. + +********************************************************************/ + +/*---------------------------------------------------------------------------------- +The USBDeviceTasks() function is responsible for detecting and processing various +USB bus events and host requests, such as those required for USB enumeration, when +the USB cable is first attached to the host. This function is the main dispatcher +routine for the USB stack. + +Additional API functions and macros are also provided by the USB stack, which can be +used to send/receive USB data to/from the host, among other things. A full list +of the available implemented functions/macros are provided in the +"MCHPFSUSB Library Help". For normal installations of the MCHPFSUSB Framework, +the USB API documentation can be found from: + +Start menu --> (All Programs) --> Microchip --> MCHPFSUSB vX.x --> Documents --> MCHPFSUSB Library Help + +Once the help file is opened, the API functions/macros are described in the following section: +Library Interface (API) --> Device/Peripheral --> Device Stack --> Interface Routines +Additional API functions may also be provided depending upon the specific USB device class +implemented, and these functions are also documented in the MCHPFSUSB Library Help. + + +If the USB stack is operated in "USB_POLLING" mode (user selectable option in +usb_config.h), then the application firmware is reponsible for calling the +USBDeviceTasks() function periodically. If the USB stack is operated in the +"USB_INTERRUPT" mode, then the application firmware does not have to directly +call USBDeviceTasks(), as it will execute only when necessary as an interrupt handler. + +In order to properly operate a USB connection, and to correctly process and respond +to control transfers in the maximum time allowed by the USB specifications, the +USBDeviceTasks() function/interrupt handler must be allowed to execute in a timely +fashion. + +When the USB module is enabled, the USB cable is attached to the host, the USB bus +is not in the suspend state, and the USB stack is operated in the USB_POLLING mode +with ping pong buffering enabled (at least) on EP0 OUT, then the maximum allowed +time between calls to the USBDeviceTasks() function needs to be: + +The faster of: +1. Once per ~1.8ms, when USBDeviceState == ADR_PENDING_STATE +2. Once per ~9.8ms, when USBDeviceState == (any other value other than ADR_PENDING_STATE) +3. Fast enough to ensure the USTAT FIFO can never get full. See additional explanation below. + +Additional details of the above timing limits are provided: + +Timing item #1: This parameter originates from the 2ms set address "recovery interval" +specification dictated by section "9.2.6.3 Set Address Processing" of the official +USB 2.0 specifications. + +Timing item #2: This parameter originates from several "10 ms" criteria in the +USB 2.0 specifications. For example, reset recovery intervals, resume recovery +intervals, suspend to actual current reduction, etc. have timing maximums of 10ms. + +Timing item #3: This is not a fixed X.X ms parameter, but depends on the +transaction rate implemented by the application. The USBDeviceTasks() function is +responsible for popping entries off the USTAT FIFO. If the FIFO ever gets full, +then no further USB transactions are allowed to occur, until the firmware pops entries +off the FIFO. In practice, this means the firmware should call USBDeviceTasks() at +a rate at least as fast as once every three times the USBTransferOnePacket() function +is called. This ensures that the rate that USTAT FIFO entries are getting added to +the FIFO is lower than the rate that the entries are getting popped off the FIFO (the +USBDeviceTasks() function will pop up to 4 entries per call), which is a +necessary criteria to ensure the USTAT FIFO entries don't "pile up." Calling +USBDeviceTasks() even more often, ex: >=1 to 1 ratio of USBDeviceTasks() to +USBTransferOnePacket(), adds further protection against the USTAT FIFO getting full, +and is therefore recommended. + +When the USB stack is operated in USB_INTERRUPT mode, then the above timing +parameters should be interpreted to be the longest allowed time that the USB +interrupts may be masked/disabled for, before re-enabling the USB interrupts. + +Calling USBDeviceTasks() (or allowing USBDeviceTasks() to be called) more often +will still have potential USB data rate speed and processing latency benefits. +It is also beneficial to call USBDeviceTasks() more often than theoretically +required, since it has been observed that not all host/drivers/bios/hubs are +100% consistently compliant with all timing parameters of the USB 2.0 specifications. +Therefore, in a USB_POLLING based application, it is still suggested to call +USBDeviceTasks() as often as there are free CPU cycles. This ensures best +performance, along with best possible compatibility with all existing USB +hosts/hubs (both those that are compliant and [partially] non-compliant). + +If ping pong buffering is not enabled on (at least) EP0 OUT, then it is required +to call (or allow to execute) USBDeviceTasks() much more frequently (ex: once +per 100us, or preferrably faster). Therefore, in all applications, it is +normally recommended to select either the USB_PING_PONG__FULL_PING_PONG or +USB_PING_PONG__EP0_OUT_ONLY mode (user option in usb_config.h), as these modes +allow for much more relaxed timing requirements, and therefore greater application +firmware design flexibility. +//----------------------------------------------------------------------------------*/ + +/** INCLUDES *******************************************************/ +#include "..\mcu.h" + +#include "usb.h" + +#include "usb_device_local.h" + + +#if defined(USB_USE_MSD) + #include "./USB/usb_function_msd.h" +#endif + +#if !defined(USE_USB_BUS_SENSE_IO) + #undef USB_BUS_SENSE + #define USB_BUS_SENSE 1 +#endif + +#if defined(USB_DEVICE_DISABLE_DTS_CHECKING) + #define _DTS_CHECKING_ENABLED 0 +#else + #define _DTS_CHECKING_ENABLED _DTSEN +#endif + +/** DEFINITIONS ****************************************************/ + +/** VARIABLES ******************************************************/ +#if defined(__18CXX) + #pragma udata +#endif + +USB_VOLATILE USB_DEVICE_STATE USBDeviceState; +USB_VOLATILE BYTE USBActiveConfiguration; +USB_VOLATILE BYTE USBAlternateInterface[USB_MAX_NUM_INT]; +volatile BDT_ENTRY *pBDTEntryEP0OutCurrent; +volatile BDT_ENTRY *pBDTEntryEP0OutNext; +volatile BDT_ENTRY *pBDTEntryOut[USB_MAX_EP_NUMBER+1]; +volatile BDT_ENTRY *pBDTEntryIn[USB_MAX_EP_NUMBER+1]; +USB_VOLATILE BYTE shortPacketStatus; +USB_VOLATILE BYTE controlTransferState; +USB_VOLATILE IN_PIPE inPipes[1]; +USB_VOLATILE OUT_PIPE outPipes[1]; +USB_VOLATILE BYTE *pDst; +USB_VOLATILE BOOL RemoteWakeup; +USB_VOLATILE BOOL USBBusIsSuspended; +USB_VOLATILE USTAT_FIELDS USTATcopy; +USB_VOLATILE BYTE endpoint_number; +USB_VOLATILE BOOL BothEP0OutUOWNsSet; +USB_VOLATILE EP_STATUS ep_data_in[USB_MAX_EP_NUMBER+1]; +USB_VOLATILE EP_STATUS ep_data_out[USB_MAX_EP_NUMBER+1]; +USB_VOLATILE BYTE USBStatusStageTimeoutCounter; +volatile BOOL USBDeferStatusStagePacket; +volatile BOOL USBStatusStageEnabledFlag1; +volatile BOOL USBStatusStageEnabledFlag2; +volatile BOOL USBDeferINDataStagePackets; +volatile BOOL USBDeferOUTDataStagePackets; + + +#if (USB_PING_PONG_MODE == USB_PING_PONG__NO_PING_PONG) + #define BDT_NUM_ENTRIES ((USB_MAX_EP_NUMBER + 1) * 2) +#elif (USB_PING_PONG_MODE == USB_PING_PONG__EP0_OUT_ONLY) + #define BDT_NUM_ENTRIES (((USB_MAX_EP_NUMBER + 1) * 2)+1) +#elif (USB_PING_PONG_MODE == USB_PING_PONG__FULL_PING_PONG) + #define BDT_NUM_ENTRIES ((USB_MAX_EP_NUMBER + 1) * 4) +#elif (USB_PING_PONG_MODE == USB_PING_PONG__ALL_BUT_EP0) + #define BDT_NUM_ENTRIES (((USB_MAX_EP_NUMBER + 1) * 4)-2) +#else + #error "No ping pong mode defined." +#endif + +/** USB FIXED LOCATION VARIABLES ***********************************/ +#if defined(__18CXX) + #pragma udata USB_BDT=USB_BDT_ADDRESS +#endif + +volatile BDT_ENTRY BDT[BDT_NUM_ENTRIES] BDT_BASE_ADDR_TAG; + +/******************************************************************** + * Section B: EP0 Buffer Space + *******************************************************************/ +volatile CTRL_TRF_SETUP SetupPkt CTRL_TRF_SETUP_ADDR_TAG; +volatile BYTE CtrlTrfData[USB_EP0_BUFF_SIZE] CTRL_TRF_DATA_ADDR_TAG; + +/******************************************************************** + * Section C: non-EP0 Buffer Space + *******************************************************************/ +#if defined(USB_USE_MSD) + //volatile far USB_MSD_CBW_CSW msd_cbw_csw; + volatile USB_MSD_CBW msd_cbw; + volatile USB_MSD_CSW msd_csw; + //#pragma udata + + #if defined(__18CXX) + #pragma udata myMSD=MSD_BUFFER_ADDRESS + #endif + volatile char msd_buffer[512]; +#endif + + + +////Depricated in v2.2 - will be removed in a future revision +#if !defined(USB_USER_DEVICE_DESCRIPTOR) + //Device descriptor + extern ROM USB_DEVICE_DESCRIPTOR device_dsc; +#else + USB_USER_DEVICE_DESCRIPTOR_INCLUDE; +#endif + +#if !defined(USB_USER_CONFIG_DESCRIPTOR) + //Array of configuration descriptors + extern ROM BYTE *ROM USB_CD_Ptr[]; +#else + USB_USER_CONFIG_DESCRIPTOR_INCLUDE; +#endif + +extern ROM BYTE *ROM USB_SD_Ptr[]; + +/** DECLARATIONS ***************************************************/ +#if defined(__18CXX) + #pragma code +#endif + +/** Macros *********************************************************/ + +/** Function Prototypes ********************************************/ +//External +//This is the prototype for the required user event handler +BOOL USER_USB_CALLBACK_EVENT_HANDLER(int event, void *pdata, WORD size); + +//Internal Functions +static void USBCtrlEPService(void); +static void USBCtrlTrfSetupHandler(void); +static void USBCtrlTrfInHandler(void); +static void USBCheckStdRequest(void); +static void USBStdGetDscHandler(void); +static void USBCtrlEPServiceComplete(void); +static void USBCtrlTrfTxService(void); +static void USBCtrlTrfRxService(void); +static void USBStdSetCfgHandler(void); +static void USBStdGetStatusHandler(void); +static void USBStdFeatureReqHandler(void); +static void USBCtrlTrfOutHandler(void); +static void USBConfigureEndpoint(BYTE EPNum, BYTE direction); +static void USBWakeFromSuspend(void); +static void USBSuspend(void); +static void USBStallHandler(void); + +//static BOOL USBIsTxBusy(BYTE EPNumber); +//static void USBPut(BYTE EPNum, BYTE Data); +//static void USBEPService(void); +//static void USBProtocolResetHandler(void); + +/******************************************************************************/ +/** Function Implementations *************************************************/ +/******************************************************************************/ + +/******************************************************************************/ +/** Internal Macros *********************************************************/ +/******************************************************************************/ + +/**************************************************************************** + Function: + void USBAdvancePingPongBuffer(BDT_ENTRY** buffer) + + Description: + This function will advance the passed pointer to the next buffer based on + the ping pong option setting. This function should be used for EP1-EP15 + only. This function is not valid for EP0. + + Precondition: + None + + Parameters: + BDT_ENTRY** - pointer to the BDT_ENTRY pointer that you want to be advanced + to the next buffer state + + Return Values: + None + + Remarks: + None + + ***************************************************************************/ +#define USBAdvancePingPongBuffer(buffer) ((BYTE_VAL*)buffer)->Val ^= USB_NEXT_PING_PONG; +#define USBHALPingPongSetToOdd(buffer) {((BYTE_VAL*)buffer)->Val |= USB_NEXT_PING_PONG;} +#define USBHALPingPongSetToEven(buffer) {((BYTE_VAL*)buffer)->Val &= ~USB_NEXT_PING_PONG;} + + +/******************************************************************************/ +/** External API Functions ****************************************************/ +/******************************************************************************/ + +/************************************************************************** + Function: + void USBDeviceInit(void) + + Description: + This function initializes the device stack it in the default state. The + USB module will be completely reset including all of the internal + variables, registers, and interrupt flags. + + Precondition: + This function must be called before any of the other USB Device + functions can be called, including USBDeviceTasks(). + + Parameters: + None + + Return Values: + None + + Remarks: + None + + ***************************************************************************/ +void USBDeviceInit(void) +{ + BYTE i; + + USBDisableInterrupts(); + + // Clear all USB error flags + USBClearInterruptRegister(U1EIR); + + // Clears all USB interrupts + USBClearInterruptRegister(U1IR); + + //Clear all of the endpoint control registers + U1EP0 = 0; + + DisableNonZeroEndpoints(USB_MAX_EP_NUMBER); + + SetConfigurationOptions(); + + //power up the module (if not already powered) + USBPowerModule(); + + //set the address of the BDT (if applicable) + USBSetBDTAddress(BDT); + + //Clear all of the BDT entries + for(i=0;i<(sizeof(BDT)/sizeof(BDT_ENTRY));i++) + { + BDT[i].Val = 0x00; + } + + // Assert reset request to all of the Ping Pong buffer pointers + USBPingPongBufferReset = 1; + + // Reset to default address + U1ADDR = 0x00; + + // Make sure packet processing is enabled + USBPacketDisable = 0; + + //Stop trying to reset ping pong buffer pointers + USBPingPongBufferReset = 0; + + // Flush any pending transactions + while(USBTransactionCompleteIF == 1) + { + USBClearInterruptFlag(USBTransactionCompleteIFReg,USBTransactionCompleteIFBitNum); + //Initialize USB stack software state variables + inPipes[0].info.Val = 0; + outPipes[0].info.Val = 0; + outPipes[0].wCount.Val = 0; + } + + //Set flags to TRUE, so the USBCtrlEPAllowStatusStage() function knows not to + //try and arm a status stage, even before the first control transfer starts. + USBStatusStageEnabledFlag1 = TRUE; + USBStatusStageEnabledFlag2 = TRUE; + //Initialize other flags + USBDeferINDataStagePackets = FALSE; + USBDeferOUTDataStagePackets = FALSE; + USBBusIsSuspended = FALSE; + + //Initialize all pBDTEntryIn[] and pBDTEntryOut[] + //pointers to NULL, so they don't get used inadvertently. + for(i = 0; i < (BYTE)(USB_MAX_EP_NUMBER+1u); i++) + { + pBDTEntryIn[i] = 0u; + pBDTEntryOut[i] = 0u; + ep_data_in[i].Val = 0u; + ep_data_out[i].Val = 0u; + } + + //Get ready for the first packet + pBDTEntryIn[0] = (volatile BDT_ENTRY*)&BDT[EP0_IN_EVEN]; + // Initialize EP0 as a Ctrl EP + U1EP0 = EP_CTRL|USB_HANDSHAKE_ENABLED; + //Prepare for the first SETUP on EP0 OUT + BDT[EP0_OUT_EVEN].ADR = ConvertToPhysicalAddress(&SetupPkt); + BDT[EP0_OUT_EVEN].CNT = USB_EP0_BUFF_SIZE; + BDT[EP0_OUT_EVEN].STAT.Val = _USIE|_DAT0|_BSTALL; + + // Clear active configuration + USBActiveConfiguration = 0; + + //Indicate that we are now in the detached state + USBDeviceState = DETACHED_STATE; +} + +/************************************************************************** + Function: + void USBDeviceTasks(void) + + Summary: + This function is the main state machine/transaction handler of the USB + device side stack. When the USB stack is operated in "USB_POLLING" mode + (usb_config.h user option) the USBDeviceTasks() function should be called + periodically to receive and transmit packets through the stack. This + function also takes care of control transfers associated with the USB + enumeration process, and detecting various USB events (such as suspend). + This function should be called at least once every 1.8ms during the USB + enumeration process. After the enumeration process is complete (which can + be determined when USBGetDeviceState() returns CONFIGURED_STATE), the + USBDeviceTasks() handler may be called the faster of: either once + every 9.8ms, or as often as needed to make sure that the hardware USTAT + FIFO never gets full. A good rule of thumb is to call USBDeviceTasks() at + a minimum rate of either the frequency that USBTransferOnePacket() gets + called, or, once/1.8ms, whichever is faster. See the inline code comments + near the top of usb_device.c for more details about minimum timing + requirements when calling USBDeviceTasks(). + + When the USB stack is operated in "USB_INTERRUPT" mode, it is not necessary + to call USBDeviceTasks() from the main loop context. In the USB_INTERRUPT + mode, the USBDeviceTasks() handler only needs to execute when a USB + interrupt occurs, and therefore only needs to be called from the interrupt + context. + + Description: + This function is the main state machine/transaction handler of the USB + device side stack. When the USB stack is operated in "USB_POLLING" mode + (usb_config.h user option) the USBDeviceTasks() function should be called + periodically to receive and transmit packets through the stack. This + function also takes care of control transfers associated with the USB + enumeration process, and detecting various USB events (such as suspend). + This function should be called at least once every 1.8ms during the USB + enumeration process. After the enumeration process is complete (which can + be determined when USBGetDeviceState() returns CONFIGURED_STATE), the + USBDeviceTasks() handler may be called the faster of: either once + every 9.8ms, or as often as needed to make sure that the hardware USTAT + FIFO never gets full. A good rule of thumb is to call USBDeviceTasks() at + a minimum rate of either the frequency that USBTransferOnePacket() gets + called, or, once/1.8ms, whichever is faster. See the inline code comments + near the top of usb_device.c for more details about minimum timing + requirements when calling USBDeviceTasks(). + + When the USB stack is operated in "USB_INTERRUPT" mode, it is not necessary + to call USBDeviceTasks() from the main loop context. In the USB_INTERRUPT + mode, the USBDeviceTasks() handler only needs to execute when a USB + interrupt occurs, and therefore only needs to be called from the interrupt + context. + + Typical usage: + + void main(void) + { + USBDeviceInit(); + while(1) + { + USBDeviceTasks(); //Takes care of enumeration and other USB events + if((USBGetDeviceState() \< CONFIGURED_STATE) || + (USBIsDeviceSuspended() == TRUE)) + { + //Either the device is not configured or we are suspended, + // so we don't want to execute any USB related application code + continue; //go back to the top of the while loop + } + else + { + //Otherwise we are free to run USB and non-USB related user + //application code. + UserApplication(); + } + } + } + + + Precondition: + Make sure the USBDeviceInit() function has been called prior to calling + USBDeviceTasks() for the first time. + Remarks: + USBDeviceTasks() does not need to be called while in the USB suspend mode, + if the user application firmware in the USBCBSuspend() callback function + enables the ACTVIF USB interrupt source and put the microcontroller into + sleep mode. If the application firmware decides not to sleep the + microcontroller core during USB suspend (ex: continues running at full + frequency, or clock switches to a lower frequency), then the USBDeviceTasks() + function must still be called periodically, at a rate frequent enough to + ensure the 10ms resume recovery interval USB specification is met. Assuming + a worst case primary oscillator and PLL start up time of <5ms, then + USBDeviceTasks() should be called once every 5ms in this scenario. + + When the USB cable is detached, or the USB host is not actively powering + the VBUS line to +5V nominal, the application firmware does not always have + to call USBDeviceTasks() frequently, as no USB activity will be taking + place. However, if USBDeviceTasks() is not called regularly, some + alternative means of promptly detecting when VBUS is powered (indicating + host attachment), or not powered (host powered down or USB cable unplugged) + is still needed. For self or dual self/bus powered USB applications, see + the USBDeviceAttach() and USBDeviceDetach() API documentation for additional + considerations. + + **************************************************************************/ + +#if defined(USB_INTERRUPT) +#if defined(__18CXX) || defined (_PIC14E) + void USBDeviceTasks(void) + #elif defined(__C30__) || defined __XC16__ + void __attribute__((interrupt,auto_psv)) _USB1Interrupt() + #elif defined(__PIC32MX__) + void __attribute__((interrupt(),vector(_USB_1_VECTOR))) _USB1Interrupt( void ) + #endif +#else +void USBDeviceTasks(void) +#endif +{ + BYTE i; + +#ifdef USB_SUPPORT_OTG + //SRP Time Out Check + if (USBOTGSRPIsReady()) + { + if (USBT1MSECIF && USBT1MSECIE) + { + if (USBOTGGetSRPTimeOutFlag()) + { + if (USBOTGIsSRPTimeOutExpired()) + { + USB_OTGEventHandler(0,OTG_EVENT_SRP_FAILED,0,0); + } + } + + //Clear Interrupt Flag + USBClearInterruptFlag(USBT1MSECIFReg,USBT1MSECIFBitNum); + } + } +#endif + + #if defined(USB_POLLING) + //If the interrupt option is selected then the customer is required + // to notify the stack when the device is attached or removed from the + // bus by calling the USBDeviceAttach() and USBDeviceDetach() functions. + if (USB_BUS_SENSE != 1) + { + // Disable module & detach from bus + U1CON = 0; + + // Mask all USB interrupts + U1IE = 0; + + //Move to the detached state + USBDeviceState = DETACHED_STATE; + + #ifdef USB_SUPPORT_OTG + //Disable D+ Pullup + U1OTGCONbits.DPPULUP = 0; + + //Disable HNP + USBOTGDisableHnp(); + + //Deactivate HNP + USBOTGDeactivateHnp(); + + //If ID Pin Changed State + if (USBIDIF && USBIDIE) + { + //Re-detect & Initialize + USBOTGInitialize(); + + //Clear ID Interrupt Flag + USBClearInterruptFlag(USBIDIFReg,USBIDIFBitNum); + } + #endif + + #if defined __C30__ || defined __XC16__ + //USBClearInterruptFlag(U1OTGIR, 3); + #endif + //return so that we don't go through the rest of + //the state machine + USBClearUSBInterrupt(); + return; + } + + #ifdef USB_SUPPORT_OTG + //If Session Is Started Then + else + { + //If SRP Is Ready + if (USBOTGSRPIsReady()) + { + //Clear SRPReady + USBOTGClearSRPReady(); + + //Clear SRP Timeout Flag + USBOTGClearSRPTimeOutFlag(); + + //Indicate Session Started + UART2PrintString( "\r\n***** USB OTG B Event - Session Started *****\r\n" ); + } + } + #endif //#ifdef USB_SUPPORT_OTG + + //if we are in the detached state + if(USBDeviceState == DETACHED_STATE) + { + //Initialize register to known value + U1CON = 0; + + // Mask all USB interrupts + U1IE = 0; + + //Enable/set things like: pull ups, full/low-speed mode, + //set the ping pong mode, and set internal transceiver + SetConfigurationOptions(); + + // Enable module & attach to bus + while(!U1CONbits.USBEN){U1CONbits.USBEN = 1;} + + //moved to the attached state + USBDeviceState = ATTACHED_STATE; + + #ifdef USB_SUPPORT_OTG + U1OTGCON |= USB_OTG_DPLUS_ENABLE | USB_OTG_ENABLE; + #endif + } + #endif //#if defined(USB_POLLING) + + if(USBDeviceState == ATTACHED_STATE) + { + /* + * After enabling the USB module, it takes some time for the + * voltage on the D+ or D- line to rise high enough to get out + * of the SE0 condition. The USB Reset interrupt should not be + * unmasked until the SE0 condition is cleared. This helps + * prevent the firmware from misinterpreting this unique event + * as a USB bus reset from the USB host. + */ + + if(!USBSE0Event) + { + USBClearInterruptRegister(U1IR);// Clear all USB interrupts + #if defined(USB_POLLING) + U1IE=0; // Mask all USB interrupts + #endif + USBResetIE = 1; // Unmask RESET interrupt + USBIdleIE = 1; // Unmask IDLE interrupt + USBDeviceState = POWERED_STATE; + } + } + + #ifdef USB_SUPPORT_OTG + //If ID Pin Changed State + if (USBIDIF && USBIDIE) + { + //Re-detect & Initialize + USBOTGInitialize(); + + USBClearInterruptFlag(USBIDIFReg,USBIDIFBitNum); + } + #endif + + /* + * Task A: Service USB Activity Interrupt + */ + if(USBActivityIF && USBActivityIE) + { + USBClearInterruptFlag(USBActivityIFReg,USBActivityIFBitNum); + #if defined(USB_SUPPORT_OTG) + U1OTGIR = 0x10; + #else + USBWakeFromSuspend(); + #endif + } + + /* + * Pointless to continue servicing if the device is in suspend mode. + */ + if(USBSuspendControl==1) + { + USBClearUSBInterrupt(); + return; + } + + /* + * Task B: Service USB Bus Reset Interrupt. + * When bus reset is received during suspend, ACTVIF will be set first, + * once the UCONbits.SUSPND is clear, then the URSTIF bit will be asserted. + * This is why URSTIF is checked after ACTVIF. + * + * The USB reset flag is masked when the USB state is in + * DETACHED_STATE or ATTACHED_STATE, and therefore cannot + * cause a USB reset event during these two states. + */ + if(USBResetIF && USBResetIE) + { + USBDeviceInit(); + + //Re-enable the interrupts since the USBDeviceInit() function will + // disable them. This will do nothing in a polling setup + USBUnmaskInterrupts(); + + USBDeviceState = DEFAULT_STATE; + + #ifdef USB_SUPPORT_OTG + //Disable HNP + USBOTGDisableHnp(); + + //Deactivate HNP + USBOTGDeactivateHnp(); + #endif + + USBClearInterruptFlag(USBResetIFReg,USBResetIFBitNum); + } + + /* + * Task C: Service other USB interrupts + */ + if(USBIdleIF && USBIdleIE) + { + #ifdef USB_SUPPORT_OTG + //If Suspended, Try to switch to Host + USBOTGSelectRole(ROLE_HOST); + #else + USBSuspend(); + #endif + + USBClearInterruptFlag(USBIdleIFReg,USBIdleIFBitNum); + } + + if(USBSOFIF) + { + if(USBSOFIE) + { + USB_SOF_HANDLER(EVENT_SOF,0,1); + } + USBClearInterruptFlag(USBSOFIFReg,USBSOFIFBitNum); + + #if defined(USB_ENABLE_STATUS_STAGE_TIMEOUTS) + //Supporting this feature requires a 1ms timebase for keeping track of the timeout interval. + #if(USB_SPEED_OPTION == USB_LOW_SPEED) + #warning "Double click this message. See inline code comments." + //The "USB_ENABLE_STATUS_STAGE_TIMEOUTS" feature is optional and is + //not strictly needed in all applications (ex: those that never call + //USBDeferStatusStage() and don't use host to device (OUT) control + //transfers with data stage). + //However, if this feature is enabled and used, it requires a timer + //(preferrably 1ms) to decrement the USBStatusStageTimeoutCounter. + //In USB Full Speed applications, the host sends Start-of-Frame (SOF) + //packets at a 1ms rate, which generates SOFIF interrupts. + //These interrupts can be used to decrement USBStatusStageTimeoutCounter as shown + //below. However, the host does not send SOF packets to Low Speed devices. + //Therefore, some other method (ex: using a general purpose microcontroller + //timer, such as Timer0) needs to be implemented to call and execute the below code + //at a once/1ms rate, in a low speed USB application. + //Note: Pre-condition to executing the below code: USBDeviceInit() should have + //been called at least once (since the last microcontroller reset/power up), + //prior to executing the below code. + #endif + + //Decrement our status stage counter. + if(USBStatusStageTimeoutCounter != 0u) + { + USBStatusStageTimeoutCounter--; + } + //Check if too much time has elapsed since progress was made in + //processing the control transfer, without arming the status stage. + //If so, auto-arm the status stage to ensure that the control + //transfer can [eventually] complete, within the timing limits + //dictated by section 9.2.6 of the official USB 2.0 specifications. + if(USBStatusStageTimeoutCounter == 0) + { + USBCtrlEPAllowStatusStage(); //Does nothing if the status stage was already armed. + } + #endif + } + + if(USBStallIF && USBStallIE) + { + USBStallHandler(); + } + + if(USBErrorIF && USBErrorIE) + { + USB_ERROR_HANDLER(EVENT_BUS_ERROR,0,1); + USBClearInterruptRegister(U1EIR); // This clears UERRIF + + //On PIC18, clearing the source of the error will automatically clear + // the interrupt flag. On other devices the interrupt flag must be + // manually cleared. + #if defined(__C32__) || defined(__C30__) || defined __XC16__ + USBClearInterruptFlag( USBErrorIFReg, USBErrorIFBitNum ); + #endif + } + + /* + * Pointless to continue servicing if the host has not sent a bus reset. + * Once bus reset is received, the device transitions into the DEFAULT + * state and is ready for communication. + */ + if(USBDeviceState < DEFAULT_STATE) + { + USBClearUSBInterrupt(); + return; + } + + /* + * Task D: Servicing USB Transaction Complete Interrupt + */ + if(USBTransactionCompleteIE) + { + for(i = 0; i < 4u; i++) //Drain or deplete the USAT FIFO entries. If the USB FIFO ever gets full, USB bandwidth + { //utilization can be compromised, and the device won't be able to receive SETUP packets. + if(USBTransactionCompleteIF) + { + //Save and extract USTAT register info. Will use this info later. + USTATcopy.Val = U1STAT; + endpoint_number = USBHALGetLastEndpoint(USTATcopy); + + USBClearInterruptFlag(USBTransactionCompleteIFReg,USBTransactionCompleteIFBitNum); + + //Keep track of the hardware ping pong state for endpoints other + //than EP0, if ping pong buffering is enabled. + #if (USB_PING_PONG_MODE == USB_PING_PONG__ALL_BUT_EP0) || (USB_PING_PONG_MODE == USB_PING_PONG__FULL_PING_PONG) + if(USBHALGetLastDirection(USTATcopy) == OUT_FROM_HOST) + { + ep_data_out[endpoint_number].bits.ping_pong_state ^= 1; + } + else + { + ep_data_in[endpoint_number].bits.ping_pong_state ^= 1; + } + #endif + + //USBCtrlEPService only services transactions over EP0. + //It ignores all other EP transactions. + if(endpoint_number == 0) + { + USBCtrlEPService(); + } + else + { + USB_TRANSFER_COMPLETE_HANDLER(EVENT_TRANSFER, (BYTE*)&USTATcopy.Val, 0); + } + }//end if(USBTransactionCompleteIF) + else + break; //USTAT FIFO must be empty. + }//end for() + }//end if(USBTransactionCompleteIE) + + USBClearUSBInterrupt(); +}//end of USBDeviceTasks() + +/******************************************************************************* + Function: + void USBEnableEndpoint(BYTE ep, BYTE options) + + Summary: + This function will enable the specified endpoint with the specified + options + Description: + This function will enable the specified endpoint with the specified + options. + + Typical Usage: + + void USBCBInitEP(void) + { + USBEnableEndpoint(MSD_DATA_IN_EP,USB_IN_ENABLED|USB_OUT_ENABLED|USB_HANDSHAKE_ENABLED|USB_DISALLOW_SETUP); + USBMSDInit(); + } + + + In the above example endpoint number MSD_DATA_IN_EP is being configured + for both IN and OUT traffic with handshaking enabled. Also since + MSD_DATA_IN_EP is not endpoint 0 (MSD does not allow this), then we can + explicitly disable SETUP packets on this endpoint. + Conditions: + None + Input: + BYTE ep - the endpoint to be configured + BYTE options - optional settings for the endpoint. The options should + be ORed together to form a single options string. The + available optional settings for the endpoint. The + options should be ORed together to form a single options + string. The available options are the following\: + * USB_HANDSHAKE_ENABLED enables USB handshaking (ACK, + NAK) + * USB_HANDSHAKE_DISABLED disables USB handshaking (ACK, + NAK) + * USB_OUT_ENABLED enables the out direction + * USB_OUT_DISABLED disables the out direction + * USB_IN_ENABLED enables the in direction + * USB_IN_DISABLED disables the in direction + * USB_ALLOW_SETUP enables control transfers + * USB_DISALLOW_SETUP disables control transfers + * USB_STALL_ENDPOINT STALLs this endpoint + Return: + None + Remarks: + None + *****************************************************************************/ +void USBEnableEndpoint(BYTE ep, BYTE options) +{ + unsigned char* p; + + //Use USBConfigureEndpoint() to set up the pBDTEntryIn/Out[ep] pointer and + //starting DTS state in the BDT entry. + if(options & USB_OUT_ENABLED) + { + USBConfigureEndpoint(ep, OUT_FROM_HOST); + } + if(options & USB_IN_ENABLED) + { + USBConfigureEndpoint(ep, IN_TO_HOST); + } + + //Update the relevant UEPx register to actually enable the endpoint with + //the specified options (ex: handshaking enabled, control transfers allowed, + //etc.) + #if defined(__C32__) + p = (unsigned char*)(&U1EP0+(4*ep)); + #else + p = (unsigned char*)(&U1EP0+ep); + #endif + *p = options; +} + + +/************************************************************************* + Function: + USB_HANDLE USBTransferOnePacket(BYTE ep, BYTE dir, BYTE* data, BYTE len) + + Summary: + Transfers a single packet (one transaction) of data on the USB bus. + + Description: + The USBTransferOnePacket() function prepares a USB endpoint + so that it may send data to the host (an IN transaction), or + receive data from the host (an OUT transaction). The + USBTransferOnePacket() function can be used both to receive and + send data to the host. This function is the primary API function + provided by the USB stack firmware for sending or receiving application + data over the USB port. + + The USBTransferOnePacket() is intended for use with all application + endpoints. It is not used for sending or receiving applicaiton data + through endpoint 0 by using control transfers. Separate API + functions, such as USBEP0Receive(), USBEP0SendRAMPtr(), and + USBEP0SendROMPtr() are provided for this purpose. + + The USBTransferOnePacket() writes to the Buffer Descriptor Table (BDT) + entry associated with an endpoint buffer, and sets the UOWN bit, which + prepares the USB hardware to allow the transaction to complete. The + application firmware can use the USBHandleBusy() macro to check the + status of the transaction, to see if the data has been successfully + transmitted yet. + + + Typical Usage + + //make sure that the we are in the configured state + if(USBGetDeviceState() == CONFIGURED_STATE) + { + //make sure that the last transaction isn't busy by checking the handle + if(!USBHandleBusy(USBInHandle)) + { + //Write the new data that we wish to send to the host to the INPacket[] array + INPacket[0] = USEFUL_APPLICATION_VALUE1; + INPacket[1] = USEFUL_APPLICATION_VALUE2; + //INPacket[2] = ... (fill in the rest of the packet data) + + //Send the data contained in the INPacket[] array through endpoint "EP_NUM" + USBInHandle = USBTransferOnePacket(EP_NUM,IN_TO_HOST,(BYTE*)&INPacket[0],sizeof(INPacket)); + } + } + + + Conditions: + Before calling USBTransferOnePacket(), the following should be true. + 1. The USB stack has already been initialized (USBDeviceInit() was called). + 2. A transaction is not already pending on the specified endpoint. This + is done by checking the previous request using the USBHandleBusy() + macro (see the typical usage example). + 3. The host has already sent a set configuration request and the + enumeration process is complete. + This can be checked by verifying that the USBGetDeviceState() + macro returns "CONFIGURED_STATE", prior to calling + USBTransferOnePacket(). + + Input: + BYTE ep - The endpoint number that the data will be transmitted or + received on + BYTE dir - The direction of the transfer + This value is either OUT_FROM_HOST or IN_TO_HOST + BYTE* data - For IN transactions: pointer to the RAM buffer containing + the data to be sent to the host. For OUT transactions: pointer + to the RAM buffer that the received data should get written to. + BYTE len - Length of the data needing to be sent (for IN transactions). + For OUT transactions, the len parameter should normally be set + to the endpoint size specified in the endpoint descriptor. + + Return Values: + USB_HANDLE - handle to the transfer. The handle is a pointer to + the BDT entry associated with this transaction. The + status of the transaction (ex: if it is complete or still + pending) can be checked using the USBHandleBusy() macro + and supplying the USB_HANDLE provided by + USBTransferOnePacket(). + + Remarks: + If calling the USBTransferOnePacket() function from within the USBCBInitEP() + callback function, the set configuration is still being processed and the + USBDeviceState may not be == CONFIGURED_STATE yet. In this special case, + the USBTransferOnePacket() may still be called, but make sure that the + endpoint has been enabled and initialized by the USBEnableEndpoint() + function first. + + *************************************************************************/ +USB_HANDLE USBTransferOnePacket(BYTE ep,BYTE dir,BYTE* data,BYTE len) +{ + volatile BDT_ENTRY* handle; + + //If the direction is IN + if(dir != 0) + { + //point to the IN BDT of the specified endpoint + handle = pBDTEntryIn[ep]; + } + else + { + //else point to the OUT BDT of the specified endpoint + handle = pBDTEntryOut[ep]; + } + + //Error checking code. Make sure the handle (pBDTEntryIn[ep] or + //pBDTEntryOut[ep]) is initialized before using it. + if(handle == 0) + { + return 0; + } + + //Toggle the DTS bit if required + #if (USB_PING_PONG_MODE == USB_PING_PONG__NO_PING_PONG) + handle->STAT.Val ^= _DTSMASK; + #elif (USB_PING_PONG_MODE == USB_PING_PONG__EP0_OUT_ONLY) + if(ep != 0) + { + handle->STAT.Val ^= _DTSMASK; + } + #endif + + //Set the data pointer, data length, and enable the endpoint + handle->ADR = ConvertToPhysicalAddress(data); + handle->CNT = len; + handle->STAT.Val &= _DTSMASK; + handle->STAT.Val |= _USIE | (_DTSEN & _DTS_CHECKING_ENABLED); + + //Point to the next buffer for ping pong purposes. + if(dir != OUT_FROM_HOST) + { + //toggle over the to the next buffer for an IN endpoint + USBAdvancePingPongBuffer(&pBDTEntryIn[ep]); + } + else + { + //toggle over the to the next buffer for an OUT endpoint + USBAdvancePingPongBuffer(&pBDTEntryOut[ep]); + } + return (USB_HANDLE)handle; +} + + +/******************************************************************** + Function: + void USBStallEndpoint(BYTE ep, BYTE dir) + + Summary: + Configures the specified endpoint to send STALL to the host, the next + time the host tries to access the endpoint. + + PreCondition: + None + + Parameters: + BYTE ep - The endpoint number that should be configured to send STALL. + BYTE dir - The direction of the endpoint to STALL, either + IN_TO_HOST or OUT_FROM_HOST. + + Return Values: + None + + Remarks: + None + + *******************************************************************/ +void USBStallEndpoint(BYTE ep, BYTE dir) +{ + BDT_ENTRY *p; + + if(ep == 0) + { + //For control endpoints (ex: EP0), we need to STALL both IN and OUT + //endpoints. EP0 OUT must also be prepared to receive the next SETUP + //packet that will arrrive. + pBDTEntryEP0OutNext->CNT = USB_EP0_BUFF_SIZE; + pBDTEntryEP0OutNext->ADR = ConvertToPhysicalAddress(&SetupPkt); + pBDTEntryEP0OutNext->STAT.Val = _USIE|_DAT0|(_DTSEN & _DTS_CHECKING_ENABLED)|_BSTALL; + pBDTEntryIn[0]->STAT.Val = _USIE|_BSTALL; + + } + else + { + p = (BDT_ENTRY*)(&BDT[EP(ep,dir,0)]); + p->STAT.Val |= _BSTALL | _USIE; + + //If the device is in FULL or ALL_BUT_EP0 ping pong modes + //then stall that entry as well + #if (USB_PING_PONG_MODE == USB_PING_PONG__FULL_PING_PONG) || (USB_PING_PONG_MODE == USB_PING_PONG__ALL_BUT_EP0) + + p = (BDT_ENTRY*)(&BDT[EP(ep,dir,1)]); + p->STAT.Val |= _BSTALL | _USIE; + #endif + } +} + +/************************************************************************** + Function: + void USBCancelIO(BYTE endpoint) + + Description: + This function cancels the transfers pending on the specified endpoint. + This function can only be used after a SETUP packet is received and + before that setup packet is handled. This is the time period in which + the EVENT_EP0_REQUEST is thrown, before the event handler function + returns to the stack. + + Precondition: + + Parameters: + BYTE endpoint - the endpoint number you wish to cancel the transfers for + + Return Values: + None + + Remarks: + None + + **************************************************************************/ +void USBCancelIO(BYTE endpoint) +{ + if(USBPacketDisable == 1) + { + //The PKTDIS bit is currently set right now. It is therefore "safe" + //to mess with the BDT right now. + pBDTEntryIn[endpoint]->Val &= _DTSMASK; //Makes UOWN = 0 (_UCPU mode). Deactivates endpoint. Only sends NAKs. + pBDTEntryIn[endpoint]->Val ^= _DTSMASK; //Toggle the DTS bit. This packet didn't get sent yet, and the next call to USBTransferOnePacket() will re-toggle the DTS bit back to the original (correct) value. + + //Need to do additional handling if ping-pong buffering is being used + #if ((USB_PING_PONG_MODE == USB_PING_PONG__FULL_PING_PONG) || (USB_PING_PONG_MODE == USB_PING_PONG__ALL_BUT_EP0)) + //Point to the next buffer for ping pong purposes. UOWN getting cleared + //(either due to SIE clearing it after a transaction, or the firmware + //clearing it) makes hardware ping pong pointer advance. + USBAdvancePingPongBuffer(&pBDTEntryIn[endpoint]); + + pBDTEntryIn[endpoint]->STAT.Val &= _DTSMASK; + pBDTEntryIn[endpoint]->STAT.Val ^= _DTSMASK; + #endif + } +} + +/************************************************************************** + Function: + void USBDeviceDetach(void) + + Summary: + This function configures the USB module to "soft detach" itself from + the USB host. + + Description: + This function configures the USB module to perform a "soft detach" + operation, by disabling the D+ (or D-) ~1.5k pull up resistor, which + lets the host know the device is present and attached. This will make + the host think that the device has been unplugged. This is potentially + useful, as it allows the USB device to force the host to re-enumerate + the device (on the firmware has re-enabled the USB module/pull up, by + calling USBDeviceAttach(), to "soft re-attach" to the host). + + Precondition: + Should only be called when USB_INTERRUPT is defined. See remarks + section if USB_POLLING mode option is being used (usb_config.h option). + + Additionally, this function should only be called from the main() loop + context. Do not call this function from within an interrupt handler, as + this function may modify global interrupt enable bits and settings. + + Parameters: + None + + Return Values: + None + + Remarks: + If the application firmware calls USBDeviceDetach(), it is strongly + recommended that the firmware wait at least >= 80ms before calling + USBDeviceAttach(). If the firmeware performs a soft detach, and then + re-attaches too soon (ex: after a few micro seconds for instance), some + hosts may interpret this as an unexpected "glitch" rather than as a + physical removal/re-attachment of the USB device. In this case the host + may simply ignore the event without re-enumerating the device. To + ensure that the host properly detects and processes the device soft + detach/re-attach, it is recommended to make sure the device remains + detached long enough to mimic a real human controlled USB + unplug/re-attach event (ex: after calling USBDeviceDetach(), do not + call USBDeviceAttach() for at least 80+ms, preferrably longer. + + Neither the USBDeviceDetach() or USBDeviceAttach() functions are blocking + or take long to execute. It is the application firmware's + responsibility for adding the 80+ms delay, when using these API + functions. + + Note: The Windows plug and play event handler processing is fairly + slow, especially in certain versions of Windows, and for certain USB + device classes. It has been observed that some device classes need to + provide even more USB detach dwell interval (before calling + USBDeviceAttach()), in order to work correctly after re-enumeration. + If the USB device is a CDC class device, it is recommended to wait + at least 1.5 seconds or longer, before soft re-attaching to the host, + to provide the plug and play event handler enough time to finish + processing the removal event, before the re-attach occurs. + + If the application is using the USB_POLLING mode option, then the + USBDeviceDetach() and USBDeviceAttach() functions are not available. + In this mode, the USB stack relies on the "#define USE_USB_BUS_SENSE_IO" + and "#define USB_BUS_SENSE" options in the + HardwareProfile ? [platform name].h file. + + When using the USB_POLLING mode option, and the + "#define USE_USB_BUS_SENSE_IO" definition has been commented out, then + the USB stack assumes that it should always enable the USB module at + pretty much all times. Basically, anytime the application firmware + calls USBDeviceTasks(), the firmware will automatically enable the USB + module. This mode would typically be selected if the application was + designed to be a purely bus powered device. In this case, the + application is powered from the +5V VBUS supply from the USB port, so + it is correct and sensible in this type of application to power up and + turn on the USB module, at anytime that the microcontroller is + powered (which implies the USB cable is attached and the host is also + powered). + + In a self powered application, the USB stack is designed with the + intention that the user will enable the "#define USE_USB_BUS_SENSE_IO" + option in the HardwareProfile ? [platform name].h file. When this + option is defined, then the USBDeviceTasks() function will automatically + check the I/O pin port value of the designated pin (based on the + #define USB_BUS_SENSE option in the HardwareProfile ? [platform name].h + file), every time the application calls USBDeviceTasks(). If the + USBDeviceTasks() function is executed and finds that the pin defined by + the #define USB_BUS_SENSE is in a logic low state, then it will + automatically disable the USB module and tri-state the D+ and D- pins. + If however the USBDeviceTasks() function is executed and finds the pin + defined by the #define USB_BUS_SENSE is in a logic high state, then it + will automatically enable the USB module, if it has not already been + enabled. + + **************************************************************************/ +#if defined(USB_INTERRUPT) +void USBDeviceDetach(void) +{ + //If the interrupt option is selected then the customer is required + // to notify the stack when the device is attached or removed from the + // bus by calling the USBDeviceAttach() and USBDeviceDetach() functions. +#ifdef USB_SUPPORT_OTG + if (USB_BUS_SENSE != 1) +#endif + { + // Disable module & detach from bus + U1CON = 0; + + // Mask all USB interrupts + U1IE = 0; + + //Move to the detached state + USBDeviceState = DETACHED_STATE; + + #ifdef USB_SUPPORT_OTG + //Disable D+ Pullup + U1OTGCONbits.DPPULUP = 0; + + //Disable HNP + USBOTGDisableHnp(); + + //Deactivate HNP + USBOTGDeactivateHnp(); + + //If ID Pin Changed State + if (USBIDIF && USBIDIE) + { + //Re-detect & Initialize + USBOTGInitialize(); + + //Clear ID Interrupt Flag + USBClearInterruptFlag(USBIDIFReg,USBIDIFBitNum); + } + #endif + + #if defined __C30__ || defined __XC16__ + //USBClearInterruptFlag(U1OTGIR, 3); + #endif + //return so that we don't go through the rest of + //the state machine + return; + } + +#ifdef USB_SUPPORT_OTG + //If Session Is Started Then + else + { + //If SRP Is Ready + if (USBOTGSRPIsReady()) + { + //Clear SRPReady + USBOTGClearSRPReady(); + + //Clear SRP Timeout Flag + USBOTGClearSRPTimeOutFlag(); + + //Indicate Session Started + UART2PrintString( "\r\n***** USB OTG B Event - Session Started *****\r\n" ); + } + } +#endif +} +#endif //#if defined(USB_INTERRUPT) +/************************************************************************** + Function: + void USBDeviceAttach(void) + + Summary: + Checks if VBUS is present, and that the USB module is not already + initalized, and if so, enables the USB module so as to signal device + attachment to the USB host. + + Description: + This function indicates to the USB host that the USB device has been + attached to the bus. This function needs to be called in order for the + device to start to enumerate on the bus. + + Precondition: + Should only be called when USB_INTERRUPT is defined. Also, should only + be called from the main() loop context. Do not call USBDeviceAttach() + from within an interrupt handler, as the USBDeviceAttach() function + may modify global interrupt enable bits and settings. + + For normal USB devices: + Make sure that if the module was previously on, that it has been turned off + for a long time (ex: 100ms+) before calling this function to re-enable the module. + If the device turns off the D+ (for full speed) or D- (for low speed) ~1.5k ohm + pull up resistor, and then turns it back on very quickly, common hosts will sometimes + reject this event, since no human could ever unplug and reattach a USB device in a + microseconds (or nanoseconds) timescale. The host could simply treat this as some kind + of glitch and ignore the event altogether. + Parameters: + None + + Return Values: + None + + Remarks: + See also the USBDeviceDetach() API function documentation. +****************************************************************************/ +#if defined(USB_INTERRUPT) +void USBDeviceAttach(void) +{ + //if we are in the detached state + if(USBDeviceState == DETACHED_STATE) + { + if(USB_BUS_SENSE == 1) + { + //Initialize registers to known states. + U1CON = 0; + + // Mask all USB interrupts + U1IE = 0; + + //Configure things like: pull ups, full/low-speed mode, + //set the ping pong mode, and set internal transceiver + SetConfigurationOptions(); + + USBEnableInterrupts(); //Modifies global interrupt settings + + // Enable module & attach to bus + while(!U1CONbits.USBEN){U1CONbits.USBEN = 1;} + + //moved to the attached state + USBDeviceState = ATTACHED_STATE; + + #ifdef USB_SUPPORT_OTG + U1OTGCON = USB_OTG_DPLUS_ENABLE | USB_OTG_ENABLE; + #endif + } + } +} +#endif //#if defined(USB_INTERRUPT) + + +/******************************************************************************* + Function: void USBCtrlEPAllowStatusStage(void); + + Summary: This function prepares the proper endpoint 0 IN or endpoint 0 OUT + (based on the controlTransferState) to allow the status stage packet + of a control transfer to complete. This function gets used + internally by the USB stack itself, but it may also be called from + the application firmware, IF the application firmware called + the USBDeferStatusStage() function during the initial processing + of the control transfer request. In this case, the application + must call the USBCtrlEPAllowStatusStage() once, after it has fully + completed processing and handling the data stage portion of the + request. + + If the application firmware has no need for delaying control + transfers, and therefore never calls USBDeferStatusStage(), then the + application firmware should not call USBCtrlEPAllowStatusStage(). + + Description: + + Conditions: + None + + Input: + + Return: + + Remarks: + None + *****************************************************************************/ +void USBCtrlEPAllowStatusStage(void) +{ + //Check and set two flags, prior to actually modifying any BDT entries. + //This double checking is necessary to make certain that + //USBCtrlEPAllowStatusStage() can be called twice simultaneously (ex: once + //in main loop context, while simultaneously getting an interrupt which + //tries to call USBCtrlEPAllowStatusStage() again, at the same time). + if(USBStatusStageEnabledFlag1 == FALSE) + { + USBStatusStageEnabledFlag1 = TRUE; + if(USBStatusStageEnabledFlag2 == FALSE) + { + USBStatusStageEnabledFlag2 = TRUE; + + //Determine which endpoints (EP0 IN or OUT needs arming for the status + //stage), based on the type of control transfer currently pending. + if(controlTransferState == CTRL_TRF_RX) + { + pBDTEntryIn[0]->CNT = 0; + pBDTEntryIn[0]->STAT.Val = _USIE|_DAT1|(_DTSEN & _DTS_CHECKING_ENABLED); + } + else if(controlTransferState == CTRL_TRF_TX) + { + BothEP0OutUOWNsSet = FALSE; //Indicator flag used in USBCtrlTrfOutHandler() + + //This buffer (when ping pong buffering is enabled on EP0 OUT) receives the + //next SETUP packet. + #if((USB_PING_PONG_MODE == USB_PING_PONG__EP0_OUT_ONLY) || (USB_PING_PONG_MODE == USB_PING_PONG__FULL_PING_PONG)) + pBDTEntryEP0OutCurrent->CNT = USB_EP0_BUFF_SIZE; + pBDTEntryEP0OutCurrent->ADR = ConvertToPhysicalAddress(&SetupPkt); + pBDTEntryEP0OutCurrent->STAT.Val = _USIE|_BSTALL; //Prepare endpoint to accept a SETUP transaction + BothEP0OutUOWNsSet = TRUE; //Indicator flag used in USBCtrlTrfOutHandler() + #endif + + //This EP0 OUT buffer receives the 0-byte OUT status stage packet. + pBDTEntryEP0OutNext->CNT = USB_EP0_BUFF_SIZE; + pBDTEntryEP0OutNext->ADR = ConvertToPhysicalAddress(&SetupPkt); + pBDTEntryEP0OutNext->STAT.Val = _USIE; // Note: DTSEN is 0 + } + } + } +} + + +/******************************************************************************* + Function: void USBCtrlEPAllowDataStage(void); + + Summary: This function allows the data stage of either a host-to-device or + device-to-host control transfer (with data stage) to complete. + This function is meant to be used in conjunction with either the + USBDeferOUTDataStage() or USBDeferINDataStage(). If the firmware + does not call either USBDeferOUTDataStage() or USBDeferINDataStage(), + then the firmware does not need to manually call + USBCtrlEPAllowDataStage(), as the USB stack will call this function + instead. + + Description: + + Conditions: A control transfer (with data stage) should already be pending, + if the firmware calls this function. Additionally, the firmware + should have called either USBDeferOUTDataStage() or + USBDeferINDataStage() at the start of the control transfer, if + the firmware will be calling this function manually. + + Input: + + Return: + + Remarks: + *****************************************************************************/ +void USBCtrlEPAllowDataStage(void) +{ + USBDeferINDataStagePackets = FALSE; + USBDeferOUTDataStagePackets = FALSE; + + if(controlTransferState == CTRL_TRF_RX) //(...) + { + //Prepare EP0 OUT to receive the first OUT data packet in the data stage sequence. + pBDTEntryEP0OutNext->CNT = USB_EP0_BUFF_SIZE; + pBDTEntryEP0OutNext->ADR = ConvertToPhysicalAddress(&CtrlTrfData); + pBDTEntryEP0OutNext->STAT.Val = _USIE|_DAT1|(_DTSEN & _DTS_CHECKING_ENABLED); + } + else //else must be controlTransferState == CTRL_TRF_TX (...) + { + //Error check the data stage byte count. Make sure the user specified + //value was no greater than the number of bytes the host requested. + if(SetupPkt.wLength < inPipes[0].wCount.Val) + { + inPipes[0].wCount.Val = SetupPkt.wLength; + } + USBCtrlTrfTxService(); //Copies one IN data packet worth of data from application buffer + //to CtrlTrfData buffer. Also keeps track of how many bytes remaining. + + //Cnt should have been initialized by responsible request owner (ex: by + //using the USBEP0SendRAMPtr() or USBEP0SendROMPtr() API function). + pBDTEntryIn[0]->ADR = ConvertToPhysicalAddress(&CtrlTrfData); + pBDTEntryIn[0]->STAT.Val = _USIE|_DAT1|(_DTSEN & _DTS_CHECKING_ENABLED); + } +} + + +/******************************************************************************/ +/** Internal Functions *********************************************************/ +/******************************************************************************/ + +/******************************************************************** + * Function: void USBConfigureEndpoint(BYTE EPNum, BYTE direction) + * + * PreCondition: None + * + * Input: BYTE EPNum - the endpoint to be configured + * BYTE direction - the direction to be configured + * (either OUT_FROM_HOST or IN_TO_HOST) + * + * Output: None + * + * Side Effects: None + * + * Overview: This function will configure the specified + * endpoint + * + * Note: None + *******************************************************************/ +static void USBConfigureEndpoint(BYTE EPNum, BYTE direction) +{ + volatile BDT_ENTRY* handle; + + //Compute a pointer to the even BDT entry corresponding to the + //EPNum and direction values passed to this function. + handle = (volatile BDT_ENTRY*)&BDT[EP0_OUT_EVEN]; //Get address of start of BDT + handle += EP(EPNum,direction,0u); //Add in offset to the BDT of interest + + handle->STAT.UOWN = 0; //mostly redundant, since USBStdSetCfgHandler() + //already cleared the entire BDT table + + //Make sure our pBDTEntryIn/Out[] pointer is initialized. Needed later + //for USBTransferOnePacket() API calls. + if(direction == OUT_FROM_HOST) + { + pBDTEntryOut[EPNum] = handle; + } + else + { + pBDTEntryIn[EPNum] = handle; + } + + #if (USB_PING_PONG_MODE == USB_PING_PONG__FULL_PING_PONG) + handle->STAT.DTS = 0; + (handle+1)->STAT.DTS = 1; + #elif (USB_PING_PONG_MODE == USB_PING_PONG__NO_PING_PONG) + //Set DTS to one because the first thing we will do + //when transmitting is toggle the bit + handle->STAT.DTS = 1; + #elif (USB_PING_PONG_MODE == USB_PING_PONG__EP0_OUT_ONLY) + if(EPNum != 0) + { + handle->STAT.DTS = 1; + } + #elif (USB_PING_PONG_MODE == USB_PING_PONG__ALL_BUT_EP0) + if(EPNum != 0) + { + handle->STAT.DTS = 0; + (handle+1)->STAT.DTS = 1; + } + #endif +} + + +/****************************************************************************** + * Function: void USBCtrlEPServiceComplete(void) + * + * PreCondition: None + * + * Input: None + * + * Output: None + * + * Side Effects: None + * + * Overview: This routine wrap up the remaining tasks in servicing + * a Setup Request. Its main task is to set the endpoint + * controls appropriately for a given situation. See code + * below. + * There are three main scenarios: + * a) There was no handler for the Request, in this case + * a STALL should be sent out. + * b) The host has requested a read control transfer, + * endpoints are required to be setup in a specific way. + * c) The host has requested a write control transfer, or + * a control data stage is not required, endpoints are + * required to be setup in a specific way. + * + * Packet processing is resumed by clearing PKTDIS bit. + * + * Note: None + *****************************************************************************/ +static void USBCtrlEPServiceComplete(void) +{ + /* + * PKTDIS bit is set when a Setup Transaction is received. + * Clear to resume packet processing. + */ + USBPacketDisable = 0; + + //Check the busy bits and the SetupPtk.DataDir variables to determine what type of + //control transfer is currently in progress. We need to know the type of control + //transfer that is currently pending, in order to know how to properly arm the + //EP0 IN and EP0 OUT endpoints. + if(inPipes[0].info.bits.busy == 0) + { + if(outPipes[0].info.bits.busy == 1) + { + controlTransferState = CTRL_TRF_RX; + /* + * Control Write: + * ... | + */ + + //1. Prepare OUT EP to receive data, unless a USB class request handler + // function decided to defer the data stage (ex: because the intended + // RAM buffer wasn't available yet) by calling USBDeferDataStage(). + // If it did so, it is then responsible for calling USBCtrlEPAllowDataStage(), + // once it is ready to begin receiving the data. + if(USBDeferOUTDataStagePackets == FALSE) + { + USBCtrlEPAllowDataStage(); + } + + //2. IN endpoint 0 status stage will be armed by USBCtrlEPAllowStatusStage() + //after all of the OUT data has been received and consumed, or if a timeout occurs. + USBStatusStageEnabledFlag2 = FALSE; + USBStatusStageEnabledFlag1 = FALSE; + } + else + { + /* + * If no one knows how to service this request then stall. + * Must also prepare EP0 to receive the next SETUP transaction. + */ + pBDTEntryEP0OutNext->CNT = USB_EP0_BUFF_SIZE; + pBDTEntryEP0OutNext->ADR = ConvertToPhysicalAddress(&SetupPkt); + pBDTEntryEP0OutNext->STAT.Val = _USIE|_DAT0|(_DTSEN & _DTS_CHECKING_ENABLED)|_BSTALL; + pBDTEntryIn[0]->STAT.Val = _USIE|_BSTALL; + } + } + else // A module has claimed ownership of the control transfer session. + { + if(SetupPkt.DataDir == USB_SETUP_DEVICE_TO_HOST_BITFIELD) + { + controlTransferState = CTRL_TRF_TX; + /* + * Control Read: + * ... | + * + * 1. Prepare IN EP to transfer data to the host. If however the data + * wasn't ready yet (ex: because the firmware needs to go and read it from + * some slow/currently unavailable resource, such as an external I2C EEPROM), + * Then the class request handler reponsible should call the USBDeferDataStage() + * macro. In this case, the firmware may wait up to 500ms, before it is required + * to transmit the first IN data packet. Once the data is ready, and the firmware + * is ready to begin sending the data, it should then call the + * USBCtrlEPAllowDataStage() function to start the data stage. + */ + if(USBDeferINDataStagePackets == FALSE) + { + USBCtrlEPAllowDataStage(); + } + + // 2. (Optionally) allow the status stage now, to prepare for early termination. + // Note: If a class request handler decided to set USBDeferStatusStagePacket == TRUE, + // then it is responsible for eventually calling USBCtrlEPAllowStatusStage() once it + // is ready. If the class request handler does this, it needs to be careful to + // be written so that it can handle the early termination scenario. + // Ex: It should call USBCtrlEPAllowStatusStage() when any of the following occurs: + // 1. The desired total number of bytes were sent to the host. + // 2. The number of bytes that the host originally requested (in the SETUP packet that + // started the control transfer) has been reached. + // 3. Or, if a timeout occurs (ex: <50ms since the last successful EP0 IN transaction), regardless + // of how many bytes have actually been sent. This is necessary to prevent a deadlock situation + // (where the control transfer can't complete, due to continuous NAK on status stage) if the + // host performs early termination. If enabled, the USB_ENABLE_STATUS_STAGE_TIMEOUTS usb_config.h + // option can take care of this for you. + // Note: For this type of control transfer, there is normally no harm in simply arming the + // status stage packet right now, even if the IN data is not ready yet. This allows for + // immediate early termination, without adding unecessary delay. Therefore, it is generally not + // recommended for the USB class handler firmware to call USBDeferStatusStage(), for this + // type of control transfer. If the USB class handler firmware needs more time to fetch the IN + // data that needs to be sent to the host, it should instead use the USBDeferDataStage() function. + USBStatusStageEnabledFlag2 = FALSE; + USBStatusStageEnabledFlag1 = FALSE; + if(USBDeferStatusStagePacket == FALSE) + { + USBCtrlEPAllowStatusStage(); + } + } + else // (SetupPkt.DataDir == USB_SETUP_DIRECTION_HOST_TO_DEVICE) + { + //This situation occurs for special types of control transfers, + //such as that which occurs when the host sends a SET_ADDRESS + //control transfer. Ex: + // + // | + + //Although the data direction is HOST_TO_DEVICE, there is no data stage + //(hence: outPipes[0].info.bits.busy == 0). There is however still + //an IN status stage. + + controlTransferState = CTRL_TRF_RX; //Since this is a HOST_TO_DEVICE control transfer + + //1. Prepare OUT EP to receive the next SETUP packet. + pBDTEntryEP0OutNext->CNT = USB_EP0_BUFF_SIZE; + pBDTEntryEP0OutNext->ADR = ConvertToPhysicalAddress(&SetupPkt); + pBDTEntryEP0OutNext->STAT.Val = _USIE|_BSTALL; + + //2. Prepare for IN status stage of the control transfer + USBStatusStageEnabledFlag2 = FALSE; + USBStatusStageEnabledFlag1 = FALSE; + if(USBDeferStatusStagePacket == FALSE) + { + USBCtrlEPAllowStatusStage(); + } + } + + }//end if(ctrl_trf_session_owner == MUID_NULL) + +}//end USBCtrlEPServiceComplete + + +/****************************************************************************** + * Function: void USBCtrlTrfTxService(void) + * + * PreCondition: pSrc, wCount, and usb_stat.ctrl_trf_mem are setup properly. + * + * Input: None + * + * Output: None + * + * Side Effects: None + * + * Overview: This routine is used for device to host control transfers + * (IN transactions). This function takes care of managing a + * transfer over multiple USB transactions. + * This routine should be called from only two places. + * One from USBCtrlEPServiceComplete() and one from + * USBCtrlTrfInHandler(). + * + * Note: + *****************************************************************************/ +static void USBCtrlTrfTxService(void) +{ + BYTE byteToSend; + + //Figure out how many bytes of data to send in the next IN transaction. + //Assume a full size packet, unless otherwise determined below. + byteToSend = USB_EP0_BUFF_SIZE; + if(inPipes[0].wCount.Val < (BYTE)USB_EP0_BUFF_SIZE) + { + byteToSend = inPipes[0].wCount.Val; + + //Keep track of whether or not we have sent a "short packet" yet. + //This is useful so that later on, we can configure EP0 IN to STALL, + //after we have sent all of the intended data. This makes sure the + //hardware STALLs if the host erroneously tries to send more IN token + //packets, requesting more data than intended in the control transfer. + if(shortPacketStatus == SHORT_PKT_NOT_USED) + { + shortPacketStatus = SHORT_PKT_PENDING; + } + else if(shortPacketStatus == SHORT_PKT_PENDING) + { + shortPacketStatus = SHORT_PKT_SENT; + } + } + + //Keep track of how many bytes remain to be sent in the transfer, by + //subtracting the number of bytes about to be sent from the total. + inPipes[0].wCount.Val = inPipes[0].wCount.Val - byteToSend; + + //Next, load the number of bytes to send to BC7..0 in buffer descriptor. + //Note: Control endpoints may never have a max packet size of > 64 bytes. + //Therefore, the BC8 and BC9 bits should always be maintained clear. + pBDTEntryIn[0]->CNT = byteToSend; + + //Now copy the data from the source location, to the CtrlTrfData[] buffer, + //which we will send to the host. + pDst = (USB_VOLATILE BYTE*)CtrlTrfData; // Set destination pointer + if(inPipes[0].info.bits.ctrl_trf_mem == USB_EP0_ROM) // Determine type of memory source + { + while(byteToSend) + { + *pDst++ = *inPipes[0].pSrc.bRom++; + byteToSend--; + }//end while(byte_to_send.Val) + } + else // RAM + { + while(byteToSend) + { + *pDst++ = *inPipes[0].pSrc.bRam++; + byteToSend--; + }//end while(byte_to_send.Val) + }//end if(usb_stat.ctrl_trf_mem == _ROM) +}//end USBCtrlTrfTxService + +/****************************************************************************** + * Function: void USBCtrlTrfRxService(void) + * + * PreCondition: pDst and wCount are setup properly. + * pSrc is always &CtrlTrfData + * usb_stat.ctrl_trf_mem is always USB_EP0_RAM. + * wCount should be set to 0 at the start of each control + * transfer. + * + * Input: None + * + * Output: None + * + * Side Effects: None + * + * Overview: This routine is used for host to device control transfers + * (uses OUT transactions). This function receives the data that arrives + * on EP0 OUT, and copies it into the appropriate outPipes[0].pDst.bRam + * buffer. Once the host has sent all the data it was intending + * to send, this function will call the appropriate outPipes[0].pFunc() + * handler (unless it is NULL), so that it can be used by the + * intended target firmware. + * + * Note: None + *****************************************************************************/ +static void USBCtrlTrfRxService(void) +{ + BYTE byteToRead; + BYTE i; + + //Load byteToRead with the number of bytes the host just sent us in the + //last OUT transaction. + byteToRead = pBDTEntryEP0OutCurrent->CNT; + + //Update the "outPipes[0].wCount.Val", which keeps track of the total number + //of remaining bytes expected to be received from the host, in the control + //transfer. First check to see if the host sent us more bytes than the + //application firmware was expecting to receive. + if(byteToRead > outPipes[0].wCount.Val) + { + byteToRead = outPipes[0].wCount.Val; + } + //Reduce the number of remaining bytes by the number we just received. + outPipes[0].wCount.Val = outPipes[0].wCount.Val - byteToRead; + + //Copy the OUT DATAx packet bytes that we just received from the host, + //into the user application buffer space. + for(i=0;i 0) + { + pBDTEntryEP0OutNext->CNT = USB_EP0_BUFF_SIZE; + pBDTEntryEP0OutNext->ADR = ConvertToPhysicalAddress(&CtrlTrfData); + if(pBDTEntryEP0OutCurrent->STAT.DTS == 0) + { + pBDTEntryEP0OutNext->STAT.Val = _USIE|_DAT1|(_DTSEN & _DTS_CHECKING_ENABLED); + } + else + { + pBDTEntryEP0OutNext->STAT.Val = _USIE|_DAT0|(_DTSEN & _DTS_CHECKING_ENABLED); + } + } + else + { + //We have received all OUT packets that we were expecting to + //receive for the control transfer. Prepare EP0 OUT to receive + //the next SETUP transaction that may arrive. + pBDTEntryEP0OutNext->CNT = USB_EP0_BUFF_SIZE; + pBDTEntryEP0OutNext->ADR = ConvertToPhysicalAddress(&SetupPkt); + //Configure EP0 OUT to receive the next SETUP transaction for any future + //control transfers. However, set BSTALL in case the host tries to send + //more data than it claims it was going to send. + pBDTEntryEP0OutNext->STAT.Val = _USIE|_BSTALL; + + //All data bytes for the host to device control write (OUT) have now been + //received successfully. + //Go ahead and call the user specified callback function, to use/consume + //the control transfer data (ex: if the "void (*function)" parameter + //was non-NULL when USBEP0Receive() was called). + if(outPipes[0].pFunc != NULL) + { + #if defined(__XC8) + //Special pragmas to suppress an expected/harmless warning + //message when building with the XC8 compiler + #pragma warning push + #pragma warning disable 1088 + outPipes[0].pFunc(); //Call the user's callback function + #pragma warning pop + #else + outPipes[0].pFunc(); //Call the user's callback function + #endif + } + outPipes[0].info.bits.busy = 0; + + //Ready to arm status stage IN transaction now, if the application + //firmware has completed processing the request. If it is still busy + //and needs more time to finish handling the request, then the user + //callback (the one called by the outPipes[0].pFunc();) should set the + //USBDeferStatusStagePacket to TRUE (by calling USBDeferStatusStage()). In + //this case, it is the application's firmware responsibility to call + //the USBCtrlEPAllowStatusStage() function, once it is fully done handling the request. + //Note: The application firmware must process the request and call + //USBCtrlEPAllowStatusStage() in a semi-timely fashion. "Semi-timely" + //means either 50ms, 500ms, or 5 seconds, depending on the type of + //control transfer. See the USB 2.0 specification section 9.2.6 for + //more details. + if(USBDeferStatusStagePacket == FALSE) + { + USBCtrlEPAllowStatusStage(); + } + } + +}//end USBCtrlTrfRxService + + +/******************************************************************** + * Function: void USBStdSetCfgHandler(void) + * + * PreCondition: None + * + * Input: None + * + * Output: None + * + * Side Effects: None + * + * Overview: This routine first disables all endpoints by + * clearing UEP registers. It then configures + * (initializes) endpoints by calling the callback + * function USBCBInitEP(). + * + * Note: None + *******************************************************************/ +static void USBStdSetCfgHandler(void) +{ + BYTE i; + + // This will generate a zero length packet + inPipes[0].info.bits.busy = 1; + + //Clear all of the endpoint control registers + DisableNonZeroEndpoints(USB_MAX_EP_NUMBER); + + //Clear all of the BDT entries + memset((void*)&BDT[0], 0x00, sizeof(BDT)); + + // Assert reset request to all of the Ping Pong buffer pointers + USBPingPongBufferReset = 1; + + //Re-Initialize all ping pong software state bits to 0 (which corresponds to + //the EVEN buffer being the next one that will be used), since we are also + //doing a hardware ping pong pointer reset above. + for(i = 0; i < (BYTE)(USB_MAX_EP_NUMBER+1u); i++) + { + ep_data_in[i].Val = 0u; + ep_data_out[i].Val = 0u; + } + + //clear the alternate interface settings + memset((void*)&USBAlternateInterface,0x00,USB_MAX_NUM_INT); + + //Stop trying to reset ping pong buffer pointers + USBPingPongBufferReset = 0; + + pBDTEntryIn[0] = (volatile BDT_ENTRY*)&BDT[EP0_IN_EVEN]; + + //Set the next out to the current out packet + pBDTEntryEP0OutCurrent = (volatile BDT_ENTRY*)&BDT[EP0_OUT_EVEN]; + pBDTEntryEP0OutNext = pBDTEntryEP0OutCurrent; + + //set the current configuration + USBActiveConfiguration = SetupPkt.bConfigurationValue; + + //if the configuration value == 0 + if(USBActiveConfiguration == 0) + { + //Go back to the addressed state + USBDeviceState = ADDRESS_STATE; + } + else + { + //initialize the required endpoints + USB_SET_CONFIGURATION_HANDLER(EVENT_CONFIGURED,(void*)&USBActiveConfiguration,1); + + //Otherwise go to the configured state. Update the state variable last, + //after performing all of the set configuration related initialization + //tasks. + USBDeviceState = CONFIGURED_STATE; + }//end if(SetupPkt.bConfigurationValue == 0) +}//end USBStdSetCfgHandler + + +/******************************************************************** + * Function: void USBStdGetDscHandler(void) + * + * PreCondition: None + * + * Input: None + * + * Output: None + * + * Side Effects: None + * + * Overview: This routine handles the standard GET_DESCRIPTOR + * request. + * + * Note: None + *******************************************************************/ +static void USBStdGetDscHandler(void) +{ + if(SetupPkt.bmRequestType == 0x80) + { + inPipes[0].info.Val = USB_EP0_ROM | USB_EP0_BUSY | USB_EP0_INCLUDE_ZERO; + + switch(SetupPkt.bDescriptorType) + { + case USB_DESCRIPTOR_DEVICE: + #if !defined(USB_USER_DEVICE_DESCRIPTOR) + inPipes[0].pSrc.bRom = (ROM BYTE*)&device_dsc; + #else + inPipes[0].pSrc.bRom = (ROM BYTE*)USB_USER_DEVICE_DESCRIPTOR; + #endif + inPipes[0].wCount.Val = sizeof(device_dsc); + break; + case USB_DESCRIPTOR_CONFIGURATION: + #if !defined(USB_USER_CONFIG_DESCRIPTOR) + inPipes[0].pSrc.bRom = *(USB_CD_Ptr+SetupPkt.bDscIndex); + #else + inPipes[0].pSrc.bRom = *(USB_USER_CONFIG_DESCRIPTOR+SetupPkt.bDscIndex); + #endif + + //This must be loaded using byte addressing. The source pointer + // may not be word aligned for the 16 or 32 bit machines resulting + // in an address error on the dereference. + inPipes[0].wCount.byte.LB = *(inPipes[0].pSrc.bRom+2); + inPipes[0].wCount.byte.HB = *(inPipes[0].pSrc.bRom+3); + break; + case USB_DESCRIPTOR_STRING: + //USB_NUM_STRING_DESCRIPTORS was introduced as optional in release v2.3. In v2.4 and + // later it is now manditory. This should be defined in usb_config.h and should + // indicate the number of string descriptors. + if(SetupPkt.bDscIndexSTAT.UOWN == 1) && (p->STAT.BSTALL == 1)) + CtrlTrfData[0]=0x01; // Set bit0 + break; + } + }//end switch + + if(inPipes[0].info.bits.busy == 1) + { + inPipes[0].pSrc.bRam = (BYTE*)&CtrlTrfData; // Set Source + inPipes[0].info.bits.ctrl_trf_mem = USB_EP0_RAM; // Set memory type + inPipes[0].wCount.v[0] = 2; // Set data count + }//end if(...) +}//end USBStdGetStatusHandler + +/******************************************************************** + * Function: void USBStallHandler(void) + * + * PreCondition: None + * + * Input: None + * + * Output: None + * + * Side Effects: + * + * Overview: This function handles the event of a STALL + * occuring on the bus + * + * Note: None + *******************************************************************/ +static void USBStallHandler(void) +{ + /* + * Does not really have to do anything here, + * even for the control endpoint. + * All BDs of Endpoint 0 are owned by SIE right now, + * but once a Setup Transaction is received, the ownership + * for EP0_OUT will be returned to CPU. + * When the Setup Transaction is serviced, the ownership + * for EP0_IN will then be forced back to CPU by firmware. + */ + + /* v2b fix */ + if(U1EP0bits.EPSTALL == 1) + { + // UOWN - if 0, owned by CPU, if 1, owned by SIE + if((pBDTEntryEP0OutCurrent->STAT.Val == _USIE) && (pBDTEntryIn[0]->STAT.Val == (_USIE|_BSTALL))) + { + // Set ep0Bo to stall also + pBDTEntryEP0OutCurrent->STAT.Val = _USIE|_DAT0|(_DTSEN & _DTS_CHECKING_ENABLED)|_BSTALL; + }//end if + U1EP0bits.EPSTALL = 0; // Clear stall status + }//end if + + USBClearInterruptFlag(USBStallIFReg,USBStallIFBitNum); +} + +/******************************************************************** + * Function: void USBSuspend(void) + * + * PreCondition: None + * + * Input: None + * + * Output: None + * + * Side Effects: + * + * Overview: This function handles if the host tries to + * suspend the device + * + * Note: None + *******************************************************************/ +static void USBSuspend(void) +{ + /* + * NOTE: Do not clear UIRbits.ACTVIF here! + * Reason: + * ACTVIF is only generated once an IDLEIF has been generated. + * This is a 1:1 ratio interrupt generation. + * For every IDLEIF, there will be only one ACTVIF regardless of + * the number of subsequent bus transitions. + * + * If the ACTIF is cleared here, a problem could occur when: + * [ IDLE ][bus activity -> + * <--- 3 ms -----> ^ + * ^ ACTVIF=1 + * IDLEIF=1 + * # # # # (#=Program polling flags) + * ^ + * This polling loop will see both + * IDLEIF=1 and ACTVIF=1. + * However, the program services IDLEIF first + * because ACTIVIE=0. + * If this routine clears the only ACTIVIF, + * then it can never get out of the suspend + * mode. + */ + USBActivityIE = 1; // Enable bus activity interrupt + USBClearInterruptFlag(USBIdleIFReg,USBIdleIFBitNum); + + #if defined(__18CXX) || defined(_PIC14E) + U1CONbits.SUSPND = 1; // Put USB module in power conserve + // mode, SIE clock inactive + #endif + USBBusIsSuspended = TRUE; + + /* + * At this point the PIC can go into sleep,idle, or + * switch to a slower clock, etc. This should be done in the + * USBCBSuspend() if necessary. + */ + USB_SUSPEND_HANDLER(EVENT_SUSPEND,0,0); +} + +/******************************************************************** + * Function: void USBWakeFromSuspend(void) + * + * PreCondition: None + * + * Input: None + * + * Output: None + * + * Side Effects: None + * + * Overview: + * + * Note: None + *******************************************************************/ +static void USBWakeFromSuspend(void) +{ + USBBusIsSuspended = FALSE; + + /* + * If using clock switching, the place to restore the original + * microcontroller core clock frequency is in the USBCBWakeFromSuspend() callback + */ + USB_WAKEUP_FROM_SUSPEND_HANDLER(EVENT_RESUME,0,0); + + #if defined(__18CXX) || defined(_PIC14E) + //To avoid improperly clocking the USB module, make sure the oscillator + //settings are consistant with USB operation before clearing the SUSPND bit. + //Make sure the correct oscillator settings are selected in the + //"USB_WAKEUP_FROM_SUSPEND_HANDLER(EVENT_RESUME,0,0)" handler. + U1CONbits.SUSPND = 0; // Bring USB module out of power conserve + // mode. + #endif + + + USBActivityIE = 0; + + /******************************************************************** + Bug Fix: Feb 26, 2007 v2.1 + ********************************************************************* + The ACTVIF bit cannot be cleared immediately after the USB module wakes + up from Suspend or while the USB module is suspended. A few clock cycles + are required to synchronize the internal hardware state machine before + the ACTIVIF bit can be cleared by firmware. Clearing the ACTVIF bit + before the internal hardware is synchronized may not have an effect on + the value of ACTVIF. Additonally, if the USB module uses the clock from + the 96 MHz PLL source, then after clearing the SUSPND bit, the USB + module may not be immediately operational while waiting for the 96 MHz + PLL to lock. + ********************************************************************/ + + // UIRbits.ACTVIF = 0; // Removed + #if defined(__18CXX) + while(USBActivityIF) + #endif + { + USBClearInterruptFlag(USBActivityIFReg,USBActivityIFBitNum); + } // Added + +}//end USBWakeFromSuspend + +/******************************************************************** + * Function: void USBCtrlEPService(void) + * + * PreCondition: USTAT is loaded with a valid endpoint address. + * + * Input: None + * + * Output: None + * + * Side Effects: None + * + * Overview: USBCtrlEPService checks for three transaction + * types that it knows how to service and services + * them: + * 1. EP0 SETUP + * 2. EP0 OUT + * 3. EP0 IN + * It ignores all other types (i.e. EP1, EP2, etc.) + * + * Note: None + *******************************************************************/ +static void USBCtrlEPService(void) +{ + //If we get to here, that means a successful transaction has just occurred + //on EP0. This means "progress" has occurred in the currently pending + //control transfer, so we should re-initialize our timeout counter. + #if defined(USB_ENABLE_STATUS_STAGE_TIMEOUTS) + USBStatusStageTimeoutCounter = USB_STATUS_STAGE_TIMEOUT; + #endif + + //Check if the last transaction was on EP0 OUT endpoint (of any kind, to either the even or odd buffer if ping pong buffers used) + if((USTATcopy.Val & USTAT_EP0_PP_MASK) == USTAT_EP0_OUT_EVEN) + { + //Point to the EP0 OUT buffer of the buffer that arrived + #if defined (_PIC14E) || defined(__18CXX) + pBDTEntryEP0OutCurrent = (volatile BDT_ENTRY*)&BDT[(USTATcopy.Val & USTAT_EP_MASK)>>1]; + #elif defined(__C30__) || defined(__C32__) || defined __XC16__ + pBDTEntryEP0OutCurrent = (volatile BDT_ENTRY*)&BDT[(USTATcopy.Val & USTAT_EP_MASK)>>2]; + #else + #error "unimplemented" + #endif + + //Set the next out to the current out packet + pBDTEntryEP0OutNext = pBDTEntryEP0OutCurrent; + //Toggle it to the next ping pong buffer (if applicable) + ((BYTE_VAL*)&pBDTEntryEP0OutNext)->Val ^= USB_NEXT_EP0_OUT_PING_PONG; + + //If the current EP0 OUT buffer has a SETUP packet + if(pBDTEntryEP0OutCurrent->STAT.PID == PID_SETUP) + { + unsigned char setup_cnt; + + //The SETUP transaction data may have gone into the the CtrlTrfData + //buffer, or elsewhere, depending upon how the BDT was prepared + //before the transaction. Therefore, we should copy the data to the + //SetupPkt buffer so it can be processed correctly by USBCtrlTrfSetupHandler(). + for(setup_cnt = 0; setup_cnt < 8u; setup_cnt++) //SETUP data packets always contain exactly 8 bytes. + { + *(BYTE*)((BYTE*)&SetupPkt + setup_cnt) = *(BYTE*)ConvertToVirtualAddress(pBDTEntryEP0OutCurrent->ADR); + pBDTEntryEP0OutCurrent->ADR++; + } + pBDTEntryEP0OutCurrent->ADR = ConvertToPhysicalAddress(&SetupPkt); + + //Handle the control transfer (parse the 8-byte SETUP command and figure out what to do) + USBCtrlTrfSetupHandler(); + } + else + { + //Handle the DATA transfer + USBCtrlTrfOutHandler(); + } + } + else if((USTATcopy.Val & USTAT_EP0_PP_MASK) == USTAT_EP0_IN) + { + //Otherwise the transmission was and EP0 IN + // so take care of the IN transfer + USBCtrlTrfInHandler(); + } + +}//end USBCtrlEPService + +/******************************************************************** + * Function: void USBCtrlTrfSetupHandler(void) + * + * PreCondition: SetupPkt buffer is loaded with valid USB Setup Data + * + * Input: None + * + * Output: None + * + * Side Effects: None + * + * Overview: This routine is a task dispatcher and has 3 stages. + * 1. It initializes the control transfer state machine. + * 2. It calls on each of the module that may know how to + * service the Setup Request from the host. + * Module Example: USBD, HID, CDC, MSD, ... + * A callback function, USBCBCheckOtherReq(), + * is required to call other module handlers. + * 3. Once each of the modules has had a chance to check if + * it is responsible for servicing the request, stage 3 + * then checks direction of the transfer to determine how + * to prepare EP0 for the control transfer. + * Refer to USBCtrlEPServiceComplete() for more details. + * + * Note: Microchip USB Firmware has three different states for + * the control transfer state machine: + * 1. WAIT_SETUP + * 2. CTRL_TRF_TX (device sends data to host through IN transactions) + * 3. CTRL_TRF_RX (device receives data from host through OUT transactions) + * Refer to firmware manual to find out how one state + * is transitioned to another. + * + * A Control Transfer is composed of many USB transactions. + * When transferring data over multiple transactions, + * it is important to keep track of data source, data + * destination, and data count. These three parameters are + * stored in pSrc,pDst, and wCount. A flag is used to + * note if the data source is from ROM or RAM. + * + *******************************************************************/ +static void USBCtrlTrfSetupHandler(void) +{ + //-------------------------------------------------------------------------- + //1. Re-initialize state tracking variables related to control transfers. + //-------------------------------------------------------------------------- + shortPacketStatus = SHORT_PKT_NOT_USED; + USBDeferStatusStagePacket = FALSE; + USBDeferINDataStagePackets = FALSE; + USBDeferOUTDataStagePackets = FALSE; + BothEP0OutUOWNsSet = FALSE; + controlTransferState = WAIT_SETUP; + + //Abandon any previous control transfers that might have been using EP0. + //Ordinarily, nothing actually needs abandoning, since the previous control + //transfer would have completed successfully prior to the host sending the next + //SETUP packet. However, in a timeout error case, or after an EP0 STALL event, + //one or more UOWN bits might still be set. If so, we should clear the UOWN bits, + //so the EP0 IN/OUT endpoints are in a known inactive state, ready for re-arming + //by the class request handler that will be called next. + pBDTEntryIn[0]->STAT.Val &= ~(_USIE); + ((BYTE_VAL*)&pBDTEntryIn[0])->Val ^= USB_NEXT_EP0_IN_PING_PONG; + pBDTEntryIn[0]->STAT.Val &= ~(_USIE); + ((BYTE_VAL*)&pBDTEntryIn[0])->Val ^= USB_NEXT_EP0_IN_PING_PONG; + pBDTEntryEP0OutNext->STAT.Val &= ~(_USIE); + + inPipes[0].info.Val = 0; + inPipes[0].wCount.Val = 0; + outPipes[0].info.Val = 0; + outPipes[0].wCount.Val = 0; + + + //-------------------------------------------------------------------------- + //2. Now find out what was in the SETUP packet, and begin handling the request. + //-------------------------------------------------------------------------- + USBCheckStdRequest(); //Check for standard USB "Chapter 9" requests. + USB_NONSTANDARD_EP0_REQUEST_HANDLER(EVENT_EP0_REQUEST,0,0); //Check for USB device class specific requests + + + //-------------------------------------------------------------------------- + //3. Re-arm EP0 IN and EP0 OUT endpoints, based on the control transfer in + // progress. If one of the above handlers (in step 2) knew how to process + // the request, it will have set one of the inPipes[0].info.bits.busy or + // outPipes[0].info.bits.busy flags = 1. This lets the + // USBCtrlEPServiceComplete() function know how and which endpoints to + // arm. If both info.bits.busy flags are = 0, then no one knew how to + // process the request. In this case, the default behavior will be to + // perform protocol STALL on EP0. + //-------------------------------------------------------------------------- + USBCtrlEPServiceComplete(); +}//end USBCtrlTrfSetupHandler + + +/****************************************************************************** + * Function: void USBCtrlTrfOutHandler(void) + * + * PreCondition: None + * + * Input: None + * + * Output: None + * + * Side Effects: None + * + * Overview: This routine handles an OUT transaction according to + * which control transfer state is currently active. + * + * Note: Note that if the the control transfer was from + * host to device, the session owner should be notified + * at the end of each OUT transaction to service the + * received data. + * + *****************************************************************************/ +static void USBCtrlTrfOutHandler(void) +{ + if(controlTransferState == CTRL_TRF_RX) + { + USBCtrlTrfRxService(); //Copies the newly received data into the appropriate buffer and configures EP0 OUT for next transaction. + } + else //In this case the last OUT transaction must have been a status stage of a CTRL_TRF_TX (... <-- this last OUT just occurred as the status stage) + { + //If the status stage is complete, this means we are done with the + //control transfer. Go back to the idle "WAIT_SETUP" state. + controlTransferState = WAIT_SETUP; + + //Prepare EP0 OUT for the next SETUP transaction, however, it may have + //already been prepared if ping-pong buffering was enabled on EP0 OUT, + //and the last control transfer was of direction: device to host, see + //USBCtrlEPServiceComplete(). If it was already prepared, do not want + //to do anything to the BDT. + if(BothEP0OutUOWNsSet == FALSE) + { + pBDTEntryEP0OutNext->CNT = USB_EP0_BUFF_SIZE; + pBDTEntryEP0OutNext->ADR = ConvertToPhysicalAddress(&SetupPkt); + pBDTEntryEP0OutNext->STAT.Val = _USIE|_DAT0|(_DTSEN & _DTS_CHECKING_ENABLED)|_BSTALL; + } + else + { + BothEP0OutUOWNsSet = FALSE; + } + } +} + +/****************************************************************************** + * Function: void USBCtrlTrfInHandler(void) + * + * PreCondition: None + * + * Input: None + * + * Output: None + * + * Side Effects: None + * + * Overview: This routine handles an IN transaction according to + * which control transfer state is currently active. + * + * Note: A Set Address Request must not change the acutal address + * of the device until the completion of the control + * transfer. The end of the control transfer for Set Address + * Request is an IN transaction. Therefore it is necessary + * to service this unique situation when the condition is + * right. Macro mUSBCheckAdrPendingState is defined in + * usb9.h and its function is to specifically service this + * event. + *****************************************************************************/ +static void USBCtrlTrfInHandler(void) +{ + BYTE lastDTS; + + lastDTS = pBDTEntryIn[0]->STAT.DTS; + + //switch to the next ping pong buffer + ((BYTE_VAL*)&pBDTEntryIn[0])->Val ^= USB_NEXT_EP0_IN_PING_PONG; + + //Must check if in ADR_PENDING_STATE. If so, we need to update the address + //now, since the IN status stage of the (set address) control transfer has + //evidently completed successfully. + if(USBDeviceState == ADR_PENDING_STATE) + { + U1ADDR = SetupPkt.bDevADR.Val; + if(U1ADDR != 0u) + { + USBDeviceState=ADDRESS_STATE; + } + else + { + USBDeviceState=DEFAULT_STATE; + } + }//end if + + + if(controlTransferState == CTRL_TRF_TX) + { + pBDTEntryIn[0]->ADR = ConvertToPhysicalAddress(CtrlTrfData); + USBCtrlTrfTxService(); + + //Check if we have already sent a short packet. If so, configure + //the endpoint to STALL in response to any further IN tokens (in the + //case that the host erroneously tries to receive more data than it + //should). + if(shortPacketStatus == SHORT_PKT_SENT) + { + // If a short packet has been sent, don't want to send any more, + // stall next time if host is still trying to read. + pBDTEntryIn[0]->STAT.Val = _USIE|_BSTALL; + } + else + { + if(lastDTS == 0) + { + pBDTEntryIn[0]->STAT.Val = _USIE|_DAT1|(_DTSEN & _DTS_CHECKING_ENABLED); + } + else + { + pBDTEntryIn[0]->STAT.Val = _USIE|_DAT0|(_DTSEN & _DTS_CHECKING_ENABLED); + } + }//end if(...)else + } + else // must have been a CTRL_TRF_RX status stage IN packet (... <-- this last IN just occurred as the status stage) + { + //if someone is still expecting data from the control transfer + // then make sure to terminate that request and let them know that + // they are done + if(outPipes[0].info.bits.busy == 1) + { + if(outPipes[0].pFunc != NULL) + { + outPipes[0].pFunc(); + } + outPipes[0].info.bits.busy = 0; + } + + controlTransferState = WAIT_SETUP; + //Don't need to arm EP0 OUT here. It was already armed by the last that + //got processed by the USBCtrlTrfRxService() handler. + } + +} + + +/******************************************************************** + * Function: void USBCheckStdRequest(void) + * + * PreCondition: None + * + * Input: None + * + * Output: None + * + * Side Effects: None + * + * Overview: This routine checks the setup data packet to see + * if it knows how to handle it + * + * Note: None + *******************************************************************/ +static void USBCheckStdRequest(void) +{ + if(SetupPkt.RequestType != USB_SETUP_TYPE_STANDARD_BITFIELD) return; + + switch(SetupPkt.bRequest) + { + case USB_REQUEST_SET_ADDRESS: + inPipes[0].info.bits.busy = 1; // This will generate a zero length packet + USBDeviceState = ADR_PENDING_STATE; // Update state only + /* See USBCtrlTrfInHandler() for the next step */ + break; + case USB_REQUEST_GET_DESCRIPTOR: + USBStdGetDscHandler(); + break; + case USB_REQUEST_SET_CONFIGURATION: + USBStdSetCfgHandler(); + break; + case USB_REQUEST_GET_CONFIGURATION: + inPipes[0].pSrc.bRam = (BYTE*)&USBActiveConfiguration; // Set Source + inPipes[0].info.bits.ctrl_trf_mem = USB_EP0_RAM; // Set memory type + inPipes[0].wCount.v[0] = 1; // Set data count + inPipes[0].info.bits.busy = 1; + break; + case USB_REQUEST_GET_STATUS: + USBStdGetStatusHandler(); + break; + case USB_REQUEST_CLEAR_FEATURE: + case USB_REQUEST_SET_FEATURE: + USBStdFeatureReqHandler(); + break; + case USB_REQUEST_GET_INTERFACE: + inPipes[0].pSrc.bRam = (BYTE*)&USBAlternateInterface[SetupPkt.bIntfID]; // Set source + inPipes[0].info.bits.ctrl_trf_mem = USB_EP0_RAM; // Set memory type + inPipes[0].wCount.v[0] = 1; // Set data count + inPipes[0].info.bits.busy = 1; + break; + case USB_REQUEST_SET_INTERFACE: + inPipes[0].info.bits.busy = 1; + USBAlternateInterface[SetupPkt.bIntfID] = SetupPkt.bAltID; + break; + case USB_REQUEST_SET_DESCRIPTOR: + USB_SET_DESCRIPTOR_HANDLER(EVENT_SET_DESCRIPTOR,0,0); + break; + case USB_REQUEST_SYNCH_FRAME: + default: + break; + }//end switch +}//end USBCheckStdRequest + +/******************************************************************** + * Function: void USBStdFeatureReqHandler(void) + * + * PreCondition: None + * + * Input: None + * + * Output: Can alter BDT entries. Can also modify USB stack + * Maintained variables. + * + * Side Effects: None + * + * Overview: This routine handles the standard SET & CLEAR + * FEATURES requests + * + * Note: This is a private function, intended for internal + * use by the USB stack, when processing SET/CLEAR + * feature requests. + *******************************************************************/ +static void USBStdFeatureReqHandler(void) +{ + BDT_ENTRY *p; + EP_STATUS current_ep_data; + #if defined(__C32__) + DWORD* pUEP; + #else + unsigned char* pUEP; + #endif + + + #ifdef USB_SUPPORT_OTG + //Check for USB On-The-Go (OTG) specific requests + if ((SetupPkt.bFeature == OTG_FEATURE_B_HNP_ENABLE)&& + (SetupPkt.Recipient == USB_SETUP_RECIPIENT_DEVICE_BITFIELD)) + { + inPipes[0].info.bits.busy = 1; + if(SetupPkt.bRequest == USB_REQUEST_SET_FEATURE) + USBOTGEnableHnp(); + else + USBOTGDisableHnp(); + } + + if ((SetupPkt.bFeature == OTG_FEATURE_A_HNP_SUPPORT)&& + (SetupPkt.Recipient == USB_SETUP_RECIPIENT_DEVICE_BITFIELD)) + { + inPipes[0].info.bits.busy = 1; + if(SetupPkt.bRequest == USB_REQUEST_SET_FEATURE) + USBOTGEnableSupportHnp(); + else + USBOTGDisableSupportHnp(); + } + + if ((SetupPkt.bFeature == OTG_FEATURE_A_ALT_HNP_SUPPORT)&& + (SetupPkt.Recipient == USB_SETUP_RECIPIENT_DEVICE_BITFIELD)) + { + inPipes[0].info.bits.busy = 1; + if(SetupPkt.bRequest == USB_REQUEST_SET_FEATURE) + USBOTGEnableAltHnp(); + else + USBOTGDisableAltHnp(); + } + #endif //#ifdef USB_SUPPORT_OTG + + //Check if the host sent a valid SET or CLEAR feature (remote wakeup) request. + if((SetupPkt.bFeature == USB_FEATURE_DEVICE_REMOTE_WAKEUP)&& + (SetupPkt.Recipient == USB_SETUP_RECIPIENT_DEVICE_BITFIELD)) + { + inPipes[0].info.bits.busy = 1; + if(SetupPkt.bRequest == USB_REQUEST_SET_FEATURE) + RemoteWakeup = TRUE; + else + RemoteWakeup = FALSE; + }//end if + + //Check if the host sent a valid SET or CLEAR endpoint halt request. + if((SetupPkt.bFeature == USB_FEATURE_ENDPOINT_HALT)&& + (SetupPkt.Recipient == USB_SETUP_RECIPIENT_ENDPOINT_BITFIELD)&& + (SetupPkt.EPNum != 0) && (SetupPkt.EPNum <= USB_MAX_EP_NUMBER)&& + (USBDeviceState == CONFIGURED_STATE)) + { + //The request was valid. Take control of the control transfer and + //perform the host requested action. + inPipes[0].info.bits.busy = 1; + + //Fetch a pointer to the BDT that the host wants to SET/CLEAR halt on. + if(SetupPkt.EPDir == OUT_FROM_HOST) + { + p = (BDT_ENTRY*)pBDTEntryOut[SetupPkt.EPNum]; + current_ep_data.Val = ep_data_out[SetupPkt.EPNum].Val; + } + else + { + p = (BDT_ENTRY*)pBDTEntryIn[SetupPkt.EPNum]; + current_ep_data.Val = ep_data_in[SetupPkt.EPNum].Val; + } + + //If ping pong buffering is enabled on the requested endpoint, need + //to point to the one that is the active BDT entry which the SIE will + //use for the next attempted transaction on that EP number. + #if (USB_PING_PONG_MODE == USB_PING_PONG__ALL_BUT_EP0) || (USB_PING_PONG_MODE == USB_PING_PONG__FULL_PING_PONG) + if(current_ep_data.bits.ping_pong_state == 0) //Check if even + { + USBHALPingPongSetToEven(&p); + } + else //else must have been odd + { + USBHALPingPongSetToOdd(&p); + } + #endif + + //Update the BDT pointers with the new, next entry based on the feature + // request + if(SetupPkt.EPDir == OUT_FROM_HOST) + { + pBDTEntryOut[SetupPkt.EPNum] = (volatile BDT_ENTRY *)p; + } + else + { + pBDTEntryIn[SetupPkt.EPNum] = (volatile BDT_ENTRY *)p; + } + + //Check if it was a SET_FEATURE endpoint halt request + if(SetupPkt.bRequest == USB_REQUEST_SET_FEATURE) + { + if(p->STAT.UOWN == 1) + { + //Mark that we are terminating this transfer and that the user + // needs to be notified later + if(SetupPkt.EPDir == OUT_FROM_HOST) + { + ep_data_out[SetupPkt.EPNum].bits.transfer_terminated = 1; + } + else + { + ep_data_in[SetupPkt.EPNum].bits.transfer_terminated = 1; + } + } + + //Then STALL the endpoint + p->STAT.Val |= _USIE|_BSTALL; + }//if(SetupPkt.bRequest == USB_REQUEST_SET_FEATURE) + else + { + //Else the request must have been a CLEAR_FEATURE endpoint halt. + #if (USB_PING_PONG_MODE == USB_PING_PONG__ALL_BUT_EP0) || (USB_PING_PONG_MODE == USB_PING_PONG__FULL_PING_PONG) + //toggle over the to the non-active BDT + USBAdvancePingPongBuffer(&p); + + if(p->STAT.UOWN == 1) + { + //Clear UOWN and set DTS state so it will be correct the next time + //the application firmware uses USBTransferOnePacket() on the EP. + p->STAT.Val &= (~_USIE); //Clear UOWN bit + p->STAT.Val |= _DAT1; //Set DTS to DATA1 + USB_TRANSFER_TERMINATED_HANDLER(EVENT_TRANSFER_TERMINATED,p,sizeof(p)); + } + else + { + //UOWN already clear, but still need to set DTS to DATA1 + p->STAT.Val |= _DAT1; + } + + //toggle back to the active BDT (the one the SIE is currently looking at + //and will use for the next successful transaction to take place on the EP + USBAdvancePingPongBuffer(&p); + + //Check if we are currently terminating, or have previously terminated + //a transaction on the given endpoint. If so, need to clear UOWN, + //set DTS to the proper state, and call the application callback + //function. + if((current_ep_data.bits.transfer_terminated != 0) || (p->STAT.UOWN == 1)) + { + if(SetupPkt.EPDir == OUT_FROM_HOST) + { + ep_data_out[SetupPkt.EPNum].bits.transfer_terminated = 0; + } + else + { + ep_data_in[SetupPkt.EPNum].bits.transfer_terminated = 0; + } + //clear UOWN, clear DTS to DATA0, and finally remove the STALL condition + p->STAT.Val &= ~(_USIE | _DAT1 | _BSTALL); + //Call the application event handler callback function, so it can + //decide if the endpoint should get re-armed again or not. + USB_TRANSFER_TERMINATED_HANDLER(EVENT_TRANSFER_TERMINATED,p,sizeof(p)); + } + else + { + //clear UOWN, clear DTS to DATA0, and finally remove the STALL condition + p->STAT.Val &= ~(_USIE | _DAT1 | _BSTALL); + } + #else //else we must not be using ping-pong buffering on the requested endpoint + //Check if we need to call the user transfer terminated event callback function. + //We should call the callback, if the endpoint was previously terminated, + //or the endpoint is currently armed, and the host is performing clear + //endpoint halt, even though the endpoint wasn't stalled. + if((current_ep_data.bits.transfer_terminated != 0) || (p->STAT.UOWN == 1)) + { + //We are going to call the user transfer terminated callback. + //Clear the flag so we know we took care of it and don't need + //to call it again later. + if(SetupPkt.EPDir == OUT_FROM_HOST) + { + ep_data_out[SetupPkt.EPNum].bits.transfer_terminated = 0; + } + else + { + ep_data_in[SetupPkt.EPNum].bits.transfer_terminated = 0; + } + + //Clear UOWN and remove the STALL condition. + // In this case we also need to set the DTS bit to 1 so that + // it toggles to DATA0 the next time the application firmware + // calls USBTransferOnePacket() (or equivalent macro). + p->STAT.Val &= ~(_USIE | _BSTALL); + p->STAT.Val |= _DAT1; + //Let the application firmware know a transaction just + //got terminated by the host, and that it is now free to + //re-arm the endpoint or do other tasks if desired. + USB_TRANSFER_TERMINATED_HANDLER(EVENT_TRANSFER_TERMINATED,p,sizeof(p)); + } + else + { + //Clear UOWN and remove the STALL condition. + // In this case we also need to set the DTS bit to 1 so that + // it toggles to DATA0 the next time the application firmware + // calls USBTransferOnePacket() (or equivalent macro). + p->STAT.Val &= ~(_USIE | _BSTALL); + p->STAT.Val |= _DAT1; + } + #endif //end of #if (USB_PING_PONG_MODE == USB_PING_PONG__ALL_BUT_EP0) || (USB_PING_PONG_MODE == USB_PING_PONG__FULL_PING_PONG) + + //Get a pointer to the appropriate UEPn register + #if defined(__C32__) + pUEP = (DWORD*)(&U1EP0); + pUEP += (SetupPkt.EPNum*4); + #else + pUEP = (unsigned char*)(&U1EP0+SetupPkt.EPNum); + #endif + + //Clear the STALL bit in the UEP register + *pUEP &= ~UEP_STALL; + }//end if(SetupPkt.bRequest == USB_REQUEST_SET_FEATURE) + }//end if (lots of checks for set/clear endpoint halt) +}//end USBStdFeatureReqHandler + + +/** EOF USBDevice.c *****************************************************/ diff --git a/software/front/US_Firmware.X/usb/usb_device.h b/software/front/US_Firmware.X/usb/usb_device.h new file mode 100644 index 0000000..547339f --- /dev/null +++ b/software/front/US_Firmware.X/usb/usb_device.h @@ -0,0 +1,1988 @@ +/******************************************************************************* + + USB Device header file + +Summary: + This file, with its associated C source file, provides the main substance of + the USB device side stack. These files will receive, transmit, and process + various USB commands as well as take action when required for various events + that occur on the bus. + +Description: + This file, with its associated C source file, provides the main substance of + the USB device side stack. These files will receive, transmit, and process + various USB commands as well as take action when required for various events + that occur on the bus. + + This file is located in the "\\\Microchip\\Include\\USB" + directory. + + When including this file in a new project, this file can either be + referenced from the directory in which it was installed or copied + directly into the user application folder. If the first method is + chosen to keep the file located in the folder in which it is installed + then include paths need to be added so that the library and the + application both know where to reference each others files. If the + application folder is located in the same folder as the Microchip + folder (like the current demo folders), then the following include + paths need to be added to the application's project: + + ..\\..\\Microchip\\Include + + . + + If a different directory structure is used, modify the paths as + required. An example using absolute paths instead of relative paths + would be the following: + + C:\\Microchip Solutions\\Microchip\\Include + + C:\\Microchip Solutions\\My Demo Application + +******************************************************************************/ +//DOM-IGNORE-BEGIN +/****************************************************************************** + FileName: usb_device.h + Dependencies: See INCLUDES section + Processor: All Microchip parts with a USB module + Hardware: Please see documentation in "/Microchip/Help" + folder for details. + Complier: Microchip C18 + XC16 + XC32 + Company: Microchip Technology, Inc. + + Software License Agreement: + + The software supplied herewith by Microchip Technology Incorporated + (the "Company") for its PIC(R) Microcontroller is intended and + supplied to you, the Company’s customer, for use solely and + exclusively on Microchip PIC Microcontroller products. The + software is owned by the Company and/or its supplier, and is + protected under applicable copyright laws. All rights are reserved. + Any use in violation of the foregoing restrictions may subject the + user to criminal sanctions under applicable laws, as well as to + civil liability for the breach of the terms and conditions of this + license. + + THIS SOFTWARE IS PROVIDED IN AN "AS IS" CONDITION. NO WARRANTIES, + WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED + TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT, + IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR + CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +*******************************************************************/ + +/******************************************************************** + Change History: + Rev Description + ---- ----------- + 2.1 Added "(" & ")" to EP definitions + updated for simplicity and to use common + coding style + + 2.6 Removed many of the device specific information to the + HAL layer files. Moved many of the CH9 defintions to the + CH9 file. + + 2.6a No Change + + 2.7 Fixed error where USBHandleGetAddr() didn't convert the + return address from a physical address to a virtual address + for PIC32. + + Added macro versions of USBDeviceAttach() and USBDeviceDetach() + so they will compile without error when using polling mode. + + 2.7a No Change + + 2.8 Added EVENT_TRANSFER_TERMINATED event enum item. + +********************************************************************/ + +#ifndef USBDEVICE_H +#define USBDEVICE_H +//DOM-IGNORE-END + +/** DEFINITIONS ****************************************************/ + +//USB_HANDLE is a pointer to an entry in the BDT. This pointer can be used +// to read the length of the last transfer, the status of the last transfer, +// and various other information. Insure to initialize USB_HANDLE objects +// to NULL so that they are in a known state during their first usage. +#define USB_HANDLE void* + +#define USB_EP0_ROM 0x00 //Data comes from RAM +#define USB_EP0_RAM 0x01 //Data comes from ROM +#define USB_EP0_BUSY 0x80 //The PIPE is busy +#define USB_EP0_INCLUDE_ZERO 0x40 //include a trailing zero packet +#define USB_EP0_NO_DATA 0x00 //no data to send +#define USB_EP0_NO_OPTIONS 0x00 //no options set + +/******************************************************************** + * Standard Request Codes + * USB 2.0 Spec Ref Table 9-4 + *******************************************************************/ + +/* USB Device States as returned by USBGetDeviceState(). Only the defintions + for these states should be used. The actual value for each state should + not be relied upon as constant and may change based on the implementation. */ +typedef enum +{ + /* Detached is the state in which the device is not attached to the bus. When + in the detached state a device should not have any pull-ups attached to either + the D+ or D- line. */ + DETACHED_STATE + /*DOM-IGNORE-BEGIN*/ = 0x00 /*DOM-IGNORE-END*/, + /* Attached is the state in which the device is attached ot the bus but the + hub/port that it is attached to is not yet configured. */ + ATTACHED_STATE + /*DOM-IGNORE-BEGIN*/ = 0x01 /*DOM-IGNORE-END*/, + /* Powered is the state in which the device is attached to the bus and the + hub/port that it is attached to is configured. */ + POWERED_STATE + /*DOM-IGNORE-BEGIN*/ = 0x02 /*DOM-IGNORE-END*/, + /* Default state is the state after the device receives a RESET command from + the host. */ + DEFAULT_STATE + /*DOM-IGNORE-BEGIN*/ = 0x04 /*DOM-IGNORE-END*/, + /* Address pending state is not an official state of the USB defined states. + This state is internally used to indicate that the device has received a + SET_ADDRESS command but has not received the STATUS stage of the transfer yet. + The device is should not switch addresses until after the STATUS stage is + complete. */ + ADR_PENDING_STATE + /*DOM-IGNORE-BEGIN*/ = 0x08 /*DOM-IGNORE-END*/, + /* Address is the state in which the device has its own specific address on the + bus. */ + ADDRESS_STATE + /*DOM-IGNORE-BEGIN*/ = 0x10 /*DOM-IGNORE-END*/, + /* Configured is the state where the device has been fully enumerated and is + operating on the bus. The device is now allowed to excute its application + specific tasks. It is also allowed to increase its current consumption to the + value specified in the configuration descriptor of the current configuration. + */ + CONFIGURED_STATE + /*DOM-IGNORE-BEGIN*/ = 0x20 /*DOM-IGNORE-END*/ +} USB_DEVICE_STATE; + + +/* USB device stack events description here - DWF */ +typedef enum +{ + // Notification that a SET_CONFIGURATION() command was received (device) + EVENT_CONFIGURED + /*DOM-IGNORE-BEGIN*/ = EVENT_DEVICE_STACK_BASE /*DOM-IGNORE-END*/, + + // A SET_DESCRIPTOR request was received (device) + EVENT_SET_DESCRIPTOR, + + // An endpoint 0 request was received that the stack did not know how to + // handle. This is most often a request for one of the class drivers. + // Please refer to the class driver documenation for information related + // to what to do if this request is received. (device) + EVENT_EP0_REQUEST, + +// // A USB transfer has completed. The data associated with this event is of +// // the data type HOST_TRANSFER_DATA if the event is generated from the host +// // stack. +// EVENT_TRANSFER, +// +// // A USB Start of Frame token has been received. This event is not +// // used by the Host stack. +// EVENT_SOF, +// +// // Device-mode resume received. This event is not used by the Host stack. +// EVENT_RESUME, +// +// // Device-mode suspend/idle event received. This event is not used by the +// // Host stack. +// EVENT_SUSPEND, +// +// // Device-mode bus reset received. This event is not used by the Host +// // stack. +// EVENT_RESET, + +// // Device Mode: A setup packet received (data: SETUP_PKT). This event is +// // not used by the Host stack. +// EVENT_SETUP, + + // Device-mode USB cable has been attached. This event is not used by the + // Host stack. The client driver may provide an application event when a + // device attaches. + EVENT_ATTACH, + + // A user transfer was terminated by the stack. This event will pass back + // the value of the handle that was terminated. Compare this value against + // the current valid handles to determine which transfer was terminated. + EVENT_TRANSFER_TERMINATED + +} USB_DEVICE_STACK_EVENTS; + +/** Function Prototypes **********************************************/ + + +/******************************************************************************/ +/** External API Functions ****************************************************/ +/******************************************************************************/ + +/************************************************************************** + Function: + void USBDeviceInit(void) + + Description: + This function initializes the device stack it in the default state. The + USB module will be completely reset including all of the internal + variables, registers, and interrupt flags. + + Precondition: + This function must be called before any of the other USB Device + functions can be called, including USBDeviceTasks(). + + Parameters: + None + + Return Values: + None + + Remarks: + None + + **************************************************************************/ +void USBDeviceInit(void); + +/************************************************************************** + Function: + void USBDeviceTasks(void) + + Summary: + This function is the main state machine/transaction handler of the USB + device side stack. When the USB stack is operated in "USB_POLLING" mode + (usb_config.h user option) the USBDeviceTasks() function should be called + periodically to receive and transmit packets through the stack. This + function also takes care of control transfers associated with the USB + enumeration process, and detecting various USB events (such as suspend). + This function should be called at least once every 1.8ms during the USB + enumeration process. After the enumeration process is complete (which can + be determined when USBGetDeviceState() returns CONFIGURED_STATE), the + USBDeviceTasks() handler may be called the faster of: either once + every 9.8ms, or as often as needed to make sure that the hardware USTAT + FIFO never gets full. A good rule of thumb is to call USBDeviceTasks() at + a minimum rate of either the frequency that USBTransferOnePacket() gets + called, or, once/1.8ms, whichever is faster. See the inline code comments + near the top of usb_device.c for more details about minimum timing + requirements when calling USBDeviceTasks(). + + When the USB stack is operated in "USB_INTERRUPT" mode, it is not necessary + to call USBDeviceTasks() from the main loop context. In the USB_INTERRUPT + mode, the USBDeviceTasks() handler only needs to execute when a USB + interrupt occurs, and therefore only needs to be called from the interrupt + context. + + Description: + This function is the main state machine/transaction handler of the USB + device side stack. When the USB stack is operated in "USB_POLLING" mode + (usb_config.h user option) the USBDeviceTasks() function should be called + periodically to receive and transmit packets through the stack. This + function also takes care of control transfers associated with the USB + enumeration process, and detecting various USB events (such as suspend). + This function should be called at least once every 1.8ms during the USB + enumeration process. After the enumeration process is complete (which can + be determined when USBGetDeviceState() returns CONFIGURED_STATE), the + USBDeviceTasks() handler may be called the faster of: either once + every 9.8ms, or as often as needed to make sure that the hardware USTAT + FIFO never gets full. A good rule of thumb is to call USBDeviceTasks() at + a minimum rate of either the frequency that USBTransferOnePacket() gets + called, or, once/1.8ms, whichever is faster. See the inline code comments + near the top of usb_device.c for more details about minimum timing + requirements when calling USBDeviceTasks(). + + When the USB stack is operated in "USB_INTERRUPT" mode, it is not necessary + to call USBDeviceTasks() from the main loop context. In the USB_INTERRUPT + mode, the USBDeviceTasks() handler only needs to execute when a USB + interrupt occurs, and therefore only needs to be called from the interrupt + context. + + Typical usage: + + void main(void) + { + USBDeviceInit(); + while(1) + { + USBDeviceTasks(); //Takes care of enumeration and other USB events + if((USBGetDeviceState() \< CONFIGURED_STATE) || + (USBIsDeviceSuspended() == TRUE)) + { + //Either the device is not configured or we are suspended, + // so we don't want to execute any USB related application code + continue; //go back to the top of the while loop + } + else + { + //Otherwise we are free to run USB and non-USB related user + //application code. + UserApplication(); + } + } + } + + + Precondition: + Make sure the USBDeviceInit() function has been called prior to calling + USBDeviceTasks() for the first time. + Remarks: + USBDeviceTasks() does not need to be called while in the USB suspend mode, + if the user application firmware in the USBCBSuspend() callback function + enables the ACTVIF USB interrupt source and put the microcontroller into + sleep mode. If the application firmware decides not to sleep the + microcontroller core during USB suspend (ex: continues running at full + frequency, or clock switches to a lower frequency), then the USBDeviceTasks() + function must still be called periodically, at a rate frequent enough to + ensure the 10ms resume recovery interval USB specification is met. Assuming + a worst case primary oscillator and PLL start up time of <5ms, then + USBDeviceTasks() should be called once every 5ms in this scenario. + + When the USB cable is detached, or the USB host is not actively powering + the VBUS line to +5V nominal, the application firmware does not always have + to call USBDeviceTasks() frequently, as no USB activity will be taking + place. However, if USBDeviceTasks() is not called regularly, some + alternative means of promptly detecting when VBUS is powered (indicating + host attachment), or not powered (host powered down or USB cable unplugged) + is still needed. For self or dual self/bus powered USB applications, see + the USBDeviceAttach() and USBDeviceDetach() API documentation for additional + considerations. + + **************************************************************************/ +void USBDeviceTasks(void); + + +/******************************************************************************* + Function: + void USBEnableEndpoint(BYTE ep, BYTE options) + + Summary: + This function will enable the specified endpoint with the specified + options + Description: + This function will enable the specified endpoint with the specified + options. + + Typical Usage: + + void USBCBInitEP(void) + { + USBEnableEndpoint(MSD_DATA_IN_EP,USB_IN_ENABLED|USB_OUT_ENABLED|USB_HANDSHAKE_ENABLED|USB_DISALLOW_SETUP); + USBMSDInit(); + } + + + In the above example endpoint number MSD_DATA_IN_EP is being configured + for both IN and OUT traffic with handshaking enabled. Also since + MSD_DATA_IN_EP is not endpoint 0 (MSD does not allow this), then we can + explicitly disable SETUP packets on this endpoint. + Conditions: + None + Input: + BYTE ep - the endpoint to be configured + BYTE options - optional settings for the endpoint. The options should + be ORed together to form a single options string. The + available optional settings for the endpoint. The + options should be ORed together to form a single options + string. The available options are the following\: + * USB_HANDSHAKE_ENABLED enables USB handshaking (ACK, + NAK) + * USB_HANDSHAKE_DISABLED disables USB handshaking (ACK, + NAK) + * USB_OUT_ENABLED enables the out direction + * USB_OUT_DISABLED disables the out direction + * USB_IN_ENABLED enables the in direction + * USB_IN_DISABLED disables the in direction + * USB_ALLOW_SETUP enables control transfers + * USB_DISALLOW_SETUP disables control transfers + * USB_STALL_ENDPOINT STALLs this endpoint + Return: + None + Remarks: + None + *****************************************************************************/ +void USBEnableEndpoint(BYTE ep, BYTE options); + + +/************************************************************************* + Function: + USB_HANDLE USBTransferOnePacket(BYTE ep, BYTE dir, BYTE* data, BYTE len) + + Summary: + Transfers a single packet (one transaction) of data on the USB bus. + + Description: + The USBTransferOnePacket() function prepares a USB endpoint + so that it may send data to the host (an IN transaction), or + receive data from the host (an OUT transaction). The + USBTransferOnePacket() function can be used both to receive and + send data to the host. This function is the primary API function + provided by the USB stack firmware for sending or receiving application + data over the USB port. + + The USBTransferOnePacket() is intended for use with all application + endpoints. It is not used for sending or receiving applicaiton data + through endpoint 0 by using control transfers. Separate API + functions, such as USBEP0Receive(), USBEP0SendRAMPtr(), and + USBEP0SendROMPtr() are provided for this purpose. + + The USBTransferOnePacket() writes to the Buffer Descriptor Table (BDT) + entry associated with an endpoint buffer, and sets the UOWN bit, which + prepares the USB hardware to allow the transaction to complete. The + application firmware can use the USBHandleBusy() macro to check the + status of the transaction, to see if the data has been successfully + transmitted yet. + + + Typical Usage + + //make sure that the we are in the configured state + if(USBGetDeviceState() == CONFIGURED_STATE) + { + //make sure that the last transaction isn't busy by checking the handle + if(!USBHandleBusy(USBInHandle)) + { + //Write the new data that we wish to send to the host to the INPacket[] array + INPacket[0] = USEFUL_APPLICATION_VALUE1; + INPacket[1] = USEFUL_APPLICATION_VALUE2; + //INPacket[2] = ... (fill in the rest of the packet data) + + //Send the data contained in the INPacket[] array through endpoint "EP_NUM" + USBInHandle = USBTransferOnePacket(EP_NUM,IN_TO_HOST,(BYTE*)&INPacket[0],sizeof(INPacket)); + } + } + + + Conditions: + Before calling USBTransferOnePacket(), the following should be true. + 1. The USB stack has already been initialized (USBDeviceInit() was called). + 2. A transaction is not already pending on the specified endpoint. This + is done by checking the previous request using the USBHandleBusy() + macro (see the typical usage example). + 3. The host has already sent a set configuration request and the + enumeration process is complete. + This can be checked by verifying that the USBGetDeviceState() + macro returns "CONFIGURED_STATE", prior to calling + USBTransferOnePacket(). + + Input: + BYTE ep - The endpoint number that the data will be transmitted or + received on + BYTE dir - The direction of the transfer + This value is either OUT_FROM_HOST or IN_TO_HOST + BYTE* data - For IN transactions: pointer to the RAM buffer containing + the data to be sent to the host. For OUT transactions: pointer + to the RAM buffer that the received data should get written to. + BYTE len - Length of the data needing to be sent (for IN transactions). + For OUT transactions, the len parameter should normally be set + to the endpoint size specified in the endpoint descriptor. + + Return Values: + USB_HANDLE - handle to the transfer. The handle is a pointer to + the BDT entry associated with this transaction. The + status of the transaction (ex: if it is complete or still + pending) can be checked using the USBHandleBusy() macro + and supplying the USB_HANDLE provided by + USBTransferOnePacket(). + + Remarks: + If calling the USBTransferOnePacket() function from within the USBCBInitEP() + callback function, the set configuration is still being processed and the + USBDeviceState may not be == CONFIGURED_STATE yet. In this special case, + the USBTransferOnePacket() may still be called, but make sure that the + endpoint has been enabled and initialized by the USBEnableEndpoint() + function first. + + *************************************************************************/ +USB_HANDLE USBTransferOnePacket(BYTE ep,BYTE dir,BYTE* data,BYTE len); + +/******************************************************************** + Function: + void USBStallEndpoint(BYTE ep, BYTE dir) + + Summary: + Configures the specified endpoint to send STALL to the host, the next + time the host tries to access the endpoint. + + PreCondition: + None + + Parameters: + BYTE ep - The endpoint number that should be configured to send STALL. + BYTE dir - The direction of the endpoint to STALL, either + IN_TO_HOST or OUT_FROM_HOST. + + Return Values: + None + + Remarks: + None + + *******************************************************************/ +void USBStallEndpoint(BYTE ep, BYTE dir); +/************************************************************************** + Function: + void USBCancelIO(BYTE endpoint) + + Description: + This function cancels the transfers pending on the specified endpoint. + This function can only be used after a SETUP packet is received and + before that setup packet is handled. This is the time period in which + the EVENT_EP0_REQUEST is thrown, before the event handler function + returns to the stack. + + Precondition: + + Parameters: + BYTE endpoint - the endpoint number you wish to cancel the transfers for + + Return Values: + None + + Remarks: + None + + **************************************************************************/ +void USBCancelIO(BYTE endpoint); + +/************************************************************************** + Function: + void USBDeviceDetach(void) + + Summary: + This function configures the USB module to "soft detach" itself from + the USB host. + + Description: + This function configures the USB module to perform a "soft detach" + operation, by disabling the D+ (or D-) ~1.5k pull up resistor, which + lets the host know the device is present and attached. This will make + the host think that the device has been unplugged. This is potentially + useful, as it allows the USB device to force the host to re-enumerate + the device (on the firmware has re-enabled the USB module/pull up, by + calling USBDeviceAttach(), to "soft re-attach" to the host). + + Precondition: + Should only be called when USB_INTERRUPT is defined. See remarks + section if USB_POLLING mode option is being used (usb_config.h option). + + Additionally, this function should only be called from the main() loop + context. Do not call this function from within an interrupt handler, as + this function may modify global interrupt enable bits and settings. + + Parameters: + None + + Return Values: + None + + Remarks: + If the application firmware calls USBDeviceDetach(), it is strongly + recommended that the firmware wait at least >= 80ms before calling + USBDeviceAttach(). If the firmeware performs a soft detach, and then + re-attaches too soon (ex: after a few micro seconds for instance), some + hosts may interpret this as an unexpected "glitch" rather than as a + physical removal/re-attachment of the USB device. In this case the host + may simply ignore the event without re-enumerating the device. To + ensure that the host properly detects and processes the device soft + detach/re-attach, it is recommended to make sure the device remains + detached long enough to mimic a real human controlled USB + unplug/re-attach event (ex: after calling USBDeviceDetach(), do not + call USBDeviceAttach() for at least 80+ms, preferrably longer. + + Neither the USBDeviceDetach() or USBDeviceAttach() functions are blocking + or take long to execute. It is the application firmware's + responsibility for adding the 80+ms delay, when using these API + functions. + + Note: The Windows plug and play event handler processing is fairly + slow, especially in certain versions of Windows, and for certain USB + device classes. It has been observed that some device classes need to + provide even more USB detach dwell interval (before calling + USBDeviceAttach()), in order to work correctly after re-enumeration. + If the USB device is a CDC class device, it is recommended to wait + at least 1.5 seconds or longer, before soft re-attaching to the host, + to provide the plug and play event handler enough time to finish + processing the removal event, before the re-attach occurs. + + If the application is using the USB_POLLING mode option, then the + USBDeviceDetach() and USBDeviceAttach() functions are not available. + In this mode, the USB stack relies on the "#define USE_USB_BUS_SENSE_IO" + and "#define USB_BUS_SENSE" options in the + HardwareProfile – [platform name].h file. + + When using the USB_POLLING mode option, and the + "#define USE_USB_BUS_SENSE_IO" definition has been commented out, then + the USB stack assumes that it should always enable the USB module at + pretty much all times. Basically, anytime the application firmware + calls USBDeviceTasks(), the firmware will automatically enable the USB + module. This mode would typically be selected if the application was + designed to be a purely bus powered device. In this case, the + application is powered from the +5V VBUS supply from the USB port, so + it is correct and sensible in this type of application to power up and + turn on the USB module, at anytime that the microcontroller is + powered (which implies the USB cable is attached and the host is also + powered). + + In a self powered application, the USB stack is designed with the + intention that the user will enable the "#define USE_USB_BUS_SENSE_IO" + option in the HardwareProfile – [platform name].h file. When this + option is defined, then the USBDeviceTasks() function will automatically + check the I/O pin port value of the designated pin (based on the + #define USB_BUS_SENSE option in the HardwareProfile – [platform name].h + file), every time the application calls USBDeviceTasks(). If the + USBDeviceTasks() function is executed and finds that the pin defined by + the #define USB_BUS_SENSE is in a logic low state, then it will + automatically disable the USB module and tri-state the D+ and D- pins. + If however the USBDeviceTasks() function is executed and finds the pin + defined by the #define USB_BUS_SENSE is in a logic high state, then it + will automatically enable the USB module, if it has not already been + enabled. + + **************************************************************************/ +void USBDeviceDetach(void); + +/*DOM-IGNORE-BEGIN*/ +#if !defined(USB_INTERRUPT) + #define USBDeviceDetach() +#endif +/*DOM-IGNORE-END*/ + +/************************************************************************** + Function: + void USBDeviceAttach(void) + + Summary: + Checks if VBUS is present, and that the USB module is not already + initalized, and if so, enables the USB module so as to signal device + attachment to the USB host. + + Description: + This function indicates to the USB host that the USB device has been + attached to the bus. This function needs to be called in order for the + device to start to enumerate on the bus. + + Precondition: + Should only be called when USB_INTERRUPT is defined. Also, should only + be called from the main() loop context. Do not call USBDeviceAttach() + from within an interrupt handler, as the USBDeviceAttach() function + may modify global interrupt enable bits and settings. + + For normal USB devices: + Make sure that if the module was previously on, that it has been turned off + for a long time (ex: 100ms+) before calling this function to re-enable the module. + If the device turns off the D+ (for full speed) or D- (for low speed) ~1.5k ohm + pull up resistor, and then turns it back on very quickly, common hosts will sometimes + reject this event, since no human could ever unplug and reattach a USB device in a + microseconds (or nanoseconds) timescale. The host could simply treat this as some kind + of glitch and ignore the event altogether. + Parameters: + None + + Return Values: + None + + Remarks: + See also the USBDeviceDetach() API function documentation. +****************************************************************************/ +void USBDeviceAttach(void); + +/*DOM-IGNORE-BEGIN*/ +#if !defined(USB_INTERRUPT) + #define USBDeviceAttach() +#endif +/*DOM-IGNORE-END*/ + + +/******************************************************************************* + Function: void USBCtrlEPAllowStatusStage(void); + + Summary: This function prepares the proper endpoint 0 IN or endpoint 0 OUT + (based on the controlTransferState) to allow the status stage packet + of a control transfer to complete. This function gets used + internally by the USB stack itself, but it may also be called from + the application firmware, IF the application firmware called + the USBDeferStatusStage() function during the initial processing + of the control transfer request. In this case, the application + must call the USBCtrlEPAllowStatusStage() once, after it has fully + completed processing and handling the data stage portion of the + request. + + If the application firmware has no need for delaying control + transfers, and therefore never calls USBDeferStatusStage(), then the + application firmware should not call USBCtrlEPAllowStatusStage(). + + Description: + + Conditions: + None + + Input: + + Return: + + Remarks: + None + *****************************************************************************/ +void USBCtrlEPAllowStatusStage(void); + + + +/******************************************************************************* + Function: void USBCtrlEPAllowDataStage(void); + + Summary: This function allows the data stage of either a host-to-device or + device-to-host control transfer (with data stage) to complete. + This function is meant to be used in conjunction with either the + USBDeferOUTDataStage() or USBDeferINDataStage(). If the firmware + does not call either USBDeferOUTDataStage() or USBDeferINDataStage(), + then the firmware does not need to manually call + USBCtrlEPAllowDataStage(), as the USB stack will call this function + instead. + + Description: + + Conditions: A control transfer (with data stage) should already be pending, + if the firmware calls this function. Additionally, the firmware + should have called either USBDeferOUTDataStage() or + USBDeferINDataStage() at the start of the control transfer, if + the firmware will be calling this function manually. + + Input: + + Return: + + Remarks: + *****************************************************************************/ +void USBCtrlEPAllowDataStage(void); + + +/******************************************************************************* + Function: void USBDeferOUTDataStage(void); + + Summary: This function will cause the USB hardware to continuously NAK the + OUT data packets sent from the host, during the data stage of a + device to host control transfer. This allows the firmware more time + to prepare the RAM buffer that will eventually be used to receive the + data from the host. This is also useful, if the firmware wishes to + receive the OUT data in a different context than what the + USBDeviceTasks() function executes at. + + Calling this function (macro) will assert ownership of the currently + pending control transfer. Therefore, the USB stack will not STALL + when it reaches the data stage of the control transfer, even if the + firmware has not (yet) called the USBEP0Receive() API function. + However, the application firware must still (eventually, once it is + ready) call one of the aforementioned API function. + + Example Usage: + + 1. Host sends a SETUP packet to the device, requesting a host to + device control transfer, with data stage (OUT data packets). + 2. USBDeviceTasks() executes, and then calls the USBCBCheckOtherReq() + callback event handler. The USBCBCheckOtherReq() calls the + application specific/device class specific handler that detects + the type of control transfer. + 3. If the firmware needs more time before it wishes to receive the + first OUT data packet, or, if the firmware wishes to process the + command in a different context, then it may call + USBDeferOUTDataStage(), in the context of the + USBCBCheckOtherReq() handler function. + 4. If the firmware called USBDeferOUTDataStage() in step #3 above, + then the hardware will NAK the OUT data packets sent by the + host, for the OUT data stage. + 5. Once the firmware is ready, it should then call USBEP0Receive(), + to prepare the USB stack to receive the OUT data from the host, + and to write it to the user specified buffer. + 6. The firmware should now call USBCtrlEPAllowDataStage(). This + will allow the data stage to complete. Once all OUT data has + been received, the user callback function (provided by the + function pointer provided when calling USBEP0Receive()) will + get called. + 7. Once all data has been received from the host, the status stage + (a 0-byte IN packet) will complete automatically (assuming the + firmware did not call USBDeferStatusStage() during step #3). + + + Description: + + Conditions: Before calling USBDeferOUTDataStage(), the firmware should first + verify that the control transfer has a data stage, and that + it is of type host-to-device (OUT). + + Input: + + Return: + + Remarks: Section 9.2.6 of the official USB 2.0 specifications indicates that + the USB device must be able to receive all bytes and complete the + control transfer within a maximum of 5 seconds. + + If the firmware calls USBDeferOUTDataStage(), it must eventually call + USBEP0Receive(), and then call USBCtrlEPAllowDataStage(). If it does + not do this, the control transfer will never be able to complete. + This will break the USB connection, as the host needs to be able to + communicate over EP0, in order to perform basic tasks including + enumeration. + + The firmware should never call both USBDeferINDataStage() and + USBDeferOUTDataStage() during the same control transfer. These + functions are mutually exclusive (a control transfer with data stage + can never contain both IN and OUT data packets during the data stage). + *****************************************************************************/ +void USBDeferOUTDataStage(void); +extern volatile BOOL USBDeferOUTDataStagePackets; +/*DOM-IGNORE-BEGIN*/ +#define USBDeferOUTDataStage() {USBDeferOUTDataStagePackets = TRUE; outPipes[0].info.bits.busy = 1;} +/*DOM-IGNORE-END*/ + +/******************************************************************************* + Function: void USBDeferStatusStage(void); + + Summary: Calling this function will prevent the USB stack from automatically + enabling the status stage for the currently pending control transfer + from completing immediately after all data bytes have been sent or + received. This is useful if a class handler or USB application + firmware project uses control transfers for sending/receiving data + over EP0, but requires time in order to finish processing and/or to + consume the data. + + For example: Consider an application which receives OUT data from the + USB host, through EP0 using control transfers. Now assume that this + application wishes to do something time consuming with this data (ex: + transmit it to and save it to an external EEPROM device, connected + via SPI/I2C/etc.). In this case, it would typically be desireable to + defer allowing the USB status stage of the control transfer to complete, + until after the data has been fully sent to the EEPROM device and saved. + + If the USB class handler firmware that processes the control transfer + SETUP packet determines that it will need extra time to complete the + control transfer, it may optionally call USBDeferStatusStage(). If it + does so, it is then the responsibility of the application firmware to + eventually call USBCtrlEPAllowStatusStage(), once the firmware has + finished processing the data associated with the control transfer. + + If the firmware call USBDeferStatusStage(), but never calls + USBCtrlEPAllowStatusStage(), then one of two possibilities will occur. + + 1. If the "USB_ENABLE_STATUS_STAGE_TIMEOUTS" option is commented in + usb_config.h, then the status stage of the control transfer will + never be able to complete. This is an error case and should be + avoided. + 2. If the "USB_ENABLE_STATUS_STAGE_TIMEOUTS" option is enabled in + usb_config.h, then the USBDeviceTasks() function will + automatically call USBCtrlEPAllowStatusStage(), after the + "USB_STATUS_STAGE_TIMEOUT" has elapsed, since the last quanta of + "progress" has occurred in the control transfer. Progress is + defined as the last successful transaction completing on EP0 IN or + EP0 OUT. + Although the timeouts feature allows the status stage to + [eventually] complete, it is still preferable to manually call + USBCtrlEPAllowStatusStage() after the application firmware has + finished processing/consuming the control transfer data, as this + will allow for much faster processing of control transfers, and + therefore much higher data rates and better user responsiveness. + Description: + + Conditions: + None + + Input: + + Return: + + Remarks: If this function is called, is should get called after the SETUP + packet has arrived (the control transfer has started), but before + the USBCtrlEPServiceComplete() function has been called by the USB + stack. Therefore, the normal place to call USBDeferStatusStage() + would be from within the USBCBCheckOtherReq() handler context. For + example, in a HID application using control transfers, the + USBDeferStatusStage() function would be called from within the + USER_GET_REPORT_HANDLER or USER_SET_REPORT_HANDLER functions. + *****************************************************************************/ +void USBDeferStatusStage(void); +extern volatile BOOL USBDeferStatusStagePacket; +/*DOM-IGNORE-BEGIN*/ +#define USBDeferStatusStage() {USBDeferStatusStagePacket = TRUE;} +/*DOM-IGNORE-END*/ + + +/******************************************************************************* + Function: BOOL USBOUTDataStageDeferred(void); + + Summary: Returns TRUE if a control transfer with OUT data stage is pending, + and the firmware has called USBDeferOUTDataStage(), but has not + yet called USBCtrlEPAllowDataStage(). + Returns FALSE if a control transfer with OUT data stage is either + not pending, or the firmware did not call USBDeferOUTDataStage() + at the start of the control transfer. + + This function (macro) would typically be used in the case where the + USBDeviceTasks() function executes in the interrupt context (ex: + USB_INTERRUPT option selected in usb_config.h), but the firmware + wishes to take care of handling the data stage of the control transfer + in the main loop context. + + In this scenario, typical usage would be: + 1. Host starts a control transfer with OUT data stage. + 2. USBDeviceTasks() (in this scenario, interrupt context) executes. + 3. USBDeviceTasks() calls USBCBCheckOtherReq(), which in turn + determines that the control transfer is class specific, with + OUT data stage. + 4. The user code in USBCBCheckOtherReq() (also in interrupt context, + since it is called from USBDeviceTasks(), and therefore executes + at the same priority/context) calls USBDeferOUTDataStage(). + + 5. Meanwhile, in the main loop context, a polling handler may be + periodically checking if(USBOUTDataStageDeferred() == TRUE). + Ordinarily, it would evaluate false, but when a control transfer + becomes pending, and after the USBDeferOUTDataStage() macro has + been called (ex: in the interrupt context), the if() statement + will evaluate true. In this case, the main loop context can then + take care of receiving the data, by calling USBEP0Receive() and + USBCtrlEPAllowDataStage(). + + Description: + + Conditions: + + Input: + + Return: + + Remarks: + *****************************************************************************/ +BOOL USBOUTDataStageDeferred(void); +/*DOM-IGNORE-BEGIN*/ +#define USBOUTDataStageDeferred() USBDeferOUTDataStagePackets +/*DOM-IGNORE-END*/ + +/******************************************************************************* + Function: void USBDeferINDataStage(void); + + Summary: This function will cause the USB hardware to continuously NAK the + IN token packets sent from the host, during the data stage of a + device to host control transfer. This allows the firmware more time + to process and prepare the IN data packets that will eventually be + sent to the host. This is also useful, if the firmware needs to + process/prepare the IN data in a different context than what the + USBDeviceTasks() function executes at. + + Calling this function (macro) will assert ownership of the currently + pending control transfer. Therefore, the USB stack will not STALL + when it reaches the data stage of the control transfer, even if the + firmware has not (yet) called the USBEP0SendRAMPtr() or + USBEP0SendROMPtr() API function. However, the application firware + must still (eventually, once it is ready) call one of the + aforementioned API functions. + + Example Usage: + + 1. Host sends a SETUP packet to the device, requesting a device to + host control transfer, with data stage. + 2. USBDeviceTasks() executes, and then calls the USBCBCheckOtherReq() + callback event handler. The USBCBCheckOtherReq() calls the + application specific/device class specific handler that detects + the type of control transfer. + 3. If the firmware needs more time to prepare the first IN data packet, + or, if the firmware wishes to process the command in a different + context (ex: if USBDeviceTasks() executes as an interrupt handler, + but the IN data stage data needs to be prepared in the main loop + context), then it may call USBDeferINDataStage(), in the context + of the USBCBCheckOtherReq() handler function. + 4. If the firmware called USBDeferINDataStage() in step #3 above, + then the hardware will NAK the IN token packets sent by the + host, for the IN data stage. + 5. Once the firmware is ready, and has successfully prepared the + data to be sent to the host in fulfillment of the control + transfer, it should then call USBEP0SendRAMPtr() or + USBEP0SendROMPtr(), to prepare the USB stack to know how many + bytes to send to the host, and from what source location. + 6. The firmware should now call USBCtrlEPAllowDataStage(). This + will allow the data stage to complete. The USB stack will send + the data buffer specified by the USBEP0SendRAMPtr() or + USBEP0SendROMPtr() function, when it was called. + 7. Once all data has been sent to the host, or if the host performs + early termination, the status stage (a 0-byte OUT packet) will + complete automatically (assuming the firmware did not call + USBDeferStatusStage() during step #3). + + + Description: + + Conditions: Before calling USBDeferINDataStage(), the firmware should first + verify that the control transfer has a data stage, and that + it is of type device-to-host (IN). + + Input: + + Return: + + Remarks: Section 9.2.6 of the official USB 2.0 specifications indicates that + the USB device must return the first IN data packet within 500ms + of the start of the control transfer. In order to meet this + specification, the firmware must call USBEP0SendRAMPtr() or + USBEP0SendROMPtr(), and then call USBCtrlEPAllowDataStage(), in + less than 500ms from the start of the control transfer. + + If the firmware calls USBDeferINDataStage(), it must eventually call + USBEP0SendRAMPtr() or USBEP0SendROMPtr(), and then call + USBCtrlEPAllowDataStage(). If it does not do this, the control + transfer will never be able to complete. + + The firmware should never call both USBDeferINDataStage() and + USBDeferOUTDataStage() during the same control transfer. These + functions are mutually exclusive (a control transfer with data stage + can never contain both IN and OUT data packets during the data stage). + *****************************************************************************/ +void USBDeferINDataStage(void); +extern volatile BOOL USBDeferINDataStagePackets; +/*DOM-IGNORE-BEGIN*/ +#define USBDeferINDataStage() {USBDeferINDataStagePackets = TRUE; inPipes[0].info.bits.busy = 1;} +/*DOM-IGNORE-END*/ + + + +/******************************************************************************* + Function: BOOL USBINDataStageDeferred(void); + + Summary: Returns TRUE if a control transfer with IN data stage is pending, + and the firmware has called USBDeferINDataStage(), but has not + yet called USBCtrlEPAllowDataStage(). + Returns FALSE if a control transfer with IN data stage is either + not pending, or the firmware did not call USBDeferINDataStage() + at the start of the control transfer. + + This function (macro) would typically be used in the case where the + USBDeviceTasks() function executes in the interrupt context (ex: + USB_INTERRUPT option selected in usb_config.h), but the firmware + wishes to take care of handling the data stage of the control transfer + in the main loop context. + + In this scenario, typical usage would be: + 1. Host starts a control transfer with IN data stage. + 2. USBDeviceTasks() (in this scenario, interrupt context) executes. + 3. USBDeviceTasks() calls USBCBCheckOtherReq(), which in turn + determines that the control transfer is class specific, with + IN data stage. + 4. The user code in USBCBCheckOtherReq() (also in interrupt context, + since it is called from USBDeviceTasks(), and therefore executes + at the same priority/context) calls USBDeferINDataStage(). + + 5. Meanwhile, in the main loop context, a polling handler may be + periodically checking if(USBINDataStageDeferred() == TRUE). + Ordinarily, it would evaluate false, but when a control transfer + becomes pending, and after the USBDeferINDataStage() macro has + been called (ex: in the interrupt context), the if() statement + will evaluate true. In this case, the main loop context can then + take care of sending the data (when ready), by calling + USBEP0SendRAMPtr() or USBEP0SendROMPtr() and + USBCtrlEPAllowDataStage(). + + Description: + + Conditions: + + Input: + + Return: + + Remarks: + *****************************************************************************/ +BOOL USBINDataStageDeferred(void); +/*DOM-IGNORE-BEGIN*/ +#define USBINDataStageDeferred() USBDeferINDataStagePackets +/*DOM-IGNORE-END*/ + + + +/******************************************************************** + Function: + BOOL USBGetRemoteWakeupStatus(void) + + Summary: + This function indicates if remote wakeup has been enabled by the host. + Devices that support remote wakeup should use this function to + determine if it should send a remote wakeup. + + Description: + This function indicates if remote wakeup has been enabled by the host. + Devices that support remote wakeup should use this function to + determine if it should send a remote wakeup. + + If a device does not support remote wakeup (the Remote wakeup bit, bit + 5, of the bmAttributes field of the Configuration descriptor is set to + 1), then it should not send a remote wakeup command to the PC and this + function is not of any use to the device. If a device does support + remote wakeup then it should use this function as described below. + + If this function returns FALSE and the device is suspended, it should + not issue a remote wakeup (resume). + + If this function returns TRUE and the device is suspended, it should + issue a remote wakeup (resume). + + A device can add remote wakeup support by having the _RWU symbol added + in the configuration descriptor (located in the usb_descriptors.c file + in the project). This done in the 8th byte of the configuration + descriptor. For example: + + + ROM BYTE configDescriptor1[]={ + 0x09, // Size + USB_DESCRIPTOR_CONFIGURATION, // descriptor type + DESC_CONFIG_WORD(0x0022), // Total length + 1, // Number of interfaces + 1, // Index value of this cfg + 0, // Configuration string index + _DEFAULT | _SELF | _RWU, // Attributes, see usb_device.h + 50, // Max power consumption in 2X mA(100mA) + + //The rest of the configuration descriptor should follow + + + For more information about remote wakeup, see the following section of + the USB v2.0 specification available at www.usb.org: + * Section 9.2.5.2 + * Table 9-10 + * Section 7.1.7.7 + * Section 9.4.5 + + Conditions: + None + + Return Values: + TRUE - Remote Wakeup has been enabled by the host + FALSE - Remote Wakeup is not currently enabled + + Remarks: + None + + *******************************************************************/ +BOOL USBGetRemoteWakeupStatus(void); +/*DOM-IGNORE-BEGIN*/ +#define USBGetRemoteWakeupStatus() RemoteWakeup +/*DOM-IGNORE-END*/ + +/*************************************************************************** + Function: + USB_DEVICE_STATE USBGetDeviceState(void) + + Summary: + This function will return the current state of the device on the USB. + This function should return CONFIGURED_STATE before an application + tries to send information on the bus. + Description: + This function returns the current state of the device on the USB. This + \function is used to determine when the device is ready to communicate + on the bus. Applications should not try to send or receive data until + this function returns CONFIGURED_STATE. + + It is also important that applications yield as much time as possible + to the USBDeviceTasks() function as possible while the this function + \returns any value between ATTACHED_STATE through CONFIGURED_STATE. + + For more information about the various device states, please refer to + the USB specification section 9.1 available from www.usb.org. + + Typical usage: + + void main(void) + { + USBDeviceInit() + while(1) + { + USBDeviceTasks(); + if((USBGetDeviceState() \< CONFIGURED_STATE) || + (USBIsDeviceSuspended() == TRUE)) + { + //Either the device is not configured or we are suspended + // so we don't want to do execute any application code + continue; //go back to the top of the while loop + } + else + { + //Otherwise we are free to run user application code. + UserApplication(); + } + } + } + + Conditions: + None + Return Values: + USB_DEVICE_STATE - the current state of the device on the bus + + Remarks: + None + ***************************************************************************/ +USB_DEVICE_STATE USBGetDeviceState(void); +/*DOM-IGNORE-BEGIN*/ +#define USBGetDeviceState() USBDeviceState +/*DOM-IGNORE-END*/ + + + +/*************************************************************************** + Function: + BOOL USBGetSuspendState(void) + + Summary: + This function indicates if the USB port that this device is attached to is + currently suspended. When suspended, it will not be able to transfer data + over the bus. + Description: + This function indicates if the USB port that this device is attached to is + currently suspended. When suspended, it will not be able to transfer data + over the bus. + This function can be used by the application to skip over section of + code that do not need to exectute if the device is unable to send data + over the bus. This function can also be used to help determine when it is + legal to perform USB remote wakeup signalling, for devices supporting this + feature. + + Typical usage: + + void main(void) + { + USBDeviceInit() + while(1) + { + USBDeviceTasks(); + if((USBGetDeviceState() \< CONFIGURED_STATE) || + (USBGetSuspendState() == TRUE)) + { + //Either the device is not configured or we are suspended + // so we don't want to do execute any application code + continue; //go back to the top of the while loop + } + else + { + //Otherwise we are free to run user application code. + UserApplication(); + } + } + } + + Conditions: + None + Return Values: + TRUE - the USB port this device is attached to is suspended. + FALSE - the USB port this device is attached to is not suspended. + Remarks: + This function is the same as USBIsBusSuspended(). + ***************************************************************************/ +BOOL USBGetSuspendState(void); +/*DOM-IGNORE-BEGIN*/ +#define USBGetSuspendState() USBBusIsSuspended +/*DOM-IGNORE-END*/ + +/******************************************************************************* + Function: + BOOL USBIsDeviceSuspended(void) + + Summary: + This function indicates if the USB module is in suspend mode. + + Description: + This function indicates if the USB module is in suspend mode. This function + does NOT indicate that a suspend request has been received. It only + reflects the state of the USB module. + + Typical Usage: + + if(USBIsDeviceSuspended() == TRUE) + { + return; + } + // otherwise do some application specific tasks + + + Conditions: + None + Input: + None + Return: + None + Remarks: + None + *****************************************************************************/ +BOOL USBIsDeviceSuspended(void); +/*DOM-IGNORE-BEGIN*/ +#define USBIsDeviceSuspended() USBSuspendControl +/*DOM-IGNORE-END*/ + + +/******************************************************************************* + Function: + BOOL USBIsBusSuspended(void); + + Summary: + This function indicates if the USB bus is in suspend mode. + + Description: + This function indicates if the USB bus is in suspend mode. This function + is typically used for checking if the conditions are consistent with + performing a USB remote wakeup sequence. + + Typical Usage: + + if((USBIsBusSuspended() == TRUE) && (USBGetRemoteWakeupStatus() == TRUE)) + { + //Check if some stimulus occured, which will be used as the wakeup source + if(sw3 == 0) + { + USBCBSendResume(); //Send the remote wakeup signalling to the host + } + } + // otherwise do some other application specific tasks + + + Conditions: + None + Input: + None + Return: + None + Remarks: + The USBIsBusSuspended() function relies on the USBBusIsSuspended boolean + variable, which gets updated by the USBDeviceTasks() function. Therefore, + in order to be sure the return value is not "stale", it is suggested to make + sure USBDeviceTasks() has executed recently (if using USB polling mode). + *****************************************************************************/ +BOOL USBIsBusSuspended(void); +/*DOM-IGNORE-BEGIN*/ +#define USBIsBusSuspended() USBBusIsSuspended +/*DOM-IGNORE-END*/ + +/******************************************************************************* + Function: + void USBSoftDetach(void); + + Summary: + This function performs a detach from the USB bus via software. + + Description: + This function performs a detach from the USB bus via software. + + Conditions: + None + Input: + None + Return: + None + Remarks: + Caution should be used when detaching from the bus. Some PC drivers and + programs may require additional time after a detach before a device can be + reattached to the bus. + *****************************************************************************/ +void USBSoftDetach(void); +/*DOM-IGNORE-BEGIN*/ +#define USBSoftDetach() U1CON = 0; U1IE = 0; USBDeviceState = DETACHED_STATE; +/*DOM-IGNORE-END*/ + + +/************************************************************************* + Function: + BOOL USBHandleBusy(USB_HANDLE handle) + + Summary: + Checks to see if the input handle is busy + + Description: + Checks to see if the input handle is busy + + Typical Usage + + //make sure that the last transfer isn't busy by checking the handle + if(!USBHandleBusy(USBGenericInHandle)) + { + //Send the data contained in the INPacket[] array out on + // endpoint USBGEN_EP_NUM + USBGenericInHandle = USBGenWrite(USBGEN_EP_NUM,(BYTE*)&INPacket[0],sizeof(INPacket)); + } + + + Conditions: + None + Input: + USB_HANDLE handle - handle of the transfer that you want to check the + status of + Return Values: + TRUE - The specified handle is busy + FALSE - The specified handle is free and available for a transfer + Remarks: + None + *************************************************************************/ +BOOL USBHandleBusy(USB_HANDLE handle); +/*DOM-IGNORE-BEGIN*/ +#define USBHandleBusy(handle) (handle==0?0:((volatile BDT_ENTRY*)handle)->STAT.UOWN) +/*DOM-IGNORE-END*/ + +/******************************************************************** + Function: + WORD USBHandleGetLength(USB_HANDLE handle) + + Summary: + Retrieves the length of the destination buffer of the input + handle + + Description: + Retrieves the length of the destination buffer of the input + handle + + PreCondition: + None + + Parameters: + USB_HANDLE handle - the handle to the transfer you want the + address for. + + Return Values: + WORD - length of the current buffer that the input handle + points to. If the transfer is complete then this is the + length of the data transmitted or the length of data + actually received. + + Remarks: + None + + *******************************************************************/ +WORD USBHandleGetLength(USB_HANDLE handle); +/*DOM-IGNORE-BEGIN*/ +#define USBHandleGetLength(handle) (((volatile BDT_ENTRY*)handle)->CNT) +/*DOM-IGNORE-END*/ + +/******************************************************************** + Function: + WORD USBHandleGetAddr(USB_HANDLE) + + Summary: + Retrieves the address of the destination buffer of the input + handle + + Description: + Retrieves the address of the destination buffer of the input + handle + + PreCondition: + None + + Parameters: + USB_HANDLE handle - the handle to the transfer you want the + address for. + + Return Values: + WORD - address of the current buffer that the input handle + points to. + + Remarks: + None + + *******************************************************************/ +WORD USBHandleGetAddr(USB_HANDLE); +/*DOM-IGNORE-BEGIN*/ +#define USBHandleGetAddr(handle) ConvertToVirtualAddress((((volatile BDT_ENTRY*)handle)->ADR)) +/*DOM-IGNORE-END*/ + + +/******************************************************************** + Function: + USB_HANDLE USBGetNextHandle(BYTE ep_num, BYTE ep_dir) + Summary: + Retrieves the handle to the next endpoint BDT entry that the + USBTransferOnePacket() will use. + Description: + Retrieves the handle to the next endpoint BDT that the + USBTransferOnePacket() will use. Useful for initialization and when + ping pong buffering will be used on application endpoints. + PreCondition: + Will return NULL if the USB device has not yet been configured/the + endpoint specified has not yet been initalized by USBEnableEndpoint(). + Parameters: + BYTE ep_num - The endpoint number to get the handle for (valid + values are 1-15, 0 is not a valid input value for this API) + BYTE ep_dir - The endpoint direction associated with the endpoint number + to get the handle for (valid values are OUT_FROM_HOST and IN_TO_HOST). + Return Values: + USB_HANDLE - Returns the USB_HANDLE (a pointer) to the BDT that will be + used next time the USBTransferOnePacket() function is called, for the + given ep_num and ep_dir + Remarks: + This API is useful for initializing USB_HANDLEs during initialization of + the application firmware. It is also useful when ping-pong bufferring is + enabled, and the application firmware wishes to arm both the even and odd + BDTs for an endpoint simultaneously. In this case, the application + firmware for sending data to the host would typically be something like + follows: + + + USB_HANDLE Handle1; + USB_HANDLE Handle2; + USB_HANDLE* pHandle = &Handle1; + BYTE UserDataBuffer1[64]; + BYTE UserDataBuffer2[64]; + BYTE* pDataBuffer = &UserDataBuffer1[0]; + + //Add some code that loads UserDataBuffer1[] with useful data to send, + //using the pDataBuffer pointer, for example: + //for(i = 0; i < 64; i++) + //{ + // *pDataBuffer++ = [useful data value]; + //} + + //Check if the next USB endpoint BDT is available + if(!USBHandleBusy(USBGetNextHandle(ep_num, IN_TO_HOST)) + { + //The endpoint is available. Send the data. + *pHandle = USBTransferOnePacket(ep_num, ep_dir, pDataBuffer, bytecount); + //Toggle the handle and buffer pointer for the next transaction + if(pHandle == &Handle1) + { + pHandle = &Handle2; + pDataBuffer = &UserDataBuffer2[0]; + } + else + { + pHandle = &Handle1; + pDataBuffer = &UserDataBuffer1[0]; + } + } + + //The firmware can then load the next data buffer (in this case + //UserDataBuffer2)with useful data, and send it using the same + //process. For example: + + //Add some code that loads UserDataBuffer2[] with useful data to send, + //using the pDataBuffer pointer, for example: + //for(i = 0; i < 64; i++) + //{ + // *pDataBuffer++ = [useful data value]; + //} + + //Check if the next USB endpoint BDT is available + if(!USBHandleBusy(USBGetNextHandle(ep_num, IN_TO_HOST)) + { + //The endpoint is available. Send the data. + *pHandle = USBTransferOnePacket(ep_num, ep_dir, pDataBuffer, bytecount); + //Toggle the handle and buffer pointer for the next transaction + if(pHandle == &Handle1) + { + pHandle = &Handle2; + pDataBuffer = &UserDataBuffer2[0]; + } + else + { + pHandle = &Handle1; + pDataBuffer = &UserDataBuffer1[0]; + } + } + + + *******************************************************************/ +USB_HANDLE USBGetNextHandle(BYTE ep_num, BYTE ep_dir); +/*DOM-IGNORE-BEGIN*/ +#define USBGetNextHandle(ep_num, ep_dir) ((ep_dir == OUT_FROM_HOST)?((USB_HANDLE)pBDTEntryOut[ep_num]):((USB_HANDLE)pBDTEntryIn[ep_num])) +/*DOM-IGNORE-END*/ + +/******************************************************************** + Function: + void USBEP0Transmit(BYTE options) + + Summary: + Sets the address of the data to send over the + control endpoint + + PreCondition: + None + + Paramters: + options - the various options that you want + when sending the control data. Options are: + USB_EP0_ROM + USB_EP0_RAM + USB_EP0_BUSY + USB_EP0_INCLUDE_ZERO + USB_EP0_NO_DATA + USB_EP0_NO_OPTIONS + + Return Values: + None + + Remarks: + None + + *******************************************************************/ +void USBEP0Transmit(BYTE options); +/*DOM-IGNORE-BEGIN*/ +#define USBEP0Transmit(options) inPipes[0].info.Val = options | USB_EP0_BUSY +/*DOM-IGNORE-END*/ + +/************************************************************************* + Function: + void USBEP0SendRAMPtr(BYTE* src, WORD size, BYTE Options) + + Summary: + Sets the source, size, and options of the data you wish to send from a + RAM source + Conditions: + None + Input: + src - address of the data to send + size - the size of the data needing to be transmitted + options - the various options that you want when sending the control + data. Options are\: + * USB_EP0_ROM + * USB_EP0_RAM + * USB_EP0_BUSY + * USB_EP0_INCLUDE_ZERO + * USB_EP0_NO_DATA + * USB_EP0_NO_OPTIONS + Remarks: + None + *************************************************************************/ +void USBEP0SendRAMPtr(BYTE* src, WORD size, BYTE Options); +/*DOM-IGNORE-BEGIN*/ +#define USBEP0SendRAMPtr(src,size,options) {\ + inPipes[0].pSrc.bRam = src;\ + inPipes[0].wCount.Val = size;\ + inPipes[0].info.Val = options | USB_EP0_BUSY | USB_EP0_RAM;\ + } +/*DOM-IGNORE-END*/ + +/************************************************************************** + Function: + void USBEP0SendROMPtr(BYTE* src, WORD size, BYTE Options) + + Summary: + Sets the source, size, and options of the data you wish to send from a + ROM source + Conditions: + None + Input: + src - address of the data to send + size - the size of the data needing to be transmitted + options - the various options that you want when sending the control + data. Options are\: + * USB_EP0_ROM + * USB_EP0_RAM + * USB_EP0_BUSY + * USB_EP0_INCLUDE_ZERO + * USB_EP0_NO_DATA + * USB_EP0_NO_OPTIONS + Remarks: + None + **************************************************************************/ +void USBEP0SendROMPtr(BYTE* src, WORD size, BYTE Options); +/*DOM-IGNORE-BEGIN*/ +#define USBEP0SendROMPtr(src,size,options) {\ + inPipes[0].pSrc.bRom = src;\ + inPipes[0].wCount.Val = size;\ + inPipes[0].info.Val = options | USB_EP0_BUSY | USB_EP0_ROM;\ + } +/*DOM-IGNORE-END*/ + +/*************************************************************************** + Function: + void USBEP0Receive(BYTE* dest, WORD size, void (*function)) + Summary: + Sets the destination, size, and a function to call on the completion of + the next control write. + Conditions: + None + Input: + dest - address of where the incoming data will go (make sure that this + address is directly accessable by the USB module for parts with + dedicated USB RAM this address must be in that space) + size - the size of the data being received (is almost always going tobe + presented by the preceeding setup packet SetupPkt.wLength) + (*function) - a function that you want called once the data is received. If + this is specificed as NULL then no function is called. + Remarks: + None + ***************************************************************************/ +void USBEP0Receive(BYTE* dest, WORD size, void (*function)); +/*DOM-IGNORE-BEGIN*/ +#define USBEP0Receive(dest,size,function) {outPipes[0].pDst.bRam = dest;outPipes[0].wCount.Val = size;outPipes[0].pFunc = function;outPipes[0].info.bits.busy = 1; } +/*DOM-IGNORE-END*/ + +/******************************************************************** + Function: + USB_HANDLE USBTxOnePacket(BYTE ep, BYTE* data, WORD len) + + Summary: + Sends the specified data out the specified endpoint + + PreCondition: + None + + Parameters: + ep - the endpoint number you want to send the data out of + data - pointer to a user buffer that contains the data that you wish to + send to the host. Note: This RAM buffer must be accessible by + the USB module. + len - the number of bytes of data that you wish to send to the host, + in the next transaction on this endpoint. Note: this value + should always be less than or equal to the endpoint size, as + specified in the USB endpoint descriptor. + + Return Values: + USB_HANDLE - Returns a pointer to the BDT entry associated with the + transaction. The firmware can check for completion + of the transaction by using the USBHandleBusy() function, + using the returned USB_HANDLE value. + + Remarks: + None + + *******************************************************************/ +USB_HANDLE USBTxOnePacket(BYTE ep, BYTE* data, WORD len); +/*DOM-IGNORE-BEGIN*/ +#define USBTxOnePacket(ep,data,len) USBTransferOnePacket(ep,IN_TO_HOST,data,len) +/*DOM-IGNORE-END*/ + +/******************************************************************** + Function: + USB_HANDLE USBRxOnePacket(BYTE ep, BYTE* data, WORD len) + + Summary: + Receives the specified data out the specified endpoint + + PreCondition: + None + + Parameters: + ep - The endpoint number you want to receive the data on. + data - Pointer to a user buffer where the data will go when + it arrives from the host. Note: This RAM must be USB module + accessible. + len - The len parameter should always be set to the maximum endpoint packet + size, specified in the USB descriptor for this endpoint. The host + may send <= the number of bytes as the endpoint size in the endpoint + descriptor. After the transaction is complete, the application + firmware can call USBHandleGetLength() to determine how many bytes + the host actually sent in the last transaction on this endpoint. + + Return Values: + USB_HANDLE - Returns a pointer to the BDT entry associated with the + transaction. The firmware can check for completion + of the transaction by using the USBHandleBusy() function, + using the returned USB_HANDLE value. + + Remarks: + None + + *******************************************************************/ +USB_HANDLE USBRxOnePacket(BYTE ep, BYTE* data, WORD len); +/*DOM-IGNORE-BEGIN*/ +#define USBRxOnePacket(ep,data,len) USBTransferOnePacket(ep,OUT_FROM_HOST,data,len) +/*DOM-IGNORE-END*/ + +/******************************************************************************* + Function: + BOOL USB_APPLICATION_EVENT_HANDLER(BYTE address, USB_EVENT event, void *pdata, WORD size); + + Summary: + This function is called whenever the USB stack wants to notify the user of + an event. + + Description: + This function is called whenever the USB stack wants to notify the user of + an event. This function should be implemented by the user. + + Example Usage: + Conditions: + None + + Input: + BYTE address - the address of the device when the event happened + BYTE event - The event input specifies which event happened. The + possible options are listed in the USB_DEVICE_STACK_EVENTS + enumeration. + + Return: + None + Remarks: + None + *****************************************************************************/ +BOOL USB_APPLICATION_EVENT_HANDLER(BYTE address, USB_EVENT event, void *pdata, WORD size); + +/******************************************************************************* + Function: + ROM void *USBDeviceCBGetDescriptor (UINT16 *length, DESCRIPTOR_ID *id); + + Summary: + This function is called whenever the USB stack gets a USB GET_DESCRIPTOR + request. + + Description: + This function is called whenever the USB stack gets a USB GET_DESCRIPTOR + request. This function is responsible for returning a pointer to the + requested descriptor and setting that the length for the that descriptor. + + This function should be implemented by the user. This function might be + generated automatically by the USB configuration tool. + + Conditions: + None + + Input: + BYTE *length - pointer to a variable that should be set to the length of + the requested descriptor. + BYTE *id - This structure contains information about the requested + descriptor + + Return: + ROM void* - pointer to the requested descriptor. + Remarks: + None + *****************************************************************************/ +void *USBDeviceCBGetDescriptor ( UINT16 *length, + UINT8 *ptr_type, + DESCRIPTOR_ID *id); + + + +/** Section: MACROS ******************************************************/ + +/* The DESC_CONFIG_WORD() macro is implemented for convinence. Since the + configuration descriptor array is a BYTE array, each entry needs to be a + BYTE in LSB format. The DESC_CONFIG_WORD() macro breaks up a WORD into + the appropriate BYTE entries in LSB. + Typical Usage: + + ROM BYTE configDescriptor1[]={ + 0x09, // Size of this descriptor in bytes + USB_DESCRIPTOR_CONFIGURATION, // CONFIGURATION descriptor type + DESC_CONFIG_WORD(0x0022), // Total length of data for this cfg + +*/ +#define DESC_CONFIG_WORD(a) (a&0xFF),((a>>8)&0xFF) + +/* The DESC_CONFIG_DWORD() macro is implemented for convinence. Since the + configuration descriptor array is a BYTE array, each entry needs to be a + BYTE in LSB format. The DESC_CONFIG_DWORD() macro breaks up a DWORD into + the appropriate BYTE entries in LSB. +*/ +#define DESC_CONFIG_DWORD(a) (a&0xFF),((a>>8)&0xFF),((a>>16)&0xFF),((a>>24)&0xFF) + +/* The DESC_CONFIG_BYTE() macro is implemented for convinence. The + DESC_CONFIG_BYTE() macro provides a consistant macro for use with a byte + when generating a configuratin descriptor when using either the + DESC_CONFIG_WORD() or DESC_CONFIG_DWORD() macros. +*/ +#define DESC_CONFIG_BYTE(a) (a) + + + + + + + + + + + + + + + + +/* DOM-IGNORE-BEGIN */ +/******************************************************************************* +******************************************************************************** +******************************************************************************** + This section contains implementation specific information that may vary + between releases as the implementation needs to change. This section is + included for compilation reasons only. +******************************************************************************** +******************************************************************************** +*******************************************************************************/ + +#if defined(USB_POLLING) + #define USB_VOLATILE +#else + #define USB_VOLATILE volatile +#endif + +#define CTRL_TRF_RETURN void +#define CTRL_TRF_PARAMS void + +// Defintion of the PIPE structure +// This structure is used to keep track of data that is sent out +// of the stack automatically. +typedef struct __attribute__ ((packed)) +{ + union __attribute__ ((packed)) + { + //Various options of pointers that are available to + // get the data from + BYTE *bRam; + ROM BYTE *bRom; + WORD *wRam; + ROM WORD *wRom; + }pSrc; + union __attribute__ ((packed)) + { + struct __attribute__ ((packed)) + { + //is this transfer from RAM or ROM? + BYTE ctrl_trf_mem :1; + BYTE reserved :5; + //include a zero length packet after + //data is done if data_size%ep_size = 0? + BYTE includeZero :1; + //is this PIPE currently in use + BYTE busy :1; + }bits; + BYTE Val; + }info; + WORD_VAL __attribute__((aligned)) wCount; +}IN_PIPE; + +extern USB_VOLATILE IN_PIPE inPipes[]; + +typedef struct __attribute__ ((packed)) +{ + union __attribute__ ((packed)) + { + //Various options of pointers that are available to + // get the data from + BYTE *bRam; + WORD *wRam; + }pDst; + union __attribute__ ((packed)) + { + struct __attribute__ ((packed)) + { + BYTE reserved :7; + //is this PIPE currently in use + BYTE busy :1; + }bits; + BYTE Val; + }info; + WORD_VAL wCount; + CTRL_TRF_RETURN (*pFunc)(CTRL_TRF_PARAMS); +}OUT_PIPE; + +/************* DWF - SHOULD BE REIMPLEMENTED AS AN EVENT *******************/ +//#if defined(ENABLE_EP0_DATA_RECEIVED_CALLBACK) +// void USBCBEP0DataReceived(void); +// #define USBCB_EP0_DATA_RECEIVED() USBCBEP0DataReceived() +//#else +// #define USBCB_EP0_DATA_RECEIVED() +//#endif + +extern USB_VOLATILE BOOL RemoteWakeup; +extern USB_VOLATILE BOOL USBBusIsSuspended; +extern USB_VOLATILE USB_DEVICE_STATE USBDeviceState; +extern USB_VOLATILE BYTE USBActiveConfiguration; +/******************************************************************************/ +/* DOM-IGNORE-END */ + +#endif //USBD_H diff --git a/software/front/US_Firmware.X/usb/usb_device_local.h b/software/front/US_Firmware.X/usb/usb_device_local.h new file mode 100644 index 0000000..a9bed48 --- /dev/null +++ b/software/front/US_Firmware.X/usb/usb_device_local.h @@ -0,0 +1,490 @@ +/******************************************************************** + File Information: + FileName: usb_device_local.h + Dependencies: See INCLUDES section + Processor: PIC18,PIC24, PIC32 and dsPIC33E USB Microcontrollers + Hardware: The code is natively intended to be used on the following + hardware platforms: PICDEM� FS USB Demo Board, + PIC18F87J50 FS USB Plug-In Module, or + Explorer 16 + compatible USB PIM. The firmware may be + modified for use on other USB platforms by editing the + HardwareProfile.h file. + Complier: Microchip C18 (for PIC18),C30 (for PIC24 and dsPIC33E) + and C32 (for PIC32) + Company: Microchip Technology, Inc. + + Software License Agreement: + + The software supplied herewith by Microchip Technology Incorporated + (the �Company�) for its PIC� Microcontroller is intended and + supplied to you, the Company�s customer, for use solely and + exclusively on Microchip PIC Microcontroller products. The + software is owned by the Company and/or its supplier, and is + protected under applicable copyright laws. All rights are reserved. + Any use in violation of the foregoing restrictions may subject the + user to criminal sanctions under applicable laws, as well as to + civil liability for the breach of the terms and conditions of this + license. + + THIS SOFTWARE IS PROVIDED IN AN �AS IS� CONDITION. NO WARRANTIES, + WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED + TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT, + IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR + CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. + + Summary: + This file contains functions, macros, definitions, variables, + datatypes, etc. that are required for usage with the MCHPFSUSB device + stack. This file should be included in projects that use the device stack. + + This file is located in the "\\\Microchip\\USB" + directory. + + Description: + USB Device Stack File + + This file contains functions, macros, definitions, variables, + datatypes, etc. that are required for usage with the MCHPFSUSB device + stack. This file should be included in projects that use the device stack. + + This file is located in the "\\\Microchip\\USB" + directory. + + When including this file in a new project, this file can either be + referenced from the directory in which it was installed or copied + directly into the user application folder. If the first method is + chosen to keep the file located in the folder in which it is installed + then include paths need to be added so that the library and the + application both know where to reference each others files. If the + application folder is located in the same folder as the Microchip + folder (like the current demo folders), then the following include + paths need to be added to the application's project: + + . + ..\\..\\MicrochipInclude + + If a different directory structure is used, modify the paths as + required. An example using absolute paths instead of relative paths + would be the following: + + C:\\Microchip Solutions\\Microchip\\Include + + C:\\Microchip Solutions\\My Demo Application + +******************************************************************** + File Description: + + Change History: + Rev Description + ---- ----------- + 2.8 Initial revision. Contents extracted from the previous usb_device.c + file, so as to make the usb_device.c file less cluttered. + Fixed BD() and EP() macro computation error, when running in + USB_PING_PONG__EP0_OUT_ONLY mode. + 2.9 No functional change. Fixed spelling typo in the name of + "USB_TRANSFER_COMPLETE_HANDLER()" +********************************************************************/ +#include "usb_config.h" + +/* Short Packet States - Used by Control Transfer Read - CTRL_TRF_TX */ +#define SHORT_PKT_NOT_USED 0 +#define SHORT_PKT_PENDING 1 +#define SHORT_PKT_SENT 2 + +/* Control Transfer States */ +#define WAIT_SETUP 0 +#define CTRL_TRF_TX 1 +#define CTRL_TRF_RX 2 + + +typedef union +{ + struct + { + unsigned char ping_pong_state :1; + unsigned char transfer_terminated :1; + } bits; + BYTE Val; +} EP_STATUS; + +#if (USB_PING_PONG_MODE == USB_PING_PONG__NO_PING_PONG) + #define USB_NEXT_EP0_OUT_PING_PONG 0x0000 // Used in USB Device Mode only + #define USB_NEXT_EP0_IN_PING_PONG 0x0000 // Used in USB Device Mode only + #define USB_NEXT_PING_PONG 0x0000 // Used in USB Device Mode only + #define EP0_OUT_EVEN 0 // Used in USB Device Mode only + #define EP0_OUT_ODD 0 // Used in USB Device Mode only + #define EP0_IN_EVEN 1 // Used in USB Device Mode only + #define EP0_IN_ODD 1 // Used in USB Device Mode only + #define EP1_OUT_EVEN 2 // Used in USB Device Mode only + #define EP1_OUT_ODD 2 // Used in USB Device Mode only + #define EP1_IN_EVEN 3 // Used in USB Device Mode only + #define EP1_IN_ODD 3 // Used in USB Device Mode only + #define EP2_OUT_EVEN 4 // Used in USB Device Mode only + #define EP2_OUT_ODD 4 // Used in USB Device Mode only + #define EP2_IN_EVEN 5 // Used in USB Device Mode only + #define EP2_IN_ODD 5 // Used in USB Device Mode only + #define EP3_OUT_EVEN 6 // Used in USB Device Mode only + #define EP3_OUT_ODD 6 // Used in USB Device Mode only + #define EP3_IN_EVEN 7 // Used in USB Device Mode only + #define EP3_IN_ODD 7 // Used in USB Device Mode only + #define EP4_OUT_EVEN 8 // Used in USB Device Mode only + #define EP4_OUT_ODD 8 // Used in USB Device Mode only + #define EP4_IN_EVEN 9 // Used in USB Device Mode only + #define EP4_IN_ODD 9 // Used in USB Device Mode only + #define EP5_OUT_EVEN 10 // Used in USB Device Mode only + #define EP5_OUT_ODD 10 // Used in USB Device Mode only + #define EP5_IN_EVEN 11 // Used in USB Device Mode only + #define EP5_IN_ODD 11 // Used in USB Device Mode only + #define EP6_OUT_EVEN 12 // Used in USB Device Mode only + #define EP6_OUT_ODD 12 // Used in USB Device Mode only + #define EP6_IN_EVEN 13 // Used in USB Device Mode only + #define EP6_IN_ODD 13 // Used in USB Device Mode only + #define EP7_OUT_EVEN 14 // Used in USB Device Mode only + #define EP7_OUT_ODD 14 // Used in USB Device Mode only + #define EP7_IN_EVEN 15 // Used in USB Device Mode only + #define EP7_IN_ODD 15 // Used in USB Device Mode only + #define EP8_OUT_EVEN 16 // Used in USB Device Mode only + #define EP8_OUT_ODD 16 // Used in USB Device Mode only + #define EP8_IN_EVEN 17 // Used in USB Device Mode only + #define EP8_IN_ODD 17 // Used in USB Device Mode only + #define EP9_OUT_EVEN 18 // Used in USB Device Mode only + #define EP9_OUT_ODD 18 // Used in USB Device Mode only + #define EP9_IN_EVEN 19 // Used in USB Device Mode only + #define EP9_IN_ODD 19 // Used in USB Device Mode only + #define EP10_OUT_EVEN 20 // Used in USB Device Mode only + #define EP10_OUT_ODD 20 // Used in USB Device Mode only + #define EP10_IN_EVEN 21 // Used in USB Device Mode only + #define EP10_IN_ODD 21 // Used in USB Device Mode only + #define EP11_OUT_EVEN 22 // Used in USB Device Mode only + #define EP11_OUT_ODD 22 // Used in USB Device Mode only + #define EP11_IN_EVEN 23 // Used in USB Device Mode only + #define EP11_IN_ODD 23 // Used in USB Device Mode only + #define EP12_OUT_EVEN 24 // Used in USB Device Mode only + #define EP12_OUT_ODD 24 // Used in USB Device Mode only + #define EP12_IN_EVEN 25 // Used in USB Device Mode only + #define EP12_IN_ODD 25 // Used in USB Device Mode only + #define EP13_OUT_EVEN 26 // Used in USB Device Mode only + #define EP13_OUT_ODD 26 // Used in USB Device Mode only + #define EP13_IN_EVEN 27 // Used in USB Device Mode only + #define EP13_IN_ODD 27 // Used in USB Device Mode only + #define EP14_OUT_EVEN 28 // Used in USB Device Mode only + #define EP14_OUT_ODD 28 // Used in USB Device Mode only + #define EP14_IN_EVEN 29 // Used in USB Device Mode only + #define EP14_IN_ODD 29 // Used in USB Device Mode only + #define EP15_OUT_EVEN 30 // Used in USB Device Mode only + #define EP15_OUT_ODD 30 // Used in USB Device Mode only + #define EP15_IN_EVEN 31 // Used in USB Device Mode only + #define EP15_IN_ODD 31 // Used in USB Device Mode only + + #define EP(ep,dir,pp) (2*ep+dir) // Used in USB Device Mode only + #define BD(ep,dir,pp) ((8 * ep) + (4 * dir)) // Used in USB Device Mode only + +#elif (USB_PING_PONG_MODE == USB_PING_PONG__EP0_OUT_ONLY) + #define USB_NEXT_EP0_OUT_PING_PONG 0x0004 + #define USB_NEXT_EP0_IN_PING_PONG 0x0000 + #define USB_NEXT_PING_PONG 0x0000 + #define EP0_OUT_EVEN 0 + #define EP0_OUT_ODD 1 + #define EP0_IN_EVEN 2 + #define EP0_IN_ODD 2 + #define EP1_OUT_EVEN 3 + #define EP1_OUT_ODD 3 + #define EP1_IN_EVEN 4 + #define EP1_IN_ODD 4 + #define EP2_OUT_EVEN 5 + #define EP2_OUT_ODD 5 + #define EP2_IN_EVEN 6 + #define EP2_IN_ODD 6 + #define EP3_OUT_EVEN 7 + #define EP3_OUT_ODD 7 + #define EP3_IN_EVEN 8 + #define EP3_IN_ODD 8 + #define EP4_OUT_EVEN 9 + #define EP4_OUT_ODD 9 + #define EP4_IN_EVEN 10 + #define EP4_IN_ODD 10 + #define EP5_OUT_EVEN 11 + #define EP5_OUT_ODD 11 + #define EP5_IN_EVEN 12 + #define EP5_IN_ODD 12 + #define EP6_OUT_EVEN 13 + #define EP6_OUT_ODD 13 + #define EP6_IN_EVEN 14 + #define EP6_IN_ODD 14 + #define EP7_OUT_EVEN 15 + #define EP7_OUT_ODD 15 + #define EP7_IN_EVEN 16 + #define EP7_IN_ODD 16 + #define EP8_OUT_EVEN 17 + #define EP8_OUT_ODD 17 + #define EP8_IN_EVEN 18 + #define EP8_IN_ODD 18 + #define EP9_OUT_EVEN 19 + #define EP9_OUT_ODD 19 + #define EP9_IN_EVEN 20 + #define EP9_IN_ODD 20 + #define EP10_OUT_EVEN 21 + #define EP10_OUT_ODD 21 + #define EP10_IN_EVEN 22 + #define EP10_IN_ODD 22 + #define EP11_OUT_EVEN 23 + #define EP11_OUT_ODD 23 + #define EP11_IN_EVEN 24 + #define EP11_IN_ODD 24 + #define EP12_OUT_EVEN 25 + #define EP12_OUT_ODD 25 + #define EP12_IN_EVEN 26 + #define EP12_IN_ODD 26 + #define EP13_OUT_EVEN 27 + #define EP13_OUT_ODD 27 + #define EP13_IN_EVEN 28 + #define EP13_IN_ODD 28 + #define EP14_OUT_EVEN 29 + #define EP14_OUT_ODD 29 + #define EP14_IN_EVEN 30 + #define EP14_IN_ODD 30 + #define EP15_OUT_EVEN 31 + #define EP15_OUT_ODD 31 + #define EP15_IN_EVEN 32 + #define EP15_IN_ODD 32 + + #define EP(ep,dir,pp) (2u*ep+dir+(((ep==0)&&(dir==0))?pp:1)) + #define BD(ep,dir,pp) (4u*((2u*ep)+dir+(((ep==0)&&(dir==0))?pp:1))) + +#elif (USB_PING_PONG_MODE == USB_PING_PONG__FULL_PING_PONG) +#if defined (__18CXX) || defined(__C30__) || defined __XC16__ || defined(__XC8) + #if (defined (__dsPIC33E__) || defined (__PIC24E__)) + #define USB_NEXT_EP0_OUT_PING_PONG 0x0008 + #define USB_NEXT_EP0_IN_PING_PONG 0x0008 + #define USB_NEXT_PING_PONG 0x0008 + #else + #define USB_NEXT_EP0_OUT_PING_PONG 0x0004 + #define USB_NEXT_EP0_IN_PING_PONG 0x0004 + #define USB_NEXT_PING_PONG 0x0004 + #endif + #elif defined(__C32__) + #define USB_NEXT_EP0_OUT_PING_PONG 0x0008 + #define USB_NEXT_EP0_IN_PING_PONG 0x0008 + #define USB_NEXT_PING_PONG 0x0008 + #else + #error "Not defined for this compiler" + #endif + #define EP0_OUT_EVEN 0 + #define EP0_OUT_ODD 1 + #define EP0_IN_EVEN 2 + #define EP0_IN_ODD 3 + #define EP1_OUT_EVEN 4 + #define EP1_OUT_ODD 5 + #define EP1_IN_EVEN 6 + #define EP1_IN_ODD 7 + #define EP2_OUT_EVEN 8 + #define EP2_OUT_ODD 9 + #define EP2_IN_EVEN 10 + #define EP2_IN_ODD 11 + #define EP3_OUT_EVEN 12 + #define EP3_OUT_ODD 13 + #define EP3_IN_EVEN 14 + #define EP3_IN_ODD 15 + #define EP4_OUT_EVEN 16 + #define EP4_OUT_ODD 17 + #define EP4_IN_EVEN 18 + #define EP4_IN_ODD 19 + #define EP5_OUT_EVEN 20 + #define EP5_OUT_ODD 21 + #define EP5_IN_EVEN 22 + #define EP5_IN_ODD 23 + #define EP6_OUT_EVEN 24 + #define EP6_OUT_ODD 25 + #define EP6_IN_EVEN 26 + #define EP6_IN_ODD 27 + #define EP7_OUT_EVEN 28 + #define EP7_OUT_ODD 29 + #define EP7_IN_EVEN 30 + #define EP7_IN_ODD 31 + #define EP8_OUT_EVEN 32 + #define EP8_OUT_ODD 33 + #define EP8_IN_EVEN 34 + #define EP8_IN_ODD 35 + #define EP9_OUT_EVEN 36 + #define EP9_OUT_ODD 37 + #define EP9_IN_EVEN 38 + #define EP9_IN_ODD 39 + #define EP10_OUT_EVEN 40 + #define EP10_OUT_ODD 41 + #define EP10_IN_EVEN 42 + #define EP10_IN_ODD 43 + #define EP11_OUT_EVEN 44 + #define EP11_OUT_ODD 45 + #define EP11_IN_EVEN 46 + #define EP11_IN_ODD 47 + #define EP12_OUT_EVEN 48 + #define EP12_OUT_ODD 49 + #define EP12_IN_EVEN 50 + #define EP12_IN_ODD 51 + #define EP13_OUT_EVEN 52 + #define EP13_OUT_ODD 53 + #define EP13_IN_EVEN 54 + #define EP13_IN_ODD 55 + #define EP14_OUT_EVEN 56 + #define EP14_OUT_ODD 57 + #define EP14_IN_EVEN 58 + #define EP14_IN_ODD 59 + #define EP15_OUT_EVEN 60 + #define EP15_OUT_ODD 61 + #define EP15_IN_EVEN 62 + #define EP15_IN_ODD 63 + + #define EP(ep,dir,pp) (4*ep+2*dir+pp) + + #if defined (__18CXX) || defined(__C30__) || defined __XC16__ || (__XC8) + #if (defined(__dsPIC33E__) || defined (__PIC24E__)) + #define BD(ep,dir,pp) (8*(4*ep+2*dir+pp)) + #else + #define BD(ep,dir,pp) (4*(4*ep+2*dir+pp)) + #endif + #elif defined(__C32__) + #define BD(ep,dir,pp) (8*(4*ep+2*dir+pp)) + #else + #error "Not defined for this compiler" + #endif + +#elif (USB_PING_PONG_MODE == USB_PING_PONG__ALL_BUT_EP0) + #define USB_NEXT_EP0_OUT_PING_PONG 0x0000 + #define USB_NEXT_EP0_IN_PING_PONG 0x0000 + #define USB_NEXT_PING_PONG 0x0004 + #define EP0_OUT_EVEN 0 + #define EP0_OUT_ODD 0 + #define EP0_IN_EVEN 1 + #define EP0_IN_ODD 1 + #define EP1_OUT_EVEN 2 + #define EP1_OUT_ODD 3 + #define EP1_IN_EVEN 4 + #define EP1_IN_ODD 5 + #define EP2_OUT_EVEN 6 + #define EP2_OUT_ODD 7 + #define EP2_IN_EVEN 8 + #define EP2_IN_ODD 9 + #define EP3_OUT_EVEN 10 + #define EP3_OUT_ODD 11 + #define EP3_IN_EVEN 12 + #define EP3_IN_ODD 13 + #define EP4_OUT_EVEN 14 + #define EP4_OUT_ODD 15 + #define EP4_IN_EVEN 16 + #define EP4_IN_ODD 17 + #define EP5_OUT_EVEN 18 + #define EP5_OUT_ODD 19 + #define EP5_IN_EVEN 20 + #define EP5_IN_ODD 21 + #define EP6_OUT_EVEN 22 + #define EP6_OUT_ODD 23 + #define EP6_IN_EVEN 24 + #define EP6_IN_ODD 25 + #define EP7_OUT_EVEN 26 + #define EP7_OUT_ODD 27 + #define EP7_IN_EVEN 28 + #define EP7_IN_ODD 29 + #define EP8_OUT_EVEN 30 + #define EP8_OUT_ODD 31 + #define EP8_IN_EVEN 32 + #define EP8_IN_ODD 33 + #define EP9_OUT_EVEN 34 + #define EP9_OUT_ODD 35 + #define EP9_IN_EVEN 36 + #define EP9_IN_ODD 37 + #define EP10_OUT_EVEN 38 + #define EP10_OUT_ODD 39 + #define EP10_IN_EVEN 40 + #define EP10_IN_ODD 41 + #define EP11_OUT_EVEN 42 + #define EP11_OUT_ODD 43 + #define EP11_IN_EVEN 44 + #define EP11_IN_ODD 45 + #define EP12_OUT_EVEN 46 + #define EP12_OUT_ODD 47 + #define EP12_IN_EVEN 48 + #define EP12_IN_ODD 49 + #define EP13_OUT_EVEN 50 + #define EP13_OUT_ODD 51 + #define EP13_IN_EVEN 52 + #define EP13_IN_ODD 53 + #define EP14_OUT_EVEN 54 + #define EP14_OUT_ODD 55 + #define EP14_IN_EVEN 56 + #define EP14_IN_ODD 57 + #define EP15_OUT_EVEN 58 + #define EP15_OUT_ODD 59 + #define EP15_IN_EVEN 60 + #define EP15_IN_ODD 61 + + #define EP(ep,dir,pp) (4*ep+2*dir+((ep==0)?0:(pp-2))) + #define BD(ep,dir,pp) (4*(4*ep+2*dir+((ep==0)?0:(pp-2)))) + +#else + #error "No ping pong mode defined." +#endif + +/****** Event callback enabling/disabling macros ******************** + This section of code is used to disable specific USB events that may not be + desired by the user. This can save code size and increase throughput and + decrease CPU utiliazation. +********************************************************************/ +#if defined USB_DISABLE_SUSPEND_HANDLER + #define USB_SUSPEND_HANDLER(event,pointer,size) + + #warning "Disabling the suspend handler is not recommended. Proper suspend handling is required to create a compliant USB device." +#else + #define USB_SUSPEND_HANDLER(event,pointer,size) USER_USB_CALLBACK_EVENT_HANDLER(event,pointer,size) +#endif + +#if defined USB_DISABLE_WAKEUP_FROM_SUSPEND_HANDLER + #define USB_WAKEUP_FROM_SUSPEND_HANDLER(event,pointer,size) + + #warning "Disabling the wake from suspend handler is not recommended. Proper suspend handling is required to create a compliant USB device." +#else + #define USB_WAKEUP_FROM_SUSPEND_HANDLER(event,pointer,size) USER_USB_CALLBACK_EVENT_HANDLER(event,pointer,size) +#endif + +#if defined USB_DISABLE_SOF_HANDLER + #define USB_SOF_HANDLER(event,pointer,size) +#else + #define USB_SOF_HANDLER(event,pointer,size) USER_USB_CALLBACK_EVENT_HANDLER(event,pointer,size) +#endif + +#if defined USB_DISABLE_TRANSFER_TERMINATED_HANDLER + #define USB_TRANSFER_TERMINATED_HANDLER(event,pointer,size) +#else + #define USB_TRANSFER_TERMINATED_HANDLER(event,pointer,size) USER_USB_CALLBACK_EVENT_HANDLER(event,pointer,size) +#endif + +#if defined USB_DISABLE_ERROR_HANDLER + #define USB_ERROR_HANDLER(event,pointer,size) +#else + #define USB_ERROR_HANDLER(event,pointer,size) USER_USB_CALLBACK_EVENT_HANDLER(event,pointer,size) +#endif + +#if defined USB_DISABLE_NONSTANDARD_EP0_REQUEST_HANDLER + #define USB_NONSTANDARD_EP0_REQUEST_HANDLER(event,pointer,size) +#else + #define USB_NONSTANDARD_EP0_REQUEST_HANDLER(event,pointer,size) USER_USB_CALLBACK_EVENT_HANDLER(event,pointer,size) +#endif + +#if defined USB_DISABLE_SET_DESCRIPTOR_HANDLER + #define USB_SET_DESCRIPTOR_HANDLER(event,pointer,size) +#else + #define USB_SET_DESCRIPTOR_HANDLER(event,pointer,size) USER_USB_CALLBACK_EVENT_HANDLER(event,pointer,size) +#endif + +#if defined USB_DISABLE_SET_CONFIGURATION_HANDLER + #define USB_SET_CONFIGURATION_HANDLER(event,pointer,size) +#else + #define USB_SET_CONFIGURATION_HANDLER(event,pointer,size) USER_USB_CALLBACK_EVENT_HANDLER(event,pointer,size) +#endif + +#if defined USB_DISABLE_TRANSFER_COMPLETE_HANDLER + #define USB_TRANSFER_COMPLETE_HANDLER(event,pointer,size) +#else + #define USB_TRANSFER_COMPLETE_HANDLER(event,pointer,size) USER_USB_CALLBACK_EVENT_HANDLER(event,pointer,size) +#endif + diff --git a/software/front/US_Firmware.X/usb/usb_driver.c b/software/front/US_Firmware.X/usb/usb_driver.c new file mode 100644 index 0000000..27d2201 --- /dev/null +++ b/software/front/US_Firmware.X/usb/usb_driver.c @@ -0,0 +1,834 @@ +/******************************************************************** + FileName: main.c + Dependencies: See INCLUDES section + Processor: PIC18, PIC24, dsPIC, and PIC32 USB Microcontrollers + Hardware: This demo is natively intended to be used on Microchip USB demo + boards supported by the MCHPFSUSB stack. See release notes for + support matrix. This demo can be modified for use on other + hardware platforms. + Complier: Microchip C18 (for PIC18), XC16 (for PIC24/dsPIC), XC32 (for PIC32) + Company: Microchip Technology, Inc. + + Software License Agreement: + + The software supplied herewith by Microchip Technology Incorporated + (the "Company") for its PIC(R) Microcontroller is intended and + supplied to you, the Company's customer, for use solely and + exclusively on Microchip PIC Microcontroller products. The + software is owned by the Company and/or its supplier, and is + protected under applicable copyright laws. All rights are reserved. + Any use in violation of the foregoing restrictions may subject the + user to criminal sanctions under applicable laws, as well as to + civil liability for the breach of the terms and conditions of this + license. + + THIS SOFTWARE IS PROVIDED IN AN "AS IS" CONDITION. NO WARRANTIES, + WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED + TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT, + IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR + CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. + +******************************************************************** + File Description: + + Change History: + Rev Description + ---- ----------------------------------------- + 1.0 Initial release + 2.1 Updated for simplicity and to use common + coding style + 2.7b Improvements to USBCBSendResume(), to make it easier to use. + 2.9f Adding new part support + 2.9j Updates to support new bootloader features (ex: app version + fetching). +********************************************************************/ + +#ifndef MAIN_C +#define MAIN_C + +/** INCLUDES *******************************************************/ +#include "../mcu.h" +#include "../typedefs.h" +#include "usb.h" +#include "usb_function_hid.h" + +/** VARIABLES ******************************************************/ +#if defined(__18CXX) + #pragma udata + + //The ReceivedDataBuffer[] and ToSendDataBuffer[] arrays are used as + //USB packet buffers in this firmware. Therefore, they must be located in + //a USB module accessible portion of microcontroller RAM. + #if defined(__18F14K50) || defined(__18F13K50) || defined(__18LF14K50) || defined(__18LF13K50) + #pragma udata USB_VARIABLES=0x260 + #elif defined(__18F2455) || defined(__18F2550) || defined(__18F4455) || defined(__18F4550)\ + || defined(__18F2458) || defined(__18F2553) || defined(__18F4458) || defined(__18F4553)\ + || defined(__18LF24K50) || defined(__18F24K50) || defined(__18LF25K50)\ + || defined(__18F25K50) || defined(__18LF45K50) || defined(__18F45K50) + #pragma udata USB_VARIABLES=0x500 + #elif defined(__18F4450) || defined(__18F2450) + #pragma udata USB_VARIABLES=0x480 + #else + #pragma udata + #endif +#endif + +#if defined(__XC8) + #if defined(_18F14K50) || defined(_18F13K50) || defined(_18LF14K50) || defined(_18LF13K50) + #define RX_DATA_BUFFER_ADDRESS @0x260 + #define TX_DATA_BUFFER_ADDRESS @0x2A0 + #elif defined(_18F2455) || defined(_18F2550) || defined(_18F4455) || defined(_18F4550)\ + || defined(_18F2458) || defined(_18F2453) || defined(_18F4558) || defined(_18F4553)\ + || defined(_18LF24K50) || defined(_18F24K50) || defined(_18LF25K50)\ + || defined(_18F25K50) || defined(_18LF45K50) || defined(_18F45K50) + #define RX_DATA_BUFFER_ADDRESS @0x500 + #define TX_DATA_BUFFER_ADDRESS @0x540 + #elif defined(_18F4450) || defined(_18F2450) + #define RX_DATA_BUFFER_ADDRESS @0x480 + #define TX_DATA_BUFFER_ADDRESS @0x4C0 + #elif defined(_16F1459) + #define RX_DATA_BUFFER_ADDRESS @0x2050 + #define TX_DATA_BUFFER_ADDRESS @0x20A0 + #else + #define RX_DATA_BUFFER_ADDRESS + #define RX_DATA_BUFFER_ADDRESS + #endif +#else + #define RX_DATA_BUFFER_ADDRESS + #define TX_DATA_BUFFER_ADDRESS +#endif + +unsigned char USBRxBuffer[64] RX_DATA_BUFFER_ADDRESS; +unsigned char USBTxBuffer[64] TX_DATA_BUFFER_ADDRESS; + +#if defined(__18CXX) +#pragma udata +#endif + +USB_HANDLE USBOutHandle = 0; //USB handle. Must be initialized to 0 at startup. +USB_HANDLE USBInHandle = 0; //USB handle. Must be initialized to 0 at startup. + +void USBCBSendResume(void); + +/** VECTOR REMAPPING ***********************************************/ +#if defined(__18CXX) + //On PIC18 devices, addresses 0x00, 0x08, and 0x18 are used for + //the reset, high priority interrupt, and low priority interrupt + //vectors. However, the Microchip HID bootloader occupies the + //0x00-0xFFF program memory region. Therefore, the bootloader code remaps + //these vectors to new locations as indicated below. This remapping is + //only necessary if you wish to be able to (optionally) program the hex file + //generated from this project with the USB bootloader. + #define REMAPPED_RESET_VECTOR_ADDRESS 0x1000 + #define REMAPPED_HIGH_INTERRUPT_VECTOR_ADDRESS 0x1008 + #define REMAPPED_LOW_INTERRUPT_VECTOR_ADDRESS 0x1018 + #define APP_VERSION_ADDRESS 0x1016 //Fixed location, so the App FW image version can be read by the bootloader. + #define APP_SIGNATURE_ADDRESS 0x1006 //Signature location that must be kept at blaknk value (0xFFFF) in this project (has special purpose for bootloader). + + //-------------------------------------------------------------------------- + //Application firmware image version values, as reported to the bootloader + //firmware. These are useful so the bootloader can potentially know if the + //user is trying to program an older firmware image onto a device that + //has already been programmed with a with a newer firmware image. + //Format is APP_FIRMWARE_VERSION_MAJOR.APP_FIRMWARE_VERSION_MINOR. + //The valid minor version is from 00 to 99. Example: + //if APP_FIRMWARE_VERSION_MAJOR == 1, APP_FIRMWARE_VERSION_MINOR == 1, + //then the version is "1.01" + #define APP_FIRMWARE_VERSION_MAJOR 1 //valid values 0-255 + #define APP_FIRMWARE_VERSION_MINOR 0 //valid values 0-99 + //-------------------------------------------------------------------------- + + #pragma romdata AppVersionAndSignatureSection = APP_VERSION_ADDRESS + ROM unsigned char AppVersion[2] = {APP_FIRMWARE_VERSION_MINOR, APP_FIRMWARE_VERSION_MAJOR}; + #pragma romdata AppSignatureSection = APP_SIGNATURE_ADDRESS + ROM unsigned short int SignaturePlaceholder = 0xFFFF; + + #pragma code HIGH_INTERRUPT_VECTOR = 0x08 + void High_ISR (void) + { + _asm goto REMAPPED_HIGH_INTERRUPT_VECTOR_ADDRESS _endasm + } + #pragma code LOW_INTERRUPT_VECTOR = 0x18 + void Low_ISR (void) + { + _asm goto REMAPPED_LOW_INTERRUPT_VECTOR_ADDRESS _endasm + } + extern void _startup (void); // See c018i.c in your C18 compiler dir + #pragma code REMAPPED_RESET_VECTOR = REMAPPED_RESET_VECTOR_ADDRESS + void _reset (void) + { + _asm goto _startup _endasm + } + #pragma code REMAPPED_HIGH_INTERRUPT_VECTOR = REMAPPED_HIGH_INTERRUPT_VECTOR_ADDRESS + void Remapped_High_ISR (void) + { + _asm goto YourHighPriorityISRCode _endasm + } + #pragma code REMAPPED_LOW_INTERRUPT_VECTOR = REMAPPED_LOW_INTERRUPT_VECTOR_ADDRESS + void Remapped_Low_ISR (void) + { + _asm goto YourLowPriorityISRCode _endasm + } + #pragma code + + + //These are your actual interrupt handling routines. + #pragma interrupt YourHighPriorityISRCode + void YourHighPriorityISRCode() + { + //Check which interrupt flag caused the interrupt. + //Service the interrupt + //Clear the interrupt flag + //Etc. + #if defined(USB_INTERRUPT) + USBDeviceTasks(); + #endif + + } //This return will be a "retfie fast", since this is in a #pragma interrupt section + #pragma interruptlow YourLowPriorityISRCode + void YourLowPriorityISRCode() + { + //Check which interrupt flag caused the interrupt. + //Service the interrupt + //Clear the interrupt flag + //Etc. + + } //This return will be a "retfie", since this is in a #pragma interruptlow section +#elif defined(_PIC14E) + //These are your actual interrupt handling routines. + void interrupt ISRCode() + { + //Check which interrupt flag caused the interrupt. + //Service the interrupt + //Clear the interrupt flag + //Etc. + #if defined(USB_INTERRUPT) + + USBDeviceTasks(); + #endif + } +#endif + + +/** DECLARATIONS ***************************************************/ +#if defined(__18CXX) +#pragma code +#endif + +/******************************************************************** + * Function: void main(void) + * + * PreCondition: None + * + * Input: None + * + * Output: None + * + * Side Effects: None + * + * Overview: Main program entry point. + * + * Note: None + *******************************************************************/ +/*#if defined(__18CXX) +void main(void) +#else +int main(void) +#endif +{ + InitializeSystem(); + + #if defined(USB_INTERRUPT) + USBDeviceAttach(); + #endif + + while(1) + { + #if defined(USB_POLLING) + // Check bus status and service USB interrupts. + USBDeviceTasks(); // Interrupt or polling method. If using polling, must call + // this function periodically. This function will take care + // of processing and responding to SETUP transactions + // (such as during the enumeration process when you first + // plug in). USB hosts require that USB devices should accept + // and process SETUP packets in a timely fashion. Therefore, + // when using polling, this function should be called + // regularly (such as once every 1.8ms or faster** [see + // inline code comments in usb_device.c for explanation when + // "or faster" applies]) In most cases, the USBDeviceTasks() + // function does not take very long to execute (ex: <100 + // instruction cycles) before it returns. + #endif + + + // Application-specific tasks. + // Application related code may be added here, or in the ProcessIO() function. + ProcessIO(); + }//end while +}//end main*/ + + +/******************************************************************** + * Function: static void InitializeSystem(void) + * + * PreCondition: None + * + * Input: None + * + * Output: None + * + * Side Effects: None + * + * Overview: InitializeSystem is a centralize initialization + * routine. All required USB initialization routines + * are called from here. + * + * User application initialization routine should + * also be called from here. + * + * Note: None + *******************************************************************/ +void USBDriverInit(void) +{ + + USBOutHandle = 0; + USBInHandle = 0; + USBDeviceInit(); //usb_device.c. Initializes USB module SFRs and firmware + //variables to known states. +}//end InitializeSystem + + +/******************************************************************** + * Function: void ProcessIO(void) + * + * PreCondition: None + * + * Input: None + * + * Output: None + * + * Side Effects: None + * + * Overview: This function is a place holder for other user + * routines. It is a mixture of both USB and + * non-USB tasks. + * + * Note: None + *******************************************************************/ +/*void ProcessIO(void) +{ + //Blink the LEDs according to the USB device status + + // User Application USB tasks + if((USBDeviceState < CONFIGURED_STATE)||(USBSuspendControl==1)) return; + + //Check if we have received an OUT data packet from the host + if(!HIDRxHandleBusy(USBOutHandle)) + { + //We just received a packet of data from the USB host. + //Check the first byte of the packet to see what command the host + //application software wants us to fulfill. + switch(ReceivedDataBuffer[0]) //Look at the data the host sent, to see what kind of application specific command it sent. + { + case 0x80: //Toggle LEDs command + case 0x81: //Get push button state + //Check to make sure the endpoint/buffer is free before we modify the contents + if(!HIDTxHandleBusy(USBInHandle)) + { + ToSendDataBuffer[0] = 0x81; //Echo back to the host PC the command we are fulfilling in the first byte. In this case, the Get Pushbutton State command. + USBInHandle = HIDTxPacket(HID_EP,(BYTE*)&ToSendDataBuffer[0],64); + } + break; + + case 0x37: //Read POT command. Uses ADC to measure an analog voltage on one of the ANxx I/O pins, and returns the result to the host + { + WORD_VAL w; + + //Check to make sure the endpoint/buffer is free before we modify the contents + if(!HIDTxHandleBusy(USBInHandle)) + { + //Some demo boards, like the PIC18F87J50 FS USB Plug-In Module board, do not have a potentiometer (when used stand alone). + //This function call will still measure the analog voltage on the I/O pin however. To make the demo more interesting, it + //is suggested that an external adjustable analog voltage should be applied to this pin. + ToSendDataBuffer[0] = 0x37; //Echo back to the host the command we are fulfilling in the first byte. In this case, the Read POT (analog voltage) command. + ToSendDataBuffer[1] = w.v[0]; //Measured analog voltage LSB + ToSendDataBuffer[2] = w.v[1]; //Measured analog voltage MSB + + //Prepare the USB module to send the data packet to the host + USBInHandle = HIDTxPacket(HID_EP,(BYTE*)&ToSendDataBuffer[0],64); + } + } + break; + } + //Re-arm the OUT endpoint, so we can receive the next OUT data packet + //that the host may try to send us. + USBOutHandle = HIDRxPacket(HID_EP, (BYTE*)&ReceivedDataBuffer, 64); + } + + +}//end ProcessIO */ + + +// ****************************************************************************************************** +// ************** USB Callback Functions **************************************************************** +// ****************************************************************************************************** +// The USB firmware stack will call the callback functions USBCBxxx() in response to certain USB related +// events. For example, if the host PC is powering down, it will stop sending out Start of Frame (SOF) +// packets to your device. In response to this, all USB devices are supposed to decrease their power +// consumption from the USB Vbus to <2.5mA* each. The USB module detects this condition (which according +// to the USB specifications is 3+ms of no bus activity/SOF packets) and then calls the USBCBSuspend() +// function. You should modify these callback functions to take appropriate actions for each of these +// conditions. For example, in the USBCBSuspend(), you may wish to add code that will decrease power +// consumption from Vbus to <2.5mA (such as by clock switching, turning off LEDs, putting the +// microcontroller to sleep, etc.). Then, in the USBCBWakeFromSuspend() function, you may then wish to +// add code that undoes the power saving things done in the USBCBSuspend() function. + +// The USBCBSendResume() function is special, in that the USB stack will not automatically call this +// function. This function is meant to be called from the application firmware instead. See the +// additional comments near the function. + +// Note *: The "usb_20.pdf" specs indicate 500uA or 2.5mA, depending upon device classification. However, +// the USB-IF has officially issued an ECN (engineering change notice) changing this to 2.5mA for all +// devices. Make sure to re-download the latest specifications to get all of the newest ECNs. + +/****************************************************************************** + * Function: void USBCBSuspend(void) + * + * PreCondition: None + * + * Input: None + * + * Output: None + * + * Side Effects: None + * + * Overview: Call back that is invoked when a USB suspend is detected + * + * Note: None + *****************************************************************************/ +void USBCBSuspend(void) +{ + //Example power saving code. Insert appropriate code here for the desired + //application behavior. If the microcontroller will be put to sleep, a + //process similar to that shown below may be used: + + //ConfigureIOPinsForLowPower(); + //SaveStateOfAllInterruptEnableBits(); + //DisableAllInterruptEnableBits(); + //EnableOnlyTheInterruptsWhichWillBeUsedToWakeTheMicro(); //should enable at least USBActivityIF as a wake source + //Sleep(); + //RestoreStateOfAllPreviouslySavedInterruptEnableBits(); //Preferrably, this should be done in the USBCBWakeFromSuspend() function instead. + //RestoreIOPinsToNormal(); //Preferrably, this should be done in the USBCBWakeFromSuspend() function instead. + + //IMPORTANT NOTE: Do not clear the USBActivityIF (ACTVIF) bit here. This bit is + //cleared inside the usb_device.c file. Clearing USBActivityIF here will cause + //things to not work as intended. + + + #if defined(__C30__) || defined __XC16__ + //This function requires that the _IPL level be something other than 0. + // We can set it here to something other than + #ifndef DSPIC33E_USB_STARTER_KIT + _IPL = 1; + USBSleepOnSuspend(); + #endif + #endif +} + + + +/****************************************************************************** + * Function: void USBCBWakeFromSuspend(void) + * + * PreCondition: None + * + * Input: None + * + * Output: None + * + * Side Effects: None + * + * Overview: The host may put USB peripheral devices in low power + * suspend mode (by "sending" 3+ms of idle). Once in suspend + * mode, the host may wake the device back up by sending non- + * idle state signalling. + * + * This call back is invoked when a wakeup from USB suspend + * is detected. + * + * Note: None + *****************************************************************************/ +void USBCBWakeFromSuspend(void) +{ + // If clock switching or other power savings measures were taken when + // executing the USBCBSuspend() function, now would be a good time to + // switch back to normal full power run mode conditions. The host allows + // 10+ milliseconds of wakeup time, after which the device must be + // fully back to normal, and capable of receiving and processing USB + // packets. In order to do this, the USB module must receive proper + // clocking (IE: 48MHz clock must be available to SIE for full speed USB + // operation). + // Make sure the selected oscillator settings are consistent with USB + // operation before returning from this function. +} + +/******************************************************************** + * Function: void USBCB_SOF_Handler(void) + * + * PreCondition: None + * + * Input: None + * + * Output: None + * + * Side Effects: None + * + * Overview: The USB host sends out a SOF packet to full-speed + * devices every 1 ms. This interrupt may be useful + * for isochronous pipes. End designers should + * implement callback routine as necessary. + * + * Note: None + *******************************************************************/ +void USBCB_SOF_Handler(void) +{ + // No need to clear UIRbits.SOFIF to 0 here. + // Callback caller is already doing that. +} + +/******************************************************************* + * Function: void USBCBErrorHandler(void) + * + * PreCondition: None + * + * Input: None + * + * Output: None + * + * Side Effects: None + * + * Overview: The purpose of this callback is mainly for + * debugging during development. Check UEIR to see + * which error causes the interrupt. + * + * Note: None + *******************************************************************/ +void USBCBErrorHandler(void) +{ + // No need to clear UEIR to 0 here. + // Callback caller is already doing that. + + // Typically, user firmware does not need to do anything special + // if a USB error occurs. For example, if the host sends an OUT + // packet to your device, but the packet gets corrupted (ex: + // because of a bad connection, or the user unplugs the + // USB cable during the transmission) this will typically set + // one or more USB error interrupt flags. Nothing specific + // needs to be done however, since the SIE will automatically + // send a "NAK" packet to the host. In response to this, the + // host will normally retry to send the packet again, and no + // data loss occurs. The system will typically recover + // automatically, without the need for application firmware + // intervention. + + // Nevertheless, this callback function is provided, such as + // for debugging purposes. +} + + +/******************************************************************* + * Function: void USBCBCheckOtherReq(void) + * + * PreCondition: None + * + * Input: None + * + * Output: None + * + * Side Effects: None + * + * Overview: When SETUP packets arrive from the host, some + * firmware must process the request and respond + * appropriately to fulfill the request. Some of + * the SETUP packets will be for standard + * USB "chapter 9" (as in, fulfilling chapter 9 of + * the official USB specifications) requests, while + * others may be specific to the USB device class + * that is being implemented. For example, a HID + * class device needs to be able to respond to + * "GET REPORT" type of requests. This + * is not a standard USB chapter 9 request, and + * therefore not handled by usb_device.c. Instead + * this request should be handled by class specific + * firmware, such as that contained in usb_function_hid.c. + * + * Note: None + *******************************************************************/ +void USBCBCheckOtherReq(void) +{ + USBCheckHIDRequest(); +}//end + + +/******************************************************************* + * Function: void USBCBStdSetDscHandler(void) + * + * PreCondition: None + * + * Input: None + * + * Output: None + * + * Side Effects: None + * + * Overview: The USBCBStdSetDscHandler() callback function is + * called when a SETUP, bRequest: SET_DESCRIPTOR request + * arrives. Typically SET_DESCRIPTOR requests are + * not used in most applications, and it is + * optional to support this type of request. + * + * Note: None + *******************************************************************/ +void USBCBStdSetDscHandler(void) +{ + // Must claim session ownership if supporting this request +}//end + + +/******************************************************************* + * Function: void USBCBInitEP(void) + * + * PreCondition: None + * + * Input: None + * + * Output: None + * + * Side Effects: None + * + * Overview: This function is called when the device becomes + * initialized, which occurs after the host sends a + * SET_CONFIGURATION (wValue not = 0) request. This + * callback function should initialize the endpoints + * for the device's usage according to the current + * configuration. + * + * Note: None + *******************************************************************/ +void USBCBInitEP(void) +{ + //enable the HID endpoint + USBEnableEndpoint(HID_EP,USB_IN_ENABLED|USB_OUT_ENABLED|USB_HANDSHAKE_ENABLED|USB_DISALLOW_SETUP); + //Re-arm the OUT endpoint for the next packet + USBOutHandle = HIDRxPacket(HID_EP,(BYTE*)&USBRxBuffer,64); +} + +/******************************************************************** + * Function: void USBCBSendResume(void) + * + * PreCondition: None + * + * Input: None + * + * Output: None + * + * Side Effects: None + * + * Overview: The USB specifications allow some types of USB + * peripheral devices to wake up a host PC (such + * as if it is in a low power suspend to RAM state). + * This can be a very useful feature in some + * USB applications, such as an Infrared remote + * control receiver. If a user presses the "power" + * button on a remote control, it is nice that the + * IR receiver can detect this signalling, and then + * send a USB "command" to the PC to wake up. + * + * The USBCBSendResume() "callback" function is used + * to send this special USB signalling which wakes + * up the PC. This function may be called by + * application firmware to wake up the PC. This + * function will only be able to wake up the host if + * all of the below are true: + * + * 1. The USB driver used on the host PC supports + * the remote wakeup capability. + * 2. The USB configuration descriptor indicates + * the device is remote wakeup capable in the + * bmAttributes field. + * 3. The USB host PC is currently sleeping, + * and has previously sent your device a SET + * FEATURE setup packet which "armed" the + * remote wakeup capability. + * + * If the host has not armed the device to perform remote wakeup, + * then this function will return without actually performing a + * remote wakeup sequence. This is the required behavior, + * as a USB device that has not been armed to perform remote + * wakeup must not drive remote wakeup signalling onto the bus; + * doing so will cause USB compliance testing failure. + * + * This callback should send a RESUME signal that + * has the period of 1-15ms. + * + * Note: This function does nothing and returns quickly, if the USB + * bus and host are not in a suspended condition, or are + * otherwise not in a remote wakeup ready state. Therefore, it + * is safe to optionally call this function regularly, ex: + * anytime application stimulus occurs, as the function will + * have no effect, until the bus really is in a state ready + * to accept remote wakeup. + * + * When this function executes, it may perform clock switching, + * depending upon the application specific code in + * USBCBWakeFromSuspend(). This is needed, since the USB + * bus will no longer be suspended by the time this function + * returns. Therefore, the USB module will need to be ready + * to receive traffic from the host. + * + * The modifiable section in this routine may be changed + * to meet the application needs. Current implementation + * temporary blocks other functions from executing for a + * period of ~3-15 ms depending on the core frequency. + * + * According to USB 2.0 specification section 7.1.7.7, + * "The remote wakeup device must hold the resume signaling + * for at least 1 ms but for no more than 15 ms." + * The idea here is to use a delay counter loop, using a + * common value that would work over a wide range of core + * frequencies. + * That value selected is 1800. See table below: + * ========================================================== + * Core Freq(MHz) MIP RESUME Signal Period (ms) + * ========================================================== + * 48 12 1.05 + * 4 1 12.6 + * ========================================================== + * * These timing could be incorrect when using code + * optimization or extended instruction mode, + * or when having other interrupts enabled. + * Make sure to verify using the MPLAB SIM's Stopwatch + * and verify the actual signal on an oscilloscope. + *******************************************************************/ +void USBCBSendResume(void) +{ + static WORD delay_count; + + //First verify that the host has armed us to perform remote wakeup. + //It does this by sending a SET_FEATURE request to enable remote wakeup, + //usually just before the host goes to standby mode (note: it will only + //send this SET_FEATURE request if the configuration descriptor declares + //the device as remote wakeup capable, AND, if the feature is enabled + //on the host (ex: on Windows based hosts, in the device manager + //properties page for the USB device, power management tab, the + //"Allow this device to bring the computer out of standby." checkbox + //should be checked). + if(USBGetRemoteWakeupStatus() == TRUE) + { + //Verify that the USB bus is in fact suspended, before we send + //remote wakeup signalling. + if(USBIsBusSuspended() == TRUE) + { + USBMaskInterrupts(); + + //Clock switch to settings consistent with normal USB operation. + USBCBWakeFromSuspend(); + USBSuspendControl = 0; + USBBusIsSuspended = FALSE; //So we don't execute this code again, + //until a new suspend condition is detected. + + //Section 7.1.7.7 of the USB 2.0 specifications indicates a USB + //device must continuously see 5ms+ of idle on the bus, before it sends + //remote wakeup signalling. One way to be certain that this parameter + //gets met, is to add a 2ms+ blocking delay here (2ms plus at + //least 3ms from bus idle to USBIsBusSuspended() == TRUE, yeilds + //5ms+ total delay since start of idle). + delay_count = 3600U; + do + { + delay_count--; + }while(delay_count); + + //Now drive the resume K-state signalling onto the USB bus. + USBResumeControl = 1; // Start RESUME signaling + delay_count = 1800U; // Set RESUME line for 1-13 ms + do + { + delay_count--; + }while(delay_count); + USBResumeControl = 0; //Finished driving resume signalling + + USBUnmaskInterrupts(); + } + } +} + + +/******************************************************************* + * Function: BOOL USER_USB_CALLBACK_EVENT_HANDLER( + * USB_EVENT event, void *pdata, WORD size) + * + * PreCondition: None + * + * Input: USB_EVENT event - the type of event + * void *pdata - pointer to the event data + * WORD size - size of the event data + * + * Output: None + * + * Side Effects: None + * + * Overview: This function is called from the USB stack to + * notify a user application that a USB event + * occured. This callback is in interrupt context + * when the USB_INTERRUPT option is selected. + * + * Note: None + *******************************************************************/ +BOOL USER_USB_CALLBACK_EVENT_HANDLER(int event, void *pdata, WORD size) +{ + switch(event) + { + case EVENT_TRANSFER: + //Add application specific callback task or callback function here if desired. + break; + case EVENT_SOF: + USBCB_SOF_Handler(); + break; + case EVENT_SUSPEND: + USBCBSuspend(); + break; + case EVENT_RESUME: + USBCBWakeFromSuspend(); + break; + case EVENT_CONFIGURED: + USBCBInitEP(); + break; + case EVENT_SET_DESCRIPTOR: + USBCBStdSetDscHandler(); + break; + case EVENT_EP0_REQUEST: + USBCBCheckOtherReq(); + break; + case EVENT_BUS_ERROR: + USBCBErrorHandler(); + break; + case EVENT_TRANSFER_TERMINATED: + //Add application specific callback task or callback function here if desired. + //The EVENT_TRANSFER_TERMINATED event occurs when the host performs a CLEAR + //FEATURE (endpoint halt) request on an application endpoint which was + //previously armed (UOWN was = 1). Here would be a good place to: + //1. Determine which endpoint the transaction that just got terminated was + // on, by checking the handle value in the *pdata. + //2. Re-arm the endpoint if desired (typically would be the case for OUT + // endpoints). + break; + default: + break; + } + return TRUE; +} + +/** EOF main.c *************************************************/ +#endif diff --git a/software/front/US_Firmware.X/usb/usb_driver.h b/software/front/US_Firmware.X/usb/usb_driver.h new file mode 100644 index 0000000..4455524 --- /dev/null +++ b/software/front/US_Firmware.X/usb/usb_driver.h @@ -0,0 +1,27 @@ +/* + * File: usb_driver.h + * Author: Sparky + * + * Created on ??????????, 2013, ?????? 5, 23:55 + */ + +#ifndef USB_DRIVER_H +#define USB_DRIVER_H + +#ifdef __cplusplus +extern "C" { +#endif +#include "..\typedefs.h" + +extern void USBDriverInit(void); +extern unsigned char USBTxBuffer[64]; +extern unsigned char USBRxBuffer[64]; +extern volatile USB_HANDLE USBOutHandle; //USB handle. Must be initialized to 0 at startup. +extern volatile USB_HANDLE USBInHandle; //USB handle. Must be initialized to 0 at startup. + +#ifdef __cplusplus +} +#endif + +#endif /* USB_DRIVER_H */ + diff --git a/software/front/US_Firmware.X/usb/usb_function_hid.c b/software/front/US_Firmware.X/usb/usb_function_hid.c new file mode 100644 index 0000000..0658284 --- /dev/null +++ b/software/front/US_Firmware.X/usb/usb_function_hid.c @@ -0,0 +1,343 @@ +/******************************************************************** + File Information: + FileName: usb_function_hid.c + Dependencies: See INCLUDES section + Processor: PIC18 or PIC24 USB Microcontrollers + Hardware: The code is natively intended to be used on the following + hardware platforms: PICDEM� FS USB Demo Board, + PIC18F87J50 FS USB Plug-In Module, or + Explorer 16 + PIC24 USB PIM. The firmware may be + modified for use on other USB platforms by editing the + HardwareProfile.h file. + Complier: Microchip C18 (for PIC18) or C30 (for PIC24) + Company: Microchip Technology, Inc. + + Software License Agreement: + + The software supplied herewith by Microchip Technology Incorporated + (the �Company�) for its PIC� Microcontroller is intended and + supplied to you, the Company�s customer, for use solely and + exclusively on Microchip PIC Microcontroller products. The + software is owned by the Company and/or its supplier, and is + protected under applicable copyright laws. All rights are reserved. + Any use in violation of the foregoing restrictions may subject the + user to criminal sanctions under applicable laws, as well as to + civil liability for the breach of the terms and conditions of this + license. + + THIS SOFTWARE IS PROVIDED IN AN �AS IS� CONDITION. NO WARRANTIES, + WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED + TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT, + IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR + CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. + + File Description: + + Change History: + Rev Date Description + 1.0 11/19/2004 Initial release + 2.1 02/26/2007 Updated for simplicity and to use common + coding style + + Summary: + This file contains all of functions, macros, definitions, variables, + datatypes, etc. that are required for usage with the HID function + driver. This file should be included in projects that use the HID + \function driver. + + + + This file is located in the "\\\Microchip\\USB\\HID + Device Driver" directory. + Description: + USB HID Function Driver File + + This file contains all of functions, macros, definitions, variables, + datatypes, etc. that are required for usage with the HID function + driver. This file should be included in projects that use the HID + \function driver. + + This file is located in the "\\\Microchip\\USB\\HID + Device Driver" directory. + + When including this file in a new project, this file can either be + referenced from the directory in which it was installed or copied + directly into the user application folder. If the first method is + chosen to keep the file located in the folder in which it is installed + then include paths need to be added so that the library and the + application both know where to reference each others files. If the + application folder is located in the same folder as the Microchip + folder (like the current demo folders), then the following include + paths need to be added to the application's project: + + ..\\Include + + ..\\..\\Include + + ..\\..\\Microchip\\Include + + ..\\..\\\ + + ..\\..\\..\\\ + + If a different directory structure is used, modify the paths as + required. An example using absolute paths instead of relative paths + would be the following: + + C:\\Microchip Solutions\\Microchip\\Include + + C:\\Microchip Solutions\\My Demo Application + + + Change History: + Rev Description + ---- ------------------------------------------ + 1.0 Initial release + 2.1 Updated for simplicity and to use common + coding style + 2.6 Minor changes in defintions + +*******************************************************************/ + +#ifndef USB_FUNCTION_HID_C +#define USB_FUNCTION_HID_C + +/** INCLUDES *******************************************************/ +#include "GenericTypeDefs.h" +#include "Compiler.h" +#include "usb.h" +#include "usb_function_hid.h" + + +/** VARIABLES ******************************************************/ +#if defined(COMPILER_MPLAB_C18) + #pragma udata +#endif + +BYTE idle_rate; +BYTE active_protocol; // [0] Boot Protocol [1] Report Protocol + +/** EXTERNAL PROTOTYPES ********************************************/ +#if defined USER_GET_REPORT_HANDLER + void USER_GET_REPORT_HANDLER(void); +#endif + +#if defined USER_SET_REPORT_HANDLER + void USER_SET_REPORT_HANDLER(void); +#endif + +/** Section: DECLARATIONS ***************************************************/ +#if defined(__18CXX) + #pragma code +#endif + +/** Section: CLASS SPECIFIC REQUESTS ****************************************/ + +/******************************************************************** + Function: + void USBCheckHIDRequest(void) + + Summary: + This routine handles HID specific request that happen on EP0. + This function should be called from the USBCBCheckOtherReq() call back + function whenever implementing a HID device. + + Description: + This routine handles HID specific request that happen on EP0. These + include, but are not limited to, requests for the HID report + descriptors. This function should be called from the + USBCBCheckOtherReq() call back function whenever using an HID device. + + Typical Usage: + + void USBCBCheckOtherReq(void) + { + //Since the stack didn't handle the request I need to check + // my class drivers to see if it is for them + USBCheckHIDRequest(); + } + + + PreCondition: + None + + Parameters: + None + + Return Values: + None + + Remarks: + None + + *******************************************************************/ +void USBCheckHIDRequest(void) +{ + if(SetupPkt.Recipient != USB_SETUP_RECIPIENT_INTERFACE_BITFIELD) return; + if(SetupPkt.bIntfID != HID_INTF_ID) return; + + /* + * There are two standard requests that hid.c may support. + * 1. GET_DSC(DSC_HID,DSC_RPT,DSC_PHY); + * 2. SET_DSC(DSC_HID,DSC_RPT,DSC_PHY); + */ + if(SetupPkt.bRequest == USB_REQUEST_GET_DESCRIPTOR) + { + switch(SetupPkt.bDescriptorType) + { + case DSC_HID: //HID Descriptor + if(USBActiveConfiguration == 1) + { + USBEP0SendROMPtr( + (ROM BYTE*)&configDescriptor1 + 18, //18 is a magic number. It is the offset from start of the configuration descriptor to the start of the HID descriptor. + sizeof(USB_HID_DSC)+3, + USB_EP0_INCLUDE_ZERO); + } + break; + case DSC_RPT: //Report Descriptor + //if(USBActiveConfiguration == 1) + { + USBEP0SendROMPtr( + (ROM BYTE*)&hid_rpt01, + HID_RPT01_SIZE, //See usbcfg.h + USB_EP0_INCLUDE_ZERO); + } + break; + case DSC_PHY: //Physical Descriptor + //Note: The below placeholder code is commented out. HID Physical Descriptors are optional and are not used + //in many types of HID applications. If an application does not have a physical descriptor, + //then the device should return STALL in response to this request (stack will do this automatically + //if no-one claims ownership of the control transfer). + //If an application does implement a physical descriptor, then make sure to declare + //hid_phy01 (rom structure containing the descriptor data), and hid_phy01 (the size of the descriptors in bytes), + //and then uncomment the below code. + //if(USBActiveConfiguration == 1) + //{ + // USBEP0SendROMPtr((ROM BYTE*)&hid_phy01, sizeof(hid_phy01), USB_EP0_INCLUDE_ZERO); + //} + break; + }//end switch(SetupPkt.bDescriptorType) + }//end if(SetupPkt.bRequest == GET_DSC) + + if(SetupPkt.RequestType != USB_SETUP_TYPE_CLASS_BITFIELD) + { + return; + } + + switch(SetupPkt.bRequest) + { + case GET_REPORT: + #if defined USER_GET_REPORT_HANDLER + USER_GET_REPORT_HANDLER(); + #endif + break; + case SET_REPORT: + #if defined USER_SET_REPORT_HANDLER + USER_SET_REPORT_HANDLER(); + #endif + break; + case GET_IDLE: + USBEP0SendRAMPtr( + (BYTE*)&idle_rate, + 1, + USB_EP0_INCLUDE_ZERO); + break; + case SET_IDLE: + USBEP0Transmit(USB_EP0_NO_DATA); + idle_rate = SetupPkt.W_Value.byte.HB; + break; + case GET_PROTOCOL: + USBEP0SendRAMPtr( + (BYTE*)&active_protocol, + 1, + USB_EP0_NO_OPTIONS); + break; + case SET_PROTOCOL: + USBEP0Transmit(USB_EP0_NO_DATA); + active_protocol = SetupPkt.W_Value.byte.LB; + break; + }//end switch(SetupPkt.bRequest) + +}//end USBCheckHIDRequest + +/******************************************************************** + Function: + USB_HANDLE HIDTxPacket(BYTE ep, BYTE* data, WORD len) + + Summary: + Sends the specified data out the specified endpoint + + Description: + This function sends the specified data out the specified + endpoint and returns a handle to the transfer information. + + Typical Usage: + + //make sure that the last transfer isn't busy by checking the handle + if(!HIDTxHandleBusy(USBInHandle)) + { + //Send the data contained in the ToSendDataBuffer[] array out on + // endpoint HID_EP + USBInHandle = HIDTxPacket(HID_EP,(BYTE*)&ToSendDataBuffer[0],sizeof(ToSendDataBuffer)); + } + + + PreCondition: + None + + Parameters: + BYTE ep - the endpoint you want to send the data out of + BYTE* data - pointer to the data that you wish to send + WORD len - the length of the data that you wish to send + + Return Values: + USB_HANDLE - a handle for the transfer. This information + should be kept to track the status of the transfer + + Remarks: + None + + *******************************************************************/ + // Implemented as a macro. See usb_function_hid.h + +/******************************************************************** + Function: + USB_HANDLE HIDRxPacket(BYTE ep, BYTE* data, WORD len) + + Summary: + Receives the specified data out the specified endpoint + + Description: + Receives the specified data out the specified endpoint. + + Typical Usage: + + //Read 64-bytes from endpoint HID_EP, into the ReceivedDataBuffer array. + // Make sure to save the return handle so that we can check it later + // to determine when the transfer is complete. + USBOutHandle = HIDRxPacket(HID_EP,(BYTE*)&ReceivedDataBuffer,64); + + + PreCondition: + None + + Parameters: + BYTE ep - the endpoint you want to receive the data into + BYTE* data - pointer to where the data will go when it arrives + WORD len - the length of the data that you wish to receive + + Return Values: + USB_HANDLE - a handle for the transfer. This information + should be kept to track the status of the transfer + + Remarks: + None + + *******************************************************************/ + // Implemented as a macro. See usb_function_hid.h + +/** USER API *******************************************************/ + +#endif +/** EOF usb_function_hid.c ******************************************************/ diff --git a/software/front/US_Firmware.X/usb/usb_function_hid.h b/software/front/US_Firmware.X/usb/usb_function_hid.h new file mode 100644 index 0000000..2f0f998 --- /dev/null +++ b/software/front/US_Firmware.X/usb/usb_function_hid.h @@ -0,0 +1,387 @@ +/******************************************************************************* + File Information: + FileName: usb_function_hid.h + Dependencies: See INCLUDES section + Processor: Microchip USB Microcontrollers + Hardware: The code is natively intended to be used on the following + hardware platforms: PICDEM FS USB Demo Board, + PIC18F87J50 FS USB Plug-In Module, or + Explorer 16 + PIC24 USB PIM. The firmware may be + modified for use on other USB platforms by editing the + HardwareProfile.h file. + Complier: Microchip C18, C30, C32 + Company: Microchip Technology, Inc. + + Software License Agreement: + + The software supplied herewith by Microchip Technology Incorporated + (the “Companyâ€) for its PIC® Microcontroller is intended and + supplied to you, the Company’s customer, for use solely and + exclusively on Microchip PIC Microcontroller products. The + software is owned by the Company and/or its supplier, and is + protected under applicable copyright laws. All rights are reserved. + Any use in violation of the foregoing restrictions may subject the + user to criminal sanctions under applicable laws, as well as to + civil liability for the breach of the terms and conditions of this + license. + + THIS SOFTWARE IS PROVIDED IN AN “AS IS†CONDITION. NO WARRANTIES, + WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED + TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT, + IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR + CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. + + File Description: + + Change History: + Rev Date Description + 1.0 11/19/2004 Initial release + 2.1 02/26/2007 Updated for simplicity and to use common + coding style + + Summary: + This file contains all of functions, macros, definitions, variables, + datatypes, etc. that are required for usage with the HID function + driver. This file should be included in projects that use the HID + \function driver. This file should also be included into the + usb_descriptors.c file and any other user file that requires access to the + HID interface. + + + + This file is located in the "\\\Microchip\\Include\\USB" + directory. + + Description: + USB HID Function Driver File + + This file contains all of functions, macros, definitions, variables, + datatypes, etc. that are required for usage with the HID function + driver. This file should be included in projects that use the HID + \function driver. This file should also be included into the + usb_descriptors.c file and any other user file that requires access to the + HID interface. + + This file is located in the "\\\Microchip\\Include\\USB" + directory. + + When including this file in a new project, this file can either be + referenced from the directory in which it was installed or copied + directly into the user application folder. If the first method is + chosen to keep the file located in the folder in which it is installed + then include paths need to be added so that the library and the + application both know where to reference each others files. If the + application folder is located in the same folder as the Microchip + folder (like the current demo folders), then the following include + paths need to be added to the application's project: + + ..\\..\\Microchip\\Include + . + + If a different directory structure is used, modify the paths as + required. An example using absolute paths instead of relative paths + would be the following: + + C:\\Microchip Solutions\\Microchip\\Include + + C:\\Microchip Solutions\\My Demo Application + + + Change History: + Rev Description + ---- ------------------------------------------ + 1.0 Initial release + 2.1 Updated for simplicity and to use common + coding style + 2.6 Minor changes in defintions + +*******************************************************************/ +#ifndef HID_H +#define HID_H +//DOM-IGNORE-END + +/** INCLUDES *******************************************************/ + +/** DEFINITIONS ****************************************************/ + +/* Class-Specific Requests */ +#define GET_REPORT 0x01 +#define GET_IDLE 0x02 +#define GET_PROTOCOL 0x03 +#define SET_REPORT 0x09 +#define SET_IDLE 0x0A +#define SET_PROTOCOL 0x0B + +/* Class Descriptor Types */ +#define DSC_HID 0x21 +#define DSC_RPT 0x22 +#define DSC_PHY 0x23 + +/* Protocol Selection */ +#define BOOT_PROTOCOL 0x00 +#define RPT_PROTOCOL 0x01 + +/* HID Interface Class Code */ +#define HID_INTF 0x03 + +/* HID Interface Class SubClass Codes */ +#define BOOT_INTF_SUBCLASS 0x01 + +/* HID Interface Class Protocol Codes */ +#define HID_PROTOCOL_NONE 0x00 +#define HID_PROTOCOL_KEYBOARD 0x01 +#define HID_PROTOCOL_MOUSE 0x02 + +/******************************************************************** + Function: + void USBCheckHIDRequest(void) + + Summary: + This routine handles HID specific request that happen on EP0. + This function should be called from the USBCBCheckOtherReq() call back + function whenever implementing a HID device. + + Description: + This routine handles HID specific request that happen on EP0. These + include, but are not limited to, requests for the HID report + descriptors. This function should be called from the + USBCBCheckOtherReq() call back function whenever using an HID device. + + Typical Usage: + + void USBCBCheckOtherReq(void) + { + //Since the stack didn't handle the request I need to check + // my class drivers to see if it is for them + USBCheckHIDRequest(); + } + + + PreCondition: + None + + Parameters: + None + + Return Values: + None + + Remarks: + None + + *******************************************************************/ +void USBCheckHIDRequest(void); + +/******************************************************************** + Function: + BOOL HIDTxHandleBusy(USB_HANDLE handle) + + Summary: + Retreives the status of the buffer ownership + + Description: + Retreives the status of the buffer ownership. This function will + indicate if the previous transfer is complete or not. + + This function will take the input handle (pointer to a BDT entry) and + will check the UOWN bit. If the UOWN bit is set then that indicates + that the transfer is not complete and the USB module still owns the data + memory. If the UOWN bit is clear that means that the transfer is + complete and that the CPU now owns the data memory. + + For more information about the BDT, please refer to the appropriate + datasheet for the device in use. + + Typical Usage: + + //make sure that the last transfer isn't busy by checking the handle + if(!HIDTxHandleBusy(USBInHandle)) + { + //Send the data contained in the ToSendDataBuffer[] array out on + // endpoint HID_EP + USBInHandle = HIDTxPacket(HID_EP,(BYTE*)&ToSendDataBuffer[0],sizeof(ToSendDataBuffer)); + } + + + PreCondition: + None. + + Parameters: + USB_HANDLE handle - the handle for the transfer in question. + The handle is returned by the HIDTxPacket() and HIDRxPacket() + functions. Please insure that USB_HANDLE objects are initialized + to NULL. + + Return Values: + TRUE - the HID handle is still busy + FALSE - the HID handle is not busy and is ready to send + additional data. + + Remarks: + None + + *******************************************************************/ +#define HIDTxHandleBusy(handle) USBHandleBusy(handle) + +/******************************************************************** + Function: + BOOL HIDRxHandleBusy(USB_HANDLE handle) + + Summary: + Retreives the status of the buffer ownership + + Description: + Retreives the status of the buffer ownership. This function will + indicate if the previous transfer is complete or not. + + This function will take the input handle (pointer to a BDT entry) and + will check the UOWN bit. If the UOWN bit is set then that indicates + that the transfer is not complete and the USB module still owns the data + memory. If the UOWN bit is clear that means that the transfer is + complete and that the CPU now owns the data memory. + + For more information about the BDT, please refer to the appropriate + datasheet for the device in use. + + Typical Usage: + + if(!HIDRxHandleBusy(USBOutHandle)) + { + //The data is available in the buffer that was specified when the + // HIDRxPacket() was called. + } + + + PreCondition: + None + + Parameters: + USB_HANDLE handle - the handle for the transfer in question. + The handle is returned by the HIDTxPacket() and HIDRxPacket() + functions. Please insure that USB_HANDLE objects are initialized + to NULL. + + Return Values: + TRUE - the HID handle is still busy + FALSE - the HID handle is not busy and is ready to receive + additional data. + + Remarks: + None + + *******************************************************************/ +#define HIDRxHandleBusy(handle) USBHandleBusy(handle) + +/******************************************************************** + Function: + USB_HANDLE HIDTxPacket(BYTE ep, BYTE* data, WORD len) + + Summary: + Sends the specified data out the specified endpoint + + Description: + This function sends the specified data out the specified + endpoint and returns a handle to the transfer information. + + Typical Usage: + + //make sure that the last transfer isn't busy by checking the handle + if(!HIDTxHandleBusy(USBInHandle)) + { + //Send the data contained in the ToSendDataBuffer[] array out on + // endpoint HID_EP + USBInHandle = HIDTxPacket(HID_EP,(BYTE*)&ToSendDataBuffer[0],sizeof(ToSendDataBuffer)); + } + + + PreCondition: + None + + Parameters: + BYTE ep - the endpoint you want to send the data out of + BYTE* data - pointer to the data that you wish to send + WORD len - the length of the data that you wish to send + + Return Values: + USB_HANDLE - a handle for the transfer. This information + should be kept to track the status of the transfer + + Remarks: + None + + *******************************************************************/ +#define HIDTxPacket USBTxOnePacket + +/******************************************************************** + Function: + USB_HANDLE HIDRxPacket(BYTE ep, BYTE* data, WORD len) + + Summary: + Receives the specified data out the specified endpoint + + Description: + Receives the specified data out the specified endpoint. + + Typical Usage: + + //Read 64-bytes from endpoint HID_EP, into the ReceivedDataBuffer array. + // Make sure to save the return handle so that we can check it later + // to determine when the transfer is complete. + USBOutHandle = HIDRxPacket(HID_EP,(BYTE*)&ReceivedDataBuffer,64); + + + PreCondition: + None + + Parameters: + BYTE ep - the endpoint you want to receive the data into + BYTE* data - pointer to where the data will go when it arrives + WORD len - the length of the data that you wish to receive + + Return Values: + USB_HANDLE - a handle for the transfer. This information + should be kept to track the status of the transfer + + Remarks: + None + + *******************************************************************/ +#define HIDRxPacket USBRxOnePacket + +// Section: STRUCTURES *********************************************/ + +//USB HID Descriptor header as detailed in section +//"6.2.1 HID Descriptor" of the HID class definition specification +typedef struct _USB_HID_DSC_HEADER +{ + BYTE bDescriptorType; //offset 9 + WORD wDscLength; //offset 10 +} USB_HID_DSC_HEADER; + +//USB HID Descriptor header as detailed in section +//"6.2.1 HID Descriptor" of the HID class definition specification +typedef struct _USB_HID_DSC +{ + BYTE bLength; //offset 0 + BYTE bDescriptorType; //offset 1 + WORD bcdHID; //offset 2 + BYTE bCountryCode; //offset 4 + BYTE bNumDsc; //offset 5 + + + //USB_HID_DSC_HEADER hid_dsc_header[HID_NUM_OF_DSC]; + /* HID_NUM_OF_DSC is defined in usbcfg.h */ + +} USB_HID_DSC; + +/** Section: EXTERNS ********************************************************/ +extern volatile CTRL_TRF_SETUP SetupPkt; +extern ROM BYTE configDescriptor1[]; +extern volatile BYTE CtrlTrfData[USB_EP0_BUFF_SIZE]; + +#if !defined(__USB_DESCRIPTORS_C) +extern ROM struct{BYTE report[HID_RPT01_SIZE];}hid_rpt01; +#endif + +#endif //HID_H diff --git a/software/front/US_Firmware.X/usb/usb_hal.h b/software/front/US_Firmware.X/usb/usb_hal.h new file mode 100644 index 0000000..8f012bc --- /dev/null +++ b/software/front/US_Firmware.X/usb/usb_hal.h @@ -0,0 +1,653 @@ +/****************************************************************************** + + USB Hardware Abstraction Layer (HAL) (Header File) + +Summary: + This file abstracts the hardware interface. + +Description: + This file abstracts the hardware interface. + + This file is located in the "\\\Microchip\\Include\\USB" + directory. + + When including this file in a new project, this file can either be + referenced from the directory in which it was installed or copied + directly into the user application folder. If the first method is + chosen to keep the file located in the folder in which it is installed + then include paths need to be added so that the library and the + application both know where to reference each others files. If the + application folder is located in the same folder as the Microchip + folder (like the current demo folders), then the following include + paths need to be added to the application's project: + + . + ..\\..\\MicrochipInclude + + If a different directory structure is used, modify the paths as + required. An example using absolute paths instead of relative paths + would be the following: + + C:\\Microchip Solutions\\Microchip\\Include + + C:\\Microchip Solutions\\My Demo Application +*******************************************************************************/ +//DOM-IGNORE-BEGIN +/****************************************************************************** + + File Description: + + This file defines the interface to the USB hardware abstraction layer. + + Filename: usb_hal.h + Dependancies: none + Processor: PIC18, PIC24, or PIC32 USB Microcontrollers + Hardware: The code is natively intended to be used on the following + hardware platforms: PICDEM™ FS USB Demo Board, + PIC18F87J50 FS USB Plug-In Module, or + Explorer 16 + PIC24 USB PIM. The firmware may be + modified for use on other USB platforms by editing the + HardwareProfile.h file. + Compiler: Microchip C18 (for PIC18) or C30 (for PIC24) + Company: Microchip Technology, Inc. + + Software License Agreement: + + The software supplied herewith by Microchip Technology Incorporated + (the “Company”) for its PICmicro® Microcontroller is intended and + supplied to you, the Company’s customer, for use solely and + exclusively on Microchip PICmicro Microcontroller products. The + software is owned by the Company and/or its supplier, and is + protected under applicable copyright laws. All rights are reserved. + Any use in violation of the foregoing restrictions may subject the + user to criminal sanctions under applicable laws, as well as to + civil liability for the breach of the terms and conditions of this + license. + + THIS SOFTWARE IS PROVIDED IN AN “AS IS” CONDITION. NO WARRANTIES, + WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED + TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT, + IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR + CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. + + *************************************************************************/ + +/******************************************************************** + Change History: + Rev Description + ---- ----------- + 2.6- No Change + 2.6a + + 2.7 Minor changes changes to the structure of the conditional + compilation statement ordering. + + 2.7a No Change +********************************************************************/ + +#ifndef _USB_HAL_H_ +#define _USB_HAL_H_ +//DOM-IGNORE-END + +#if defined(__18CXX) + #include "USB/usb_hal_pic18.h" +#elif defined(__C30__) || defined __XC16__ + #if defined(__dsPIC33E__) + #include "USB/usb_hal_dspic33E.h" + #elif defined(__PIC24E__) + #include "USB/usb_hal_pic24e.h" + #else + #include "USB/usb_hal_pic24.h" + #endif +#elif defined(__PIC32MX__) + #include "usb_hal_pic32.h" +#elif defined(_PIC14E) + #include "USB/usb_hal_pic16f1.h" +#else + #error "Silicon Platform not defined" +#endif + + +/********************** + Interface Routines + **********************/ + +/************************************************************************* + Function: + void USBHALSetBusAddress( BYTE addr ) + + Description: + This routine sets the address of the system on the USB + when acting as a peripheral device. + + Preconditions: + 1. USBHALInitialize must have been called to + initialize the USB HAL. + 2. Endpoint zero (0) must be configured as appropriate + by calls to USBHALSetEpConfiguration. + 3. The system must have been enumerated on the USB (as + a device). + + Parameters: + addr Desired address of this device on the USB. + + Return Values: + None + + Side Effect: + The bus address has been set. + + Remmarks: + The address is assigned by the host and is received in + a SET_ADDRESS setup request. + + *************************************************************************/ +/* + This routine is implemented as a macro to a lower-level level routine. + */ + +#define USBHALSetBusAddress OTGCORE_SetDeviceAddr + +void USBHALSetBusAddress( BYTE addr ); + + +/************************************************************************* + Function: + void USBHALControlUsbResistors( BYTE flags ); + + Description: + This routine enables or disables the USB pull-up or + pull-down resistors as requested. + + Precondition: + USBInitialize must have been called to initialize the + USB SW stack. + + Parameters: + flags - This is a bit-mapped flags value indicating + which resistors to enable or disable (see below). + + Return Values: + TRUE if successful, FALSE if not. + + Side Effects: + The resistors are enabled as requested. + + Remarks: + Used for USB peripheral control to connect to or + disconnect from the bus. Otherwise, used for OTG + SRP/HNP and host support. + + *************************************************************************/ + +/* + This routine is implemented as a macro to a lower-level level routine. + */ + #if defined(__18CXX) + void USBHALControlUsbResistors( BYTE flags ); + #else + #define USBHALControlUsbResistors OTGCORE_ControlUsbResistors + void USBHALControlUsbResistors( BYTE flags ); +#endif + +/* USBHALControlUsbResistors flags */ +#define USB_HAL_PULL_UP_D_PLUS 0x80 // Pull D+ line high +#define USB_HAL_PULL_UP_D_MINUS 0x40 // Pull D- line high +#define USB_HAL_PULL_DN_D_PLUS 0x20 // Pull D+ line low +#define USB_HAL_PULL_DN_D_MINUS 0x10 // Pull D- line low +/* + The following are defined for convenience: + */ +#define USB_HAL_DEV_CONN_FULL_SPD USB_HAL_PULL_UP_D_PLUS +#define USB_HAL_DEV_CONN_LOW_SPD USB_HAL_PULL_UP_D_MINUS +#define USB_HAL_DEV_DISCONNECT 0 + + +/* + MCHP: Define a method to check for SE0 & a way to send a reset (SE0). + */ + + +/************************************************************************* + Function: + BOOL USBHALSessionIsValid( void ) + + Description: + This routine determines if there is currently a valid + USB session or not. + + Precondition: + USBInitialize must have been called to initialize the + USB SW stack. + + Parameters: + None + + Return Values: + TRUE if the session is currently valid, FALSE if not. + + Remarks: + Only used for host and OTG support. + + *************************************************************************/ + +BOOL USBHALSessionIsValid( void ); + + +/************************************************************************* + Function: + USBHALControlBusPower + + Description: + This routine provides a bitmap of the most recent + error conditions to occur. + + Precondition: + USBInitialize must have been called to initialize the + USB SW stack. + + Parameters: + cmd - Identifies desired command (see below). + + Return Values: + TRUE if successful, FALSE if not. + + Remarks: + Only used for host and OTG support. + + *************************************************************************/ + +BOOL USBHALControlBusPower( BYTE cmd ); + +/* USBHALControlBusPower Commands */ +#define USB_VBUS_DISCHARGE 0 // Dicharge Vbus via resistor +#define USB_VBUS_CHARGE 1 // Charge Vbus via resistor +#define USB_VBUS_POWER_ON 3 // Supply power to Vbus +#define USB_VBUS_POWER_OFF 4 // Do not supply power to Vbus +/* + Note: All commands except USB_VBUS_POWER_ON imply that this device + does not actively supply power to Vbus. + */ + + +/************************************************************************* + Function: + unsigned long USBHALGetLastError( void ) + + Description: + This routine provides a bitmap of the most recent + error conditions to occur. + + Precondition: + USBInitialize must have been called to initialize the + USB SW stack. + + Parameters: + None + + Return Values: + Bitmap indicating the most recent error condition(s). + + Side Effect: + Error record is cleared. + + Remarks: + Although record of the error state is cleared, nothing + is done to fix the condition or recover from the + error. The client must take appropriate steps. + + *************************************************************************/ + +unsigned long USBHALGetLastError( void ); + +/* + USBHALGetLastError Error Bits. + */ +#define USBHAL_PID_ERR 0x00000001 // Packet ID Error +#define USBHAL_CRC5 0x00000002 // (Host) Token CRC5 check failed +#define USBHAL_HOST_EOF 0x00000002 // (Host) EOF not reached before next SOF +#define USBHAL_CRC16 0x00000004 // Data packet CRC error +#define USBHAL_DFN8 0x00000008 // Data field size not n*8 bits +#define USBHAL_BTO_ERR 0x00000010 // Bus turn-around timeout +#define USBHAL_DMA_ERR 0x00000020 // DMA error, unable to read/write memory +#define USBHAL_BTS_ERR 0x00000080 // Bit-stuffing error +#define USBHAL_XFER_ID 0x00000100 // Unable to identify transfer EP +#define USBHAL_NO_EP 0x00000200 // Invalid endpoint number +#define USBHAL_DMA_ERR2 0x00000400 // Error starting DMA transaction + + +/************************************************************************* + Function: + void USBHALHandleBusEvent ( void ) + + Description: + This routine checks the USB for any events that may + have occured and handles them appropriately. It may + be called directly to poll the USB and handle events + or it may be called in response to an interrupt. + + Precondition: + USBInitialize must have been called to initialize the + USB SW stack. + + Parameters: + None + + Return Values: + None + + Side Effects: + Depend on the event that may have occured. + + Remarks: + None + + *************************************************************************/ + +void USBHALHandleBusEvent ( void ); + + +/************************************************************************* + Function: + BOOL USBHALStallPipe( TRANSFER_FLAGS pipe ) + + Description: + This routine stalls the given endpoint. + + Preconditions: + USBHALInitialize must have been called to initialize + the USB HAL. + + Parameters: + pipe - Uses the TRANSFER_FLAGS (see USBCommon.h) format to + identify the endpoint and direction making up the + pipe to stall. + + Note: Only ep_num and direction fields are required. + + Return Values: + TRUE if able to stall endpoint, FALSE if not. + + Side Effects: + The endpoint will stall if additional data transfer is + attempted. + Given endpoint has been stalled. + + Remarks: + Starting another data transfer automatically + "un-stalls" the endpoint. + + *************************************************************************/ +/* + Note: This function is implemented as a macro, calling directly into + an internal HAL routine. + */ + +#define USBHALStallPipe OTGCORE_StallPipe + +BOOL USBHALStallPipe( TRANSFER_FLAGS pipe ); + + +/****************************************************************************** + Function: + BOOL USBHALUnstallPipe( TRANSFER_FLAGS pipe ) + + Description: + This routine clears the stall condition for the given pipe. + + PreCondition: + Assumes OTGCORE_DeviceEnable has been called and + OTGCORE_StallPipe has been called on the given pipe. + + Parameters: + pipe - Uses the TRANSFER_FLAGS (see USBCommon.h) format to + identify the endpoint and direction making up the + pipe to unstall. + + Return Values: + TRUE if able to stall the pipe, FALSE if not. + + Side Effects: + The BSTALL and UOWN bits (and all other control bits) in + the BDT for the given pipe will be cleared. + + Remarks: + None + + *****************************************************************************/ +/* + Note: This function is implemented as a macro, calling directly into + an internal HAL routine. + */ + +#define USBHALUnstallPipe OTGCORE_UnstallPipe + +BOOL USBHALUnstallPipe( TRANSFER_FLAGS pipe ); + + +/************************************************************************** + Function: + USBHALGetStalledEndpoints + + Description: + This function returns a 16-bit bitmapped value with a + bit set in the position of any endpoint that is stalled + (i.e. if endpoint 0 is stalled then bit 0 is set, if + endpoint 1 is stalled then bit 1 is set, etc.). + + Preconditions: + USBHALInitialize must have been called to initialize + the USB HAL. + + Parameters: + None + + Return Values: + Bitmap of the currently stalled endpoints (see overview). + + Remarks: + None + *************************************************************************/ + +/* + Note: This function is implemented as a macro, calling directly into + a HAL routine. + */ + +#define USBHALGetStalledEndpoints OTGCORE_GetStalledEndpoints + +UINT16 USBHALGetStalledEndpoints ( void ); + + +/****************************************************************************** + Function: + BOOL USBHALFlushPipe( TRANSFER_FLAGS pipe ) + + Description: + This routine clears any pending transfers on the given + pipe. + + Preconditions: + USBHALInitialize must have been called to initialize the + USB HAL. + + The caller must ensure that there is no possible way for + hardware to be currently accessing the pipe (see notes). + + Parameters: + pipe - Uses the TRANSFER_FLAGS (see USBCommon.h) format to + identify the endpoint and direction making up the + pipe to flush. + + Return Values: + TRUE if successful, FALSE if not. + + Side Effects: + Transfer data for this pipe has been zero'd out. + + Remarks: + This routine ignores the normal HW protocol for ownership + of the pipe data and flushes the pipe, even if it is in + process. Thus, the caller must ensure that data transfer + cannot be in process. This situation occurs when a + transfer has been terminated early by the host. + *****************************************************************************/ + +BOOL USBHALFlushPipe( TRANSFER_FLAGS pipe ); + + +/************************************************************************** + Function: + USBHALTransferData + + Description: + This routine prepares to transfer data on the USB. + If the system is in device mode, the actual transfer + will not occur until the host peforms an OUT request + to the given endpoint. If the system is in host mode, + the transfer will not start until the token has been + sent on the bus. + + Preconditions: + 1. USBHALInitialize must have been called to + initialize the USB HAL. + 2. The endpoint through which the data will be + transferred must be configured as appropriate by a + call to USBHALSetEpConfiguration. + 3. The bus must have been enumerated (either as a host + or device). Except for EP0 transfers. + + Parameters: + flags - Flags consists of the endpoint number OR'd + with one or more flags indicating transfer + direction and such (see "Data Transfer + Macros" in USBCommon.h): + + 7 6 5 4 3 2 1 0 - Description + | | | | \_____/ + | | | | +----- Endpoint Number + | | | +---------- Short or zero-size pkt + | | +------------ Data Toggle 0/1 + | +-------------- Force Data Toggle + +---------------- 1=Transmit/0=Receive + + buffer Address of the buffer to receive data. + + size Number of bytes of data to transfer. + + Return Values: + TRUE if the HAL was able to successfully start the + data transfer, FALSE if not. + + Side Effects: + The HAL has prepared to transfer the data on the USB. + + Ramarks: + The HAL will continue the data transfer, keeping track + of the buffer address, data remaining, and ping-pong + buffer details internally when USBHALHandleBusEvent is + called (either polled or in response to an interrupt). + The caller will receive notification that the transfer + has completed when the EVT_XFER event is passed into + the USBHALBusEventCallout call-out function. + + *************************************************************************/ + +BOOL USBHALTransferData ( TRANSFER_FLAGS flags, + void *buffer, + unsigned int size ); + + +/************************************************************************* + Function: + USBHALSetEpConfiguration + + Description: + This routine allows the caller to configure various + options (see "Flags for USBHALSetEpConfiguration", + below) and set the behavior for the given endpoint. + + Precondition: + USBHALInitialize has been called. + + Parameters: + ep_num - Number of endpoint to configur, Must be + (ep_num >=0) && (ep_num <= USB_DEV_HIGHEST_EP_NUMBER) + max_pkt_size Size of largest packet this enpoint can + transfer. + + flags - Configuration flags (see below) + + Return Values: + TRUE if successful, FALSE if not. + + Side Effects: + The endpoint has been configured as desired. + + Remarks: + The base address and size of the buffer is not set by + this routine. Those features of an endpoint are + dynamically managed by the USBHALTransferData routine. + An endpoint can be "de-configured" by setting its max + packet size to 0. When doing this, you should also + set all flags to 0. + *************************************************************************/ + +BOOL USBHALSetEpConfiguration ( BYTE ep_num, UINT16 max_pkt_size, UINT16 flags ); + +/* Flags for USBHALSetEpConfiguration */ +#if defined(__18CXX) + #define USB_HAL_TRANSMIT 0x0400 // Enable EP for transmitting data + #define USB_HAL_RECEIVE 0x0200 // Enable EP for receiving data + #define USB_HAL_HANDSHAKE 0x1000 // Enable EP to give ACK/NACK (non isoch) + + #define USB_HAL_NO_INC 0x0010 // Use for DMA to another device FIFO + #define USB_HAL_HW_KEEPS 0x0020 // Cause HW to keep EP +#else + #define USB_HAL_TRANSMIT 0x0400 // Enable EP for transmitting data + #define USB_HAL_RECEIVE 0x0800 // Enable EP for receiving data + #define USB_HAL_HANDSHAKE 0x0100 // Enable EP to give ACK/NACK (non isoch) + + /* Does not work, Fix this if needed. 3/1/07 - Bud + #define USB_HAL_NO_INC 0x0010 // Use for DMA to another device FIFO + #define USB_HAL_HW_KEEPS 0x0020 // Cause HW to keep EP + */ + #define USB_HAL_ALLOW_HUB 0x8000 // (host only) Enable low-spd hub support + #define USB_HAL_NO_RETRY 0x4000 // (host only) disable auto-retry on NACK +#endif + + +/************************************************************************* + Function: + USBHALInitialize + + Description: + This call performs the basic initialization of the USB + HAL. This routine must be called before any of the + other HAL interface routines are called. + + Precondition: + The system has been initialized. + + Paramters: + flags - Initialization flags + + Return Values: + TRUE if successful, FALSE if not. + + Side Effects: + The USB HAL SW stack was initialized. + + Remarks: + This routine can be called to reset the controller. + + *************************************************************************/ + +BOOL USBHALInitialize ( unsigned long flags ); + +#endif // _USB_HAL_H_ +/************************************************************************* + * EOF + */ + diff --git a/software/front/US_Firmware.X/usb/usb_hal_pic24.c b/software/front/US_Firmware.X/usb/usb_hal_pic24.c new file mode 100644 index 0000000..467b7c5 --- /dev/null +++ b/software/front/US_Firmware.X/usb/usb_hal_pic24.c @@ -0,0 +1,183 @@ +/****************************************************************************** + + USB Hardware Abstraction Layer (HAL) + +Summary: + This file abstracts the hardware interface. The USB stack firmware can be + compiled to work on different USB microcontrollers, such as PIC18 and PIC24. + The USB related special function registers and bit names are generally very + similar between the device families, but small differences in naming exist. + +Description: + This file abstracts the hardware interface. The USB stack firmware can be + compiled to work on different USB microcontrollers, such as PIC18 and PIC24. + The USB related special function registers and bit names are generally very + similar between the device families, but small differences in naming exist. + + In order to make the same set of firmware work accross the device families, + when modifying SFR contents, a slightly abstracted name is used, which is + then "mapped" to the appropriate real name in the usb_hal_picxx.h header. + + Make sure to include the correct version of the usb_hal_picxx.h file for + the microcontroller family which will be used. + + When including this file in a new project, this file can either be + referenced from the directory in which it was installed or copied + directly into the user application folder. If the first method is + chosen to keep the file located in the folder in which it is installed + then include paths need to be added so that the library and the + application both know where to reference each others files. If the + application folder is located in the same folder as the Microchip + folder (like the current demo folders), then the following include + paths need to be added to the application's project: + + . + + ..\\..\\Microchip\\Include + + If a different directory structure is used, modify the paths as + required. An example using absolute paths instead of relative paths + would be the following: + + C:\\Microchip Solutions\\Microchip\\Include + + C:\\Microchip Solutions\\My Demo Application + + +*******************************************************************************/ +//DOM-IGNORE-BEGIN +/****************************************************************************** + + File Description: + + This file defines the interface to the USB hardware abstraction layer. + + Filename: usb_hal_pic24.c + Dependancies: none + Processor: PIC24F USB Microcontrollers + Hardware: PIC24F USB Microcontrollers + Compiler: Microchip C30 (for PIC24) + Company: Microchip Technology, Inc. + + Software License Agreement: + + The software supplied herewith by Microchip Technology Incorporated + (the "Company") for its PICmicro(R) Microcontroller is intended and + supplied to you, the Company's customer, for use solely and + exclusively on Microchip PICmicro Microcontroller products. The + software is owned by the Company and/or its supplier, and is + protected under applicable copyright laws. All rights are reserved. + Any use in violation of the foregoing restrictions may subject the + user to criminal sanctions under applicable laws, as well as to + civil liability for the breach of the terms and conditions of this + license. + + THIS SOFTWARE IS PROVIDED IN AN "AS IS" CONDITION. NO WARRANTIES, + WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED + TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT, + IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR + CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. + + *************************************************************************/ + +//DOM-IGNORE-BEGIN +/******************************************************************** + Change History: + Rev Description + ---- ----------- + 2.7 Created USBSleepOnSuspend() function to simply process of putting + the PIC24F device in the correct state before issuing the sleep + instruction and returning the device to the correct state after + exiting sleep. +********************************************************************/ +//DOM-IGNORE-END + +#ifndef USB_HAL_PIC24F_C +#define USB_HAL_PIC24F_C + +#include "usb.h" + +//Only include the source for this file if you are using C30. This code +// applies only to PIC24 parts. +#if defined(__C30__) || defined __XC16__ + +/******************************************************************** +Function: + BOOL USBSleepOnSuspend(void) + +Summary: + Places the PIC24F core into sleep and sets up the USB module + to wake up the device on USB activity. + +PreCondition: + IPL (in the SR register) must be non-zero. + +Parameters: + None + +Return Values: + TRUE - if entered sleep successfully + FALSE - if there was an error entering sleep + +Remarks: + Please note that before calling this function that it is the + responsibility of the application to place all of the other + peripherals or board features into a lower power state if + required. + +*******************************************************************/ +BOOL USBSleepOnSuspend(void) +{ + unsigned int U1EIE_save, U1IE_save, U1OTGIE_save; + unsigned char USB1IE_save; + + #if defined(USB_POLLING) + //If IPL is equal to 0 then there is no way for the USB module to + // generate an interrupt to wake up the device. + if(_IPL == 0) + { + return FALSE; + } + + //Set the interrupt priority to a level that will wake up the part (>0) + // but will not cause a interrupt vector jump (USB1IP<=IPL) + _USB1IP = 1; + #endif + + //Save the old interrupt and CPU settings + U1EIE_save = U1EIE; + U1IE_save = U1IE; + U1OTGIE_save = U1OTGIE; + USB1IE_save = IEC5bits.USB1IE; + + //Disable all USB interrupts + U1EIE = 0; + U1IE = 0; + U1OTGIE = 0; + + //Enable the interrupt + IFS5bits.USB1IF = 0; + U1OTGIEbits.ACTVIE = 1; + USBClearInterruptFlag(USBActivityIFReg,USBActivityIFBitNum); + IEC5bits.USB1IE = 1; + + Sleep(); + + #if defined(USB_POLLING) + //Disable the interrupt + _USB1IP = 0; + #endif + + //restore the previous interrupt settings + IEC5bits.USB1IE = USB1IE_save; + U1EIE = U1EIE_save; + U1IE = U1IE_save; + U1OTGIE = U1OTGIE_save; + + return TRUE; +} + +#endif //__C30__ + +#endif //USB_HAL_PIC24F_C diff --git a/software/front/US_Firmware.X/usb/usb_hal_pic24f.h b/software/front/US_Firmware.X/usb/usb_hal_pic24f.h new file mode 100644 index 0000000..1c41ebe --- /dev/null +++ b/software/front/US_Firmware.X/usb/usb_hal_pic24f.h @@ -0,0 +1,579 @@ +/****************************************************************************** + + USB Hardware Abstraction Layer (HAL) + +Summary: + This file abstracts the hardware interface. The USB stack firmware can be + compiled to work on different USB microcontrollers, such as PIC18 and PIC24. + The USB related special function registers and bit names are generally very + similar between the device families, but small differences in naming exist. + +Description: + This file abstracts the hardware interface. The USB stack firmware can be + compiled to work on different USB microcontrollers, such as PIC18 and PIC24. + The USB related special function registers and bit names are generally very + similar between the device families, but small differences in naming exist. + + In order to make the same set of firmware work accross the device families, + when modifying SFR contents, a slightly abstracted name is used, which is + then "mapped" to the appropriate real name in the usb_hal_picxx.h header. + + Make sure to include the correct version of the usb_hal_picxx.h file for + the microcontroller family which will be used. + + When including this file in a new project, this file can either be + referenced from the directory in which it was installed or copied + directly into the user application folder. If the first method is + chosen to keep the file located in the folder in which it is installed + then include paths need to be added so that the library and the + application both know where to reference each others files. If the + application folder is located in the same folder as the Microchip + folder (like the current demo folders), then the following include + paths need to be added to the application's project: + + . + + ..\\..\\Microchip\\Include + + If a different directory structure is used, modify the paths as + required. An example using absolute paths instead of relative paths + would be the following: + + C:\\Microchip Solutions\\Microchip\\Include + + C:\\Microchip Solutions\\My Demo Application + + +*******************************************************************************/ +//DOM-IGNORE-BEGIN +/****************************************************************************** + + File Description: + + This file defines the interface to the USB hardware abstraction layer. + + Filename: usb_hal_pic24.h + Dependancies: none + Processor: PIC24F USB Microcontrollers + Hardware: PIC24F USB Microcontrollers + Compiler: Microchip C30 (for PIC24) + Company: Microchip Technology, Inc. + + Software License Agreement: + + The software supplied herewith by Microchip Technology Incorporated + (the "Company") for its PICmicro(R) Microcontroller is intended and + supplied to you, the Company's customer, for use solely and + exclusively on Microchip PICmicro Microcontroller products. The + software is owned by the Company and/or its supplier, and is + protected under applicable copyright laws. All rights are reserved. + Any use in violation of the foregoing restrictions may subject the + user to criminal sanctions under applicable laws, as well as to + civil liability for the breach of the terms and conditions of this + license. + + THIS SOFTWARE IS PROVIDED IN AN "AS IS" CONDITION. NO WARRANTIES, + WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED + TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT, + IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR + CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. + + *************************************************************************/ + +//DOM-IGNORE-BEGIN +/******************************************************************** + Change History: + Rev Description + ---- ----------- + 2.6 Changed the inplementation of the interrupt clearing macro + to be more efficient. + + 2.6a Added DisableNonZeroEndpoints() function + + 2.7 Addition of ConvertToVirtualAddress() function for + compatibility with PIC32. + + Added prototype for USBSleepOnSuspend() function. This + function shows how to put the PIC24F to sleep while the USB + module is in suspend and have the USB module wake up the device + on activity on the bus. + + 2.7a No change + + 2.8 Added USTAT_FIELDS typedef and associated macros. +********************************************************************/ +//DOM-IGNORE-END + +#ifndef USB_HAL_PIC24F_H +#define USB_HAL_PIC24F_H + +/*****************************************************************************/ +/****** include files ********************************************************/ +/*****************************************************************************/ + +#include "Compiler.h" +#include "usb_config.h" + +/*****************************************************************************/ +/****** Constant definitions *************************************************/ +/*****************************************************************************/ + +//----- USBEnableEndpoint() input defintions ---------------------------------- +#define USB_HANDSHAKE_ENABLED 0x01 +#define USB_HANDSHAKE_DISABLED 0x00 + +#define USB_OUT_ENABLED 0x08 +#define USB_OUT_DISABLED 0x00 + +#define USB_IN_ENABLED 0x04 +#define USB_IN_DISABLED 0x00 + +#define USB_ALLOW_SETUP 0x00 +#define USB_DISALLOW_SETUP 0x10 + +#define USB_STALL_ENDPOINT 0x02 + +//----- usb_config.h input defintions ----------------------------------------- +#define USB_PULLUP_ENABLE 0x00 +//#define USB_PULLUP_DISABLE 0x00 + +#define USB_INTERNAL_TRANSCEIVER 0x00 +#define USB_EXTERNAL_TRANSCEIVER 0x01 + +#define USB_FULL_SPEED 0x04 +//USB_LOW_SPEED not currently supported in PIC24F USB products + +#define USB_OTG_ENABLE 0x04 + +//----- Interrupt Flag definitions -------------------------------------------- +#define USBTransactionCompleteIE U1IEbits.TRNIE +#define USBTransactionCompleteIF U1IRbits.TRNIF +#define USBTransactionCompleteIFReg U1IR +#define USBTransactionCompleteIFBitNum 3 + +#define USBResetIE U1IEbits.URSTIE +#define USBResetIF U1IRbits.URSTIF +#define USBResetIFReg U1IR +#define USBResetIFBitNum 0 + +#define USBIdleIE U1IEbits.IDLEIE +#define USBIdleIF U1IRbits.IDLEIF +#define USBIdleIFReg U1IR +#define USBIdleIFBitNum 4 + +#define USBActivityIE U1OTGIEbits.ACTVIE +#define USBActivityIF U1OTGIRbits.ACTVIF +#define USBActivityIFReg U1OTGIR +#define USBActivityIFBitNum 4 + +#define USBSOFIE U1IEbits.SOFIE +#define USBSOFIF U1IRbits.SOFIF +#define USBSOFIFReg U1IR +#define USBSOFIFBitNum 2 + +#define USBStallIE U1IEbits.STALLIE +#define USBStallIF U1IRbits.STALLIF +#define USBStallIFReg U1IR +#define USBStallIFBitNum 7 + +#define USBErrorIE U1IEbits.UERRIE +#define USBErrorIF U1IRbits.UERRIF +#define USBErrorIFReg U1IR +#define USBErrorIFBitNum 1 + +#define USBT1MSECIE U1OTGIEbits.T1MSECIE +#define USBT1MSECIF U1OTGIRbits.T1MSECIF +#define USBT1MSECIFReg U1OTGIR +#define USBT1MSECIFBitNum 6 + +#define USBIDIE U1OTGIEbits.IDIE +#define USBIDIF U1OTGIRbits.IDIF +#define USBIDIFReg U1OTGIR +#define USBIDIFBitNum 7 + +//----- Event call back defintions -------------------------------------------- +#if defined(USB_DISABLE_SOF_HANDLER) + #define USB_SOF_INTERRUPT 0x00 +#else + #define USB_SOF_INTERRUPT 0x04 +#endif +#if defined(USB_DISABLE_ERROR_HANDLER) + #define USB_ERROR_INTERRUPT 0x02 +#else + #define USB_ERROR_INTERRUPT 0x02 +#endif + +//----- USB module control bits ----------------------------------------------- +#define USBPingPongBufferReset U1CONbits.PPBRST +#define USBSE0Event U1CONbits.SE0 +#define USBSuspendControl U1PWRCbits.USUSPEND +#define USBPacketDisable U1CONbits.PKTDIS +#define USBResumeControl U1CONbits.RESUME + +//----- BDnSTAT bit definitions ----------------------------------------------- +#define _BSTALL 0x04 //Buffer Stall enable +#define _DTSEN 0x08 //Data Toggle Synch enable +#define _DAT0 0x00 //DATA0 packet expected next +#define _DAT1 0x40 //DATA1 packet expected next +#define _DTSMASK 0x40 //DTS Mask +#define _USIE 0x80 //SIE owns buffer +#define _UCPU 0x00 //CPU owns buffer +#define _STAT_MASK 0xFC + +//----- USTAT bit definitions ------------------------------------------------- +#define USTAT_EP0_PP_MASK ~0x04 +#define USTAT_EP_MASK 0xFC +#define USTAT_EP0_OUT 0x00 +#define USTAT_EP0_OUT_EVEN 0x00 +#define USTAT_EP0_OUT_ODD 0x04 +#define USTAT_EP0_IN 0x08 +#define USTAT_EP0_IN_EVEN 0x08 +#define USTAT_EP0_IN_ODD 0x0C +#define ENDPOINT_MASK 0b11110000 + +//----- U1OTGCON bit definitions ---------------------------------------------- +#define USB_OTG_DPLUS_ENABLE 0x80 + +//----- U1EP bit definitions -------------------------------------------------- +#define UEP_STALL 0x0002 +// Cfg Control pipe for this ep +#define EP_CTRL 0x0C + + +#define BDT_BASE_ADDR_TAG __attribute__ ((aligned (512))) +#define CTRL_TRF_SETUP_ADDR_TAG +#define CTRL_TRF_DATA_ADDR_TAG + +//----- Depricated defintions - will be removed at some point of time---------- +//--------- Depricated in v2.2 +#define _LS 0x00 // Use Low-Speed USB Mode +#define _FS 0x00 // Use Full-Speed USB Mode +#define _TRINT 0x00 // Use internal transceiver +#define _TREXT 0x00 // Use external transceiver +#define _PUEN 0x00 // Use internal pull-up resistor +#define _OEMON 0x00 // Use SIE output indicator + +/*****************************************************************************/ +/****** Type definitions *****************************************************/ +/*****************************************************************************/ + +// Buffer Descriptor Status Register layout. +typedef union _BD_STAT +{ + struct{ + unsigned :2; //Byte count + unsigned BSTALL :1; //Buffer Stall Enable + unsigned DTSEN :1; //Data Toggle Synch Enable + unsigned :2; //Reserved - write as 00 + unsigned DTS :1; //Data Toggle Synch Value + unsigned UOWN :1; //USB Ownership + }; + struct{ + unsigned :2; + unsigned PID0 :1; + unsigned PID1 :1; + unsigned PID2 :1; + unsigned PID3 :1; + }; + struct{ + unsigned :2; + unsigned PID :4; // Packet Identifier + }; + BYTE Val; +} BD_STAT; //Buffer Descriptor Status Register + +// BDT Entry Layout +typedef union __BDT +{ + union + { + struct + { + BYTE CNT __attribute__ ((packed)); + BD_STAT STAT __attribute__ ((packed)); + }; + struct + { + WORD count:10; //test + BYTE :6; + WORD ADR; //Buffer Address + }; + }; + DWORD Val; + WORD v[2]; +} BDT_ENTRY; + +// USTAT Register Layout +typedef union __USTAT +{ + struct + { + unsigned char filler1 :2; + unsigned char ping_pong :1; + unsigned char direction :1; + unsigned char endpoint_number :4; + }; + BYTE Val; +} USTAT_FIELDS; + +//Macros for fetching parameters from a USTAT_FIELDS variable. +#define USBHALGetLastEndpoint(stat) stat.endpoint_number +#define USBHALGetLastDirection(stat) stat.direction +#define USBHALGetLastPingPong(stat) stat.ping_pong + + +typedef union _POINTER +{ + struct + { + BYTE bLow; + BYTE bHigh; + //byte bUpper; + }; + WORD _word; // bLow & bHigh + + //pFunc _pFunc; // Usage: ptr.pFunc(); Init: ptr.pFunc = &; + + BYTE* bRam; // Ram byte pointer: 2 bytes pointer pointing + // to 1 byte of data + WORD* wRam; // Ram word poitner: 2 bytes poitner pointing + // to 2 bytes of data + + ROM BYTE* bRom; // Size depends on compiler setting + ROM WORD* wRom; + //rom near byte* nbRom; // Near = 2 bytes pointer + //rom near word* nwRom; + //rom far byte* fbRom; // Far = 3 bytes pointer + //rom far word* fwRom; +} POINTER; + +/*****************************************************************************/ +/****** Function prototypes and macro functions ******************************/ +/*****************************************************************************/ + +#define ConvertToPhysicalAddress(a) ((WORD)(a)) +#define ConvertToVirtualAddress(a) ((void *)(a)) +#define USBClearUSBInterrupt() IFS5bits.USB1IF = 0; +#if defined(USB_INTERRUPT) + #define USBMaskInterrupts() {IEC5bits.USB1IE = 0;} + #define USBUnmaskInterrupts() {IEC5bits.USB1IE = 1;} +#else + #define USBMaskInterrupts() + #define USBUnmaskInterrupts() +#endif + +//STALLIE, IDLEIE, TRNIE, and URSTIE are all enabled by default and are required +#if defined(USB_INTERRUPT) + #define USBEnableInterrupts() {IEC5bits.USB1IE=1;} +#else + #define USBEnableInterrupts() +#endif + +#define USBDisableInterrupts() {IEC5bits.USB1IE=0;} +#define USBInterruptFlag IFS5bits.USB1IF + + + +#if (USB_PULLUP_OPTION == USB_PULLUP_ENABLE) || !defined(USB_PULLUP_OPTION) + #define PullUpConfiguration() U1OTGCONbits.OTGEN = 0; +#else + #define PullUpConfiguration() U1OTGCONbits.OTGEN = 1; U1OTGCON &= 0xFF0F; +#endif + + #define SetConfigurationOptions() {\ + U1CNFG1 = USB_PING_PONG_MODE;\ + U1CNFG2 = USB_TRANSCEIVER_OPTION;\ + PullUpConfiguration();\ + U1EIE = 0x9F;\ + U1IE = 0x99 | USB_SOF_INTERRUPT | USB_ERROR_INTERRUPT;\ + } + + +/******************************************************************** +Function: + BOOL USBSleepOnSuspend(void) + +Summary: + Places the PIC24F core into sleep and sets up the USB module + to wake up the device on USB activity. + +PreCondition: + IPL (in the SR register) must be non-zero. + +Parameters: + None + +Return Values: + TRUE - if entered sleep successfully + FALSE - if there was an error entering sleep + +Remarks: + Please note that before calling this function that it is the + responsibility of the application to place all of the other + peripherals or board features into a lower power state if + required. + +*******************************************************************/ +BOOL USBSleepOnSuspend(void); + +/**************************************************************** + Function: + void USBPowerModule(void) + + Description: + This macro is used to power up the USB module if required
+ PIC18: defines as nothing
+ PIC24: defines as U1PWRCbits.USBPWR = 1;
+ + Parameters: + None + + Return Values: + None + + Remarks: + None + + ****************************************************************/ +#define USBPowerModule() U1PWRCbits.USBPWR = 1; + +/**************************************************************** + Function: + void USBModuleDisable(void) + + Description: + This macro is used to disable the USB module + + Parameters: + None + + Return Values: + None + + Remarks: + None + + ****************************************************************/ +#define USBModuleDisable() {\ + U1CON = 0;\ + U1IE = 0;\ + U1OTGIE = 0;\ + U1PWRCbits.USBPWR = 1;\ + USBDeviceState = DETACHED_STATE;\ +} + +/**************************************************************** + Function: + USBSetBDTAddress(addr) + + Description: + This macro is used to power up the USB module if required + + Parameters: + None + + Return Values: + None + + Remarks: + None + + ****************************************************************/ +#define USBSetBDTAddress(addr) U1BDTP1 = (((unsigned int)addr)/256); + +/**************************************************************** + Function: + void USBClearInterruptRegister(int register) + + Description: + Clears all of the interrupts in the requested register + + Parameters: + register - the regsister that needs to be cleared. + + Return Values: + None + + Remarks: + Note that on these devices to clear an interrupt you must + write a '1' to the interrupt location. + + ****************************************************************/ +#define USBClearInterruptRegister(reg) reg = 0xFFFF; + +/******************************************************************** + Function: + void USBClearInterruptFlag(register, BYTE if_flag_offset) + + Summary: + Clears the specified USB interrupt flag. + + PreCondition: + None + + Parameters: + register - the register mnemonic for the register holding the interrupt + flag to be cleared + BYTE if_flag_offset - the bit position offset (for the interrupt flag to + clear) from the "right of the register" + + Return Values: + None + + Remarks: + Individual USB interrupt flag bits are cleared by writing '1' to the + bit, in a word write operation. + + *******************************************************************/ +#define USBClearInterruptFlag(reg_name, if_flag_offset) (reg_name = (1 << if_flag_offset)) + +/******************************************************************** + Function: + void DisableNonZeroEndpoints(UINT8 last_ep_num) + + Summary: + Clears the control registers for the specified non-zero endpoints + + PreCondition: + None + + Parameters: + UINT8 last_ep_num - the last endpoint number to clear. This + number should include all endpoints used in any configuration. + + Return Values: + None + + Remarks: + None + + *******************************************************************/ +#define DisableNonZeroEndpoints(last_ep_num) memset((void*)&U1EP1,0x00,(last_ep_num * 2)); + + +/*****************************************************************************/ +/****** Compiler checks ******************************************************/ +/*****************************************************************************/ + +//Definitions for the BDT +#ifndef USB_PING_PONG_MODE + #error "No ping pong mode defined." +#endif + +/*****************************************************************************/ +/****** Extern variable definitions ******************************************/ +/*****************************************************************************/ + +#if defined(USB_SUPPORT_DEVICE) | defined(USB_SUPPORT_OTG) + #if !defined(USBDEVICE_C) + //extern USB_VOLATILE USB_DEVICE_STATE USBDeviceState; + extern USB_VOLATILE BYTE USBActiveConfiguration; + extern USB_VOLATILE IN_PIPE inPipes[1]; + extern USB_VOLATILE OUT_PIPE outPipes[1]; + #endif + extern volatile BDT_ENTRY* pBDTEntryOut[USB_MAX_EP_NUMBER+1]; + extern volatile BDT_ENTRY* pBDTEntryIn[USB_MAX_EP_NUMBER+1]; +#endif + +#endif //USB_HAL_PIC24F_H diff --git a/software/front/US_Firmware.X/usb/usb_hal_pic32.h b/software/front/US_Firmware.X/usb/usb_hal_pic32.h new file mode 100644 index 0000000..d475576 --- /dev/null +++ b/software/front/US_Firmware.X/usb/usb_hal_pic32.h @@ -0,0 +1,506 @@ +/****************************************************************************** + + USB Hardware Abstraction Layer (HAL) (Header File) + +Summary: + This file abstracts the hardware interface. The USB stack firmware can be + compiled to work on different USB microcontrollers, such as PIC18 and PIC24. + The USB related special function registers and bit names are generally very + similar between the device families, but small differences in naming exist. + +Description: + This file abstracts the hardware interface. The USB stack firmware can be + compiled to work on different USB microcontrollers, such as PIC18 and PIC24. + The USB related special function registers and bit names are generally very + similar between the device families, but small differences in naming exist. + + In order to make the same set of firmware work accross the device families, + when modifying SFR contents, a slightly abstracted name is used, which is + then "mapped" to the appropriate real name in the usb_hal_picxx.h header. + + Make sure to include the correct version of the usb_hal_picxx.h file for + the microcontroller family which will be used. + + This file is located in the "\\\Microchip\\Include\\USB" + directory. + + When including this file in a new project, this file can either be + referenced from the directory in which it was installed or copied + directly into the user application folder. If the first method is + chosen to keep the file located in the folder in which it is installed + then include paths need to be added so that the library and the + application both know where to reference each others files. If the + application folder is located in the same folder as the Microchip + folder (like the current demo folders), then the following include + paths need to be added to the application's project: + + . + + ..\\..\\Microchip\\Include + + If a different directory structure is used, modify the paths as + required. An example using absolute paths instead of relative paths + would be the following: + + C:\\Microchip Solutions\\Microchip\\Include + + C:\\Microchip Solutions\\My Demo Application + + +*******************************************************************************/ +//DOM-IGNORE-BEGIN +/****************************************************************************** + + File Description: + + This file defines the interface to the USB hardware abstraction layer. + + Filename: usb_hal.h + Dependancies: none + Processor: PIC18, PIC24, or PIC32 USB Microcontrollers + Hardware: The code is natively intended to be used on the following + hardware platforms: PICDEM™ FS USB Demo Board, + PIC18F87J50 FS USB Plug-In Module, or + Explorer 16 + PIC24 USB PIM. The firmware may be + modified for use on other USB platforms by editing the + HardwareProfile.h file. + Compiler: Microchip C18 (for PIC18) or C30 (for PIC24) + Company: Microchip Technology, Inc. + + Software License Agreement: + + The software supplied herewith by Microchip Technology Incorporated + (the “Company”) for its PICmicro® Microcontroller is intended and + supplied to you, the Company’s customer, for use solely and + exclusively on Microchip PICmicro Microcontroller products. The + software is owned by the Company and/or its supplier, and is + protected under applicable copyright laws. All rights are reserved. + Any use in violation of the foregoing restrictions may subject the + user to criminal sanctions under applicable laws, as well as to + civil liability for the breach of the terms and conditions of this + license. + + THIS SOFTWARE IS PROVIDED IN AN “AS IS” CONDITION. NO WARRANTIES, + WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED + TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT, + IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR + CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. + + Change History: + Rev Description + ---- ----------- + 2.6 Changed the inplementation of the interrupt clearing macro + to be more efficient. + + 2.6a Added DisableNonZeroEndpoints() function + + 2.7 Changed the definition of USB_PULLUP_ENABLE and USB_PULLUP_DISABLE + to be more useful. + + Added CovertToVirtualAddress() function for compatibility with PIC32. + + Added USBDisableInterrupts() function that disables the USB + interrupts on the initialization function. This is required if + running a dual role application where the host uses interrupts + and the device mode runs polling mode. In this case the host + doesn't disable the interrupts so the first interrupt caused by + the USB device will incorrectly vector to the host interrupt + interrupt handler. + + Modified the SetConfigurationOptions() function to explicitly + reconfigure the pull-up/pull-down settings for the D+/D- pins + in case the host leaves the pull-downs enabled. + + 2.7a Fixed USBSetBDTAddress() macro, so that it correctly loads the entire + U1BDTPx register set, enabling the BDT to be anywhere in RAM. Previous + implementation wouldn't work on a large RAM device if the linker + decided to place the BDT[] array at an address > 64kB + + 2.8 Added USTAT_FIELDS typedef and associated macros. + + *************************************************************************/ + +#if !defined(USB_HAL_PIC32_H) +#define USB_HAL_PIC32_H + +#include "Compiler.h" +#include "usb_config.h" + +#if (USB_PING_PONG_MODE != USB_PING_PONG__FULL_PING_PONG) + #error "PIC32 only supports full ping pong mode. A different mode other than full ping pong is selected in the usb_config.h file." +#endif + +#define USBSetBDTAddress(addr) {U1BDTP3 = (((DWORD)KVA_TO_PA(addr)) >> 24); U1BDTP2 = (((DWORD)KVA_TO_PA(addr)) >> 16); U1BDTP1 = (((DWORD)KVA_TO_PA(addr)) >> 8);} +#define USBPowerModule() U1PWRCbits.USBPWR = 1; +#define USBPingPongBufferReset U1CONbits.PPBRST + +#define USBTransactionCompleteIE U1IEbits.TRNIE +#define USBTransactionCompleteIF U1IRbits.TRNIF +#define USBTransactionCompleteIFReg U1IR +#define USBTransactionCompleteIFBitNum 3 + +#define USBResetIE U1IEbits.URSTIE +#define USBResetIF U1IRbits.URSTIF +#define USBResetIFReg U1IR +#define USBResetIFBitNum 0 + +#define USBIdleIE U1IEbits.IDLEIE +#define USBIdleIF U1IRbits.IDLEIF +#define USBIdleIFReg U1IR +#define USBIdleIFBitNum 4 + +#define USBActivityIE U1OTGIEbits.ACTVIE +#define USBActivityIF U1OTGIRbits.ACTVIF +#define USBActivityIFReg U1OTGIR +#define USBActivityIFBitNum 4 + +#define USBSOFIE U1IEbits.SOFIE +#define USBSOFIF U1IRbits.SOFIF +#define USBSOFIFReg U1IR +#define USBSOFIFBitNum 2 + +#define USBStallIE U1IEbits.STALLIE +#define USBStallIF U1IRbits.STALLIF +#define USBStallIFReg U1IR +#define USBStallIFBitNum 7 + +#define USBErrorIE U1IEbits.UERRIE +#define USBErrorIF U1IRbits.UERRIF +#define USBErrorIFReg U1IR +#define USBErrorIFBitNum 1 + +#define USBSE0Event 0// U1IRbits.URSTIF// U1CONbits.SE0 +#define USBSuspendControl U1PWRCbits.USUSPEND +#define USBPacketDisable U1CONbits.PKTDIS +#define USBResumeControl U1CONbits.RESUME + +#define USBT1MSECIE U1OTGIEbits.T1MSECIE +#define USBT1MSECIF U1OTGIRbits.T1MSECIF +#define USBT1MSECIFReg U1OTGIR +#define USBT1MSECIFBitNum 6 + +#define USBIDIE U1OTGIEbits.IDIE +#define USBIDIF U1OTGIRbits.IDIF +#define USBIDIFReg U1OTGIR +#define USBIDIFBitNum 7 + +#define USB_OTG_ENABLE 0x04 +#define USB_OTG_DPLUS_ENABLE 0x80 + +/* Buffer Descriptor Status Register Initialization Parameters */ + +//The _BSTALL definition is changed from 0x04 to 0x00 to +// fix a difference in the PIC18 and PIC24 definitions of this +// bit. This should be changed back once the definitions are +// synced. +#define _BSTALL 0x04 //Buffer Stall enable +#define _DTSEN 0x08 //Data Toggle Synch enable +#define _DAT0 0x00 //DATA0 packet expected next +#define _DAT1 0x40 //DATA1 packet expected next +#define _DTSMASK 0x40 //DTS Mask +#define _USIE 0x80 //SIE owns buffer +#define _UCPU 0x00 //CPU owns buffer + +#define _STAT_MASK 0xFC + + + +#define USTAT_EP0_PP_MASK ~0x04 +#define USTAT_EP_MASK 0xFC +#define USTAT_EP0_OUT 0x00 +#define USTAT_EP0_OUT_EVEN 0x00 +#define USTAT_EP0_OUT_ODD 0x04 + +#define USTAT_EP0_IN 0x08 +#define USTAT_EP0_IN_EVEN 0x08 +#define USTAT_EP0_IN_ODD 0x0C +#define ENDPOINT_MASK 0xF0 + +#define BDT_BASE_ADDR_TAG __attribute__ ((aligned (512))) +#define CTRL_TRF_SETUP_ADDR_TAG +#define CTRL_TRF_DATA_ADDR_TAG + +typedef union +{ + WORD UEP[16]; +} _UEP; + +#define UEP_STALL 0x0002 + +typedef union _POINTER +{ + struct + { + BYTE bLow; + BYTE bHigh; + //byte bUpper; + }; + WORD _word; // bLow & bHigh + + //pFunc _pFunc; // Usage: ptr.pFunc(); Init: ptr.pFunc = &; + + BYTE* bRam; // Ram byte pointer: 2 bytes pointer pointing + // to 1 byte of data + WORD* wRam; // Ram word poitner: 2 bytes poitner pointing + // to 2 bytes of data + + ROM BYTE* bRom; // Size depends on compiler setting + ROM WORD* wRom; + //rom near byte* nbRom; // Near = 2 bytes pointer + //rom near word* nwRom; + //rom far byte* fbRom; // Far = 3 bytes pointer + //rom far word* fwRom; +} POINTER; + + //******** Depricated: v2.2 - will be removed at some point of time *** +#define _LS 0x00 // Use Low-Speed USB Mode +#define _FS 0x00 // Use Full-Speed USB Mode +#define _TRINT 0x00 // Use internal transceiver +#define _TREXT 0x00 // Use external transceiver +#define _PUEN 0x00 // Use internal pull-up resistor +#define _OEMON 0x00 // Use SIE output indicator +//********************************************************************** + +#define USB_PULLUP_ENABLE 0x00 +#define USB_PULLUP_DISABLE 0x04 + +#define USB_INTERNAL_TRANSCEIVER 0x00 +#define USB_EXTERNAL_TRANSCEIVER 0x01 + +#define USB_FULL_SPEED 0x04 +//USB_LOW_SPEED not currently supported in PIC24F USB products + +#define ConvertToPhysicalAddress(a) ((DWORD)KVA_TO_PA(a)) +#define ConvertToVirtualAddress(a) PA_TO_KVA1(a) + +#if ((__PIC32_FEATURE_SET__ >= 100) && (__PIC32_FEATURE_SET__ <= 299)) +#define USBIE 0x00000008 +#else +#define USBIE 0x02000000 +#endif +/**************************************************************** + Function: + void USBModuleDisable(void) + + Description: + This macro is used to disable the USB module + + Parameters: + None + + Return Values: + None + + Remarks: + None + + ****************************************************************/ +#define USBModuleDisable() {\ + U1CON = 0;\ + U1IE = 0;\ + U1OTGIE = 0;\ + U1PWRCbits.USBPWR = 1;\ + USBDeviceState = DETACHED_STATE;\ +} + +/******************************************************************** + * Function (macro): void USBClearInterruptFlag(register, BYTE if_flag_offset) + * + * PreCondition: None + * + * Input: + * register - the register mnemonic for the register holding the interrupt + * flag to be "kleared" + * BYTE if_flag_offset - the bit position offset (for the interrupt flag to + * "klear") from the "right of the register" + * + * Output: None + * + * Side Effects: None + * + * Overview: Klears the specified USB interrupt flag. + * + * Note: Individual USB interrupt flag bits are "Kleared" by writing + * '1' to the bit + *******************************************************************/ +#define USBClearInterruptFlag(reg_name, if_flag_offset) (reg_name = (1 << if_flag_offset)) + +/******************************************************************** + Function: + void DisableNonZeroEndpoints(UINT8 last_ep_num) + + Summary: + Clears the control registers for the specified non-zero endpoints + + PreCondition: + None + + Parameters: + UINT8 last_ep_num - the last endpoint number to clear. This + number should include all endpoints used in any configuration. + + Return Values: + None + + Remarks: + None + + *******************************************************************/ +#define DisableNonZeroEndpoints(last_ep_num) {\ + UINT8 i;\ + UINT32 *p = (UINT32*)&U1EP1;\ + for(i=0;i= 100) && (__PIC32_FEATURE_SET__ <= 299)) + #define USBEnableInterrupts() {\ + IEC1SET = USBIE;\ + IPC7CLR=0x00FF0000;\ + IPC7SET=0x00100000;\ + INTEnableSystemMultiVectoredInt();\ + INTEnableInterrupts();\ + } + #else + #define USBEnableInterrupts() {\ + IEC1SET = USBIE;\ + IPC11CLR = 0x0000FF00;\ + IPC11SET = 0x00001000;\ + INTEnableSystemMultiVectoredInt();\ + INTEnableInterrupts();\ + } + #endif +#else + #define USBEnableInterrupts() +#endif + +#define USBDisableInterrupts() {IEC1CLR = USBIE;} + +#if defined(USB_INTERRUPT) + #define USBMaskInterrupts() {IEC1CLR = USBIE;} + #define USBUnmaskInterrupts() {IEC1SET = USBIE;} +#else + #define USBMaskInterrupts() + #define USBUnmaskInterrupts() +#endif + + #define EP_CTRL 0x0C // Cfg Control pipe for this ep + #define EP_OUT 0x18 // Cfg OUT only pipe for this ep + #define EP_IN 0x14 // Cfg IN only pipe for this ep + #define EP_OUT_IN 0x1C // Cfg both OUT & IN pipes for this ep + #define HSHK_EN 0x01 // Enable handshake packet + // Handshake should be disable for isoch + + #define USB_HANDSHAKE_ENABLED 0x01 + #define USB_HANDSHAKE_DISABLED 0x00 + + #define USB_OUT_ENABLED 0x08 + #define USB_OUT_DISABLED 0x00 + + #define USB_IN_ENABLED 0x04 + #define USB_IN_DISABLED 0x00 + + #define USB_ALLOW_SETUP 0x00 + #define USB_DISALLOW_SETUP 0x10 + + #define USB_STALL_ENDPOINT 0x02 + + #define SetConfigurationOptions() {U1CNFG1 = 0;U1EIE = 0x9F;U1IE = 0x99 | USB_SOF_INTERRUPT | USB_ERROR_INTERRUPT; U1OTGCON &= 0x000F; U1OTGCON |= USB_PULLUP_OPTION;} + + #define USBClearInterruptRegister(reg) reg = 0xFF; + +// Buffer Descriptor Status Register layout. +typedef union __attribute__ ((packed)) _BD_STAT +{ + struct __attribute__ ((packed)){ + unsigned :2; + unsigned BSTALL :1; //Buffer Stall Enable + unsigned DTSEN :1; //Data Toggle Synch Enable + unsigned :2; //Reserved - write as 00 + unsigned DTS :1; //Data Toggle Synch Value + unsigned UOWN :1; //USB Ownership + }; + struct __attribute__ ((packed)){ + unsigned :2; + unsigned PID0 :1; + unsigned PID1 :1; + unsigned PID2 :1; + unsigned PID3 :1; + + }; + struct __attribute__ ((packed)){ + unsigned :2; + unsigned PID :4; //Packet Identifier + }; + WORD Val; +} BD_STAT; + +// BDT Entry Layout +typedef union __attribute__ ((packed))__BDT +{ + struct __attribute__ ((packed)) + { + BD_STAT STAT; + WORD CNT:10; + DWORD ADR; //Buffer Address + }; + struct __attribute__ ((packed)) + { + DWORD res :16; + DWORD count:10; + }; + DWORD w[2]; + WORD v[4]; + QWORD Val; +} BDT_ENTRY; + +// USTAT Register Layout +typedef union __USTAT +{ + struct + { + unsigned char filler1 :2; + unsigned char ping_pong :1; + unsigned char direction :1; + unsigned char endpoint_number :4; + }; + BYTE Val; +} USTAT_FIELDS; + +//Macros for fetching parameters from a USTAT_FIELDS variable. +#define USBHALGetLastEndpoint(stat) stat.endpoint_number +#define USBHALGetLastDirection(stat) stat.direction +#define USBHALGetLastPingPong(stat) stat.ping_pong + + +#if defined(USB_SUPPORT_DEVICE) | defined(USB_SUPPORT_OTG) + #if !defined(USBDEVICE_C) + //extern USB_VOLATILE USB_DEVICE_STATE USBDeviceState; + extern USB_VOLATILE BYTE USBActiveConfiguration; + extern USB_VOLATILE IN_PIPE inPipes[1]; + extern USB_VOLATILE OUT_PIPE outPipes[1]; + #endif + extern volatile BDT_ENTRY* pBDTEntryOut[USB_MAX_EP_NUMBER+1]; + extern volatile BDT_ENTRY* pBDTEntryIn[USB_MAX_EP_NUMBER+1]; +#endif + +#endif //USB_HAL_PIC32_H diff --git a/software/resID.xlsx b/software/resID.xlsx new file mode 100644 index 0000000..78647f6 Binary files /dev/null and b/software/resID.xlsx differ diff --git a/software/sensor/US_sensor.X/Makefile b/software/sensor/US_sensor.X/Makefile new file mode 100644 index 0000000..05a3fb1 --- /dev/null +++ b/software/sensor/US_sensor.X/Makefile @@ -0,0 +1,108 @@ +# +# There exist several targets which are by default empty and which can be +# used for execution of your targets. These targets are usually executed +# before and after some main targets. They are: +# +# .build-pre: called before 'build' target +# .build-post: called after 'build' target +# .clean-pre: called before 'clean' target +# .clean-post: called after 'clean' target +# .clobber-pre: called before 'clobber' target +# .clobber-post: called after 'clobber' target +# .all-pre: called before 'all' target +# .all-post: called after 'all' target +# .help-pre: called before 'help' target +# .help-post: called after 'help' target +# +# Targets beginning with '.' are not intended to be called on their own. +# +# Main targets can be executed directly, and they are: +# +# build build a specific configuration +# clean remove built files from a configuration +# clobber remove all built files +# all build all configurations +# help print help mesage +# +# Targets .build-impl, .clean-impl, .clobber-impl, .all-impl, and +# .help-impl are implemented in nbproject/makefile-impl.mk. +# +# Available make variables: +# +# CND_BASEDIR base directory for relative paths +# CND_DISTDIR default top distribution directory (build artifacts) +# CND_BUILDDIR default top build directory (object files, ...) +# CONF name of current configuration +# CND_ARTIFACT_DIR_${CONF} directory of build artifact (current configuration) +# CND_ARTIFACT_NAME_${CONF} name of build artifact (current configuration) +# CND_ARTIFACT_PATH_${CONF} path to build artifact (current configuration) +# CND_PACKAGE_DIR_${CONF} directory of package (current configuration) +# CND_PACKAGE_NAME_${CONF} name of package (current configuration) +# CND_PACKAGE_PATH_${CONF} path to package (current configuration) +# +# NOCDDL + + +# Environment +MKDIR=mkdir +CP=cp +CCADMIN=CCadmin +RANLIB=ranlib + + +# build +build: .build-post + +.build-pre: +# Add your pre 'build' code here... + +.build-post: .build-impl +# Add your post 'build' code here... + + +# clean +clean: .clean-post + +.clean-pre: +# Add your pre 'clean' code here... + +.clean-post: .clean-impl +# Add your post 'clean' code here... + + +# clobber +clobber: .clobber-post + +.clobber-pre: +# Add your pre 'clobber' code here... + +.clobber-post: .clobber-impl +# Add your post 'clobber' code here... + + +# all +all: .all-post + +.all-pre: +# Add your pre 'all' code here... + +.all-post: .all-impl +# Add your post 'all' code here... + + +# help +help: .help-post + +.help-pre: +# Add your pre 'help' code here... + +.help-post: .help-impl +# Add your post 'help' code here... + + + +# include project implementation makefile +include nbproject/Makefile-impl.mk + +# include project make variables +include nbproject/Makefile-variables.mk diff --git a/software/sensor/US_sensor.X/config.h b/software/sensor/US_sensor.X/config.h new file mode 100644 index 0000000..1cd0f85 --- /dev/null +++ b/software/sensor/US_sensor.X/config.h @@ -0,0 +1,32 @@ +/* + * File: config.h + * Author: Sparky + * + * Created on ??????, 2013, ?????? 26, 11:33 + */ + +#ifndef CONFIG_H +#define CONFIG_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +// CONFIG +#pragma config FOSC = INTOSCIO // Oscillator Selection bits (INTOSCIO oscillator: I/O function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN) +#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled and can be enabled by SWDTEN bit of the WDTCON register) +#pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT enabled) +#pragma config MCLRE = ON // MCLR Pin Function Select bit (MCLR pin function is MCLR) +#pragma config CP = OFF // Code Protection bit (Program memory code protection is disabled) +#pragma config IOSCFS = 8MHZ // Internal Oscillator Frequency Select (8 MHz) +#pragma config BOREN = OFF // Brown-out Reset Selection bits (BOR disabled) + + +#ifdef __cplusplus +} +#endif + +#endif /* CONFIG_H */ + diff --git a/software/sensor/US_sensor.X/dist/default/production/US_sensor.X.production.cmf b/software/sensor/US_sensor.X/dist/default/production/US_sensor.X.production.cmf new file mode 100644 index 0000000..434aa5d --- /dev/null +++ b/software/sensor/US_sensor.X/dist/default/production/US_sensor.X.production.cmf @@ -0,0 +1,258 @@ +%CMF +# %PSECTS Section +# For each object file, details of its psects are enumerated here. +# The begining of the section is indicated by %PSECTS. The first +# line indicates the name of the first object file, e.g. +# $foo.obj +# Each line that follows describes a psect in that object file, until +# the next object file. The lines that describe a psect have the +# format: +# +# All addresses and the length are given in unqualified hexadecimal +# in delta units. Any other numeric values are decimal. +%PSECTS +$C:\Users\Sparky\AppData\Local\Temp\s608.obj +end_init CODE 0 0 0 1 2 +config CONFIG 0 2007 2007 1 2 +$dist/default/production\US_sensor.X.production.obj +cinit CODE 0 3FE 3FE 2 2 +maintext CODE 0 378 378 86 2 +cstackCOMMON COMMON 1 70 70 9 1 +nvCOMMON COMMON 1 79 79 4 1 +# %UNUSED Section +# This section enumerates the unused ranges of each CLASS. Each entry +# is described on a single line as follows: +# +# Addresses given in the range are in hexadecimal and units of delta. +%UNUSED +BANK0 0040-006F 1 +CODE 0001-0377 2 +COMMON 007D-007D 1 +CONST 0001-0377 2 +ENTRY 0001-0377 2 +IDLOC 2000-2003 2 +RAM 0040-006F 1 +SFR0 0000-003F 1 +SFR1 0080-00EF 1 +STACK 0040-006F 1 +STRCODE 0001-0377 2 +STRING 0001-0377 2 +# %LINETAB Section +# This section enumerates the file/line to address mappings. +# The beginning of the section is indicated by %LINETAB. +# The first line indicates the name of the first object file, e.g. +# $foo.obj +# Each line that follows describes a single mapping until the next +# object file. Mappings have the following format: +# :
+# The address is absolute and given given in unqualified hex +# in delta units of the psect. All mappings within an object file +# are in ascending order of addresses. +# All other numeric values are in decimal. +%LINETAB +$dist/default/production\US_sensor.X.production.obj +"C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\sensor\US_sensor.X\main.c":26 378 maintext CODE +"C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\sensor\US_sensor.X\main.c":30 378 maintext CODE +"C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\sensor\US_sensor.X\main.c":31 37B maintext CODE +"C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\sensor\US_sensor.X\main.c":32 37E maintext CODE +"C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\sensor\US_sensor.X\main.c":33 380 maintext CODE +"C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\sensor\US_sensor.X\main.c":34 381 maintext CODE +"C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\sensor\US_sensor.X\main.c":35 384 maintext CODE +"C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\sensor\US_sensor.X\main.c":36 387 maintext CODE +"C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\sensor\US_sensor.X\main.c":37 38A maintext CODE +"C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\sensor\US_sensor.X\main.c":38 38C maintext CODE +"C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\sensor\US_sensor.X\main.c":39 38E maintext CODE +"C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\sensor\US_sensor.X\main.c":40 390 maintext CODE +"C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\sensor\US_sensor.X\main.c":41 392 maintext CODE +"C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\sensor\US_sensor.X\main.c":42 394 maintext CODE +"C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\sensor\US_sensor.X\main.c":44 395 maintext CODE +"C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\sensor\US_sensor.X\main.c":45 397 maintext CODE +"C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\sensor\US_sensor.X\main.c":46 39F maintext CODE +"C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\sensor\US_sensor.X\main.c":47 3A8 maintext CODE +"C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\sensor\US_sensor.X\main.c":48 3A9 maintext CODE +"C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\sensor\US_sensor.X\main.c":49 3AB maintext CODE +"C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\sensor\US_sensor.X\main.c":50 3B2 maintext CODE +"C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\sensor\US_sensor.X\main.c":52 3BC maintext CODE +"C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\sensor\US_sensor.X\main.c":51 3BD maintext CODE +"C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\sensor\US_sensor.X\main.c":52 3C2 maintext CODE +"C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\sensor\US_sensor.X\main.c":53 3C8 maintext CODE +"C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\sensor\US_sensor.X\main.c":47 3CC maintext CODE +"C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\sensor\US_sensor.X\main.c":55 3CF maintext CODE +"C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\sensor\US_sensor.X\main.c":47 3D0 maintext CODE +"C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\sensor\US_sensor.X\main.c":55 3D2 maintext CODE +"C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\sensor\US_sensor.X\main.c":56 3D3 maintext CODE +"C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\sensor\US_sensor.X\main.c":57 3E0 maintext CODE +"C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\sensor\US_sensor.X\main.c":58 3F0 maintext CODE +"C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\sensor\US_sensor.X\main.c":63 3F3 maintext CODE +"C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\sensor\US_sensor.X\main.c":64 3F7 maintext CODE +"C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\sensor\US_sensor.X\main.c":65 3F9 maintext CODE +"C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\sensor\US_sensor.X\main.c":64 3FA maintext CODE +"C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\sensor\US_sensor.X\main.c":65 3FC maintext CODE +"C:\Users\Sparky\AppData\Local\Temp\s608.":173 3FE cinit CODE +"C:\Users\Sparky\AppData\Local\Temp\s608.":176 3FE cinit CODE +"C:\Users\Sparky\AppData\Local\Temp\s608.":182 3FE cinit CODE +"C:\Users\Sparky\AppData\Local\Temp\s608.":183 3FE cinit CODE +"C:\Users\Sparky\Desktop\MyProjects\Electronics\UniSolder\software\sensor\US_sensor.X\main.c":69 3FE maintext CODE +"C:\Users\Sparky\AppData\Local\Temp\s608.":184 3FF cinit CODE +# %SYMTAB Section +# An enumeration of all symbols in the program. +# The beginning of the section is indicated by %SYMTAB. +# Each line describes a single symbol as follows: +#