From: Walter Fetter Lages Date: Tue, 22 May 2018 18:39:46 +0000 (-0300) Subject: Add ICSP interface. X-Git-Tag: v2.4.0~1 X-Git-Url: http://git.ece.ufrgs.br/?a=commitdiff_plain;h=f350f3bd13f97bc8e907452d502571b162a8c0de;p=aic.git Add ICSP interface. Updated to use FreeRTOSV7.4.2. Minor changes in Makefiles. Included ISCP interface. --- diff --git a/Changes b/Changes index 83eb549..fa4708d 100644 --- a/Changes +++ b/Changes @@ -1,3 +1,9 @@ +2013.07.17 Started aic-2.4.0. + Updated to use FreeRTOSV7.4.2. + Minor changes in Makefiles. + Included ISCP interface. + + 2012.04.20 Started aic-2.3.0. Reworked source tree. Capacitor involucre sizes made invisible in schematics. diff --git a/DaemonRTOS/Makefile b/DaemonRTOS/Makefile index 6d4c8d8..99efb7b 100644 --- a/DaemonRTOS/Makefile +++ b/DaemonRTOS/Makefile @@ -10,10 +10,10 @@ daemonrtos:daemonrtos.o $(OSOBJS) $(CC) $(CPU) $^ -o $@ $(CCLIBDIR) $(AICLIBDIR) -Wl $(CCGLD) $(AICLIB) daemonrtos.o:daemonrtos.c - $(CC) $(CPU) -x c -c $^ $(CCINCDIR) $(OSINCDIR) $(CCFLAGS) $(OSFLAGS) + $(CC) $(CPU) -c $^ $(CCINCDIR) $(OSINCDIR) $(CCFLAGS) $(OSFLAGS) $(OSOBJS):$(OSFILES) - for i in $(OSFILES); do $(CC) $(CPU) -x c -c $$i $(CCINCDIR) $(OSINCDIR) $(CCFLAGS) $(OSFLAGS) ; done + for i in $(OSFILES); do $(CC) $(CPU) -c $$i $(CCINCDIR) $(OSINCDIR) $(CCFLAGS) $(OSFLAGS) ; done clean: rm -f *.o daemonrtos *~ diff --git a/DaemonRTOS/TODO b/DaemonRTOS/TODO deleted file mode 100644 index c9b6621..0000000 --- a/DaemonRTOS/TODO +++ /dev/null @@ -1,4293 +0,0 @@ - -daemonrtos: file format elf32-pic30 - -Disassembly of section .reset: - -00000000 <.reset>: - 0: 08 01 04 goto 0x108 - 2: 00 00 00 -Disassembly of section .text: - -00000100 <.handle>: - ... - -00000108 <__resetPRI>: - 108: 0f dc 20 mov.w #0xdc0, w15 - 10a: 80 ff 20 mov.w #0xff8, w0 - 10c: 00 01 88 mov.w w0, 0x20 - 10e: 00 00 00 nop - 110: 05 00 07 rcall . + 0xC - 112: 0c 00 07 rcall . + 0x1A - 114: d4 05 02 call 0x5d4 <_main> - 116: 00 00 00 - 118: 00 40 da .pword 0xda4000 - 11a: 00 00 fe reset - -0000011c <__psv_init>: - 11c: 44 40 a9 bclr.b 0x44, #0x2 - 11e: 80 08 20 mov.w #0x88, w0 - 120: 00 00 e0 cp0.w w0 - 122: 03 00 32 bra Z, . + 0x8 - 124: 00 00 20 mov.w #0x0, w0 - 126: a0 01 88 mov.w w0, 0x34 - 128: 44 40 a8 bset.b 0x44, #0x2 - -0000012a : - 12a: 00 00 06 return - -0000012c <__data_init>: - 12c: c0 a8 21 mov.w #0x1a8c, w0 - 12e: 01 00 20 mov.w #0x0, w1 - 130: 16 00 37 bra . + 0x2E - -00000132 : - 132: 62 00 40 add.w w0, #0x2, w0 - 134: e0 80 48 addc.w w1, #0x0, w1 - 136: 91 01 88 mov.w w1, 0x32 - 138: 90 01 ba tblrdl.w [w0], w3 - 13a: 62 00 40 add.w w0, #0x2, w0 - 13c: e0 80 48 addc.w w1, #0x0, w1 - 13e: 91 01 88 mov.w w1, 0x32 - 140: 90 02 ba tblrdl.w [w0], w5 - 142: 62 00 40 add.w w0, #0x2, w0 - 144: e0 80 48 addc.w w1, #0x0, w1 - 146: 00 02 eb clr.w w4 - 148: 60 28 e1 cp.w w5, #0x0 - 14a: 05 00 3a bra NZ, . + 0xC - 14c: 83 01 e9 dec.w w3, w3 - 14e: 07 00 33 bra N, . + 0x10 - 150: 03 80 09 repeat w3 - 152: 00 59 eb clr.b [w2++] - 154: 04 00 37 bra . + 0xA - -00000156 : - 156: 61 28 e1 cp.w w5, #0x1 - 158: 01 00 32 bra Z, . + 0x4 - 15a: 00 82 eb setm.w w4 - -0000015c : - 15c: 05 00 07 rcall . + 0xC - -0000015e : - 15e: 91 01 88 mov.w w1, 0x32 - 160: 10 01 ba tblrdl.w [w0], w2 - 162: 02 00 e0 cp0.w w2 - 164: e6 ff 3a bra NZ, . + 0xFFFFFFCE - 166: 00 00 05 retlw.w #0x0, w0 - -00000168 : - 168: 91 01 88 mov.w w1, 0x32 - 16a: 80 02 78 mov.w w0, w5 - 16c: 62 00 40 add.w w0, #0x2, w0 - 16e: e0 80 48 addc.w w1, #0x0, w1 - 170: 35 59 ba tblrdl.b [w5++], [w2++] - 172: 83 01 e9 dec.w w3, w3 - 174: 08 00 32 bra Z, . + 0x12 - 176: 25 59 ba tblrdl.b [w5--], [w2++] - 178: 83 01 e9 dec.w w3, w3 - 17a: 05 00 32 bra Z, . + 0xC - 17c: 04 00 e0 cp0.w w4 - 17e: f4 ff 32 bra Z, . + 0xFFFFFFEA - 180: 15 d9 ba tblrdh.b [w5], [w2++] - 182: 83 01 e9 dec.w w3, w3 - 184: f1 ff 3a bra NZ, . + 0xFFFFFFE4 - -00000186 : - 186: 00 00 06 return - -00000188 <_memcpy>: - 188: 80 01 78 mov.w w0, w3 - -0000018a <.LM3>: - 18a: 02 00 e0 cp0.w w2 - 18c: 03 00 32 bra Z, . + 0x8 - -0000018e <.L6>: - 18e: b1 59 78 mov.b [w1++], [w3++] - -00000190 <.LM5>: - 190: 02 01 e9 dec.w w2, w2 - 192: fd ff 3a bra NZ, . + 0xFFFFFFFC - -00000194 <.L8>: - 194: 00 00 06 return - -00000196 <_memset>: - 196: 80 01 78 mov.w w0, w3 - -00000198 <.LM3>: - 198: 02 00 e0 cp0.w w2 - 19a: 03 00 32 bra Z, . + 0x8 - -0000019c <.L6>: - 19c: 81 59 78 mov.b w1, [w3++] - -0000019e <.LM5>: - 19e: 02 01 e9 dec.w w2, w2 - 1a0: fd ff 3a bra NZ, . + 0xFFFFFFFC - -000001a2 <.L8>: - 1a2: 00 00 06 return - -000001a4 <_strncpy>: - 1a4: 80 01 78 mov.w w0, w3 - 1a6: 02 00 e0 cp0.w w2 - 1a8: 07 00 32 bra Z, . + 0x10 - 1aa: 11 04 e0 cp0.b [w1] - 1ac: 05 00 32 bra Z, . + 0xC - -000001ae <.L7>: - 1ae: b1 59 78 mov.b [w1++], [w3++] - -000001b0 <.LM4>: - 1b0: 02 01 e9 dec.w w2, w2 - 1b2: 02 00 32 bra Z, . + 0x6 - 1b4: 11 04 e0 cp0.b [w1] - 1b6: fb ff 3a bra NZ, . + 0xFFFFFFF8 - -000001b8 <.L3>: - 1b8: 02 00 e0 cp0.w w2 - 1ba: 03 00 32 bra Z, . + 0x8 - -000001bc <.L12>: - 1bc: 80 59 eb clr.b [w3++] - -000001be <.LM7>: - 1be: 02 01 e9 dec.w w2, w2 - 1c0: fd ff 3a bra NZ, . + 0xFFFFFFFC - -000001c2 <.L15>: - 1c2: 00 00 06 return - -000001c4 <___truncdfsf2>: - 1c4: 14 00 fa lnk #0x14 - 1c6: 88 9f be mov.d w8, [w15++] - 1c8: 8a 9f be mov.d w10, [w15++] - 1ca: 8c 9f be mov.d w12, [w15++] - 1cc: 00 05 be mov.d w0, w10 - 1ce: 02 06 be mov.d w2, w12 - 1d0: 68 00 47 add.w w14, #0x8, w0 - 1d2: 0c 90 be mov.d w12, [w0--] - 1d4: 0a 90 be mov.d w10, [w0--] - 1d6: 5c 01 07 rcall . + 0x2BA - 1d8: 64 00 e1 cp.w w0, #0x4 - 1da: 1a 00 32 bra Z, . + 0x36 - 1dc: 16 00 3e bra GTU, . + 0x2E - 1de: 61 00 e1 cp.w w0, #0x1 - 1e0: 1a 00 32 bra Z, . + 0x36 - 1e2: 6e 04 90 mov.w [w14+12], w8 - 1e4: fe 04 90 mov.w [w14+14], w9 - 1e6: 0e 0b 90 mov.w [w14+16], w6 - 1e8: 9e 0b 90 mov.w [w14+18], w7 - 1ea: 60 11 b8 mul.uu w2, #0x0, w2 - 1ec: 9e 05 90 mov.w [w14+2], w11 - 1ee: 0b 38 b1 sub.w #0x380, w11 - 1f0: d5 01 20 mov.w #0x1d, w5 - -000001f2 : - 1f2: 82 81 71 ior.w w3, w2, w3 - 1f4: 61 01 64 and.w w8, #0x1, w2 - 1f6: 87 03 d1 lsr.w w7, w7 - 1f8: 06 83 d3 rrc.w w6, w6 - 1fa: 89 84 d3 rrc.w w9, w9 - 1fc: 08 84 d3 rrc.w w8, w8 - 1fe: 85 02 e9 dec.w w5, w5 - 200: f8 ff 3a bra NZ, . + 0xFFFFFFF2 - 202: 6d 01 07 rcall . + 0x2DC - -00000204 : - 204: 0d f0 a7 btsc.w w13, #0xf - 206: 01 f0 a0 bset.w w1, #0xf - -00000208 : - 208: a4 01 37 bra . + 0x34A - -0000020a : - 20a: f1 ff 27 mov.w #0x7fff, w1 - 20c: f0 ff 2f mov.w #0xffff, w0 - 20e: a1 01 37 bra . + 0x344 - -00000210 : - 210: 01 f8 27 mov.w #0x7f80, w1 - 212: 00 00 20 mov.w #0x0, w0 - 214: f7 ff 37 bra . + 0xFFFFFFF0 - -00000216 : - 216: 60 00 b8 mul.uu w0, #0x0, w0 - 218: f5 ff 37 bra . + 0xFFFFFFEC - -0000021a <___floatsisf>: - 21a: 88 9f be mov.d w8, [w15++] - 21c: 8a 9f be mov.d w10, [w15++] - 21e: 01 05 78 mov.w w1, w10 - 220: 01 00 e0 cp0.w w1 - 222: 04 00 35 bra LT, . + 0xA - 224: 08 00 3c bra GT, . + 0x12 - 226: 00 00 e0 cp0.w w0 - 228: 20 00 32 bra Z, . + 0x42 - 22a: 05 00 37 bra . + 0xC - -0000022c : - 22c: 60 00 10 subr.w w0, #0x0, w0 - 22e: e0 80 18 subbr.w w1, #0x0, w1 - 230: 02 00 3b bra NN, . + 0x6 - 232: 01 f0 2c mov.w #0xcf00, w1 - 234: 1a 00 37 bra . + 0x36 - -00000236 : - 236: 00 04 be mov.d w0, w8 - 238: 60 11 b8 mul.uu w2, #0x0, w2 - 23a: 6b 09 20 mov.w #0x96, w11 - 23c: 09 82 cf ff1l w9, w4 - 23e: 02 00 39 bra NC, . + 0x6 - 240: 08 82 cf ff1l w8, w4 - 242: 04 41 b0 add.b #0x10, w4 - -00000244 : - 244: 69 42 52 sub.b w4, #0x9, w4 - 246: 0e 00 32 bra Z, . + 0x1E - 248: 08 00 3b bra NN, . + 0x12 - -0000024a : - 24a: 82 81 71 ior.w w3, w2, w3 - 24c: 61 01 64 and.w w8, #0x1, w2 - 24e: 89 04 d1 lsr.w w9, w9 - 250: 08 84 d3 rrc.w w8, w8 - 252: 8b 05 e8 inc.w w11, w11 - 254: 04 42 e8 inc.b w4, w4 - 256: f9 ff 3a bra NZ, . + 0xFFFFFFF4 - 258: 05 00 37 bra . + 0xC - -0000025a : - 25a: 08 04 44 add.w w8, w8, w8 - 25c: 89 84 4c addc.w w9, w9, w9 - 25e: 8b 05 e9 dec.w w11, w11 - 260: 04 42 e9 dec.b w4, w4 - 262: fb ff 3a bra NZ, . + 0xFFFFFFF8 - -00000264 : - 264: 3c 01 07 rcall . + 0x27A - 266: 0a f0 a7 btsc.w w10, #0xf - 268: 01 f0 a0 bset.w w1, #0xf - -0000026a : - 26a: 4f 05 be mov.d [--w15], w10 - 26c: 4f 04 be mov.d [--w15], w8 - 26e: 00 00 06 return - -00000270 <___divsf3>: - 270: 88 9f be mov.d w8, [w15++] - 272: 8a 9f be mov.d w10, [w15++] - 274: 8c 1f 78 mov.w w12, [w15++] - 276: 72 01 07 rcall . + 0x2E6 - 278: 79 01 33 bra N, . + 0x2F4 - 27a: 03 86 6c xor.w w9, w3, w12 - 27c: 64 50 e1 cp.w w10, #0x4 - 27e: 2e 00 32 bra Z, . + 0x5E - 280: 64 20 e1 cp.w w4, #0x4 - 282: 33 00 32 bra Z, . + 0x68 - 284: 61 50 e1 cp.w w10, #0x1 - 286: 2f 00 32 bra Z, . + 0x60 - 288: 61 20 e1 cp.w w4, #0x1 - 28a: 31 00 32 bra Z, . + 0x64 - -0000028c : - 28c: 85 85 55 sub.w w11, w5, w11 - 28e: eb 07 b0 add.w #0x7e, w11 - 290: 09 00 20 mov.w #0x0, w9 - 292: 08 04 20 mov.w #0x40, w8 - 294: 05 00 37 bra . + 0xC - -00000296 : - 296: 08 04 44 add.w w8, w8, w8 - 298: 89 84 4c addc.w w9, w9, w9 - 29a: 0a 00 31 bra C, . + 0x16 - -0000029c : - 29c: 06 03 43 add.w w6, w6, w6 - 29e: 87 83 4b addc.w w7, w7, w7 - -000002a0 : - 2a0: 00 01 53 sub.w w6, w0, w2 - 2a2: 81 81 5b subb.w w7, w1, w3 - 2a4: f8 ff 33 bra N, . + 0xFFFFFFF2 - 2a6: 02 03 be mov.d w2, w6 - 2a8: 08 00 a0 bset.w w8, #0x0 - 2aa: 08 04 44 add.w w8, w8, w8 - 2ac: 89 84 4c addc.w w9, w9, w9 - 2ae: f6 ff 39 bra NC, . + 0xFFFFFFEE - -000002b0 : - 2b0: c6 39 dd sl.w w7, #0x6, w3 - 2b2: 83 01 73 ior.w w6, w3, w3 - 2b4: 01 00 32 bra Z, . + 0x4 - 2b6: 13 00 20 mov.w #0x1, w3 - -000002b8 : - 2b8: 89 04 d1 lsr.w w9, w9 - 2ba: 08 84 d3 rrc.w w8, w8 - 2bc: 09 98 a3 btst.z w9, #0x9 - 2be: 05 00 32 bra Z, . + 0xC - 2c0: 08 00 a7 btsc.w w8, #0x0 - 2c2: 03 00 a0 bset.w w3, #0x0 - 2c4: 89 04 d1 lsr.w w9, w9 - 2c6: 08 84 d3 rrc.w w8, w8 - 2c8: 8b 05 e8 inc.w w11, w11 - -000002ca : - 2ca: 89 04 d1 lsr.w w9, w9 - 2cc: 08 84 d3 rrc.w w8, w8 - 2ce: 00 01 eb clr.w w2 - 2d0: 02 81 d2 rlc.w w2, w2 - 2d2: 05 01 07 rcall . + 0x20C - -000002d4 : - 2d4: 01 f0 a1 bclr.w w1, #0xf - 2d6: 0c f0 a7 btsc.w w12, #0xf - 2d8: 01 f0 a0 bset.w w1, #0xf - 2da: 51 01 37 bra . + 0x2A4 - -000002dc : - 2dc: 64 20 e1 cp.w w4, #0x4 - 2de: 53 01 32 bra Z, . + 0x2A8 - -000002e0 : - 2e0: 08 01 be mov.d w8, w2 - -000002e2 : - 2e2: 02 00 be mov.d w2, w0 - 2e4: f7 ff 37 bra . + 0xFFFFFFF0 - -000002e6 : - 2e6: 61 20 e1 cp.w w4, #0x1 - 2e8: 4e 01 32 bra Z, . + 0x29E - -000002ea : - 2ea: 60 00 b8 mul.uu w0, #0x0, w0 - 2ec: f3 ff 37 bra . + 0xFFFFFFE8 - -000002ee : - 2ee: 00 00 20 mov.w #0x0, w0 - 2f0: 01 f8 27 mov.w #0x7f80, w1 - 2f2: f0 ff 37 bra . + 0xFFFFFFE2 - -000002f4 <___subsf3>: - 2f4: 03 f0 a2 btg.w w3, #0xf - -000002f6 <___addsf3>: - 2f6: 88 9f be mov.d w8, [w15++] - 2f8: 8a 9f be mov.d w10, [w15++] - 2fa: 8c 1f 78 mov.w w12, [w15++] - 2fc: 2f 01 07 rcall . + 0x260 - 2fe: 36 01 33 bra N, . + 0x26E - 300: 64 50 e1 cp.w w10, #0x4 - 302: 4f 00 32 bra Z, . + 0xA0 - -00000304 : - 304: 64 20 e1 cp.w w4, #0x4 - 306: 52 00 32 bra Z, . + 0xA6 - 308: 03 82 6c xor.w w9, w3, w4 - 30a: 07 00 3b bra NN, . + 0x10 - 30c: 09 05 d0 sl.w w9, w10 - 30e: 03 06 d0 sl.w w3, w12 - 310: 82 0f 54 sub.w w8, w2, [w15] - 312: 0c 06 5d subb.w w10, w12, w12 - 314: 02 00 39 bra NC, . + 0x6 - 316: 02 00 32 bra Z, . + 0x6 - 318: 89 01 78 mov.w w9, w3 - -0000031a : - 31a: 03 06 78 mov.w w3, w12 - -0000031c : - 31c: 85 82 55 sub.w w11, w5, w5 - 31e: 04 00 3d bra GE, . + 0xA - 320: 00 03 fd exch w0, w6 - 322: 81 03 fd exch w1, w7 - 324: 85 02 ea neg.w w5, w5 - 326: 8b 85 42 add.w w5, w11, w11 - -00000328 : - 328: 84 0f 72 ior.w w4, w4, [w15] - 32a: 02 00 3b bra NN, . + 0x6 - 32c: 60 00 10 subr.w w0, #0x0, w0 - 32e: e0 80 18 subbr.w w1, #0x0, w1 - -00000330 : - 330: 60 11 b8 mul.uu w2, #0x0, w2 - 332: 00 05 eb clr.w w10 - 334: 7a 28 e1 cp.w w5, #0x1a - 336: 0a 00 39 bra NC, . + 0x16 - 338: 06 00 78 mov.w w6, w0 - 33a: c7 5d dd sl.w w11, #0x7, w11 - 33c: f7 07 b2 and.w #0x7f, w7 - 33e: 87 80 75 ior.w w11, w7, w1 - 340: 2d 00 37 bra . + 0x5C - -00000342 : - 342: 82 81 71 ior.w w3, w2, w3 - 344: 0a 01 78 mov.w w10, w2 - 346: 61 05 60 and.w w0, #0x1, w10 - 348: 81 80 d1 asr.w w1, w1 - 34a: 00 80 d3 rrc.w w0, w0 - -0000034c : - 34c: 85 02 e9 dec.w w5, w5 - 34e: f9 ff 3b bra NN, . + 0xFFFFFFF4 - -00000350 : - 350: 06 04 40 add.w w0, w6, w8 - 352: 87 84 48 addc.w w1, w7, w9 - 354: 02 00 3b bra NN, . + 0x6 - 356: 60 04 14 subr.w w8, #0x0, w8 - 358: e0 84 1c subbr.w w9, #0x0, w9 - -0000035a : - 35a: 09 88 a3 btst.z w9, #0x8 - 35c: 07 00 32 bra Z, . + 0x10 - 35e: 8a 81 71 ior.w w3, w10, w3 - 360: 82 81 71 ior.w w3, w2, w3 - 362: 61 01 64 and.w w8, #0x1, w2 - 364: 89 04 d1 lsr.w w9, w9 - 366: 08 84 d3 rrc.w w8, w8 - 368: 8b 05 e8 inc.w w11, w11 - 36a: 17 00 37 bra . + 0x30 - -0000036c : - 36c: 09 78 a3 btst.z w9, #0x7 - 36e: 13 00 3a bra NZ, . + 0x28 - -00000370 : - 370: 0b 00 e0 cp0.w w11 - 372: 13 00 34 bra LE, . + 0x28 - 374: 8b 05 e9 dec.w w11, w11 - 376: 08 04 44 add.w w8, w8, w8 - 378: 89 84 4c addc.w w9, w9, w9 - 37a: 0a 44 74 ior.b w8, w10, w8 - 37c: 09 78 a3 btst.z w9, #0x7 - 37e: 0d 00 3a bra NZ, . + 0x1C - -00000380 : - 380: 0b 00 e0 cp0.w w11 - 382: 07 00 34 bra LE, . + 0x10 - 384: 8b 05 e9 dec.w w11, w11 - 386: 08 04 44 add.w w8, w8, w8 - 388: 89 84 4c addc.w w9, w9, w9 - 38a: 01 00 3a bra NZ, . + 0x4 - 38c: 0b 00 20 mov.w #0x0, w11 - -0000038e : - 38e: 09 78 a3 btst.z w9, #0x7 - 390: f7 ff 32 bra Z, . + 0xFFFFFFF0 - -00000392 : - 392: 00 01 eb clr.w w2 - 394: 02 00 37 bra . + 0x6 - -00000396 : - 396: 82 81 71 ior.w w3, w2, w3 - 398: 0a 01 78 mov.w w10, w2 - -0000039a : - 39a: a1 00 07 rcall . + 0x144 - -0000039c : - 39c: 0c f0 a7 btsc.w w12, #0xf - 39e: 01 f0 a0 bset.w w1, #0xf - 3a0: ee 00 37 bra . + 0x1DE - -000003a2 : - 3a2: 64 20 e1 cp.w w4, #0x4 - 3a4: 02 00 3a bra NZ, . + 0x6 - 3a6: 83 8f 6c xor.w w9, w3, [w15] - 3a8: ee 00 33 bra N, . + 0x1DE - -000003aa : - 3aa: 08 01 be mov.d w8, w2 - -000003ac : - 3ac: 02 00 be mov.d w2, w0 - 3ae: e7 00 37 bra . + 0x1D0 - -000003b0 <___mulsf3>: - 3b0: 88 9f be mov.d w8, [w15++] - 3b2: 8a 9f be mov.d w10, [w15++] - 3b4: 8c 1f 78 mov.w w12, [w15++] - 3b6: d2 00 07 rcall . + 0x1A6 - 3b8: d9 00 33 bra N, . + 0x1B4 - 3ba: 03 86 6c xor.w w9, w3, w12 - 3bc: 64 50 e1 cp.w w10, #0x4 - 3be: 24 00 32 bra Z, . + 0x4A - 3c0: 64 20 e1 cp.w w4, #0x4 - 3c2: 27 00 32 bra Z, . + 0x50 - 3c4: 61 50 e1 cp.w w10, #0x1 - 3c6: 22 00 32 bra Z, . + 0x46 - 3c8: 61 20 e1 cp.w w4, #0x1 - 3ca: 21 00 32 bra Z, . + 0x44 - 3cc: 8b 85 42 add.w w5, w11, w11 - 3ce: eb 07 b1 sub.w #0x7e, w11 - 3d0: 01 34 b8 mul.uu w6, w1, w8 - 3d2: 00 3a b8 mul.uu w7, w0, w4 - 3d4: 08 04 42 add.w w4, w8, w8 - 3d6: 89 84 4a addc.w w5, w9, w9 - 3d8: 01 3a b8 mul.uu w7, w1, w4 - 3da: 00 30 b8 mul.uu w6, w0, w0 - 3dc: 88 80 40 add.w w1, w8, w1 - 3de: 09 01 4a addc.w w4, w9, w2 - 3e0: 04 00 33 bra N, . + 0xA - 3e2: 00 00 40 add.w w0, w0, w0 - 3e4: 81 80 48 addc.w w1, w1, w1 - 3e6: 02 01 49 addc.w w2, w2, w2 - 3e8: 8b 05 e9 dec.w w11, w11 - -000003ea : - 3ea: c9 09 dd sl.w w1, #0x9, w3 - 3ec: 83 01 70 ior.w w0, w3, w3 - 3ee: 01 00 32 bra Z, . + 0x4 - 3f0: 13 00 20 mov.w #0x1, w3 - -000003f2 : - 3f2: c8 14 de lsr.w w2, #0x8, w9 - 3f4: 48 14 dd sl.w w2, #0x8, w8 - 3f6: 47 09 de lsr.w w1, #0x7, w2 - 3f8: 12 00 b2 and.w #0x1, w2 - 3fa: c8 08 de lsr.w w1, #0x8, w1 - 3fc: 08 84 70 ior.w w1, w8, w8 - 3fe: 6f 00 07 rcall . + 0xE0 - -00000400 : - 400: 01 f0 a1 bclr.w w1, #0xf - 402: 0c f0 a7 btsc.w w12, #0xf - 404: 01 f0 a0 bset.w w1, #0xf - 406: bb 00 37 bra . + 0x178 - -00000408 : - 408: 61 20 e1 cp.w w4, #0x1 - 40a: bd 00 32 bra Z, . + 0x17C - -0000040c : - 40c: 08 01 be mov.d w8, w2 - -0000040e : - 40e: 02 00 be mov.d w2, w0 - 410: f7 ff 37 bra . + 0xFFFFFFF0 - -00000412 : - 412: 61 50 e1 cp.w w10, #0x1 - 414: fc ff 3a bra NZ, . + 0xFFFFFFFA - 416: b7 00 37 bra . + 0x170 - -00000418 <___fixsfsi>: - 418: 00 01 be mov.d w0, w2 - 41a: b8 00 07 rcall . + 0x172 - 41c: 04 70 a7 btsc.w w4, #0x7 - 41e: 03 f0 a1 bclr.w w3, #0xf - 420: 65 09 b1 sub.w #0x96, w5 - 422: 16 00 32 bra Z, . + 0x2E - 424: 0d 00 35 bra LT, . + 0x1C - 426: 68 28 e1 cp.w w5, #0x8 - 428: 06 00 35 bra LT, . + 0xE - 42a: f0 ff 2f mov.w #0xffff, w0 - 42c: f1 ff 27 mov.w #0x7fff, w1 - 42e: 03 00 e0 cp0.w w3 - 430: 13 00 3b bra NN, . + 0x28 - 432: 01 00 28 mov.w #0x8000, w1 - 434: 00 00 05 retlw.w #0x0, w0 - -00000436 : - 436: 00 00 40 add.w w0, w0, w0 - 438: 81 80 48 addc.w w1, w1, w1 - 43a: 85 02 e9 dec.w w5, w5 - 43c: fc ff 3a bra NZ, . + 0xFFFFFFFA - 43e: 08 00 37 bra . + 0x12 - -00000440 : - 440: f8 8f 42 add.w w5, #0x18, [w15] - 442: 02 00 3c bra GT, . + 0x6 - 444: 80 00 eb clr.w w1 - 446: 00 00 05 retlw.w #0x0, w0 - -00000448 : - 448: 81 00 d1 lsr.w w1, w1 - 44a: 00 80 d3 rrc.w w0, w0 - 44c: 85 02 e8 inc.w w5, w5 - 44e: fc ff 3a bra NZ, . + 0xFFFFFFFA - -00000450 : - 450: 03 00 e0 cp0.w w3 - 452: 02 00 3b bra NN, . + 0x6 - 454: 60 00 10 subr.w w0, #0x0, w0 - 456: e0 80 18 subbr.w w1, #0x0, w1 - -00000458 : - 458: 00 00 06 return - -0000045a <___fixunssfsi>: - 45a: 00 01 be mov.d w0, w2 - 45c: 97 00 07 rcall . + 0x130 - 45e: 04 70 a7 btsc.w w4, #0x7 - 460: 03 f0 a1 bclr.w w3, #0xf - 462: 03 f8 a3 btst.z w3, #0xf - 464: 13 00 3a bra NZ, . + 0x28 - 466: 65 09 b1 sub.w #0x96, w5 - 468: 10 00 32 bra Z, . + 0x22 - 46a: 09 00 35 bra LT, . + 0x14 - 46c: 69 28 e1 cp.w w5, #0x9 - 46e: 02 00 35 bra LT, . + 0x6 - 470: 01 00 28 mov.w #0x8000, w1 - 472: 00 00 05 retlw.w #0x0, w0 - -00000474 : - 474: 00 00 40 add.w w0, w0, w0 - 476: 81 80 48 addc.w w1, w1, w1 - 478: 85 02 e9 dec.w w5, w5 - 47a: fc ff 3a bra NZ, . + 0xFFFFFFFA - 47c: 00 00 06 return - -0000047e : - 47e: f8 8f 42 add.w w5, #0x18, [w15] - 480: 05 00 35 bra LT, . + 0xC - -00000482 : - 482: 81 00 d1 lsr.w w1, w1 - 484: 00 80 d3 rrc.w w0, w0 - 486: 85 02 e8 inc.w w5, w5 - 488: fc ff 3a bra NZ, . + 0xFFFFFFFA - -0000048a : - 48a: 00 00 06 return - -0000048c : - 48c: 80 00 eb clr.w w1 - 48e: 00 00 05 retlw.w #0x0, w0 - -00000490 <__dunpack>: - 490: 80 00 78 mov.w w0, w1 - 492: 50 02 be mov.d [++w0], w4 - 494: 50 03 be mov.d [++w0], w6 - 496: 44 39 de lsr.w w7, #0x4, w2 - 498: f7 00 b2 and.w #0xf, w7 - 49a: f3 7f 20 mov.w #0x7ff, w3 - 49c: 03 01 61 and.w w2, w3, w2 - 49e: 09 00 32 bra Z, . + 0x14 - 4a0: 02 18 e1 cp.w w3, w2 - 4a2: 16 00 3a bra NZ, . + 0x2E - 4a4: 85 01 72 ior.w w4, w5, w3 - 4a6: 83 01 73 ior.w w6, w3, w3 - 4a8: 83 81 73 ior.w w7, w3, w3 - 4aa: 00 08 20 mov.w #0x80, w0 - 4ac: 15 00 3a bra NZ, . + 0x2C - 4ae: 40 00 20 mov.w #0x4, w0 - 4b0: 13 00 37 bra . + 0x28 - -000004b2 : - 4b2: 85 01 72 ior.w w4, w5, w3 - 4b4: 83 01 73 ior.w w6, w3, w3 - 4b6: 83 81 73 ior.w w7, w3, w3 - 4b8: 05 00 3a bra NZ, . + 0xC - 4ba: 04 a8 be mov.d w4, [++w0] - 4bc: 06 a8 be mov.d w6, [++w0] - 4be: 10 00 20 mov.w #0x1, w0 - 4c0: 0b 00 37 bra . + 0x18 - -000004c2 : - 4c2: 02 01 e9 dec.w w2, w2 - -000004c4 : - 4c4: 04 02 42 add.w w4, w4, w4 - 4c6: 85 82 4a addc.w w5, w5, w5 - 4c8: 06 03 4b addc.w w6, w6, w6 - 4ca: 87 83 4b addc.w w7, w7, w7 - 4cc: 07 48 a3 btst.z w7, #0x4 - 4ce: f9 ff 32 bra Z, . + 0xFFFFFFF4 - -000004d0 : - 4d0: 07 40 a0 bset.w w7, #0x4 - 4d2: 04 a8 be mov.d w4, [++w0] - 4d4: 06 a8 be mov.d w6, [++w0] - 4d6: 20 00 20 mov.w #0x2, w0 - -000004d8 : - 4d8: 80 00 98 mov.w w0, [w1+0] - 4da: 92 00 98 mov.w w2, [w1+2] - 4dc: 00 00 06 return - -000004de <__fpack>: - 4de: 81 00 20 mov.w #0x8, w1 - 4e0: 61 80 55 sub.w w11, #0x1, w0 - 4e2: 0b 00 3d bra GE, . + 0x18 - 4e4: 0b 00 20 mov.w #0x0, w11 - 4e6: 61 fe 2f mov.w #0xffe6, w1 - 4e8: 01 00 e1 cp.w w0, w1 - 4ea: 1d 00 34 bra LE, . + 0x3C - -000004ec : - 4ec: 82 81 71 ior.w w3, w2, w3 - 4ee: 61 01 64 and.w w8, #0x1, w2 - 4f0: 89 04 d1 lsr.w w9, w9 - 4f2: 08 84 d3 rrc.w w8, w8 - 4f4: 00 00 e8 inc.w w0, w0 - 4f6: fa ff 3a bra NZ, . + 0xFFFFFFF6 - 4f8: 71 00 20 mov.w #0x7, w1 - -000004fa : - 4fa: 61 00 64 and.w w8, #0x1, w0 - 4fc: 03 00 70 ior.w w0, w3, w0 - 4fe: 02 00 60 and.w w0, w2, w0 - 500: 09 00 32 bra Z, . + 0x14 - 502: 61 04 44 add.w w8, #0x1, w8 - 504: e0 84 4c addc.w w9, #0x0, w9 - 506: 09 88 a5 btst.z w9, w1 - 508: 05 00 32 bra Z, . + 0xC - 50a: 8b 05 e8 inc.w w11, w11 - 50c: 68 08 e1 cp.w w1, #0x8 - 50e: 02 00 3a bra NZ, . + 0x6 - 510: 89 04 d1 lsr.w w9, w9 - 512: 08 84 d3 rrc.w w8, w8 - -00000514 : - 514: f2 0f 20 mov.w #0xff, w2 - 516: 02 58 e1 cp.w w11, w2 - 518: 05 00 3d bra GE, . + 0xC - 51a: c7 5d dd sl.w w11, #0x7, w11 - 51c: f9 07 b2 and.w #0x7f, w9 - 51e: 89 80 75 ior.w w11, w9, w1 - 520: 08 00 78 mov.w w8, w0 - 522: 00 00 06 return - -00000524 : - 524: 0b f8 27 mov.w #0x7f80, w11 - -00000526 : - 526: 8b 00 78 mov.w w11, w1 - 528: 00 00 05 retlw.w #0x0, w0 - -0000052a <__dunpack2>: - 52a: 68 04 47 add.w w14, #0x8, w8 - 52c: 02 94 be mov.d w2, [w8--] - 52e: 00 94 be mov.d w0, [w8--] - 530: fc 04 47 add.w w14, #0x1c, w9 - 532: 86 94 be mov.d w6, [w9--] - 534: 84 94 be mov.d w4, [w9--] - 536: 09 00 78 mov.w w9, w0 - 538: ab ff 07 rcall . + 0xFFFFFF58 - 53a: 08 00 78 mov.w w8, w0 - 53c: a9 ff 07 rcall . + 0xFFFFFF54 - 53e: 99 00 78 mov.w [w9], w1 - 540: 81 4f 70 ior.b w0, w1, [w15] - 542: 0b 00 3b bra NN, . + 0x18 - -00000544 : - 544: 08 00 be mov.d w8, w0 - 546: 37 00 07 rcall . + 0x70 - 548: 4f 00 b1 sub.w #0x4, w15 - 54a: 03 00 37 bra . + 0x8 - -0000054c <__dreturnNaN>: - 54c: f3 ff 27 mov.w #0x7fff, w3 - 54e: f2 ff 2f mov.w #0xffff, w2 - 550: 61 10 b9 mul.su w2, #0x1, w0 - -00000552 <__dunpack2exit>: - 552: 4f 06 be mov.d [--w15], w12 - 554: 4f 05 be mov.d [--w15], w10 - 556: 4f 04 be mov.d [--w15], w8 - 558: 00 80 fa ulnk - -0000055a : - 55a: 00 00 06 return - -0000055c <__funpack2>: - 55c: 00 04 be mov.d w0, w8 - 55e: 16 00 07 rcall . + 0x2E - 560: 00 03 be mov.d w0, w6 - 562: 04 05 be mov.d w4, w10 - 564: 02 00 be mov.d w2, w0 - 566: 12 00 07 rcall . + 0x26 - 568: 84 4f 75 ior.b w10, w4, [w15] - 56a: 00 00 06 return - -0000056c <__fPropagateNaN>: - 56c: 02 00 be mov.d w2, w0 - 56e: 64 50 e1 cp.w w10, #0x4 - 570: 05 00 36 bra LEU, . + 0xC - 572: 64 20 e1 cp.w w4, #0x4 - 574: 02 00 36 bra LEU, . + 0x6 - 576: 09 68 a3 btst.z w9, #0x6 - 578: 01 00 3a bra NZ, . + 0x4 - -0000057a : - 57a: 08 00 be mov.d w8, w0 - -0000057c : - 57c: 01 60 a0 bset.w w1, #0x6 - -0000057e <__fbopExit>: - 57e: 4f 06 78 mov.w [--w15], w12 - 580: 4f 05 be mov.d [--w15], w10 - 582: 4f 04 be mov.d [--w15], w8 - 584: 00 00 06 return - -00000586 <__fbopReturnNaN>: - 586: f0 ff 2f mov.w #0xffff, w0 - 588: f1 ff 27 mov.w #0x7fff, w1 - 58a: f9 ff 37 bra . + 0xFFFFFFF4 - -0000058c <__funpack>: - 58c: c7 0a de lsr.w w1, #0x7, w5 - 58e: f1 07 b2 and.w #0x7f, w1 - 590: f5 0f b2 and.w #0xff, w5 - 592: 08 00 32 bra Z, . + 0x12 - 594: e1 cf 42 add.b w5, #0x1, [w15] - 596: 02 00 32 bra Z, . + 0x6 - -00000598 : - 598: 01 70 a0 bset.w w1, #0x7 - 59a: 24 00 05 retlw.w #0x2, w4 - -0000059c : - 59c: 81 0f 70 ior.w w0, w1, [w15] - 59e: 01 00 32 bra Z, . + 0x4 - 5a0: 04 08 05 retlw.w #0x80, w4 - -000005a2 : - 5a2: 44 00 05 retlw.w #0x4, w4 - -000005a4 : - 5a4: 81 0f 70 ior.w w0, w1, [w15] - 5a6: 02 00 3a bra NZ, . + 0x6 - 5a8: 14 00 05 retlw.w #0x1, w4 - -000005aa : - 5aa: 85 02 e9 dec.w w5, w5 - -000005ac : - 5ac: 00 00 40 add.w w0, w0, w0 - 5ae: 81 c0 48 addc.b w1, w1, w1 - 5b0: fc ff 3b bra NN, . + 0xFFFFFFFA - 5b2: 01 70 a0 bset.w w1, #0x7 - 5b4: 24 00 05 retlw.w #0x2, w4 - -000005b6 <__dPropagateNaN>: - 5b6: e4 82 40 add.w w1, #0x4, w5 - 5b8: 10 78 a3 btst.z [w0], #0x7 - 5ba: 07 00 32 bra Z, . + 0x10 - 5bc: 64 02 40 add.w w0, #0x4, w4 - 5be: 11 78 a3 btst.z [w1], #0x7 - 5c0: 34 00 be mov.d [w4++], w0 - 5c2: 14 01 be mov.d [w4], w2 - 5c4: 04 00 32 bra Z, . + 0xA - 5c6: 03 30 a7 btsc.w w3, #0x3 - 5c8: 00 00 06 return - -000005ca : - 5ca: 35 00 be mov.d [w5++], w0 - 5cc: 15 01 be mov.d [w5], w2 - -000005ce : - 5ce: 03 30 a0 bset.w w3, #0x3 - 5d0: 00 00 06 return - -000005d2 <_end>: - 5d2: ff ff 37 bra . - -000005d4 <_main>: - 5d4: 06 00 22 mov.w #0x2000, w6 - 5d6: 07 00 20 mov.w #0x0, w7 - 5d8: 04 00 24 mov.w #0x4000, w4 - 5da: c5 69 24 mov.w #0x469c, w5 - 5dc: 02 00 20 mov.w #0x0, w2 - 5de: 03 14 24 mov.w #0x4140, w3 - 5e0: 60 00 b8 mul.uu w0, #0x0, w0 - 5e2: 03 09 07 rcall . + 0x1208 - 5e4: 80 02 eb clr.w w5 - 5e6: 34 00 20 mov.w #0x3, w4 - 5e8: 85 01 78 mov.w w5, w3 - 5ea: 92 06 20 mov.w #0x69, w2 - 5ec: 81 a4 29 mov.w #0x9a48, w1 - 5ee: 60 5f 20 mov.w #0x5f6, w0 - 5f0: c3 04 07 rcall . + 0x988 - 5f2: 67 05 07 rcall . + 0xAD0 - 5f4: 00 00 05 retlw.w #0x0, w0 - -000005f6 <_vDaemonTask>: - 5f6: 2f 02 b0 add.w #0x22, w15 - 5f8: 88 9f be mov.d w8, [w15++] - 5fa: 8a 9f be mov.d w10, [w15++] - 5fc: 8c 9f be mov.d w12, [w15++] - 5fe: 8e 1f 78 mov.w w14, [w15++] - 600: 60 00 b8 mul.uu w0, #0x0, w0 - 602: d0 af 9f mov.w w0, [w15-38] - 604: e1 af 9f mov.w w1, [w15-36] - 606: 60 00 b8 mul.uu w0, #0x0, w0 - 608: 60 11 b8 mul.uu w2, #0x0, w2 - 60a: 90 b7 9f mov.w w0, [w15-30] - 60c: a1 b7 9f mov.w w1, [w15-28] - 60e: b2 b7 9f mov.w w2, [w15-26] - 610: c3 b7 9f mov.w w3, [w15-24] - 612: 80 04 eb clr.w w9 - 614: 99 af 9f mov.w w9, [w15-46] - 616: a9 af 9f mov.w w9, [w15-44] - 618: 89 00 78 mov.w w9, w1 - 61a: 09 00 78 mov.w w9, w0 - 61c: 4c 07 07 rcall . + 0xE9A - 61e: 00 04 78 mov.w w0, w8 - 620: 00 00 e0 cp0.w w0 - 622: 99 00 35 bra LT, . + 0x134 - 624: 89 03 78 mov.w w9, w7 - 626: 09 03 78 mov.w w9, w6 - 628: 89 02 78 mov.w w9, w5 - 62a: 09 02 78 mov.w w9, w4 - 62c: 89 00 78 mov.w w9, w1 - 62e: 12 00 20 mov.w #0x1, w2 - 630: 03 00 20 mov.w #0x0, w3 - 632: 08 00 78 mov.w w8, w0 - 634: 6e 07 07 rcall . + 0xEDE - 636: 00 00 e0 cp0.w w0 - 638: 9a 00 35 bra LT, . + 0x136 - -0000063a <.L14>: - 63a: 41 00 20 mov.w #0x4, w1 - 63c: f2 01 20 mov.w #0x1f, w2 - 63e: 03 00 20 mov.w #0x0, w3 - 640: 08 00 78 mov.w w8, w0 - 642: d1 07 07 rcall . + 0xFA4 - 644: 31 00 20 mov.w #0x3, w1 - 646: 12 00 20 mov.w #0x1, w2 - 648: 03 00 20 mov.w #0x0, w3 - 64a: 08 00 78 mov.w w8, w0 - 64c: cc 07 07 rcall . + 0xF9A - 64e: 00 00 e0 cp0.w w0 - 650: 9b 00 35 bra LT, . + 0x138 - -00000652 <.L16>: - 652: 08 00 78 mov.w w8, w0 - 654: a9 07 07 rcall . + 0xF54 - 656: 00 00 e0 cp0.w w0 - 658: 9c 00 35 bra LT, . + 0x13A - -0000065a <.L18>: - 65a: f0 09 07 rcall . + 0x13E2 - 65c: 20 fd 2f mov.w #0xffd2, w0 - 65e: 0f 00 40 add.w w0, w15, w0 - 660: 80 85 e8 inc2.w w0, w11 - 662: fe 84 57 sub.w w15, #0x1e, w9 - 664: 68 06 40 add.w w0, #0x8, w12 - 666: ef 86 57 sub.w w15, #0xf, w13 - 668: 77 85 57 sub.w w15, #0x17, w10 - 66a: 64 07 40 add.w w0, #0x4, w14 - -0000066c <.L51>: - 66c: d3 03 07 rcall . + 0x7A8 - 66e: b0 af 9f mov.w w0, [w15-42] - 670: c1 af 9f mov.w w1, [w15-40] - 672: 80 02 eb clr.w w5 - 674: 0b 02 78 mov.w w11, w4 - 676: 23 fd 2f mov.w #0xffd2, w3 - 678: 8f 81 41 add.w w3, w15, w3 - 67a: 09 01 78 mov.w w9, w2 - 67c: 8c 00 78 mov.w w12, w1 - 67e: 08 00 78 mov.w w8, w0 - 680: ff 07 07 rcall . + 0x1000 - 682: 00 00 e0 cp0.w w0 - 684: 1e 00 35 bra LT, . + 0x3E - -00000686 <.L57>: - 686: 5f a8 97 mov.w [w15-38], w0 - 688: ef a8 97 mov.w [w15-36], w1 - 68a: 4b 09 dd sl.w w1, #0xb, w2 - 68c: 45 00 de lsr.w w0, #0x5, w0 - 68e: 00 00 71 ior.w w2, w0, w0 - 690: c5 88 de asr.w w1, #0x5, w1 - 692: f0 0f 50 sub.w w0, #0x10, [w15] - 694: e0 8f 58 subb.w w1, #0x0, [w15] - 696: 48 00 32 bra Z, . + 0x92 - 698: 1c 00 3c bra GT, . + 0x3A - 69a: e2 0f 50 sub.w w0, #0x2, [w15] - 69c: e0 8f 58 subb.w w1, #0x0, [w15] - 69e: 55 00 32 bra Z, . + 0xAC - 6a0: e3 0f 50 sub.w w0, #0x3, [w15] - 6a2: e0 8f 58 subb.w w1, #0x0, [w15] - 6a4: 13 00 32 bra Z, . + 0x28 - -000006a6 <.L23>: - 6a6: 95 ff 07 rcall . + 0xFFFFFF2C - 6a8: b5 03 07 rcall . + 0x76C - 6aa: b0 af 9f mov.w w0, [w15-42] - 6ac: c1 af 9f mov.w w1, [w15-40] - 6ae: 80 02 eb clr.w w5 - 6b0: 0b 02 78 mov.w w11, w4 - 6b2: 23 fd 2f mov.w #0xffd2, w3 - 6b4: 8f 81 41 add.w w3, w15, w3 - 6b6: 09 01 78 mov.w w9, w2 - 6b8: 8c 00 78 mov.w w12, w1 - 6ba: 08 00 78 mov.w w8, w0 - 6bc: e1 07 07 rcall . + 0xFC4 - 6be: 00 00 e0 cp0.w w0 - 6c0: e2 ff 3d bra GE, . + 0xFFFFFFC6 - -000006c2 <.L21>: - 6c2: 12 00 20 mov.w #0x1, w2 - 6c4: 03 00 20 mov.w #0x0, w3 - 6c6: 0e 00 78 mov.w w14, w0 - 6c8: 68 03 07 rcall . + 0x6D2 - 6ca: d0 ff 37 bra . + 0xFFFFFFA2 - -000006cc <.L26>: - 6cc: b9 09 07 rcall . + 0x1374 - 6ce: a0 08 07 rcall . + 0x1142 - 6d0: cd ff 37 bra . + 0xFFFFFF9C - -000006d2 <.L31>: - 6d2: 02 03 20 mov.w #0x30, w2 - 6d4: 82 0f 50 sub.w w0, w2, [w15] - 6d6: e0 8f 58 subb.w w1, #0x0, [w15] - 6d8: 35 00 32 bra Z, . + 0x6C - 6da: 12 03 20 mov.w #0x31, w2 - 6dc: 82 0f 50 sub.w w0, w2, [w15] - 6de: e0 8f 58 subb.w w1, #0x0, [w15] - 6e0: 37 00 32 bra Z, . + 0x70 - 6e2: 02 02 20 mov.w #0x20, w2 - 6e4: 82 0f 50 sub.w w0, w2, [w15] - 6e6: e0 8f 58 subb.w w1, #0x0, [w15] - 6e8: de ff 3a bra NZ, . + 0xFFFFFFBE - 6ea: aa 09 07 rcall . + 0x1356 - 6ec: 2f a8 97 mov.w [w15-44], w0 - 6ee: 00 00 e0 cp0.w w0 - 6f0: bd ff 32 bra Z, . + 0xFFFFFF7C - 6f2: f7 08 07 rcall . + 0x11F0 - 6f4: f0 af 9f mov.w w0, [w15-34] - 6f6: 81 b7 9f mov.w w1, [w15-32] - 6f8: a3 08 07 rcall . + 0x1148 - 6fa: e1 fd 2f mov.w #0xffde, w1 - 6fc: 8f 80 40 add.w w1, w15, w1 - 6fe: 7b 80 57 sub.w w15, #0x1b, w0 - -00000700 <.L35>: - 700: 31 48 78 mov.b [w1++], [w0] - 702: 00 00 e9 dec.w w0, w0 - 704: 7f 81 57 sub.w w15, #0x1f, w2 - 706: 82 0f 50 sub.w w0, w2, [w15] - 708: fb ff 3a bra NZ, . + 0xFFFFFFF8 - 70a: 82 da 20 mov.w #0xda8, w2 - 70c: 67 80 44 add.w w9, #0x7, w0 - 70e: e3 80 44 add.w w9, #0x3, w1 - -00000710 <.L37>: - 710: 32 48 78 mov.b [w2++], [w0] - 712: 00 00 e9 dec.w w0, w0 - 714: 81 0f 50 sub.w w0, w1, [w15] - 716: fc ff 3a bra NZ, . + 0xFFFFFFFA - 718: 25 00 20 mov.w #0x2, w5 - 71a: 84 00 20 mov.w #0x8, w4 - 71c: 89 00 78 mov.w w9, w1 - 71e: 5f a9 97 mov.w [w15-38], w2 - 720: ef a9 97 mov.w [w15-36], w3 - 722: 08 00 78 mov.w w8, w0 - 724: f9 07 07 rcall . + 0xFF4 - 726: a2 ff 37 bra . + 0xFFFFFF46 - -00000728 <.L27>: - 728: 8b 09 07 rcall . + 0x1318 - 72a: 89 00 78 mov.w w9, w1 - 72c: 0d 00 78 mov.w w13, w0 - -0000072e <.L32>: - 72e: 31 48 78 mov.b [w1++], [w0] - 730: 00 00 e9 dec.w w0, w0 - 732: 8a 0f 50 sub.w w0, w10, [w15] - 734: fc ff 3a bra NZ, . + 0xFFFFFFFA - 736: 5f b0 97 mov.w [w15-22], w0 - 738: ef b0 97 mov.w [w15-20], w1 - 73a: 7f b1 97 mov.w [w15-18], w2 - 73c: 8f b9 97 mov.w [w15-16], w3 - 73e: 42 fd 07 rcall . + 0xFFFFFA86 - 740: f7 08 07 rcall . + 0x11F0 - 742: 94 ff 37 bra . + 0xFFFFFF2A - -00000744 <.L29>: - 744: 7d 09 07 rcall . + 0x12FC - 746: 66 08 07 rcall . + 0x10CE - 748: 91 ff 37 bra . + 0xFFFFFF24 - -0000074a <.L25>: - 74a: 7a 09 07 rcall . + 0x12F6 - 74c: f0 08 07 rcall . + 0x11E2 - 74e: 8e ff 37 bra . + 0xFFFFFF1E - -00000750 <.L30>: - 750: 77 09 07 rcall . + 0x12F0 - 752: ec 08 07 rcall . + 0x11DA - 754: 8b ff 37 bra . + 0xFFFFFF18 - -00000756 <.L53>: - 756: 3d ff 07 rcall . + 0xFFFFFE7C - 758: 89 03 78 mov.w w9, w7 - 75a: 09 03 78 mov.w w9, w6 - 75c: 89 02 78 mov.w w9, w5 - 75e: 09 02 78 mov.w w9, w4 - 760: 89 00 78 mov.w w9, w1 - 762: 12 00 20 mov.w #0x1, w2 - 764: 03 00 20 mov.w #0x0, w3 - 766: 08 00 78 mov.w w8, w0 - 768: d4 06 07 rcall . + 0xDAA - 76a: 00 00 e0 cp0.w w0 - 76c: 66 ff 3d bra GE, . + 0xFFFFFECE - -0000076e <.L54>: - 76e: 31 ff 07 rcall . + 0xFFFFFE64 - 770: 41 00 20 mov.w #0x4, w1 - 772: f2 01 20 mov.w #0x1f, w2 - 774: 03 00 20 mov.w #0x0, w3 - 776: 08 00 78 mov.w w8, w0 - 778: 36 07 07 rcall . + 0xE6E - 77a: 31 00 20 mov.w #0x3, w1 - 77c: 12 00 20 mov.w #0x1, w2 - 77e: 03 00 20 mov.w #0x0, w3 - 780: 08 00 78 mov.w w8, w0 - 782: 31 07 07 rcall . + 0xE64 - 784: 00 00 e0 cp0.w w0 - 786: 65 ff 3d bra GE, . + 0xFFFFFECC - -00000788 <.L55>: - 788: 24 ff 07 rcall . + 0xFFFFFE4A - 78a: 08 00 78 mov.w w8, w0 - 78c: 0d 07 07 rcall . + 0xE1C - 78e: 00 00 e0 cp0.w w0 - 790: 64 ff 3d bra GE, . + 0xFFFFFECA - -00000792 <.L56>: - 792: 1f ff 07 rcall . + 0xFFFFFE40 - 794: 53 09 07 rcall . + 0x12A8 - 796: 20 fd 2f mov.w #0xffd2, w0 - 798: 0f 00 40 add.w w0, w15, w0 - 79a: 80 85 e8 inc2.w w0, w11 - 79c: fe 84 57 sub.w w15, #0x1e, w9 - 79e: 68 06 40 add.w w0, #0x8, w12 - 7a0: ef 86 57 sub.w w15, #0xf, w13 - 7a2: 77 85 57 sub.w w15, #0x17, w10 - 7a4: 64 07 40 add.w w0, #0x4, w14 - 7a6: 62 ff 37 bra . + 0xFFFFFEC6 - -000007a8 <_vListInitialise>: - 7a8: e4 00 40 add.w w0, #0x4, w1 - 7aa: 11 00 98 mov.w w1, [w0+2] - 7ac: 80 98 eb setm.w [w1++] - 7ae: 80 90 eb setm.w [w1--] - 7b0: 41 00 98 mov.w w1, [w0+8] - 7b2: 51 00 98 mov.w w1, [w0+10] - 7b4: 00 08 eb clr.w [w0] - 7b6: 00 00 06 return - -000007b8 <_vListInitialiseItem>: - 7b8: 80 00 eb clr.w w1 - 7ba: 51 00 98 mov.w w1, [w0+10] - 7bc: 00 00 06 return - -000007be <_vListInsertEnd>: - 7be: 10 01 90 mov.w [w0+2], w2 - 7c0: a2 01 90 mov.w [w2+4], w3 - 7c2: a3 00 98 mov.w w3, [w1+4] - 7c4: b2 00 98 mov.w w2, [w1+6] - 7c6: a2 01 90 mov.w [w2+4], w3 - 7c8: b1 01 98 mov.w w1, [w3+6] - 7ca: 21 01 98 mov.w w1, [w2+4] - 7cc: 11 00 98 mov.w w1, [w0+2] - 7ce: d0 00 98 mov.w w0, [w1+10] - 7d0: 10 08 e8 inc.w [w0], [w0] - 7d2: 00 00 06 return - -000007d4 <_vListInsert>: - 7d4: 80 01 78 mov.w w0, w3 - 7d6: 11 02 be mov.d [w1], w4 - 7d8: e1 0f 42 add.w w4, #0x1, [w15] - 7da: e0 8f 4a addc.w w5, #0x0, [w15] - 7dc: 18 00 32 bra Z, . + 0x32 - 7de: 64 01 40 add.w w0, #0x4, w2 - 7e0: 22 00 90 mov.w [w2+4], w0 - 7e2: b0 0f 52 sub.w w4, [w0++], [w15] - 7e4: a0 8f 5a subb.w w5, [w0--], [w15] - 7e6: 08 00 31 bra C, . + 0x12 - -000007e8 <.L16>: - 7e8: 22 00 90 mov.w [w2+4], w0 - 7ea: a0 00 98 mov.w w0, [w1+4] - 7ec: 31 00 98 mov.w w1, [w0+6] - 7ee: b2 00 98 mov.w w2, [w1+6] - 7f0: 21 01 98 mov.w w1, [w2+4] - 7f2: d3 00 98 mov.w w3, [w1+10] - 7f4: 93 09 e8 inc.w [w3], [w3] - 7f6: 00 00 06 return - -000007f8 <.L19>: - 7f8: 22 01 90 mov.w [w2+4], w2 - 7fa: 22 00 90 mov.w [w2+4], w0 - 7fc: b0 0f 52 sub.w w4, [w0++], [w15] - 7fe: a0 8f 5a subb.w w5, [w0--], [w15] - 800: f3 ff 39 bra NC, . + 0xFFFFFFE8 - 802: 22 01 90 mov.w [w2+4], w2 - 804: 22 00 90 mov.w [w2+4], w0 - 806: b0 0f 52 sub.w w4, [w0++], [w15] - 808: a0 8f 5a subb.w w5, [w0--], [w15] - 80a: f6 ff 31 bra C, . + 0xFFFFFFEE - 80c: ed ff 37 bra . + 0xFFFFFFDC - -0000080e <.L23>: - 80e: 50 01 90 mov.w [w0+10], w2 - 810: 22 00 90 mov.w [w2+4], w0 - 812: a0 00 98 mov.w w0, [w1+4] - 814: 31 00 98 mov.w w1, [w0+6] - 816: b2 00 98 mov.w w2, [w1+6] - 818: 21 01 98 mov.w w1, [w2+4] - 81a: d3 00 98 mov.w w3, [w1+10] - 81c: 93 09 e8 inc.w [w3], [w3] - 81e: 00 00 06 return - 820: eb ff 37 bra . + 0xFFFFFFD8 - -00000822 <_vListRemove>: - 822: 80 00 78 mov.w w0, w1 - 824: 20 00 90 mov.w [w0+4], w0 - 826: 31 01 90 mov.w [w1+6], w2 - 828: 32 00 98 mov.w w2, [w0+6] - 82a: b1 01 90 mov.w [w1+6], w3 - 82c: a0 01 98 mov.w w0, [w3+4] - 82e: 51 01 90 mov.w [w1+10], w2 - 830: 12 00 90 mov.w [w2+2], w0 - 832: 81 0f 50 sub.w w0, w1, [w15] - 834: 04 00 32 bra Z, . + 0xA - 836: 00 00 eb clr.w w0 - 838: d0 00 98 mov.w w0, [w1+10] - 83a: 12 09 e9 dec.w [w2], [w2] - 83c: 00 00 06 return - -0000083e <.L31>: - 83e: 13 01 98 mov.w w3, [w2+2] - 840: 00 00 eb clr.w w0 - 842: d0 00 98 mov.w w0, [w1+10] - 844: 12 09 e9 dec.w [w2], [w2] - 846: 00 00 06 return - 848: fa ff 37 bra . + 0xFFFFFFF6 - -0000084a <_xQueueCreate>: - 84a: 88 9f be mov.d w8, [w15++] - 84c: 8a 9f be mov.d w10, [w15++] - 84e: 8c 1f 78 mov.w w12, [w15++] - 850: 80 04 78 mov.w w0, w9 - 852: 01 05 78 mov.w w1, w10 - 854: 00 00 e0 cp0.w w0 - 856: 05 00 3a bra NZ, . + 0xC - -00000858 <.L2>: - 858: 00 00 20 mov.w #0x0, w0 - 85a: 4f 06 78 mov.w [--w15], w12 - 85c: 4f 05 be mov.d [--w15], w10 - 85e: 4f 04 be mov.d [--w15], w8 - 860: 00 00 06 return - -00000862 <.L10>: - 862: a0 02 20 mov.w #0x2a, w0 - 864: 0a 06 07 rcall . + 0xC16 - 866: 00 04 78 mov.w w0, w8 - 868: 00 00 e0 cp0.w w0 - 86a: f6 ff 32 bra Z, . + 0xFFFFFFEE - 86c: 0a c8 b9 mul.ss w9, w10, w0 - 86e: 00 06 78 mov.w w0, w12 - 870: 00 00 e8 inc.w w0, w0 - 872: 03 06 07 rcall . + 0xC08 - 874: 80 05 78 mov.w w0, w11 - 876: 00 0c 78 mov.w w0, [w8] - 878: 00 00 e0 cp0.w w0 - 87a: 18 00 32 bra Z, . + 0x32 - 87c: 0c 00 40 add.w w0, w12, w0 - 87e: 10 04 98 mov.w w0, [w8+2] - 880: 00 00 eb clr.w w0 - 882: 00 14 98 mov.w w0, [w8+32] - 884: 2b 04 98 mov.w w11, [w8+4] - 886: 09 00 e9 dec.w w9, w0 - 888: 00 d0 b9 mul.ss w10, w0, w0 - 88a: 00 80 45 add.w w11, w0, w0 - 88c: 30 04 98 mov.w w0, [w8+6] - 88e: 19 14 98 mov.w w9, [w8+34] - 890: 2a 14 98 mov.w w10, [w8+36] - 892: 00 80 eb setm.w w0 - 894: 30 14 98 mov.w w0, [w8+38] - 896: 40 14 98 mov.w w0, [w8+40] - 898: 68 00 44 add.w w8, #0x8, w0 - 89a: 86 ff 07 rcall . + 0xFFFFFF0E - 89c: 74 00 44 add.w w8, #0x14, w0 - 89e: 84 ff 07 rcall . + 0xFFFFFF0A - 8a0: 08 00 78 mov.w w8, w0 - 8a2: 4f 06 78 mov.w [--w15], w12 - 8a4: 4f 05 be mov.d [--w15], w10 - 8a6: 4f 04 be mov.d [--w15], w8 - 8a8: 00 00 06 return - 8aa: db ff 37 bra . + 0xFFFFFFB8 - -000008ac <.L5>: - 8ac: 08 00 78 mov.w w8, w0 - 8ae: 00 06 07 rcall . + 0xC02 - 8b0: 0b 00 78 mov.w w11, w0 - 8b2: 4f 06 78 mov.w [--w15], w12 - 8b4: 4f 05 be mov.d [--w15], w10 - 8b6: 4f 04 be mov.d [--w15], w8 - 8b8: 00 00 06 return - 8ba: d3 ff 37 bra . + 0xFFFFFFA8 - -000008bc <_uxQueueMessagesWaiting>: - 8bc: 88 1f 78 mov.w w8, [w15++] - 8be: 00 04 78 mov.w w0, w8 - 8c0: c1 05 07 rcall . + 0xB84 - 8c2: 08 14 90 mov.w [w8+32], w8 - 8c4: c2 05 07 rcall . + 0xB86 - 8c6: 08 00 78 mov.w w8, w0 - 8c8: 4f 04 78 mov.w [--w15], w8 - 8ca: 00 00 06 return - -000008cc <_vQueueDelete>: - 8cc: 88 1f 78 mov.w w8, [w15++] - 8ce: 00 04 78 mov.w w0, w8 - 8d0: 10 00 78 mov.w [w0], w0 - 8d2: ee 05 07 rcall . + 0xBDE - 8d4: 08 00 78 mov.w w8, w0 - 8d6: ec 05 07 rcall . + 0xBDA - 8d8: 4f 04 78 mov.w [--w15], w8 - 8da: 00 00 06 return - -000008dc <_prvCopyDataFromQueue>: - 8dc: 80 01 78 mov.w w0, w3 - 8de: 01 02 78 mov.w w1, w4 - 8e0: 10 00 e0 cp0.w [w0] - 8e2: 0a 00 32 bra Z, . + 0x16 - 8e4: 30 00 90 mov.w [w0+6], w0 - 8e6: 23 11 90 mov.w [w3+36], w2 - 8e8: 02 00 40 add.w w0, w2, w0 - 8ea: b0 01 98 mov.w w0, [w3+6] - 8ec: 93 00 90 mov.w [w3+2], w1 - 8ee: 81 0f 50 sub.w w0, w1, [w15] - 8f0: 04 00 31 bra C, . + 0xA - 8f2: b3 00 90 mov.w [w3+6], w1 - 8f4: 04 00 78 mov.w w4, w0 - 8f6: 48 fc 07 rcall . + 0xFFFFF892 - -000008f8 <.L26>: - 8f8: 00 00 06 return - -000008fa <.L28>: - 8fa: 13 00 78 mov.w [w3], w0 - 8fc: b0 01 98 mov.w w0, [w3+6] - 8fe: b3 00 90 mov.w [w3+6], w1 - 900: 04 00 78 mov.w w4, w0 - 902: 42 fc 07 rcall . + 0xFFFFF886 - 904: f9 ff 37 bra . + 0xFFFFFFF4 - -00000906 <_xQueueReceiveFromISR>: - 906: 88 9f be mov.d w8, [w15++] - 908: 00 04 78 mov.w w0, w8 - 90a: 82 04 78 mov.w w2, w9 - 90c: 00 10 90 mov.w [w0+32], w0 - 90e: 00 00 e0 cp0.w w0 - 910: 02 00 3a bra NZ, . + 0x6 - 912: 4f 04 be mov.d [--w15], w8 - 914: 00 00 06 return - -00000916 <.L42>: - 916: 08 00 78 mov.w w8, w0 - 918: e1 ff 07 rcall . + 0xFFFFFFC4 - 91a: 08 10 90 mov.w [w8+32], w0 - 91c: 00 00 e9 dec.w w0, w0 - 91e: 00 14 98 mov.w w0, [w8+32] - 920: 38 10 90 mov.w [w8+38], w0 - 922: e1 0f 40 add.w w0, #0x1, [w15] - 924: 06 00 32 bra Z, . + 0xE - 926: 00 00 e8 inc.w w0, w0 - 928: 30 14 98 mov.w w0, [w8+38] - 92a: 10 00 20 mov.w #0x1, w0 - 92c: 4f 04 be mov.d [--w15], w8 - 92e: 00 00 06 return - 930: f2 ff 37 bra . + 0xFFFFFFE6 - -00000932 <.L43>: - 932: 19 00 e0 cp0.w [w9] - 934: 03 00 3a bra NZ, . + 0x8 - 936: 48 00 90 mov.w [w8+8], w0 - 938: 00 00 e0 cp0.w w0 - 93a: 04 00 3a bra NZ, . + 0xA - -0000093c <.L36>: - 93c: 10 00 20 mov.w #0x1, w0 - 93e: 4f 04 be mov.d [--w15], w8 - 940: 00 00 06 return - 942: e9 ff 37 bra . + 0xFFFFFFD4 - -00000944 <.L44>: - 944: 68 00 44 add.w w8, #0x8, w0 - 946: b7 02 07 rcall . + 0x570 - 948: 00 00 e0 cp0.w w0 - 94a: f8 ff 32 bra Z, . + 0xFFFFFFF2 - 94c: 10 00 20 mov.w #0x1, w0 - 94e: 80 0c 78 mov.w w0, [w9] - 950: 4f 04 be mov.d [--w15], w8 - 952: 00 00 06 return - 954: e0 ff 37 bra . + 0xFFFFFFC2 - -00000956 <_prvCopyDataToQueue>: - 956: 88 1f 78 mov.w w8, [w15++] - 958: 00 04 78 mov.w w0, w8 - 95a: 02 00 78 mov.w w2, w0 - 95c: 28 11 90 mov.w [w8+36], w2 - 95e: 02 00 e0 cp0.w w2 - 960: 0d 00 32 bra Z, . + 0x1C - 962: 00 00 e0 cp0.w w0 - 964: 10 00 32 bra Z, . + 0x22 - 966: 38 00 90 mov.w [w8+6], w0 - 968: 0f fc 07 rcall . + 0xFFFFF820 - 96a: 38 00 90 mov.w [w8+6], w0 - 96c: a8 10 90 mov.w [w8+36], w1 - 96e: 01 00 50 sub.w w0, w1, w0 - 970: 30 04 98 mov.w w0, [w8+6] - 972: 98 0f 50 sub.w w0, [w8], [w15] - 974: 03 00 31 bra C, . + 0x8 - 976: 18 00 90 mov.w [w8+2], w0 - 978: 01 00 50 sub.w w0, w1, w0 - 97a: 30 04 98 mov.w w0, [w8+6] - -0000097c <.L48>: - 97c: 08 10 90 mov.w [w8+32], w0 - 97e: 00 00 e8 inc.w w0, w0 - 980: 00 14 98 mov.w w0, [w8+32] - 982: 4f 04 78 mov.w [--w15], w8 - 984: 00 00 06 return - -00000986 <.L56>: - 986: 28 00 90 mov.w [w8+4], w0 - 988: ff fb 07 rcall . + 0xFFFFF800 - 98a: 28 00 90 mov.w [w8+4], w0 - 98c: a8 10 90 mov.w [w8+36], w1 - 98e: 01 00 40 add.w w0, w1, w0 - 990: 20 04 98 mov.w w0, [w8+4] - 992: 98 00 90 mov.w [w8+2], w1 - 994: 81 0f 50 sub.w w0, w1, [w15] - 996: f2 ff 39 bra NC, . + 0xFFFFFFE6 - 998: 18 00 78 mov.w [w8], w0 - 99a: 20 04 98 mov.w w0, [w8+4] - 99c: 08 10 90 mov.w [w8+32], w0 - 99e: 00 00 e8 inc.w w0, w0 - 9a0: 00 14 98 mov.w w0, [w8+32] - 9a2: 4f 04 78 mov.w [--w15], w8 - 9a4: 00 00 06 return - 9a6: ef ff 37 bra . + 0xFFFFFFE0 - -000009a8 <_xQueueGenericSendFromISR>: - 9a8: 88 9f be mov.d w8, [w15++] - 9aa: 00 04 78 mov.w w0, w8 - 9ac: 01 02 78 mov.w w1, w4 - 9ae: 82 04 78 mov.w w2, w9 - 9b0: 03 01 78 mov.w w3, w2 - 9b2: 80 10 90 mov.w [w0+32], w1 - 9b4: 10 10 90 mov.w [w0+34], w0 - 9b6: 80 8f 50 sub.w w1, w0, [w15] - 9b8: 03 00 39 bra NC, . + 0x8 - -000009ba <.L60>: - 9ba: 09 00 78 mov.w w9, w0 - 9bc: 4f 04 be mov.d [--w15], w8 - 9be: 00 00 06 return - -000009c0 <.L72>: - 9c0: 84 00 78 mov.w w4, w1 - 9c2: 08 00 78 mov.w w8, w0 - 9c4: c8 ff 07 rcall . + 0xFFFFFF92 - 9c6: 48 10 90 mov.w [w8+40], w0 - 9c8: e1 0f 40 add.w w0, #0x1, [w15] - 9ca: 06 00 32 bra Z, . + 0xE - 9cc: 00 00 e8 inc.w w0, w0 - 9ce: 40 14 98 mov.w w0, [w8+40] - 9d0: 09 00 78 mov.w w9, w0 - 9d2: 4f 04 be mov.d [--w15], w8 - 9d4: 00 00 06 return - 9d6: f4 ff 37 bra . + 0xFFFFFFEA - -000009d8 <.L73>: - 9d8: 09 00 e0 cp0.w w9 - 9da: ef ff 3a bra NZ, . + 0xFFFFFFE0 - 9dc: 28 08 90 mov.w [w8+20], w0 - 9de: 00 00 e0 cp0.w w0 - 9e0: 04 00 3a bra NZ, . + 0xA - -000009e2 <.L65>: - 9e2: 00 00 20 mov.w #0x0, w0 - 9e4: 4f 04 be mov.d [--w15], w8 - 9e6: 00 00 06 return - 9e8: eb ff 37 bra . + 0xFFFFFFD8 - -000009ea <.L74>: - 9ea: 74 00 44 add.w w8, #0x14, w0 - 9ec: 64 02 07 rcall . + 0x4CA - 9ee: 11 00 20 mov.w #0x1, w1 - 9f0: 00 00 e0 cp0.w w0 - 9f2: f7 ff 32 bra Z, . + 0xFFFFFFF0 - 9f4: 01 00 78 mov.w w1, w0 - 9f6: 4f 04 be mov.d [--w15], w8 - 9f8: 00 00 06 return - 9fa: e2 ff 37 bra . + 0xFFFFFFC6 - -000009fc <_prvUnlockQueue>: - 9fc: 88 1f 78 mov.w w8, [w15++] - 9fe: 00 04 78 mov.w w0, w8 - a00: 21 05 07 rcall . + 0xA44 - a02: 48 10 90 mov.w [w8+40], w0 - a04: 00 00 e9 dec.w w0, w0 - a06: 40 14 98 mov.w w0, [w8+40] - a08: e1 0f 40 add.w w0, #0x1, [w15] - a0a: 05 00 34 bra LE, . + 0xC - a0c: 00 80 eb setm.w w0 - a0e: 40 14 98 mov.w w0, [w8+40] - a10: 28 08 90 mov.w [w8+20], w0 - a12: 00 00 e0 cp0.w w0 - a14: 18 00 3a bra NZ, . + 0x32 - -00000a16 <.L78>: - a16: 19 05 07 rcall . + 0xA34 - a18: 15 05 07 rcall . + 0xA2C - a1a: 38 10 90 mov.w [w8+38], w0 - a1c: 00 00 e9 dec.w w0, w0 - a1e: 30 14 98 mov.w w0, [w8+38] - a20: e1 0f 40 add.w w0, #0x1, [w15] - a22: 05 00 34 bra LE, . + 0xC - a24: 00 80 eb setm.w w0 - a26: 30 14 98 mov.w w0, [w8+38] - a28: 48 00 90 mov.w [w8+8], w0 - a2a: 00 00 e0 cp0.w w0 - a2c: 03 00 3a bra NZ, . + 0x8 - -00000a2e <.L82>: - a2e: 0d 05 07 rcall . + 0xA1C - a30: 4f 04 78 mov.w [--w15], w8 - a32: 00 00 06 return - -00000a34 <.L89>: - a34: 68 00 44 add.w w8, #0x8, w0 - a36: 3f 02 07 rcall . + 0x480 - a38: 00 00 e0 cp0.w w0 - a3a: f9 ff 32 bra Z, . + 0xFFFFFFF4 - a3c: 99 02 07 rcall . + 0x534 - a3e: 05 05 07 rcall . + 0xA0C - a40: 4f 04 78 mov.w [--w15], w8 - a42: 00 00 06 return - a44: f7 ff 37 bra . + 0xFFFFFFF0 - -00000a46 <.L88>: - a46: 74 00 44 add.w w8, #0x14, w0 - a48: 36 02 07 rcall . + 0x46E - a4a: 00 00 e0 cp0.w w0 - a4c: e4 ff 32 bra Z, . + 0xFFFFFFCA - a4e: 90 02 07 rcall . + 0x522 - a50: e2 ff 37 bra . + 0xFFFFFFC6 - -00000a52 <_xQueueGenericReceive>: - a52: 0a 00 fa lnk #0xa - a54: 88 9f be mov.d w8, [w15++] - a56: 8a 9f be mov.d w10, [w15++] - a58: 8c 1f 78 mov.w w12, [w15++] - a5a: 80 04 78 mov.w w0, w9 - a5c: 81 05 78 mov.w w1, w11 - a5e: 92 bf 9f mov.w w2, [w15-14] - a60: a3 bf 9f mov.w w3, [w15-12] - a62: 04 06 78 mov.w w4, w12 - a64: f5 00 07 rcall . + 0x1EC - a66: 74 80 57 sub.w w15, #0x14, w0 - a68: 54 02 07 rcall . + 0x4AA - a6a: ec 04 07 rcall . + 0x9DA - a6c: 39 10 90 mov.w [w9+38], w0 - a6e: 00 00 e8 inc.w w0, w0 - a70: b0 14 98 mov.w w0, [w9+38] - a72: 49 10 90 mov.w [w9+40], w0 - a74: 00 00 e8 inc.w w0, w0 - a76: c0 14 98 mov.w w0, [w9+40] - a78: e8 04 07 rcall . + 0x9D2 - a7a: 1a 00 20 mov.w #0x1, w10 - -00000a7c <.L119>: - a7c: e3 04 07 rcall . + 0x9C8 - a7e: 09 14 90 mov.w [w9+32], w8 - a80: e4 04 07 rcall . + 0x9CA - a82: 08 00 e0 cp0.w w8 - a84: 05 00 3a bra NZ, . + 0xC - a86: 1f b9 97 mov.w [w15-14], w2 - a88: af b9 97 mov.w [w15-12], w3 - a8a: e0 0f 51 sub.w w2, #0x0, [w15] - a8c: e0 8f 59 subb.w w3, #0x0, [w15] - a8e: 21 00 3a bra NZ, . + 0x44 - -00000a90 <.L95>: - a90: 0a 00 e0 cp0.w w10 - a92: 0c 00 3a bra NZ, . + 0x1A - -00000a94 <.L102>: - a94: 1f b8 97 mov.w [w15-14], w0 - a96: af b8 97 mov.w [w15-12], w1 - a98: e0 0f 50 sub.w w0, #0x0, [w15] - a9a: e0 8f 58 subb.w w1, #0x0, [w15] - a9c: 44 00 32 bra Z, . + 0x8A - a9e: ee 80 57 sub.w w15, #0xe, w1 - aa0: 74 80 57 sub.w w15, #0x14, w0 - aa2: 3e 02 07 rcall . + 0x47E - aa4: 00 00 e0 cp0.w w0 - aa6: 3f 00 3a bra NZ, . + 0x80 - aa8: 00 85 eb setm.w w10 - aaa: e8 ff 37 bra . + 0xFFFFFFD2 - -00000aac <.L122>: - aac: cb 04 07 rcall . + 0x998 - aae: 09 10 90 mov.w [w9+32], w0 - ab0: 00 00 e0 cp0.w w0 - ab2: 2b 00 3a bra NZ, . + 0x58 - ab4: 00 05 78 mov.w w0, w10 - -00000ab6 <.L106>: - ab6: c9 04 07 rcall . + 0x994 - ab8: 0a 00 e0 cp0.w w10 - aba: ec ff 32 bra Z, . + 0xFFFFFFDA - abc: e1 0f 45 add.w w10, #0x1, [w15] - abe: de ff 32 bra Z, . + 0xFFFFFFBE - ac0: 09 00 78 mov.w w9, w0 - ac2: 9c ff 07 rcall . + 0xFFFFFF3A - ac4: 20 01 07 rcall . + 0x242 - ac6: 0a 00 78 mov.w w10, w0 - ac8: 4f 06 78 mov.w [--w15], w12 - aca: 4f 05 be mov.d [--w15], w10 - acc: 4f 04 be mov.d [--w15], w8 - ace: 00 80 fa ulnk - ad0: 00 00 06 return - -00000ad2 <.L121>: - ad2: 74 80 44 add.w w9, #0x14, w0 - ad4: d0 01 07 rcall . + 0x3A2 - ad6: b6 04 07 rcall . + 0x96E - ad8: 09 00 78 mov.w w9, w0 - ada: 90 ff 07 rcall . + 0xFFFFFF22 - adc: 14 01 07 rcall . + 0x22A - ade: 00 00 e0 cp0.w w0 - ae0: 03 00 3a bra NZ, . + 0x8 - ae2: ca 13 02 call 0x13ca <_vPortYield> - ae4: 00 00 00 - ae6: 00 00 00 nop - -00000ae8 <.L98>: - ae8: 09 10 90 mov.w [w9+32], w0 - aea: 00 00 e0 cp0.w w0 - aec: 01 00 3a bra NZ, . + 0x4 - aee: 00 05 78 mov.w w0, w10 - -00000af0 <.L100>: - af0: af 00 07 rcall . + 0x160 - af2: a8 04 07 rcall . + 0x952 - af4: 39 10 90 mov.w [w9+38], w0 - af6: 00 00 e8 inc.w w0, w0 - af8: b0 14 98 mov.w w0, [w9+38] - afa: 49 10 90 mov.w [w9+40], w0 - afc: 00 00 e8 inc.w w0, w0 - afe: c0 14 98 mov.w w0, [w9+40] - b00: a4 04 07 rcall . + 0x94A - b02: a3 04 07 rcall . + 0x948 - b04: 0a 00 e0 cp0.w w10 - b06: c6 ff 32 bra Z, . + 0xFFFFFF8E - b08: d1 ff 37 bra . + 0xFFFFFFA4 - -00000b0a <.L104>: - b0a: 39 04 90 mov.w [w9+6], w8 - b0c: 8b 00 78 mov.w w11, w1 - b0e: 09 00 78 mov.w w9, w0 - b10: e5 fe 07 rcall . + 0xFFFFFDCC - b12: 0c 00 e0 cp0.w w12 - b14: 13 00 3a bra NZ, . + 0x28 - b16: 09 10 90 mov.w [w9+32], w0 - b18: 00 00 e9 dec.w w0, w0 - b1a: 80 14 98 mov.w w0, [w9+32] - b1c: 39 10 90 mov.w [w9+38], w0 - b1e: 00 00 e8 inc.w w0, w0 - b20: b0 14 98 mov.w w0, [w9+38] - b22: 1a 00 20 mov.w #0x1, w10 - b24: c8 ff 37 bra . + 0xFFFFFF92 - -00000b26 <.L110>: - b26: 00 05 eb clr.w w10 - b28: 09 00 78 mov.w w9, w0 - b2a: 68 ff 07 rcall . + 0xFFFFFED2 - b2c: ec 00 07 rcall . + 0x1DA - b2e: 0a 00 78 mov.w w10, w0 - b30: 4f 06 78 mov.w [--w15], w12 - b32: 4f 05 be mov.d [--w15], w10 - b34: 4f 04 be mov.d [--w15], w8 - b36: 00 80 fa ulnk - b38: 00 00 06 return - b3a: cb ff 37 bra . + 0xFFFFFF98 - -00000b3c <.L107>: - b3c: b8 04 98 mov.w w8, [w9+6] - b3e: 49 10 90 mov.w [w9+40], w0 - b40: 00 00 e8 inc.w w0, w0 - b42: c0 14 98 mov.w w0, [w9+40] - b44: 1a 00 20 mov.w #0x1, w10 - b46: b7 ff 37 bra . + 0xFFFFFF70 - -00000b48 <_xQueueGenericSend>: - b48: 0a 00 fa lnk #0xa - b4a: 88 9f be mov.d w8, [w15++] - b4c: 8a 9f be mov.d w10, [w15++] - b4e: 8c 9f be mov.d w12, [w15++] - b50: 00 05 78 mov.w w0, w10 - b52: 01 06 78 mov.w w1, w12 - b54: 82 bf 9f mov.w w2, [w15-16] - b56: 93 bf 9f mov.w w3, [w15-14] - b58: 84 06 78 mov.w w4, w13 - b5a: 7a 00 07 rcall . + 0xF6 - b5c: 76 80 57 sub.w w15, #0x16, w0 - b5e: d9 01 07 rcall . + 0x3B4 - b60: 71 04 07 rcall . + 0x8E4 - b62: 3a 10 90 mov.w [w10+38], w0 - b64: 00 00 e8 inc.w w0, w0 - b66: 30 15 98 mov.w w0, [w10+38] - b68: 4a 10 90 mov.w [w10+40], w0 - b6a: 00 00 e8 inc.w w0, w0 - b6c: 40 15 98 mov.w w0, [w10+40] - b6e: 6d 04 07 rcall . + 0x8DC - b70: 1b 00 20 mov.w #0x1, w11 - -00000b72 <.L150>: - b72: 68 04 07 rcall . + 0x8D2 - b74: 8a 14 90 mov.w [w10+32], w9 - b76: 1a 14 90 mov.w [w10+34], w8 - b78: 68 04 07 rcall . + 0x8D2 - b7a: 88 8f 54 sub.w w9, w8, [w15] - b7c: 28 00 32 bra Z, . + 0x52 - -00000b7e <.L128>: - b7e: 0b 00 e0 cp0.w w11 - b80: 12 00 3a bra NZ, . + 0x26 - -00000b82 <.L135>: - b82: 0f b8 97 mov.w [w15-16], w0 - b84: 9f b8 97 mov.w [w15-14], w1 - b86: e0 0f 50 sub.w w0, #0x0, [w15] - b88: e0 8f 58 subb.w w1, #0x0, [w15] - b8a: 4b 00 32 bra Z, . + 0x98 - b8c: f0 80 57 sub.w w15, #0x10, w1 - b8e: 76 80 57 sub.w w15, #0x16, w0 - b90: c7 01 07 rcall . + 0x390 - b92: 00 00 e0 cp0.w w0 - b94: 46 00 3a bra NZ, . + 0x8E - b96: 80 85 eb setm.w w11 - b98: 55 04 07 rcall . + 0x8AC - b9a: 8a 14 90 mov.w [w10+32], w9 - b9c: 1a 14 90 mov.w [w10+34], w8 - b9e: 55 04 07 rcall . + 0x8AC - ba0: 88 8f 54 sub.w w9, w8, [w15] - ba2: ed ff 3a bra NZ, . + 0xFFFFFFDC - ba4: 14 00 37 bra . + 0x2A - -00000ba6 <.L153>: - ba6: 4e 04 07 rcall . + 0x89E - ba8: 8a 10 90 mov.w [w10+32], w1 - baa: 1a 10 90 mov.w [w10+34], w0 - bac: 80 05 eb clr.w w11 - bae: 80 8f 50 sub.w w1, w0, [w15] - bb0: 2f 00 39 bra NC, . + 0x60 - -00000bb2 <.L139>: - bb2: 4b 04 07 rcall . + 0x898 - bb4: 0b 00 e0 cp0.w w11 - bb6: e5 ff 32 bra Z, . + 0xFFFFFFCC - bb8: e1 8f 45 add.w w11, #0x1, [w15] - bba: db ff 32 bra Z, . + 0xFFFFFFB8 - bbc: 0a 00 78 mov.w w10, w0 - bbe: 1e ff 07 rcall . + 0xFFFFFE3E - bc0: a2 00 07 rcall . + 0x146 - bc2: 0b 00 78 mov.w w11, w0 - bc4: 4f 06 be mov.d [--w15], w12 - bc6: 4f 05 be mov.d [--w15], w10 - bc8: 4f 04 be mov.d [--w15], w8 - bca: 00 80 fa ulnk - bcc: 00 00 06 return - -00000bce <.L152>: - bce: 0f b9 97 mov.w [w15-16], w2 - bd0: 9f b9 97 mov.w [w15-14], w3 - bd2: e0 0f 51 sub.w w2, #0x0, [w15] - bd4: e0 8f 59 subb.w w3, #0x0, [w15] - bd6: d3 ff 32 bra Z, . + 0xFFFFFFA8 - bd8: 68 00 45 add.w w10, #0x8, w0 - bda: 4d 01 07 rcall . + 0x29C - bdc: 33 04 07 rcall . + 0x868 - bde: 0a 00 78 mov.w w10, w0 - be0: 0d ff 07 rcall . + 0xFFFFFE1C - be2: 91 00 07 rcall . + 0x124 - be4: 00 00 e0 cp0.w w0 - be6: 03 00 3a bra NZ, . + 0x8 - be8: ca 13 02 call 0x13ca <_vPortYield> - bea: 00 00 00 - bec: 00 00 00 nop - -00000bee <.L131>: - bee: 8a 10 90 mov.w [w10+32], w1 - bf0: 1a 10 90 mov.w [w10+34], w0 - bf2: 80 8f 50 sub.w w1, w0, [w15] - bf4: 21 00 32 bra Z, . + 0x44 - bf6: 2c 00 07 rcall . + 0x5A - bf8: 25 04 07 rcall . + 0x84C - bfa: 3a 10 90 mov.w [w10+38], w0 - bfc: 00 00 e8 inc.w w0, w0 - bfe: 30 15 98 mov.w w0, [w10+38] - c00: 4a 10 90 mov.w [w10+40], w0 - c02: 00 00 e8 inc.w w0, w0 - c04: 40 15 98 mov.w w0, [w10+40] - c06: 21 04 07 rcall . + 0x844 - c08: 20 04 07 rcall . + 0x842 - -00000c0a <.L156>: - c0a: 0b 00 e0 cp0.w w11 - c0c: ba ff 32 bra Z, . + 0xFFFFFF76 - c0e: cb ff 37 bra . + 0xFFFFFF98 - -00000c10 <.L154>: - c10: 0d 01 78 mov.w w13, w2 - c12: 8c 00 78 mov.w w12, w1 - c14: 0a 00 78 mov.w w10, w0 - c16: 9f fe 07 rcall . + 0xFFFFFD40 - c18: 4a 10 90 mov.w [w10+40], w0 - c1a: 00 00 e8 inc.w w0, w0 - c1c: 40 15 98 mov.w w0, [w10+40] - c1e: 1b 00 20 mov.w #0x1, w11 - c20: c8 ff 37 bra . + 0xFFFFFF92 - -00000c22 <.L141>: - c22: 80 05 eb clr.w w11 - c24: 0a 00 78 mov.w w10, w0 - c26: ea fe 07 rcall . + 0xFFFFFDD6 - c28: 6e 00 07 rcall . + 0xDE - c2a: 0b 00 78 mov.w w11, w0 - c2c: 4f 06 be mov.d [--w15], w12 - c2e: 4f 05 be mov.d [--w15], w10 - c30: 4f 04 be mov.d [--w15], w8 - c32: 00 80 fa ulnk - c34: 00 00 06 return - c36: cb ff 37 bra . + 0xFFFFFF98 - -00000c38 <.L155>: - c38: 80 05 eb clr.w w11 - c3a: 0a 00 07 rcall . + 0x16 - c3c: 03 04 07 rcall . + 0x808 - c3e: 3a 10 90 mov.w [w10+38], w0 - c40: 00 00 e8 inc.w w0, w0 - c42: 30 15 98 mov.w w0, [w10+38] - c44: 4a 10 90 mov.w [w10+40], w0 - c46: 00 00 e8 inc.w w0, w0 - c48: 40 15 98 mov.w w0, [w10+40] - c4a: ff 03 07 rcall . + 0x800 - c4c: fe 03 07 rcall . + 0x7FE - c4e: dd ff 37 bra . + 0xFFFFFFBC - -00000c50 <_vTaskSuspendAll>: - c50: f9 03 07 rcall . + 0x7F4 - c52: 10 2d ec inc.w 0xd10 - c54: fa 03 37 bra . + 0x7F6 - -00000c56 <_vTaskEndScheduler>: - c56: 42 a0 a8 bset.b 0x42, #0x5 - c58: 16 2d ef clr.w 0xd16 - c5a: b6 03 37 bra . + 0x76E - -00000c5c <_vTaskIncrementTick>: - c5c: 88 9f be mov.d w8, [w15++] - c5e: 8a 1f 78 mov.w w10, [w15++] - c60: 10 0d e2 cp0.w 0xd10 - c62: 1e 00 3a bra NZ, . + 0x3E - c64: 40 68 80 mov.w 0xd08, w0 - c66: 51 68 80 mov.w 0xd0a, w1 - c68: 61 00 40 add.w w0, #0x1, w0 - c6a: e0 80 48 addc.w w1, #0x0, w1 - c6c: 40 68 88 mov.w w0, 0xd08 - c6e: 51 68 88 mov.w w1, 0xd0a - c70: 40 68 80 mov.w 0xd08, w0 - c72: 51 68 80 mov.w 0xd0a, w1 - c74: e0 0f 50 sub.w w0, #0x0, [w15] - c76: e0 8f 58 subb.w w1, #0x0, [w15] - c78: 18 00 32 bra Z, . + 0x32 - c7a: 40 69 80 mov.w 0xd28, w0 - c7c: 10 00 e0 cp0.w [w0] - c7e: 0d 00 32 bra Z, . + 0x1C - -00000c80 <.L14>: - c80: 40 69 80 mov.w 0xd28, w0 - c82: 40 00 90 mov.w [w0+8], w0 - c84: 40 00 90 mov.w [w0+8], w0 - c86: 00 04 78 mov.w w0, w8 - c88: 00 00 e0 cp0.w w0 - c8a: 07 00 32 bra Z, . + 0x10 - c8c: 42 68 80 mov.w 0xd08, w2 - c8e: 53 68 80 mov.w 0xd0a, w3 - c90: a0 00 90 mov.w [w0+4], w1 - c92: 10 00 90 mov.w [w0+2], w0 - c94: 82 0f 50 sub.w w0, w2, [w15] - c96: 83 8f 58 subb.w w1, w3, [w15] - c98: 11 00 36 bra LEU, . + 0x24 - -00000c9a <.L24>: - c9a: 4f 05 78 mov.w [--w15], w10 - c9c: 4f 04 be mov.d [--w15], w8 - c9e: 00 00 06 return - -00000ca0 <.L10>: - ca0: 12 2d ec inc.w 0xd12 - ca2: 4f 05 78 mov.w [--w15], w10 - ca4: 4f 04 be mov.d [--w15], w8 - ca6: 00 00 06 return - ca8: fb ff 37 bra . + 0xFFFFFFF8 - -00000caa <.L28>: - caa: 40 69 80 mov.w 0xd28, w0 - cac: 31 69 80 mov.w 0xd26, w1 - cae: 41 69 88 mov.w w1, 0xd28 - cb0: 30 69 88 mov.w w0, 0xd26 - cb2: 0c 2d ec inc.w 0xd0c - cb4: 40 69 80 mov.w 0xd28, w0 - cb6: 10 00 e0 cp0.w [w0] - cb8: e3 ff 3a bra NZ, . + 0xFFFFFFC8 - cba: ef ff 37 bra . + 0xFFFFFFE0 - -00000cbc <.L25>: - cbc: 2a d4 20 mov.w #0xd42, w10 - -00000cbe <.L17>: - cbe: 88 84 e8 inc2.w w8, w9 - cc0: 09 00 78 mov.w w9, w0 - cc2: af fd 07 rcall . + 0xFFFFFB60 - cc4: 48 08 90 mov.w [w8+24], w0 - cc6: 00 00 e0 cp0.w w0 - cc8: 02 00 32 bra Z, . + 0x6 - cca: 6e 00 44 add.w w8, #0xe, w0 - ccc: aa fd 07 rcall . + 0xFFFFFB56 - -00000cce <.L18>: - cce: d8 08 90 mov.w [w8+26], w1 - cd0: 70 68 80 mov.w 0xd0e, w0 - cd2: 80 8f 50 sub.w w1, w0, [w15] - cd4: 01 00 36 bra LEU, . + 0x4 - cd6: 71 68 88 mov.w w1, 0xd0e - -00000cd8 <.L20>: - cd8: 6c 08 b9 mul.su w1, #0xc, w0 - cda: 00 00 45 add.w w10, w0, w0 - cdc: 89 00 78 mov.w w9, w1 - cde: 6f fd 07 rcall . + 0xFFFFFAE0 - ce0: 40 69 80 mov.w 0xd28, w0 - ce2: 10 00 e0 cp0.w [w0] - ce4: da ff 32 bra Z, . + 0xFFFFFFB6 - ce6: 40 69 80 mov.w 0xd28, w0 - ce8: 40 00 90 mov.w [w0+8], w0 - cea: 40 04 90 mov.w [w0+8], w8 - cec: 08 00 e0 cp0.w w8 - cee: d5 ff 32 bra Z, . + 0xFFFFFFAC - cf0: 42 68 80 mov.w 0xd08, w2 - cf2: 53 68 80 mov.w 0xd0a, w3 - cf4: 18 00 90 mov.w [w8+2], w0 - cf6: a8 00 90 mov.w [w8+4], w1 - cf8: 82 0f 50 sub.w w0, w2, [w15] - cfa: 83 8f 58 subb.w w1, w3, [w15] - cfc: e0 ff 36 bra LEU, . + 0xFFFFFFC2 - cfe: 4f 05 78 mov.w [--w15], w10 - d00: 4f 04 be mov.d [--w15], w8 - d02: 00 00 06 return - d04: cd ff 37 bra . + 0xFFFFFF9C - -00000d06 <_xTaskResumeAll>: - d06: 88 9f be mov.d w8, [w15++] - d08: 8a 1f 78 mov.w w10, [w15++] - d0a: 9c 03 07 rcall . + 0x73A - d0c: 10 2d ed dec.w 0xd10 - d0e: 80 68 80 mov.w 0xd10, w0 - d10: 00 00 e0 cp0.w w0 - d12: 33 00 3a bra NZ, . + 0x68 - d14: 14 0d e2 cp0.w 0xd14 - d16: 31 00 32 bra Z, . + 0x64 - d18: 00 05 78 mov.w w0, w10 - -00000d1a <.L57>: - d1a: 1a 0d e2 cp0.w 0xd1a - d1c: 1b 00 32 bra Z, . + 0x38 - -00000d1e <.L59>: - d1e: 10 69 80 mov.w 0xd22, w0 - d20: 40 04 90 mov.w [w0+8], w8 - d22: 08 00 e0 cp0.w w8 - d24: 17 00 32 bra Z, . + 0x30 - d26: 6e 00 44 add.w w8, #0xe, w0 - d28: 7c fd 07 rcall . + 0xFFFFFAFA - d2a: 88 84 e8 inc2.w w8, w9 - d2c: 09 00 78 mov.w w9, w0 - d2e: 79 fd 07 rcall . + 0xFFFFFAF4 - d30: d8 08 90 mov.w [w8+26], w1 - d32: 70 68 80 mov.w 0xd0e, w0 - d34: 80 8f 50 sub.w w1, w0, [w15] - d36: 01 00 36 bra LEU, . + 0x4 - d38: 71 68 88 mov.w w1, 0xd0e - -00000d3a <.L37>: - d3a: 6c 09 b9 mul.su w1, #0xc, w2 - d3c: 20 d4 20 mov.w #0xd42, w0 - d3e: 02 00 40 add.w w0, w2, w0 - d40: 89 00 78 mov.w w9, w1 - d42: 3d fd 07 rcall . + 0xFFFFFA7C - d44: d0 6d 80 mov.w 0xdba, w0 - d46: d8 08 90 mov.w [w8+26], w1 - d48: 50 08 90 mov.w [w0+26], w0 - d4a: 80 8f 50 sub.w w1, w0, [w15] - d4c: e6 ff 39 bra NC, . + 0xFFFFFFCE - d4e: 1a 00 20 mov.w #0x1, w10 - d50: 1a 0d e2 cp0.w 0xd1a - d52: e5 ff 3a bra NZ, . + 0xFFFFFFCC - -00000d54 <.L40>: - d54: 12 0d e2 cp0.w 0xd12 - d56: 0c 00 32 bra Z, . + 0x1A - d58: 12 0d e2 cp0.w 0xd12 - d5a: 16 00 3a bra NZ, . + 0x2E - -00000d5c <.L45>: - d5c: 06 2d ef clr.w 0xd06 - d5e: ca 13 02 call 0x13ca <_vPortYield> - d60: 00 00 00 - d62: 00 00 00 nop - d64: 18 00 20 mov.w #0x1, w8 - d66: 71 03 07 rcall . + 0x6E4 - d68: 08 00 78 mov.w w8, w0 - d6a: 4f 05 78 mov.w [--w15], w10 - d6c: 4f 04 be mov.d [--w15], w8 - d6e: 00 00 06 return - -00000d70 <.L60>: - d70: e1 0f 55 sub.w w10, #0x1, [w15] - d72: f4 ff 32 bra Z, . + 0xFFFFFFEA - d74: 30 68 80 mov.w 0xd06, w0 - d76: e1 0f 50 sub.w w0, #0x1, [w15] - d78: f1 ff 32 bra Z, . + 0xFFFFFFE4 - -00000d7a <.L32>: - d7a: 00 04 eb clr.w w8 - d7c: 66 03 07 rcall . + 0x6CE - d7e: 08 00 78 mov.w w8, w0 - d80: 4f 05 78 mov.w [--w15], w10 - d82: 4f 04 be mov.d [--w15], w8 - d84: 00 00 06 return - d86: f4 ff 37 bra . + 0xFFFFFFEA - -00000d88 <.L52>: - d88: 69 ff 07 rcall . + 0xFFFFFED4 - d8a: 12 2d ed dec.w 0xd12 - d8c: 12 0d e2 cp0.w 0xd12 - d8e: e6 ff 32 bra Z, . + 0xFFFFFFCE - d90: 65 ff 07 rcall . + 0xFFFFFECC - d92: 12 2d ed dec.w 0xd12 - d94: 12 0d e2 cp0.w 0xd12 - d96: f8 ff 3a bra NZ, . + 0xFFFFFFF2 - d98: e1 ff 37 bra . + 0xFFFFFFC4 - -00000d9a <_vTaskDelayUntil>: - d9a: 88 9f be mov.d w8, [w15++] - d9c: 8a 1f 78 mov.w w10, [w15++] - d9e: 00 05 78 mov.w w0, w10 - da0: 02 04 be mov.d w2, w8 - da2: 56 ff 07 rcall . + 0xFFFFFEAE - da4: 1a 01 be mov.d [w10], w2 - da6: 02 04 44 add.w w8, w2, w8 - da8: 83 84 4c addc.w w9, w3, w9 - daa: 40 68 80 mov.w 0xd08, w0 - dac: 51 68 80 mov.w 0xd0a, w1 - dae: 80 0f 51 sub.w w2, w0, [w15] - db0: 81 8f 59 subb.w w3, w1, [w15] - db2: 10 00 36 bra LEU, . + 0x22 - db4: 88 0f 51 sub.w w2, w8, [w15] - db6: 89 8f 59 subb.w w3, w9, [w15] - db8: 10 00 3e bra GTU, . + 0x22 - -00000dba <.L66>: - dba: 00 00 eb clr.w w0 - dbc: 08 8d be mov.d w8, [w10] - dbe: 00 00 e0 cp0.w w0 - dc0: 15 00 3a bra NZ, . + 0x2C - -00000dc2 <.L71>: - dc2: a1 ff 07 rcall . + 0xFFFFFF44 - dc4: 00 00 e0 cp0.w w0 - dc6: 03 00 3a bra NZ, . + 0x8 - dc8: ca 13 02 call 0x13ca <_vPortYield> - dca: 00 00 00 - dcc: 00 00 00 nop - -00000dce <.L77>: - dce: 4f 05 78 mov.w [--w15], w10 - dd0: 4f 04 be mov.d [--w15], w8 - dd2: 00 00 06 return - -00000dd4 <.L64>: - dd4: 88 0f 51 sub.w w2, w8, [w15] - dd6: 89 8f 59 subb.w w3, w9, [w15] - dd8: 05 00 3e bra GTU, . + 0xC - -00000dda <.L78>: - dda: 40 68 80 mov.w 0xd08, w0 - ddc: 51 68 80 mov.w 0xd0a, w1 - dde: 80 0f 54 sub.w w8, w0, [w15] - de0: 81 8f 5c subb.w w9, w1, [w15] - de2: eb ff 36 bra LEU, . + 0xFFFFFFD8 - -00000de4 <.L68>: - de4: 10 00 20 mov.w #0x1, w0 - de6: 08 8d be mov.d w8, [w10] - de8: 00 00 e0 cp0.w w0 - dea: eb ff 32 bra Z, . + 0xFFFFFFD8 - -00000dec <.L80>: - dec: ba 8d ec inc2.w 0xdba, WREG - dee: 19 fd 07 rcall . + 0xFFFFFA34 - df0: d0 6d 80 mov.w 0xdba, w0 - df2: 18 00 98 mov.w w8, [w0+2] - df4: 29 00 98 mov.w w9, [w0+4] - df6: 40 68 80 mov.w 0xd08, w0 - df8: 51 68 80 mov.w 0xd0a, w1 - dfa: 80 0f 54 sub.w w8, w0, [w15] - dfc: 81 8f 5c subb.w w9, w1, [w15] - dfe: 05 00 39 bra NC, . + 0xC - e00: d1 6d 80 mov.w 0xdba, w1 - e02: 40 69 80 mov.w 0xd28, w0 - e04: 81 80 e8 inc2.w w1, w1 - e06: e6 fc 07 rcall . + 0xFFFFF9CE - e08: dc ff 37 bra . + 0xFFFFFFBA - -00000e0a <.L81>: - e0a: d1 6d 80 mov.w 0xdba, w1 - e0c: 30 69 80 mov.w 0xd26, w0 - e0e: 81 80 e8 inc2.w w1, w1 - e10: e1 fc 07 rcall . + 0xFFFFF9C4 - e12: d7 ff 37 bra . + 0xFFFFFFB0 - -00000e14 <_xTaskGetTickCount>: - e14: 88 9f be mov.d w8, [w15++] - e16: 16 03 07 rcall . + 0x62E - e18: 48 68 80 mov.w 0xd08, w8 - e1a: 59 68 80 mov.w 0xd0a, w9 - e1c: 16 03 07 rcall . + 0x62E - e1e: 08 00 be mov.d w8, w0 - e20: 4f 04 be mov.d [--w15], w8 - e22: 00 00 06 return - -00000e24 <_uxTaskGetNumberOfTasks>: - e24: 88 1f 78 mov.w w8, [w15++] - e26: 0e 03 07 rcall . + 0x61E - e28: a8 68 80 mov.w 0xd14, w8 - e2a: 0f 03 07 rcall . + 0x620 - e2c: 08 00 78 mov.w w8, w0 - e2e: 4f 04 78 mov.w [--w15], w8 - e30: 00 00 06 return - -00000e32 <_vTaskSwitchContext>: - e32: 10 0d e2 cp0.w 0xd10 - e34: 03 00 32 bra Z, . + 0x8 - e36: 10 00 20 mov.w #0x1, w0 - e38: 30 68 88 mov.w w0, 0xd06 - e3a: 00 00 06 return - -00000e3c <.L92>: - e3c: 70 68 80 mov.w 0xd0e, w0 - e3e: 6c 00 b9 mul.su w0, #0xc, w0 - e40: 22 d4 20 mov.w #0xd42, w2 - e42: 62 00 78 mov.w [w2+w0], w0 - e44: 00 00 e0 cp0.w w0 - e46: 06 00 3a bra NZ, . + 0xE - -00000e48 <.L100>: - e48: 0e 2d ed dec.w 0xd0e - e4a: 70 68 80 mov.w 0xd0e, w0 - e4c: 6c 00 b9 mul.su w0, #0xc, w0 - e4e: 62 00 78 mov.w [w2+w0], w0 - e50: 00 00 e0 cp0.w w0 - e52: fa ff 32 bra Z, . + 0xFFFFFFF6 - -00000e54 <.L96>: - e54: 70 68 80 mov.w 0xd0e, w0 - e56: 6c 00 b9 mul.su w0, #0xc, w0 - e58: 00 01 41 add.w w2, w0, w2 - e5a: 92 00 90 mov.w [w2+2], w1 - e5c: a1 00 90 mov.w [w1+4], w1 - e5e: 11 01 98 mov.w w1, [w2+2] - e60: 64 00 41 add.w w2, #0x4, w0 - e62: 80 8f 50 sub.w w1, w0, [w15] - e64: 03 00 32 bra Z, . + 0x8 - e66: c1 00 90 mov.w [w1+8], w1 - e68: d1 6d 88 mov.w w1, 0xdba - e6a: 00 00 06 return - -00000e6c <.L103>: - e6c: a1 00 90 mov.w [w1+4], w1 - e6e: 11 01 98 mov.w w1, [w2+2] - e70: c1 00 90 mov.w [w1+8], w1 - e72: d1 6d 88 mov.w w1, 0xdba - e74: 00 00 06 return - -00000e76 <_vTaskPlaceOnEventList>: - e76: 88 9f be mov.d w8, [w15++] - e78: 02 04 be mov.d w2, w8 - e7a: d1 6d 80 mov.w 0xdba, w1 - e7c: ee 80 40 add.w w1, #0xe, w1 - e7e: aa fc 07 rcall . + 0xFFFFF956 - e80: ba 8d ec inc2.w 0xdba, WREG - e82: cf fc 07 rcall . + 0xFFFFF9A0 - e84: 40 68 80 mov.w 0xd08, w0 - e86: 51 68 80 mov.w 0xd0a, w1 - e88: 00 01 44 add.w w8, w0, w2 - e8a: 81 81 4c addc.w w9, w1, w3 - e8c: d0 6d 80 mov.w 0xdba, w0 - e8e: 12 00 98 mov.w w2, [w0+2] - e90: 23 00 98 mov.w w3, [w0+4] - e92: 40 68 80 mov.w 0xd08, w0 - e94: 51 68 80 mov.w 0xd0a, w1 - e96: 80 0f 51 sub.w w2, w0, [w15] - e98: 81 8f 59 subb.w w3, w1, [w15] - e9a: 06 00 31 bra C, . + 0xE - e9c: d1 6d 80 mov.w 0xdba, w1 - e9e: 30 69 80 mov.w 0xd26, w0 - ea0: 81 80 e8 inc2.w w1, w1 - ea2: 98 fc 07 rcall . + 0xFFFFF932 - ea4: 4f 04 be mov.d [--w15], w8 - ea6: 00 00 06 return - -00000ea8 <.L106>: - ea8: d1 6d 80 mov.w 0xdba, w1 - eaa: 40 69 80 mov.w 0xd28, w0 - eac: 81 80 e8 inc2.w w1, w1 - eae: 92 fc 07 rcall . + 0xFFFFF926 - eb0: 4f 04 be mov.d [--w15], w8 - eb2: 00 00 06 return - eb4: f9 ff 37 bra . + 0xFFFFFFF4 - -00000eb6 <_xTaskRemoveFromEventList>: - eb6: 88 9f be mov.d w8, [w15++] - eb8: 90 00 78 mov.w [w0], w1 - eba: 01 00 e0 cp0.w w1 - ebc: 20 00 3a bra NZ, . + 0x42 - ebe: 81 04 78 mov.w w1, w9 - -00000ec0 <.L116>: - ec0: 6e 84 44 add.w w9, #0xe, w8 - ec2: 08 00 78 mov.w w8, w0 - ec4: ae fc 07 rcall . + 0xFFFFF95E - ec6: 10 0d e2 cp0.w 0xd10 - ec8: 16 00 3a bra NZ, . + 0x2E - eca: 09 84 e8 inc2.w w9, w8 - ecc: 08 00 78 mov.w w8, w0 - ece: a9 fc 07 rcall . + 0xFFFFF954 - ed0: d9 08 90 mov.w [w9+26], w1 - ed2: 70 68 80 mov.w 0xd0e, w0 - ed4: 80 8f 50 sub.w w1, w0, [w15] - ed6: 16 00 3e bra GTU, . + 0x2E - ed8: 6c 09 b9 mul.su w1, #0xc, w2 - eda: 20 d4 20 mov.w #0xd42, w0 - edc: 02 00 40 add.w w0, w2, w0 - ede: 88 00 78 mov.w w8, w1 - ee0: 6e fc 07 rcall . + 0xFFFFF8DE - -00000ee2 <.L121>: - ee2: d0 6d 80 mov.w 0xdba, w0 - ee4: 00 01 eb clr.w w2 - ee6: d9 08 90 mov.w [w9+26], w1 - ee8: 50 08 90 mov.w [w0+26], w0 - eea: 80 8f 50 sub.w w1, w0, [w15] - eec: 01 00 39 bra NC, . + 0x4 - eee: 12 00 20 mov.w #0x1, w2 - -00000ef0 <.L122>: - ef0: 02 00 78 mov.w w2, w0 - ef2: 4f 04 be mov.d [--w15], w8 - ef4: 00 00 06 return - -00000ef6 <.L117>: - ef6: 88 00 78 mov.w w8, w1 - ef8: a0 d1 20 mov.w #0xd1a, w0 - efa: 61 fc 07 rcall . + 0xFFFFF8C4 - efc: f2 ff 37 bra . + 0xFFFFFFE6 - -00000efe <.L114>: - efe: 40 00 90 mov.w [w0+8], w0 - f00: c0 04 90 mov.w [w0+8], w9 - f02: de ff 37 bra . + 0xFFFFFFBE - -00000f04 <.L125>: - f04: 71 68 88 mov.w w1, 0xd0e - f06: 6c 09 b9 mul.su w1, #0xc, w2 - f08: 20 d4 20 mov.w #0xd42, w0 - f0a: 02 00 40 add.w w0, w2, w0 - f0c: 88 00 78 mov.w w8, w1 - f0e: 57 fc 07 rcall . + 0xFFFFF8B0 - f10: e8 ff 37 bra . + 0xFFFFFFD2 - -00000f12 <_vTaskSetTimeOutState>: - f12: 61 68 80 mov.w 0xd0c, w1 - f14: 01 08 78 mov.w w1, [w0] - f16: 42 68 80 mov.w 0xd08, w2 - f18: 53 68 80 mov.w 0xd0a, w3 - f1a: 12 00 98 mov.w w2, [w0+2] - f1c: 23 00 98 mov.w w3, [w0+4] - f1e: 00 00 06 return - -00000f20 <_xTaskCheckForTimeOut>: - f20: 00 03 be mov.d w0, w6 - f22: 60 68 80 mov.w 0xd0c, w0 - f24: 96 0f 10 subr.w w0, [w6], [w15] - f26: 19 00 32 bra Z, . + 0x34 - f28: 40 68 80 mov.w 0xd08, w0 - f2a: 51 68 80 mov.w 0xd0a, w1 - f2c: 16 01 90 mov.w [w6+2], w2 - f2e: a6 01 90 mov.w [w6+4], w3 - f30: 80 0f 51 sub.w w2, w0, [w15] - f32: 81 8f 59 subb.w w3, w1, [w15] - f34: 08 00 36 bra LEU, . + 0x12 - f36: 40 68 80 mov.w 0xd08, w0 - f38: 51 68 80 mov.w 0xd0a, w1 - f3a: 17 02 be mov.d [w7], w4 - f3c: 02 00 50 sub.w w0, w2, w0 - f3e: 83 80 58 subb.w w1, w3, w1 - f40: 84 0f 50 sub.w w0, w4, [w15] - f42: 85 8f 58 subb.w w1, w5, [w15] - f44: 01 00 39 bra NC, . + 0x4 - -00000f46 <.L134>: - f46: 10 00 05 retlw.w #0x1, w0 - -00000f48 <.L140>: - f48: 40 68 80 mov.w 0xd08, w0 - f4a: 51 68 80 mov.w 0xd0a, w1 - f4c: 02 00 50 sub.w w0, w2, w0 - f4e: 83 80 58 subb.w w1, w3, w1 - f50: 80 1b 52 sub.w w4, w0, [w7++] - f52: 81 93 5a subb.w w5, w1, [w7--] - f54: 06 00 78 mov.w w6, w0 - f56: dd ff 07 rcall . + 0xFFFFFFBC - f58: 00 00 05 retlw.w #0x0, w0 - -00000f5a <.L138>: - f5a: 16 01 90 mov.w [w6+2], w2 - f5c: a6 01 90 mov.w [w6+4], w3 - f5e: 40 68 80 mov.w 0xd08, w0 - f60: 51 68 80 mov.w 0xd0a, w1 - f62: 17 02 be mov.d [w7], w4 - f64: 02 00 50 sub.w w0, w2, w0 - f66: 83 80 58 subb.w w1, w3, w1 - f68: 84 0f 50 sub.w w0, w4, [w15] - f6a: 85 8f 58 subb.w w1, w5, [w15] - f6c: ec ff 31 bra C, . + 0xFFFFFFDA - f6e: ec ff 37 bra . + 0xFFFFFFDA - -00000f70 <_vTaskMissedYield>: - f70: 10 00 20 mov.w #0x1, w0 - f72: 30 68 88 mov.w w0, 0xd06 - f74: 00 00 06 return - -00000f76 <_prvIdleTask>: - f76: ff ff 37 bra . - -00000f78 <_xTaskCreate>: - f78: e6 87 47 add.w w15, #0x6, w15 - f7a: 88 9f be mov.d w8, [w15++] - f7c: 8a 9f be mov.d w10, [w15++] - f7e: 8c 9f be mov.d w12, [w15++] - f80: 8e 1f 78 mov.w w14, [w15++] - f82: 00 07 78 mov.w w0, w14 - f84: 01 05 78 mov.w w1, w10 - f86: 02 04 78 mov.w w2, w8 - f88: 83 06 78 mov.w w3, w13 - f8a: 04 06 78 mov.w w4, w12 - f8c: 85 bf 9f mov.w w5, [w15-16] - f8e: 20 02 20 mov.w #0x22, w0 - f90: 74 02 07 rcall . + 0x4EA - f92: 80 04 78 mov.w w0, w9 - f94: 00 80 eb setm.w w0 - f96: 09 00 e0 cp0.w w9 - f98: 49 00 32 bra Z, . + 0x94 - f9a: 08 04 44 add.w w8, w8, w8 - f9c: 08 00 78 mov.w w8, w0 - f9e: 6d 02 07 rcall . + 0x4DC - fa0: e0 0c 98 mov.w w0, [w9+28] - fa2: 00 00 e0 cp0.w w0 - fa4: 84 00 32 bra Z, . + 0x10A - fa6: 08 01 78 mov.w w8, w2 - fa8: 51 0a 20 mov.w #0xa5, w1 - faa: f5 f8 07 rcall . + 0xFFFFF1EC - fac: 7e 80 44 add.w w9, #0x1e, w0 - fae: 42 00 20 mov.w #0x4, w2 - fb0: 8a 00 78 mov.w w10, w1 - fb2: f8 f8 07 rcall . + 0xFFFFF1F2 - fb4: 00 40 eb clr.b w0 - fb6: 90 64 98 mov.b w0, [w9+33] - fb8: 30 00 20 mov.w #0x3, w0 - fba: 3a 00 20 mov.w #0x3, w10 - fbc: 0b 00 20 mov.w #0x0, w11 - fbe: 80 0f 56 sub.w w12, w0, [w15] - fc0: 3b 00 36 bra LEU, . + 0x78 - fc2: d0 0c 98 mov.w w0, [w9+26] - fc4: 09 80 e8 inc2.w w9, w0 - fc6: f0 b7 9f mov.w w0, [w15-18] - fc8: f7 fb 07 rcall . + 0xFFFFF7F0 - fca: 6e 84 44 add.w w9, #0xe, w8 - fcc: 08 00 78 mov.w w8, w0 - fce: f4 fb 07 rcall . + 0xFFFFF7EA - fd0: d9 04 98 mov.w w9, [w9+10] - fd2: 64 00 15 subr.w w10, #0x4, w0 - fd4: e0 80 1d subbr.w w11, #0x0, w1 - fd6: 00 8c be mov.d w0, [w8] - fd8: b9 0c 98 mov.w w9, [w9+22] - fda: 69 08 90 mov.w [w9+28], w0 - fdc: 0d 01 78 mov.w w13, w2 - fde: 8e 00 78 mov.w w14, w1 - fe0: af 01 07 rcall . + 0x360 - fe2: 80 0c 78 mov.w w0, [w9] - fe4: 2f 02 07 rcall . + 0x460 - fe6: 14 2d ec inc.w 0xd14 - fe8: a0 68 80 mov.w 0xd14, w0 - fea: e1 0f 50 sub.w w0, #0x1, [w15] - fec: 4c 00 32 bra Z, . + 0x9A - -00000fee <.L161>: - fee: 2b d4 20 mov.w #0xd42, w11 - ff0: 16 0d e2 cp0.w 0xd16 - ff2: 43 00 32 bra Z, . + 0x88 - -00000ff4 <.L165>: - ff4: d9 08 90 mov.w [w9+26], w1 - ff6: c0 68 80 mov.w 0xd18, w0 - ff8: 80 8f 50 sub.w w1, w0, [w15] - ffa: 01 00 36 bra LEU, . + 0x4 - ffc: c1 68 88 mov.w w1, 0xd18 - -00000ffe <.L168>: - ffe: 70 68 80 mov.w 0xd0e, w0 - 1000: 80 8f 50 sub.w w1, w0, [w15] - 1002: 01 00 36 bra LEU, . + 0x4 - 1004: 71 68 88 mov.w w1, 0xd0e - -00001006 <.L170>: - 1006: 6c 08 b9 mul.su w1, #0xc, w0 - 1008: 00 80 45 add.w w11, w0, w0 - 100a: ff b0 97 mov.w [w15-18], w1 - 100c: d8 fb 07 rcall . + 0xFFFFF7B2 - 100e: 1d 02 07 rcall . + 0x43C - 1010: 0f b8 97 mov.w [w15-16], w0 - 1012: 00 00 e0 cp0.w w0 - 1014: 01 00 32 bra Z, . + 0x4 - 1016: 09 08 78 mov.w w9, [w0] - -00001018 <.L172>: - 1018: 16 0d e2 cp0.w 0xd16 - 101a: 27 00 32 bra Z, . + 0x50 - 101c: d0 6d 80 mov.w 0xdba, w0 - 101e: 50 08 90 mov.w [w0+26], w0 - 1020: 8c 0f 50 sub.w w0, w12, [w15] - 1022: 23 00 31 bra C, . + 0x48 - 1024: ca 13 02 call 0x13ca <_vPortYield> - 1026: 00 00 00 - 1028: 00 00 00 nop - 102a: 10 00 20 mov.w #0x1, w0 - -0000102c <.L155>: - 102c: 4f 07 78 mov.w [--w15], w14 - 102e: 4f 06 be mov.d [--w15], w12 - 1030: 4f 05 be mov.d [--w15], w10 - 1032: 4f 04 be mov.d [--w15], w8 - 1034: 6f 00 b1 sub.w #0x6, w15 - 1036: 00 00 06 return - -00001038 <.L184>: - 1038: 61 65 b8 mul.uu w12, #0x1, w10 - 103a: 0c 00 78 mov.w w12, w0 - 103c: d0 0c 98 mov.w w0, [w9+26] - 103e: 09 80 e8 inc2.w w9, w0 - 1040: f0 b7 9f mov.w w0, [w15-18] - 1042: ba fb 07 rcall . + 0xFFFFF776 - 1044: 6e 84 44 add.w w9, #0xe, w8 - 1046: 08 00 78 mov.w w8, w0 - 1048: b7 fb 07 rcall . + 0xFFFFF770 - 104a: d9 04 98 mov.w w9, [w9+10] - 104c: 64 00 15 subr.w w10, #0x4, w0 - 104e: e0 80 1d subbr.w w11, #0x0, w1 - 1050: 00 8c be mov.d w0, [w8] - 1052: b9 0c 98 mov.w w9, [w9+22] - 1054: 69 08 90 mov.w [w9+28], w0 - 1056: 0d 01 78 mov.w w13, w2 - 1058: 8e 00 78 mov.w w14, w1 - 105a: 72 01 07 rcall . + 0x2E6 - 105c: 80 0c 78 mov.w w0, [w9] - 105e: f2 01 07 rcall . + 0x3E6 - 1060: 14 2d ec inc.w 0xd14 - 1062: a0 68 80 mov.w 0xd14, w0 - 1064: e1 0f 50 sub.w w0, #0x1, [w15] - 1066: c3 ff 3a bra NZ, . + 0xFFFFFF88 - 1068: 0e 00 37 bra . + 0x1E - -0000106a <.L174>: - 106a: 10 00 20 mov.w #0x1, w0 - 106c: 4f 07 78 mov.w [--w15], w14 - 106e: 4f 06 be mov.d [--w15], w12 - 1070: 4f 05 be mov.d [--w15], w10 - 1072: 4f 04 be mov.d [--w15], w8 - 1074: 6f 00 b1 sub.w #0x6, w15 - 1076: 00 00 06 return - 1078: df ff 37 bra . + 0xFFFFFFC0 - -0000107a <.L186>: - 107a: d0 6d 80 mov.w 0xdba, w0 - 107c: 50 08 90 mov.w [w0+26], w0 - 107e: 80 0f 56 sub.w w12, w0, [w15] - 1080: b9 ff 39 bra NC, . + 0xFFFFFF74 - 1082: d9 6d 88 mov.w w9, 0xdba - 1084: b7 ff 37 bra . + 0xFFFFFF70 - -00001086 <.L185>: - 1086: d9 6d 88 mov.w w9, 0xdba - 1088: 2b d4 20 mov.w #0xd42, w11 - 108a: 0b 04 78 mov.w w11, w8 - 108c: 2a d7 20 mov.w #0xd72, w10 - -0000108e <.L163>: - 108e: 08 00 78 mov.w w8, w0 - 1090: 8b fb 07 rcall . + 0xFFFFF718 - 1092: 6c 04 44 add.w w8, #0xc, w8 - 1094: 88 0f 55 sub.w w10, w8, [w15] - 1096: fb ff 3a bra NZ, . + 0xFFFFFFF8 - 1098: 60 d3 20 mov.w #0xd36, w0 - 109a: 86 fb 07 rcall . + 0xFFFFF70E - 109c: a0 d2 20 mov.w #0xd2a, w0 - 109e: 84 fb 07 rcall . + 0xFFFFF70A - 10a0: a0 d1 20 mov.w #0xd1a, w0 - 10a2: 82 fb 07 rcall . + 0xFFFFF706 - 10a4: 60 d3 20 mov.w #0xd36, w0 - 10a6: 40 69 88 mov.w w0, 0xd28 - 10a8: a0 d2 20 mov.w #0xd2a, w0 - 10aa: 30 69 88 mov.w w0, 0xd26 - 10ac: a3 ff 37 bra . + 0xFFFFFF48 - -000010ae <.L183>: - 10ae: 09 00 78 mov.w w9, w0 - 10b0: ff 01 07 rcall . + 0x400 - 10b2: 00 80 eb setm.w w0 - 10b4: 4f 07 78 mov.w [--w15], w14 - 10b6: 4f 06 be mov.d [--w15], w12 - 10b8: 4f 05 be mov.d [--w15], w10 - 10ba: 4f 04 be mov.d [--w15], w8 - 10bc: 6f 00 b1 sub.w #0x6, w15 - 10be: 00 00 06 return - 10c0: bb ff 37 bra . + 0xFFFFFF78 - -000010c2 <_vTaskStartScheduler>: - 10c2: 80 02 eb clr.w w5 - 10c4: 05 02 78 mov.w w5, w4 - 10c6: 85 01 78 mov.w w5, w3 - 10c8: 92 06 20 mov.w #0x69, w2 - 10ca: 01 a5 29 mov.w #0x9a50, w1 - 10cc: 60 f7 20 mov.w #0xf76, w0 - 10ce: 54 ff 07 rcall . + 0xFFFFFEAA - 10d0: e1 0f 50 sub.w w0, #0x1, [w15] - 10d2: 01 00 32 bra Z, . + 0x4 - 10d4: 00 00 06 return - -000010d6 <.L194>: - 10d6: 42 a0 a8 bset.b 0x42, #0x5 - 10d8: b0 68 88 mov.w w0, 0xd16 - 10da: 08 2d ef clr.w 0xd08 - 10dc: 0a 2d ef clr.w 0xd0a - 10de: 44 01 37 bra . + 0x28A - -000010e0 <_vCoRoutineAddToDelayedList>: - 10e0: 88 9f be mov.d w8, [w15++] - 10e2: 8a 1f 78 mov.w w10, [w15++] - 10e4: 00 04 be mov.d w0, w8 - 10e6: 02 05 78 mov.w w2, w10 - 10e8: a0 6b 80 mov.w 0xd74, w0 - 10ea: b1 6b 80 mov.w 0xd76, w1 - 10ec: 08 04 40 add.w w0, w8, w8 - 10ee: 89 84 48 addc.w w1, w9, w9 - 10f0: bc 8d ec inc2.w 0xdbc, WREG - 10f2: 97 fb 07 rcall . + 0xFFFFF730 - 10f4: e2 6d 80 mov.w 0xdbc, w2 - 10f6: 18 01 98 mov.w w8, [w2+2] - 10f8: 29 01 98 mov.w w9, [w2+4] - 10fa: a0 6b 80 mov.w 0xd74, w0 - 10fc: b1 6b 80 mov.w 0xd76, w1 - 10fe: 80 0f 54 sub.w w8, w0, [w15] - 1100: 81 8f 5c subb.w w9, w1, [w15] - 1102: 0c 00 31 bra C, . + 0x1A - 1104: 82 80 e8 inc2.w w2, w1 - 1106: 60 6c 80 mov.w 0xd8c, w0 - 1108: 65 fb 07 rcall . + 0xFFFFF6CC - -0000110a <.L4>: - 110a: 0a 00 e0 cp0.w w10 - 110c: 04 00 32 bra Z, . + 0xA - 110e: e1 6d 80 mov.w 0xdbc, w1 - 1110: ee 80 40 add.w w1, #0xe, w1 - 1112: 0a 00 78 mov.w w10, w0 - 1114: 5f fb 07 rcall . + 0xFFFFF6C0 - -00001116 <.L7>: - 1116: 4f 05 78 mov.w [--w15], w10 - 1118: 4f 04 be mov.d [--w15], w8 - 111a: 00 00 06 return - -0000111c <.L2>: - 111c: 82 80 e8 inc2.w w2, w1 - 111e: 70 6c 80 mov.w 0xd8e, w0 - 1120: 59 fb 07 rcall . + 0xFFFFF6B4 - 1122: f3 ff 37 bra . + 0xFFFFFFE8 - -00001124 <_vCoRoutineSchedule>: - 1124: 88 9f be mov.d w8, [w15++] - 1126: 8a 1f 78 mov.w w10, [w15++] - 1128: 8a da 20 mov.w #0xda8, w10 - 112a: 80 0d e2 cp0.w 0xd80 - 112c: 16 00 32 bra Z, . + 0x2E - -0000112e <.L12>: - 112e: 42 a0 a8 bset.b 0x42, #0x5 - 1130: 00 6c 80 mov.w 0xd80, w0 - 1132: 00 00 e0 cp0.w w0 - 1134: 7f 00 3a bra NZ, . + 0x100 - 1136: 00 04 78 mov.w w0, w8 - -00001138 <.L15>: - 1138: 6e 00 44 add.w w8, #0xe, w0 - 113a: 73 fb 07 rcall . + 0xFFFFF6E8 - 113c: 42 a0 a9 bclr.b 0x42, #0x5 - 113e: 88 84 e8 inc2.w w8, w9 - 1140: 09 00 78 mov.w w9, w0 - 1142: 6f fb 07 rcall . + 0xFFFFF6E0 - 1144: d8 08 90 mov.w [w8+26], w1 - 1146: 90 6b 80 mov.w 0xd72, w0 - 1148: 80 8f 50 sub.w w1, w0, [w15] - 114a: 01 00 36 bra LEU, . + 0x4 - 114c: 91 6b 88 mov.w w1, 0xd72 - -0000114e <.L16>: - 114e: 6c 08 b9 mul.su w1, #0xc, w0 - 1150: 00 00 45 add.w w10, w0, w0 - 1152: 89 00 78 mov.w w9, w1 - 1154: 34 fb 07 rcall . + 0xFFFFF66A - 1156: 80 0d e2 cp0.w 0xd80 - 1158: ea ff 3a bra NZ, . + 0xFFFFFFD6 - -0000115a <.L11>: - 115a: 5c fe 07 rcall . + 0xFFFFFCBA - 115c: e2 6b 80 mov.w 0xd7c, w2 - 115e: f3 6b 80 mov.w 0xd7e, w3 - 1160: 02 00 50 sub.w w0, w2, w0 - 1162: 83 80 58 subb.w w1, w3, w1 - 1164: c0 6b 88 mov.w w0, 0xd78 - 1166: d1 6b 88 mov.w w1, 0xd7a - -00001168 <.L54>: - 1168: c0 6b 80 mov.w 0xd78, w0 - 116a: d1 6b 80 mov.w 0xd7a, w1 - 116c: e0 0f 50 sub.w w0, #0x0, [w15] - 116e: e0 8f 58 subb.w w1, #0x0, [w15] - 1170: 44 00 32 bra Z, . + 0x8A - -00001172 <.L19>: - 1172: a4 6b 80 mov.w 0xd74, w4 - 1174: b5 6b 80 mov.w 0xd76, w5 - 1176: 61 01 42 add.w w4, #0x1, w2 - 1178: e0 81 4a addc.w w5, #0x0, w3 - 117a: a2 6b 88 mov.w w2, 0xd74 - 117c: b3 6b 88 mov.w w3, 0xd76 - 117e: 61 00 50 sub.w w0, #0x1, w0 - 1180: e0 80 58 subb.w w1, #0x0, w1 - 1182: c0 6b 88 mov.w w0, 0xd78 - 1184: d1 6b 88 mov.w w1, 0xd7a - 1186: e0 0f 51 sub.w w2, #0x0, [w15] - 1188: e0 8f 59 subb.w w3, #0x0, [w15] - 118a: 04 00 3a bra NZ, . + 0xA - 118c: 70 6c 80 mov.w 0xd8e, w0 - 118e: 65 6c 80 mov.w 0xd8c, w5 - 1190: 75 6c 88 mov.w w5, 0xd8e - 1192: 60 6c 88 mov.w w0, 0xd8c - -00001194 <.L20>: - 1194: 70 6c 80 mov.w 0xd8e, w0 - 1196: 10 00 e0 cp0.w [w0] - 1198: e7 ff 32 bra Z, . + 0xFFFFFFD0 - 119a: 40 00 90 mov.w [w0+8], w0 - 119c: 40 00 90 mov.w [w0+8], w0 - 119e: 00 04 78 mov.w w0, w8 - 11a0: 00 00 e0 cp0.w w0 - 11a2: e2 ff 32 bra Z, . + 0xFFFFFFC6 - 11a4: a0 00 90 mov.w [w0+4], w1 - 11a6: 10 00 90 mov.w [w0+2], w0 - 11a8: 80 0f 51 sub.w w2, w0, [w15] - 11aa: 81 8f 59 subb.w w3, w1, [w15] - 11ac: dd ff 39 bra NC, . + 0xFFFFFFBC - -000011ae <.L51>: - 11ae: 42 a0 a8 bset.b 0x42, #0x5 - 11b0: 88 84 e8 inc2.w w8, w9 - 11b2: 09 00 78 mov.w w9, w0 - 11b4: 36 fb 07 rcall . + 0xFFFFF66E - 11b6: 48 08 90 mov.w [w8+24], w0 - 11b8: 00 00 e0 cp0.w w0 - 11ba: 02 00 32 bra Z, . + 0x6 - 11bc: 6e 00 44 add.w w8, #0xe, w0 - 11be: 31 fb 07 rcall . + 0xFFFFF664 - -000011c0 <.L25>: - 11c0: 42 a0 a9 bclr.b 0x42, #0x5 - 11c2: d8 08 90 mov.w [w8+26], w1 - 11c4: 90 6b 80 mov.w 0xd72, w0 - 11c6: 80 8f 50 sub.w w1, w0, [w15] - 11c8: 01 00 36 bra LEU, . + 0x4 - 11ca: 91 6b 88 mov.w w1, 0xd72 - -000011cc <.L27>: - 11cc: 6c 08 b9 mul.su w1, #0xc, w0 - 11ce: 00 00 45 add.w w10, w0, w0 - 11d0: 89 00 78 mov.w w9, w1 - 11d2: f5 fa 07 rcall . + 0xFFFFF5EC - 11d4: 70 6c 80 mov.w 0xd8e, w0 - 11d6: 10 00 e0 cp0.w [w0] - 11d8: c7 ff 32 bra Z, . + 0xFFFFFF90 - 11da: 40 00 90 mov.w [w0+8], w0 - 11dc: 40 04 90 mov.w [w0+8], w8 - 11de: 08 00 e0 cp0.w w8 - 11e0: c3 ff 32 bra Z, . + 0xFFFFFF88 - 11e2: 18 01 90 mov.w [w8+2], w2 - 11e4: a8 01 90 mov.w [w8+4], w3 - 11e6: a0 6b 80 mov.w 0xd74, w0 - 11e8: b1 6b 80 mov.w 0xd76, w1 - 11ea: 80 0f 51 sub.w w2, w0, [w15] - 11ec: 81 8f 59 subb.w w3, w1, [w15] - 11ee: df ff 36 bra LEU, . + 0xFFFFFFC0 - 11f0: c0 6b 80 mov.w 0xd78, w0 - 11f2: d1 6b 80 mov.w 0xd7a, w1 - 11f4: e0 0f 50 sub.w w0, #0x0, [w15] - 11f6: e0 8f 58 subb.w w1, #0x0, [w15] - 11f8: bc ff 3a bra NZ, . + 0xFFFFFF7A - -000011fa <.L57>: - 11fa: a0 6b 80 mov.w 0xd74, w0 - 11fc: b1 6b 80 mov.w 0xd76, w1 - 11fe: e0 6b 88 mov.w w0, 0xd7c - 1200: f1 6b 88 mov.w w1, 0xd7e - 1202: 94 6b 80 mov.w 0xd72, w4 - 1204: 6c 20 b9 mul.su w4, #0xc, w0 - 1206: 80 00 78 mov.w w0, w1 - 1208: 0a 01 40 add.w w0, w10, w2 - 120a: 92 02 78 mov.w [w2], w5 - 120c: 05 00 e0 cp0.w w5 - 120e: 16 00 3a bra NZ, . + 0x2E - 1210: 04 00 e0 cp0.w w4 - 1212: 0d 00 32 bra Z, . + 0x1C - 1214: c0 d9 20 mov.w #0xd9c, w0 - 1216: 00 80 40 add.w w1, w0, w0 - 1218: 84 01 78 mov.w w4, w3 - 121a: 85 00 78 mov.w w5, w1 - -0000121c <.L34>: - 121c: 83 01 e9 dec.w w3, w3 - 121e: 00 01 78 mov.w w0, w2 - 1220: 10 00 e0 cp0.w [w0] - 1222: 0b 00 3a bra NZ, . + 0x18 - 1224: 81 00 e8 inc.w w1, w1 - 1226: 6c 00 50 sub.w w0, #0xc, w0 - 1228: 84 8f 50 sub.w w1, w4, [w15] - 122a: f8 ff 3a bra NZ, . + 0xFFFFFFF2 - 122c: 93 6b 88 mov.w w3, 0xd72 - -0000122e <.L42>: - 122e: 4f 05 78 mov.w [--w15], w10 - 1230: 4f 04 be mov.d [--w15], w8 - 1232: 00 00 06 return - -00001234 <.L13>: - 1234: 40 6c 80 mov.w 0xd88, w0 - 1236: 40 04 90 mov.w [w0+8], w8 - 1238: 7f ff 37 bra . + 0xFFFFFF00 - -0000123a <.L58>: - 123a: 93 6b 88 mov.w w3, 0xd72 - -0000123c <.L32>: - 123c: 92 00 90 mov.w [w2+2], w1 - 123e: a1 00 90 mov.w [w1+4], w1 - 1240: 11 01 98 mov.w w1, [w2+2] - 1242: 64 00 41 add.w w2, #0x4, w0 - 1244: 80 8f 50 sub.w w1, w0, [w15] - 1246: 09 00 32 bra Z, . + 0x14 - 1248: 41 00 90 mov.w [w1+8], w0 - 124a: e0 6d 88 mov.w w0, 0xdbc - 124c: e0 08 90 mov.w [w0+28], w1 - 124e: 10 01 78 mov.w [w0], w2 - 1250: 02 00 01 call w2 - -00001252 <.L60>: - 1252: 4f 05 78 mov.w [--w15], w10 - 1254: 4f 04 be mov.d [--w15], w8 - 1256: 00 00 06 return - 1258: ed ff 37 bra . + 0xFFFFFFDC - -0000125a <.L59>: - 125a: a1 00 90 mov.w [w1+4], w1 - 125c: 11 01 98 mov.w w1, [w2+2] - 125e: 41 00 90 mov.w [w1+8], w0 - 1260: e0 6d 88 mov.w w0, 0xdbc - 1262: e0 08 90 mov.w [w0+28], w1 - 1264: 10 01 78 mov.w [w0], w2 - 1266: 02 00 01 call w2 - 1268: f4 ff 37 bra . + 0xFFFFFFEA - -0000126a <_xCoRoutineCreate>: - 126a: 88 9f be mov.d w8, [w15++] - 126c: 8a 9f be mov.d w10, [w15++] - 126e: 80 05 78 mov.w w0, w11 - 1270: 02 04 78 mov.w w2, w8 - 1272: 00 02 20 mov.w #0x20, w0 - 1274: 02 01 07 rcall . + 0x206 - 1276: 80 04 78 mov.w w0, w9 - 1278: 00 80 eb setm.w w0 - 127a: 09 00 e0 cp0.w w9 - 127c: 1d 00 32 bra Z, . + 0x3C - 127e: bc 0d e2 cp0.w 0xdbc - 1280: 26 00 32 bra Z, . + 0x4E - 1282: 00 00 eb clr.w w0 - 1284: f0 0c 98 mov.w w0, [w9+30] - 1286: 00 80 eb setm.w w0 - 1288: d0 0c 98 mov.w w0, [w9+26] - 128a: e8 0c 98 mov.w w8, [w9+28] - 128c: 09 05 78 mov.w w9, w10 - 128e: 0b 1d 78 mov.w w11, [w10++] - 1290: 0a 00 78 mov.w w10, w0 - 1292: 92 fa 07 rcall . + 0xFFFFF526 - 1294: 6e 84 44 add.w w9, #0xe, w8 - 1296: 08 00 78 mov.w w8, w0 - 1298: 8f fa 07 rcall . + 0xFFFFF520 - 129a: d9 04 98 mov.w w9, [w9+10] - 129c: b9 0c 98 mov.w w9, [w9+22] - 129e: 50 00 20 mov.w #0x5, w0 - 12a0: f1 ff 2f mov.w #0xffff, w1 - 12a2: 00 8c be mov.d w0, [w8] - 12a4: d9 08 90 mov.w [w9+26], w1 - 12a6: 90 6b 80 mov.w 0xd72, w0 - 12a8: 80 8f 50 sub.w w1, w0, [w15] - 12aa: 09 00 3e bra GTU, . + 0x14 - -000012ac <.L69>: - 12ac: 6c 09 b9 mul.su w1, #0xc, w2 - 12ae: 80 da 20 mov.w #0xda8, w0 - 12b0: 02 00 40 add.w w0, w2, w0 - 12b2: 8a 00 78 mov.w w10, w1 - 12b4: 84 fa 07 rcall . + 0xFFFFF50A - 12b6: 10 00 20 mov.w #0x1, w0 - -000012b8 <.L66>: - 12b8: 4f 05 be mov.d [--w15], w10 - 12ba: 4f 04 be mov.d [--w15], w8 - 12bc: 00 00 06 return - -000012be <.L74>: - 12be: 91 6b 88 mov.w w1, 0xd72 - 12c0: 6c 09 b9 mul.su w1, #0xc, w2 - 12c2: 80 da 20 mov.w #0xda8, w0 - 12c4: 02 00 40 add.w w0, w2, w0 - 12c6: 8a 00 78 mov.w w10, w1 - 12c8: 7a fa 07 rcall . + 0xFFFFF4F6 - 12ca: 10 00 20 mov.w #0x1, w0 - 12cc: f5 ff 37 bra . + 0xFFFFFFEC - -000012ce <.L73>: - 12ce: e9 6d 88 mov.w w9, 0xdbc - 12d0: c0 d9 20 mov.w #0xd9c, w0 - 12d2: 6a fa 07 rcall . + 0xFFFFF4D6 - 12d4: 00 d9 20 mov.w #0xd90, w0 - 12d6: 68 fa 07 rcall . + 0xFFFFF4D2 - 12d8: 00 d8 20 mov.w #0xd80, w0 - 12da: 66 fa 07 rcall . + 0xFFFFF4CE - 12dc: c0 d9 20 mov.w #0xd9c, w0 - 12de: 70 6c 88 mov.w w0, 0xd8e - 12e0: 00 d9 20 mov.w #0xd90, w0 - 12e2: 60 6c 88 mov.w w0, 0xd8c - 12e4: 00 00 eb clr.w w0 - 12e6: f0 0c 98 mov.w w0, [w9+30] - 12e8: 00 80 eb setm.w w0 - 12ea: d0 0c 98 mov.w w0, [w9+26] - 12ec: e8 0c 98 mov.w w8, [w9+28] - 12ee: 09 05 78 mov.w w9, w10 - 12f0: 0b 1d 78 mov.w w11, [w10++] - 12f2: 0a 00 78 mov.w w10, w0 - 12f4: 61 fa 07 rcall . + 0xFFFFF4C4 - 12f6: 6e 84 44 add.w w9, #0xe, w8 - 12f8: 08 00 78 mov.w w8, w0 - 12fa: 5e fa 07 rcall . + 0xFFFFF4BE - 12fc: d9 04 98 mov.w w9, [w9+10] - 12fe: b9 0c 98 mov.w w9, [w9+22] - 1300: 50 00 20 mov.w #0x5, w0 - 1302: f1 ff 2f mov.w #0xffff, w1 - 1304: 00 8c be mov.d w0, [w8] - 1306: d9 08 90 mov.w [w9+26], w1 - 1308: 90 6b 80 mov.w 0xd72, w0 - 130a: 80 8f 50 sub.w w1, w0, [w15] - 130c: cf ff 36 bra LEU, . + 0xFFFFFFA0 - 130e: d7 ff 37 bra . + 0xFFFFFFB0 - -00001310 <_xCoRoutineRemoveFromEventList>: - 1310: 88 9f be mov.d w8, [w15++] - 1312: 90 00 78 mov.w [w0], w1 - 1314: 01 00 e0 cp0.w w1 - 1316: 12 00 32 bra Z, . + 0x26 - 1318: 40 00 90 mov.w [w0+8], w0 - 131a: c0 04 90 mov.w [w0+8], w9 - -0000131c <.L79>: - 131c: 6e 84 44 add.w w9, #0xe, w8 - 131e: 08 00 78 mov.w w8, w0 - 1320: 80 fa 07 rcall . + 0xFFFFF502 - 1322: 88 00 78 mov.w w8, w1 - 1324: 00 d8 20 mov.w #0xd80, w0 - 1326: 4b fa 07 rcall . + 0xFFFFF498 - 1328: 00 01 eb clr.w w2 - 132a: d9 08 90 mov.w [w9+26], w1 - 132c: e0 6d 80 mov.w 0xdbc, w0 - 132e: 50 08 90 mov.w [w0+26], w0 - 1330: 80 8f 50 sub.w w1, w0, [w15] - 1332: 01 00 39 bra NC, . + 0x4 - 1334: 12 00 20 mov.w #0x1, w2 - -00001336 <.L80>: - 1336: 02 00 78 mov.w w2, w0 - 1338: 4f 04 be mov.d [--w15], w8 - 133a: 00 00 06 return - -0000133c <.L83>: - 133c: 81 04 78 mov.w w1, w9 - 133e: ee ff 37 bra . + 0xFFFFFFDE - -00001340 <_pxPortInitialiseStack>: - 1340: 01 08 78 mov.w w1, [w0] - 1342: 80 00 eb clr.w w1 - 1344: 11 00 98 mov.w w1, [w0+2] - 1346: 21 00 98 mov.w w1, [w0+4] - 1348: 32 00 98 mov.w w2, [w0+6] - 134a: e8 00 40 add.w w0, #0x8, w1 - 134c: 60 a5 29 mov.w #0x9a56, w0 - 134e: c2 a8 29 mov.w #0x9a8c, w2 - -00001350 <.L2>: - 1350: b0 18 78 mov.w [w0++], [w1++] - 1352: 80 0f 51 sub.w w2, w0, [w15] - 1354: fd ff 3a bra NZ, . + 0xFFFFFFFC - 1356: 20 02 80 mov.w 0x44, w0 - 1358: 80 08 78 mov.w w0, [w1] - 135a: 34 c0 bf mov.b 0x34, WREG - 135c: 00 80 fb ze w0, w0 - 135e: 90 00 98 mov.w w0, [w1+2] - 1360: 00 00 eb clr.w w0 - 1362: a0 00 98 mov.w w0, [w1+4] - 1364: 66 80 40 add.w w1, #0x6, w0 - 1366: 00 00 06 return - -00001368 <_xPortStartScheduler>: - 1368: 00 00 eb clr.w w0 - 136a: 20 08 88 mov.w w0, 0x104 - 136c: 00 08 88 mov.w w0, 0x100 - 136e: c0 12 20 mov.w #0x12c, w0 - 1370: 10 08 88 mov.w w0, 0x102 - 1372: 95 c0 bf mov.b 0x95, WREG - 1374: f1 c8 b3 mov.b #0x8f, w1 - 1376: 01 40 60 and.b w0, w1, w0 - 1378: 00 44 a0 bset.b w0, #0x4 - 137a: 95 e0 b7 mov.b WREG, 0x95 - 137c: 84 60 a9 bclr.b 0x84, #0x3 - 137e: 8c 60 a8 bset.b 0x8c, #0x3 - 1380: 04 c1 bf mov.b 0x104, WREG - 1382: f1 cc b3 mov.b #0xcf, w1 - 1384: 01 40 60 and.b w0, w1, w0 - 1386: 00 44 a0 bset.b w0, #0x4 - 1388: 04 e1 b7 mov.b WREG, 0x104 - 138a: 05 e1 a8 bset.b 0x105, #0x7 - 138c: d0 6d 80 mov.w 0xdba, w0 - 138e: 90 07 78 mov.w [w0], w15 - 1390: 4f 00 78 mov.w [--w15], w0 - 1392: f0 6d 88 mov.w w0, 0xdbe - 1394: 34 00 f9 pop 0x34 - 1396: 44 00 f9 pop 0x44 - 1398: 40 00 f9 pop 0x40 - 139a: 3e 00 f9 pop 0x3e - 139c: 3c 00 f9 pop 0x3c - 139e: 3a 00 f9 pop 0x3a - 13a0: 38 00 f9 pop 0x38 - 13a2: 2c 00 f9 pop 0x2c - 13a4: 2a 00 f9 pop 0x2a - 13a6: 28 00 f9 pop 0x28 - 13a8: 26 00 f9 pop 0x26 - 13aa: 24 00 f9 pop 0x24 - 13ac: 22 00 f9 pop 0x22 - 13ae: 32 00 f9 pop 0x32 - 13b0: 36 00 f9 pop 0x36 - 13b2: 4f 07 78 mov.w [--w15], w14 - 13b4: 4f 06 be mov.d [--w15], w12 - 13b6: 4f 05 be mov.d [--w15], w10 - 13b8: 4f 04 be mov.d [--w15], w8 - 13ba: 4f 03 be mov.d [--w15], w6 - 13bc: 4f 02 be mov.d [--w15], w4 - 13be: 4f 01 be mov.d [--w15], w2 - 13c0: 4f 00 be mov.d [--w15], w0 - 13c2: 42 00 f9 pop 0x42 - 13c4: 00 00 06 return - 13c6: 10 00 05 retlw.w #0x1, w0 - -000013c8 <_vPortEndScheduler>: - 13c8: 00 00 06 return - -000013ca <_vPortYield>: - 13ca: 42 00 f8 push 0x42 - 13cc: 80 1f 78 mov.w w0, [w15++] - 13ce: 00 02 20 mov.w #0x20, w0 - 13d0: 10 02 88 mov.w w0, 0x42 - 13d2: 81 1f 78 mov.w w1, [w15++] - 13d4: 82 9f be mov.d w2, [w15++] - 13d6: 84 9f be mov.d w4, [w15++] - 13d8: 86 9f be mov.d w6, [w15++] - 13da: 88 9f be mov.d w8, [w15++] - 13dc: 8a 9f be mov.d w10, [w15++] - 13de: 8c 9f be mov.d w12, [w15++] - 13e0: 8e 1f 78 mov.w w14, [w15++] - 13e2: 36 00 f8 push 0x36 - 13e4: 32 00 f8 push 0x32 - 13e6: 22 00 f8 push 0x22 - 13e8: 24 00 f8 push 0x24 - 13ea: 26 00 f8 push 0x26 - 13ec: 28 00 f8 push 0x28 - 13ee: 2a 00 f8 push 0x2a - 13f0: 2c 00 f8 push 0x2c - 13f2: 38 00 f8 push 0x38 - 13f4: 3a 00 f8 push 0x3a - 13f6: 3c 00 f8 push 0x3c - 13f8: 3e 00 f8 push 0x3e - 13fa: 40 00 f8 push 0x40 - 13fc: 44 00 f8 push 0x44 - 13fe: 34 00 f8 push 0x34 - 1400: f0 6d 80 mov.w 0xdbe, w0 - 1402: 80 1f 78 mov.w w0, [w15++] - 1404: d0 6d 80 mov.w 0xdba, w0 - 1406: 0f 08 78 mov.w w15, [w0] - 1408: 14 fd 07 rcall . + 0xFFFFFA2A - 140a: d0 6d 80 mov.w 0xdba, w0 - 140c: 90 07 78 mov.w [w0], w15 - 140e: 4f 00 78 mov.w [--w15], w0 - 1410: f0 6d 88 mov.w w0, 0xdbe - 1412: 34 00 f9 pop 0x34 - 1414: 44 00 f9 pop 0x44 - 1416: 40 00 f9 pop 0x40 - 1418: 3e 00 f9 pop 0x3e - 141a: 3c 00 f9 pop 0x3c - 141c: 3a 00 f9 pop 0x3a - 141e: 38 00 f9 pop 0x38 - 1420: 2c 00 f9 pop 0x2c - 1422: 2a 00 f9 pop 0x2a - 1424: 28 00 f9 pop 0x28 - 1426: 26 00 f9 pop 0x26 - 1428: 24 00 f9 pop 0x24 - 142a: 22 00 f9 pop 0x22 - 142c: 32 00 f9 pop 0x32 - 142e: 36 00 f9 pop 0x36 - 1430: 4f 07 78 mov.w [--w15], w14 - 1432: 4f 06 be mov.d [--w15], w12 - 1434: 4f 05 be mov.d [--w15], w10 - 1436: 4f 04 be mov.d [--w15], w8 - 1438: 4f 03 be mov.d [--w15], w6 - 143a: 4f 02 be mov.d [--w15], w4 - 143c: 4f 01 be mov.d [--w15], w2 - 143e: 4f 00 be mov.d [--w15], w0 - 1440: 42 00 f9 pop 0x42 - 1442: 00 00 06 return - -00001444 <_vPortEnterCritical>: - 1444: 42 a0 a8 bset.b 0x42, #0x5 - 1446: be 2d ec inc.w 0xdbe - 1448: 00 00 06 return - -0000144a <_vPortExitCritical>: - 144a: be 0d ed dec.w 0xdbe, WREG - 144c: f0 6d 88 mov.w w0, 0xdbe - 144e: 01 00 3a bra NZ, . + 0x4 - 1450: 42 a0 a9 bclr.b 0x42, #0x5 - -00001452 <.L28>: - 1452: 00 00 06 return - -00001454 <__T1Interrupt>: - 1454: 36 00 f8 push 0x36 - 1456: 80 9f be mov.d w0, [w15++] - 1458: 82 9f be mov.d w2, [w15++] - 145a: 84 9f be mov.d w4, [w15++] - 145c: 86 9f be mov.d w6, [w15++] - 145e: 34 00 f8 push 0x34 - 1460: 00 c0 b3 mov.b #0x0, w0 - 1462: a0 01 88 mov.w w0, 0x34 - 1464: fb fb 07 rcall . + 0xFFFFF7F8 - 1466: 84 60 a9 bclr.b 0x84, #0x3 - 1468: b0 ff 07 rcall . + 0xFFFFFF62 - 146a: 00 00 00 nop - 146c: 34 00 f9 pop 0x34 - 146e: 4f 03 be mov.d [--w15], w6 - 1470: 4f 02 be mov.d [--w15], w4 - 1472: 4f 01 be mov.d [--w15], w2 - 1474: 4f 00 be mov.d [--w15], w0 - 1476: 36 00 f9 pop 0x36 - 1478: 00 40 06 retfie - -0000147a <_pvPortMalloc>: - 147a: 88 1f 78 mov.w w8, [w15++] - 147c: 00 04 78 mov.w w0, w8 - 147e: 00 08 a3 btst.z w0, #0x0 - 1480: 02 00 32 bra Z, . + 0x6 - 1482: 00 00 a1 bclr.w w0, #0x0 - 1484: 00 84 e8 inc2.w w0, w8 - -00001486 <.L2>: - 1486: e4 fb 07 rcall . + 0xFFFFF7CA - 1488: 02 40 80 mov.w 0x800, w2 - 148a: 82 00 44 add.w w8, w2, w1 - 148c: f0 4f 20 mov.w #0x4ff, w0 - 148e: 80 8f 50 sub.w w1, w0, [w15] - 1490: 05 00 36 bra LEU, . + 0xC - -00001492 <.L4>: - 1492: 00 04 eb clr.w w8 - 1494: 38 fc 07 rcall . + 0xFFFFF872 - 1496: 08 00 78 mov.w w8, w0 - 1498: 4f 04 78 mov.w [--w15], w8 - 149a: 00 00 06 return - -0000149c <.L10>: - 149c: 81 0f 51 sub.w w2, w1, [w15] - 149e: f9 ff 31 bra C, . + 0xFFFFFFF4 - 14a0: 60 80 20 mov.w #0x806, w0 - 14a2: 00 04 41 add.w w2, w0, w8 - 14a4: 01 40 88 mov.w w1, 0x800 - 14a6: 2f fc 07 rcall . + 0xFFFFF860 - 14a8: 08 00 78 mov.w w8, w0 - 14aa: 4f 04 78 mov.w [--w15], w8 - 14ac: 00 00 06 return - 14ae: f6 ff 37 bra . + 0xFFFFFFEE - -000014b0 <_vPortFree>: - 14b0: 00 00 06 return - -000014b2 <_vPortInitialiseBlocks>: - 14b2: 00 28 ef clr.w 0x800 - 14b4: 00 00 06 return - -000014b6 <_canOpenChannel>: - 14b6: 80 80 eb setm.w w1 - 14b8: 00 00 e0 cp0.w w0 - 14ba: 29 00 3a bra NZ, . + 0x54 - 14bc: f0 8f 2f mov.w #0xf8ff, w0 - 14be: 90 23 b6 and.w 0x390 - 14c0: 91 43 a8 bset.b 0x391, #0x2 - 14c2: 01 08 20 mov.w #0x80, w1 - -000014c4 <.L5>: - 14c4: 80 1c 80 mov.w 0x390, w0 - 14c6: 00 0e b2 and.w #0xe0, w0 - 14c8: 81 0f 50 sub.w w0, w1, [w15] - 14ca: fc ff 3a bra NZ, . + 0xFFFFFFFA - 14cc: 92 23 ef clr.w 0x392 - 14ce: 50 08 20 mov.w #0x85, w0 - 14d0: a0 1c 88 mov.w w0, 0x394 - 14d2: 00 80 22 mov.w #0x2800, w0 - 14d4: 90 23 b7 ior.w 0x390 - 14d6: c2 ff 21 mov.w #0x1ffc, w2 - 14d8: 82 19 88 mov.w w2, 0x330 - 14da: f1 ff 20 mov.w #0xfff, w1 - 14dc: 91 19 88 mov.w w1, 0x332 - 14de: 00 c0 2f mov.w #0xfc00, w0 - 14e0: a0 19 88 mov.w w0, 0x334 - 14e2: c2 19 88 mov.w w2, 0x338 - 14e4: d1 19 88 mov.w w1, 0x33a - 14e6: e0 19 88 mov.w w0, 0x33c - 14e8: 02 18 88 mov.w w2, 0x300 - 14ea: 11 18 88 mov.w w1, 0x302 - 14ec: 20 18 88 mov.w w0, 0x304 - 14ee: 42 18 88 mov.w w2, 0x308 - 14f0: 51 18 88 mov.w w1, 0x30a - 14f2: 60 18 88 mov.w w0, 0x30c - 14f4: 82 18 88 mov.w w2, 0x310 - 14f6: 91 18 88 mov.w w1, 0x312 - 14f8: a0 18 88 mov.w w0, 0x314 - 14fa: c2 18 88 mov.w w2, 0x318 - 14fc: d1 18 88 mov.w w1, 0x31a - 14fe: e0 18 88 mov.w w0, 0x31c - 1500: 02 19 88 mov.w w2, 0x320 - 1502: 11 19 88 mov.w w1, 0x322 - 1504: 20 19 88 mov.w w0, 0x324 - 1506: 42 19 88 mov.w w2, 0x328 - 1508: 51 19 88 mov.w w1, 0x32a - 150a: 60 19 88 mov.w w0, 0x32c - 150c: 71 77 27 mov.w #0x7777, w1 - -0000150e <.L4>: - 150e: 01 00 78 mov.w w1, w0 - 1510: 00 00 06 return - -00001512 <_canSetBusParams>: - 1512: 02 00 fa lnk #0x2 - 1514: 88 1f 78 mov.w w8, [w15++] - 1516: 01 04 78 mov.w w1, w8 - 1518: e7 bf 9f mov.w w7, [w15-4] - 151a: e7 ff 2f mov.w #0xfffe, w7 - 151c: 71 77 27 mov.w #0x7777, w1 - 151e: 81 0f 50 sub.w w0, w1, [w15] - 1520: 04 00 32 bra Z, . + 0xA - -00001522 <.L15>: - 1522: 07 00 78 mov.w w7, w0 - 1524: 4f 04 78 mov.w [--w15], w8 - 1526: 00 80 fa ulnk - 1528: 00 00 06 return - -0000152a <.L31>: - 152a: e1 0f 51 sub.w w2, #0x1, [w15] - 152c: e0 8f 59 subb.w w3, #0x0, [w15] - 152e: 21 00 32 bra Z, . + 0x44 - 1530: 88 00 e9 dec.w w8, w1 - 1532: 04 02 e9 dec.w w4, w4 - 1534: 05 00 e9 dec.w w5, w0 - 1536: d7 ff 2f mov.w #0xfffd, w7 - 1538: e7 8f 50 sub.w w1, #0x7, [w15] - 153a: f3 ff 3e bra GTU, . + 0xFFFFFFE8 - 153c: c7 ff 2f mov.w #0xfffc, w7 - 153e: e7 0f 52 sub.w w4, #0x7, [w15] - 1540: f0 ff 3e bra GTU, . + 0xFFFFFFE2 - 1542: b7 ff 2f mov.w #0xfffb, w7 - 1544: e3 0f 50 sub.w w0, #0x3, [w15] - 1546: ed ff 3e bra GTU, . + 0xFFFFFFDC - 1548: e1 0f 53 sub.w w6, #0x1, [w15] - 154a: 26 00 3a bra NZ, . + 0x4E - -0000154c <.L25>: - 154c: 46 00 dd sl.w w0, #0x6, w0 - 154e: 00 0c b2 and.w #0xc0, w0 - 1550: 92 23 b7 ior.w 0x392 - 1552: 43 09 dd sl.w w1, #0x3, w2 - 1554: 82 03 b2 and.w #0x38, w2 - 1556: 48 20 dd sl.w w4, #0x8, w0 - 1558: 01 70 20 mov.w #0x700, w1 - 155a: 01 00 60 and.w w0, w1, w0 - 155c: 80 00 71 ior.w w2, w0, w1 - 155e: 45 30 dd sl.w w6, #0x5, w0 - 1560: 00 04 b2 and.w #0x40, w0 - 1562: 00 80 70 ior.w w1, w0, w0 - 1564: 94 23 b7 ior.w 0x394 - 1566: 80 03 eb clr.w w7 - -00001568 <.L34>: - 1568: 07 00 78 mov.w w7, w0 - 156a: 4f 04 78 mov.w [--w15], w8 - 156c: 00 80 fa ulnk - 156e: 00 00 06 return - 1570: dc ff 37 bra . + 0xFFFFFFBA - -00001572 <.L32>: - 1572: 16 00 20 mov.w #0x1, w6 - 1574: 86 00 78 mov.w w6, w1 - 1576: 24 00 20 mov.w #0x2, w4 - 1578: 06 00 78 mov.w w6, w0 - 157a: 46 00 dd sl.w w0, #0x6, w0 - 157c: 00 0c b2 and.w #0xc0, w0 - 157e: 92 23 b7 ior.w 0x392 - 1580: 43 09 dd sl.w w1, #0x3, w2 - 1582: 82 03 b2 and.w #0x38, w2 - 1584: 48 20 dd sl.w w4, #0x8, w0 - 1586: 01 70 20 mov.w #0x700, w1 - 1588: 01 00 60 and.w w0, w1, w0 - 158a: 80 00 71 ior.w w2, w0, w1 - 158c: 45 30 dd sl.w w6, #0x5, w0 - 158e: 00 04 b2 and.w #0x40, w0 - 1590: 00 80 70 ior.w w1, w0, w0 - 1592: 94 23 b7 ior.w 0x394 - 1594: 80 03 eb clr.w w7 - 1596: e8 ff 37 bra . + 0xFFFFFFD2 - -00001598 <.L33>: - 1598: a7 ff 2f mov.w #0xfffa, w7 - 159a: e3 0f 53 sub.w w6, #0x3, [w15] - 159c: d7 ff 32 bra Z, . + 0xFFFFFFB0 - 159e: 07 00 78 mov.w w7, w0 - 15a0: 4f 04 78 mov.w [--w15], w8 - 15a2: 00 80 fa ulnk - 15a4: 00 00 06 return - 15a6: c1 ff 37 bra . + 0xFFFFFF84 - -000015a8 <_canBusOn>: - 15a8: 00 81 eb setm.w w2 - 15aa: 71 77 27 mov.w #0x7777, w1 - 15ac: 81 0f 50 sub.w w0, w1, [w15] - 15ae: 02 00 32 bra Z, . + 0x6 - 15b0: 02 00 78 mov.w w2, w0 - 15b2: 00 00 06 return - -000015b4 <.L47>: - 15b4: f0 8f 2f mov.w #0xf8ff, w0 - 15b6: 90 23 b6 and.w 0x390 - -000015b8 <.L41>: - 15b8: 80 1c 80 mov.w 0x390, w0 - 15ba: 00 0e b2 and.w #0xe0, w0 - 15bc: fd ff 3a bra NZ, . + 0xFFFFFFFC - 15be: 00 00 78 mov.w w0, w0 - 15c0: 00 00 06 return - 15c2: f8 ff 37 bra . + 0xFFFFFFF2 - -000015c4 <_canBusOff>: - 15c4: 00 81 eb setm.w w2 - 15c6: 71 77 27 mov.w #0x7777, w1 - 15c8: 81 0f 50 sub.w w0, w1, [w15] - 15ca: 02 00 32 bra Z, . + 0x6 - 15cc: 02 00 78 mov.w w2, w0 - 15ce: 00 00 06 return - -000015d0 <.L60>: - 15d0: f0 8f 2f mov.w #0xf8ff, w0 - 15d2: 90 23 b6 and.w 0x390 - 15d4: 91 03 a8 bset.b 0x391, #0x0 - 15d6: 01 02 20 mov.w #0x20, w1 - -000015d8 <.L54>: - 15d8: 80 1c 80 mov.w 0x390, w0 - 15da: 00 0e b2 and.w #0xe0, w0 - 15dc: 81 0f 50 sub.w w0, w1, [w15] - 15de: fc ff 3a bra NZ, . + 0xFFFFFFFA - 15e0: 00 00 20 mov.w #0x0, w0 - 15e2: 00 00 06 return - 15e4: f5 ff 37 bra . + 0xFFFFFFEC - -000015e6 <_canAccept>: - 15e6: 01 02 78 mov.w w1, w4 - 15e8: 71 77 27 mov.w #0x7777, w1 - 15ea: 81 0f 50 sub.w w0, w1, [w15] - 15ec: 02 00 32 bra Z, . + 0x6 - -000015ee <.L64>: - 15ee: 00 80 eb setm.w w0 - 15f0: 00 00 06 return - -000015f2 <.L74>: - 15f2: e4 0f 52 sub.w w4, #0x4, [w15] - 15f4: 26 00 32 bra Z, . + 0x4E - 15f6: 0c 00 3e bra GTU, . + 0x1A - 15f8: e3 0f 52 sub.w w4, #0x3, [w15] - 15fa: f9 ff 3a bra NZ, . + 0xFFFFFFF4 - 15fc: 30 00 2e mov.w #0xe003, w0 - 15fe: 00 23 b6 and.w 0x300 - 1600: 42 18 dd sl.w w3, #0x2, w0 - 1602: ce 11 de lsr.w w2, #0xe, w3 - 1604: 83 01 70 ior.w w0, w3, w3 - 1606: 42 11 dd sl.w w2, #0x2, w2 - 1608: c0 ff 21 mov.w #0x1ffc, w0 - 160a: 00 00 61 and.w w2, w0, w0 - 160c: 00 23 b7 ior.w 0x300 - 160e: 00 00 05 retlw.w #0x0, w0 - -00001610 <.L70>: - 1610: e5 0f 52 sub.w w4, #0x5, [w15] - 1612: 21 00 32 bra Z, . + 0x44 - 1614: e6 0f 52 sub.w w4, #0x6, [w15] - 1616: eb ff 3a bra NZ, . + 0xFFFFFFD8 - 1618: 30 00 2e mov.w #0xe003, w0 - 161a: 30 23 b6 and.w 0x330 - 161c: 40 9a de asr.w w3, #0x0, w4 - 161e: cf a2 de asr.w w4, #0xf, w5 - 1620: c0 ff 21 mov.w #0x1ffc, w0 - 1622: 00 00 62 and.w w4, w0, w0 - 1624: 30 23 b7 ior.w 0x330 - 1626: 00 00 2f mov.w #0xf000, w0 - 1628: 32 23 b6 and.w 0x332 - 162a: c6 9a de asr.w w3, #0x6, w5 - 162c: 4a 18 dd sl.w w3, #0xa, w0 - 162e: 46 12 de lsr.w w2, #0x6, w4 - 1630: 04 02 70 ior.w w0, w4, w4 - 1632: f0 ff 20 mov.w #0xfff, w0 - 1634: 00 00 62 and.w w4, w0, w0 - 1636: 32 23 b7 ior.w 0x332 - 1638: f0 3f 20 mov.w #0x3ff, w0 - 163a: 34 23 b6 and.w 0x334 - 163c: 4a 10 dd sl.w w2, #0xa, w0 - 163e: 34 23 b7 ior.w 0x334 - 1640: 00 00 05 retlw.w #0x0, w0 - -00001642 <.L67>: - 1642: 30 00 2e mov.w #0xe003, w0 - 1644: 30 23 b6 and.w 0x330 - 1646: 42 18 dd sl.w w3, #0x2, w0 - 1648: ce 11 de lsr.w w2, #0xe, w3 - 164a: 83 01 70 ior.w w0, w3, w3 - 164c: 42 11 dd sl.w w2, #0x2, w2 - 164e: c0 ff 21 mov.w #0x1ffc, w0 - 1650: 00 00 61 and.w w2, w0, w0 - 1652: 30 23 b7 ior.w 0x330 - 1654: 00 00 05 retlw.w #0x0, w0 - -00001656 <.L68>: - 1656: 30 00 2e mov.w #0xe003, w0 - 1658: 00 23 b6 and.w 0x300 - 165a: 40 9a de asr.w w3, #0x0, w4 - 165c: cf a2 de asr.w w4, #0xf, w5 - 165e: c0 ff 21 mov.w #0x1ffc, w0 - 1660: 00 00 62 and.w w4, w0, w0 - 1662: 00 23 b7 ior.w 0x300 - 1664: 00 00 2f mov.w #0xf000, w0 - 1666: 02 23 b6 and.w 0x302 - 1668: c6 9a de asr.w w3, #0x6, w5 - 166a: 4a 18 dd sl.w w3, #0xa, w0 - 166c: 46 12 de lsr.w w2, #0x6, w4 - 166e: 04 02 70 ior.w w0, w4, w4 - 1670: f0 ff 20 mov.w #0xfff, w0 - 1672: 00 00 62 and.w w4, w0, w0 - 1674: 02 23 b7 ior.w 0x302 - 1676: f0 3f 20 mov.w #0x3ff, w0 - 1678: 04 23 b6 and.w 0x304 - 167a: 4a 10 dd sl.w w2, #0xa, w0 - 167c: 04 23 b7 ior.w 0x304 - 167e: 00 00 05 retlw.w #0x0, w0 - -00001680 <_canRead>: - 1680: 88 9f be mov.d w8, [w15++] - 1682: 01 04 78 mov.w w1, w8 - 1684: 82 03 78 mov.w w2, w7 - 1686: 83 04 78 mov.w w3, w9 - 1688: 71 77 27 mov.w #0x7777, w1 - 168a: 81 0f 50 sub.w w0, w1, [w15] - 168c: 03 00 32 bra Z, . + 0x8 - -0000168e <.L77>: - 168e: 00 80 eb setm.w w0 - 1690: 4f 04 be mov.d [--w15], w8 - 1692: 00 00 06 return - -00001694 <.L92>: - 1694: 8e e3 ab btst.b 0x38e, #0x7 - 1696: fb ff 32 bra Z, . + 0xFFFFFFF8 - 1698: 80 03 ab btst.b 0x380, #0x0 - 169a: 26 00 3a bra NZ, . + 0x4E - 169c: 20 00 20 mov.w #0x2, w0 - 169e: 00 0a 78 mov.w w0, [w4] - 16a0: 00 1c 80 mov.w 0x380, w0 - 16a2: 43 00 dd sl.w w0, #0x3, w0 - 16a4: 45 00 de lsr.w w0, #0x5, w0 - 16a6: 01 00 20 mov.w #0x0, w1 - 16a8: 00 8c be mov.d w0, [w8] - -000016aa <.L82>: - 16aa: 20 1c 80 mov.w 0x384, w0 - 16ac: 6f 00 60 and.w w0, #0xf, w0 - 16ae: 80 0c 78 mov.w w0, [w9] - 16b0: e4 0f 50 sub.w w0, #0x4, [w15] - 16b2: 0a 00 3e bra GTU, . + 0x16 - 16b4: e3 0f 50 sub.w w0, #0x3, [w15] - 16b6: 10 00 31 bra C, . + 0x22 - 16b8: e1 0f 50 sub.w w0, #0x1, [w15] - 16ba: 10 00 31 bra C, . + 0x22 - -000016bc <.L83>: - 16bc: 8e e3 a9 bclr.b 0x38e, #0x7 - 16be: 70 1c 80 mov.w 0x38e, w0 - 16c0: 00 00 eb clr.w w0 - -000016c2 <.L93>: - 16c2: 4f 04 be mov.d [--w15], w8 - 16c4: 00 00 06 return - 16c6: e6 ff 37 bra . + 0xFFFFFFCE - -000016c8 <.L88>: - 16c8: e6 0f 50 sub.w w0, #0x6, [w15] - 16ca: 04 00 36 bra LEU, . + 0xA - 16cc: e8 0f 50 sub.w w0, #0x8, [w15] - 16ce: f6 ff 3e bra GTU, . + 0xFFFFFFEE - 16d0: 60 1c 80 mov.w 0x38c, w0 - 16d2: b0 03 98 mov.w w0, [w7+6] - -000016d4 <.L86>: - 16d4: 55 1c 80 mov.w 0x38a, w5 - 16d6: a5 03 98 mov.w w5, [w7+4] - -000016d8 <.L85>: - 16d8: 40 1c 80 mov.w 0x388, w0 - 16da: 90 03 98 mov.w w0, [w7+2] - -000016dc <.L84>: - 16dc: 35 1c 80 mov.w 0x386, w5 - 16de: 85 0b 78 mov.w w5, [w7] - 16e0: 8e e3 a9 bclr.b 0x38e, #0x7 - 16e2: 70 1c 80 mov.w 0x38e, w0 - 16e4: 00 00 eb clr.w w0 - 16e6: ed ff 37 bra . + 0xFFFFFFDC - -000016e8 <.L80>: - 16e8: 40 00 20 mov.w #0x4, w0 - 16ea: 00 0a 78 mov.w w0, [w4] - 16ec: 02 1c 80 mov.w 0x380, w2 - 16ee: 10 1c 80 mov.w 0x382, w0 - 16f0: 24 1c 80 mov.w 0x384, w4 - 16f2: c6 ff 21 mov.w #0x1ffc, w6 - 16f4: 06 01 61 and.w w2, w6, w2 - 16f6: 03 00 20 mov.w #0x0, w3 - 16f8: c0 11 dd sl.w w2, #0x0, w3 - 16fa: 02 00 20 mov.w #0x0, w2 - 16fc: f6 ff 20 mov.w #0xfff, w6 - 16fe: 06 00 60 and.w w0, w6, w0 - 1700: 01 00 20 mov.w #0x0, w1 - 1702: c6 0a dd sl.w w1, #0x6, w5 - 1704: ca 00 de lsr.w w0, #0xa, w1 - 1706: 81 80 72 ior.w w5, w1, w1 - 1708: 46 00 dd sl.w w0, #0x6, w0 - 170a: 00 01 71 ior.w w2, w0, w2 - 170c: 81 81 71 ior.w w3, w1, w3 - 170e: 4a 22 de lsr.w w4, #0xa, w4 - 1710: 05 00 20 mov.w #0x0, w5 - 1712: 04 1c 71 ior.w w2, w4, [w8++] - 1714: 05 94 71 ior.w w3, w5, [w8--] - 1716: c9 ff 37 bra . + 0xFFFFFF94 - -00001718 <_canWrite>: - 1718: 88 9f be mov.d w8, [w15++] - 171a: 02 03 be mov.d w2, w6 - 171c: 81 04 78 mov.w w1, w9 - 171e: 04 04 78 mov.w w4, w8 - 1720: 71 77 27 mov.w #0x7777, w1 - 1722: 81 0f 50 sub.w w0, w1, [w15] - 1724: 03 00 32 bra Z, . + 0x8 - -00001726 <.L97>: - 1726: 00 80 eb setm.w w0 - 1728: 4f 04 be mov.d [--w15], w8 - 172a: 00 00 06 return - -0000172c <.L117>: - 172c: 6e c3 bf mov.b 0x36e, WREG - 172e: 00 38 a3 btst.z w0, #0x3 - 1730: fa ff 3a bra NZ, . + 0xFFFFFFF6 - 1732: e8 0f 52 sub.w w4, #0x8, [w15] - 1734: f8 ff 3e bra GTU, . + 0xFFFFFFF2 - 1736: e2 8f 52 sub.w w5, #0x2, [w15] - 1738: 40 00 32 bra Z, . + 0x82 - 173a: e4 8f 52 sub.w w5, #0x4, [w15] - 173c: f4 ff 3a bra NZ, . + 0xFFFFFFEA - 173e: 43 20 dd sl.w w4, #0x3, w0 - 1740: 80 07 b2 and.w #0x78, w0 - 1742: ca 30 dd sl.w w6, #0xa, w1 - 1744: 01 00 70 ior.w w0, w1, w0 - 1746: 20 1b 88 mov.w w0, 0x364 - 1748: 4a 38 dd sl.w w7, #0xa, w0 - 174a: 46 31 de lsr.w w6, #0x6, w2 - 174c: 02 01 70 ior.w w0, w2, w2 - 174e: c6 b9 de asr.w w7, #0x6, w3 - 1750: f2 0f b2 and.w #0xff, w2 - 1752: ce 39 dd sl.w w7, #0xe, w3 - 1754: 42 30 de lsr.w w6, #0x2, w0 - 1756: 00 80 71 ior.w w3, w0, w0 - 1758: c2 b8 de asr.w w7, #0x2, w1 - 175a: 04 00 2f mov.w #0xf000, w4 - 175c: 04 00 60 and.w w0, w4, w0 - 175e: 00 01 71 ior.w w2, w0, w2 - 1760: 12 1b 88 mov.w w2, 0x362 - 1762: 40 b8 de asr.w w7, #0x0, w0 - 1764: cf 80 de asr.w w0, #0xf, w1 - 1766: c0 0f b2 and.w #0xfc, w0 - 1768: c3 38 dd sl.w w7, #0x3, w1 - 176a: 4d 31 de lsr.w w6, #0xd, w2 - 176c: 02 81 70 ior.w w1, w2, w2 - 176e: cd b9 de asr.w w7, #0xd, w3 - 1770: 04 80 2f mov.w #0xf800, w4 - 1772: 04 01 61 and.w w2, w4, w2 - 1774: 02 00 70 ior.w w0, w2, w0 - 1776: 00 00 a0 bset.w w0, #0x0 - 1778: 00 1b 88 mov.w w0, 0x360 - -0000177a <.L103>: - 177a: e4 0f 54 sub.w w8, #0x4, [w15] - 177c: 11 00 3e bra GTU, . + 0x24 - 177e: e3 0f 54 sub.w w8, #0x3, [w15] - 1780: 17 00 31 bra C, . + 0x30 - 1782: e1 0f 54 sub.w w8, #0x1, [w15] - 1784: 17 00 31 bra C, . + 0x30 - -00001786 <.L104>: - 1786: 6e 63 a8 bset.b 0x36e, #0x3 - 1788: 80 00 eb clr.w w1 - 178a: 42 06 20 mov.w #0x64, w2 - -0000178c <.L110>: - 178c: 81 00 e8 inc.w w1, w1 - 178e: 6e c3 bf mov.b 0x36e, WREG - 1790: 00 38 a3 btst.z w0, #0x3 - 1792: 02 00 32 bra Z, . + 0x6 - 1794: 82 8f 50 sub.w w1, w2, [w15] - 1796: fa ff 3a bra NZ, . + 0xFFFFFFF6 - -00001798 <.L111>: - 1798: 00 00 eb clr.w w0 - 179a: 4f 04 be mov.d [--w15], w8 - 179c: 00 00 06 return - 179e: c6 ff 37 bra . + 0xFFFFFF8E - -000017a0 <.L109>: - 17a0: e6 0f 54 sub.w w8, #0x6, [w15] - 17a2: 04 00 36 bra LEU, . + 0xA - 17a4: e8 0f 54 sub.w w8, #0x8, [w15] - 17a6: ef ff 3e bra GTU, . + 0xFFFFFFE0 - 17a8: b9 01 90 mov.w [w9+6], w3 - 17aa: 63 1b 88 mov.w w3, 0x36c - -000017ac <.L107>: - 17ac: 29 00 90 mov.w [w9+4], w0 - 17ae: 50 1b 88 mov.w w0, 0x36a - -000017b0 <.L106>: - 17b0: 99 00 90 mov.w [w9+2], w1 - 17b2: 41 1b 88 mov.w w1, 0x368 - -000017b4 <.L105>: - 17b4: 99 04 78 mov.w [w9], w9 - 17b6: 39 1b 88 mov.w w9, 0x366 - 17b8: e6 ff 37 bra . + 0xFFFFFFCE - -000017ba <.L101>: - 17ba: 42 39 dd sl.w w7, #0x2, w2 - 17bc: ce 31 de lsr.w w6, #0xe, w3 - 17be: 83 01 71 ior.w w2, w3, w3 - 17c0: 42 31 dd sl.w w6, #0x2, w2 - 17c2: c2 0f b2 and.w #0xfc, w2 - 17c4: 45 38 dd sl.w w7, #0x5, w0 - 17c6: cb 30 de lsr.w w6, #0xb, w1 - 17c8: 81 00 70 ior.w w0, w1, w1 - 17ca: 45 30 dd sl.w w6, #0x5, w0 - 17cc: 04 80 2f mov.w #0xf800, w4 - 17ce: 04 00 60 and.w w0, w4, w0 - 17d0: 00 01 71 ior.w w2, w0, w2 - 17d2: 02 1b 88 mov.w w2, 0x360 - 17d4: 43 40 dd sl.w w8, #0x3, w0 - 17d6: 80 07 b2 and.w #0x78, w0 - 17d8: 20 1b 88 mov.w w0, 0x364 - 17da: cf ff 37 bra . + 0xFFFFFFA0 - -000017dc <_aic_on>: - 17dc: a7 00 07 rcall . + 0x150 - 17de: 92 00 37 bra . + 0x126 - -000017e0 <_aic_off>: - 17e0: 60 00 b8 mul.uu w0, #0x0, w0 - 17e2: a6 00 07 rcall . + 0x14E - 17e4: 15 00 07 rcall . + 0x2C - 17e6: a3 00 07 rcall . + 0x148 - 17e8: 8d 00 37 bra . + 0x11C - -000017ea <_aic_initialize>: - 17ea: 88 9f be mov.d w8, [w15++] - 17ec: 8a 9f be mov.d w10, [w15++] - 17ee: 00 04 be mov.d w0, w8 - 17f0: 06 05 be mov.d w6, w10 - 17f2: 90 00 07 rcall . + 0x122 - 17f4: 0a 01 be mov.d w10, w2 - 17f6: 08 00 be mov.d w8, w0 - 17f8: 29 00 07 rcall . + 0x54 - 17fa: 08 00 be mov.d w8, w0 - 17fc: 06 00 07 rcall . + 0xE - 17fe: 08 00 be mov.d w8, w0 - 1800: 1b 00 07 rcall . + 0x38 - 1802: 4f 05 be mov.d [--w15], w10 - 1804: 4f 04 be mov.d [--w15], w8 - 1806: 00 00 06 return - -00001808 <_aic_finalize>: - 1808: eb ff 37 bra . + 0xFFFFFFD8 - -0000180a <_brake_initialize>: - 180a: ca 42 a8 bset.b 0x2ca, #0x2 - 180c: c6 42 a9 bclr.b 0x2c6, #0x2 - 180e: 00 00 06 return - -00001810 <_brake_apply>: - 1810: ca 42 a8 bset.b 0x2ca, #0x2 - 1812: 00 00 06 return - -00001814 <_brake_release>: - 1814: ca 42 a9 bclr.b 0x2ca, #0x2 - 1816: 00 00 06 return - -00001818 <__QEIInterrupt>: - 1818: 34 00 f8 push 0x34 - 181a: 88 1f 78 mov.w w8, [w15++] - 181c: 08 c0 b3 mov.b #0x0, w8 - 181e: a8 01 88 mov.w w8, 0x34 - 1820: 4f 04 78 mov.w [--w15], w8 - 1822: 23 61 ab btst.b 0x123, #0x3 - 1824: 04 00 32 bra Z, . + 0xA - 1826: b0 2d ec inc.w 0xdb0 - 1828: 89 00 a9 bclr.b 0x89, #0x0 - 182a: 34 00 f9 pop 0x34 - 182c: 00 40 06 retfie - -0000182e <.L2>: - 182e: b0 2d ed dec.w 0xdb0 - 1830: 89 00 a9 bclr.b 0x89, #0x0 - 1832: 34 00 f9 pop 0x34 - 1834: 00 40 06 retfie - 1836: fb ff 37 bra . + 0xFFFFFFF8 - -00001838 <_index_initialize>: - 1838: a8 62 a8 bset.b 0x2a8, #0x3 - 183a: 00 00 06 return - -0000183c <_index_finalize>: - 183c: a8 62 a9 bclr.b 0x2a8, #0x3 - 183e: 00 00 06 return - -00001840 <_index_read>: - 1840: 23 c1 bf mov.b 0x123, WREG - 1842: 44 00 de lsr.w w0, #0x4, w0 - 1844: 61 00 60 and.w w0, #0x1, w0 - 1846: 00 80 fb ze w0, w0 - 1848: 01 00 20 mov.w #0x0, w1 - 184a: 00 00 06 return - -0000184c <_encoder_initialize>: - 184c: 92 6d 88 mov.w w2, 0xdb2 - 184e: a3 6d 88 mov.w w3, 0xdb4 - 1850: ac 2d ef clr.w 0xdac - 1852: ae 2d ef clr.w 0xdae - 1854: b0 2d ef clr.w 0xdb0 - 1856: f0 ff 27 mov.w #0x7fff, w0 - 1858: 40 09 88 mov.w w0, 0x128 - 185a: 00 1a 20 mov.w #0x1a0, w0 - 185c: 20 09 88 mov.w w0, 0x124 - 185e: 00 70 20 mov.w #0x700, w0 - 1860: 10 09 88 mov.w w0, 0x122 - 1862: 00 03 20 mov.w #0x30, w0 - 1864: a8 22 b7 ior.w 0x2a8 - 1866: 89 00 a9 bclr.b 0x89, #0x0 - 1868: 91 00 a8 bset.b 0x91, #0x0 - 186a: 70 c0 b3 mov.b #0x7, w0 - 186c: a8 60 b7 ior.b 0xa8 - 186e: 00 00 06 return - -00001870 <_encoder_finalize>: - 1870: 60 00 b8 mul.uu w0, #0x0, w0 - 1872: 90 6d 88 mov.w w0, 0xdb2 - 1874: a1 6d 88 mov.w w1, 0xdb4 - 1876: 60 6d 88 mov.w w0, 0xdac - 1878: 71 6d 88 mov.w w1, 0xdae - 187a: f0 fc 2f mov.w #0xffcf, w0 - 187c: a8 22 b6 and.w 0x2a8 - 187e: 00 00 06 return - -00001880 <_encoder_get_count>: - 1880: 80 6d 80 mov.w 0xdb0, w0 - 1882: 31 09 80 mov.w 0x126, w1 - 1884: 82 6d 80 mov.w 0xdb0, w2 - 1886: 80 0f 51 sub.w w2, w0, [w15] - 1888: fb ff 3a bra NZ, . + 0xFFFFFFF8 - 188a: 61 0a b8 mul.uu w1, #0x1, w4 - 188c: 04 00 42 add.w w4, w4, w0 - 188e: 85 80 4a addc.w w5, w5, w1 - 1890: cf 91 de asr.w w2, #0xf, w3 - 1892: c0 11 dd sl.w w2, #0x0, w3 - 1894: 02 00 20 mov.w #0x0, w2 - 1896: 02 00 70 ior.w w0, w2, w0 - 1898: 83 80 70 ior.w w1, w3, w1 - 189a: 02 02 72 ior.w w4, w2, w4 - 189c: 83 82 72 ior.w w5, w3, w5 - 189e: 44 6d 88 mov.w w4, 0xda8 - 18a0: 55 6d 88 mov.w w5, 0xdaa - 18a2: 81 80 d1 asr.w w1, w1 - 18a4: 00 80 d3 rrc.w w0, w0 - 18a6: 62 6d 80 mov.w 0xdac, w2 - 18a8: 73 6d 80 mov.w 0xdae, w3 - 18aa: 02 00 50 sub.w w0, w2, w0 - 18ac: 83 80 58 subb.w w1, w3, w1 - 18ae: 00 00 06 return - -000018b0 <_encoder_get_count_and_clear>: - 18b0: e7 ff 07 rcall . + 0xFFFFFFD0 - 18b2: 62 6d 80 mov.w 0xdac, w2 - 18b4: 73 6d 80 mov.w 0xdae, w3 - 18b6: 00 01 41 add.w w2, w0, w2 - 18b8: 81 81 49 addc.w w3, w1, w3 - 18ba: 62 6d 88 mov.w w2, 0xdac - 18bc: 73 6d 88 mov.w w3, 0xdae - 18be: 00 00 06 return - -000018c0 <_encoder_read>: - 18c0: 88 9f be mov.d w8, [w15++] - 18c2: de ff 07 rcall . + 0xFFFFFFBE - 18c4: aa f4 07 rcall . + 0xFFFFE956 - 18c6: 00 04 be mov.d w0, w8 - 18c8: 90 6d 80 mov.w 0xdb2, w0 - 18ca: a1 6d 80 mov.w 0xdb4, w1 - 18cc: a6 f4 07 rcall . + 0xFFFFE94E - 18ce: 00 01 be mov.d w0, w2 - 18d0: 08 00 be mov.d w8, w0 - 18d2: ce f4 07 rcall . + 0xFFFFE99E - 18d4: 00 01 be mov.d w0, w2 - 18d6: 0f f5 07 rcall . + 0xFFFFEA20 - 18d8: b2 fd 20 mov.w #0xfdb, w2 - 18da: 93 04 24 mov.w #0x4049, w3 - 18dc: 69 f5 07 rcall . + 0xFFFFEAD4 - 18de: 4f 04 be mov.d [--w15], w8 - 18e0: 00 00 06 return - -000018e2 <_encoder_read_and_clear>: - 18e2: 88 9f be mov.d w8, [w15++] - 18e4: e5 ff 07 rcall . + 0xFFFFFFCC - 18e6: 99 f4 07 rcall . + 0xFFFFE934 - 18e8: 00 04 be mov.d w0, w8 - 18ea: 90 6d 80 mov.w 0xdb2, w0 - 18ec: a1 6d 80 mov.w 0xdb4, w1 - 18ee: 95 f4 07 rcall . + 0xFFFFE92C - 18f0: 00 01 be mov.d w0, w2 - 18f2: 08 00 be mov.d w8, w0 - 18f4: bd f4 07 rcall . + 0xFFFFE97C - 18f6: 00 01 be mov.d w0, w2 - 18f8: fe f4 07 rcall . + 0xFFFFE9FE - 18fa: b2 fd 20 mov.w #0xfdb, w2 - 18fc: 93 04 24 mov.w #0x4049, w3 - 18fe: 58 f5 07 rcall . + 0xFFFFEAB2 - 1900: 4f 04 be mov.d [--w15], w8 - 1902: 00 00 06 return - -00001904 <_encoder_clear>: - 1904: bd ff 07 rcall . + 0xFFFFFF7C - 1906: 62 6d 80 mov.w 0xdac, w2 - 1908: 73 6d 80 mov.w 0xdae, w3 - 190a: 00 01 41 add.w w2, w0, w2 - 190c: 81 81 49 addc.w w3, w1, w3 - 190e: 62 6d 88 mov.w w2, 0xdac - 1910: 73 6d 88 mov.w w3, 0xdae - 1912: 00 00 06 return - -00001914 <_motor_initialize>: - 1914: 04 00 be mov.d w4, w0 - 1916: b2 6d 88 mov.w w2, 0xdb6 - 1918: c3 6d 88 mov.w w3, 0xdb8 - 191a: 2c 00 07 rcall . + 0x5A - 191c: 29 00 07 rcall . + 0x54 - 191e: 80 01 78 mov.w w0, w3 - 1920: 00 01 eb clr.w w2 - 1922: 60 00 b8 mul.uu w0, #0x0, w0 - 1924: 7a 00 37 bra . + 0xF6 - -00001926 <_motor_finalize>: - 1926: b6 2d ef clr.w 0xdb6 - 1928: b8 2d ef clr.w 0xdb8 - 192a: 00 00 06 return - -0000192c <_motor_on>: - 192c: 6e 00 37 bra . + 0xDE - -0000192e <_motor_off>: - 192e: 70 00 37 bra . + 0xE2 - -00001930 <_motor_set>: - 1930: 88 9f be mov.d w8, [w15++] - 1932: 8a 9f be mov.d w10, [w15++] - 1934: 00 01 be mov.d w0, w2 - 1936: b8 6d 80 mov.w 0xdb6, w8 - 1938: c9 6d 80 mov.w 0xdb8, w9 - 193a: 08 00 be mov.d w8, w0 - 193c: dc f4 07 rcall . + 0xFFFFE9BA - 193e: 00 05 be mov.d w0, w10 - 1940: 08 01 be mov.d w8, w2 - 1942: 08 00 be mov.d w8, w0 - 1944: d8 f4 07 rcall . + 0xFFFFE9B2 - 1946: 00 01 be mov.d w0, w2 - 1948: 0a 00 be mov.d w10, w0 - 194a: 92 f4 07 rcall . + 0xFFFFE926 - 194c: 00 04 be mov.d w0, w8 - 194e: 36 00 07 rcall . + 0x6E - 1950: 08 00 be mov.d w8, w0 - 1952: 4f 05 be mov.d [--w15], w10 - 1954: 4f 04 be mov.d [--w15], w8 - 1956: 00 00 06 return - -00001958 <_pwm_set_count>: - 1958: 00 01 78 mov.w w0, w2 - 195a: b0 f9 2f mov.w #0xff9b, w0 - 195c: 00 00 41 add.w w2, w0, w0 - 195e: a1 f9 27 mov.w #0x7f9a, w1 - 1960: 81 0f 50 sub.w w0, w1, [w15] - 1962: 03 00 36 bra LEU, . + 0x8 - 1964: f0 4a 20 mov.w #0x4af, w0 - 1966: 20 0e 88 mov.w w0, 0x1c4 - 1968: 00 00 06 return - -0000196a <.L2>: - 196a: 02 00 e9 dec.w w2, w0 - 196c: 20 0e 88 mov.w w0, 0x1c4 - 196e: 00 00 06 return - -00001970 <_pwm_get_count>: - 1970: c4 01 ec inc.w 0x1c4, WREG - 1972: 00 00 06 return - -00001974 <_pwm_set_freq>: - 1974: 02 00 fa lnk #0x2 - 1976: 00 01 be mov.d w0, w2 - 1978: 00 b0 21 mov.w #0x1b00, w0 - 197a: 71 bb 24 mov.w #0x4bb7, w1 - 197c: 79 f4 07 rcall . + 0xFFFFE8F4 - 197e: 4c f5 07 rcall . + 0xFFFFEA9A - 1980: f0 bf 9f mov.w w0, [w15-2] - 1982: 7f b8 97 mov.w [w15-2], w0 - 1984: e9 ff 07 rcall . + 0xFFFFFFD4 - 1986: 00 80 fa ulnk - 1988: 00 00 06 return - -0000198a <_pwm_get_freq>: - 198a: 88 1f 78 mov.w w8, [w15++] - 198c: 28 0e 80 mov.w 0x1c4, w8 - 198e: 08 04 e8 inc.w w8, w8 - 1990: 61 40 b9 mul.su w8, #0x1, w0 - 1992: 43 f4 07 rcall . + 0xFFFFE888 - 1994: 08 00 e0 cp0.w w8 - 1996: 06 00 35 bra LT, . + 0xE - 1998: 00 01 be mov.d w0, w2 - 199a: 00 b0 21 mov.w #0x1b00, w0 - 199c: 71 bb 24 mov.w #0x4bb7, w1 - 199e: 68 f4 07 rcall . + 0xFFFFE8D2 - 19a0: 4f 04 78 mov.w [--w15], w8 - 19a2: 00 00 06 return - -000019a4 <.L20>: - 19a4: 02 00 20 mov.w #0x0, w2 - 19a6: 03 78 24 mov.w #0x4780, w3 - 19a8: a6 f4 07 rcall . + 0xFFFFE94E - 19aa: 00 01 be mov.d w0, w2 - 19ac: 00 b0 21 mov.w #0x1b00, w0 - 19ae: 71 bb 24 mov.w #0x4bb7, w1 - 19b0: 5f f4 07 rcall . + 0xFFFFE8C0 - 19b2: 4f 04 78 mov.w [--w15], w8 - 19b4: 00 00 06 return - 19b6: f6 ff 37 bra . + 0xFFFFFFEE - -000019b8 <_pwm_set_duty>: - 19b8: b0 0e 88 mov.w w0, 0x1d6 - 19ba: 00 00 06 return - -000019bc <_pwm_set_duty_float>: - 19bc: 88 9f be mov.d w8, [w15++] - 19be: 8a 1f 78 mov.w w10, [w15++] - 19c0: 00 04 be mov.d w0, w8 - 19c2: d6 ff 07 rcall . + 0xFFFFFFAE - 19c4: 00 05 78 mov.w w0, w10 - 19c6: 08 01 be mov.d w8, w2 - 19c8: 08 00 be mov.d w8, w0 - 19ca: 95 f4 07 rcall . + 0xFFFFE92C - 19cc: 00 04 be mov.d w0, w8 - 19ce: 61 50 b9 mul.su w10, #0x1, w0 - 19d0: 24 f4 07 rcall . + 0xFFFFE84A - 19d2: 0a 00 e0 cp0.w w10 - 19d4: 0b 00 35 bra LT, . + 0x18 - 19d6: 00 01 be mov.d w0, w2 - 19d8: 08 00 be mov.d w8, w0 - 19da: ea f4 07 rcall . + 0xFFFFE9D6 - 19dc: 3e f5 07 rcall . + 0xFFFFEA7E - 19de: 00 04 78 mov.w w0, w8 - 19e0: eb ff 07 rcall . + 0xFFFFFFD8 - 19e2: 09 00 20 mov.w #0x0, w9 - 19e4: 08 00 be mov.d w8, w0 - 19e6: 4f 05 78 mov.w [--w15], w10 - 19e8: 4f 04 be mov.d [--w15], w8 - 19ea: 00 00 06 return - -000019ec <.L31>: - 19ec: 02 00 20 mov.w #0x0, w2 - 19ee: 03 78 24 mov.w #0x4780, w3 - 19f0: 82 f4 07 rcall . + 0xFFFFE906 - 19f2: 00 01 be mov.d w0, w2 - 19f4: 08 00 be mov.d w8, w0 - 19f6: dc f4 07 rcall . + 0xFFFFE9BA - 19f8: 30 f5 07 rcall . + 0xFFFFEA62 - 19fa: 00 04 78 mov.w w0, w8 - 19fc: dd ff 07 rcall . + 0xFFFFFFBC - 19fe: 09 00 20 mov.w #0x0, w9 - 1a00: 08 00 be mov.d w8, w0 - 1a02: 4f 05 78 mov.w [--w15], w10 - 1a04: 4f 04 be mov.d [--w15], w8 - 1a06: 00 00 06 return - 1a08: f1 ff 37 bra . + 0xFFFFFFE4 - -00001a0a <_pwm_on>: - 1a0a: 00 30 20 mov.w #0x300, w0 - 1a0c: a0 0e 88 mov.w w0, 0x1d4 - 1a0e: 00 00 06 return - -00001a10 <_pwm_off>: - 1a10: e0 fe 2f mov.w #0xffee, w0 - 1a12: d4 21 b6 and.w 0x1d4 - 1a14: f0 cf 2f mov.w #0xfcff, w0 - 1a16: d4 21 b6 and.w 0x1d4 - 1a18: 00 00 06 return - -00001a1a <_pwm_initialize>: - 1a1a: 88 1f 78 mov.w w8, [w15++] - 1a1c: 03 04 78 mov.w w3, w8 - 1a1e: f8 ff 07 rcall . + 0xFFFFFFF2 - 1a20: 08 00 78 mov.w w8, w0 - 1a22: 9a ff 07 rcall . + 0xFFFFFF36 - 1a24: 00 00 20 mov.w #0x0, w0 - 1a26: 01 f0 23 mov.w #0x3f00, w1 - 1a28: c9 ff 07 rcall . + 0xFFFFFF94 - 1a2a: 20 f0 20 mov.w #0xf02, w0 - 1a2c: 50 0e 88 mov.w w0, 0x1ca - 1a2e: f0 00 20 mov.w #0xf, w0 - 1a30: 60 0e 88 mov.w w0, 0x1cc - 1a32: d0 01 a9 bclr.b 0x1d0, #0x0 - 1a34: 00 0f 2a mov.w #0xa0f0, w0 - 1a36: 00 0e 88 mov.w w0, 0x1c0 - 1a38: 4f 04 78 mov.w [--w15], w8 - 1a3a: 00 00 06 return - -00001a3c <_wdt_initialize>: - 1a3c: 40 a7 a8 bset.b 0x740, #0x5 - 1a3e: 00 00 06 return - -00001a40 <_wdt_ping>: - 1a40: 00 60 fe clrwdt - 1a42: 00 00 06 return - -00001a44 <_wdt_finalize>: - 1a44: 40 a7 a9 bclr.b 0x740, #0x5 - 1a46: 00 00 06 return -Disassembly of section __FOSC: - -00f80000 <__FOSC>: - f80000: ff ff 00 nop -Disassembly of section __FWDT: - -00f80002 <__FWDT>: - f80002: e3 7f 00 nop -Disassembly of section __FBORPOR: - -00f80004 <__FBORPOR>: - f80004: 7f fb 00 nop -Disassembly of section .ivt: - -00000004 <.ivt>: - 4: d0 1a 00 nop - 6: d0 1a 00 nop - 8: d0 1a 00 nop - a: d0 1a 00 nop - c: d0 1a 00 nop - e: d0 1a 00 nop - 10: d0 1a 00 nop - 12: d0 1a 00 nop - 14: d0 1a 00 nop - 16: d0 1a 00 nop - 18: d0 1a 00 nop - 1a: 54 14 00 nop - 1c: d0 1a 00 nop - 1e: d0 1a 00 nop - 20: d0 1a 00 nop - 22: d0 1a 00 nop - 24: d0 1a 00 nop - 26: d0 1a 00 nop - 28: d0 1a 00 nop - 2a: d0 1a 00 nop - 2c: d0 1a 00 nop - 2e: d0 1a 00 nop - 30: d0 1a 00 nop - 32: d0 1a 00 nop - 34: d0 1a 00 nop - 36: d0 1a 00 nop - 38: d0 1a 00 nop - 3a: d0 1a 00 nop - 3c: d0 1a 00 nop - 3e: d0 1a 00 nop - 40: d0 1a 00 nop - 42: d0 1a 00 nop - 44: d0 1a 00 nop - 46: d0 1a 00 nop - 48: d0 1a 00 nop - 4a: d0 1a 00 nop - 4c: d0 1a 00 nop - 4e: d0 1a 00 nop - 50: d0 1a 00 nop - 52: d0 1a 00 nop - 54: d0 1a 00 nop - 56: d0 1a 00 nop - 58: d0 1a 00 nop - 5a: d0 1a 00 nop - 5c: d0 1a 00 nop - 5e: d0 1a 00 nop - 60: d0 1a 00 nop - 62: d0 1a 00 nop - 64: 18 18 00 nop - 66: d0 1a 00 nop - 68: d0 1a 00 nop - 6a: d0 1a 00 nop - 6c: d0 1a 00 nop - 6e: d0 1a 00 nop - 70: d0 1a 00 nop - 72: d0 1a 00 nop - 74: d0 1a 00 nop - 76: d0 1a 00 nop - 78: d0 1a 00 nop - 7a: d0 1a 00 nop - 7c: d0 1a 00 nop - 7e: d0 1a 00 nop -Disassembly of section .aivt: - -00000084 <.aivt>: - 84: d0 1a 00 nop - 86: d0 1a 00 nop - 88: d0 1a 00 nop - 8a: d0 1a 00 nop - 8c: d0 1a 00 nop - 8e: d0 1a 00 nop - 90: d0 1a 00 nop - 92: d0 1a 00 nop - 94: d0 1a 00 nop - 96: d0 1a 00 nop - 98: d0 1a 00 nop - 9a: 54 14 00 nop - 9c: d0 1a 00 nop - 9e: d0 1a 00 nop - a0: d0 1a 00 nop - a2: d0 1a 00 nop - a4: d0 1a 00 nop - a6: d0 1a 00 nop - a8: d0 1a 00 nop - aa: d0 1a 00 nop - ac: d0 1a 00 nop - ae: d0 1a 00 nop - b0: d0 1a 00 nop - b2: d0 1a 00 nop - b4: d0 1a 00 nop - b6: d0 1a 00 nop - b8: d0 1a 00 nop - ba: d0 1a 00 nop - bc: d0 1a 00 nop - be: d0 1a 00 nop - c0: d0 1a 00 nop - c2: d0 1a 00 nop - c4: d0 1a 00 nop - c6: d0 1a 00 nop - c8: d0 1a 00 nop - ca: d0 1a 00 nop - cc: d0 1a 00 nop - ce: d0 1a 00 nop - d0: d0 1a 00 nop - d2: d0 1a 00 nop - d4: d0 1a 00 nop - d6: d0 1a 00 nop - d8: d0 1a 00 nop - da: d0 1a 00 nop - dc: d0 1a 00 nop - de: d0 1a 00 nop - e0: d0 1a 00 nop - e2: d0 1a 00 nop - e4: 18 18 00 nop - e6: d0 1a 00 nop - e8: d0 1a 00 nop - ea: d0 1a 00 nop - ec: d0 1a 00 nop - ee: d0 1a 00 nop - f0: d0 1a 00 nop - f2: d0 1a 00 nop - f4: d0 1a 00 nop - f6: d0 1a 00 nop - f8: d0 1a 00 nop - fa: d0 1a 00 nop - fc: d0 1a 00 nop - fe: d0 1a 00 nop -Disassembly of section .const: - -00009a48 <.LC0>: - 9a48: 44 41 .word 0x4144 - 9a4a: 45 4d .word 0x4d45 - 9a4c: 4f 4e .word 0x4e4f - 9a4e: 00 00 .word 0 - -00009a50 <.LC0>: - 9a50: 49 44 .word 0x4449 - 9a52: 4c 45 .word 0x454c - 9a54: 00 00 .word 0 - -00009a56 <_xInitialStack.2713>: - 9a56: 11 11 .word 0x1111 - 9a58: 22 22 .word 0x2222 - 9a5a: 33 33 .word 0x3333 - 9a5c: 44 44 .word 0x4444 - 9a5e: 55 55 .word 0x5555 - 9a60: 66 66 .word 0x6666 - 9a62: 77 77 .word 0x7777 - 9a64: 88 88 .word 0x8888 - 9a66: 99 99 .word 0x9999 - 9a68: aa aa .word 0xaaaa - 9a6a: bb bb .word 0xbbbb - 9a6c: cc cc .word 0xcccc - 9a6e: dd dd .word 0xdddd - 9a70: ee ee .word 0xeeee - 9a72: ce cd .word 0xcdce - 9a74: ac ab .word 0xabac - 9a76: 02 02 .word 0x202 - 9a78: 03 03 .word 0x303 - 9a7a: 04 04 .word 0x404 - 9a7c: 05 05 .word 0x505 - 9a7e: 06 06 .word 0x606 - 9a80: 07 07 .word 0x707 - 9a82: 08 08 .word 0x808 - 9a84: 0a 09 .word 0x90a - 9a86: 10 10 .word 0x1010 - 9a88: 10 11 .word 0x1110 - 9a8a: 12 12 .word 0x1212 -Disassembly of section .dinit: - -00001a8c <.dinit>: - 1a8c: ba 0d 00 nop - 1a8e: 02 00 00 nop - 1a90: 02 00 00 nop - 1a92: 00 00 00 nop - 1a94: 06 0d 00 nop - 1a96: 6c 00 00 nop - 1a98: 00 00 00 nop - 1a9a: bc 0d 00 nop - 1a9c: 02 00 00 nop - 1a9e: 02 00 00 nop - 1aa0: 00 00 00 nop - 1aa2: 72 0d 00 nop - 1aa4: 36 00 00 nop - 1aa6: 00 00 00 nop - 1aa8: be 0d 00 nop - 1aaa: 02 00 00 nop - 1aac: 02 00 00 nop - 1aae: ef 00 00 nop - 1ab0: 00 08 00 nop - 1ab2: 06 05 00 nop - 1ab4: 00 00 00 nop - 1ab6: a8 0d 00 nop - 1ab8: 08 00 00 nop - 1aba: 02 00 00 nop - ... - 1ac2: b0 0d 00 nop - 1ac4: 06 00 00 nop - 1ac6: 00 00 00 nop - 1ac8: b6 0d 00 nop - 1aca: 04 00 00 nop - ... -Disassembly of section .isr: - -00001ad0 <__DefaultInterrupt>: - 1ad0: 00 00 fe reset diff --git a/FreeRTOS1/croutine.c b/FreeRTOS1/croutine.c deleted file mode 100644 index b8c1868..0000000 --- a/FreeRTOS1/croutine.c +++ /dev/null @@ -1,352 +0,0 @@ -/* - FreeRTOS.org V4.7.2 - Copyright (C) 2003-2008 Richard Barry. - - This file is part of the FreeRTOS.org distribution. - - FreeRTOS.org is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - FreeRTOS.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with FreeRTOS.org; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes FreeRTOS.org, without being obliged to provide - the source code for any proprietary components. See the licensing section - of http://www.FreeRTOS.org for full details of how and when the exception - can be applied. - - *************************************************************************** - - Please ensure to read the configuration and relevant port sections of the - online documentation. - - +++ http://www.FreeRTOS.org +++ - Documentation, latest information, license and contact details. - - +++ http://www.SafeRTOS.com +++ - A version that is certified for use in safety critical systems. - - +++ http://www.OpenRTOS.com +++ - Commercial support, development, porting, licensing and training services. - - *************************************************************************** -*/ - -#include "FreeRTOS.h" -#include "task.h" -#include "croutine.h" - -/* Lists for ready and blocked co-routines. --------------------*/ -static xList pxReadyCoRoutineLists[ configMAX_CO_ROUTINE_PRIORITIES ]; /*< Prioritised ready co-routines. */ -static xList xDelayedCoRoutineList1; /*< Delayed co-routines. */ -static xList xDelayedCoRoutineList2; /*< Delayed co-routines (two lists are used - one for delays that have overflowed the current tick count. */ -static xList * pxDelayedCoRoutineList; /*< Points to the delayed co-routine list currently being used. */ -static xList * pxOverflowDelayedCoRoutineList; /*< Points to the delayed co-routine list currently being used to hold co-routines that have overflowed the current tick count. */ -static xList xPendingReadyList; /*< Holds co-routines that have been readied by an external event. They cannot be added directly to the ready lists as the ready lists cannot be accessed by interrupts. */ - -/* Other file private variables. --------------------------------*/ -corCRCB * pxCurrentCoRoutine = NULL; -static unsigned portBASE_TYPE uxTopCoRoutineReadyPriority = 0; -static portTickType xCoRoutineTickCount = 0; - -/* The initial state of the co-routine when it is created. */ -#define corINITIAL_STATE ( 0 ) - -/* - * Place the co-routine represented by pxCRCB into the appropriate ready queue - * for the priority. It is inserted at the end of the list. - * - * This macro accesses the co-routine ready lists and therefore must not be - * used from within an ISR. - */ -#define prvAddCoRoutineToReadyQueue( pxCRCB ) \ -{ \ - if( pxCRCB->uxPriority > uxTopCoRoutineReadyPriority ) \ - { \ - uxTopCoRoutineReadyPriority = pxCRCB->uxPriority; \ - } \ - vListInsertEnd( ( xList * ) &( pxReadyCoRoutineLists[ pxCRCB->uxPriority ] ), &( pxCRCB->xGenericListItem ) ); \ -} - -/* - * Utility to ready all the lists used by the scheduler. This is called - * automatically upon the creation of the first co-routine. - */ -static void prvInitialiseCoRoutineLists( void ); - -/* - * Co-routines that are readied by an interrupt cannot be placed directly into - * the ready lists (there is no mutual exclusion). Instead they are placed in - * in the pending ready list in order that they can later be moved to the ready - * list by the co-routine scheduler. - */ -static inline void prvCheckPendingReadyList( void ); - -/* - * Macro that looks at the list of co-routines that are currently delayed to - * see if any require waking. - * - * Co-routines are stored in the queue in the order of their wake time - - * meaning once one co-routine has been found whose timer has not expired - * we need not look any further down the list. - */ -static inline void prvCheckDelayedList( void ); - -/*-----------------------------------------------------------*/ - -signed portBASE_TYPE xCoRoutineCreate( crCOROUTINE_CODE pxCoRoutineCode, unsigned portBASE_TYPE uxPriority, unsigned portBASE_TYPE uxIndex ) -{ -signed portBASE_TYPE xReturn; -corCRCB *pxCoRoutine; - - /* Allocate the memory that will store the co-routine control block. */ - pxCoRoutine = ( corCRCB * ) pvPortMalloc( sizeof( corCRCB ) ); - if( pxCoRoutine ) - { - /* If pxCurrentCoRoutine is NULL then this is the first co-routine to - be created and the co-routine data structures need initialising. */ - if( pxCurrentCoRoutine == NULL ) - { - pxCurrentCoRoutine = pxCoRoutine; - prvInitialiseCoRoutineLists(); - } - - /* Check the priority is within limits. */ - if( uxPriority >= configMAX_CO_ROUTINE_PRIORITIES ) - { - uxPriority = configMAX_CO_ROUTINE_PRIORITIES - 1; - } - - /* Fill out the co-routine control block from the function parameters. */ - pxCoRoutine->uxState = corINITIAL_STATE; - pxCoRoutine->uxPriority = uxPriority; - pxCoRoutine->uxIndex = uxIndex; - pxCoRoutine->pxCoRoutineFunction = pxCoRoutineCode; - - /* Initialise all the other co-routine control block parameters. */ - vListInitialiseItem( &( pxCoRoutine->xGenericListItem ) ); - vListInitialiseItem( &( pxCoRoutine->xEventListItem ) ); - - /* Set the co-routine control block as a link back from the xListItem. - This is so we can get back to the containing CRCB from a generic item - in a list. */ - listSET_LIST_ITEM_OWNER( &( pxCoRoutine->xGenericListItem ), pxCoRoutine ); - listSET_LIST_ITEM_OWNER( &( pxCoRoutine->xEventListItem ), pxCoRoutine ); - - /* Event lists are always in priority order. */ - listSET_LIST_ITEM_VALUE( &( pxCoRoutine->xEventListItem ), configMAX_PRIORITIES - ( portTickType ) uxPriority ); - - /* Now the co-routine has been initialised it can be added to the ready - list at the correct priority. */ - prvAddCoRoutineToReadyQueue( pxCoRoutine ); - - xReturn = pdPASS; - } - else - { - xReturn = errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY; - } - - return xReturn; -} -/*-----------------------------------------------------------*/ - -void vCoRoutineAddToDelayedList( portTickType xTicksToDelay, xList *pxEventList ) -{ -portTickType xTimeToWake; - - /* Calculate the time to wake - this may overflow but this is - not a problem. */ - xTimeToWake = xCoRoutineTickCount + xTicksToDelay; - - /* We must remove ourselves from the ready list before adding - ourselves to the blocked list as the same list item is used for - both lists. */ - vListRemove( ( xListItem * ) &( pxCurrentCoRoutine->xGenericListItem ) ); - - /* The list item will be inserted in wake time order. */ - listSET_LIST_ITEM_VALUE( &( pxCurrentCoRoutine->xGenericListItem ), xTimeToWake ); - - if( xTimeToWake < xCoRoutineTickCount ) - { - /* Wake time has overflowed. Place this item in the - overflow list. */ - vListInsert( ( xList * ) pxOverflowDelayedCoRoutineList, ( xListItem * ) &( pxCurrentCoRoutine->xGenericListItem ) ); - } - else - { - /* The wake time has not overflowed, so we can use the - current block list. */ - vListInsert( ( xList * ) pxDelayedCoRoutineList, ( xListItem * ) &( pxCurrentCoRoutine->xGenericListItem ) ); - } - - if( pxEventList ) - { - /* Also add the co-routine to an event list. If this is done then the - function must be called with interrupts disabled. */ - vListInsert( pxEventList, &( pxCurrentCoRoutine->xEventListItem ) ); - } -} -/*-----------------------------------------------------------*/ - -static inline void prvCheckPendingReadyList( void ) -{ - /* Are there any co-routines waiting to get moved to the ready list? These - are co-routines that have been readied by an ISR. The ISR cannot access - the ready lists itself. */ - while( !listLIST_IS_EMPTY( &xPendingReadyList ) ) - { - corCRCB *pxUnblockedCRCB; - - /* The pending ready list can be accessed by an ISR. */ - portDISABLE_INTERRUPTS(); - { - pxUnblockedCRCB = ( corCRCB * ) listGET_OWNER_OF_HEAD_ENTRY( (&xPendingReadyList) ); - vListRemove( &( pxUnblockedCRCB->xEventListItem ) ); - } - portENABLE_INTERRUPTS(); - - vListRemove( &( pxUnblockedCRCB->xGenericListItem ) ); - prvAddCoRoutineToReadyQueue( pxUnblockedCRCB ); - } -} -/*-----------------------------------------------------------*/ - -static inline void prvCheckDelayedList( void ) -{ -static portTickType xLastTickCount, xPassedTicks; -corCRCB *pxCRCB; - - xPassedTicks = xTaskGetTickCount() - xLastTickCount; - while( xPassedTicks ) - { - xCoRoutineTickCount++; - xPassedTicks--; - - /* If the tick count has overflowed we need to swap the ready lists. */ - if( xCoRoutineTickCount == 0 ) - { - xList * pxTemp; - - /* Tick count has overflowed so we need to swap the delay lists. If there are - any items in pxDelayedCoRoutineList here then there is an error! */ - pxTemp = pxDelayedCoRoutineList; - pxDelayedCoRoutineList = pxOverflowDelayedCoRoutineList; - pxOverflowDelayedCoRoutineList = pxTemp; - } - - /* See if this tick has made a timeout expire. */ - while( ( pxCRCB = ( corCRCB * ) listGET_OWNER_OF_HEAD_ENTRY( pxDelayedCoRoutineList ) ) != NULL ) - { - if( xCoRoutineTickCount < listGET_LIST_ITEM_VALUE( &( pxCRCB->xGenericListItem ) ) ) - { - /* Timeout not yet expired. */ - break; - } - - portDISABLE_INTERRUPTS(); - { - /* The event could have occurred just before this critical - section. If this is the case then the generic list item will - have been moved to the pending ready list and the following - line is still valid. Also the pvContainer parameter will have - been set to NULL so the following lines are also valid. */ - vListRemove( &( pxCRCB->xGenericListItem ) ); - - /* Is the co-routine waiting on an event also? */ - if( pxCRCB->xEventListItem.pvContainer ) - { - vListRemove( &( pxCRCB->xEventListItem ) ); - } - } - portENABLE_INTERRUPTS(); - - prvAddCoRoutineToReadyQueue( pxCRCB ); - } - } - - xLastTickCount = xCoRoutineTickCount; -} -/*-----------------------------------------------------------*/ - -void vCoRoutineSchedule( void ) -{ - /* See if any co-routines readied by events need moving to the ready lists. */ - prvCheckPendingReadyList(); - - /* See if any delayed co-routines have timed out. */ - prvCheckDelayedList(); - - /* Find the highest priority queue that contains ready co-routines. */ - while( listLIST_IS_EMPTY( &( pxReadyCoRoutineLists[ uxTopCoRoutineReadyPriority ] ) ) ) - { - if( uxTopCoRoutineReadyPriority == 0 ) - { - /* No more co-routines to check. */ - return; - } - --uxTopCoRoutineReadyPriority; - } - - /* listGET_OWNER_OF_NEXT_ENTRY walks through the list, so the co-routines - of the same priority get an equal share of the processor time. */ - listGET_OWNER_OF_NEXT_ENTRY( pxCurrentCoRoutine, &( pxReadyCoRoutineLists[ uxTopCoRoutineReadyPriority ] ) ); - - /* Call the co-routine. */ - ( pxCurrentCoRoutine->pxCoRoutineFunction )( pxCurrentCoRoutine, pxCurrentCoRoutine->uxIndex ); - - return; -} -/*-----------------------------------------------------------*/ - -static void prvInitialiseCoRoutineLists( void ) -{ -unsigned portBASE_TYPE uxPriority; - - for( uxPriority = 0; uxPriority < configMAX_CO_ROUTINE_PRIORITIES; uxPriority++ ) - { - vListInitialise( ( xList * ) &( pxReadyCoRoutineLists[ uxPriority ] ) ); - } - - vListInitialise( ( xList * ) &xDelayedCoRoutineList1 ); - vListInitialise( ( xList * ) &xDelayedCoRoutineList2 ); - vListInitialise( ( xList * ) &xPendingReadyList ); - - /* Start with pxDelayedCoRoutineList using list1 and the - pxOverflowDelayedCoRoutineList using list2. */ - pxDelayedCoRoutineList = &xDelayedCoRoutineList1; - pxOverflowDelayedCoRoutineList = &xDelayedCoRoutineList2; -} -/*-----------------------------------------------------------*/ - -signed portBASE_TYPE xCoRoutineRemoveFromEventList( const xList *pxEventList ) -{ -corCRCB *pxUnblockedCRCB; -signed portBASE_TYPE xReturn; - - /* This function is called from within an interrupt. It can only access - event lists and the pending ready list. */ - pxUnblockedCRCB = ( corCRCB * ) listGET_OWNER_OF_HEAD_ENTRY( pxEventList ); - vListRemove( &( pxUnblockedCRCB->xEventListItem ) ); - vListInsertEnd( ( xList * ) &( xPendingReadyList ), &( pxUnblockedCRCB->xEventListItem ) ); - - if( pxUnblockedCRCB->uxPriority >= pxCurrentCoRoutine->uxPriority ) - { - xReturn = pdTRUE; - } - else - { - xReturn = pdFALSE; - } - - return xReturn; -} - diff --git a/FreeRTOS1/include/FreeRTOS.h b/FreeRTOS1/include/FreeRTOS.h deleted file mode 100644 index ee963a4..0000000 --- a/FreeRTOS1/include/FreeRTOS.h +++ /dev/null @@ -1,148 +0,0 @@ -/* - FreeRTOS.org V4.7.2 - Copyright (C) 2003-2008 Richard Barry. - - This file is part of the FreeRTOS.org distribution. - - FreeRTOS.org is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - FreeRTOS.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with FreeRTOS.org; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes FreeRTOS.org, without being obliged to provide - the source code for any proprietary components. See the licensing section - of http://www.FreeRTOS.org for full details of how and when the exception - can be applied. - - *************************************************************************** - - Please ensure to read the configuration and relevant port sections of the - online documentation. - - +++ http://www.FreeRTOS.org +++ - Documentation, latest information, license and contact details. - - +++ http://www.SafeRTOS.com +++ - A version that is certified for use in safety critical systems. - - +++ http://www.OpenRTOS.com +++ - Commercial support, development, porting, licensing and training services. - - *************************************************************************** -*/ - -#ifndef INC_FREERTOS_H -#define INC_FREERTOS_H - - -/* - * Include the generic headers required for the FreeRTOS port being used. - */ -#include - -/* Basic FreeRTOS definitions. */ -#include "projdefs.h" - -/* Application specific configuration options. */ -#include "FreeRTOSConfig.h" - -/* Definitions specific to the port being used. */ -#include "portable.h" - - - - - - - -/* - * Check all the required application specific macros have been defined. - * These macros are application specific and (as downloaded) are defined - * within FreeRTOSConfig.h. - */ - -#ifndef configUSE_PREEMPTION - #error Missing definition: configUSE_PREEMPTION should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. -#endif - -#ifndef configUSE_IDLE_HOOK - #error Missing definition: configUSE_IDLE_HOOK should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. -#endif - -#ifndef configUSE_TICK_HOOK - #error Missing definition: configUSE_TICK_HOOK should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. -#endif - -#ifndef configUSE_CO_ROUTINES - #error Missing definition: configUSE_CO_ROUTINES should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. -#endif - -#ifndef INCLUDE_vTaskPrioritySet - #error Missing definition: INCLUDE_vTaskPrioritySet should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. -#endif - -#ifndef INCLUDE_uxTaskPriorityGet - #error Missing definition: INCLUDE_uxTaskPriorityGet should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. -#endif - -#ifndef INCLUDE_vTaskDelete - #error Missing definition: INCLUDE_vTaskDelete should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. -#endif - -#ifndef INCLUDE_vTaskCleanUpResources - #error Missing definition: INCLUDE_vTaskCleanUpResources should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. -#endif - -#ifndef INCLUDE_vTaskSuspend - #error Missing definition: INCLUDE_vTaskSuspend should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. -#endif - -#ifndef INCLUDE_vTaskDelayUntil - #error Missing definition: INCLUDE_vTaskDelayUntil should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. -#endif - -#ifndef INCLUDE_vTaskDelay - #error Missing definition: INCLUDE_vTaskDelay should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. -#endif - -#ifndef configUSE_16_BIT_TICKS - #error Missing definition: configUSE_16_BIT_TICKS should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. -#endif - -#ifndef configUSE_RECURSIVE_MUTEXES - #define configUSE_RECURSIVE_MUTEXES 0 -#endif - -#ifndef configUSE_MUTEXES - #define configUSE_MUTEXES 0 -#endif - -#ifndef configUSE_COUNTING_SEMAPHORES - #define configUSE_COUNTING_SEMAPHORES 0 -#endif - -#ifndef configUSE_ALTERNATIVE_API - #define configUSE_ALTERNATIVE_API 0 -#endif - -#if ( configUSE_MUTEXES == 1 ) - /* xTaskGetCurrentTaskHandle is used by the priority inheritance mechanism - within the mutex implementation so must be available if mutexes are used. */ - #undef INCLUDE_xTaskGetCurrentTaskHandle - #define INCLUDE_xTaskGetCurrentTaskHandle 1 -#else - #ifndef INCLUDE_xTaskGetCurrentTaskHandle - #define INCLUDE_xTaskGetCurrentTaskHandle 0 - #endif -#endif - -#endif /* INC_FREERTOS_H */ diff --git a/FreeRTOS1/include/croutine.h b/FreeRTOS1/include/croutine.h deleted file mode 100644 index 0ba1725..0000000 --- a/FreeRTOS1/include/croutine.h +++ /dev/null @@ -1,730 +0,0 @@ -/* - FreeRTOS.org V4.7.2 - Copyright (C) 2003-2008 Richard Barry. - - This file is part of the FreeRTOS.org distribution. - - FreeRTOS.org is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - FreeRTOS.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with FreeRTOS.org; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes FreeRTOS.org, without being obliged to provide - the source code for any proprietary components. See the licensing section - of http://www.FreeRTOS.org for full details of how and when the exception - can be applied. - - *************************************************************************** - - Please ensure to read the configuration and relevant port sections of the - online documentation. - - +++ http://www.FreeRTOS.org +++ - Documentation, latest information, license and contact details. - - +++ http://www.SafeRTOS.com +++ - A version that is certified for use in safety critical systems. - - +++ http://www.OpenRTOS.com +++ - Commercial support, development, porting, licensing and training services. - - *************************************************************************** -*/ -#ifndef CO_ROUTINE_H -#define CO_ROUTINE_H - -#include "list.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* Used to hide the implementation of the co-routine control block. The -control block structure however has to be included in the header due to -the macro implementation of the co-routine functionality. */ -typedef void * xCoRoutineHandle; - -/* Defines the prototype to which co-routine functions must conform. */ -typedef void (*crCOROUTINE_CODE)( xCoRoutineHandle, unsigned portBASE_TYPE ); - -typedef struct corCoRoutineControlBlock -{ - crCOROUTINE_CODE pxCoRoutineFunction; - xListItem xGenericListItem; /*< List item used to place the CRCB in ready and blocked queues. */ - xListItem xEventListItem; /*< List item used to place the CRCB in event lists. */ - unsigned portBASE_TYPE uxPriority; /*< The priority of the co-routine in relation to other co-routines. */ - unsigned portBASE_TYPE uxIndex; /*< Used to distinguish between co-routines when multiple co-routines use the same co-routine function. */ - unsigned portSHORT uxState; /*< Used internally by the co-routine implementation. */ -} corCRCB; /* Co-routine control block. Note must be identical in size down to uxPriority with tskTCB. */ - -/** - * croutine. h - *
- portBASE_TYPE xCoRoutineCreate(
-                                 crCOROUTINE_CODE pxCoRoutineCode,
-                                 unsigned portBASE_TYPE uxPriority,
-                                 unsigned portBASE_TYPE uxIndex
-                               );
- * - * Create a new co-routine and add it to the list of co-routines that are - * ready to run. - * - * @param pxCoRoutineCode Pointer to the co-routine function. Co-routine - * functions require special syntax - see the co-routine section of the WEB - * documentation for more information. - * - * @param uxPriority The priority with respect to other co-routines at which - * the co-routine will run. - * - * @param uxIndex Used to distinguish between different co-routines that - * execute the same function. See the example below and the co-routine section - * of the WEB documentation for further information. - * - * @return pdPASS if the co-routine was successfully created and added to a ready - * list, otherwise an error code defined with ProjDefs.h. - * - * Example usage: -
- // Co-routine to be created.
- void vFlashCoRoutine( xCoRoutineHandle xHandle, unsigned portBASE_TYPE uxIndex )
- {
- // Variables in co-routines must be declared static if they must maintain value across a blocking call.
- // This may not be necessary for const variables.
- static const char cLedToFlash[ 2 ] = { 5, 6 };
- static const portTickType xTimeToDelay[ 2 ] = { 200, 400 };
-
-     // Must start every co-routine with a call to crSTART();
-     crSTART( xHandle );
-
-     for( ;; )
-     {
-         // This co-routine just delays for a fixed period, then toggles
-         // an LED.  Two co-routines are created using this function, so
-         // the uxIndex parameter is used to tell the co-routine which
-         // LED to flash and how long to delay.  This assumes xQueue has
-         // already been created.
-         vParTestToggleLED( cLedToFlash[ uxIndex ] );
-         crDELAY( xHandle, uxFlashRates[ uxIndex ] );
-     }
-
-     // Must end every co-routine with a call to crEND();
-     crEND();
- }
-
- // Function that creates two co-routines.
- void vOtherFunction( void )
- {
- unsigned char ucParameterToPass;
- xTaskHandle xHandle;
-		
-     // Create two co-routines at priority 0.  The first is given index 0
-     // so (from the code above) toggles LED 5 every 200 ticks.  The second
-     // is given index 1 so toggles LED 6 every 400 ticks.
-     for( uxIndex = 0; uxIndex < 2; uxIndex++ )
-     {
-         xCoRoutineCreate( vFlashCoRoutine, 0, uxIndex );
-     }
- }
-   
- * \defgroup xCoRoutineCreate xCoRoutineCreate - * \ingroup Tasks - */ -signed portBASE_TYPE xCoRoutineCreate( crCOROUTINE_CODE pxCoRoutineCode, unsigned portBASE_TYPE uxPriority, unsigned portBASE_TYPE uxIndex ); - - -/** - * croutine. h - *
- void vCoRoutineSchedule( void );
- * - * Run a co-routine. - * - * vCoRoutineSchedule() executes the highest priority co-routine that is able - * to run. The co-routine will execute until it either blocks, yields or is - * preempted by a task. Co-routines execute cooperatively so one - * co-routine cannot be preempted by another, but can be preempted by a task. - * - * If an application comprises of both tasks and co-routines then - * vCoRoutineSchedule should be called from the idle task (in an idle task - * hook). - * - * Example usage: -
- // This idle task hook will schedule a co-routine each time it is called.
- // The rest of the idle task will execute between co-routine calls.
- void vApplicationIdleHook( void )
- {
-	vCoRoutineSchedule();
- }
-
- // Alternatively, if you do not require any other part of the idle task to
- // execute, the idle task hook can call vCoRoutineScheduler() within an
- // infinite loop.
- void vApplicationIdleHook( void )
- {
-    for( ;; )
-    {
-        vCoRoutineSchedule();
-    }
- }
- 
- * \defgroup vCoRoutineSchedule vCoRoutineSchedule - * \ingroup Tasks - */ -void vCoRoutineSchedule( void ); - -/** - * croutine. h - *
- crSTART( xCoRoutineHandle xHandle );
- * - * This macro MUST always be called at the start of a co-routine function. - * - * Example usage: -
- // Co-routine to be created.
- void vACoRoutine( xCoRoutineHandle xHandle, unsigned portBASE_TYPE uxIndex )
- {
- // Variables in co-routines must be declared static if they must maintain value across a blocking call.
- static portLONG ulAVariable;
-
-     // Must start every co-routine with a call to crSTART();
-     crSTART( xHandle );
-
-     for( ;; )
-     {
-          // Co-routine functionality goes here.
-     }
-
-     // Must end every co-routine with a call to crEND();
-     crEND();
- }
- * \defgroup crSTART crSTART - * \ingroup Tasks - */ -#define crSTART( pxCRCB ) switch( ( ( corCRCB * )pxCRCB )->uxState ) { case 0: - -/** - * croutine. h - *
- crEND();
- * - * This macro MUST always be called at the end of a co-routine function. - * - * Example usage: -
- // Co-routine to be created.
- void vACoRoutine( xCoRoutineHandle xHandle, unsigned portBASE_TYPE uxIndex )
- {
- // Variables in co-routines must be declared static if they must maintain value across a blocking call.
- static portLONG ulAVariable;
-
-     // Must start every co-routine with a call to crSTART();
-     crSTART( xHandle );
-
-     for( ;; )
-     {
-          // Co-routine functionality goes here.
-     }
-
-     // Must end every co-routine with a call to crEND();
-     crEND();
- }
- * \defgroup crSTART crSTART - * \ingroup Tasks - */ -#define crEND() } - -/* - * These macros are intended for internal use by the co-routine implementation - * only. The macros should not be used directly by application writers. - */ -#define crSET_STATE0( xHandle ) ( ( corCRCB * )xHandle)->uxState = (__LINE__ * 2); return; case (__LINE__ * 2): -#define crSET_STATE1( xHandle ) ( ( corCRCB * )xHandle)->uxState = ((__LINE__ * 2)+1); return; case ((__LINE__ * 2)+1): - -/** - * croutine. h - *
- crDELAY( xCoRoutineHandle xHandle, portTickType xTicksToDelay );
- * - * Delay a co-routine for a fixed period of time. - * - * crDELAY can only be called from the co-routine function itself - not - * from within a function called by the co-routine function. This is because - * co-routines do not maintain their own stack. - * - * @param xHandle The handle of the co-routine to delay. This is the xHandle - * parameter of the co-routine function. - * - * @param xTickToDelay The number of ticks that the co-routine should delay - * for. The actual amount of time this equates to is defined by - * configTICK_RATE_HZ (set in FreeRTOSConfig.h). The constant portTICK_RATE_MS - * can be used to convert ticks to milliseconds. - * - * Example usage: -
- // Co-routine to be created.
- void vACoRoutine( xCoRoutineHandle xHandle, unsigned portBASE_TYPE uxIndex )
- {
- // Variables in co-routines must be declared static if they must maintain value across a blocking call.
- // This may not be necessary for const variables.
- // We are to delay for 200ms.
- static const xTickType xDelayTime = 200 / portTICK_RATE_MS;
-
-     // Must start every co-routine with a call to crSTART();
-     crSTART( xHandle );
-
-     for( ;; )
-     {
-        // Delay for 200ms.
-        crDELAY( xHandle, xDelayTime );
-
-        // Do something here.
-     }
-
-     // Must end every co-routine with a call to crEND();
-     crEND();
- }
- * \defgroup crDELAY crDELAY - * \ingroup Tasks - */ -#define crDELAY( xHandle, xTicksToDelay ) \ - if( xTicksToDelay > 0 ) \ - { \ - vCoRoutineAddToDelayedList( xTicksToDelay, NULL ); \ - } \ - crSET_STATE0( xHandle ); - -/** - *
- crQUEUE_SEND(
-                  xCoRoutineHandle xHandle,
-                  xQueueHandle pxQueue,
-                  void *pvItemToQueue,
-                  portTickType xTicksToWait,
-                  portBASE_TYPE *pxResult
-             )
- * - * The macro's crQUEUE_SEND() and crQUEUE_RECEIVE() are the co-routine - * equivalent to the xQueueSend() and xQueueReceive() functions used by tasks. - * - * crQUEUE_SEND and crQUEUE_RECEIVE can only be used from a co-routine whereas - * xQueueSend() and xQueueReceive() can only be used from tasks. - * - * crQUEUE_SEND can only be called from the co-routine function itself - not - * from within a function called by the co-routine function. This is because - * co-routines do not maintain their own stack. - * - * See the co-routine section of the WEB documentation for information on - * passing data between tasks and co-routines and between ISR's and - * co-routines. - * - * @param xHandle The handle of the calling co-routine. This is the xHandle - * parameter of the co-routine function. - * - * @param pxQueue The handle of the queue on which the data will be posted. - * The handle is obtained as the return value when the queue is created using - * the xQueueCreate() API function. - * - * @param pvItemToQueue A pointer to the data being posted onto the queue. - * The number of bytes of each queued item is specified when the queue is - * created. This number of bytes is copied from pvItemToQueue into the queue - * itself. - * - * @param xTickToDelay The number of ticks that the co-routine should block - * to wait for space to become available on the queue, should space not be - * available immediately. The actual amount of time this equates to is defined - * by configTICK_RATE_HZ (set in FreeRTOSConfig.h). The constant - * portTICK_RATE_MS can be used to convert ticks to milliseconds (see example - * below). - * - * @param pxResult The variable pointed to by pxResult will be set to pdPASS if - * data was successfully posted onto the queue, otherwise it will be set to an - * error defined within ProjDefs.h. - * - * Example usage: -
- // Co-routine function that blocks for a fixed period then posts a number onto
- // a queue.
- static void prvCoRoutineFlashTask( xCoRoutineHandle xHandle, unsigned portBASE_TYPE uxIndex )
- {
- // Variables in co-routines must be declared static if they must maintain value across a blocking call.
- static portBASE_TYPE xNumberToPost = 0;
- static portBASE_TYPE xResult;
-
-    // Co-routines must begin with a call to crSTART().
-    crSTART( xHandle );
-
-    for( ;; )
-    {
-        // This assumes the queue has already been created.
-        crQUEUE_SEND( xHandle, xCoRoutineQueue, &xNumberToPost, NO_DELAY, &xResult );
-
-        if( xResult != pdPASS )
-        {
-            // The message was not posted!
-        }
-
-        // Increment the number to be posted onto the queue.
-        xNumberToPost++;
-
-        // Delay for 100 ticks.
-        crDELAY( xHandle, 100 );
-    }
-
-    // Co-routines must end with a call to crEND().
-    crEND();
- }
- * \defgroup crQUEUE_SEND crQUEUE_SEND - * \ingroup Tasks - */ -#define crQUEUE_SEND( xHandle, pxQueue, pvItemToQueue, xTicksToWait, pxResult ) \ -{ \ - *pxResult = xQueueCRSend( pxQueue, pvItemToQueue, xTicksToWait ); \ - if( *pxResult == errQUEUE_BLOCKED ) \ - { \ - crSET_STATE0( xHandle ); \ - *pxResult = xQueueCRSend( pxQueue, pvItemToQueue, 0 ); \ - } \ - if( *pxResult == errQUEUE_YIELD ) \ - { \ - crSET_STATE1( xHandle ); \ - *pxResult = pdPASS; \ - } \ -} - -/** - * croutine. h - *
-  crQUEUE_RECEIVE(
-                     xCoRoutineHandle xHandle,
-                     xQueueHandle pxQueue,
-                     void *pvBuffer,
-                     portTickType xTicksToWait,
-                     portBASE_TYPE *pxResult
-                 )
- * - * The macro's crQUEUE_SEND() and crQUEUE_RECEIVE() are the co-routine - * equivalent to the xQueueSend() and xQueueReceive() functions used by tasks. - * - * crQUEUE_SEND and crQUEUE_RECEIVE can only be used from a co-routine whereas - * xQueueSend() and xQueueReceive() can only be used from tasks. - * - * crQUEUE_RECEIVE can only be called from the co-routine function itself - not - * from within a function called by the co-routine function. This is because - * co-routines do not maintain their own stack. - * - * See the co-routine section of the WEB documentation for information on - * passing data between tasks and co-routines and between ISR's and - * co-routines. - * - * @param xHandle The handle of the calling co-routine. This is the xHandle - * parameter of the co-routine function. - * - * @param pxQueue The handle of the queue from which the data will be received. - * The handle is obtained as the return value when the queue is created using - * the xQueueCreate() API function. - * - * @param pvBuffer The buffer into which the received item is to be copied. - * The number of bytes of each queued item is specified when the queue is - * created. This number of bytes is copied into pvBuffer. - * - * @param xTickToDelay The number of ticks that the co-routine should block - * to wait for data to become available from the queue, should data not be - * available immediately. The actual amount of time this equates to is defined - * by configTICK_RATE_HZ (set in FreeRTOSConfig.h). The constant - * portTICK_RATE_MS can be used to convert ticks to milliseconds (see the - * crQUEUE_SEND example). - * - * @param pxResult The variable pointed to by pxResult will be set to pdPASS if - * data was successfully retrieved from the queue, otherwise it will be set to - * an error code as defined within ProjDefs.h. - * - * Example usage: -
- // A co-routine receives the number of an LED to flash from a queue.  It
- // blocks on the queue until the number is received.
- static void prvCoRoutineFlashWorkTask( xCoRoutineHandle xHandle, unsigned portBASE_TYPE uxIndex )
- {
- // Variables in co-routines must be declared static if they must maintain value across a blocking call.
- static portBASE_TYPE xResult;
- static unsigned portBASE_TYPE uxLEDToFlash;
-
-    // All co-routines must start with a call to crSTART().
-    crSTART( xHandle );
-
-    for( ;; )
-    {
-        // Wait for data to become available on the queue.
-        crQUEUE_RECEIVE( xHandle, xCoRoutineQueue, &uxLEDToFlash, portMAX_DELAY, &xResult );
-
-        if( xResult == pdPASS )
-        {
-            // We received the LED to flash - flash it!
-            vParTestToggleLED( uxLEDToFlash );
-        }
-    }
-
-    crEND();
- }
- * \defgroup crQUEUE_RECEIVE crQUEUE_RECEIVE - * \ingroup Tasks - */ -#define crQUEUE_RECEIVE( xHandle, pxQueue, pvBuffer, xTicksToWait, pxResult ) \ -{ \ - *pxResult = xQueueCRReceive( pxQueue, pvBuffer, xTicksToWait ); \ - if( *pxResult == errQUEUE_BLOCKED ) \ - { \ - crSET_STATE0( xHandle ); \ - *pxResult = xQueueCRReceive( pxQueue, pvBuffer, 0 ); \ - } \ - if( *pxResult == errQUEUE_YIELD ) \ - { \ - crSET_STATE1( xHandle ); \ - *pxResult = pdPASS; \ - } \ -} - -/** - * croutine. h - *
-  crQUEUE_SEND_FROM_ISR(
-                            xQueueHandle pxQueue,
-                            void *pvItemToQueue,
-                            portBASE_TYPE xCoRoutinePreviouslyWoken
-                       )
- * - * The macro's crQUEUE_SEND_FROM_ISR() and crQUEUE_RECEIVE_FROM_ISR() are the - * co-routine equivalent to the xQueueSendFromISR() and xQueueReceiveFromISR() - * functions used by tasks. - * - * crQUEUE_SEND_FROM_ISR() and crQUEUE_RECEIVE_FROM_ISR() can only be used to - * pass data between a co-routine and and ISR, whereas xQueueSendFromISR() and - * xQueueReceiveFromISR() can only be used to pass data between a task and and - * ISR. - * - * crQUEUE_SEND_FROM_ISR can only be called from an ISR to send data to a queue - * that is being used from within a co-routine. - * - * See the co-routine section of the WEB documentation for information on - * passing data between tasks and co-routines and between ISR's and - * co-routines. - * - * @param xQueue The handle to the queue on which the item is to be posted. - * - * @param pvItemToQueue A pointer to the item that is to be placed on the - * queue. The size of the items the queue will hold was defined when the - * queue was created, so this many bytes will be copied from pvItemToQueue - * into the queue storage area. - * - * @param xCoRoutinePreviouslyWoken This is included so an ISR can post onto - * the same queue multiple times from a single interrupt. The first call - * should always pass in pdFALSE. Subsequent calls should pass in - * the value returned from the previous call. - * - * @return pdTRUE if a co-routine was woken by posting onto the queue. This is - * used by the ISR to determine if a context switch may be required following - * the ISR. - * - * Example usage: -
- // A co-routine that blocks on a queue waiting for characters to be received.
- static void vReceivingCoRoutine( xCoRoutineHandle xHandle, unsigned portBASE_TYPE uxIndex )
- {
- portCHAR cRxedChar;
- portBASE_TYPE xResult;
-
-     // All co-routines must start with a call to crSTART().
-     crSTART( xHandle );
-
-     for( ;; )
-     {
-         // Wait for data to become available on the queue.  This assumes the
-         // queue xCommsRxQueue has already been created!
-         crQUEUE_RECEIVE( xHandle, xCommsRxQueue, &uxLEDToFlash, portMAX_DELAY, &xResult );
-
-         // Was a character received?
-         if( xResult == pdPASS )
-         {
-             // Process the character here.
-         }
-     }
-
-     // All co-routines must end with a call to crEND().
-     crEND();
- }
-
- // An ISR that uses a queue to send characters received on a serial port to
- // a co-routine.
- void vUART_ISR( void )
- {
- portCHAR cRxedChar;
- portBASE_TYPE xCRWokenByPost = pdFALSE;
-
-     // We loop around reading characters until there are none left in the UART.
-     while( UART_RX_REG_NOT_EMPTY() )
-     {
-         // Obtain the character from the UART.
-         cRxedChar = UART_RX_REG;
-
-         // Post the character onto a queue.  xCRWokenByPost will be pdFALSE
-         // the first time around the loop.  If the post causes a co-routine
-         // to be woken (unblocked) then xCRWokenByPost will be set to pdTRUE.
-         // In this manner we can ensure that if more than one co-routine is
-         // blocked on the queue only one is woken by this ISR no matter how
-         // many characters are posted to the queue.
-         xCRWokenByPost = crQUEUE_SEND_FROM_ISR( xCommsRxQueue, &cRxedChar, xCRWokenByPost );
-     }
- }
- * \defgroup crQUEUE_SEND_FROM_ISR crQUEUE_SEND_FROM_ISR - * \ingroup Tasks - */ -#define crQUEUE_SEND_FROM_ISR( pxQueue, pvItemToQueue, xCoRoutinePreviouslyWoken ) xQueueCRSendFromISR( pxQueue, pvItemToQueue, xCoRoutinePreviouslyWoken ) - - -/** - * croutine. h - *
-  crQUEUE_SEND_FROM_ISR(
-                            xQueueHandle pxQueue,
-                            void *pvBuffer,
-                            portBASE_TYPE * pxCoRoutineWoken
-                       )
- * - * The macro's crQUEUE_SEND_FROM_ISR() and crQUEUE_RECEIVE_FROM_ISR() are the - * co-routine equivalent to the xQueueSendFromISR() and xQueueReceiveFromISR() - * functions used by tasks. - * - * crQUEUE_SEND_FROM_ISR() and crQUEUE_RECEIVE_FROM_ISR() can only be used to - * pass data between a co-routine and and ISR, whereas xQueueSendFromISR() and - * xQueueReceiveFromISR() can only be used to pass data between a task and and - * ISR. - * - * crQUEUE_RECEIVE_FROM_ISR can only be called from an ISR to receive data - * from a queue that is being used from within a co-routine (a co-routine - * posted to the queue). - * - * See the co-routine section of the WEB documentation for information on - * passing data between tasks and co-routines and between ISR's and - * co-routines. - * - * @param xQueue The handle to the queue on which the item is to be posted. - * - * @param pvBuffer A pointer to a buffer into which the received item will be - * placed. The size of the items the queue will hold was defined when the - * queue was created, so this many bytes will be copied from the queue into - * pvBuffer. - * - * @param pxCoRoutineWoken A co-routine may be blocked waiting for space to become - * available on the queue. If crQUEUE_RECEIVE_FROM_ISR causes such a - * co-routine to unblock *pxCoRoutineWoken will get set to pdTRUE, otherwise - * *pxCoRoutineWoken will remain unchanged. - * - * @return pdTRUE an item was successfully received from the queue, otherwise - * pdFALSE. - * - * Example usage: -
- // A co-routine that posts a character to a queue then blocks for a fixed
- // period.  The character is incremented each time.
- static void vSendingCoRoutine( xCoRoutineHandle xHandle, unsigned portBASE_TYPE uxIndex )
- {
- // cChar holds its value while this co-routine is blocked and must therefore
- // be declared static.
- static portCHAR cCharToTx = 'a';
- portBASE_TYPE xResult;
-
-     // All co-routines must start with a call to crSTART().
-     crSTART( xHandle );
-
-     for( ;; )
-     {
-         // Send the next character to the queue.
-         crQUEUE_SEND( xHandle, xCoRoutineQueue, &cCharToTx, NO_DELAY, &xResult );
-
-         if( xResult == pdPASS )
-         {
-             // The character was successfully posted to the queue.
-         }
-		 else
-		 {
-			// Could not post the character to the queue.
-		 }
-
-         // Enable the UART Tx interrupt to cause an interrupt in this
-		 // hypothetical UART.  The interrupt will obtain the character
-		 // from the queue and send it.
-		 ENABLE_RX_INTERRUPT();
-
-		 // Increment to the next character then block for a fixed period.
-		 // cCharToTx will maintain its value across the delay as it is
-		 // declared static.
-		 cCharToTx++;
-		 if( cCharToTx > 'x' )
-		 {
-			cCharToTx = 'a';
-		 }
-		 crDELAY( 100 );
-     }
-
-     // All co-routines must end with a call to crEND().
-     crEND();
- }
-
- // An ISR that uses a queue to receive characters to send on a UART.
- void vUART_ISR( void )
- {
- portCHAR cCharToTx;
- portBASE_TYPE xCRWokenByPost = pdFALSE;
-
-     while( UART_TX_REG_EMPTY() )
-     {
-         // Are there any characters in the queue waiting to be sent?
-		 // xCRWokenByPost will automatically be set to pdTRUE if a co-routine
-		 // is woken by the post - ensuring that only a single co-routine is
-		 // woken no matter how many times we go around this loop.
-         if( crQUEUE_RECEIVE_FROM_ISR( pxQueue, &cCharToTx, &xCRWokenByPost ) )
-		 {
-			 SEND_CHARACTER( cCharToTx );
-		 }
-     }
- }
- * \defgroup crQUEUE_RECEIVE_FROM_ISR crQUEUE_RECEIVE_FROM_ISR - * \ingroup Tasks - */ -#define crQUEUE_RECEIVE_FROM_ISR( pxQueue, pvBuffer, pxCoRoutineWoken ) xQueueCRReceiveFromISR( pxQueue, pvBuffer, pxCoRoutineWoken ) - -/* - * This function is intended for internal use by the co-routine macros only. - * The macro nature of the co-routine implementation requires that the - * prototype appears here. The function should not be used by application - * writers. - * - * Removes the current co-routine from its ready list and places it in the - * appropriate delayed list. - */ -void vCoRoutineAddToDelayedList( portTickType xTicksToDelay, xList *pxEventList ); - -/* - * This function is intended for internal use by the queue implementation only. - * The function should not be used by application writers. - * - * Removes the highest priority co-routine from the event list and places it in - * the pending ready list. - */ -signed portBASE_TYPE xCoRoutineRemoveFromEventList( const xList *pxEventList ); - -#ifdef __cplusplus -} -#endif - -#endif /* CO_ROUTINE_H */ diff --git a/FreeRTOS1/include/list.h b/FreeRTOS1/include/list.h deleted file mode 100644 index 78fe086..0000000 --- a/FreeRTOS1/include/list.h +++ /dev/null @@ -1,294 +0,0 @@ -/* - FreeRTOS.org V4.7.2 - Copyright (C) 2003-2008 Richard Barry. - - This file is part of the FreeRTOS.org distribution. - - FreeRTOS.org is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - FreeRTOS.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with FreeRTOS.org; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes FreeRTOS.org, without being obliged to provide - the source code for any proprietary components. See the licensing section - of http://www.FreeRTOS.org for full details of how and when the exception - can be applied. - - *************************************************************************** - - Please ensure to read the configuration and relevant port sections of the - online documentation. - - +++ http://www.FreeRTOS.org +++ - Documentation, latest information, license and contact details. - - +++ http://www.SafeRTOS.com +++ - A version that is certified for use in safety critical systems. - - +++ http://www.OpenRTOS.com +++ - Commercial support, development, porting, licensing and training services. - - *************************************************************************** -*/ - -/* - * This is the list implementation used by the scheduler. While it is tailored - * heavily for the schedulers needs, it is also available for use by - * application code. - * - * xLists can only store pointers to xListItems. Each xListItem contains a - * numeric value (xItemValue). Most of the time the lists are sorted in - * descending item value order. - * - * Lists are created already containing one list item. The value of this - * item is the maximum possible that can be stored, it is therefore always at - * the end of the list and acts as a marker. The list member pxHead always - * points to this marker - even though it is at the tail of the list. This - * is because the tail contains a wrap back pointer to the true head of - * the list. - * - * In addition to it's value, each list item contains a pointer to the next - * item in the list (pxNext), a pointer to the list it is in (pxContainer) - * and a pointer to back to the object that contains it. These later two - * pointers are included for efficiency of list manipulation. There is - * effectively a two way link between the object containing the list item and - * the list item itself. - * - * - * \page ListIntroduction List Implementation - * \ingroup FreeRTOSIntro - */ - -/* - Changes from V4.3.1 - - + Included local const within listGET_OWNER_OF_NEXT_ENTRY() to assist - compiler with optimisation. Thanks B.R. -*/ - -#ifndef LIST_H -#define LIST_H - -#ifdef __cplusplus -extern "C" { -#endif -/* - * Definition of the only type of object that a list can contain. - */ -struct xLIST_ITEM -{ - portTickType xItemValue; /*< The value being listed. In most cases this is used to sort the list in descending order. */ - volatile struct xLIST_ITEM * pxNext; /*< Pointer to the next xListItem in the list. */ - volatile struct xLIST_ITEM * pxPrevious;/*< Pointer to the previous xListItem in the list. */ - void * pvOwner; /*< Pointer to the object (normally a TCB) that contains the list item. There is therefore a two way link between the object containing the list item and the list item itself. */ - void * pvContainer; /*< Pointer to the list in which this list item is placed (if any). */ -}; -typedef struct xLIST_ITEM xListItem; /* For some reason lint wants this as two separate definitions. */ - -struct xMINI_LIST_ITEM -{ - portTickType xItemValue; - volatile struct xLIST_ITEM *pxNext; - volatile struct xLIST_ITEM *pxPrevious; -}; -typedef struct xMINI_LIST_ITEM xMiniListItem; - -/* - * Definition of the type of queue used by the scheduler. - */ -typedef struct xLIST -{ - volatile unsigned portBASE_TYPE uxNumberOfItems; - volatile xListItem * pxIndex; /*< Used to walk through the list. Points to the last item returned by a call to pvListGetOwnerOfNextEntry (). */ - volatile xMiniListItem xListEnd; /*< List item that contains the maximum possible item value meaning it is always at the end of the list and is therefore used as a marker. */ -} xList; - -/* - * Access macro to set the owner of a list item. The owner of a list item - * is the object (usually a TCB) that contains the list item. - * - * \page listSET_LIST_ITEM_OWNER listSET_LIST_ITEM_OWNER - * \ingroup LinkedList - */ -#define listSET_LIST_ITEM_OWNER( pxListItem, pxOwner ) ( pxListItem )->pvOwner = ( void * ) pxOwner - -/* - * Access macro to set the value of the list item. In most cases the value is - * used to sort the list in descending order. - * - * \page listSET_LIST_ITEM_VALUE listSET_LIST_ITEM_VALUE - * \ingroup LinkedList - */ -#define listSET_LIST_ITEM_VALUE( pxListItem, xValue ) ( pxListItem )->xItemValue = xValue - -/* - * Access macro the retrieve the value of the list item. The value can - * represent anything - for example a the priority of a task, or the time at - * which a task should be unblocked. - * - * \page listGET_LIST_ITEM_VALUE listGET_LIST_ITEM_VALUE - * \ingroup LinkedList - */ -#define listGET_LIST_ITEM_VALUE( pxListItem ) ( ( pxListItem )->xItemValue ) - -/* - * Access macro to determine if a list contains any items. The macro will - * only have the value true if the list is empty. - * - * \page listLIST_IS_EMPTY listLIST_IS_EMPTY - * \ingroup LinkedList - */ -#define listLIST_IS_EMPTY( pxList ) ( ( pxList )->uxNumberOfItems == ( unsigned portBASE_TYPE ) 0 ) - -/* - * Access macro to return the number of items in the list. - */ -#define listCURRENT_LIST_LENGTH( pxList ) ( ( pxList )->uxNumberOfItems ) - -/* - * Access function to obtain the owner of the next entry in a list. - * - * The list member pxIndex is used to walk through a list. Calling - * listGET_OWNER_OF_NEXT_ENTRY increments pxIndex to the next item in the list - * and returns that entries pxOwner parameter. Using multiple calls to this - * function it is therefore possible to move through every item contained in - * a list. - * - * The pxOwner parameter of a list item is a pointer to the object that owns - * the list item. In the scheduler this is normally a task control block. - * The pxOwner parameter effectively creates a two way link between the list - * item and its owner. - * - * @param pxList The list from which the next item owner is to be returned. - * - * \page listGET_OWNER_OF_NEXT_ENTRY listGET_OWNER_OF_NEXT_ENTRY - * \ingroup LinkedList - */ -#define listGET_OWNER_OF_NEXT_ENTRY( pxTCB, pxList ) \ -{ \ -xList * const pxConstList = pxList; \ - /* Increment the index to the next item and return the item, ensuring */ \ - /* we don't return the marker used at the end of the list. */ \ - ( pxConstList )->pxIndex = ( pxConstList )->pxIndex->pxNext; \ - if( ( pxConstList )->pxIndex == ( xListItem * ) &( ( pxConstList )->xListEnd ) ) \ - { \ - ( pxConstList )->pxIndex = ( pxConstList )->pxIndex->pxNext; \ - } \ - pxTCB = ( pxConstList )->pxIndex->pvOwner; \ -} - - -/* - * Access function to obtain the owner of the first entry in a list. Lists - * are normally sorted in ascending item value order. - * - * This function returns the pxOwner member of the first item in the list. - * The pxOwner parameter of a list item is a pointer to the object that owns - * the list item. In the scheduler this is normally a task control block. - * The pxOwner parameter effectively creates a two way link between the list - * item and its owner. - * - * @param pxList The list from which the owner of the head item is to be - * returned. - * - * \page listGET_OWNER_OF_HEAD_ENTRY listGET_OWNER_OF_HEAD_ENTRY - * \ingroup LinkedList - */ -#define listGET_OWNER_OF_HEAD_ENTRY( pxList ) ( ( pxList->uxNumberOfItems != ( unsigned portBASE_TYPE ) 0 ) ? ( (&( pxList->xListEnd ))->pxNext->pvOwner ) : ( NULL ) ) - -/* - * Check to see if a list item is within a list. The list item maintains a - * "container" pointer that points to the list it is in. All this macro does - * is check to see if the container and the list match. - * - * @param pxList The list we want to know if the list item is within. - * @param pxListItem The list item we want to know if is in the list. - * @return pdTRUE is the list item is in the list, otherwise pdFALSE. - * pointer against - */ -#define listIS_CONTAINED_WITHIN( pxList, pxListItem ) ( ( pxListItem )->pvContainer == ( void * ) pxList ) - -/* - * Must be called before a list is used! This initialises all the members - * of the list structure and inserts the xListEnd item into the list as a - * marker to the back of the list. - * - * @param pxList Pointer to the list being initialised. - * - * \page vListInitialise vListInitialise - * \ingroup LinkedList - */ -void vListInitialise( xList *pxList ); - -/* - * Must be called before a list item is used. This sets the list container to - * null so the item does not think that it is already contained in a list. - * - * @param pxItem Pointer to the list item being initialised. - * - * \page vListInitialiseItem vListInitialiseItem - * \ingroup LinkedList - */ -void vListInitialiseItem( xListItem *pxItem ); - -/* - * Insert a list item into a list. The item will be inserted into the list in - * a position determined by its item value (descending item value order). - * - * @param pxList The list into which the item is to be inserted. - * - * @param pxNewListItem The item to that is to be placed in the list. - * - * \page vListInsert vListInsert - * \ingroup LinkedList - */ -void vListInsert( xList *pxList, xListItem *pxNewListItem ); - -/* - * Insert a list item into a list. The item will be inserted in a position - * such that it will be the last item within the list returned by multiple - * calls to listGET_OWNER_OF_NEXT_ENTRY. - * - * The list member pvIndex is used to walk through a list. Calling - * listGET_OWNER_OF_NEXT_ENTRY increments pvIndex to the next item in the list. - * Placing an item in a list using vListInsertEnd effectively places the item - * in the list position pointed to by pvIndex. This means that every other - * item within the list will be returned by listGET_OWNER_OF_NEXT_ENTRY before - * the pvIndex parameter again points to the item being inserted. - * - * @param pxList The list into which the item is to be inserted. - * - * @param pxNewListItem The list item to be inserted into the list. - * - * \page vListInsertEnd vListInsertEnd - * \ingroup LinkedList - */ -void vListInsertEnd( xList *pxList, xListItem *pxNewListItem ); - -/* - * Remove an item from a list. The list item has a pointer to the list that - * it is in, so only the list item need be passed into the function. - * - * @param vListRemove The item to be removed. The item will remove itself from - * the list pointed to by it's pxContainer parameter. - * - * \page vListRemove vListRemove - * \ingroup LinkedList - */ -void vListRemove( xListItem *pxItemToRemove ); - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/FreeRTOS1/include/portable.h b/FreeRTOS1/include/portable.h deleted file mode 100644 index 2acf92b..0000000 --- a/FreeRTOS1/include/portable.h +++ /dev/null @@ -1,271 +0,0 @@ -/* - FreeRTOS.org V4.7.2 - Copyright (C) 2003-2008 Richard Barry. - - This file is part of the FreeRTOS.org distribution. - - FreeRTOS.org is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - FreeRTOS.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with FreeRTOS.org; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes FreeRTOS.org, without being obliged to provide - the source code for any proprietary components. See the licensing section - of http:www.FreeRTOS.org for full details of how and when the exception - can be applied. - - *************************************************************************** - - Please ensure to read the configuration and relevant port sections of the - online documentation. - - +++ http://www.FreeRTOS.org +++ - Documentation, latest information, license and contact details. - - +++ http://www.SafeRTOS.com +++ - A version that is certified for use in safety critical systems. - - +++ http://www.OpenRTOS.com +++ - Commercial support, development, porting, licensing and training services. - - *************************************************************************** -*/ - -/*----------------------------------------------------------- - * Portable layer API. Each function must be defined for each port. - *----------------------------------------------------------*/ - -#ifndef PORTABLE_H -#define PORTABLE_H - -/* Include the macro file relevant to the port being used. */ - -#ifdef OPEN_WATCOM_INDUSTRIAL_PC_PORT - #include "..\..\source\portable\owatcom\16bitdos\pc\portmacro.h" - typedef void ( __interrupt __far *pxISR )(); -#endif - -#ifdef OPEN_WATCOM_FLASH_LITE_186_PORT - #include "..\..\source\portable\owatcom\16bitdos\flsh186\portmacro.h" - typedef void ( __interrupt __far *pxISR )(); -#endif - -#ifdef GCC_MEGA_AVR - #include "../portable/GCC/ATMega323/portmacro.h" -#endif - -#ifdef IAR_MEGA_AVR - #include "../portable/IAR/ATMega323/portmacro.h" -#endif - -#ifdef MPLAB_PIC24_PORT - #include "..\..\Source\portable\MPLAB\PIC24_dsPIC\portmacro.h" -#endif - -#ifdef MPLAB_DSPIC_PORT - #include "../../Source/portable/MPLAB/PIC24_dsPIC/portmacro.h" -#endif - -#ifdef AIC_DSPIC_PORT -#include "../../FreeRTOS/portable/AIC-2.0.0/portmacro.h" -#endif - -#ifdef MPLAB_PIC18F_PORT - #include "..\..\source\portable\MPLAB\PIC18F\portmacro.h" -#endif - -#ifdef MPLAB_PIC32MX_PORT - #include "..\..\Source\portable\MPLAB\PIC32MX\portmacro.h" -#endif - -#ifdef _FEDPICC - #include "libFreeRTOS/Include/portmacro.h" -#endif - -#ifdef SDCC_CYGNAL - #include "../../Source/portable/SDCC/Cygnal/portmacro.h" -#endif - -#ifdef GCC_ARM7 - #include "../../Source/portable/GCC/ARM7_LPC2000/portmacro.h" -#endif - -#ifdef GCC_ARM7_ECLIPSE - #include "portmacro.h" -#endif - -#ifdef ROWLEY_LPC23xx - #include "../../Source/portable/GCC/ARM7_LPC23xx/portmacro.h" -#endif - -#ifdef GCC_MSP430 - #include "../../Source/portable/GCC/MSP430F449/portmacro.h" -#endif - -#ifdef ROWLEY_MSP430 - #include "../../Source/portable/Rowley/MSP430F449/portmacro.h" -#endif - -#ifdef KEIL_ARM7 - #include "..\..\Source\portable\Keil\ARM7\portmacro.h" -#endif - -#ifdef SAM7_GCC - #include "../../Source/portable/GCC/ARM7_AT91SAM7S/portmacro.h" -#endif - -#ifdef SAM7_IAR - #include "..\..\Source\portable\IAR\AtmelSAM7S64\portmacro.h" -#endif - -#ifdef LPC2000_IAR - #include "..\..\Source\portable\IAR\LPC2000\portmacro.h" -#endif - -#ifdef STR71X_IAR - #include "..\..\Source\portable\IAR\STR71x\portmacro.h" -#endif - -#ifdef STR75X_IAR - #include "..\..\Source\portable\IAR\STR75x\portmacro.h" -#endif - -#ifdef STR75X_GCC - #include "..\..\Source\portable\GCC\STR75x\portmacro.h" -#endif - -#ifdef STR91X_IAR - #include "..\..\Source\portable\IAR\STR91x\portmacro.h" -#endif - -#ifdef GCC_H8S - #include "../../Source/portable/GCC/H8S2329/portmacro.h" -#endif - -#ifdef GCC_AT91FR40008 - #include "../../Source/portable/GCC/ARM7_AT91FR40008/portmacro.h" -#endif - -#ifdef RVDS_ARMCM3_LM3S102 - #include "../../Source/portable/RVDS/ARM_CM3/portmacro.h" -#endif - -#ifdef GCC_ARMCM3_LM3S102 - #include "../../Source/portable/GCC/ARM_CM3/portmacro.h" -#endif - -#ifdef GCC_ARMCM3 - #include "../../Source/portable/GCC/ARM_CM3/portmacro.h" -#endif - -#ifdef IAR_ARM_CM3 - #include "../../Source/portable/IAR/ARM_CM3/portmacro.h" -#endif - -#ifdef IAR_ARMCM3_LM - #include "../../Source/portable/IAR/ARM_CM3/portmacro.h" -#endif - -#ifdef HCS12_CODE_WARRIOR - #include "../../Source/portable/CodeWarrior/HCS12/portmacro.h" -#endif - -#ifdef MICROBLAZE_GCC - #include "../../Source/portable/GCC/MicroBlaze/portmacro.h" -#endif - -#ifdef TERN_EE - #include "..\..\Source\portable\Paradigm\Tern_EE\small\portmacro.h" -#endif - -#ifdef GCC_HCS12 - #include "../../Source/portable/GCC/HCS12/portmacro.h" -#endif - -#ifdef GCC_MCF5235 - #include "../../Source/portable/GCC/MCF5235/portmacro.h" -#endif - -#ifdef BCC_INDUSTRIAL_PC_PORT - /* A short file name has to be used in place of the normal - FreeRTOSConfig.h when using the Borland compiler. */ - #include "frconfig.h" - #include "..\portable\BCC\16BitDOS\PC\prtmacro.h" - typedef void ( __interrupt __far *pxISR )(); -#endif - -#ifdef BCC_FLASH_LITE_186_PORT - /* A short file name has to be used in place of the normal - FreeRTOSConfig.h when using the Borland compiler. */ - #include "frconfig.h" - #include "..\portable\BCC\16BitDOS\flsh186\prtmacro.h" - typedef void ( __interrupt __far *pxISR )(); -#endif - -#ifdef __GNUC__ - #ifdef __AVR32_AVR32A__ - #include "portmacro.h" - #endif -#endif - -#ifdef __ICCAVR32__ - #ifdef __CORE__ - #if __CORE__ == __AVR32A__ - #include "portmacro.h" - #endif - #endif -#endif - -#ifdef __91467D - #include "portmacro.h" -#endif - -#ifdef __96340 - #include "portmacro.h" -#endif - -#ifdef __cplusplus -extern "C" { -#endif -/* - * Setup the stack of a new task so it is ready to be placed under the - * scheduler control. The registers have to be placed on the stack in - * the order that the port expects to find them. - */ -portSTACK_TYPE *pxPortInitialiseStack( portSTACK_TYPE *pxTopOfStack, pdTASK_CODE pxCode, void *pvParameters ); - -/* - * Map to the memory management routines required for the port. - */ -void *pvPortMalloc( size_t xSize ); -void vPortFree( void *pv ); -void vPortInitialiseBlocks( void ); - -/* - * Setup the hardware ready for the scheduler to take control. This generally - * sets up a tick interrupt and sets timers for the correct tick frequency. - */ -portBASE_TYPE xPortStartScheduler( void ); - -/* - * Undo any hardware/ISR setup that was performed by xPortStartScheduler() so - * the hardware is left in its original condition after the scheduler stops - * executing. - */ -void vPortEndScheduler( void ); - -#ifdef __cplusplus -} -#endif - -#endif /* PORTABLE_H */ - diff --git a/FreeRTOS1/include/projdefs.h b/FreeRTOS1/include/projdefs.h deleted file mode 100644 index 44a523a..0000000 --- a/FreeRTOS1/include/projdefs.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - FreeRTOS.org V4.7.2 - Copyright (C) 2003-2008 Richard Barry. - - This file is part of the FreeRTOS.org distribution. - - FreeRTOS.org is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - FreeRTOS.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with FreeRTOS.org; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes FreeRTOS.org, without being obliged to provide - the source code for any proprietary components. See the licensing section - of http://www.FreeRTOS.org for full details of how and when the exception - can be applied. - - *************************************************************************** - - Please ensure to read the configuration and relevant port sections of the - online documentation. - - +++ http://www.FreeRTOS.org +++ - Documentation, latest information, license and contact details. - - +++ http://www.SafeRTOS.com +++ - A version that is certified for use in safety critical systems. - - +++ http://www.OpenRTOS.com +++ - Commercial support, development, porting, licensing and training services. - - *************************************************************************** -*/ - -#ifndef PROJDEFS_H -#define PROJDEFS_H - -/* Defines to prototype to which task functions must conform. */ -typedef void (*pdTASK_CODE)( void * ); - -#define pdTRUE ( 1 ) -#define pdFALSE ( 0 ) - -#define pdPASS ( 1 ) -#define pdFAIL ( 0 ) -#define errQUEUE_EMPTY ( 0 ) -#define errQUEUE_FULL ( 0 ) - -/* Error definitions. */ -#define errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY ( -1 ) -#define errNO_TASK_TO_RUN ( -2 ) -#define errQUEUE_BLOCKED ( -4 ) -#define errQUEUE_YIELD ( -5 ) - -#endif /* PROJDEFS_H */ - - - diff --git a/FreeRTOS1/include/queue.h b/FreeRTOS1/include/queue.h deleted file mode 100644 index be561ad..0000000 --- a/FreeRTOS1/include/queue.h +++ /dev/null @@ -1,1222 +0,0 @@ -/* - FreeRTOS.org V4.7.2 - Copyright (C) 2003-2008 Richard Barry. - - This file is part of the FreeRTOS.org distribution. - - FreeRTOS.org is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - FreeRTOS.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with FreeRTOS.org; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes FreeRTOS.org, without being obliged to provide - the source code for any proprietary components. See the licensing section - of http://www.FreeRTOS.org for full details of how and when the exception - can be applied. - - *************************************************************************** - - Please ensure to read the configuration and relevant port sections of the - online documentation. - - +++ http://www.FreeRTOS.org +++ - Documentation, latest information, license and contact details. - - +++ http://www.SafeRTOS.com +++ - A version that is certified for use in safety critical systems. - - +++ http://www.OpenRTOS.com +++ - Commercial support, development, porting, licensing and training services. - - *************************************************************************** -*/ - -#ifndef QUEUE_H -#define QUEUE_H - -#ifdef __cplusplus -extern "C" { -#endif -typedef void * xQueueHandle; - -/* For internal use only. */ -#define queueSEND_TO_BACK ( 0 ) -#define queueSEND_TO_FRONT ( 1 ) - - -/** - * queue. h - *
- xQueueHandle xQueueCreate(
-                              unsigned portBASE_TYPE uxQueueLength,
-                              unsigned portBASE_TYPE uxItemSize
-                          );
- * 
- * - * Creates a new queue instance. This allocates the storage required by the - * new queue and returns a handle for the queue. - * - * @param uxQueueLength The maximum number of items that the queue can contain. - * - * @param uxItemSize The number of bytes each item in the queue will require. - * Items are queued by copy, not by reference, so this is the number of bytes - * that will be copied for each posted item. Each item on the queue must be - * the same size. - * - * @return If the queue is successfully create then a handle to the newly - * created queue is returned. If the queue cannot be created then 0 is - * returned. - * - * Example usage: -
- struct AMessage
- {
-    portCHAR ucMessageID;
-    portCHAR ucData[ 20 ];
- };
-
- void vATask( void *pvParameters )
- {
- xQueueHandle xQueue1, xQueue2;
-
-    // Create a queue capable of containing 10 unsigned long values.
-    xQueue1 = xQueueCreate( 10, sizeof( unsigned portLONG ) );
-    if( xQueue1 == 0 )
-    {
-        // Queue was not created and must not be used.
-    }
-
-    // Create a queue capable of containing 10 pointers to AMessage structures.
-    // These should be passed by pointer as they contain a lot of data.
-    xQueue2 = xQueueCreate( 10, sizeof( struct AMessage * ) );
-    if( xQueue2 == 0 )
-    {
-        // Queue was not created and must not be used.
-    }
-
-    // ... Rest of task code.
- }
- 
- * \defgroup xQueueCreate xQueueCreate - * \ingroup QueueManagement - */ -xQueueHandle xQueueCreate( unsigned portBASE_TYPE uxQueueLength, unsigned portBASE_TYPE uxItemSize ); - -/** - * queue. h - *
- portBASE_TYPE xQueueSendToToFront(
-                                   xQueueHandle xQueue,
-                                   const void * pvItemToQueue,
-                                   portTickType xTicksToWait
-                               );
- * 
- * - * This is a macro that calls xQueueGenericSend(). - * - * Post an item to the front of a queue. The item is queued by copy, not by - * reference. This function must not be called from an interrupt service - * routine. See xQueueSendFromISR () for an alternative which may be used - * in an ISR. - * - * @param xQueue The handle to the queue on which the item is to be posted. - * - * @param pvItemToQueue A pointer to the item that is to be placed on the - * queue. The size of the items the queue will hold was defined when the - * queue was created, so this many bytes will be copied from pvItemToQueue - * into the queue storage area. - * - * @param xTicksToWait The maximum amount of time the task should block - * waiting for space to become available on the queue, should it already - * be full. The call will return immediately if this is set to 0. The - * time is defined in tick periods so the constant portTICK_RATE_MS - * should be used to convert to real time if this is required. - * - * @return pdTRUE if the item was successfully posted, otherwise errQUEUE_FULL. - * - * Example usage: -
- struct AMessage
- {
-    portCHAR ucMessageID;
-    portCHAR ucData[ 20 ];
- } xMessage;
-
- unsigned portLONG ulVar = 10UL;
-
- void vATask( void *pvParameters )
- {
- xQueueHandle xQueue1, xQueue2;
- struct AMessage *pxMessage;
-
-    // Create a queue capable of containing 10 unsigned long values.
-    xQueue1 = xQueueCreate( 10, sizeof( unsigned portLONG ) );
-
-    // Create a queue capable of containing 10 pointers to AMessage structures.
-    // These should be passed by pointer as they contain a lot of data.
-    xQueue2 = xQueueCreate( 10, sizeof( struct AMessage * ) );
-
-    // ...
-
-    if( xQueue1 != 0 )
-    {
-        // Send an unsigned long.  Wait for 10 ticks for space to become
-        // available if necessary.
-        if( xQueueSendToFront( xQueue1, ( void * ) &ulVar, ( portTickType ) 10 ) != pdPASS )
-        {
-            // Failed to post the message, even after 10 ticks.
-        }
-    }
-
-    if( xQueue2 != 0 )
-    {
-        // Send a pointer to a struct AMessage object.  Don't block if the
-        // queue is already full.
-        pxMessage = & xMessage;
-        xQueueSendToFront( xQueue2, ( void * ) &pxMessage, ( portTickType ) 0 );
-    }
-
-	// ... Rest of task code.
- }
- 
- * \defgroup xQueueSend xQueueSend - * \ingroup QueueManagement - */ -#define xQueueSendToFront( xQueue, pvItemToQueue, xTicksToWait ) xQueueGenericSend( xQueue, pvItemToQueue, xTicksToWait, queueSEND_TO_FRONT ) - -/** - * queue. h - *
- portBASE_TYPE xQueueSendToBack(
-                                   xQueueHandle xQueue,
-                                   const void * pvItemToQueue,
-                                   portTickType xTicksToWait
-                               );
- * 
- * - * This is a macro that calls xQueueGenericSend(). - * - * Post an item to the back of a queue. The item is queued by copy, not by - * reference. This function must not be called from an interrupt service - * routine. See xQueueSendFromISR () for an alternative which may be used - * in an ISR. - * - * @param xQueue The handle to the queue on which the item is to be posted. - * - * @param pvItemToQueue A pointer to the item that is to be placed on the - * queue. The size of the items the queue will hold was defined when the - * queue was created, so this many bytes will be copied from pvItemToQueue - * into the queue storage area. - * - * @param xTicksToWait The maximum amount of time the task should block - * waiting for space to become available on the queue, should it already - * be full. The call will return immediately if this is set to 0. The - * time is defined in tick periods so the constant portTICK_RATE_MS - * should be used to convert to real time if this is required. - * - * @return pdTRUE if the item was successfully posted, otherwise errQUEUE_FULL. - * - * Example usage: -
- struct AMessage
- {
-    portCHAR ucMessageID;
-    portCHAR ucData[ 20 ];
- } xMessage;
-
- unsigned portLONG ulVar = 10UL;
-
- void vATask( void *pvParameters )
- {
- xQueueHandle xQueue1, xQueue2;
- struct AMessage *pxMessage;
-
-    // Create a queue capable of containing 10 unsigned long values.
-    xQueue1 = xQueueCreate( 10, sizeof( unsigned portLONG ) );
-
-    // Create a queue capable of containing 10 pointers to AMessage structures.
-    // These should be passed by pointer as they contain a lot of data.
-    xQueue2 = xQueueCreate( 10, sizeof( struct AMessage * ) );
-
-    // ...
-
-    if( xQueue1 != 0 )
-    {
-        // Send an unsigned long.  Wait for 10 ticks for space to become
-        // available if necessary.
-        if( xQueueSendToBack( xQueue1, ( void * ) &ulVar, ( portTickType ) 10 ) != pdPASS )
-        {
-            // Failed to post the message, even after 10 ticks.
-        }
-    }
-
-    if( xQueue2 != 0 )
-    {
-        // Send a pointer to a struct AMessage object.  Don't block if the
-        // queue is already full.
-        pxMessage = & xMessage;
-        xQueueSendToBack( xQueue2, ( void * ) &pxMessage, ( portTickType ) 0 );
-    }
-
-	// ... Rest of task code.
- }
- 
- * \defgroup xQueueSend xQueueSend - * \ingroup QueueManagement - */ -#define xQueueSendToBack( xQueue, pvItemToQueue, xTicksToWait ) xQueueGenericSend( xQueue, pvItemToQueue, xTicksToWait, queueSEND_TO_BACK ) - -/** - * queue. h - *
- portBASE_TYPE xQueueSend(
-                              xQueueHandle xQueue,
-                              const void * pvItemToQueue,
-                              portTickType xTicksToWait
-                         );
- * 
- * - * This is a macro that calls xQueueGenericSend(). It is included for - * backward compatibility with versions of FreeRTOS.org that did not - * include the xQueueSendToFront() and xQueueSendToBack() macros. It is - * equivalent to xQueueSendToBack(). - * - * Post an item on a queue. The item is queued by copy, not by reference. - * This function must not be called from an interrupt service routine. - * See xQueueSendFromISR () for an alternative which may be used in an ISR. - * - * @param xQueue The handle to the queue on which the item is to be posted. - * - * @param pvItemToQueue A pointer to the item that is to be placed on the - * queue. The size of the items the queue will hold was defined when the - * queue was created, so this many bytes will be copied from pvItemToQueue - * into the queue storage area. - * - * @param xTicksToWait The maximum amount of time the task should block - * waiting for space to become available on the queue, should it already - * be full. The call will return immediately if this is set to 0. The - * time is defined in tick periods so the constant portTICK_RATE_MS - * should be used to convert to real time if this is required. - * - * @return pdTRUE if the item was successfully posted, otherwise errQUEUE_FULL. - * - * Example usage: -
- struct AMessage
- {
-    portCHAR ucMessageID;
-    portCHAR ucData[ 20 ];
- } xMessage;
-
- unsigned portLONG ulVar = 10UL;
-
- void vATask( void *pvParameters )
- {
- xQueueHandle xQueue1, xQueue2;
- struct AMessage *pxMessage;
-
-    // Create a queue capable of containing 10 unsigned long values.
-    xQueue1 = xQueueCreate( 10, sizeof( unsigned portLONG ) );
-
-    // Create a queue capable of containing 10 pointers to AMessage structures.
-    // These should be passed by pointer as they contain a lot of data.
-    xQueue2 = xQueueCreate( 10, sizeof( struct AMessage * ) );
-
-    // ...
-
-    if( xQueue1 != 0 )
-    {
-        // Send an unsigned long.  Wait for 10 ticks for space to become
-        // available if necessary.
-        if( xQueueSend( xQueue1, ( void * ) &ulVar, ( portTickType ) 10 ) != pdPASS )
-        {
-            // Failed to post the message, even after 10 ticks.
-        }
-    }
-
-    if( xQueue2 != 0 )
-    {
-        // Send a pointer to a struct AMessage object.  Don't block if the
-        // queue is already full.
-        pxMessage = & xMessage;
-        xQueueSend( xQueue2, ( void * ) &pxMessage, ( portTickType ) 0 );
-    }
-
-	// ... Rest of task code.
- }
- 
- * \defgroup xQueueSend xQueueSend - * \ingroup QueueManagement - */ -#define xQueueSend( xQueue, pvItemToQueue, xTicksToWait ) xQueueGenericSend( xQueue, pvItemToQueue, xTicksToWait, queueSEND_TO_BACK ) - - -/** - * queue. h - *
- portBASE_TYPE xQueueGenericSend(
-									xQueueHandle xQueue,
-									const void * pvItemToQueue,
-									portTickType xTicksToWait
-									portBASE_TYPE xCopyPosition
-								);
- * 
- * - * It is preferred that the macros xQueueSend(), xQueueSendToFront() and - * xQueueSendToBack() are used in place of calling this function directly. - * - * Post an item on a queue. The item is queued by copy, not by reference. - * This function must not be called from an interrupt service routine. - * See xQueueSendFromISR () for an alternative which may be used in an ISR. - * - * @param xQueue The handle to the queue on which the item is to be posted. - * - * @param pvItemToQueue A pointer to the item that is to be placed on the - * queue. The size of the items the queue will hold was defined when the - * queue was created, so this many bytes will be copied from pvItemToQueue - * into the queue storage area. - * - * @param xTicksToWait The maximum amount of time the task should block - * waiting for space to become available on the queue, should it already - * be full. The call will return immediately if this is set to 0. The - * time is defined in tick periods so the constant portTICK_RATE_MS - * should be used to convert to real time if this is required. - * - * @param xCopyPosition Can take the value queueSEND_TO_BACK to place the - * item at the back of the queue, or queueSEND_TO_FRONT to place the item - * at the front of the queue (for high priority messages). - * - * @return pdTRUE if the item was successfully posted, otherwise errQUEUE_FULL. - * - * Example usage: -
- struct AMessage
- {
-    portCHAR ucMessageID;
-    portCHAR ucData[ 20 ];
- } xMessage;
-
- unsigned portLONG ulVar = 10UL;
-
- void vATask( void *pvParameters )
- {
- xQueueHandle xQueue1, xQueue2;
- struct AMessage *pxMessage;
-
-    // Create a queue capable of containing 10 unsigned long values.
-    xQueue1 = xQueueCreate( 10, sizeof( unsigned portLONG ) );
-
-    // Create a queue capable of containing 10 pointers to AMessage structures.
-    // These should be passed by pointer as they contain a lot of data.
-    xQueue2 = xQueueCreate( 10, sizeof( struct AMessage * ) );
-
-    // ...
-
-    if( xQueue1 != 0 )
-    {
-        // Send an unsigned long.  Wait for 10 ticks for space to become
-        // available if necessary.
-        if( xQueueGenericSend( xQueue1, ( void * ) &ulVar, ( portTickType ) 10, queueSEND_TO_BACK ) != pdPASS )
-        {
-            // Failed to post the message, even after 10 ticks.
-        }
-    }
-
-    if( xQueue2 != 0 )
-    {
-        // Send a pointer to a struct AMessage object.  Don't block if the
-        // queue is already full.
-        pxMessage = & xMessage;
-        xQueueGenericSend( xQueue2, ( void * ) &pxMessage, ( portTickType ) 0, queueSEND_TO_BACK );
-    }
-
-	// ... Rest of task code.
- }
- 
- * \defgroup xQueueSend xQueueSend - * \ingroup QueueManagement - */ -signed portBASE_TYPE xQueueGenericSend( xQueueHandle xQueue, const void * const pvItemToQueue, portTickType xTicksToWait, portBASE_TYPE xCopyPosition ); - -/** - * queue. h - *
- portBASE_TYPE xQueuePeek(
-                             xQueueHandle xQueue,
-                             void *pvBuffer,
-                             portTickType xTicksToWait
-                         );
- * - * This is a macro that calls the xQueueGenericReceive() function. - * - * Receive an item from a queue without removing the item from the queue. - * The item is received by copy so a buffer of adequate size must be - * provided. The number of bytes copied into the buffer was defined when - * the queue was created. - * - * Successfully received items remain on the queue so will be returned again - * by the next call, or a call to xQueueReceive(). - * - * This macro must not be used in an interrupt service routine. - * - * @param pxQueue The handle to the queue from which the item is to be - * received. - * - * @param pvBuffer Pointer to the buffer into which the received item will - * be copied. - * - * @param xTicksToWait The maximum amount of time the task should block - * waiting for an item to receive should the queue be empty at the time - * of the call. The time is defined in tick periods so the constant - * portTICK_RATE_MS should be used to convert to real time if this is required. - * - * @return pdTRUE if an item was successfully received from the queue, - * otherwise pdFALSE. - * - * Example usage: -
- struct AMessage
- {
-    portCHAR ucMessageID;
-    portCHAR ucData[ 20 ];
- } xMessage;
-
- xQueueHandle xQueue;
-
- // Task to create a queue and post a value.
- void vATask( void *pvParameters )
- {
- struct AMessage *pxMessage;
-
-    // Create a queue capable of containing 10 pointers to AMessage structures.
-    // These should be passed by pointer as they contain a lot of data.
-    xQueue = xQueueCreate( 10, sizeof( struct AMessage * ) );
-    if( xQueue == 0 )
-    {
-        // Failed to create the queue.
-    }
-
-    // ...
-
-    // Send a pointer to a struct AMessage object.  Don't block if the
-    // queue is already full.
-    pxMessage = & xMessage;
-    xQueueSend( xQueue, ( void * ) &pxMessage, ( portTickType ) 0 );
-
-	// ... Rest of task code.
- }
-
- // Task to peek the data from the queue.
- void vADifferentTask( void *pvParameters )
- {
- struct AMessage *pxRxedMessage;
-
-    if( xQueue != 0 )
-    {
-        // Peek a message on the created queue.  Block for 10 ticks if a
-        // message is not immediately available.
-        if( xQueuePeek( xQueue, &( pxRxedMessage ), ( portTickType ) 10 ) )
-        {
-            // pcRxedMessage now points to the struct AMessage variable posted
-            // by vATask, but the item still remains on the queue.
-        }
-    }
-
-	// ... Rest of task code.
- }
- 
- * \defgroup xQueueReceive xQueueReceive - * \ingroup QueueManagement - */ -#define xQueuePeek( xQueue, pvBuffer, xTicksToWait ) xQueueGenericReceive( xQueue, pvBuffer, xTicksToWait, pdTRUE ) - -/** - * queue. h - *
- portBASE_TYPE xQueueReceive(
-                                 xQueueHandle xQueue,
-                                 void *pvBuffer,
-                                 portTickType xTicksToWait
-                            );
- * - * This is a macro that calls the xQueueGenericReceive() function. - * - * Receive an item from a queue. The item is received by copy so a buffer of - * adequate size must be provided. The number of bytes copied into the buffer - * was defined when the queue was created. - * - * Successfully received items are removed from the queue. - * - * This function must not be used in an interrupt service routine. See - * xQueueReceiveFromISR for an alternative that can. - * - * @param pxQueue The handle to the queue from which the item is to be - * received. - * - * @param pvBuffer Pointer to the buffer into which the received item will - * be copied. - * - * @param xTicksToWait The maximum amount of time the task should block - * waiting for an item to receive should the queue be empty at the time - * of the call. The time is defined in tick periods so the constant - * portTICK_RATE_MS should be used to convert to real time if this is required. - * - * @return pdTRUE if an item was successfully received from the queue, - * otherwise pdFALSE. - * - * Example usage: -
- struct AMessage
- {
-    portCHAR ucMessageID;
-    portCHAR ucData[ 20 ];
- } xMessage;
-
- xQueueHandle xQueue;
-
- // Task to create a queue and post a value.
- void vATask( void *pvParameters )
- {
- struct AMessage *pxMessage;
-
-    // Create a queue capable of containing 10 pointers to AMessage structures.
-    // These should be passed by pointer as they contain a lot of data.
-    xQueue = xQueueCreate( 10, sizeof( struct AMessage * ) );
-    if( xQueue == 0 )
-    {
-        // Failed to create the queue.
-    }
-
-    // ...
-
-    // Send a pointer to a struct AMessage object.  Don't block if the
-    // queue is already full.
-    pxMessage = & xMessage;
-    xQueueSend( xQueue, ( void * ) &pxMessage, ( portTickType ) 0 );
-
-	// ... Rest of task code.
- }
-
- // Task to receive from the queue.
- void vADifferentTask( void *pvParameters )
- {
- struct AMessage *pxRxedMessage;
-
-    if( xQueue != 0 )
-    {
-        // Receive a message on the created queue.  Block for 10 ticks if a
-        // message is not immediately available.
-        if( xQueueReceive( xQueue, &( pxRxedMessage ), ( portTickType ) 10 ) )
-        {
-            // pcRxedMessage now points to the struct AMessage variable posted
-            // by vATask.
-        }
-    }
-
-	// ... Rest of task code.
- }
- 
- * \defgroup xQueueReceive xQueueReceive - * \ingroup QueueManagement - */ -#define xQueueReceive( xQueue, pvBuffer, xTicksToWait ) xQueueGenericReceive( xQueue, pvBuffer, xTicksToWait, pdFALSE ) - - -/** - * queue. h - *
- portBASE_TYPE xQueueGenericReceive(
-                                       xQueueHandle xQueue,
-                                       void *pvBuffer,
-                                       portTickType xTicksToWait
-                                       portBASE_TYPE xJustPeek
-                                    );
- * - * It is preferred that the macro xQueueReceive() be used rather than calling - * this function directly. - * - * Receive an item from a queue. The item is received by copy so a buffer of - * adequate size must be provided. The number of bytes copied into the buffer - * was defined when the queue was created. - * - * This function must not be used in an interrupt service routine. See - * xQueueReceiveFromISR for an alternative that can. - * - * @param pxQueue The handle to the queue from which the item is to be - * received. - * - * @param pvBuffer Pointer to the buffer into which the received item will - * be copied. - * - * @param xTicksToWait The maximum amount of time the task should block - * waiting for an item to receive should the queue be empty at the time - * of the call. The time is defined in tick periods so the constant - * portTICK_RATE_MS should be used to convert to real time if this is required. - * - * @param xJustPeek When set to true, the item received from the queue is not - * actually removed from the queue - meaning a subsequent call to - * xQueueReceive() will return the same item. When set to false, the item - * being received from the queue is also removed from the queue. - * - * @return pdTRUE if an item was successfully received from the queue, - * otherwise pdFALSE. - * - * Example usage: -
- struct AMessage
- {
-    portCHAR ucMessageID;
-    portCHAR ucData[ 20 ];
- } xMessage;
-
- xQueueHandle xQueue;
-
- // Task to create a queue and post a value.
- void vATask( void *pvParameters )
- {
- struct AMessage *pxMessage;
-
-    // Create a queue capable of containing 10 pointers to AMessage structures.
-    // These should be passed by pointer as they contain a lot of data.
-    xQueue = xQueueCreate( 10, sizeof( struct AMessage * ) );
-    if( xQueue == 0 )
-    {
-        // Failed to create the queue.
-    }
-
-    // ...
-
-    // Send a pointer to a struct AMessage object.  Don't block if the
-    // queue is already full.
-    pxMessage = & xMessage;
-    xQueueSend( xQueue, ( void * ) &pxMessage, ( portTickType ) 0 );
-
-	// ... Rest of task code.
- }
-
- // Task to receive from the queue.
- void vADifferentTask( void *pvParameters )
- {
- struct AMessage *pxRxedMessage;
-
-    if( xQueue != 0 )
-    {
-        // Receive a message on the created queue.  Block for 10 ticks if a
-        // message is not immediately available.
-        if( xQueueGenericReceive( xQueue, &( pxRxedMessage ), ( portTickType ) 10 ) )
-        {
-            // pcRxedMessage now points to the struct AMessage variable posted
-            // by vATask.
-        }
-    }
-
-	// ... Rest of task code.
- }
- 
- * \defgroup xQueueReceive xQueueReceive - * \ingroup QueueManagement - */ -signed portBASE_TYPE xQueueGenericReceive( xQueueHandle xQueue, const void * const pvBuffer, portTickType xTicksToWait, portBASE_TYPE xJustPeek ); - -/** - * queue. h - *
unsigned portBASE_TYPE uxQueueMessagesWaiting( const xQueueHandle xQueue );
- * - * Return the number of messages stored in a queue. - * - * @param xQueue A handle to the queue being queried. - * - * @return The number of messages available in the queue. - * - * \page uxQueueMessagesWaiting uxQueueMessagesWaiting - * \ingroup QueueManagement - */ -unsigned portBASE_TYPE uxQueueMessagesWaiting( const xQueueHandle xQueue ); - -/** - * queue. h - *
void vQueueDelete( xQueueHandle xQueue );
- * - * Delete a queue - freeing all the memory allocated for storing of items - * placed on the queue. - * - * @param xQueue A handle to the queue to be deleted. - * - * \page vQueueDelete vQueueDelete - * \ingroup QueueManagement - */ -void vQueueDelete( xQueueHandle xQueue ); - -/** - * queue. h - *
- portBASE_TYPE xQueueSendToFrontFromISR(
-                                         xQueueHandle pxQueue,
-                                         const void *pvItemToQueue,
-                                         portBASE_TYPE xTaskPreviouslyWoken
-                                      );
- 
- * - * This is a macro that calls xQueueGenericSendFromISR(). - * - * Post an item to the front of a queue. It is safe to use this macro from - * within an interrupt service routine. - * - * Items are queued by copy not reference so it is preferable to only - * queue small items, especially when called from an ISR. In most cases - * it would be preferable to store a pointer to the item being queued. - * - * @param xQueue The handle to the queue on which the item is to be posted. - * - * @param pvItemToQueue A pointer to the item that is to be placed on the - * queue. The size of the items the queue will hold was defined when the - * queue was created, so this many bytes will be copied from pvItemToQueue - * into the queue storage area. - * - * @param cTaskPreviouslyWoken This is included so an ISR can post onto - * the same queue multiple times from a single interrupt. The first call - * should always pass in pdFALSE. Subsequent calls should pass in - * the value returned from the previous call. See the file serial .c in the - * PC port for a good example of this mechanism. - * - * @return pdTRUE if a task was woken by posting onto the queue. This is - * used by the ISR to determine if a context switch may be required following - * the ISR. - * - * Example usage for buffered IO (where the ISR can obtain more than one value - * per call): -
- void vBufferISR( void )
- {
- portCHAR cIn;
- portBASE_TYPE xTaskWokenByPost;
-
-    // We have not woken a task at the start of the ISR.
-    cTaskWokenByPost = pdFALSE;
-
-    // Loop until the buffer is empty.
-    do
-    {
-        // Obtain a byte from the buffer.
-        cIn = portINPUT_BYTE( RX_REGISTER_ADDRESS );						
-
-        // Post the byte.  The first time round the loop cTaskWokenByPost
-        // will be pdFALSE.  If the queue send causes a task to wake we do
-        // not want the task to run until we have finished the ISR, so
-        // xQueueSendFromISR does not cause a context switch.  Also we
-        // don't want subsequent posts to wake any other tasks, so we store
-        // the return value back into cTaskWokenByPost so xQueueSendFromISR
-        // knows not to wake any task the next iteration of the loop.
-        xTaskWokenByPost = xQueueSendToFrontFromISR( xRxQueue, &cIn, cTaskWokenByPost );
-
-    } while( portINPUT_BYTE( BUFFER_COUNT ) );
-
-    // Now the buffer is empty we can switch context if necessary.
-    if( cTaskWokenByPost )
-    {
-        taskYIELD ();
-    }
- }
- 
- * - * \defgroup xQueueSendFromISR xQueueSendFromISR - * \ingroup QueueManagement - */ -#define xQueueSendToFrontFromISR( pxQueue, pvItemToQueue, xTaskPreviouslyWoken ) xQueueGenericSendFromISR( pxQueue, pvItemToQueue, xTaskPreviouslyWoken, queueSEND_TO_FRONT ) - - -/** - * queue. h - *
- portBASE_TYPE xQueueSendToBackFromISR(
-                                         xQueueHandle pxQueue,
-                                         const void *pvItemToQueue,
-                                         portBASE_TYPE xTaskPreviouslyWoken
-                                      );
- 
- * - * This is a macro that calls xQueueGenericSendFromISR(). - * - * Post an item to the back of a queue. It is safe to use this macro from - * within an interrupt service routine. - * - * Items are queued by copy not reference so it is preferable to only - * queue small items, especially when called from an ISR. In most cases - * it would be preferable to store a pointer to the item being queued. - * - * @param xQueue The handle to the queue on which the item is to be posted. - * - * @param pvItemToQueue A pointer to the item that is to be placed on the - * queue. The size of the items the queue will hold was defined when the - * queue was created, so this many bytes will be copied from pvItemToQueue - * into the queue storage area. - * - * @param cTaskPreviouslyWoken This is included so an ISR can post onto - * the same queue multiple times from a single interrupt. The first call - * should always pass in pdFALSE. Subsequent calls should pass in - * the value returned from the previous call. See the file serial .c in the - * PC port for a good example of this mechanism. - * - * @return pdTRUE if a task was woken by posting onto the queue. This is - * used by the ISR to determine if a context switch may be required following - * the ISR. - * - * Example usage for buffered IO (where the ISR can obtain more than one value - * per call): -
- void vBufferISR( void )
- {
- portCHAR cIn;
- portBASE_TYPE xTaskWokenByPost;
-
-    // We have not woken a task at the start of the ISR.
-    cTaskWokenByPost = pdFALSE;
-
-    // Loop until the buffer is empty.
-    do
-    {
-        // Obtain a byte from the buffer.
-        cIn = portINPUT_BYTE( RX_REGISTER_ADDRESS );						
-
-        // Post the byte.  The first time round the loop cTaskWokenByPost
-        // will be pdFALSE.  If the queue send causes a task to wake we do
-        // not want the task to run until we have finished the ISR, so
-        // xQueueSendFromISR does not cause a context switch.  Also we
-        // don't want subsequent posts to wake any other tasks, so we store
-        // the return value back into cTaskWokenByPost so xQueueSendFromISR
-        // knows not to wake any task the next iteration of the loop.
-        xTaskWokenByPost = xQueueSendToBackFromISR( xRxQueue, &cIn, cTaskWokenByPost );
-
-    } while( portINPUT_BYTE( BUFFER_COUNT ) );
-
-    // Now the buffer is empty we can switch context if necessary.
-    if( cTaskWokenByPost )
-    {
-        taskYIELD ();
-    }
- }
- 
- * - * \defgroup xQueueSendFromISR xQueueSendFromISR - * \ingroup QueueManagement - */ -#define xQueueSendToBackFromISR( pxQueue, pvItemToQueue, xTaskPreviouslyWoken ) xQueueGenericSendFromISR( pxQueue, pvItemToQueue, xTaskPreviouslyWoken, queueSEND_TO_BACK ) - - -/** - * queue. h - *
- portBASE_TYPE xQueueSendFromISR(
-                                     xQueueHandle pxQueue,
-                                     const void *pvItemToQueue,
-                                     portBASE_TYPE xTaskPreviouslyWoken
-                                );
- 
- * - * This is a macro that calls xQueueGenericSendFromISR(). It is included - * for backward compatibility with versions of FreeRTOS.org that did not - * include the xQueueSendToBackFromISR() and xQueueSendToFrontFromISR() - * macros. - * - * Post an item to the back of a queue. It is safe to use this function from - * within an interrupt service routine. - * - * Items are queued by copy not reference so it is preferable to only - * queue small items, especially when called from an ISR. In most cases - * it would be preferable to store a pointer to the item being queued. - * - * @param xQueue The handle to the queue on which the item is to be posted. - * - * @param pvItemToQueue A pointer to the item that is to be placed on the - * queue. The size of the items the queue will hold was defined when the - * queue was created, so this many bytes will be copied from pvItemToQueue - * into the queue storage area. - * - * @param cTaskPreviouslyWoken This is included so an ISR can post onto - * the same queue multiple times from a single interrupt. The first call - * should always pass in pdFALSE. Subsequent calls should pass in - * the value returned from the previous call. See the file serial .c in the - * PC port for a good example of this mechanism. - * - * @return pdTRUE if a task was woken by posting onto the queue. This is - * used by the ISR to determine if a context switch may be required following - * the ISR. - * - * Example usage for buffered IO (where the ISR can obtain more than one value - * per call): -
- void vBufferISR( void )
- {
- portCHAR cIn;
- portBASE_TYPE xTaskWokenByPost;
-
-    // We have not woken a task at the start of the ISR.
-    cTaskWokenByPost = pdFALSE;
-
-    // Loop until the buffer is empty.
-    do
-    {
-        // Obtain a byte from the buffer.
-        cIn = portINPUT_BYTE( RX_REGISTER_ADDRESS );						
-
-        // Post the byte.  The first time round the loop cTaskWokenByPost
-        // will be pdFALSE.  If the queue send causes a task to wake we do
-        // not want the task to run until we have finished the ISR, so
-        // xQueueSendFromISR does not cause a context switch.  Also we
-        // don't want subsequent posts to wake any other tasks, so we store
-        // the return value back into cTaskWokenByPost so xQueueSendFromISR
-        // knows not to wake any task the next iteration of the loop.
-        xTaskWokenByPost = xQueueSendFromISR( xRxQueue, &cIn, cTaskWokenByPost );
-
-    } while( portINPUT_BYTE( BUFFER_COUNT ) );
-
-    // Now the buffer is empty we can switch context if necessary.
-    if( cTaskWokenByPost )
-    {
-        taskYIELD ();
-    }
- }
- 
- * - * \defgroup xQueueSendFromISR xQueueSendFromISR - * \ingroup QueueManagement - */ -#define xQueueSendFromISR( pxQueue, pvItemToQueue, xTaskPreviouslyWoken ) xQueueGenericSendFromISR( pxQueue, pvItemToQueue, xTaskPreviouslyWoken, queueSEND_TO_BACK ) - -/** - * queue. h - *
- portBASE_TYPE xQueueGenericSendFromISR(
-                                           xQueueHandle pxQueue,
-                                           const void *pvItemToQueue,
-                                           portBASE_TYPE xTaskPreviouslyWoken
-										   portBASE_TYPE xCopyPosition
-                                       );
- 
- * - * It is preferred that the macros xQueueSendFromISR(), - * xQueueSendToFrontFromISR() and xQueueSendToBackFromISR() be used in place - * of calling this function directly. - * - * Post an item on a queue. It is safe to use this function from within an - * interrupt service routine. - * - * Items are queued by copy not reference so it is preferable to only - * queue small items, especially when called from an ISR. In most cases - * it would be preferable to store a pointer to the item being queued. - * - * @param xQueue The handle to the queue on which the item is to be posted. - * - * @param pvItemToQueue A pointer to the item that is to be placed on the - * queue. The size of the items the queue will hold was defined when the - * queue was created, so this many bytes will be copied from pvItemToQueue - * into the queue storage area. - * - * @param cTaskPreviouslyWoken This is included so an ISR can post onto - * the same queue multiple times from a single interrupt. The first call - * should always pass in pdFALSE. Subsequent calls should pass in - * the value returned from the previous call. See the file serial .c in the - * PC port for a good example of this mechanism. - * - * @param xCopyPosition Can take the value queueSEND_TO_BACK to place the - * item at the back of the queue, or queueSEND_TO_FRONT to place the item - * at the front of the queue (for high priority messages). - * - * @return pdTRUE if a task was woken by posting onto the queue. This is - * used by the ISR to determine if a context switch may be required following - * the ISR. - * - * Example usage for buffered IO (where the ISR can obtain more than one value - * per call): -
- void vBufferISR( void )
- {
- portCHAR cIn;
- portBASE_TYPE xTaskWokenByPost;
-
-    // We have not woken a task at the start of the ISR.
-    cTaskWokenByPost = pdFALSE;
-
-    // Loop until the buffer is empty.
-    do
-    {
-        // Obtain a byte from the buffer.
-        cIn = portINPUT_BYTE( RX_REGISTER_ADDRESS );						
-
-        // Post the byte.  The first time round the loop cTaskWokenByPost
-        // will be pdFALSE.  If the queue send causes a task to wake we do
-        // not want the task to run until we have finished the ISR, so
-        // xQueueSendFromISR does not cause a context switch.  Also we
-        // don't want subsequent posts to wake any other tasks, so we store
-        // the return value back into cTaskWokenByPost so xQueueSendFromISR
-        // knows not to wake any task the next iteration of the loop.
-        xTaskWokenByPost = xQueueGenericSendFromISR( xRxQueue, &cIn, cTaskWokenByPost, queueSEND_TO_BACK );
-
-    } while( portINPUT_BYTE( BUFFER_COUNT ) );
-
-    // Now the buffer is empty we can switch context if necessary.
-    if( cTaskWokenByPost )
-    {
-        taskYIELD ();
-    }
- }
- 
- * - * \defgroup xQueueSendFromISR xQueueSendFromISR - * \ingroup QueueManagement - */ -signed portBASE_TYPE xQueueGenericSendFromISR( xQueueHandle pxQueue, const void * const pvItemToQueue, signed portBASE_TYPE xTaskPreviouslyWoken, portBASE_TYPE xCopyPosition ); - -/** - * queue. h - *
- portBASE_TYPE xQueueReceiveFromISR(
-                                       xQueueHandle pxQueue,
-                                       void *pvBuffer,
-                                       portBASE_TYPE *pxTaskWoken
-                                   );
- * 
- * - * Receive an item from a queue. It is safe to use this function from within an - * interrupt service routine. - * - * @param pxQueue The handle to the queue from which the item is to be - * received. - * - * @param pvBuffer Pointer to the buffer into which the received item will - * be copied. - * - * @param pxTaskWoken A task may be blocked waiting for space to become - * available on the queue. If xQueueReceiveFromISR causes such a task to - * unblock *pxTaskWoken will get set to pdTRUE, otherwise *pxTaskWoken will - * remain unchanged. - * - * @return pdTRUE if an item was successfully received from the queue, - * otherwise pdFALSE. - * - * Example usage: -
-
- xQueueHandle xQueue;
-
- // Function to create a queue and post some values.
- void vAFunction( void *pvParameters )
- {
- portCHAR cValueToPost;
- const portTickType xBlockTime = ( portTickType )0xff;
-
-    // Create a queue capable of containing 10 characters.
-    xQueue = xQueueCreate( 10, sizeof( portCHAR ) );
-    if( xQueue == 0 )
-    {
-        // Failed to create the queue.
-    }
-
-    // ...
-
-    // Post some characters that will be used within an ISR.  If the queue
-    // is full then this task will block for xBlockTime ticks.
-    cValueToPost = 'a';
-    xQueueSend( xQueue, ( void * ) &cValueToPost, xBlockTime );
-    cValueToPost = 'b';
-    xQueueSend( xQueue, ( void * ) &cValueToPost, xBlockTime );
-
-    // ... keep posting characters ... this task may block when the queue
-    // becomes full.
-
-    cValueToPost = 'c';
-    xQueueSend( xQueue, ( void * ) &cValueToPost, xBlockTime );
- }
-
- // ISR that outputs all the characters received on the queue.
- void vISR_Routine( void )
- {
- portBASE_TYPE xTaskWokenByReceive = pdFALSE;
- portCHAR cRxedChar;
-
-    while( xQueueReceiveFromISR( xQueue, ( void * ) &cRxedChar, &xTaskWokenByReceive) )
-    {
-        // A character was received.  Output the character now.
-        vOutputCharacter( cRxedChar );
-
-        // If removing the character from the queue woke the task that was
-        // posting onto the queue cTaskWokenByReceive will have been set to
-        // pdTRUE.  No matter how many times this loop iterates only one
-        // task will be woken.
-    }
-
-    if( cTaskWokenByPost != ( portCHAR ) pdFALSE;
-    {
-        taskYIELD ();
-    }
- }
- 
- * \defgroup xQueueReceiveFromISR xQueueReceiveFromISR - * \ingroup QueueManagement - */ -signed portBASE_TYPE xQueueReceiveFromISR( xQueueHandle pxQueue, const void * const pvBuffer, signed portBASE_TYPE *pxTaskWoken ); - -/* - * xQueueAltGenericSend() is an alternative version of xQueueGenericSend(). - * Likewise xQueueAltGenericReceive() is an alternative version of - * xQueueGenericReceive(). - * - * The source code that implements the alternative (Alt) API is much - * simpler because it executes everything from within a critical section. - * This is the approach taken by many other RTOSes, but FreeRTOS.org has the - * preferred fully featured API too. The fully featured API has more - * complex code that takes longer to execute, but makes much less use of - * critical sections. Therefore the alternative API sacrifices interrupt - * responsiveness to gain execution speed, whereas the fully featured API - * sacrifices execution speed to ensure better interrupt responsiveness. - */ -signed portBASE_TYPE xQueueAltGenericSend( xQueueHandle pxQueue, const void * const pvItemToQueue, portTickType xTicksToWait, portBASE_TYPE xCopyPosition ); -signed portBASE_TYPE xQueueAltGenericReceive( xQueueHandle pxQueue, const void * const pvBuffer, portTickType xTicksToWait, portBASE_TYPE xJustPeeking ); -#define xQueueAltSendToFront( xQueue, pvItemToQueue, xTicksToWait ) xQueueAltGenericSend( xQueue, pvItemToQueue, xTicksToWait, queueSEND_TO_FRONT ) -#define xQueueAltSendToBack( xQueue, pvItemToQueue, xTicksToWait ) xQueueAltGenericSend( xQueue, pvItemToQueue, xTicksToWait, queueSEND_TO_BACK ) -#define xQueueAltReceive( xQueue, pvBuffer, xTicksToWait ) xQueueAltGenericReceive( xQueue, pvBuffer, xTicksToWait, pdFALSE ) -#define xQueueAltPeek( xQueue, pvBuffer, xTicksToWait ) xQueueAltGenericReceive( xQueue, pvBuffer, xTicksToWait, pdTRUE ) - -/* - * The functions defined above are for passing data to and from tasks. The - * functions below are the equivalents for passing data to and from - * co-routines. - * - * These functions are called from the co-routine macro implementation and - * should not be called directly from application code. Instead use the macro - * wrappers defined within croutine.h. - */ -signed portBASE_TYPE xQueueCRSendFromISR( xQueueHandle pxQueue, const void *pvItemToQueue, signed portBASE_TYPE xCoRoutinePreviouslyWoken ); -signed portBASE_TYPE xQueueCRReceiveFromISR( xQueueHandle pxQueue, void *pvBuffer, signed portBASE_TYPE *pxTaskWoken ); -signed portBASE_TYPE xQueueCRSend( xQueueHandle pxQueue, const void *pvItemToQueue, portTickType xTicksToWait ); -signed portBASE_TYPE xQueueCRReceive( xQueueHandle pxQueue, void *pvBuffer, portTickType xTicksToWait ); - -/* - * For internal use only. Use xSemaphoreCreateMutex() or - * xSemaphoreCreateCounting() instead of calling these functions directly. - */ -xQueueHandle xQueueCreateMutex( void ); -xQueueHandle xQueueCreateCountingSemaphore( unsigned portBASE_TYPE uxCountValue, unsigned portBASE_TYPE uxInitialCount ); - -/* - * For internal use only. Use xSemaphoreTakeMutexRecursive() or - * xSemaphoreGiveMutexRecursive() instead of calling these functions directly. - */ -portBASE_TYPE xQueueTakeMutexRecursive( xQueueHandle xMutex, portTickType xBlockTime ); -portBASE_TYPE xQueueGiveMutexRecursive( xQueueHandle xMutex ); - -#ifdef __cplusplus -} -#endif - -#endif /* QUEUE_H */ - diff --git a/FreeRTOS1/include/semphr.h b/FreeRTOS1/include/semphr.h deleted file mode 100644 index c9641e3..0000000 --- a/FreeRTOS1/include/semphr.h +++ /dev/null @@ -1,698 +0,0 @@ -/* - FreeRTOS.org V4.7.2 - Copyright (C) 2003-2008 Richard Barry. - - This file is part of the FreeRTOS.org distribution. - - FreeRTOS.org is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - FreeRTOS.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with FreeRTOS.org; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes FreeRTOS.org, without being obliged to provide - the source code for any proprietary components. See the licensing section - of http://www.FreeRTOS.org for full details of how and when the exception - can be applied. - - *************************************************************************** - - Please ensure to read the configuration and relevant port sections of the - online documentation. - - +++ http://www.FreeRTOS.org +++ - Documentation, latest information, license and contact details. - - +++ http://www.SafeRTOS.com +++ - A version that is certified for use in safety critical systems. - - +++ http://www.OpenRTOS.com +++ - Commercial support, development, porting, licensing and training services. - - *************************************************************************** -*/ - -#ifndef SEMAPHORE_H -#define SEMAPHORE_H - -#include "queue.h" - -typedef xQueueHandle xSemaphoreHandle; - -#define semBINARY_SEMAPHORE_QUEUE_LENGTH ( ( unsigned portCHAR ) 1 ) -#define semSEMAPHORE_QUEUE_ITEM_LENGTH ( ( unsigned portCHAR ) 0 ) -#define semGIVE_BLOCK_TIME ( ( portTickType ) 0 ) - - -/** - * semphr. h - *
vSemaphoreCreateBinary( xSemaphoreHandle xSemaphore )
- * - * Macro that implements a semaphore by using the existing queue mechanism. - * The queue length is 1 as this is a binary semaphore. The data size is 0 - * as we don't want to actually store any data - we just want to know if the - * queue is empty or full. - * - * This type of semaphore can be used for pure synchronisation between tasks or - * between an interrupt and a task. The semaphore need not be given back once - * obtained, so one task/interrupt can continuously 'give' the semaphore while - * another continuously 'takes' the semaphore. For this reason this type of - * semaphore does not use a priority inheritance mechanism. For an alternative - * that does use priority inheritance see xSemaphoreCreateMutex(). - * - * @param xSemaphore Handle to the created semaphore. Should be of type xSemaphoreHandle. - * - * Example usage: -
- xSemaphoreHandle xSemaphore;
-
- void vATask( void * pvParameters )
- {
-    // Semaphore cannot be used before a call to vSemaphoreCreateBinary ().
-    // This is a macro so pass the variable in directly.
-    vSemaphoreCreateBinary( xSemaphore );
-
-    if( xSemaphore != NULL )
-    {
-        // The semaphore was created successfully.
-        // The semaphore can now be used.  
-    }
- }
- 
- * \defgroup vSemaphoreCreateBinary vSemaphoreCreateBinary - * \ingroup Semaphores - */ -#define vSemaphoreCreateBinary( xSemaphore ) { \ - xSemaphore = xQueueCreate( ( unsigned portBASE_TYPE ) 1, semSEMAPHORE_QUEUE_ITEM_LENGTH ); \ - if( xSemaphore != NULL ) \ - { \ - xSemaphoreGive( xSemaphore ); \ - } \ - } - -/** - * semphr. h - * xSemaphoreTake( - * xSemaphoreHandle xSemaphore, - * portTickType xBlockTime - * ) - * - * Macro to obtain a semaphore. The semaphore must have previously been - * created with a call to vSemaphoreCreateBinary(), xSemaphoreCreateMutex() or - * xSemaphoreCreateCounting(). - * - * @param xSemaphore A handle to the semaphore being taken - obtained when - * the semaphore was created. - * - * @param xBlockTime The time in ticks to wait for the semaphore to become - * available. The macro portTICK_RATE_MS can be used to convert this to a - * real time. A block time of zero can be used to poll the semaphore. A block - * time of portMAX_DELAY can be used to block indefinitely (provided - * INCLUDE_vTaskSuspend is set to 1 in FreeRTOSConfig.h). - * - * @return pdTRUE if the semaphore was obtained. pdFALSE - * if xBlockTime expired without the semaphore becoming available. - * - * Example usage: -
- xSemaphoreHandle xSemaphore = NULL;
-
- // A task that creates a semaphore.
- void vATask( void * pvParameters )
- {
-    // Create the semaphore to guard a shared resource.
-    vSemaphoreCreateBinary( xSemaphore );
- }
-
- // A task that uses the semaphore.
- void vAnotherTask( void * pvParameters )
- {
-    // ... Do other things.
-
-    if( xSemaphore != NULL )
-    {
-        // See if we can obtain the semaphore.  If the semaphore is not available
-        // wait 10 ticks to see if it becomes free.	
-        if( xSemaphoreTake( xSemaphore, ( portTickType ) 10 ) == pdTRUE )
-        {
-            // We were able to obtain the semaphore and can now access the
-            // shared resource.
-
-            // ...
-
-            // We have finished accessing the shared resource.  Release the 
-            // semaphore.
-            xSemaphoreGive( xSemaphore );
-        }
-        else
-        {
-            // We could not obtain the semaphore and can therefore not access
-            // the shared resource safely.
-        }
-    }
- }
- 
- * \defgroup xSemaphoreTake xSemaphoreTake - * \ingroup Semaphores - */ -#define xSemaphoreTake( xSemaphore, xBlockTime ) xQueueGenericReceive( ( xQueueHandle ) xSemaphore, NULL, xBlockTime, pdFALSE ) - -/** - * semphr. h - * xSemaphoreTakeRecursive( - * xSemaphoreHandle xMutex, - * portTickType xBlockTime - * ) - * - * Macro to recursively obtain, or 'take', a mutex type semaphore. - * The mutex must have previously been created using a call to - * xSemaphoreCreateRecursiveMutex(); - * - * configUSE_RECURSIVE_MUTEXES must be set to 1 in FreeRTOSConfig.h for this - * macro to be available. - * - * This macro must not be used on mutexes created using xSemaphoreCreateMutex(). - * - * A mutex used recursively can be 'taken' repeatedly by the owner. The mutex - * doesn't become available again until the owner has called - * xSemaphoreGiveRecursive() for each successful 'take' request. For example, - * if a task successfully 'takes' the same mutex 5 times then the mutex will - * not be available to any other task until it has also 'given' the mutex back - * exactly five times. - * - * @param xMutex A handle to the mutex being obtained. This is the - * handle returned by xSemaphoreCreateRecursiveMutex(); - * - * @param xBlockTime The time in ticks to wait for the semaphore to become - * available. The macro portTICK_RATE_MS can be used to convert this to a - * real time. A block time of zero can be used to poll the semaphore. If - * the task already owns the semaphore then xSemaphoreTakeRecursive() will - * return immediately no matter what the value of xBlockTime. - * - * @return pdTRUE if the semaphore was obtained. pdFALSE if xBlockTime - * expired without the semaphore becoming available. - * - * Example usage: -
- xSemaphoreHandle xMutex = NULL;
-
- // A task that creates a mutex.
- void vATask( void * pvParameters )
- {
-    // Create the mutex to guard a shared resource.
-    xMutex = xSemaphoreCreateRecursiveMutex();
- }
-
- // A task that uses the mutex.
- void vAnotherTask( void * pvParameters )
- {
-    // ... Do other things.
-
-    if( xMutex != NULL )
-    {
-        // See if we can obtain the mutex.  If the mutex is not available
-        // wait 10 ticks to see if it becomes free.	
-        if( xSemaphoreTakeRecursive( xSemaphore, ( portTickType ) 10 ) == pdTRUE )
-        {
-            // We were able to obtain the mutex and can now access the
-            // shared resource.
-
-            // ...
-            // For some reason due to the nature of the code further calls to 
-			// xSemaphoreTakeRecursive() are made on the same mutex.  In real
-			// code these would not be just sequential calls as this would make
-			// no sense.  Instead the calls are likely to be buried inside
-			// a more complex call structure.
-            xSemaphoreTakeRecursive( xMutex, ( portTickType ) 10 );
-            xSemaphoreTakeRecursive( xMutex, ( portTickType ) 10 );
-
-            // The mutex has now been 'taken' three times, so will not be 
-			// available to another task until it has also been given back
-			// three times.  Again it is unlikely that real code would have
-			// these calls sequentially, but instead buried in a more complex
-			// call structure.  This is just for illustrative purposes.
-            xSemaphoreGiveRecursive( xMutex );
-			xSemaphoreGiveRecursive( xMutex );
-			xSemaphoreGiveRecursive( xMutex );
-
-			// Now the mutex can be taken by other tasks.
-        }
-        else
-        {
-            // We could not obtain the mutex and can therefore not access
-            // the shared resource safely.
-        }
-    }
- }
- 
- * \defgroup xSemaphoreTakeRecursive xSemaphoreTakeRecursive - * \ingroup Semaphores - */ -#define xSemaphoreTakeRecursive( xMutex, xBlockTime ) xQueueTakeMutexRecursive( xMutex, xBlockTime ) - - -/* - * xSemaphoreAltTake() is an alternative version of xSemaphoreTake(). - * - * The source code that implements the alternative (Alt) API is much - * simpler because it executes everything from within a critical section. - * This is the approach taken by many other RTOSes, but FreeRTOS.org has the - * preferred fully featured API too. The fully featured API has more - * complex code that takes longer to execute, but makes much less use of - * critical sections. Therefore the alternative API sacrifices interrupt - * responsiveness to gain execution speed, whereas the fully featured API - * sacrifices execution speed to ensure better interrupt responsiveness. - */ -#define xSemaphoreAltTake( xSemaphore, xBlockTime ) xQueueAltGenericReceive( ( xQueueHandle ) xSemaphore, NULL, xBlockTime, pdFALSE ) - -/** - * semphr. h - *
xSemaphoreGive( xSemaphoreHandle xSemaphore )
- * - * Macro to release a semaphore. The semaphore must have previously been - * created with a call to vSemaphoreCreateBinary(), xSemaphoreCreateMutex() or - * xSemaphoreCreateCounting(). and obtained using sSemaphoreTake(). - * - * This macro must not be used from an ISR. See xSemaphoreGiveFromISR () for - * an alternative which can be used from an ISR. - * - * This macro must also not be used on semaphores created using - * xSemaphoreCreateRecursiveMutex(). - * - * @param xSemaphore A handle to the semaphore being released. This is the - * handle returned when the semaphore was created. - * - * @return pdTRUE if the semaphore was released. pdFALSE if an error occurred. - * Semaphores are implemented using queues. An error can occur if there is - * no space on the queue to post a message - indicating that the - * semaphore was not first obtained correctly. - * - * Example usage: -
- xSemaphoreHandle xSemaphore = NULL;
-
- void vATask( void * pvParameters )
- {
-    // Create the semaphore to guard a shared resource.
-    vSemaphoreCreateBinary( xSemaphore );
-
-    if( xSemaphore != NULL )
-    {
-        if( xSemaphoreGive( xSemaphore ) != pdTRUE )
-        {
-            // We would expect this call to fail because we cannot give
-            // a semaphore without first "taking" it!
-        }
-
-        // Obtain the semaphore - don't block if the semaphore is not
-        // immediately available.
-        if( xSemaphoreTake( xSemaphore, ( portTickType ) 0 ) )
-        {
-            // We now have the semaphore and can access the shared resource.
-
-            // ...
-
-            // We have finished accessing the shared resource so can free the
-            // semaphore.
-            if( xSemaphoreGive( xSemaphore ) != pdTRUE )
-            {
-                // We would not expect this call to fail because we must have
-                // obtained the semaphore to get here.
-            }
-        }
-    }
- }
- 
- * \defgroup xSemaphoreGive xSemaphoreGive - * \ingroup Semaphores - */ -#define xSemaphoreGive( xSemaphore ) xQueueGenericSend( ( xQueueHandle ) xSemaphore, NULL, semGIVE_BLOCK_TIME, queueSEND_TO_BACK ) - -/** - * semphr. h - *
xSemaphoreGiveRecursive( xSemaphoreHandle xMutex )
- * - * Macro to recursively release, or 'give', a mutex type semaphore. - * The mutex must have previously been created using a call to - * xSemaphoreCreateRecursiveMutex(); - * - * configUSE_RECURSIVE_MUTEXES must be set to 1 in FreeRTOSConfig.h for this - * macro to be available. - * - * This macro must not be used on mutexes created using xSemaphoreCreateMutex(). - * - * A mutex used recursively can be 'taken' repeatedly by the owner. The mutex - * doesn't become available again until the owner has called - * xSemaphoreGiveRecursive() for each successful 'take' request. For example, - * if a task successfully 'takes' the same mutex 5 times then the mutex will - * not be available to any other task until it has also 'given' the mutex back - * exactly five times. - * - * @param xMutex A handle to the mutex being released, or 'given'. This is the - * handle returned by xSemaphoreCreateMutex(); - * - * @return pdTRUE if the semaphore was given. - * - * Example usage: -
- xSemaphoreHandle xMutex = NULL;
-
- // A task that creates a mutex.
- void vATask( void * pvParameters )
- {
-    // Create the mutex to guard a shared resource.
-    xMutex = xSemaphoreCreateRecursiveMutex();
- }
-
- // A task that uses the mutex.
- void vAnotherTask( void * pvParameters )
- {
-    // ... Do other things.
-
-    if( xMutex != NULL )
-    {
-        // See if we can obtain the mutex.  If the mutex is not available
-        // wait 10 ticks to see if it becomes free.	
-        if( xSemaphoreTakeRecursive( xMutex, ( portTickType ) 10 ) == pdTRUE )
-        {
-            // We were able to obtain the mutex and can now access the
-            // shared resource.
-
-            // ...
-            // For some reason due to the nature of the code further calls to 
-			// xSemaphoreTakeRecursive() are made on the same mutex.  In real
-			// code these would not be just sequential calls as this would make
-			// no sense.  Instead the calls are likely to be buried inside
-			// a more complex call structure.
-            xSemaphoreTakeRecursive( xMutex, ( portTickType ) 10 );
-            xSemaphoreTakeRecursive( xMutex, ( portTickType ) 10 );
-
-            // The mutex has now been 'taken' three times, so will not be 
-			// available to another task until it has also been given back
-			// three times.  Again it is unlikely that real code would have
-			// these calls sequentially, it would be more likely that the calls
-			// to xSemaphoreGiveRecursive() would be called as a call stack
-			// unwound.  This is just for demonstrative purposes.
-            xSemaphoreGiveRecursive( xMutex );
-			xSemaphoreGiveRecursive( xMutex );
-			xSemaphoreGiveRecursive( xMutex );
-
-			// Now the mutex can be taken by other tasks.
-        }
-        else
-        {
-            // We could not obtain the mutex and can therefore not access
-            // the shared resource safely.
-        }
-    }
- }
- 
- * \defgroup xSemaphoreGiveRecursive xSemaphoreGiveRecursive - * \ingroup Semaphores - */ -#define xSemaphoreGiveRecursive( xMutex ) xQueueGiveMutexRecursive( xMutex ) - -/* - * xSemaphoreAltGive() is an alternative version of xSemaphoreGive(). - * - * The source code that implements the alternative (Alt) API is much - * simpler because it executes everything from within a critical section. - * This is the approach taken by many other RTOSes, but FreeRTOS.org has the - * preferred fully featured API too. The fully featured API has more - * complex code that takes longer to execute, but makes much less use of - * critical sections. Therefore the alternative API sacrifices interrupt - * responsiveness to gain execution speed, whereas the fully featured API - * sacrifices execution speed to ensure better interrupt responsiveness. - */ -#define xSemaphoreAltGive( xSemaphore ) xQueueAltGenericSend( ( xQueueHandle ) xSemaphore, NULL, semGIVE_BLOCK_TIME, queueSEND_TO_BACK ) - -/** - * semphr. h - *
- xSemaphoreGiveFromISR( 
-                          xSemaphoreHandle xSemaphore, 
-                          portSHORT sTaskPreviouslyWoken 
-                      )
- * - * Macro to release a semaphore. The semaphore must have previously been - * created with a call to vSemaphoreCreateBinary() or xSemaphoreCreateCounting(). - * - * Mutex type semaphores (those created using a call to xSemaphoreCreateMutex()) - * must not be used with this macro. - * - * This macro can be used from an ISR. - * - * @param xSemaphore A handle to the semaphore being released. This is the - * handle returned when the semaphore was created. - * - * @param sTaskPreviouslyWoken This is included so an ISR can make multiple calls - * to xSemaphoreGiveFromISR () from a single interrupt. The first call - * should always pass in pdFALSE. Subsequent calls should pass in - * the value returned from the previous call. See the file serial .c in the - * PC port for a good example of using xSemaphoreGiveFromISR (). - * - * @return pdTRUE if a task was woken by releasing the semaphore. This is - * used by the ISR to determine if a context switch may be required following - * the ISR. - * - * Example usage: -
- #define LONG_TIME 0xffff
- #define TICKS_TO_WAIT	10
- xSemaphoreHandle xSemaphore = NULL;
-
- // Repetitive task.
- void vATask( void * pvParameters )
- {
-    for( ;; )
-    {
-        // We want this task to run every 10 ticks of a timer.  The semaphore 
-        // was created before this task was started.
-
-        // Block waiting for the semaphore to become available.
-        if( xSemaphoreTake( xSemaphore, LONG_TIME ) == pdTRUE )
-        {
-            // It is time to execute.
-
-            // ...
-
-            // We have finished our task.  Return to the top of the loop where
-            // we will block on the semaphore until it is time to execute 
-            // again.  Note when using the semaphore for synchronisation with an
-			// ISR in this manner there is no need to 'give' the semaphore back.
-        }
-    }
- }
-
- // Timer ISR
- void vTimerISR( void * pvParameters )
- {
- static unsigned portCHAR ucLocalTickCount = 0;
- static portBASE_TYPE xTaskWoken;
-
-    // A timer tick has occurred.
-
-    // ... Do other time functions.
-
-    // Is it time for vATask () to run?
-	xTaskWoken = pdFALSE;
-    ucLocalTickCount++;
-    if( ucLocalTickCount >= TICKS_TO_WAIT )
-    {
-        // Unblock the task by releasing the semaphore.
-        xTaskWoken = xSemaphoreGiveFromISR( xSemaphore, xTaskWoken );
-
-        // Reset the count so we release the semaphore again in 10 ticks time.
-        ucLocalTickCount = 0;
-    }
-
-    if( xTaskWoken != pdFALSE )
-    {
-        // We can force a context switch here.  Context switching from an
-        // ISR uses port specific syntax.  Check the demo task for your port
-        // to find the syntax required.
-    }
- }
- 
- * \defgroup xSemaphoreGiveFromISR xSemaphoreGiveFromISR - * \ingroup Semaphores - */ -#define xSemaphoreGiveFromISR( xSemaphore, xTaskPreviouslyWoken ) xQueueGenericSendFromISR( ( xQueueHandle ) xSemaphore, NULL, xTaskPreviouslyWoken, queueSEND_TO_BACK ) - -/** - * semphr. h - *
xSemaphoreHandle xSemaphoreCreateMutex( void )
- * - * Macro that implements a mutex semaphore by using the existing queue - * mechanism. - * - * Mutexes created using this macro can be accessed using the xSemaphoreTake() - * and xSemaphoreGive() macros. The xSemaphoreTakeRecursive() and - * xSemaphoreGiveRecursive() macros should not be used. - * - * This type of semaphore uses a priority inheritance mechanism so a task - * 'taking' a semaphore MUST ALWAYS 'give' the semaphore back once the - * semaphore it is no longer required. - * - * Mutex type semaphores cannot be used from within interrupt service routines. - * - * See xSemaphoreCreateBinary() for an alternative implementation that can be - * used for pure synchronisation (where one task or interrupt always 'gives' the - * semaphore and another always 'takes' the semaphore) and from within interrupt - * service routines. - * - * @return xSemaphore Handle to the created mutex semaphore. Should be of type - * xSemaphoreHandle. - * - * Example usage: -
- xSemaphoreHandle xSemaphore;
-
- void vATask( void * pvParameters )
- {
-    // Semaphore cannot be used before a call to xSemaphoreCreateMutex().
-    // This is a macro so pass the variable in directly.
-    xSemaphore = xSemaphoreCreateMutex();
-
-    if( xSemaphore != NULL )
-    {
-        // The semaphore was created successfully.
-        // The semaphore can now be used.  
-    }
- }
- 
- * \defgroup vSemaphoreCreateMutex vSemaphoreCreateMutex - * \ingroup Semaphores - */ -#define xSemaphoreCreateMutex() xQueueCreateMutex() - - -/** - * semphr. h - *
xSemaphoreHandle xSemaphoreCreateRecursiveMutex( void )
- * - * Macro that implements a recursive mutex by using the existing queue - * mechanism. - * - * Mutexes created using this macro can be accessed using the - * xSemaphoreTakeRecursive() and xSemaphoreGiveRecursive() macros. The - * xSemaphoreTake() and xSemaphoreGive() macros should not be used. - * - * A mutex used recursively can be 'taken' repeatedly by the owner. The mutex - * doesn't become available again until the owner has called - * xSemaphoreGiveRecursive() for each successful 'take' request. For example, - * if a task successfully 'takes' the same mutex 5 times then the mutex will - * not be available to any other task until it has also 'given' the mutex back - * exactly five times. - * - * This type of semaphore uses a priority inheritance mechanism so a task - * 'taking' a semaphore MUST ALWAYS 'give' the semaphore back once the - * semaphore it is no longer required. - * - * Mutex type semaphores cannot be used from within interrupt service routines. - * - * See xSemaphoreCreateBinary() for an alternative implementation that can be - * used for pure synchronisation (where one task or interrupt always 'gives' the - * semaphore and another always 'takes' the semaphore) and from within interrupt - * service routines. - * - * @return xSemaphore Handle to the created mutex semaphore. Should be of type - * xSemaphoreHandle. - * - * Example usage: -
- xSemaphoreHandle xSemaphore;
-
- void vATask( void * pvParameters )
- {
-    // Semaphore cannot be used before a call to xSemaphoreCreateMutex().
-    // This is a macro so pass the variable in directly.
-    xSemaphore = xSemaphoreCreateRecursiveMutex();
-
-    if( xSemaphore != NULL )
-    {
-        // The semaphore was created successfully.
-        // The semaphore can now be used.  
-    }
- }
- 
- * \defgroup vSemaphoreCreateMutex vSemaphoreCreateMutex - * \ingroup Semaphores - */ -#define xSemaphoreCreateRecursiveMutex() xQueueCreateMutex() - -/** - * semphr. h - *
xSemaphoreHandle xSemaphoreCreateCounting( unsigned portBASE_TYPE uxMaxCount, unsigned portBASE_TYPE uxInitialCount )
- * - * Macro that creates a counting semaphore by using the existing - * queue mechanism. - * - * Counting semaphores are typically used for two things: - * - * 1) Counting events. - * - * In this usage scenario an event handler will 'give' a semaphore each time - * an event occurs (incrementing the semaphore count value), and a handler - * task will 'take' a semaphore each time it processes an event - * (decrementing the semaphore count value). The count value is therefore - * the difference between the number of events that have occurred and the - * number that have been processed. In this case it is desirable for the - * initial count value to be zero. - * - * 2) Resource management. - * - * In this usage scenario the count value indicates the number of resources - * available. To obtain control of a resource a task must first obtain a - * semaphore - decrementing the semaphore count value. When the count value - * reaches zero there are no free resources. When a task finishes with the - * resource it 'gives' the semaphore back - incrementing the semaphore count - * value. In this case it is desirable for the initial count value to be - * equal to the maximum count value, indicating that all resources are free. - * - * @param uxMaxCount The maximum count value that can be reached. When the - * semaphore reaches this value it can no longer be 'given'. - * - * @param uxInitialCount The count value assigned to the semaphore when it is - * created. - * - * @return Handle to the created semaphore. Null if the semaphore could not be - * created. - * - * Example usage: -
- xSemaphoreHandle xSemaphore;
-
- void vATask( void * pvParameters )
- {
- xSemaphoreHandle xSemaphore = NULL;
-
-    // Semaphore cannot be used before a call to xSemaphoreCreateCounting().
-    // The max value to which the semaphore can count should be 10, and the
-    // initial value assigned to the count should be 0.
-    xSemaphore = xSemaphoreCreateCounting( 10, 0 );
-
-    if( xSemaphore != NULL )
-    {
-        // The semaphore was created successfully.
-        // The semaphore can now be used.  
-    }
- }
- 
- * \defgroup xSemaphoreCreateCounting xSemaphoreCreateCounting - * \ingroup Semaphores - */ -#define xSemaphoreCreateCounting( uxMaxCount, uxInitialCount ) xQueueCreateCountingSemaphore( uxMaxCount, uxInitialCount ) - - -#endif /* SEMAPHORE_H */ - - diff --git a/FreeRTOS1/include/task.h b/FreeRTOS1/include/task.h deleted file mode 100644 index 595d6ab..0000000 --- a/FreeRTOS1/include/task.h +++ /dev/null @@ -1,995 +0,0 @@ -/* - FreeRTOS.org V4.7.2 - Copyright (C) 2003-2008 Richard Barry. - - This file is part of the FreeRTOS.org distribution. - - FreeRTOS.org is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - FreeRTOS.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with FreeRTOS.org; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes FreeRTOS.org, without being obliged to provide - the source code for any proprietary components. See the licensing section - of http://www.FreeRTOS.org for full details of how and when the exception - can be applied. - - *************************************************************************** - - Please ensure to read the configuration and relevant port sections of the - online documentation. - - +++ http://www.FreeRTOS.org +++ - Documentation, latest information, license and contact details. - - +++ http://www.SafeRTOS.com +++ - A version that is certified for use in safety critical systems. - - +++ http://www.OpenRTOS.com +++ - Commercial support, development, porting, licensing and training services. - - *************************************************************************** -*/ - -/* -Changes since V4.3.1: - - + Added xTaskGetSchedulerState() function. -*/ - -#ifndef TASK_H -#define TASK_H - -#include "portable.h" -#include "list.h" - -#ifdef __cplusplus -extern "C" { -#endif -/*----------------------------------------------------------- - * MACROS AND DEFINITIONS - *----------------------------------------------------------*/ - -#define tskKERNEL_VERSION_NUMBER "V4.7.2" - -/** - * task. h - * - * Type by which tasks are referenced. For example, a call to xTaskCreate - * returns (via a pointer parameter) an xTaskHandle variable that can then - * be used as a parameter to vTaskDelete to delete the task. - * - * \page xTaskHandle xTaskHandle - * \ingroup Tasks - */ -typedef void * xTaskHandle; - -/* - * Used internally only. - */ -typedef struct xTIME_OUT -{ - portBASE_TYPE xOverflowCount; - portTickType xTimeOnEntering; -} xTimeOutType; - -/* - * Defines the priority used by the idle task. This must not be modified. - * - * \ingroup TaskUtils - */ -#define tskIDLE_PRIORITY ( ( unsigned portBASE_TYPE ) 0 ) - -/** - * task. h - * - * Macro for forcing a context switch. - * - * \page taskYIELD taskYIELD - * \ingroup SchedulerControl - */ -#define taskYIELD() portYIELD() - -/** - * task. h - * - * Macro to mark the start of a critical code region. Preemptive context - * switches cannot occur when in a critical region. - * - * NOTE: This may alter the stack (depending on the portable implementation) - * so must be used with care! - * - * \page taskENTER_CRITICAL taskENTER_CRITICAL - * \ingroup SchedulerControl - */ -#define taskENTER_CRITICAL() portENTER_CRITICAL() - -/** - * task. h - * - * Macro to mark the end of a critical code region. Preemptive context - * switches cannot occur when in a critical region. - * - * NOTE: This may alter the stack (depending on the portable implementation) - * so must be used with care! - * - * \page taskEXIT_CRITICAL taskEXIT_CRITICAL - * \ingroup SchedulerControl - */ -#define taskEXIT_CRITICAL() portEXIT_CRITICAL() - -/** - * task. h - * - * Macro to disable all maskable interrupts. - * - * \page taskDISABLE_INTERRUPTS taskDISABLE_INTERRUPTS - * \ingroup SchedulerControl - */ -#define taskDISABLE_INTERRUPTS() portDISABLE_INTERRUPTS() - -/** - * task. h - * - * Macro to enable microcontroller interrupts. - * - * \page taskENABLE_INTERRUPTS taskENABLE_INTERRUPTS - * \ingroup SchedulerControl - */ -#define taskENABLE_INTERRUPTS() portENABLE_INTERRUPTS() - -/* Definitions returned by xTaskGetSchedulerState(). */ -#define taskSCHEDULER_NOT_STARTED 0 -#define taskSCHEDULER_RUNNING 1 -#define taskSCHEDULER_SUSPENDED 2 - -/*----------------------------------------------------------- - * TASK CREATION API - *----------------------------------------------------------*/ - -/** - * task. h - *
- portBASE_TYPE xTaskCreate(
-                              pdTASK_CODE pvTaskCode,
-                              const portCHAR * const pcName,
-                              unsigned portSHORT usStackDepth,
-                              void *pvParameters,
-                              unsigned portBASE_TYPE uxPriority,
-                              xTaskHandle *pvCreatedTask
-                          );
- * - * Create a new task and add it to the list of tasks that are ready to run. - * - * @param pvTaskCode Pointer to the task entry function. Tasks - * must be implemented to never return (i.e. continuous loop). - * - * @param pcName A descriptive name for the task. This is mainly used to - * facilitate debugging. Max length defined by tskMAX_TASK_NAME_LEN - default - * is 16. - * - * @param usStackDepth The size of the task stack specified as the number of - * variables the stack can hold - not the number of bytes. For example, if - * the stack is 16 bits wide and usStackDepth is defined as 100, 200 bytes - * will be allocated for stack storage. - * - * @param pvParameters Pointer that will be used as the parameter for the task - * being created. - * - * @param uxPriority The priority at which the task should run. - * - * @param pvCreatedTask Used to pass back a handle by which the created task - * can be referenced. - * - * @return pdPASS if the task was successfully created and added to a ready - * list, otherwise an error code defined in the file errors. h - * - * Example usage: -
- // Task to be created.
- void vTaskCode( void * pvParameters )
- {
-     for( ;; )
-     {
-         // Task code goes here.
-     }
- }
-
- // Function that creates a task.
- void vOtherFunction( void )
- {
- unsigned char ucParameterToPass;
- xTaskHandle xHandle;
-		
-     // Create the task, storing the handle.
-     xTaskCreate( vTaskCode, "NAME", STACK_SIZE, &ucParameterToPass, tskIDLE_PRIORITY, &xHandle );
-		
-     // Use the handle to delete the task.
-     vTaskDelete( xHandle );
- }
-   
- * \defgroup xTaskCreate xTaskCreate - * \ingroup Tasks - */ -signed portBASE_TYPE xTaskCreate( pdTASK_CODE pvTaskCode, const signed portCHAR * const pcName, unsigned portSHORT usStackDepth, void *pvParameters, unsigned portBASE_TYPE uxPriority, xTaskHandle *pvCreatedTask ); - -/** - * task. h - *
void vTaskDelete( xTaskHandle pxTask );
- * - * INCLUDE_vTaskDelete must be defined as 1 for this function to be available. - * See the configuration section for more information. - * - * Remove a task from the RTOS real time kernels management. The task being - * deleted will be removed from all ready, blocked, suspended and event lists. - * - * NOTE: The idle task is responsible for freeing the kernel allocated - * memory from tasks that have been deleted. It is therefore important that - * the idle task is not starved of microcontroller processing time if your - * application makes any calls to vTaskDelete (). Memory allocated by the - * task code is not automatically freed, and should be freed before the task - * is deleted. - * - * See the demo application file death.c for sample code that utilises - * vTaskDelete (). - * - * @param pxTask The handle of the task to be deleted. Passing NULL will - * cause the calling task to be deleted. - * - * Example usage: -
- void vOtherFunction( void )
- {
- xTaskHandle xHandle;
-		
-     // Create the task, storing the handle.
-     xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );
-		
-     // Use the handle to delete the task.
-     vTaskDelete( xHandle );
- }
-   
- * \defgroup vTaskDelete vTaskDelete - * \ingroup Tasks - */ -void vTaskDelete( xTaskHandle pxTask ); - - -/*----------------------------------------------------------- - * TASK CONTROL API - *----------------------------------------------------------*/ - -/** - * task. h - *
void vTaskDelay( portTickType xTicksToDelay );
- * - * Delay a task for a given number of ticks. The actual time that the - * task remains blocked depends on the tick rate. The constant - * portTICK_RATE_MS can be used to calculate real time from the tick - * rate - with the resolution of one tick period. - * - * INCLUDE_vTaskDelay must be defined as 1 for this function to be available. - * See the configuration section for more information. - * - * @param xTicksToDelay The amount of time, in tick periods, that - * the calling task should block. - * - * Example usage: -
- // Wait 10 ticks before performing an action.
- // NOTE:
- // This is for demonstration only and would be better achieved
- // using vTaskDelayUntil ().
- void vTaskFunction( void * pvParameters )
- {
- portTickType xDelay, xNextTime;
-
-     // Calc the time at which we want to perform the action
-     // next.
-     xNextTime = xTaskGetTickCount () + ( portTickType ) 10;
-
-     for( ;; )
-     {
-         xDelay = xNextTime - xTaskGetTickCount ();
-         xNextTime += ( portTickType ) 10;
-
-         // Guard against overflow
-         if( xDelay <= ( portTickType ) 10 )
-         {
-             vTaskDelay( xDelay );
-         }
-
-         // Perform action here.
-     }
- }
-   
- * \defgroup vTaskDelay vTaskDelay - * \ingroup TaskCtrl - */ -void vTaskDelay( portTickType xTicksToDelay ); - -/** - * task. h - *
void vTaskDelayUntil( portTickType *pxPreviousWakeTime, portTickType xTimeIncrement );
- * - * INCLUDE_vTaskDelayUntil must be defined as 1 for this function to be available. - * See the configuration section for more information. - * - * Delay a task until a specified time. This function can be used by cyclical - * tasks to ensure a constant execution frequency. - * - * This function differs from vTaskDelay () in one important aspect: vTaskDelay () will - * cause a task to block for the specified number of ticks from the time vTaskDelay () is - * called. It is therefore difficult to use vTaskDelay () by itself to generate a fixed - * execution frequency as the time between a task starting to execute and that task - * calling vTaskDelay () may not be fixed [the task may take a different path though the - * code between calls, or may get interrupted or preempted a different number of times - * each time it executes]. - * - * Whereas vTaskDelay () specifies a wake time relative to the time at which the function - * is called, vTaskDelayUntil () specifies the absolute (exact) time at which it wishes to - * unblock. - * - * The constant portTICK_RATE_MS can be used to calculate real time from the tick - * rate - with the resolution of one tick period. - * - * @param pxPreviousWakeTime Pointer to a variable that holds the time at which the - * task was last unblocked. The variable must be initialised with the current time - * prior to its first use (see the example below). Following this the variable is - * automatically updated within vTaskDelayUntil (). - * - * @param xTimeIncrement The cycle time period. The task will be unblocked at - * time *pxPreviousWakeTime + xTimeIncrement. Calling vTaskDelayUntil with the - * same xTimeIncrement parameter value will cause the task to execute with - * a fixed interface period. - * - * Example usage: -
- // Perform an action every 10 ticks.
- void vTaskFunction( void * pvParameters )
- {
- portTickType xLastWakeTime;
- const portTickType xFrequency = 10;
-
-     // Initialise the xLastWakeTime variable with the current time.
-     xLastWakeTime = xTaskGetTickCount ();
-     for( ;; )
-     {
-         // Wait for the next cycle.
-         vTaskDelayUntil( &xLastWakeTime, xFrequency );
-
-         // Perform action here.
-     }
- }
-   
- * \defgroup vTaskDelayUntil vTaskDelayUntil - * \ingroup TaskCtrl - */ -void vTaskDelayUntil( portTickType * const pxPreviousWakeTime, portTickType xTimeIncrement ); - -/** - * task. h - *
unsigned portBASE_TYPE uxTaskPriorityGet( xTaskHandle pxTask );
- * - * INCLUDE_xTaskPriorityGet must be defined as 1 for this function to be available. - * See the configuration section for more information. - * - * Obtain the priority of any task. - * - * @param pxTask Handle of the task to be queried. Passing a NULL - * handle results in the priority of the calling task being returned. - * - * @return The priority of pxTask. - * - * Example usage: -
- void vAFunction( void )
- {
- xTaskHandle xHandle;
-		
-     // Create a task, storing the handle.
-     xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );
-		
-     // ...
-
-     // Use the handle to obtain the priority of the created task.
-     // It was created with tskIDLE_PRIORITY, but may have changed
-     // it itself.
-     if( uxTaskPriorityGet( xHandle ) != tskIDLE_PRIORITY )
-     {
-         // The task has changed it's priority.
-     }
-
-     // ...
-
-     // Is our priority higher than the created task?
-     if( uxTaskPriorityGet( xHandle ) < uxTaskPriorityGet( NULL ) )
-     {
-         // Our priority (obtained using NULL handle) is higher.
-     }
- }
-   
- * \defgroup uxTaskPriorityGet uxTaskPriorityGet - * \ingroup TaskCtrl - */ -unsigned portBASE_TYPE uxTaskPriorityGet( xTaskHandle pxTask ); - -/** - * task. h - *
void vTaskPrioritySet( xTaskHandle pxTask, unsigned portBASE_TYPE uxNewPriority );
- * - * INCLUDE_vTaskPrioritySet must be defined as 1 for this function to be available. - * See the configuration section for more information. - * - * Set the priority of any task. - * - * A context switch will occur before the function returns if the priority - * being set is higher than the currently executing task. - * - * @param pxTask Handle to the task for which the priority is being set. - * Passing a NULL handle results in the priority of the calling task being set. - * - * @param uxNewPriority The priority to which the task will be set. - * - * Example usage: -
- void vAFunction( void )
- {
- xTaskHandle xHandle;
-		
-     // Create a task, storing the handle.
-     xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );
-
-     // ...
-
-     // Use the handle to raise the priority of the created task.
-     vTaskPrioritySet( xHandle, tskIDLE_PRIORITY + 1 );
-
-     // ...
-
-     // Use a NULL handle to raise our priority to the same value.
-     vTaskPrioritySet( NULL, tskIDLE_PRIORITY + 1 );
- }
-   
- * \defgroup vTaskPrioritySet vTaskPrioritySet - * \ingroup TaskCtrl - */ -void vTaskPrioritySet( xTaskHandle pxTask, unsigned portBASE_TYPE uxNewPriority ); - -/** - * task. h - *
void vTaskSuspend( xTaskHandle pxTaskToSuspend );
- * - * INCLUDE_vTaskSuspend must be defined as 1 for this function to be available. - * See the configuration section for more information. - * - * Suspend any task. When suspended a task will never get any microcontroller - * processing time, no matter what its priority. - * - * Calls to vTaskSuspend are not accumulative - - * i.e. calling vTaskSuspend () twice on the same task still only requires one - * call to vTaskResume () to ready the suspended task. - * - * @param pxTaskToSuspend Handle to the task being suspended. Passing a NULL - * handle will cause the calling task to be suspended. - * - * Example usage: -
- void vAFunction( void )
- {
- xTaskHandle xHandle;
-		
-     // Create a task, storing the handle.
-     xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );
-		
-     // ...
-
-     // Use the handle to suspend the created task.
-     vTaskSuspend( xHandle );
-
-     // ...
-		
-     // The created task will not run during this period, unless
-     // another task calls vTaskResume( xHandle ).
-		
-     //...
-		
-
-     // Suspend ourselves.
-     vTaskSuspend( NULL );
-
-     // We cannot get here unless another task calls vTaskResume
-     // with our handle as the parameter.
- }
-   
- * \defgroup vTaskSuspend vTaskSuspend - * \ingroup TaskCtrl - */ -void vTaskSuspend( xTaskHandle pxTaskToSuspend ); - -/** - * task. h - *
void vTaskResume( xTaskHandle pxTaskToResume );
- * - * INCLUDE_vTaskSuspend must be defined as 1 for this function to be available. - * See the configuration section for more information. - * - * Resumes a suspended task. - * - * A task that has been suspended by one of more calls to vTaskSuspend () - * will be made available for running again by a single call to - * vTaskResume (). - * - * @param pxTaskToResume Handle to the task being readied. - * - * Example usage: -
- void vAFunction( void )
- {
- xTaskHandle xHandle;
-		
-     // Create a task, storing the handle.
-     xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );
-		
-     // ...
-
-     // Use the handle to suspend the created task.
-     vTaskSuspend( xHandle );
-
-     // ...
-	
-     // The created task will not run during this period, unless
-     // another task calls vTaskResume( xHandle ).
-		
-     //...
-		
-
-     // Resume the suspended task ourselves.
-     vTaskResume( xHandle );
-
-     // The created task will once again get microcontroller processing
-     // time in accordance with it priority within the system.
- }
-   
- * \defgroup vTaskResume vTaskResume - * \ingroup TaskCtrl - */ -void vTaskResume( xTaskHandle pxTaskToResume ); - -/** - * task. h - *
void xTaskResumeFromISR( xTaskHandle pxTaskToResume );
- * - * INCLUDE_xTaskResumeFromISR must be defined as 1 for this function to be - * available. See the configuration section for more information. - * - * An implementation of vTaskResume() that can be called from within an ISR. - * - * A task that has been suspended by one of more calls to vTaskSuspend () - * will be made available for running again by a single call to - * xTaskResumeFromISR (). - * - * @param pxTaskToResume Handle to the task being readied. - * - * \defgroup vTaskResumeFromISR vTaskResumeFromISR - * \ingroup TaskCtrl - */ -portBASE_TYPE xTaskResumeFromISR( xTaskHandle pxTaskToResume ); - -/*----------------------------------------------------------- - * SCHEDULER CONTROL - *----------------------------------------------------------*/ - -/** - * task. h - *
void vTaskStartScheduler( void );
- * - * Starts the real time kernel tick processing. After calling the kernel - * has control over which tasks are executed and when. This function - * does not return until an executing task calls vTaskEndScheduler (). - * - * At least one task should be created via a call to xTaskCreate () - * before calling vTaskStartScheduler (). The idle task is created - * automatically when the first application task is created. - * - * See the demo application file main.c for an example of creating - * tasks and starting the kernel. - * - * Example usage: -
- void vAFunction( void )
- {
-     // Create at least one task before starting the kernel.
-     xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
-
-     // Start the real time kernel with preemption.
-     vTaskStartScheduler ();
-
-     // Will not get here unless a task calls vTaskEndScheduler ()
- }
-   
- * - * \defgroup vTaskStartScheduler vTaskStartScheduler - * \ingroup SchedulerControl - */ -void vTaskStartScheduler( void ); - -/** - * task. h - *
void vTaskEndScheduler( void );
- * - * Stops the real time kernel tick. All created tasks will be automatically - * deleted and multitasking (either preemptive or cooperative) will - * stop. Execution then resumes from the point where vTaskStartScheduler () - * was called, as if vTaskStartScheduler () had just returned. - * - * See the demo application file main. c in the demo/PC directory for an - * example that uses vTaskEndScheduler (). - * - * vTaskEndScheduler () requires an exit function to be defined within the - * portable layer (see vPortEndScheduler () in port. c for the PC port). This - * performs hardware specific operations such as stopping the kernel tick. - * - * vTaskEndScheduler () will cause all of the resources allocated by the - * kernel to be freed - but will not free resources allocated by application - * tasks. - * - * Example usage: -
- void vTaskCode( void * pvParameters )
- {
-     for( ;; )
-     {
-         // Task code goes here.
-
-         // At some point we want to end the real time kernel processing
-         // so call ...
-         vTaskEndScheduler ();
-     }
- }
-
- void vAFunction( void )
- {
-     // Create at least one task before starting the kernel.
-     xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
-
-     // Start the real time kernel with preemption.
-     vTaskStartScheduler ();
-
-     // Will only get here when the vTaskCode () task has called
-     // vTaskEndScheduler ().  When we get here we are back to single task
-     // execution.
- }
-   
- * - * \defgroup vTaskEndScheduler vTaskEndScheduler - * \ingroup SchedulerControl - */ -void vTaskEndScheduler( void ); - -/** - * task. h - *
void vTaskSuspendAll( void );
- * - * Suspends all real time kernel activity while keeping interrupts (including the - * kernel tick) enabled. - * - * After calling vTaskSuspendAll () the calling task will continue to execute - * without risk of being swapped out until a call to xTaskResumeAll () has been - * made. - * - * Example usage: -
- void vTask1( void * pvParameters )
- {
-     for( ;; )
-     {
-         // Task code goes here.
-
-         // ...
-
-         // At some point the task wants to perform a long operation during
-         // which it does not want to get swapped out.  It cannot use
-         // taskENTER_CRITICAL ()/taskEXIT_CRITICAL () as the length of the
-         // operation may cause interrupts to be missed - including the
-         // ticks.
-
-         // Prevent the real time kernel swapping out the task.
-         vTaskSuspendAll ();
-
-         // Perform the operation here.  There is no need to use critical
-         // sections as we have all the microcontroller processing time.
-         // During this time interrupts will still operate and the kernel
-         // tick count will be maintained.
-
-         // ...
-
-         // The operation is complete.  Restart the kernel.
-         xTaskResumeAll ();
-     }
- }
-   
- * \defgroup vTaskSuspendAll vTaskSuspendAll - * \ingroup SchedulerControl - */ -void vTaskSuspendAll( void ); - -/** - * task. h - *
portCHAR xTaskResumeAll( void );
- * - * Resumes real time kernel activity following a call to vTaskSuspendAll (). - * After a call to vTaskSuspendAll () the kernel will take control of which - * task is executing at any time. - * - * @return If resuming the scheduler caused a context switch then pdTRUE is - * returned, otherwise pdFALSE is returned. - * - * Example usage: -
- void vTask1( void * pvParameters )
- {
-     for( ;; )
-     {
-         // Task code goes here.
-
-         // ...
-
-         // At some point the task wants to perform a long operation during
-         // which it does not want to get swapped out.  It cannot use
-         // taskENTER_CRITICAL ()/taskEXIT_CRITICAL () as the length of the
-         // operation may cause interrupts to be missed - including the
-         // ticks.
-
-         // Prevent the real time kernel swapping out the task.
-         vTaskSuspendAll ();
-
-         // Perform the operation here.  There is no need to use critical
-         // sections as we have all the microcontroller processing time.
-         // During this time interrupts will still operate and the real
-         // time kernel tick count will be maintained.
-
-         // ...
-
-         // The operation is complete.  Restart the kernel.  We want to force
-         // a context switch - but there is no point if resuming the scheduler
-         // caused a context switch already.
-         if( !xTaskResumeAll () )
-         {
-              taskYIELD ();
-         }
-     }
- }
-   
- * \defgroup xTaskResumeAll xTaskResumeAll - * \ingroup SchedulerControl - */ -signed portBASE_TYPE xTaskResumeAll( void ); - - -/*----------------------------------------------------------- - * TASK UTILITIES - *----------------------------------------------------------*/ - -/** - * task. h - *
volatile portTickType xTaskGetTickCount( void );
- * - * @return The count of ticks since vTaskStartScheduler was called. - * - * \page xTaskGetTickCount xTaskGetTickCount - * \ingroup TaskUtils - */ -portTickType xTaskGetTickCount( void ); - -/** - * task. h - *
unsigned portSHORT uxTaskGetNumberOfTasks( void );
- * - * @return The number of tasks that the real time kernel is currently managing. - * This includes all ready, blocked and suspended tasks. A task that - * has been deleted but not yet freed by the idle task will also be - * included in the count. - * - * \page uxTaskGetNumberOfTasks uxTaskGetNumberOfTasks - * \ingroup TaskUtils - */ -unsigned portBASE_TYPE uxTaskGetNumberOfTasks( void ); - -/** - * task. h - *
void vTaskList( portCHAR *pcWriteBuffer );
- * - * configUSE_TRACE_FACILITY, INCLUDE_vTaskDelete and INCLUDE_vTaskSuspend - * must all be defined as 1 for this function to be available. - * See the configuration section for more information. - * - * NOTE: This function will disable interrupts for its duration. It is - * not intended for normal application runtime use but as a debug aid. - * - * Lists all the current tasks, along with their current state and stack - * usage high water mark. - * - * Tasks are reported as blocked ('B'), ready ('R'), deleted ('D') or - * suspended ('S'). - * - * @param pcWriteBuffer A buffer into which the above mentioned details - * will be written, in ascii form. This buffer is assumed to be large - * enough to contain the generated report. Approximately 40 bytes per - * task should be sufficient. - * - * \page vTaskList vTaskList - * \ingroup TaskUtils - */ -void vTaskList( signed portCHAR *pcWriteBuffer ); - -/** - * task. h - *
void vTaskStartTrace( portCHAR * pcBuffer, unsigned portBASE_TYPE uxBufferSize );
- * - * Starts a real time kernel activity trace. The trace logs the identity of - * which task is running when. - * - * The trace file is stored in binary format. A separate DOS utility called - * convtrce.exe is used to convert this into a tab delimited text file which - * can be viewed and plotted in a spread sheet. - * - * @param pcBuffer The buffer into which the trace will be written. - * - * @param ulBufferSize The size of pcBuffer in bytes. The trace will continue - * until either the buffer in full, or ulTaskEndTrace () is called. - * - * \page vTaskStartTrace vTaskStartTrace - * \ingroup TaskUtils - */ -void vTaskStartTrace( signed portCHAR * pcBuffer, unsigned portLONG ulBufferSize ); - -/** - * task. h - *
unsigned portLONG ulTaskEndTrace( void );
- * - * Stops a kernel activity trace. See vTaskStartTrace (). - * - * @return The number of bytes that have been written into the trace buffer. - * - * \page usTaskEndTrace usTaskEndTrace - * \ingroup TaskUtils - */ -unsigned portLONG ulTaskEndTrace( void ); - - -/*----------------------------------------------------------- - * SCHEDULER INTERNALS AVAILABLE FOR PORTING PURPOSES - *----------------------------------------------------------*/ - -/* - * THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE. IT IS ONLY - * INTENDED FOR USE WHEN IMPLEMENTING A PORT OF THE SCHEDULER AND IS - * AN INTERFACE WHICH IS FOR THE EXCLUSIVE USE OF THE SCHEDULER. - * - * Called from the real time kernel tick (either preemptive or cooperative), - * this increments the tick count and checks if any tasks that are blocked - * for a finite period required removing from a blocked list and placing on - * a ready list. - */ -inline void vTaskIncrementTick( void ); - -/* - * THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE. IT IS AN - * INTERFACE WHICH IS FOR THE EXCLUSIVE USE OF THE SCHEDULER. - * - * THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED. - * - * Removes the calling task from the ready list and places it both - * on the list of tasks waiting for a particular event, and the - * list of delayed tasks. The task will be removed from both lists - * and replaced on the ready list should either the event occur (and - * there be no higher priority tasks waiting on the same event) or - * the delay period expires. - * - * @param pxEventList The list containing tasks that are blocked waiting - * for the event to occur. - * - * @param xTicksToWait The maximum amount of time that the task should wait - * for the event to occur. This is specified in kernel ticks,the constant - * portTICK_RATE_MS can be used to convert kernel ticks into a real time - * period. - */ -void vTaskPlaceOnEventList( const xList * const pxEventList, portTickType xTicksToWait ); - -/* - * THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE. IT IS AN - * INTERFACE WHICH IS FOR THE EXCLUSIVE USE OF THE SCHEDULER. - * - * THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED. - * - * Removes a task from both the specified event list and the list of blocked - * tasks, and places it on a ready queue. - * - * xTaskRemoveFromEventList () will be called if either an event occurs to - * unblock a task, or the block timeout period expires. - * - * @return pdTRUE if the task being removed has a higher priority than the task - * making the call, otherwise pdFALSE. - */ -signed portBASE_TYPE xTaskRemoveFromEventList( const xList * const pxEventList ); - -/* - * THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE. IT IS AN - * INTERFACE WHICH IS FOR THE EXCLUSIVE USE OF THE SCHEDULER. - * - * INCLUDE_vTaskCleanUpResources and INCLUDE_vTaskSuspend must be defined as 1 - * for this function to be available. - * See the configuration section for more information. - * - * Empties the ready and delayed queues of task control blocks, freeing the - * memory allocated for the task control block and task stacks as it goes. - */ -void vTaskCleanUpResources( void ); - -/* - * THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE. IT IS ONLY - * INTENDED FOR USE WHEN IMPLEMENTING A PORT OF THE SCHEDULER AND IS - * AN INTERFACE WHICH IS FOR THE EXCLUSIVE USE OF THE SCHEDULER. - * - * Sets the pointer to the current TCB to the TCB of the highest priority task - * that is ready to run. - */ -inline void vTaskSwitchContext( void ); - -/* - * Return the handle of the calling task. - */ -xTaskHandle xTaskGetCurrentTaskHandle( void ); - -/* - * Capture the current time status for future reference. - */ -void vTaskSetTimeOutState( xTimeOutType * const pxTimeOut ); - -/* - * Compare the time status now with that previously captured to see if the - * timeout has expired. - */ -portBASE_TYPE xTaskCheckForTimeOut( xTimeOutType * const pxTimeOut, portTickType * const pxTicksToWait ); - -/* - * Shortcut used by the queue implementation to prevent unnecessary call to - * taskYIELD(); - */ -void vTaskMissedYield( void ); - -/* - * Returns the scheduler state as taskSCHEDULER_RUNNING, - * taskSCHEDULER_NOT_STARTED or taskSCHEDULER_SUSPENDED. - */ -portBASE_TYPE xTaskGetSchedulerState( void ); - -/* - * Raises the priority of the mutex holder to that of the calling task should - * the mutex holder have a priority less than the calling task. - */ -void vTaskPriorityInherit( xTaskHandle * const pxMutexHolder ); - -/* - * Set the priority of a task back to its proper priority in the case that it - * inherited a higher priority while it was holding a semaphore. - */ -void vTaskPriorityDisinherit( xTaskHandle * const pxMutexHolder ); - -#ifdef __cplusplus -} -#endif -#endif /* TASK_H */ - - - diff --git a/FreeRTOS1/list.c b/FreeRTOS1/list.c deleted file mode 100644 index c44c2ce..0000000 --- a/FreeRTOS1/list.c +++ /dev/null @@ -1,211 +0,0 @@ -/* - FreeRTOS.org V4.7.2 - Copyright (C) 2003-2008 Richard Barry. - - This file is part of the FreeRTOS.org distribution. - - FreeRTOS.org is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - FreeRTOS.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with FreeRTOS.org; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes FreeRTOS.org, without being obliged to provide - the source code for any proprietary components. See the licensing section - of http://www.FreeRTOS.org for full details of how and when the exception - can be applied. - - *************************************************************************** - - Please ensure to read the configuration and relevant port sections of the - online documentation. - - +++ http://www.FreeRTOS.org +++ - Documentation, latest information, license and contact details. - - +++ http://www.SafeRTOS.com +++ - A version that is certified for use in safety critical systems. - - +++ http://www.OpenRTOS.com +++ - Commercial support, development, porting, licensing and training services. - - *************************************************************************** -*/ - -/* -Changes from V1.2.0 - - + Removed the volatile modifier from the function parameters. This was - only ever included to prevent compiler warnings. Now warnings are - removed by casting parameters where the calls are made. - - + prvListGetOwnerOfNextEntry() and prvListGetOwnerOfHeadEntry() have been - removed from the c file and added as macros to the h file. - - + uxNumberOfItems has been added to the list structure. This removes the - need for a pointer comparison when checking if a list is empty, and so - is slightly faster. - - + Removed the NULL check in vListRemove(). This makes the call faster but - necessitates any application code utilising the list implementation to - ensure NULL pointers are not passed. - -Changes from V2.0.0 - - + Double linked the lists to allow faster removal item removal. - -Changes from V2.6.1 - - + Make use of the new portBASE_TYPE definition where ever appropriate. - -Changes from V3.0.0 - - + API changes as described on the FreeRTOS.org WEB site. - -Changes from V3.2.4 - - + Removed the pxHead member of the xList structure. This always pointed - to the same place so has been removed to free a few bytes of RAM. - - + Introduced the xMiniListItem structure that does not include the - xListItem members that are not required by the xListEnd member of a list. - Again this was done to reduce RAM usage. - - + Changed the volatile definitions of some structure members to clean up - the code where the list structures are used. - -Changes from V4.0.4 - - + Optimised vListInsert() in the case when the wake time is the maximum - tick count value. -*/ - -#include -#include "FreeRTOS.h" -#include "list.h" - -/*----------------------------------------------------------- - * PUBLIC LIST API documented in list.h - *----------------------------------------------------------*/ - -void vListInitialise( xList *pxList ) -{ - /* The list structure contains a list item which is used to mark the - end of the list. To initialise the list the list end is inserted - as the only list entry. */ - pxList->pxIndex = ( xListItem * ) &( pxList->xListEnd ); - - /* The list end value is the highest possible value in the list to - ensure it remains at the end of the list. */ - pxList->xListEnd.xItemValue = portMAX_DELAY; - - /* The list end next and previous pointers point to itself so we know - when the list is empty. */ - pxList->xListEnd.pxNext = ( xListItem * ) &( pxList->xListEnd ); - pxList->xListEnd.pxPrevious = ( xListItem * ) &( pxList->xListEnd ); - - pxList->uxNumberOfItems = 0; -} -/*-----------------------------------------------------------*/ - -void vListInitialiseItem( xListItem *pxItem ) -{ - /* Make sure the list item is not recorded as being on a list. */ - pxItem->pvContainer = NULL; -} -/*-----------------------------------------------------------*/ - -void vListInsertEnd( xList *pxList, xListItem *pxNewListItem ) -{ -volatile xListItem * pxIndex; - - /* Insert a new list item into pxList, but rather than sort the list, - makes the new list item the last item to be removed by a call to - pvListGetOwnerOfNextEntry. This means it has to be the item pointed to by - the pxIndex member. */ - pxIndex = pxList->pxIndex; - - pxNewListItem->pxNext = pxIndex->pxNext; - pxNewListItem->pxPrevious = pxList->pxIndex; - pxIndex->pxNext->pxPrevious = ( volatile xListItem * ) pxNewListItem; - pxIndex->pxNext = ( volatile xListItem * ) pxNewListItem; - pxList->pxIndex = ( volatile xListItem * ) pxNewListItem; - - /* Remember which list the item is in. */ - pxNewListItem->pvContainer = ( void * ) pxList; - - ( pxList->uxNumberOfItems )++; -} -/*-----------------------------------------------------------*/ - -void vListInsert( xList *pxList, xListItem *pxNewListItem ) -{ -volatile xListItem *pxIterator; -portTickType xValueOfInsertion; - - /* Insert the new list item into the list, sorted in ulListItem order. */ - xValueOfInsertion = pxNewListItem->xItemValue; - - /* If the list already contains a list item with the same item value then - the new list item should be placed after it. This ensures that TCB's which - are stored in ready lists (all of which have the same ulListItem value) - get an equal share of the CPU. However, if the xItemValue is the same as - the back marker the iteration loop below will not end. This means we need - to guard against this by checking the value first and modifying the - algorithm slightly if necessary. */ - if( xValueOfInsertion == portMAX_DELAY ) - { - pxIterator = pxList->xListEnd.pxPrevious; - } - else - { - for( pxIterator = ( xListItem * ) &( pxList->xListEnd ); pxIterator->pxNext->xItemValue <= xValueOfInsertion; pxIterator = pxIterator->pxNext ) - { - /* There is nothing to do here, we are just iterating to the - wanted insertion position. */ - } - } - - pxNewListItem->pxNext = pxIterator->pxNext; - pxNewListItem->pxNext->pxPrevious = ( volatile xListItem * ) pxNewListItem; - pxNewListItem->pxPrevious = pxIterator; - pxIterator->pxNext = ( volatile xListItem * ) pxNewListItem; - - /* Remember which list the item is in. This allows fast removal of the - item later. */ - pxNewListItem->pvContainer = ( void * ) pxList; - - ( pxList->uxNumberOfItems )++; -} -/*-----------------------------------------------------------*/ - -void vListRemove( xListItem *pxItemToRemove ) -{ -xList * pxList; - - pxItemToRemove->pxNext->pxPrevious = pxItemToRemove->pxPrevious; - pxItemToRemove->pxPrevious->pxNext = pxItemToRemove->pxNext; - - /* The list item knows which list it is in. Obtain the list from the list - item. */ - pxList = ( xList * ) pxItemToRemove->pvContainer; - - /* Make sure the index is left pointing to a valid item. */ - if( pxList->pxIndex == pxItemToRemove ) - { - pxList->pxIndex = pxItemToRemove->pxPrevious; - } - - pxItemToRemove->pvContainer = NULL; - ( pxList->uxNumberOfItems )--; -} -/*-----------------------------------------------------------*/ - diff --git a/FreeRTOS1/portable/AIC-2.0.0/port.c b/FreeRTOS1/portable/AIC-2.0.0/port.c deleted file mode 100644 index 1b6c02d..0000000 --- a/FreeRTOS1/portable/AIC-2.0.0/port.c +++ /dev/null @@ -1,325 +0,0 @@ -/* - FreeRTOS.org V4.7.2 - Copyright (C) 2003-2008 Richard Barry. - - This file is part of the FreeRTOS.org distribution. - - FreeRTOS.org is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - FreeRTOS.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with FreeRTOS.org; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes FreeRTOS.org, without being obliged to provide - the source code for any proprietary components. See the licensing section - of http://www.FreeRTOS.org for full details of how and when the exception - can be applied. - - *************************************************************************** - - Please ensure to read the configuration and relevant port sections of the - online documentation. - - +++ http://www.FreeRTOS.org +++ - Documentation, latest information, license and contact details. - - +++ http://www.SafeRTOS.com +++ - A version that is certified for use in safety critical systems. - - +++ http://www.OpenRTOS.com +++ - Commercial support, development, porting, licensing and training services. - - *************************************************************************** -*/ - -/* - Changes from V4.2.1 - - + Introduced the configKERNEL_INTERRUPT_PRIORITY definition. -*/ - -/*----------------------------------------------------------- - * Implementation of functions defined in portable.h for the PIC24 port. - *----------------------------------------------------------*/ - -/* Scheduler include files. */ -#include "FreeRTOS.h" -#include "task.h" - -/* Hardware specifics. */ -#define portBIT_SET 1 -#define portTIMER_PRESCALE 8 -#define portINITIAL_SR 0 - -/* Defined for backward compatability with project created prior to -FreeRTOS.org V4.3.0. */ -#ifndef configKERNEL_INTERRUPT_PRIORITY - #define configKERNEL_INTERRUPT_PRIORITY 1 -#endif - -/* The program counter is only 23 bits. */ -#define portUNUSED_PR_BITS 0x7f - -/* Records the nesting depth of calls to portENTER_CRITICAL(). */ -unsigned portBASE_TYPE uxCriticalNesting = 0xef; - -#if configKERNEL_INTERRUPT_PRIORITY != 1 - #error If configKERNEL_INTERRUPT_PRIORITY is not 1 then the #32 in the following macros needs changing to equal the portINTERRUPT_BITS value, which is ( configKERNEL_INTERRUPT_PRIORITY << 5 ) -#endif - - -#define portRESTORE_CONTEXT() \ - asm volatile( "MOV _pxCurrentTCB, W0 \n" /* Restore the stack pointer for the task. */ \ - "MOV [W0], W15 \n" \ - "POP W0 \n" /* Restore the critical nesting counter for the task. */ \ - "MOV W0, _uxCriticalNesting \n" \ - "POP PSVPAG \n" \ - "POP CORCON \n" \ - "POP DOENDH \n" \ - "POP DOENDL \n" \ - "POP DOSTARTH \n" \ - "POP DOSTARTL \n" \ - "POP DCOUNT \n" \ - "POP ACCBU \n" \ - "POP ACCBH \n" \ - "POP ACCBL \n" \ - "POP ACCAU \n" \ - "POP ACCAH \n" \ - "POP ACCAL \n" \ - "POP TBLPAG \n" \ - "POP RCOUNT \n" /* Restore the registers from the stack. */ \ - "POP W14 \n" \ - "POP.D W12 \n" \ - "POP.D W10 \n" \ - "POP.D W8 \n" \ - "POP.D W6 \n" \ - "POP.D W4 \n" \ - "POP.D W2 \n" \ - "POP.D W0 \n" \ - "POP SR " ); - - -#define portSAVE_CONTEXT() \ - asm volatile( "PUSH SR \n" /* Save the SR used by the task.... */ \ - "PUSH W0 \n" /* ....then disable interrupts. */ \ - "MOV #32, W0 \n" \ - "MOV W0, SR \n" \ - "PUSH W1 \n" /* Save registers to the stack. */ \ - "PUSH.D W2 \n" \ - "PUSH.D W4 \n" \ - "PUSH.D W6 \n" \ - "PUSH.D W8 \n" \ - "PUSH.D W10 \n" \ - "PUSH.D W12 \n" \ - "PUSH W14 \n" \ - "PUSH RCOUNT \n" \ - "PUSH TBLPAG \n" \ - "PUSH ACCAL \n" \ - "PUSH ACCAH \n" \ - "PUSH ACCAU \n" \ - "PUSH ACCBL \n" \ - "PUSH ACCBH \n" \ - "PUSH ACCBU \n" \ - "PUSH DCOUNT \n" \ - "PUSH DOSTARTL \n" \ - "PUSH DOSTARTH \n" \ - "PUSH DOENDL \n" \ - "PUSH DOENDH \n" \ - "PUSH CORCON \n" \ - "PUSH PSVPAG \n" \ - "MOV _uxCriticalNesting, W0 \n" /* Save the critical nesting counter for the task. */ \ - "PUSH W0 \n" \ - "MOV _pxCurrentTCB, W0 \n" /* Save the new top of stack into the TCB. */ \ - "MOV W15, [W0] " ); - -/* - * Setup the timer used to generate the tick interrupt. - */ -static void prvSetupTimerInterrupt( void ); - -/* - * See header file for description. - */ -portSTACK_TYPE *pxPortInitialiseStack( portSTACK_TYPE *pxTopOfStack, pdTASK_CODE pxCode, void *pvParameters ) -{ -unsigned portSHORT usCode; -portBASE_TYPE i; - -const portSTACK_TYPE xInitialStack[] = -{ - 0x1111, /* W1 */ - 0x2222, /* W2 */ - 0x3333, /* W3 */ - 0x4444, /* W4 */ - 0x5555, /* W5 */ - 0x6666, /* W6 */ - 0x7777, /* W7 */ - 0x8888, /* W8 */ - 0x9999, /* W9 */ - 0xaaaa, /* W10 */ - 0xbbbb, /* W11 */ - 0xcccc, /* W12 */ - 0xdddd, /* W13 */ - 0xeeee, /* W14 */ - 0xcdce, /* RCOUNT */ - 0xabac, /* TBLPAG */ - - /* dsPIC specific registers. */ - 0x0202, /* ACCAL */ - 0x0303, /* ACCAH */ - 0x0404, /* ACCAU */ - 0x0505, /* ACCBL */ - 0x0606, /* ACCBH */ - 0x0707, /* ACCBU */ - 0x0808, /* DCOUNT */ - 0x090a, /* DOSTARTL */ - 0x1010, /* DOSTARTH */ - 0x1110, /* DOENDL */ - 0x1212, /* DOENDH */ -}; - - /* Setup the stack as if a yield had occurred. - - Save the low bytes of the program counter. */ - usCode = ( unsigned portSHORT ) pxCode; - *pxTopOfStack = ( portSTACK_TYPE ) usCode; - pxTopOfStack++; - - /* Save the high byte of the program counter. This will always be zero - here as it is passed in a 16bit pointer. If the address is greater than - 16 bits then the pointer will point to a jump table. */ - *pxTopOfStack = ( portSTACK_TYPE ) 0; - pxTopOfStack++; - - /* Status register with interrupts enabled. */ - *pxTopOfStack = portINITIAL_SR; - pxTopOfStack++; - - /* Parameters are passed in W0. */ - *pxTopOfStack = ( portSTACK_TYPE ) pvParameters; - pxTopOfStack++; - - for( i = 0; i < ( sizeof( xInitialStack ) / sizeof( portSTACK_TYPE ) ); i++ ) - { - *pxTopOfStack = xInitialStack[ i ]; - pxTopOfStack++; - } - - *pxTopOfStack = CORCON; - pxTopOfStack++; - *pxTopOfStack = PSVPAG; - pxTopOfStack++; - - /* Finally the critical nesting depth. */ - *pxTopOfStack = 0x00; - pxTopOfStack++; - - return pxTopOfStack; -} -/*-----------------------------------------------------------*/ - -portBASE_TYPE xPortStartScheduler( void ) -{ - /* Setup a timer for the tick ISR. */ - prvSetupTimerInterrupt(); - - /* Restore the context of the first task to run. */ - portRESTORE_CONTEXT(); - - /* Simulate the end of the yield function. */ - asm volatile ( "return" ); - - /* Should not reach here. */ - return pdTRUE; -} -/*-----------------------------------------------------------*/ - -void vPortEndScheduler( void ) -{ - /* It is unlikely that the scheduler for the PIC port will get stopped - once running. If required disable the tick interrupt here, then return - to xPortStartScheduler(). */ -} -/*-----------------------------------------------------------*/ - -/* - * Manual context switch. This is similar to the tick context switch, - * but does not increment the tick count. It must be identical to the - * tick context switch in how it stores the stack of a task. - */ -void vPortYield( void ) -{ - portSAVE_CONTEXT(); - vTaskSwitchContext(); - portRESTORE_CONTEXT(); -} -/*-----------------------------------------------------------*/ - -/* - * Setup a timer for a regular tick. - */ -static void prvSetupTimerInterrupt( void ) -{ -const unsigned portLONG ulCompareMatch = ( configCPU_CLOCK_HZ / portTIMER_PRESCALE ) / configTICK_RATE_HZ; - - /* Prescale of 8. */ - T1CON = 0; - TMR1 = 0; - - PR1 = ( unsigned portSHORT ) ulCompareMatch; - - /* Setup timer 1 interrupt priority. */ - IPC0bits.T1IP = configKERNEL_INTERRUPT_PRIORITY; - - /* Clear the interrupt as a starting condition. */ - IFS0bits.T1IF = 0; - - /* Enable the interrupt. */ - IEC0bits.T1IE = 1; - - /* Setup the prescale value. */ -// T1CONbits.TCKPS0 = 1; -// T1CONbits.TCKPS1 = 0; - T1CONbits.TCKPS = 1; - - /* Start the timer. */ - T1CONbits.TON = 1; -} -/*-----------------------------------------------------------*/ - -void vPortEnterCritical( void ) -{ - portDISABLE_INTERRUPTS(); - uxCriticalNesting++; -} -/*-----------------------------------------------------------*/ - -void vPortExitCritical( void ) -{ - uxCriticalNesting--; - if( uxCriticalNesting == 0 ) - { - portENABLE_INTERRUPTS(); - } -} -/*-----------------------------------------------------------*/ - -void __attribute__((__interrupt__, auto_psv)) _T1Interrupt( void ) -{ - vTaskIncrementTick(); - - /* Clear the timer interrupt. */ - IFS0bits.T1IF = 0; - - #if configUSE_PREEMPTION == 1 - portYIELD(); - #endif -} diff --git a/FreeRTOS1/portable/AIC-2.0.0/portmacro.h b/FreeRTOS1/portable/AIC-2.0.0/portmacro.h deleted file mode 100644 index d71c58f..0000000 --- a/FreeRTOS1/portable/AIC-2.0.0/portmacro.h +++ /dev/null @@ -1,119 +0,0 @@ -/* - FreeRTOS.org V4.7.2 - Copyright (C) 2003-2008 Richard Barry. - - This file is part of the FreeRTOS.org distribution. - - FreeRTOS.org is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - FreeRTOS.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with FreeRTOS.org; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes FreeRTOS.org, without being obliged to provide - the source code for any proprietary components. See the licensing section - of http://www.FreeRTOS.org for full details of how and when the exception - can be applied. - - *************************************************************************** - - Please ensure to read the configuration and relevant port sections of the - online documentation. - - +++ http://www.FreeRTOS.org +++ - Documentation, latest information, license and contact details. - - +++ http://www.SafeRTOS.com +++ - A version that is certified for use in safety critical systems. - - +++ http://www.OpenRTOS.com +++ - Commercial support, development, porting, licensing and training services. - - *************************************************************************** -*/ - -#ifndef PORTMACRO_H -#define PORTMACRO_H - -#ifdef __cplusplus -extern "C" { -#endif - -/*----------------------------------------------------------- - * Port specific definitions. - * - * The settings in this file configure FreeRTOS correctly for the - * given hardware and compiler. - * - * These settings should not be altered. - *----------------------------------------------------------- - */ - -/* Type definitions. */ -#define portCHAR char -#define portFLOAT float -#define portDOUBLE double -#define portLONG long -#define portSHORT short -#define portSTACK_TYPE unsigned short -#define portBASE_TYPE short - -#if( configUSE_16_BIT_TICKS == 1 ) - typedef unsigned portSHORT portTickType; - #define portMAX_DELAY ( portTickType ) 0xffff -#else - typedef unsigned portLONG portTickType; - #define portMAX_DELAY ( portTickType ) 0xffffffff -#endif -/*-----------------------------------------------------------*/ - -/* Hardware specifics. */ -#define portBYTE_ALIGNMENT 2 -#define portSTACK_GROWTH 1 -#define portTICK_RATE_MS ( ( portTickType ) 1000 / configTICK_RATE_HZ ) -/*-----------------------------------------------------------*/ - -/* Critical section management. */ -#define portINTERRUPT_BITS ( ( unsigned portSHORT ) configKERNEL_INTERRUPT_PRIORITY << ( unsigned portSHORT ) 5 ) - -#define portDISABLE_INTERRUPTS() SR |= portINTERRUPT_BITS -#define portENABLE_INTERRUPTS() SR &= ~portINTERRUPT_BITS - -/* Note that exiting a critical sectino will set the IPL bits to 0, nomatter -what their value was prior to entering the critical section. */ -extern void vPortEnterCritical( void ); -extern void vPortExitCritical( void ); -#define portENTER_CRITICAL() vPortEnterCritical() -#define portEXIT_CRITICAL() vPortExitCritical() -/*-----------------------------------------------------------*/ - -/* Task utilities. */ -extern void vPortYield( void ); -#define portYIELD() asm volatile ( "CALL _vPortYield \n" \ - "NOP " ); -/*-----------------------------------------------------------*/ - -/* Task function macros as described on the FreeRTOS.org WEB site. */ -#define portTASK_FUNCTION_PROTO( vFunction, pvParameters ) void vFunction( void *pvParameters ) -#define portTASK_FUNCTION( vFunction, pvParameters ) void vFunction( void *pvParameters ) -/*-----------------------------------------------------------*/ - -/* Compiler specifics. */ -#define inline - -#define portNOP() asm volatile ( "NOP" ) - -#ifdef __cplusplus -} -#endif - -#endif /* PORTMACRO_H */ - diff --git a/FreeRTOS1/portable/MemMang/heap_1.c b/FreeRTOS1/portable/MemMang/heap_1.c deleted file mode 100644 index cb27c4c..0000000 --- a/FreeRTOS1/portable/MemMang/heap_1.c +++ /dev/null @@ -1,147 +0,0 @@ -/* - FreeRTOS.org V4.7.2 - Copyright (C) 2003-2008 Richard Barry. - - This file is part of the FreeRTOS.org distribution. - - FreeRTOS.org is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - FreeRTOS.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with FreeRTOS.org; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes FreeRTOS.org, without being obliged to provide - the source code for any proprietary components. See the licensing section - of http://www.FreeRTOS.org for full details of how and when the exception - can be applied. - - *************************************************************************** - - Please ensure to read the configuration and relevant port sections of the - online documentation. - - +++ http://www.FreeRTOS.org +++ - Documentation, latest information, license and contact details. - - +++ http://www.SafeRTOS.com +++ - A version that is certified for use in safety critical systems. - - +++ http://www.OpenRTOS.com +++ - Commercial support, development, porting, licensing and training services. - - *************************************************************************** -*/ - -/* - -Changes between V2.5.1 and V2.5.1 - - + The memory pool has been defined within a struct to ensure correct memory - alignment on 32bit systems. - -Changes between V2.6.1 and V3.0.0 - - + An overflow check has been added to ensure the next free byte variable - does not wrap around. -*/ - - -/* - * The simplest possible implementation of pvPortMalloc(). Note that this - * implementation does NOT allow allocated memory to be freed again. - * - * See heap_2.c and heap_3.c for alternative implementations, and the memory - * management pages of http://www.FreeRTOS.org for more information. - */ -#include -#include "FreeRTOS.h" -#include "task.h" - -/* Setup the correct byte alignment mask for the defined byte alignment. */ - -#if portBYTE_ALIGNMENT == 8 - #define heapBYTE_ALIGNMENT_MASK ( ( size_t ) 0x0007 ) -#endif - -#if portBYTE_ALIGNMENT == 4 - #define heapBYTE_ALIGNMENT_MASK ( ( size_t ) 0x0003 ) -#endif - -#if portBYTE_ALIGNMENT == 2 - #define heapBYTE_ALIGNMENT_MASK ( ( size_t ) 0x0001 ) -#endif - -#if portBYTE_ALIGNMENT == 1 - #define heapBYTE_ALIGNMENT_MASK ( ( size_t ) 0x0000 ) -#endif - -#ifndef heapBYTE_ALIGNMENT_MASK - #error "Invalid portBYTE_ALIGNMENT definition" -#endif - -/* Allocate the memory for the heap. The struct is used to force byte -alignment without using any non-portable code. */ -static struct xRTOS_HEAP -{ - unsigned portLONG ulDummy; - unsigned portCHAR ucHeap[ configTOTAL_HEAP_SIZE ]; -} xHeap; - -static size_t xNextFreeByte = ( size_t ) 0; -/*-----------------------------------------------------------*/ - -void *pvPortMalloc( size_t xWantedSize ) -{ -void *pvReturn = NULL; - - /* Ensure that blocks are always aligned to the required number of bytes. */ - #if portBYTE_ALIGNMENT != 1 - if( xWantedSize & heapBYTE_ALIGNMENT_MASK ) - { - /* Byte alignment required. */ - xWantedSize += ( portBYTE_ALIGNMENT - ( xWantedSize & heapBYTE_ALIGNMENT_MASK ) ); - } - #endif - - vTaskSuspendAll(); - { - /* Check there is enough room left for the allocation. */ - if( ( ( xNextFreeByte + xWantedSize ) < configTOTAL_HEAP_SIZE ) && - ( ( xNextFreeByte + xWantedSize ) > xNextFreeByte ) )/* Check for overflow. */ - { - /* Return the next free byte then increment the index past this - block. */ - pvReturn = &( xHeap.ucHeap[ xNextFreeByte ] ); - xNextFreeByte += xWantedSize; - } - } - xTaskResumeAll(); - - return pvReturn; -} -/*-----------------------------------------------------------*/ - -void vPortFree( void *pv ) -{ - /* Memory cannot be freed using this scheme. See heap_2.c and heap_3.c - for alternative implementations, and the memory management pages of - http://www.FreeRTOS.org for more information. */ - ( void ) pv; -} -/*-----------------------------------------------------------*/ - -void vPortInitialiseBlocks( void ) -{ - /* Only required when static memory is not cleared. */ - xNextFreeByte = ( size_t ) 0; -} - - diff --git a/FreeRTOS1/portable/MemMang/heap_2.c b/FreeRTOS1/portable/MemMang/heap_2.c deleted file mode 100644 index c783988..0000000 --- a/FreeRTOS1/portable/MemMang/heap_2.c +++ /dev/null @@ -1,251 +0,0 @@ -/* - FreeRTOS.org V4.7.2 - Copyright (C) 2003-2008 Richard Barry. - - This file is part of the FreeRTOS.org distribution. - - FreeRTOS.org is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - FreeRTOS.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with FreeRTOS.org; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes FreeRTOS.org, without being obliged to provide - the source code for any proprietary components. See the licensing section - of http://www.FreeRTOS.org for full details of how and when the exception - can be applied. - - *************************************************************************** - - Please ensure to read the configuration and relevant port sections of the - online documentation. - - +++ http://www.FreeRTOS.org +++ - Documentation, latest information, license and contact details. - - +++ http://www.SafeRTOS.com +++ - A version that is certified for use in safety critical systems. - - +++ http://www.OpenRTOS.com +++ - Commercial support, development, porting, licensing and training services. - - *************************************************************************** -*/ - -/* - * A sample implementation of pvPortMalloc() and vPortFree() that permits - * allocated blocks to be freed, but does not combine adjacent free blocks - * into a single larger block. - * - * See heap_1.c and heap_3.c for alternative implementations, and the memory - * management pages of http://www.FreeRTOS.org for more information. - */ -#include - -#include "FreeRTOS.h" -#include "task.h" - -/* Setup the correct byte alignment mask for the defined byte alignment. */ - -#if portBYTE_ALIGNMENT == 8 - #define heapBYTE_ALIGNMENT_MASK ( ( size_t ) 0x0007 ) -#endif - -#if portBYTE_ALIGNMENT == 4 - #define heapBYTE_ALIGNMENT_MASK ( ( size_t ) 0x0003 ) -#endif - -#if portBYTE_ALIGNMENT == 2 - #define heapBYTE_ALIGNMENT_MASK ( ( size_t ) 0x0001 ) -#endif - -#if portBYTE_ALIGNMENT == 1 - #define heapBYTE_ALIGNMENT_MASK ( ( size_t ) 0x0000 ) -#endif - -#ifndef heapBYTE_ALIGNMENT_MASK - #error "Invalid portBYTE_ALIGNMENT definition" -#endif - -/* Allocate the memory for the heap. The struct is used to force byte -alignment without using any non-portable code. */ -static struct xRTOS_HEAP -{ - unsigned portLONG ulDummy; - unsigned portCHAR ucHeap[ configTOTAL_HEAP_SIZE ]; -} xHeap; - -/* Define the linked list structure. This is used to link free blocks in order -of their size. */ -typedef struct A_BLOCK_LINK -{ - struct A_BLOCK_LINK *pxNextFreeBlock; /*<< The next free block in the list. */ - size_t xBlockSize; /*<< The size of the free block. */ -} xBlockLink; - - -static const unsigned portSHORT heapSTRUCT_SIZE = ( sizeof( xBlockLink ) + ( sizeof( xBlockLink ) % portBYTE_ALIGNMENT ) ); -#define heapMINIMUM_BLOCK_SIZE ( ( size_t ) ( heapSTRUCT_SIZE * 2 ) ) - -/* Create a couple of list links to mark the start and end of the list. */ -static xBlockLink xStart, xEnd; - -/* STATIC FUNCTIONS ARE DEFINED AS MACROS TO MINIMIZE THE FUNCTION CALL DEPTH. */ - -/* - * Insert a block into the list of free blocks - which is ordered by size of - * the block. Small blocks at the start of the list and large blocks at the end - * of the list. - */ -#define prvInsertBlockIntoFreeList( pxBlockToInsert ) \ -{ \ -xBlockLink *pxIterator; \ -size_t xBlockSize; \ - \ - xBlockSize = pxBlockToInsert->xBlockSize; \ - \ - /* Iterate through the list until a block is found that has a larger size */ \ - /* than the block we are inserting. */ \ - for( pxIterator = &xStart; pxIterator->pxNextFreeBlock->xBlockSize < xBlockSize; pxIterator = pxIterator->pxNextFreeBlock ) \ - { \ - /* There is nothing to do here - just iterate to the correct position. */ \ - } \ - \ - /* Update the list to include the block being inserted in the correct */ \ - /* position. */ \ - pxBlockToInsert->pxNextFreeBlock = pxIterator->pxNextFreeBlock; \ - pxIterator->pxNextFreeBlock = pxBlockToInsert; \ -} -/*-----------------------------------------------------------*/ - -#define prvHeapInit() \ -{ \ -xBlockLink *pxFirstFreeBlock; \ - \ - /* xStart is used to hold a pointer to the first item in the list of free */ \ - /* blocks. The void cast is used to prevent compiler warnings. */ \ - xStart.pxNextFreeBlock = ( void * ) xHeap.ucHeap; \ - xStart.xBlockSize = ( size_t ) 0; \ - \ - /* xEnd is used to mark the end of the list of free blocks. */ \ - xEnd.xBlockSize = configTOTAL_HEAP_SIZE; \ - xEnd.pxNextFreeBlock = NULL; \ - \ - /* To start with there is a single free block that is sized to take up the \ - entire heap space. */ \ - pxFirstFreeBlock = ( void * ) xHeap.ucHeap; \ - pxFirstFreeBlock->xBlockSize = configTOTAL_HEAP_SIZE; \ - pxFirstFreeBlock->pxNextFreeBlock = &xEnd; \ -} -/*-----------------------------------------------------------*/ - -void *pvPortMalloc( size_t xWantedSize ) -{ -xBlockLink *pxBlock, *pxPreviousBlock, *pxNewBlockLink; -static portBASE_TYPE xHeapHasBeenInitialised = pdFALSE; -void *pvReturn = NULL; - - vTaskSuspendAll(); - { - /* If this is the first call to malloc then the heap will require - initialisation to setup the list of free blocks. */ - if( xHeapHasBeenInitialised == pdFALSE ) - { - prvHeapInit(); - xHeapHasBeenInitialised = pdTRUE; - } - - /* The wanted size is increased so it can contain a xBlockLink - structure in addition to the requested amount of bytes. */ - if( xWantedSize > 0 ) - { - xWantedSize += heapSTRUCT_SIZE; - - /* Ensure that blocks are always aligned to the required number of bytes. */ - if( xWantedSize & heapBYTE_ALIGNMENT_MASK ) - { - /* Byte alignment required. */ - xWantedSize += ( portBYTE_ALIGNMENT - ( xWantedSize & heapBYTE_ALIGNMENT_MASK ) ); - } - } - - if( ( xWantedSize > 0 ) && ( xWantedSize < configTOTAL_HEAP_SIZE ) ) - { - /* Blocks are stored in byte order - traverse the list from the start - (smallest) block until one of adequate size is found. */ - pxPreviousBlock = &xStart; - pxBlock = xStart.pxNextFreeBlock; - while( ( pxBlock->xBlockSize < xWantedSize ) && ( pxBlock->pxNextFreeBlock ) ) - { - pxPreviousBlock = pxBlock; - pxBlock = pxBlock->pxNextFreeBlock; - } - - /* If we found the end marker then a block of adequate size was not found. */ - if( pxBlock != &xEnd ) - { - /* Return the memory space - jumping over the xBlockLink structure - at its start. */ - pvReturn = ( void * ) ( ( ( unsigned portCHAR * ) pxPreviousBlock->pxNextFreeBlock ) + heapSTRUCT_SIZE ); - - /* This block is being returned for use so must be taken our of the - list of free blocks. */ - pxPreviousBlock->pxNextFreeBlock = pxBlock->pxNextFreeBlock; - - /* If the block is larger than required it can be split into two. */ - if( ( pxBlock->xBlockSize - xWantedSize ) > heapMINIMUM_BLOCK_SIZE ) - { - /* This block is to be split into two. Create a new block - following the number of bytes requested. The void cast is - used to prevent byte alignment warnings from the compiler. */ - pxNewBlockLink = ( void * ) ( ( ( unsigned portCHAR * ) pxBlock ) + xWantedSize ); - - /* Calculate the sizes of two blocks split from the single - block. */ - pxNewBlockLink->xBlockSize = pxBlock->xBlockSize - xWantedSize; - pxBlock->xBlockSize = xWantedSize; - - /* Insert the new block into the list of free blocks. */ - prvInsertBlockIntoFreeList( ( pxNewBlockLink ) ); - } - } - } - } - xTaskResumeAll(); - - return pvReturn; -} -/*-----------------------------------------------------------*/ - -void vPortFree( void *pv ) -{ -unsigned portCHAR *puc = ( unsigned portCHAR * ) pv; -xBlockLink *pxLink; - - if( pv ) - { - /* The memory being freed will have an xBlockLink structure immediately - before it. */ - puc -= heapSTRUCT_SIZE; - - /* This casting is to keep the compiler from issuing warnings. */ - pxLink = ( void * ) puc; - - vTaskSuspendAll(); - { - /* Add this block to the list of free blocks. */ - prvInsertBlockIntoFreeList( ( ( xBlockLink * ) pxLink ) ); - } - xTaskResumeAll(); - } -} -/*-----------------------------------------------------------*/ - diff --git a/FreeRTOS1/portable/MemMang/heap_3.c b/FreeRTOS1/portable/MemMang/heap_3.c deleted file mode 100644 index 6ae5e1d..0000000 --- a/FreeRTOS1/portable/MemMang/heap_3.c +++ /dev/null @@ -1,89 +0,0 @@ -/* - FreeRTOS.org V4.7.2 - Copyright (C) 2003-2008 Richard Barry. - - This file is part of the FreeRTOS.org distribution. - - FreeRTOS.org is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - FreeRTOS.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with FreeRTOS.org; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes FreeRTOS.org, without being obliged to provide - the source code for any proprietary components. See the licensing section - of http://www.FreeRTOS.org for full details of how and when the exception - can be applied. - - *************************************************************************** - - Please ensure to read the configuration and relevant port sections of the - online documentation. - - +++ http://www.FreeRTOS.org +++ - Documentation, latest information, license and contact details. - - +++ http://www.SafeRTOS.com +++ - A version that is certified for use in safety critical systems. - - +++ http://www.OpenRTOS.com +++ - Commercial support, development, porting, licensing and training services. - - *************************************************************************** -*/ - - -/* - * Implementation of pvPortMalloc() and vPortFree() that relies on the - * compilers own malloc() and free() implementations. - * - * This file can only be used if the linker is configured to to generate - * a heap memory area. - * - * See heap_2.c and heap_1.c for alternative implementations, and the memory - * management pages of http://www.FreeRTOS.org for more information. - */ - -#include - -#include "FreeRTOS.h" -#include "task.h" - -/*-----------------------------------------------------------*/ - -void *pvPortMalloc( size_t xWantedSize ) -{ -void *pvReturn; - - vTaskSuspendAll(); - { - pvReturn = malloc( xWantedSize ); - } - xTaskResumeAll(); - - return pvReturn; -} -/*-----------------------------------------------------------*/ - -void vPortFree( void *pv ) -{ - if( pv ) - { - vTaskSuspendAll(); - { - free( pv ); - } - xTaskResumeAll(); - } -} - - - diff --git a/FreeRTOS1/portable/readme.txt b/FreeRTOS1/portable/readme.txt deleted file mode 100644 index a20d687..0000000 --- a/FreeRTOS1/portable/readme.txt +++ /dev/null @@ -1,19 +0,0 @@ -Each real time kernel port consists of three files that contain the core kernel -components and are common to every port, and one or more files that are -specific to a particular microcontroller and/or compiler. - - -+ The FreeRTOS/Source/Portable/MemMang directory contains the three sample -memory allocators as described on the http://www.FreeRTOS.org WEB site. - -+ The other directories each contain files specific to a particular -microcontroller or compiler. - - - -For example, if you are interested in the GCC port for the ATMega323 -microcontroller then the port specific files are contained in -FreeRTOS/Source/Portable/GCC/ATMega323 directory. If this is the only -port you are interested in then all the other directories can be -ignored. - diff --git a/FreeRTOS1/queue.c b/FreeRTOS1/queue.c deleted file mode 100644 index a5c7591..0000000 --- a/FreeRTOS1/queue.c +++ /dev/null @@ -1,1322 +0,0 @@ -/* - FreeRTOS.org V4.7.2 - Copyright (C) 2003-2008 Richard Barry. - - This file is part of the FreeRTOS.org distribution. - - FreeRTOS.org is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - FreeRTOS.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with FreeRTOS.org; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes FreeRTOS.org, without being obliged to provide - the source code for any proprietary components. See the licensing section - of http://www.FreeRTOS.org for full details of how and when the exception - can be applied. - - *************************************************************************** - - Please ensure to read the configuration and relevant port sections of the - online documentation. - - +++ http://www.FreeRTOS.org +++ - Documentation, latest information, license and contact details. - - +++ http://www.SafeRTOS.com +++ - A version that is certified for use in safety critical systems. - - +++ http://www.OpenRTOS.com +++ - Commercial support, development, porting, licensing and training services. - - *************************************************************************** -*/ - -#include -#include -#include "FreeRTOS.h" -#include "task.h" -#include "croutine.h" - -/*----------------------------------------------------------- - * PUBLIC LIST API documented in list.h - *----------------------------------------------------------*/ - -/* Constants used with the cRxLock and cTxLock structure members. */ -#define queueUNLOCKED ( ( signed portBASE_TYPE ) -1 ) -#define queueERRONEOUS_UNBLOCK ( -1 ) - -/* For internal use only. */ -#define queueSEND_TO_BACK ( 0 ) -#define queueSEND_TO_FRONT ( 1 ) - -/* Effectively make a union out of the xQUEUE structure. */ -#define pxMutexHolder pcTail -#define uxQueueType pcHead -#define uxRecursiveCallCount pcReadFrom -#define queueQUEUE_IS_MUTEX NULL - -/* Semaphores do not actually store or copy data, so have an items size of -zero. */ -#define queueSEMAPHORE_QUEUE_ITEM_LENGTH ( 0 ) -#define queueDONT_BLOCK ( ( portTickType ) 0 ) -#define queueMUTEX_GIVE_BLOCK_TIME ( ( portTickType ) 0 ) -/* - * Definition of the queue used by the scheduler. - * Items are queued by copy, not reference. - */ -typedef struct QueueDefinition -{ - signed portCHAR *pcHead; /*< Points to the beginning of the queue storage area. */ - signed portCHAR *pcTail; /*< Points to the byte at the end of the queue storage area. Once more byte is allocated than necessary to store the queue items, this is used as a marker. */ - - signed portCHAR *pcWriteTo; /*< Points to the free next place in the storage area. */ - signed portCHAR *pcReadFrom; /*< Points to the last place that a queued item was read from. */ - - xList xTasksWaitingToSend; /*< List of tasks that are blocked waiting to post onto this queue. Stored in priority order. */ - xList xTasksWaitingToReceive; /*< List of tasks that are blocked waiting to read from this queue. Stored in priority order. */ - - volatile unsigned portBASE_TYPE uxMessagesWaiting;/*< The number of items currently in the queue. */ - unsigned portBASE_TYPE uxLength; /*< The length of the queue defined as the number of items it will hold, not the number of bytes. */ - unsigned portBASE_TYPE uxItemSize; /*< The size of each items that the queue will hold. */ - - signed portBASE_TYPE xRxLock; /*< Stores the number of items received from the queue (removed from the queue) while the queue was locked. Set to queueUNLOCKED when the queue is not locked. */ - signed portBASE_TYPE xTxLock; /*< Stores the number of items transmitted to the queue (added to the queue) while the queue was locked. Set to queueUNLOCKED when the queue is not locked. */ -} xQUEUE; -/*-----------------------------------------------------------*/ - -/* - * Inside this file xQueueHandle is a pointer to a xQUEUE structure. - * To keep the definition private the API header file defines it as a - * pointer to void. - */ -typedef xQUEUE * xQueueHandle; - -/* - * Prototypes for public functions are included here so we don't have to - * include the API header file (as it defines xQueueHandle differently). These - * functions are documented in the API header file. - */ -xQueueHandle xQueueCreate( unsigned portBASE_TYPE uxQueueLength, unsigned portBASE_TYPE uxItemSize ); -signed portBASE_TYPE xQueueGenericSend( xQueueHandle xQueue, const void * const pvItemToQueue, portTickType xTicksToWait, portBASE_TYPE xCopyPosition ); -unsigned portBASE_TYPE uxQueueMessagesWaiting( const xQueueHandle pxQueue ); -void vQueueDelete( xQueueHandle xQueue ); -signed portBASE_TYPE xQueueGenericSendFromISR( xQueueHandle pxQueue, const void * const pvItemToQueue, signed portBASE_TYPE xTaskPreviouslyWoken, portBASE_TYPE xCopyPosition ); -signed portBASE_TYPE xQueueGenericReceive( xQueueHandle pxQueue, const void * const pvBuffer, portTickType xTicksToWait, portBASE_TYPE xJustPeeking ); -signed portBASE_TYPE xQueueReceiveFromISR( xQueueHandle pxQueue, const void * const pvBuffer, signed portBASE_TYPE *pxTaskWoken ); -xQueueHandle xQueueCreateMutex( void ); -xQueueHandle xQueueCreateCountingSemaphore( unsigned portBASE_TYPE uxCountValue, unsigned portBASE_TYPE uxInitialCount ); -portBASE_TYPE xQueueTakeMutexRecursive( xQueueHandle xMutex, portTickType xBlockTime ); -portBASE_TYPE xQueueGiveMutexRecursive( xQueueHandle xMutex ); -signed portBASE_TYPE xQueueAltGenericSend( xQueueHandle pxQueue, const void * const pvItemToQueue, portTickType xTicksToWait, portBASE_TYPE xCopyPosition ); -signed portBASE_TYPE xQueueAltGenericReceive( xQueueHandle pxQueue, const void * const pvBuffer, portTickType xTicksToWait, portBASE_TYPE xJustPeeking ); - -#if configUSE_CO_ROUTINES == 1 - signed portBASE_TYPE xQueueCRSendFromISR( xQueueHandle pxQueue, const void *pvItemToQueue, signed portBASE_TYPE xCoRoutinePreviouslyWoken ); - signed portBASE_TYPE xQueueCRReceiveFromISR( xQueueHandle pxQueue, void *pvBuffer, signed portBASE_TYPE *pxTaskWoken ); - signed portBASE_TYPE xQueueCRSend( xQueueHandle pxQueue, const void *pvItemToQueue, portTickType xTicksToWait ); - signed portBASE_TYPE xQueueCRReceive( xQueueHandle pxQueue, void *pvBuffer, portTickType xTicksToWait ); -#endif - -/* - * Unlocks a queue locked by a call to prvLockQueue. Locking a queue does not - * prevent an ISR from adding or removing items to the queue, but does prevent - * an ISR from removing tasks from the queue event lists. If an ISR finds a - * queue is locked it will instead increment the appropriate queue lock count - * to indicate that a task may require unblocking. When the queue in unlocked - * these lock counts are inspected, and the appropriate action taken. - */ -static void prvUnlockQueue( xQueueHandle pxQueue ); - -/* - * Uses a critical section to determine if there is any data in a queue. - * - * @return pdTRUE if the queue contains no items, otherwise pdFALSE. - */ -static signed portBASE_TYPE prvIsQueueEmpty( const xQueueHandle pxQueue ); - -/* - * Uses a critical section to determine if there is any space in a queue. - * - * @return pdTRUE if there is no space, otherwise pdFALSE; - */ -static signed portBASE_TYPE prvIsQueueFull( const xQueueHandle pxQueue ); - -/* - * Copies an item into the queue, either at the front of the queue or the - * back of the queue. - */ -static void prvCopyDataToQueue( xQUEUE *pxQueue, const void *pvItemToQueue, portBASE_TYPE xPosition ); - -/* - * Copies an item out of a queue. - */ -static void prvCopyDataFromQueue( xQUEUE * const pxQueue, const void *pvBuffer ); -/*-----------------------------------------------------------*/ - -/* - * Macro to mark a queue as locked. Locking a queue prevents an ISR from - * accessing the queue event lists. - */ -#define prvLockQueue( pxQueue ) \ -{ \ - taskENTER_CRITICAL(); \ - ++( pxQueue->xRxLock ); \ - ++( pxQueue->xTxLock ); \ - taskEXIT_CRITICAL(); \ -} -/*-----------------------------------------------------------*/ - - -/*----------------------------------------------------------- - * PUBLIC QUEUE MANAGEMENT API documented in queue.h - *----------------------------------------------------------*/ - -xQueueHandle xQueueCreate( unsigned portBASE_TYPE uxQueueLength, unsigned portBASE_TYPE uxItemSize ) -{ -xQUEUE *pxNewQueue; -size_t xQueueSizeInBytes; - - /* Allocate the new queue structure. */ - if( uxQueueLength > ( unsigned portBASE_TYPE ) 0 ) - { - pxNewQueue = ( xQUEUE * ) pvPortMalloc( sizeof( xQUEUE ) ); - if( pxNewQueue != NULL ) - { - /* Create the list of pointers to queue items. The queue is one byte - longer than asked for to make wrap checking easier/faster. */ - xQueueSizeInBytes = ( size_t ) ( uxQueueLength * uxItemSize ) + ( size_t ) 1; - - pxNewQueue->pcHead = ( signed portCHAR * ) pvPortMalloc( xQueueSizeInBytes ); - if( pxNewQueue->pcHead != NULL ) - { - /* Initialise the queue members as described above where the - queue type is defined. */ - pxNewQueue->pcTail = pxNewQueue->pcHead + ( uxQueueLength * uxItemSize ); - pxNewQueue->uxMessagesWaiting = 0; - pxNewQueue->pcWriteTo = pxNewQueue->pcHead; - pxNewQueue->pcReadFrom = pxNewQueue->pcHead + ( ( uxQueueLength - 1 ) * uxItemSize ); - pxNewQueue->uxLength = uxQueueLength; - pxNewQueue->uxItemSize = uxItemSize; - pxNewQueue->xRxLock = queueUNLOCKED; - pxNewQueue->xTxLock = queueUNLOCKED; - - /* Likewise ensure the event queues start with the correct state. */ - vListInitialise( &( pxNewQueue->xTasksWaitingToSend ) ); - vListInitialise( &( pxNewQueue->xTasksWaitingToReceive ) ); - - return pxNewQueue; - } - else - { - vPortFree( pxNewQueue ); - } - } - } - - /* Will only reach here if we could not allocate enough memory or no memory - was required. */ - return NULL; -} -/*-----------------------------------------------------------*/ - -#if ( configUSE_MUTEXES == 1 ) - - xQueueHandle xQueueCreateMutex( void ) - { - xQUEUE *pxNewQueue; - - /* Allocate the new queue structure. */ - pxNewQueue = ( xQUEUE * ) pvPortMalloc( sizeof( xQUEUE ) ); - if( pxNewQueue != NULL ) - { - /* Information required for priority inheritance. */ - pxNewQueue->pxMutexHolder = NULL; - pxNewQueue->uxQueueType = queueQUEUE_IS_MUTEX; - - /* Queues used as a mutex no data is actually copied into or out - of the queue. */ - pxNewQueue->pcWriteTo = NULL; - pxNewQueue->pcReadFrom = NULL; - - /* Each mutex has a length of 1 (like a binary semaphore) and - an item size of 0 as nothing is actually copied into or out - of the mutex. */ - pxNewQueue->uxMessagesWaiting = 0; - pxNewQueue->uxLength = 1; - pxNewQueue->uxItemSize = 0; - pxNewQueue->xRxLock = queueUNLOCKED; - pxNewQueue->xTxLock = queueUNLOCKED; - - /* Ensure the event queues start with the correct state. */ - vListInitialise( &( pxNewQueue->xTasksWaitingToSend ) ); - vListInitialise( &( pxNewQueue->xTasksWaitingToReceive ) ); - - /* Start with the semaphore in the expected state. */ - xQueueGenericSend( pxNewQueue, NULL, 0, queueSEND_TO_BACK ); - } - - return pxNewQueue; - } - -#endif /* configUSE_MUTEXES */ -/*-----------------------------------------------------------*/ - -#if configUSE_RECURSIVE_MUTEXES == 1 - - portBASE_TYPE xQueueGiveMutexRecursive( xQueueHandle pxMutex ) - { - portBASE_TYPE xReturn; - - /* If this is the task that holds the mutex then pxMutexHolder will not - change outside of this task. If this task does not hold the mutex then - pxMutexHolder can never coincidentally equal the tasks handle, and as - this is the only condition we are interested in it does not matter if - pxMutexHolder is accessed simultaneously by another task. Therefore no - mutual exclusion is required to test the pxMutexHolder variable. */ - if( pxMutex->pxMutexHolder == xTaskGetCurrentTaskHandle() ) - { - /* uxRecursiveCallCount cannot be zero if pxMutexHolder is equal to - the task handle, therefore no underflow check is required. Also, - uxRecursiveCallCount is only modified by the mutex holder, and as - there can only be one, no mutual exclusion is required to modify the - uxRecursiveCallCount member. */ - ( pxMutex->uxRecursiveCallCount )--; - - /* Have we unwound the call count? */ - if( pxMutex->uxRecursiveCallCount == 0 ) - { - /* Return the mutex. This will automatically unblock any other - task that might be waiting to access the mutex. */ - xQueueGenericSend( pxMutex, NULL, queueMUTEX_GIVE_BLOCK_TIME, queueSEND_TO_BACK ); - } - - xReturn = pdPASS; - } - else - { - /* We cannot give the mutex because we are not the holder. */ - xReturn = pdFAIL; - } - - return xReturn; - } - -#endif /* configUSE_RECURSIVE_MUTEXES */ -/*-----------------------------------------------------------*/ - -#if configUSE_RECURSIVE_MUTEXES == 1 - - portBASE_TYPE xQueueTakeMutexRecursive( xQueueHandle pxMutex, portTickType xBlockTime ) - { - portBASE_TYPE xReturn; - - /* Comments regarding mutual exclusion as per those within - xQueueGiveMutexRecursive(). */ - - if( pxMutex->pxMutexHolder == xTaskGetCurrentTaskHandle() ) - { - ( pxMutex->uxRecursiveCallCount )++; - xReturn = pdPASS; - } - else - { - xReturn = xQueueGenericReceive( pxMutex, NULL, xBlockTime, pdFALSE ); - - /* pdPASS will only be returned if we successfully obtained the mutex, - we may have blocked to reach here. */ - if( xReturn == pdPASS ) - { - ( pxMutex->uxRecursiveCallCount )++; - } - } - - return xReturn; - } - -#endif /* configUSE_RECURSIVE_MUTEXES */ -/*-----------------------------------------------------------*/ - -#if configUSE_COUNTING_SEMAPHORES == 1 - - xQueueHandle xQueueCreateCountingSemaphore( unsigned portBASE_TYPE uxCountValue, unsigned portBASE_TYPE uxInitialCount ) - { - xQueueHandle pxHandle; - - pxHandle = xQueueCreate( ( unsigned portBASE_TYPE ) uxCountValue, queueSEMAPHORE_QUEUE_ITEM_LENGTH ); - - if( pxHandle != NULL ) - { - pxHandle->uxMessagesWaiting = uxInitialCount; - } - - return pxHandle; - } - -#endif /* configUSE_COUNTING_SEMAPHORES */ -/*-----------------------------------------------------------*/ - -signed portBASE_TYPE xQueueGenericSend( xQueueHandle pxQueue, const void * const pvItemToQueue, portTickType xTicksToWait, portBASE_TYPE xCopyPosition ) -{ -signed portBASE_TYPE xReturn = pdPASS; -xTimeOutType xTimeOut; - - /* Make sure other tasks do not access the queue. */ - vTaskSuspendAll(); - - /* Capture the current time status for future reference. */ - vTaskSetTimeOutState( &xTimeOut ); - - /* It is important that this is the only thread/ISR that modifies the - ready or delayed lists until xTaskResumeAll() is called. Places where - the ready/delayed lists are modified include: - - + vTaskDelay() - Nothing can call vTaskDelay as the scheduler is - suspended, vTaskDelay() cannot be called from an ISR. - + vTaskPrioritySet() - Has a critical section around the access. - + vTaskSwitchContext() - This will not get executed while the scheduler - is suspended. - + prvCheckDelayedTasks() - This will not get executed while the - scheduler is suspended. - + xTaskCreate() - Has a critical section around the access. - + vTaskResume() - Has a critical section around the access. - + xTaskResumeAll() - Has a critical section around the access. - + xTaskRemoveFromEventList - Checks to see if the scheduler is - suspended. If so then the TCB being removed from the event is - removed from the event and added to the xPendingReadyList. - */ - - /* Make sure interrupts do not access the queue event list. */ - prvLockQueue( pxQueue ); - - /* It is important that interrupts to not access the event list of the - queue being modified here. Places where the event list is modified - include: - - + xQueueGenericSendFromISR(). This checks the lock on the queue to see - if it has access. If the queue is locked then the Tx lock count is - incremented to signify that a task waiting for data can be made ready - once the queue lock is removed. If the queue is not locked then - a task can be moved from the event list, but will not be removed - from the delayed list or placed in the ready list until the scheduler - is unlocked. - - + xQueueReceiveFromISR(). As per xQueueGenericSendFromISR(). - */ - - /* If the queue is already full we may have to block. */ - do - { - if( prvIsQueueFull( pxQueue ) ) - { - /* The queue is full - do we want to block or just leave without - posting? */ - if( xTicksToWait > ( portTickType ) 0 ) - { - /* We are going to place ourselves on the xTasksWaitingToSend event - list, and will get woken should the delay expire, or space become - available on the queue. - - As detailed above we do not require mutual exclusion on the event - list as nothing else can modify it or the ready lists while we - have the scheduler suspended and queue locked. - - It is possible that an ISR has removed data from the queue since we - checked if any was available. If this is the case then the data - will have been copied from the queue, and the queue variables - updated, but the event list will not yet have been checked to see if - anything is waiting as the queue is locked. */ - vTaskPlaceOnEventList( &( pxQueue->xTasksWaitingToSend ), xTicksToWait ); - - /* Force a context switch now as we are blocked. We can do - this from within a critical section as the task we are - switching to has its own context. When we return here (i.e. we - unblock) we will leave the critical section as normal. - - It is possible that an ISR has caused an event on an unrelated and - unlocked queue. If this was the case then the event list for that - queue will have been updated but the ready lists left unchanged - - instead the readied task will have been added to the pending ready - list. */ - taskENTER_CRITICAL(); - { - /* We can safely unlock the queue and scheduler here as - interrupts are disabled. We must not yield with anything - locked, but we can yield from within a critical section. - - Tasks that have been placed on the pending ready list cannot - be tasks that are waiting for events on this queue. See - in comment xTaskRemoveFromEventList(). */ - prvUnlockQueue( pxQueue ); - - /* Resuming the scheduler may cause a yield. If so then there - is no point yielding again here. */ - if( !xTaskResumeAll() ) - { - taskYIELD(); - } - - /* We want to check to see if the queue is still full - before leaving the critical section. This is to prevent - this task placing an item into the queue due to an - interrupt making space on the queue between critical - sections (when there might be a higher priority task - blocked on the queue that cannot run yet because the - scheduler gets suspended). */ - if( pxQueue->uxMessagesWaiting == pxQueue->uxLength ) - { - /* We unblocked but there is no space in the queue, - we probably timed out. */ - xReturn = errQUEUE_FULL; - } - - /* Before leaving the critical section we have to ensure - exclusive access again. */ - vTaskSuspendAll(); - prvLockQueue( pxQueue ); - } - taskEXIT_CRITICAL(); - } - } - - /* If xReturn is errQUEUE_FULL then we unblocked when the queue - was still full. Don't check it again now as it is possible that - an interrupt has removed an item from the queue since we left the - critical section and we don't want to write to the queue in case - there is a task of higher priority blocked waiting for space to - be available on the queue. If this is the case the higher priority - task will execute when the scheduler is unsupended. */ - if( xReturn != errQUEUE_FULL ) - { - /* When we are here it is possible that we unblocked as space became - available on the queue. It is also possible that an ISR posted to the - queue since we left the critical section, so it may be that again there - is no space. This would only happen if a task and ISR post onto the - same queue. */ - taskENTER_CRITICAL(); - { - if( pxQueue->uxMessagesWaiting < pxQueue->uxLength ) - { - /* There is room in the queue, copy the data into the queue. */ - prvCopyDataToQueue( pxQueue, pvItemToQueue, xCopyPosition ); - xReturn = pdPASS; - - /* Update the TxLock count so prvUnlockQueue knows to check for - tasks waiting for data to become available in the queue. */ - ++( pxQueue->xTxLock ); - } - else - { - xReturn = errQUEUE_FULL; - } - } - taskEXIT_CRITICAL(); - } - - if( xReturn == errQUEUE_FULL ) - { - if( xTicksToWait > 0 ) - { - if( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE ) - { - xReturn = queueERRONEOUS_UNBLOCK; - } - } - } - } - while( xReturn == queueERRONEOUS_UNBLOCK ); - - prvUnlockQueue( pxQueue ); - xTaskResumeAll(); - - return xReturn; -} -/*-----------------------------------------------------------*/ - -#if configUSE_ALTERNATIVE_API == 1 - - signed portBASE_TYPE xQueueAltGenericSend( xQueueHandle pxQueue, const void * const pvItemToQueue, portTickType xTicksToWait, portBASE_TYPE xCopyPosition ) - { - signed portBASE_TYPE xReturn; - xTimeOutType xTimeOut; - - /* The source code that implements the alternative (Alt) API is much - simpler because it executes everything from within a critical section. - This is the approach taken by many other RTOSes, but FreeRTOS.org has the - preferred fully featured API too. The fully featured API has more - complex code that takes longer to execute, but makes much less use of - critical sections. Therefore the alternative API sacrifices interrupt - responsiveness to gain execution speed, whereas the fully featured API - sacrifices execution speed to ensure better interrupt responsiveness. */ - - taskENTER_CRITICAL(); - { - /* Capture the current time status for future reference. */ - vTaskSetTimeOutState( &xTimeOut ); - - /* If the queue is already full we may have to block. */ - do - { - if( pxQueue->uxMessagesWaiting == pxQueue->uxLength ) - { - /* The queue is full - do we want to block or just leave without - posting? */ - if( xTicksToWait > ( portTickType ) 0 ) - { - /* We are going to place ourselves on the xTasksWaitingToSend - event list, and will get woken should the delay expire, or - space become available on the queue. */ - vTaskPlaceOnEventList( &( pxQueue->xTasksWaitingToSend ), xTicksToWait ); - - /* Force a context switch now as we are blocked. We can do - this from within a critical section as the task we are - switching to has its own context. When we return here (i.e. - we unblock) we will leave the critical section as normal. */ - taskYIELD(); - } - } - - if( pxQueue->uxMessagesWaiting < pxQueue->uxLength ) - { - /* There is room in the queue, copy the data into the queue. */ - prvCopyDataToQueue( pxQueue, pvItemToQueue, xCopyPosition ); - xReturn = pdPASS; - - if( !listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) ) - { - if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE ) - { - /* The task waiting has a higher priority. */ - taskYIELD(); - } - } - } - else - { - xReturn = errQUEUE_FULL; - - if( xTicksToWait > 0 ) - { - if( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE ) - { - /* Another task must have accessed the queue between - this task unblocking and actually executing. */ - xReturn = queueERRONEOUS_UNBLOCK; - } - } - } - } - while( xReturn == queueERRONEOUS_UNBLOCK ); - } - taskEXIT_CRITICAL(); - - return xReturn; - } - -#endif /* configUSE_ALTERNATIVE_API */ -/*-----------------------------------------------------------*/ - -#if configUSE_ALTERNATIVE_API == 1 - - signed portBASE_TYPE xQueueAltGenericReceive( xQueueHandle pxQueue, const void * const pvBuffer, portTickType xTicksToWait, portBASE_TYPE xJustPeeking ) - { - signed portBASE_TYPE xReturn = pdTRUE; - xTimeOutType xTimeOut; - signed portCHAR *pcOriginalReadPosition; - - /* The source code that implements the alternative (Alt) API is much - simpler because it executes everything from within a critical section. - This is the approach taken by many other RTOSes, but FreeRTOS.org has the - preferred fully featured API too. The fully featured API has more - complex code that takes longer to execute, but makes much less use of - critical sections. Therefore the alternative API sacrifices interrupt - responsiveness to gain execution speed, whereas the fully featured API - sacrifices execution speed to ensure better interrupt responsiveness. */ - - taskENTER_CRITICAL(); - { - /* Capture the current time status for future reference. */ - vTaskSetTimeOutState( &xTimeOut ); - - do - { - /* If there are no messages in the queue we may have to block. */ - if( pxQueue->uxMessagesWaiting == ( unsigned portBASE_TYPE ) 0 ) - { - /* There are no messages in the queue, do we want to block or just - leave with nothing? */ - if( xTicksToWait > ( portTickType ) 0 ) - { - #if ( configUSE_MUTEXES == 1 ) - { - if( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX ) - { - vTaskPriorityInherit( ( void * const ) pxQueue->pxMutexHolder ); - } - } - #endif - - vTaskPlaceOnEventList( &( pxQueue->xTasksWaitingToReceive ), xTicksToWait ); - taskYIELD(); - } - } - - if( pxQueue->uxMessagesWaiting > ( unsigned portBASE_TYPE ) 0 ) - { - /* Remember our read position in case we are just peeking. */ - pcOriginalReadPosition = pxQueue->pcReadFrom; - - prvCopyDataFromQueue( pxQueue, pvBuffer ); - - if( xJustPeeking == pdFALSE ) - { - /* We are actually removing data. */ - --( pxQueue->uxMessagesWaiting ); - - #if ( configUSE_MUTEXES == 1 ) - { - if( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX ) - { - /* Record the information required to implement - priority inheritance should it become necessary. */ - pxQueue->pxMutexHolder = xTaskGetCurrentTaskHandle(); - } - } - #endif - - if( !listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) ) - { - if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE ) - { - /* The task waiting has a higher priority. */ - taskYIELD(); - } - } - } - else - { - /* We are not removing the data, so reset our read - pointer. */ - pxQueue->pcReadFrom = pcOriginalReadPosition; - } - - xReturn = pdPASS; - } - else - { - xReturn = errQUEUE_EMPTY; - - if( xTicksToWait > 0 ) - { - if( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE ) - { - xReturn = queueERRONEOUS_UNBLOCK; - } - } - } - - } while( xReturn == queueERRONEOUS_UNBLOCK ); - } - taskEXIT_CRITICAL(); - - return xReturn; - } - -#endif /* configUSE_ALTERNATIVE_API */ -/*-----------------------------------------------------------*/ - -signed portBASE_TYPE xQueueGenericSendFromISR( xQueueHandle pxQueue, const void * const pvItemToQueue, signed portBASE_TYPE xTaskPreviouslyWoken, portBASE_TYPE xCopyPosition ) -{ - /* Similar to xQueueGenericSend, except we don't block if there is no room - in the queue. Also we don't directly wake a task that was blocked on a - queue read, instead we return a flag to say whether a context switch is - required or not (i.e. has a task with a higher priority than us been woken - by this post). */ - if( pxQueue->uxMessagesWaiting < pxQueue->uxLength ) - { - prvCopyDataToQueue( pxQueue, pvItemToQueue, xCopyPosition ); - - /* If the queue is locked we do not alter the event list. This will - be done when the queue is unlocked later. */ - if( pxQueue->xTxLock == queueUNLOCKED ) - { - /* We only want to wake one task per ISR, so check that a task has - not already been woken. */ - if( !xTaskPreviouslyWoken ) - { - if( !listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) ) - { - if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE ) - { - /* The task waiting has a higher priority so record that a - context switch is required. */ - return pdTRUE; - } - } - } - } - else - { - /* Increment the lock count so the task that unlocks the queue - knows that data was posted while it was locked. */ - ++( pxQueue->xTxLock ); - } - } - - return xTaskPreviouslyWoken; -} -/*-----------------------------------------------------------*/ - -signed portBASE_TYPE xQueueGenericReceive( xQueueHandle pxQueue, const void * const pvBuffer, portTickType xTicksToWait, portBASE_TYPE xJustPeeking ) -{ -signed portBASE_TYPE xReturn = pdTRUE; -xTimeOutType xTimeOut; -signed portCHAR *pcOriginalReadPosition; - - /* This function is very similar to xQueueGenericSend(). See comments - within xQueueGenericSend() for a more detailed explanation. - - Make sure other tasks do not access the queue. */ - vTaskSuspendAll(); - - /* Capture the current time status for future reference. */ - vTaskSetTimeOutState( &xTimeOut ); - - /* Make sure interrupts do not access the queue. */ - prvLockQueue( pxQueue ); - - do - { - /* If there are no messages in the queue we may have to block. */ - if( prvIsQueueEmpty( pxQueue ) ) - { - /* There are no messages in the queue, do we want to block or just - leave with nothing? */ - if( xTicksToWait > ( portTickType ) 0 ) - { - #if ( configUSE_MUTEXES == 1 ) - { - if( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX ) - { - portENTER_CRITICAL(); - vTaskPriorityInherit( ( void * ) pxQueue->pxMutexHolder ); - portEXIT_CRITICAL(); - } - } - #endif - - vTaskPlaceOnEventList( &( pxQueue->xTasksWaitingToReceive ), xTicksToWait ); - taskENTER_CRITICAL(); - { - prvUnlockQueue( pxQueue ); - if( !xTaskResumeAll() ) - { - taskYIELD(); - } - - if( pxQueue->uxMessagesWaiting == ( unsigned portBASE_TYPE ) 0 ) - { - /* We unblocked but the queue is empty. We probably - timed out. */ - xReturn = errQUEUE_EMPTY; - } - - vTaskSuspendAll(); - prvLockQueue( pxQueue ); - } - taskEXIT_CRITICAL(); - } - } - - if( xReturn != errQUEUE_EMPTY ) - { - taskENTER_CRITICAL(); - { - if( pxQueue->uxMessagesWaiting > ( unsigned portBASE_TYPE ) 0 ) - { - /* Remember our read position in case we are just peeking. */ - pcOriginalReadPosition = pxQueue->pcReadFrom; - - prvCopyDataFromQueue( pxQueue, pvBuffer ); - - if( xJustPeeking == pdFALSE ) - { - /* We are actually removing data. */ - --( pxQueue->uxMessagesWaiting ); - - /* Increment the lock count so prvUnlockQueue knows to check for - tasks waiting for space to become available on the queue. */ - ++( pxQueue->xRxLock ); - - #if ( configUSE_MUTEXES == 1 ) - { - if( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX ) - { - /* Record the information required to implement - priority inheritance should it become necessary. */ - pxQueue->pxMutexHolder = xTaskGetCurrentTaskHandle(); - } - } - #endif - } - else - { - /* We are not removing the data, so reset our read - pointer. */ - pxQueue->pcReadFrom = pcOriginalReadPosition; - - /* The data is being left in the queue, so increment the - lock count so prvUnlockQueue knows to check for other - tasks waiting for the data to be available. */ - ++( pxQueue->xTxLock ); - } - - xReturn = pdPASS; - } - else - { - xReturn = errQUEUE_EMPTY; - } - } - taskEXIT_CRITICAL(); - } - - if( xReturn == errQUEUE_EMPTY ) - { - if( xTicksToWait > 0 ) - { - if( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE ) - { - xReturn = queueERRONEOUS_UNBLOCK; - } - } - } - } while( xReturn == queueERRONEOUS_UNBLOCK ); - - /* We no longer require exclusive access to the queue. */ - prvUnlockQueue( pxQueue ); - xTaskResumeAll(); - - return xReturn; -} -/*-----------------------------------------------------------*/ - -signed portBASE_TYPE xQueueReceiveFromISR( xQueueHandle pxQueue, const void * const pvBuffer, signed portBASE_TYPE *pxTaskWoken ) -{ -signed portBASE_TYPE xReturn; - - /* We cannot block from an ISR, so check there is data available. */ - if( pxQueue->uxMessagesWaiting > ( unsigned portBASE_TYPE ) 0 ) - { - prvCopyDataFromQueue( pxQueue, pvBuffer ); - --( pxQueue->uxMessagesWaiting ); - - /* If the queue is locked we will not modify the event list. Instead - we update the lock count so the task that unlocks the queue will know - that an ISR has removed data while the queue was locked. */ - if( pxQueue->xRxLock == queueUNLOCKED ) - { - /* We only want to wake one task per ISR, so check that a task has - not already been woken. */ - if( !( *pxTaskWoken ) ) - { - if( !listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) ) - { - if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE ) - { - /* The task waiting has a higher priority than us so - force a context switch. */ - *pxTaskWoken = pdTRUE; - } - } - } - } - else - { - /* Increment the lock count so the task that unlocks the queue - knows that data was removed while it was locked. */ - ++( pxQueue->xRxLock ); - } - - xReturn = pdPASS; - } - else - { - xReturn = pdFAIL; - } - - return xReturn; -} -/*-----------------------------------------------------------*/ - -unsigned portBASE_TYPE uxQueueMessagesWaiting( const xQueueHandle pxQueue ) -{ -unsigned portBASE_TYPE uxReturn; - - taskENTER_CRITICAL(); - uxReturn = pxQueue->uxMessagesWaiting; - taskEXIT_CRITICAL(); - - return uxReturn; -} -/*-----------------------------------------------------------*/ - -void vQueueDelete( xQueueHandle pxQueue ) -{ - vPortFree( pxQueue->pcHead ); - vPortFree( pxQueue ); -} -/*-----------------------------------------------------------*/ - -static void prvCopyDataToQueue( xQUEUE *pxQueue, const void *pvItemToQueue, portBASE_TYPE xPosition ) -{ - if( pxQueue->uxItemSize == 0 ) - { - #if ( configUSE_MUTEXES == 1 ) - { - if( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX ) - { - /* The mutex is no longer being held. */ - vTaskPriorityDisinherit( ( void * ) pxQueue->pxMutexHolder ); - pxQueue->pxMutexHolder = NULL; - } - } - #endif - } - else if( xPosition == queueSEND_TO_BACK ) - { - memcpy( ( void * ) pxQueue->pcWriteTo, pvItemToQueue, ( unsigned ) pxQueue->uxItemSize ); - pxQueue->pcWriteTo += pxQueue->uxItemSize; - if( pxQueue->pcWriteTo >= pxQueue->pcTail ) - { - pxQueue->pcWriteTo = pxQueue->pcHead; - } - } - else - { - memcpy( ( void * ) pxQueue->pcReadFrom, pvItemToQueue, ( unsigned ) pxQueue->uxItemSize ); - pxQueue->pcReadFrom -= pxQueue->uxItemSize; - if( pxQueue->pcReadFrom < pxQueue->pcHead ) - { - pxQueue->pcReadFrom = ( pxQueue->pcTail - pxQueue->uxItemSize ); - } - } - - ++( pxQueue->uxMessagesWaiting ); -} -/*-----------------------------------------------------------*/ - -static void prvCopyDataFromQueue( xQUEUE * const pxQueue, const void *pvBuffer ) -{ - if( pxQueue->uxQueueType != queueQUEUE_IS_MUTEX ) - { - pxQueue->pcReadFrom += pxQueue->uxItemSize; - if( pxQueue->pcReadFrom >= pxQueue->pcTail ) - { - pxQueue->pcReadFrom = pxQueue->pcHead; - } - memcpy( ( void * ) pvBuffer, ( void * ) pxQueue->pcReadFrom, ( unsigned ) pxQueue->uxItemSize ); - } -} -/*-----------------------------------------------------------*/ - -static void prvUnlockQueue( xQueueHandle pxQueue ) -{ - /* THIS FUNCTION MUST BE CALLED WITH THE SCHEDULER SUSPENDED. */ - - /* The lock counts contains the number of extra data items placed or - removed from the queue while the queue was locked. When a queue is - locked items can be added or removed, but the event lists cannot be - updated. */ - taskENTER_CRITICAL(); - { - --( pxQueue->xTxLock ); - - /* See if data was added to the queue while it was locked. */ - if( pxQueue->xTxLock > queueUNLOCKED ) - { - pxQueue->xTxLock = queueUNLOCKED; - - /* Data was posted while the queue was locked. Are any tasks - blocked waiting for data to become available? */ - if( !listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) ) - { - /* Tasks that are removed from the event list will get added to - the pending ready list as the scheduler is still suspended. */ - if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE ) - { - /* The task waiting has a higher priority so record that a - context switch is required. */ - vTaskMissedYield(); - } - } - } - } - taskEXIT_CRITICAL(); - - /* Do the same for the Rx lock. */ - taskENTER_CRITICAL(); - { - --( pxQueue->xRxLock ); - - if( pxQueue->xRxLock > queueUNLOCKED ) - { - pxQueue->xRxLock = queueUNLOCKED; - - if( !listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) ) - { - if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE ) - { - vTaskMissedYield(); - } - } - } - } - taskEXIT_CRITICAL(); -} -/*-----------------------------------------------------------*/ - -static signed portBASE_TYPE prvIsQueueEmpty( const xQueueHandle pxQueue ) -{ -signed portBASE_TYPE xReturn; - - taskENTER_CRITICAL(); - xReturn = ( pxQueue->uxMessagesWaiting == ( unsigned portBASE_TYPE ) 0 ); - taskEXIT_CRITICAL(); - - return xReturn; -} -/*-----------------------------------------------------------*/ - -static signed portBASE_TYPE prvIsQueueFull( const xQueueHandle pxQueue ) -{ -signed portBASE_TYPE xReturn; - - taskENTER_CRITICAL(); - xReturn = ( pxQueue->uxMessagesWaiting == pxQueue->uxLength ); - taskEXIT_CRITICAL(); - - return xReturn; -} -/*-----------------------------------------------------------*/ - -#if configUSE_CO_ROUTINES == 1 -signed portBASE_TYPE xQueueCRSend( xQueueHandle pxQueue, const void *pvItemToQueue, portTickType xTicksToWait ) -{ -signed portBASE_TYPE xReturn; - - /* If the queue is already full we may have to block. A critical section - is required to prevent an interrupt removing something from the queue - between the check to see if the queue is full and blocking on the queue. */ - portDISABLE_INTERRUPTS(); - { - if( prvIsQueueFull( pxQueue ) ) - { - /* The queue is full - do we want to block or just leave without - posting? */ - if( xTicksToWait > ( portTickType ) 0 ) - { - /* As this is called from a coroutine we cannot block directly, but - return indicating that we need to block. */ - vCoRoutineAddToDelayedList( xTicksToWait, &( pxQueue->xTasksWaitingToSend ) ); - portENABLE_INTERRUPTS(); - return errQUEUE_BLOCKED; - } - else - { - portENABLE_INTERRUPTS(); - return errQUEUE_FULL; - } - } - } - portENABLE_INTERRUPTS(); - - portNOP(); - - portDISABLE_INTERRUPTS(); - { - if( pxQueue->uxMessagesWaiting < pxQueue->uxLength ) - { - /* There is room in the queue, copy the data into the queue. */ - prvCopyDataToQueue( pxQueue, pvItemToQueue, queueSEND_TO_BACK ); - xReturn = pdPASS; - - /* Were any co-routines waiting for data to become available? */ - if( !listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) ) - { - /* In this instance the co-routine could be placed directly - into the ready list as we are within a critical section. - Instead the same pending ready list mechanism is used as if - the event were caused from within an interrupt. */ - if( xCoRoutineRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE ) - { - /* The co-routine waiting has a higher priority so record - that a yield might be appropriate. */ - xReturn = errQUEUE_YIELD; - } - } - } - else - { - xReturn = errQUEUE_FULL; - } - } - portENABLE_INTERRUPTS(); - - return xReturn; -} -#endif -/*-----------------------------------------------------------*/ - -#if configUSE_CO_ROUTINES == 1 -signed portBASE_TYPE xQueueCRReceive( xQueueHandle pxQueue, void *pvBuffer, portTickType xTicksToWait ) -{ -signed portBASE_TYPE xReturn; - - /* If the queue is already empty we may have to block. A critical section - is required to prevent an interrupt adding something to the queue - between the check to see if the queue is empty and blocking on the queue. */ - portDISABLE_INTERRUPTS(); - { - if( pxQueue->uxMessagesWaiting == ( unsigned portBASE_TYPE ) 0 ) - { - /* There are no messages in the queue, do we want to block or just - leave with nothing? */ - if( xTicksToWait > ( portTickType ) 0 ) - { - /* As this is a co-routine we cannot block directly, but return - indicating that we need to block. */ - vCoRoutineAddToDelayedList( xTicksToWait, &( pxQueue->xTasksWaitingToReceive ) ); - portENABLE_INTERRUPTS(); - return errQUEUE_BLOCKED; - } - else - { - portENABLE_INTERRUPTS(); - return errQUEUE_FULL; - } - } - } - portENABLE_INTERRUPTS(); - - portNOP(); - - portDISABLE_INTERRUPTS(); - { - if( pxQueue->uxMessagesWaiting > ( unsigned portBASE_TYPE ) 0 ) - { - /* Data is available from the queue. */ - pxQueue->pcReadFrom += pxQueue->uxItemSize; - if( pxQueue->pcReadFrom >= pxQueue->pcTail ) - { - pxQueue->pcReadFrom = pxQueue->pcHead; - } - --( pxQueue->uxMessagesWaiting ); - memcpy( ( void * ) pvBuffer, ( void * ) pxQueue->pcReadFrom, ( unsigned ) pxQueue->uxItemSize ); - - xReturn = pdPASS; - - /* Were any co-routines waiting for space to become available? */ - if( !listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) ) - { - /* In this instance the co-routine could be placed directly - into the ready list as we are within a critical section. - Instead the same pending ready list mechanism is used as if - the event were caused from within an interrupt. */ - if( xCoRoutineRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE ) - { - xReturn = errQUEUE_YIELD; - } - } - } - else - { - xReturn = pdFAIL; - } - } - portENABLE_INTERRUPTS(); - - return xReturn; -} -#endif -/*-----------------------------------------------------------*/ - - - -#if configUSE_CO_ROUTINES == 1 -signed portBASE_TYPE xQueueCRSendFromISR( xQueueHandle pxQueue, const void *pvItemToQueue, signed portBASE_TYPE xCoRoutinePreviouslyWoken ) -{ - /* Cannot block within an ISR so if there is no space on the queue then - exit without doing anything. */ - if( pxQueue->uxMessagesWaiting < pxQueue->uxLength ) - { - prvCopyDataToQueue( pxQueue, pvItemToQueue, queueSEND_TO_BACK ); - - /* We only want to wake one co-routine per ISR, so check that a - co-routine has not already been woken. */ - if( !xCoRoutinePreviouslyWoken ) - { - if( !listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) ) - { - if( xCoRoutineRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE ) - { - return pdTRUE; - } - } - } - } - - return xCoRoutinePreviouslyWoken; -} -#endif -/*-----------------------------------------------------------*/ - -#if configUSE_CO_ROUTINES == 1 -signed portBASE_TYPE xQueueCRReceiveFromISR( xQueueHandle pxQueue, void *pvBuffer, signed portBASE_TYPE *pxCoRoutineWoken ) -{ -signed portBASE_TYPE xReturn; - - /* We cannot block from an ISR, so check there is data available. If - not then just leave without doing anything. */ - if( pxQueue->uxMessagesWaiting > ( unsigned portBASE_TYPE ) 0 ) - { - /* Copy the data from the queue. */ - pxQueue->pcReadFrom += pxQueue->uxItemSize; - if( pxQueue->pcReadFrom >= pxQueue->pcTail ) - { - pxQueue->pcReadFrom = pxQueue->pcHead; - } - --( pxQueue->uxMessagesWaiting ); - memcpy( ( void * ) pvBuffer, ( void * ) pxQueue->pcReadFrom, ( unsigned ) pxQueue->uxItemSize ); - - if( !( *pxCoRoutineWoken ) ) - { - if( !listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) ) - { - if( xCoRoutineRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE ) - { - *pxCoRoutineWoken = pdTRUE; - } - } - } - - xReturn = pdPASS; - } - else - { - xReturn = pdFAIL; - } - - return xReturn; -} -#endif -/*-----------------------------------------------------------*/ - diff --git a/FreeRTOS1/readme.txt b/FreeRTOS1/readme.txt deleted file mode 100644 index 01a8781..0000000 --- a/FreeRTOS1/readme.txt +++ /dev/null @@ -1,15 +0,0 @@ -Each real time kernel port consists of three files that contain the core kernel -components and are common to every port, and one or more files that are -specific to a particular microcontroller and or compiler. - -+ The FreeRTOS/Source directory contains the three files that are common to -every port. The kernel is contained within these three files. - -+ The FreeRTOS/Source/Portable directory contains the files that are specific to -a particular microcontroller and or compiler. - -+ The FreeRTOS/Source/include directory contains the real time kernel header -files. - -See the readme file in the FreeRTOS/Source/Portable directory for more -information. \ No newline at end of file diff --git a/FreeRTOS1/tasks.c b/FreeRTOS1/tasks.c deleted file mode 100644 index cc43e7e..0000000 --- a/FreeRTOS1/tasks.c +++ /dev/null @@ -1,2046 +0,0 @@ -/* - FreeRTOS.org V4.7.2 - Copyright (C) 2003-2008 Richard Barry. - - This file is part of the FreeRTOS.org distribution. - - FreeRTOS.org is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - FreeRTOS.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with FreeRTOS.org; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes FreeRTOS.org, without being obliged to provide - the source code for any proprietary components. See the licensing section - of http://www.FreeRTOS.org for full details of how and when the exception - can be applied. - - *************************************************************************** - - Please ensure to read the configuration and relevant port sections of the - online documentation. - - +++ http://www.FreeRTOS.org +++ - Documentation, latest information, license and contact details. - - +++ http://www.SafeRTOS.com +++ - A version that is certified for use in safety critical systems. - - +++ http://www.OpenRTOS.com +++ - Commercial support, development, porting, licensing and training services. - - *************************************************************************** -*/ - -/* -Changes from V1.00: - - + Call to portRESTORE_CONTEXT has been removed. The first context - switch is now performed within sPortStartScheduler(). - -Changes from V1.01: - - + More use of 8bit data types. - + Function name prefixes changed where the data type returned has changed. - + configUSE_TRACE_FACILITY is no longer defined by default. - -Changes from V1.2.0 - - + Introduced ucTopReadyPriority. This tracks the highest priority ready - queue that contains a valid TCB and thus makes the context switch - slightly faster. - - + prvAddTaskToReadyQueue() has been made a macro. - -Changes from V1.2.6 - - + Added conditional compilation directives. - + Extended API. - + Rearranged function order. - + Creating a task now causes a context switch if the task being created - has a higher priority than the calling task - assuming the kernel is - running. - + vTaskDelete() now only causes a context switch if the calling task is - the task being deleted. - -Changes from V2.0.0 - - + Allow the type of the tick count to be 16 or 32 bits. - + Introduce xPendingReadyList feature to allow the time interrupts have to - be disabled to be minimised. - + Remove the #if( INCLUDE_vTaskSuspendAll ) statements. vTaskSuspendAll() - is now always included as it is used by the scheduler itself. - -Changes from V2.1.0 - - + Bug fix - pxCurrentTCB is now initialised before the call to - prvInitializeTaskLists(). Previously pxCurrentTCB could be accessed - while null. - -Changed from V2.1.1 - - + Change to where lStackSize is declared within sTaskCreate() to prevent - compiler warnings with 8051 port. - -Changes from V2.2.0 - - + Explicit use of 'signed' qualifier on portCHAR types added. - + Changed odd calculation of initial pxTopOfStack value when - portSTACK_GROWTH < 0. - + Removed pcVersionNumber definition. - -Changes from V2.5.3 - - + cTaskResumeAll() modified to ensure it can be called prior to the task - lists being initialised. - -Changes from V2.5.5 - - + Added API function vTaskDelayUntil(). - + Added INCLUDE_vTaskDelay conditional compilation. - -Changes from V2.6.0 - - + Updated the vWriteTraceToBuffer macro to always be 4 byte aligned so it - can be used on ARM architectures. - + tskMAX_TASK_NAME_LEN definition replaced with the port specific - configMAX_TASK_NAME_LEN definition. - + Removed the call to strcpy when copying across the task name into the - TCB. - + Added ucTasksDeleted variable to prevent vTaskSuspendAll() being called - too often in the idle task. - -Changes between V3.0.0 and V2.6.1 - - + When resuming the scheduler a yield is performed if either a tick has - been missed, or a task is moved from the pending ready list into a ready - list. Previously a yield was not performed on this second condition. - + Introduced the type portBASE_TYPE. This necessitates several API - changes. - + Removed the sUsingPreemption variable. The constant defined in - portmacro.h is now used directly. - + The idle task can now include an optional hook function - and no longer - completes its time slice if other tasks with equal priority to it are - ready to run. - + See the FreeRTOS.org documentation for more information on V2.x.x to - V3.x.x modifications. - -Changes from V3.1.1 - - + Modified vTaskPrioritySet() and vTaskResume() to allow these functions to - be called while the scheduler is suspended. - + Corrected the task ordering within event lists. - -Changes from V3.2.0 - - + Added function xTaskGetCurrentTaskHandle(). - -Changes from V3.2.4 - - + Changed the volatile declarations on some variables to reflect the - changes to the list definitions. - + Changed the order of the TCB definition so there is commonality between - the task control block and a co-routine control block. - + Allow the scheduler to be started even if no tasks other than the idle - task has been created. This allows co-routines to run even when no tasks - have been created. - + The need for a context switch is now signalled if a task woken by an - event has a priority greater or equal to the currently running task. - Previously this was only greater than. - -Changes from V4.0.0 - - + Added the xMissedYield handling. - -Changes from V4.0.1 - - + The function vTaskList() now suspends the scheduler rather than disabling - interrupts during the creation of the task list. - + Allow a task to delete itself by passing in its own handle. Previously - this could only be done by passing in NULL. - + The tick hook function is now called only within a tick isr. Previously - it was also called when the tick function was called during the scheduler - unlocking process. - -Changes from V4.0.3 - - + Extra checks have been placed in vTaskPrioritySet() to avoid unnecessary - yields. - -Changed from V4.0.4 - - + Bug fix: The 'value' of the event list item is updated when the priority - of a task is changed. Previously only the priority of the TCB itself was - changed. - + When resuming a task a check is first made to see if the task is actually - suspended. - + vTaskPrioritySet() and vTaskResume() no longer use the event list item. - This has not been necessary since V4.0.1 when the xMissedYield handling - was added. - + Implement xTaskResumeFromISR(). - -Changes from V4.0.5 - - + Added utility functions and xOverflowCount variable to facilitate the - queue.c changes. - -Changes from V4.1.2 - - + Tasks that block on events with a timeout of portMAX_DELAY are now - blocked indefinitely if configINCLUDE_vTaskSuspend is defined. - Previously portMAX_DELAY was just the longest block time possible. - -Changes from V4.1.3 - - + Very small change made to xTaskCheckForTimeout() as a result of the - SafeRTOS testing. This corrects the case where the function can return an - invalid value - but only in an extremely unlikely scenario. - -Changes since V4.3.1: - - + Added xTaskGetSchedulerState() function. - + Added prvIsTaskSuspended() to take into account the Occurrence of - vTaskResume() or vTaskResumeFromISR() being called passing in the - handle of a task that appears in the Suspended list only because it - is blocked on an event without a timeout being specified. - + Updated xTaskCheckForTimeout() to take into account that tasks blocked - using the Suspended list should never time out. -*/ - -#include -#include -#include - -#include "FreeRTOS.h" -#include "task.h" - -/* - * Macro to define the amount of stack available to the idle task. - */ -#define tskIDLE_STACK_SIZE configMINIMAL_STACK_SIZE - - -/* - * Default a definitions for backwards compatibility with old - * portmacro.h files. - */ -#ifndef configMAX_TASK_NAME_LEN - #define configMAX_TASK_NAME_LEN 16 -#endif - -#ifndef configIDLE_SHOULD_YIELD - #define configIDLE_SHOULD_YIELD 1 -#endif - -#if configMAX_TASK_NAME_LEN < 1 - #undef configMAX_TASK_NAME_LEN - #define configMAX_TASK_NAME_LEN 1 -#endif - -#ifndef INCLUDE_xTaskResumeFromISR - #define INCLUDE_xTaskResumeFromISR 1 -#endif - -#ifndef INCLUDE_xTaskGetSchedulerState - #define INCLUDE_xTaskGetSchedulerState 0 -#endif - -/* - * Task control block. A task control block (TCB) is allocated to each task, - * and stores the context of the task. - */ -typedef struct tskTaskControlBlock -{ - volatile portSTACK_TYPE *pxTopOfStack; /*< Points to the location of the last item placed on the tasks stack. THIS MUST BE THE FIRST MEMBER OF THE STRUCT. */ - xListItem xGenericListItem; /*< List item used to place the TCB in ready and blocked queues. */ - xListItem xEventListItem; /*< List item used to place the TCB in event lists. */ - unsigned portBASE_TYPE uxPriority; /*< The priority of the task where 0 is the lowest priority. */ - portSTACK_TYPE *pxStack; /*< Points to the start of the stack. */ - signed portCHAR pcTaskName[ configMAX_TASK_NAME_LEN ];/*< Descriptive name given to the task when created. Facilitates debugging only. */ - - #if ( configUSE_TRACE_FACILITY == 1 ) - unsigned portBASE_TYPE uxTCBNumber; /*< This is used for tracing the scheduler and making debugging easier only. */ - #endif - - #if ( configUSE_MUTEXES == 1 ) - unsigned portBASE_TYPE uxBasePriority; - #endif - -} tskTCB; - -/*lint -e956 */ - -tskTCB * volatile pxCurrentTCB = NULL; - -/* Lists for ready and blocked tasks. --------------------*/ - -static xList pxReadyTasksLists[ configMAX_PRIORITIES ]; /*< Prioritised ready tasks. */ -static xList xDelayedTaskList1; /*< Delayed tasks. */ -static xList xDelayedTaskList2; /*< Delayed tasks (two lists are used - one for delays that have overflowed the current tick count. */ -static xList * volatile pxDelayedTaskList; /*< Points to the delayed task list currently being used. */ -static xList * volatile pxOverflowDelayedTaskList; /*< Points to the delayed task list currently being used to hold tasks that have overflowed the current tick count. */ -static xList xPendingReadyList; /*< Tasks that have been readied while the scheduler was suspended. They will be moved to the ready queue when the scheduler is resumed. */ - -#if ( INCLUDE_vTaskDelete == 1 ) - - static volatile xList xTasksWaitingTermination; /*< Tasks that have been deleted - but the their memory not yet freed. */ - static volatile unsigned portBASE_TYPE uxTasksDeleted = ( unsigned portBASE_TYPE ) 0; - -#endif - -#if ( INCLUDE_vTaskSuspend == 1 ) - - static xList xSuspendedTaskList; /*< Tasks that are currently suspended. */ - -#endif - -/* File private variables. --------------------------------*/ -static volatile unsigned portBASE_TYPE uxCurrentNumberOfTasks = ( unsigned portBASE_TYPE ) 0; -static volatile portTickType xTickCount = ( portTickType ) 0; -static unsigned portBASE_TYPE uxTopUsedPriority = tskIDLE_PRIORITY; -static volatile unsigned portBASE_TYPE uxTopReadyPriority = tskIDLE_PRIORITY; -static volatile signed portBASE_TYPE xSchedulerRunning = pdFALSE; -static volatile unsigned portBASE_TYPE uxSchedulerSuspended = ( unsigned portBASE_TYPE ) pdFALSE; -static volatile unsigned portBASE_TYPE uxMissedTicks = ( unsigned portBASE_TYPE ) 0; -static volatile portBASE_TYPE xMissedYield = ( portBASE_TYPE ) pdFALSE; -static volatile portBASE_TYPE xNumOfOverflows = ( portBASE_TYPE ) 0; -/* Debugging and trace facilities private variables and macros. ------------*/ - -/* - * The value used to fill the stack of a task when the task is created. This - * is used purely for checking the high water mark for tasks. - */ -#define tskSTACK_FILL_BYTE ( 0xa5 ) - -/* - * Macros used by vListTask to indicate which state a task is in. - */ -#define tskBLOCKED_CHAR ( ( signed portCHAR ) 'B' ) -#define tskREADY_CHAR ( ( signed portCHAR ) 'R' ) -#define tskDELETED_CHAR ( ( signed portCHAR ) 'D' ) -#define tskSUSPENDED_CHAR ( ( signed portCHAR ) 'S' ) - -/* - * Macros and private variables used by the trace facility. - */ -#if ( configUSE_TRACE_FACILITY == 1 ) - - #define tskSIZE_OF_EACH_TRACE_LINE ( ( unsigned portLONG ) ( sizeof( unsigned portLONG ) + sizeof( unsigned portLONG ) ) ) - static volatile signed portCHAR * volatile pcTraceBuffer; - static signed portCHAR *pcTraceBufferStart; - static signed portCHAR *pcTraceBufferEnd; - static signed portBASE_TYPE xTracing = pdFALSE; - -#endif - -/* - * Macro that writes a trace of scheduler activity to a buffer. This trace - * shows which task is running when and is very useful as a debugging tool. - * As this macro is called each context switch it is a good idea to undefine - * it if not using the facility. - */ -#if ( configUSE_TRACE_FACILITY == 1 ) - - #define vWriteTraceToBuffer() \ - { \ - if( xTracing ) \ - { \ - static unsigned portBASE_TYPE uxPreviousTask = 255; \ - \ - if( uxPreviousTask != pxCurrentTCB->uxTCBNumber ) \ - { \ - if( ( pcTraceBuffer + tskSIZE_OF_EACH_TRACE_LINE ) < pcTraceBufferEnd ) \ - { \ - uxPreviousTask = pxCurrentTCB->uxTCBNumber; \ - *( unsigned portLONG * ) pcTraceBuffer = ( unsigned portLONG ) xTickCount; \ - pcTraceBuffer += sizeof( unsigned portLONG ); \ - *( unsigned portLONG * ) pcTraceBuffer = ( unsigned portLONG ) uxPreviousTask; \ - pcTraceBuffer += sizeof( unsigned portLONG ); \ - } \ - else \ - { \ - xTracing = pdFALSE; \ - } \ - } \ - } \ - } - -#else - - #define vWriteTraceToBuffer() - -#endif - - -/* - * Place the task represented by pxTCB into the appropriate ready queue for - * the task. It is inserted at the end of the list. One quirk of this is - * that if the task being inserted is at the same priority as the currently - * executing task, then it will only be rescheduled after the currently - * executing task has been rescheduled. - */ -#define prvAddTaskToReadyQueue( pxTCB ) \ -{ \ - if( pxTCB->uxPriority > uxTopReadyPriority ) \ - { \ - uxTopReadyPriority = pxTCB->uxPriority; \ - } \ - vListInsertEnd( ( xList * ) &( pxReadyTasksLists[ pxTCB->uxPriority ] ), &( pxTCB->xGenericListItem ) ); \ -} - -/* - * Macro that looks at the list of tasks that are currently delayed to see if - * any require waking. - * - * Tasks are stored in the queue in the order of their wake time - meaning - * once one tasks has been found whose timer has not expired we need not look - * any further down the list. - */ -#define prvCheckDelayedTasks() \ -{ \ -register tskTCB *pxTCB; \ - \ - while( ( pxTCB = ( tskTCB * ) listGET_OWNER_OF_HEAD_ENTRY( pxDelayedTaskList ) ) != NULL ) \ - { \ - if( xTickCount < listGET_LIST_ITEM_VALUE( &( pxTCB->xGenericListItem ) ) ) \ - { \ - break; \ - } \ - vListRemove( &( pxTCB->xGenericListItem ) ); \ - /* Is the task waiting on an event also? */ \ - if( pxTCB->xEventListItem.pvContainer ) \ - { \ - vListRemove( &( pxTCB->xEventListItem ) ); \ - } \ - prvAddTaskToReadyQueue( pxTCB ); \ - } \ -} - -/* - * Several functions take an xTaskHandle parameter that can optionally be NULL, - * where NULL is used to indicate that the handle of the currently executing - * task should be used in place of the parameter. This macro simply checks to - * see if the parameter is NULL and returns a pointer to the appropriate TCB. - */ -#define prvGetTCBFromHandle( pxHandle ) ( ( pxHandle == NULL ) ? ( tskTCB * ) pxCurrentTCB : ( tskTCB * ) pxHandle ) - - -/* File private functions. --------------------------------*/ - -/* - * Utility to ready a TCB for a given task. Mainly just copies the parameters - * into the TCB structure. - */ -static void prvInitialiseTCBVariables( tskTCB *pxTCB, const signed portCHAR * const pcName, unsigned portBASE_TYPE uxPriority ); - -/* - * Utility to ready all the lists used by the scheduler. This is called - * automatically upon the creation of the first task. - */ -static void prvInitialiseTaskLists( void ); - -/* - * The idle task, which as all tasks is implemented as a never ending loop. - * The idle task is automatically created and added to the ready lists upon - * creation of the first user task. - * - * The portTASK_FUNCTION_PROTO() macro is used to allow port/compiler specific - * language extensions. The equivalent prototype for this function is: - * - * void prvIdleTask( void *pvParameters ); - * - */ -static portTASK_FUNCTION_PROTO( prvIdleTask, pvParameters ); - -/* - * Utility to free all memory allocated by the scheduler to hold a TCB, - * including the stack pointed to by the TCB. - * - * This does not free memory allocated by the task itself (i.e. memory - * allocated by calls to pvPortMalloc from within the tasks application code). - */ -#if ( ( INCLUDE_vTaskDelete == 1 ) || ( INCLUDE_vTaskCleanUpResources == 1 ) ) - static void prvDeleteTCB( tskTCB *pxTCB ); -#endif - -/* - * Used only by the idle task. This checks to see if anything has been placed - * in the list of tasks waiting to be deleted. If so the task is cleaned up - * and its TCB deleted. - */ -static void prvCheckTasksWaitingTermination( void ); - -/* - * Allocates memory from the heap for a TCB and associated stack. Checks the - * allocation was successful. - */ -static tskTCB *prvAllocateTCBAndStack( unsigned portSHORT usStackDepth ); - -/* - * Called from vTaskList. vListTasks details all the tasks currently under - * control of the scheduler. The tasks may be in one of a number of lists. - * prvListTaskWithinSingleList accepts a list and details the tasks from - * within just that list. - * - * THIS FUNCTION IS INTENDED FOR DEBUGGING ONLY, AND SHOULD NOT BE CALLED FROM - * NORMAL APPLICATION CODE. - */ -#if ( configUSE_TRACE_FACILITY == 1 ) - - static void prvListTaskWithinSingleList( const signed portCHAR *pcWriteBuffer, xList *pxList, signed portCHAR cStatus ); - -#endif - -/* - * When a task is created, the stack of the task is filled with a known value. - * This function determines the 'high water mark' of the task stack by - * determining how much of the stack remains at the original preset value. - */ -#if ( configUSE_TRACE_FACILITY == 1 ) - - unsigned portSHORT usTaskCheckFreeStackSpace( const unsigned portCHAR * pucStackByte ); - -#endif - -/* - * Checks that a task being resumed (unsuspended) is actually in the Suspended - * state. - */ -#if ( INCLUDE_vTaskSuspend == 1 ) - - static portBASE_TYPE prvIsTaskSuspended( const tskTCB * const pxTCB ); - -#endif - -/*lint +e956 */ - - - - - -/*----------------------------------------------------------- - * TASK CREATION API documented in task.h - *----------------------------------------------------------*/ - -signed portBASE_TYPE xTaskCreate( pdTASK_CODE pvTaskCode, const signed portCHAR * const pcName, unsigned portSHORT usStackDepth, void *pvParameters, unsigned portBASE_TYPE uxPriority, xTaskHandle *pxCreatedTask ) -{ -signed portBASE_TYPE xReturn; -tskTCB * pxNewTCB; -#if ( configUSE_TRACE_FACILITY == 1 ) - static unsigned portBASE_TYPE uxTaskNumber = 0; /*lint !e956 Static is deliberate - this is guarded before use. */ -#endif - - /* Allocate the memory required by the TCB and stack for the new task. - checking that the allocation was successful. */ - pxNewTCB = prvAllocateTCBAndStack( usStackDepth ); - - if( pxNewTCB != NULL ) - { - portSTACK_TYPE *pxTopOfStack; - - /* Setup the newly allocated TCB with the initial state of the task. */ - prvInitialiseTCBVariables( pxNewTCB, pcName, uxPriority ); - - /* Calculate the top of stack address. This depends on whether the - stack grows from high memory to low (as per the 80x86) or visa versa. - portSTACK_GROWTH is used to make the result positive or negative as - required by the port. */ - #if portSTACK_GROWTH < 0 - { - pxTopOfStack = pxNewTCB->pxStack + ( usStackDepth - 1 ); - } - #else - { - pxTopOfStack = pxNewTCB->pxStack; - } - #endif - - /* Initialize the TCB stack to look as if the task was already running, - but had been interrupted by the scheduler. The return address is set - to the start of the task function. Once the stack has been initialised - the top of stack variable is updated. */ - pxNewTCB->pxTopOfStack = pxPortInitialiseStack( pxTopOfStack, pvTaskCode, pvParameters ); - - /* We are going to manipulate the task queues to add this task to a - ready list, so must make sure no interrupts occur. */ - portENTER_CRITICAL(); - { - uxCurrentNumberOfTasks++; - if( uxCurrentNumberOfTasks == ( unsigned portBASE_TYPE ) 1 ) - { - /* As this is the first task it must also be the current task. */ - pxCurrentTCB = pxNewTCB; - - /* This is the first task to be created so do the preliminary - initialisation required. We will not recover if this call - fails, but we will report the failure. */ - prvInitialiseTaskLists(); - } - else - { - /* If the scheduler is not already running, make this task the - current task if it is the highest priority task to be created - so far. */ - if( xSchedulerRunning == pdFALSE ) - { - if( pxCurrentTCB->uxPriority <= uxPriority ) - { - pxCurrentTCB = pxNewTCB; - } - } - } - - /* Remember the top priority to make context switching faster. Use - the priority in pxNewTCB as this has been capped to a valid value. */ - if( pxNewTCB->uxPriority > uxTopUsedPriority ) - { - uxTopUsedPriority = pxNewTCB->uxPriority; - } - - #if ( configUSE_TRACE_FACILITY == 1 ) - { - /* Add a counter into the TCB for tracing only. */ - pxNewTCB->uxTCBNumber = uxTaskNumber; - uxTaskNumber++; - } - #endif - - prvAddTaskToReadyQueue( pxNewTCB ); - - xReturn = pdPASS; - } - portEXIT_CRITICAL(); - } - else - { - xReturn = errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY; - } - - if( xReturn == pdPASS ) - { - if( ( void * ) pxCreatedTask != NULL ) - { - /* Pass the TCB out - in an anonymous way. The calling function/ - task can use this as a handle to delete the task later if - required.*/ - *pxCreatedTask = ( xTaskHandle ) pxNewTCB; - } - - if( xSchedulerRunning != pdFALSE ) - { - /* If the created task is of a higher priority than the current task - then it should run now. */ - if( pxCurrentTCB->uxPriority < uxPriority ) - { - taskYIELD(); - } - } - } - - return xReturn; -} -/*-----------------------------------------------------------*/ - -#if ( INCLUDE_vTaskDelete == 1 ) - - void vTaskDelete( xTaskHandle pxTaskToDelete ) - { - tskTCB *pxTCB; - - taskENTER_CRITICAL(); - { - /* Ensure a yield is performed if the current task is being - deleted. */ - if( pxTaskToDelete == pxCurrentTCB ) - { - pxTaskToDelete = NULL; - } - - /* If null is passed in here then we are deleting ourselves. */ - pxTCB = prvGetTCBFromHandle( pxTaskToDelete ); - - /* Remove task from the ready list and place in the termination list. - This will stop the task from be scheduled. The idle task will check - the termination list and free up any memory allocated by the - scheduler for the TCB and stack. */ - vListRemove( &( pxTCB->xGenericListItem ) ); - - /* Is the task waiting on an event also? */ - if( pxTCB->xEventListItem.pvContainer ) - { - vListRemove( &( pxTCB->xEventListItem ) ); - } - - vListInsertEnd( ( xList * ) &xTasksWaitingTermination, &( pxTCB->xGenericListItem ) ); - - /* Increment the ucTasksDeleted variable so the idle task knows - there is a task that has been deleted and that it should therefore - check the xTasksWaitingTermination list. */ - ++uxTasksDeleted; - } - taskEXIT_CRITICAL(); - - /* Force a reschedule if we have just deleted the current task. */ - if( xSchedulerRunning != pdFALSE ) - { - if( ( void * ) pxTaskToDelete == NULL ) - { - taskYIELD(); - } - } - } - -#endif - - - - - - -/*----------------------------------------------------------- - * TASK CONTROL API documented in task.h - *----------------------------------------------------------*/ - -#if ( INCLUDE_vTaskDelayUntil == 1 ) - - void vTaskDelayUntil( portTickType * const pxPreviousWakeTime, portTickType xTimeIncrement ) - { - portTickType xTimeToWake; - portBASE_TYPE xAlreadyYielded, xShouldDelay = pdFALSE; - - vTaskSuspendAll(); - { - /* Generate the tick time at which the task wants to wake. */ - xTimeToWake = *pxPreviousWakeTime + xTimeIncrement; - - if( xTickCount < *pxPreviousWakeTime ) - { - /* The tick count has overflowed since this function was - lasted called. In this case the only time we should ever - actually delay is if the wake time has also overflowed, - and the wake time is greater than the tick time. When this - is the case it is as if neither time had overflowed. */ - if( ( xTimeToWake < *pxPreviousWakeTime ) && ( xTimeToWake > xTickCount ) ) - { - xShouldDelay = pdTRUE; - } - } - else - { - /* The tick time has not overflowed. In this case we will - delay if either the wake time has overflowed, and/or the - tick time is less than the wake time. */ - if( ( xTimeToWake < *pxPreviousWakeTime ) || ( xTimeToWake > xTickCount ) ) - { - xShouldDelay = pdTRUE; - } - } - - /* Update the wake time ready for the next call. */ - *pxPreviousWakeTime = xTimeToWake; - - if( xShouldDelay ) - { - /* We must remove ourselves from the ready list before adding - ourselves to the blocked list as the same list item is used for - both lists. */ - vListRemove( ( xListItem * ) &( pxCurrentTCB->xGenericListItem ) ); - - /* The list item will be inserted in wake time order. */ - listSET_LIST_ITEM_VALUE( &( pxCurrentTCB->xGenericListItem ), xTimeToWake ); - - if( xTimeToWake < xTickCount ) - { - /* Wake time has overflowed. Place this item in the - overflow list. */ - vListInsert( ( xList * ) pxOverflowDelayedTaskList, ( xListItem * ) &( pxCurrentTCB->xGenericListItem ) ); - } - else - { - /* The wake time has not overflowed, so we can use the - current block list. */ - vListInsert( ( xList * ) pxDelayedTaskList, ( xListItem * ) &( pxCurrentTCB->xGenericListItem ) ); - } - } - } - xAlreadyYielded = xTaskResumeAll(); - - /* Force a reschedule if xTaskResumeAll has not already done so, we may - have put ourselves to sleep. */ - if( !xAlreadyYielded ) - { - taskYIELD(); - } - } - -#endif -/*-----------------------------------------------------------*/ - -#if ( INCLUDE_vTaskDelay == 1 ) - - void vTaskDelay( portTickType xTicksToDelay ) - { - portTickType xTimeToWake; - signed portBASE_TYPE xAlreadyYielded = pdFALSE; - - /* A delay time of zero just forces a reschedule. */ - if( xTicksToDelay > ( portTickType ) 0 ) - { - vTaskSuspendAll(); - { - /* A task that is removed from the event list while the - scheduler is suspended will not get placed in the ready - list or removed from the blocked list until the scheduler - is resumed. - - This task cannot be in an event list as it is the currently - executing task. */ - - /* Calculate the time to wake - this may overflow but this is - not a problem. */ - xTimeToWake = xTickCount + xTicksToDelay; - - /* We must remove ourselves from the ready list before adding - ourselves to the blocked list as the same list item is used for - both lists. */ - vListRemove( ( xListItem * ) &( pxCurrentTCB->xGenericListItem ) ); - - /* The list item will be inserted in wake time order. */ - listSET_LIST_ITEM_VALUE( &( pxCurrentTCB->xGenericListItem ), xTimeToWake ); - - if( xTimeToWake < xTickCount ) - { - /* Wake time has overflowed. Place this item in the - overflow list. */ - vListInsert( ( xList * ) pxOverflowDelayedTaskList, ( xListItem * ) &( pxCurrentTCB->xGenericListItem ) ); - } - else - { - /* The wake time has not overflowed, so we can use the - current block list. */ - vListInsert( ( xList * ) pxDelayedTaskList, ( xListItem * ) &( pxCurrentTCB->xGenericListItem ) ); - } - } - xAlreadyYielded = xTaskResumeAll(); - } - - /* Force a reschedule if xTaskResumeAll has not already done so, we may - have put ourselves to sleep. */ - if( !xAlreadyYielded ) - { - taskYIELD(); - } - } - -#endif -/*-----------------------------------------------------------*/ - -#if ( INCLUDE_uxTaskPriorityGet == 1 ) - - unsigned portBASE_TYPE uxTaskPriorityGet( xTaskHandle pxTask ) - { - tskTCB *pxTCB; - unsigned portBASE_TYPE uxReturn; - - taskENTER_CRITICAL(); - { - /* If null is passed in here then we are changing the - priority of the calling function. */ - pxTCB = prvGetTCBFromHandle( pxTask ); - uxReturn = pxTCB->uxPriority; - } - taskEXIT_CRITICAL(); - - return uxReturn; - } - -#endif -/*-----------------------------------------------------------*/ - -#if ( INCLUDE_vTaskPrioritySet == 1 ) - - void vTaskPrioritySet( xTaskHandle pxTask, unsigned portBASE_TYPE uxNewPriority ) - { - tskTCB *pxTCB; - unsigned portBASE_TYPE uxCurrentPriority, xYieldRequired = pdFALSE; - - /* Ensure the new priority is valid. */ - if( uxNewPriority >= configMAX_PRIORITIES ) - { - uxNewPriority = configMAX_PRIORITIES - 1; - } - - taskENTER_CRITICAL(); - { - /* If null is passed in here then we are changing the - priority of the calling function. */ - pxTCB = prvGetTCBFromHandle( pxTask ); - - #if ( configUSE_MUTEXES == 1 ) - { - uxCurrentPriority = pxTCB->uxBasePriority; - } - #else - { - uxCurrentPriority = pxTCB->uxPriority; - } - #endif - - if( uxCurrentPriority != uxNewPriority ) - { - /* The priority change may have readied a task of higher - priority than the calling task. */ - if( uxNewPriority > uxCurrentPriority ) - { - if( pxTask != NULL ) - { - /* The priority of another task is being raised. If we - were raising the priority of the currently running task - there would be no need to switch as it must have already - been the highest priority task. */ - xYieldRequired = pdTRUE; - } - } - else if( pxTask == NULL ) - { - /* Setting our own priority down means there may now be another - task of higher priority that is ready to execute. */ - xYieldRequired = pdTRUE; - } - - - - #if ( configUSE_MUTEXES == 1 ) - { - /* Only change the priority being used if the task is not - currently using an inherited priority. */ - if( pxTCB->uxBasePriority == pxTCB->uxPriority ) - { - pxTCB->uxPriority = uxNewPriority; - } - - /* The base priority gets set whatever. */ - pxTCB->uxBasePriority = uxNewPriority; - } - #else - { - pxTCB->uxPriority = uxNewPriority; - } - #endif - - listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), ( configMAX_PRIORITIES - ( portTickType ) uxNewPriority ) ); - - /* If the task is in the blocked or suspended list we need do - nothing more than change it's priority variable. However, if - the task is in a ready list it needs to be removed and placed - in the queue appropriate to its new priority. */ - if( listIS_CONTAINED_WITHIN( &( pxReadyTasksLists[ uxCurrentPriority ] ), &( pxTCB->xGenericListItem ) ) ) - { - /* The task is currently in its ready list - remove before adding - it to it's new ready list. As we are in a critical section we - can do this even if the scheduler is suspended. */ - vListRemove( &( pxTCB->xGenericListItem ) ); - prvAddTaskToReadyQueue( pxTCB ); - } - - if( xYieldRequired == pdTRUE ) - { - taskYIELD(); - } - } - } - taskEXIT_CRITICAL(); - } - -#endif -/*-----------------------------------------------------------*/ - -#if ( INCLUDE_vTaskSuspend == 1 ) - - void vTaskSuspend( xTaskHandle pxTaskToSuspend ) - { - tskTCB *pxTCB; - - taskENTER_CRITICAL(); - { - /* Ensure a yield is performed if the current task is being - suspended. */ - if( pxTaskToSuspend == pxCurrentTCB ) - { - pxTaskToSuspend = NULL; - } - - /* If null is passed in here then we are suspending ourselves. */ - pxTCB = prvGetTCBFromHandle( pxTaskToSuspend ); - - /* Remove task from the ready/delayed list and place in the suspended list. */ - vListRemove( &( pxTCB->xGenericListItem ) ); - - /* Is the task waiting on an event also? */ - if( pxTCB->xEventListItem.pvContainer ) - { - vListRemove( &( pxTCB->xEventListItem ) ); - } - - vListInsertEnd( ( xList * ) &xSuspendedTaskList, &( pxTCB->xGenericListItem ) ); - } - taskEXIT_CRITICAL(); - - /* We may have just suspended the current task. */ - if( ( void * ) pxTaskToSuspend == NULL ) - { - taskYIELD(); - } - } - -#endif -/*-----------------------------------------------------------*/ - -#if ( INCLUDE_vTaskSuspend == 1 ) - - static portBASE_TYPE prvIsTaskSuspended( const tskTCB * const pxTCB ) - { - portBASE_TYPE xReturn = pdFALSE; - - /* Is the task we are attempting to resume actually in the - suspended list? */ - if( listIS_CONTAINED_WITHIN( &xSuspendedTaskList, &( pxTCB->xGenericListItem ) ) != pdFALSE ) - { - /* Has the task already been resumed from within an ISR? */ - if( listIS_CONTAINED_WITHIN( &xPendingReadyList, &( pxTCB->xEventListItem ) ) != pdTRUE ) - { - /* Is it in the suspended list because it is in the - Suspended state? It is possible to be in the suspended - list because it is blocked on a task with no timeout - specified. */ - if( listIS_CONTAINED_WITHIN( NULL, &( pxTCB->xEventListItem ) ) == pdTRUE ) - { - xReturn = pdTRUE; - } - } - } - - return xReturn; - } - -#endif -/*-----------------------------------------------------------*/ - -#if ( INCLUDE_vTaskSuspend == 1 ) - - void vTaskResume( xTaskHandle pxTaskToResume ) - { - tskTCB *pxTCB; - - /* Remove the task from whichever list it is currently in, and place - it in the ready list. */ - pxTCB = ( tskTCB * ) pxTaskToResume; - - /* The parameter cannot be NULL as it is impossible to resume the - currently executing task. */ - if( pxTCB != NULL ) - { - taskENTER_CRITICAL(); - { - if( prvIsTaskSuspended( pxTCB ) == pdTRUE ) - { - /* As we are in a critical section we can access the ready - lists even if the scheduler is suspended. */ - vListRemove( &( pxTCB->xGenericListItem ) ); - prvAddTaskToReadyQueue( pxTCB ); - - /* We may have just resumed a higher priority task. */ - if( pxTCB->uxPriority >= pxCurrentTCB->uxPriority ) - { - /* This yield may not cause the task just resumed to run, but - will leave the lists in the correct state for the next yield. */ - taskYIELD(); - } - } - } - taskEXIT_CRITICAL(); - } - } - -#endif - -/*-----------------------------------------------------------*/ - -#if ( ( INCLUDE_xTaskResumeFromISR == 1 ) && ( INCLUDE_vTaskSuspend == 1 ) ) - - portBASE_TYPE xTaskResumeFromISR( xTaskHandle pxTaskToResume ) - { - portBASE_TYPE xYieldRequired = pdFALSE; - tskTCB *pxTCB; - - pxTCB = ( tskTCB * ) pxTaskToResume; - - if( prvIsTaskSuspended( pxTCB ) == pdTRUE ) - { - if( uxSchedulerSuspended == ( unsigned portBASE_TYPE ) pdFALSE ) - { - xYieldRequired = ( pxTCB->uxPriority >= pxCurrentTCB->uxPriority ); - vListRemove( &( pxTCB->xGenericListItem ) ); - prvAddTaskToReadyQueue( pxTCB ); - } - else - { - /* We cannot access the delayed or ready lists, so will hold this - task pending until the scheduler is resumed, at which point a - yield will be performed if necessary. */ - vListInsertEnd( ( xList * ) &( xPendingReadyList ), &( pxTCB->xEventListItem ) ); - } - } - - return xYieldRequired; - } - -#endif - - - - -/*----------------------------------------------------------- - * PUBLIC SCHEDULER CONTROL documented in task.h - *----------------------------------------------------------*/ - - -void vTaskStartScheduler( void ) -{ -portBASE_TYPE xReturn; - - /* Add the idle task at the lowest priority. */ - xReturn = xTaskCreate( prvIdleTask, ( signed portCHAR * ) "IDLE", tskIDLE_STACK_SIZE, ( void * ) NULL, tskIDLE_PRIORITY, ( xTaskHandle * ) NULL ); - - if( xReturn == pdPASS ) - { - /* Interrupts are turned off here, to ensure a tick does not occur - before or during the call to xPortStartScheduler(). The stacks of - the created tasks contain a status word with interrupts switched on - so interrupts will automatically get re-enabled when the first task - starts to run. - - STEPPING THROUGH HERE USING A DEBUGGER CAN CAUSE BIG PROBLEMS IF THE - DEBUGGER ALLOWS INTERRUPTS TO BE PROCESSED. */ - portDISABLE_INTERRUPTS(); - - xSchedulerRunning = pdTRUE; - xTickCount = ( portTickType ) 0; - - /* Setting up the timer tick is hardware specific and thus in the - portable interface. */ - if( xPortStartScheduler() ) - { - /* Should not reach here as if the scheduler is running the - function will not return. */ - } - else - { - /* Should only reach here if a task calls xTaskEndScheduler(). */ - } - } -} -/*-----------------------------------------------------------*/ - -void vTaskEndScheduler( void ) -{ - /* Stop the scheduler interrupts and call the portable scheduler end - routine so the original ISRs can be restored if necessary. The port - layer must ensure interrupts enable bit is left in the correct state. */ - portDISABLE_INTERRUPTS(); - xSchedulerRunning = pdFALSE; - vPortEndScheduler(); -} -/*----------------------------------------------------------*/ - -void vTaskSuspendAll( void ) -{ - portENTER_CRITICAL(); - ++uxSchedulerSuspended; - portEXIT_CRITICAL(); -} -/*----------------------------------------------------------*/ - -signed portBASE_TYPE xTaskResumeAll( void ) -{ -register tskTCB *pxTCB; -signed portBASE_TYPE xAlreadyYielded = pdFALSE; - - /* It is possible that an ISR caused a task to be removed from an event - list while the scheduler was suspended. If this was the case then the - removed task will have been added to the xPendingReadyList. Once the - scheduler has been resumed it is safe to move all the pending ready - tasks from this list into their appropriate ready list. */ - portENTER_CRITICAL(); - { - --uxSchedulerSuspended; - - if( uxSchedulerSuspended == ( unsigned portBASE_TYPE ) pdFALSE ) - { - if( uxCurrentNumberOfTasks > ( unsigned portBASE_TYPE ) 0 ) - { - portBASE_TYPE xYieldRequired = pdFALSE; - - /* Move any readied tasks from the pending list into the - appropriate ready list. */ - while( ( pxTCB = ( tskTCB * ) listGET_OWNER_OF_HEAD_ENTRY( ( ( xList * ) &xPendingReadyList ) ) ) != NULL ) - { - vListRemove( &( pxTCB->xEventListItem ) ); - vListRemove( &( pxTCB->xGenericListItem ) ); - prvAddTaskToReadyQueue( pxTCB ); - - /* If we have moved a task that has a priority higher than - the current task then we should yield. */ - if( pxTCB->uxPriority >= pxCurrentTCB->uxPriority ) - { - xYieldRequired = pdTRUE; - } - } - - /* If any ticks occurred while the scheduler was suspended then - they should be processed now. This ensures the tick count does not - slip, and that any delayed tasks are resumed at the correct time. */ - if( uxMissedTicks > ( unsigned portBASE_TYPE ) 0 ) - { - while( uxMissedTicks > ( unsigned portBASE_TYPE ) 0 ) - { - vTaskIncrementTick(); - --uxMissedTicks; - } - - /* As we have processed some ticks it is appropriate to yield - to ensure the highest priority task that is ready to run is - the task actually running. */ - #if configUSE_PREEMPTION == 1 - { - xYieldRequired = pdTRUE; - } - #endif - } - - if( ( xYieldRequired == pdTRUE ) || ( xMissedYield == pdTRUE ) ) - { - xAlreadyYielded = pdTRUE; - xMissedYield = pdFALSE; - taskYIELD(); - } - } - } - } - portEXIT_CRITICAL(); - - return xAlreadyYielded; -} - - - - - - -/*----------------------------------------------------------- - * PUBLIC TASK UTILITIES documented in task.h - *----------------------------------------------------------*/ - - - -portTickType xTaskGetTickCount( void ) -{ -portTickType xTicks; - - /* Critical section required if running on a 16 bit processor. */ - taskENTER_CRITICAL(); - { - xTicks = xTickCount; - } - taskEXIT_CRITICAL(); - - return xTicks; -} -/*-----------------------------------------------------------*/ - -unsigned portBASE_TYPE uxTaskGetNumberOfTasks( void ) -{ -unsigned portBASE_TYPE uxNumberOfTasks; - - taskENTER_CRITICAL(); - uxNumberOfTasks = uxCurrentNumberOfTasks; - taskEXIT_CRITICAL(); - - return uxNumberOfTasks; -} -/*-----------------------------------------------------------*/ - -#if ( ( configUSE_TRACE_FACILITY == 1 ) && ( INCLUDE_vTaskDelete == 1 ) && ( INCLUDE_vTaskSuspend == 1 ) ) - - void vTaskList( signed portCHAR *pcWriteBuffer ) - { - unsigned portBASE_TYPE uxQueue; - - /* This is a VERY costly function that should be used for debug only. - It leaves interrupts disabled for a LONG time. */ - - vTaskSuspendAll(); - { - /* Run through all the lists that could potentially contain a TCB and - report the task name, state and stack high water mark. */ - - pcWriteBuffer[ 0 ] = ( signed portCHAR ) 0x00; - strcat( ( portCHAR * ) pcWriteBuffer, ( const portCHAR * ) "\r\n" ); - - uxQueue = uxTopUsedPriority + 1; - - do - { - uxQueue--; - - if( !listLIST_IS_EMPTY( &( pxReadyTasksLists[ uxQueue ] ) ) ) - { - prvListTaskWithinSingleList( pcWriteBuffer, ( xList * ) &( pxReadyTasksLists[ uxQueue ] ), tskREADY_CHAR ); - } - }while( uxQueue > ( unsigned portSHORT ) tskIDLE_PRIORITY ); - - if( !listLIST_IS_EMPTY( pxDelayedTaskList ) ) - { - prvListTaskWithinSingleList( pcWriteBuffer, ( xList * ) pxDelayedTaskList, tskBLOCKED_CHAR ); - } - - if( !listLIST_IS_EMPTY( pxOverflowDelayedTaskList ) ) - { - prvListTaskWithinSingleList( pcWriteBuffer, ( xList * ) pxOverflowDelayedTaskList, tskBLOCKED_CHAR ); - } - - if( !listLIST_IS_EMPTY( &xTasksWaitingTermination ) ) - { - prvListTaskWithinSingleList( pcWriteBuffer, ( xList * ) &xTasksWaitingTermination, tskDELETED_CHAR ); - } - - if( !listLIST_IS_EMPTY( &xSuspendedTaskList ) ) - { - prvListTaskWithinSingleList( pcWriteBuffer, ( xList * ) &xSuspendedTaskList, tskSUSPENDED_CHAR ); - } - } - xTaskResumeAll(); - } - -#endif -/*----------------------------------------------------------*/ - -#if ( configUSE_TRACE_FACILITY == 1 ) - - void vTaskStartTrace( signed portCHAR * pcBuffer, unsigned portLONG ulBufferSize ) - { - portENTER_CRITICAL(); - { - pcTraceBuffer = ( signed portCHAR * )pcBuffer; - pcTraceBufferStart = pcBuffer; - pcTraceBufferEnd = pcBuffer + ( ulBufferSize - tskSIZE_OF_EACH_TRACE_LINE ); - xTracing = pdTRUE; - } - portEXIT_CRITICAL(); - } - -#endif -/*----------------------------------------------------------*/ - -#if ( configUSE_TRACE_FACILITY == 1 ) - - unsigned portLONG ulTaskEndTrace( void ) - { - unsigned portLONG ulBufferLength; - - portENTER_CRITICAL(); - xTracing = pdFALSE; - portEXIT_CRITICAL(); - - ulBufferLength = ( unsigned portLONG ) ( pcTraceBuffer - pcTraceBufferStart ); - - return ulBufferLength; - } - -#endif - - - -/*----------------------------------------------------------- - * SCHEDULER INTERNALS AVAILABLE FOR PORTING PURPOSES - * documented in task.h - *----------------------------------------------------------*/ - - -inline void vTaskIncrementTick( void ) -{ - /* Called by the portable layer each time a tick interrupt occurs. - Increments the tick then checks to see if the new tick value will cause any - tasks to be unblocked. */ - if( uxSchedulerSuspended == ( unsigned portBASE_TYPE ) pdFALSE ) - { - ++xTickCount; - if( xTickCount == ( portTickType ) 0 ) - { - xList *pxTemp; - - /* Tick count has overflowed so we need to swap the delay lists. - If there are any items in pxDelayedTaskList here then there is - an error! */ - pxTemp = pxDelayedTaskList; - pxDelayedTaskList = pxOverflowDelayedTaskList; - pxOverflowDelayedTaskList = pxTemp; - xNumOfOverflows++; - } - - /* See if this tick has made a timeout expire. */ - prvCheckDelayedTasks(); - } - else - { - ++uxMissedTicks; - - /* The tick hook gets called at regular intervals, even if the - scheduler is locked. */ - #if ( configUSE_TICK_HOOK == 1 ) - { - extern void vApplicationTickHook( void ); - - vApplicationTickHook(); - } - #endif - } - - #if ( configUSE_TICK_HOOK == 1 ) - { - extern void vApplicationTickHook( void ); - - /* Guard against the tick hook being called when the missed tick - count is being unwound (when the scheduler is being unlocked. */ - if( uxMissedTicks == 0 ) - { - vApplicationTickHook(); - } - } - #endif -} -/*-----------------------------------------------------------*/ - -#if ( ( INCLUDE_vTaskCleanUpResources == 1 ) && ( INCLUDE_vTaskSuspend == 1 ) ) - - void vTaskCleanUpResources( void ) - { - unsigned portSHORT usQueue; - volatile tskTCB *pxTCB; - - usQueue = ( unsigned portSHORT ) uxTopUsedPriority + ( unsigned portSHORT ) 1; - - /* Remove any TCB's from the ready queues. */ - do - { - usQueue--; - - while( !listLIST_IS_EMPTY( &( pxReadyTasksLists[ usQueue ] ) ) ) - { - listGET_OWNER_OF_NEXT_ENTRY( pxTCB, &( pxReadyTasksLists[ usQueue ] ) ); - vListRemove( ( xListItem * ) &( pxTCB->xGenericListItem ) ); - - prvDeleteTCB( ( tskTCB * ) pxTCB ); - } - }while( usQueue > ( unsigned portSHORT ) tskIDLE_PRIORITY ); - - /* Remove any TCB's from the delayed queue. */ - while( !listLIST_IS_EMPTY( &xDelayedTaskList1 ) ) - { - listGET_OWNER_OF_NEXT_ENTRY( pxTCB, &xDelayedTaskList1 ); - vListRemove( ( xListItem * ) &( pxTCB->xGenericListItem ) ); - - prvDeleteTCB( ( tskTCB * ) pxTCB ); - } - - /* Remove any TCB's from the overflow delayed queue. */ - while( !listLIST_IS_EMPTY( &xDelayedTaskList2 ) ) - { - listGET_OWNER_OF_NEXT_ENTRY( pxTCB, &xDelayedTaskList2 ); - vListRemove( ( xListItem * ) &( pxTCB->xGenericListItem ) ); - - prvDeleteTCB( ( tskTCB * ) pxTCB ); - } - - while( !listLIST_IS_EMPTY( &xSuspendedTaskList ) ) - { - listGET_OWNER_OF_NEXT_ENTRY( pxTCB, &xSuspendedTaskList ); - vListRemove( ( xListItem * ) &( pxTCB->xGenericListItem ) ); - - prvDeleteTCB( ( tskTCB * ) pxTCB ); - } - } - -#endif -/*-----------------------------------------------------------*/ - -void vTaskSwitchContext( void ) -{ - if( uxSchedulerSuspended != ( unsigned portBASE_TYPE ) pdFALSE ) - { - /* The scheduler is currently suspended - do not allow a context - switch. */ - xMissedYield = pdTRUE; - return; - } - - /* Find the highest priority queue that contains ready tasks. */ - while( listLIST_IS_EMPTY( &( pxReadyTasksLists[ uxTopReadyPriority ] ) ) ) - { - --uxTopReadyPriority; - } - - /* listGET_OWNER_OF_NEXT_ENTRY walks through the list, so the tasks of the - same priority get an equal share of the processor time. */ - listGET_OWNER_OF_NEXT_ENTRY( pxCurrentTCB, &( pxReadyTasksLists[ uxTopReadyPriority ] ) ); - vWriteTraceToBuffer(); -} -/*-----------------------------------------------------------*/ - -void vTaskPlaceOnEventList( const xList * const pxEventList, portTickType xTicksToWait ) -{ -portTickType xTimeToWake; - - /* THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED OR THE - SCHEDULER SUSPENDED. */ - - /* Place the event list item of the TCB in the appropriate event list. - This is placed in the list in priority order so the highest priority task - is the first to be woken by the event. */ - vListInsert( ( xList * ) pxEventList, ( xListItem * ) &( pxCurrentTCB->xEventListItem ) ); - - /* We must remove ourselves from the ready list before adding ourselves - to the blocked list as the same list item is used for both lists. We have - exclusive access to the ready lists as the scheduler is locked. */ - vListRemove( ( xListItem * ) &( pxCurrentTCB->xGenericListItem ) ); - - - #if ( INCLUDE_vTaskSuspend == 1 ) - { - if( xTicksToWait == portMAX_DELAY ) - { - /* Add ourselves to the suspended task list instead of a delayed task - list to ensure we are not woken by a timing event. We will block - indefinitely. */ - vListInsertEnd( ( xList * ) &xSuspendedTaskList, ( xListItem * ) &( pxCurrentTCB->xGenericListItem ) ); - } - else - { - /* Calculate the time at which the task should be woken if the event does - not occur. This may overflow but this doesn't matter. */ - xTimeToWake = xTickCount + xTicksToWait; - - listSET_LIST_ITEM_VALUE( &( pxCurrentTCB->xGenericListItem ), xTimeToWake ); - - if( xTimeToWake < xTickCount ) - { - /* Wake time has overflowed. Place this item in the overflow list. */ - vListInsert( ( xList * ) pxOverflowDelayedTaskList, ( xListItem * ) &( pxCurrentTCB->xGenericListItem ) ); - } - else - { - /* The wake time has not overflowed, so we can use the current block list. */ - vListInsert( ( xList * ) pxDelayedTaskList, ( xListItem * ) &( pxCurrentTCB->xGenericListItem ) ); - } - } - } - #else - { - /* Calculate the time at which the task should be woken if the event does - not occur. This may overflow but this doesn't matter. */ - xTimeToWake = xTickCount + xTicksToWait; - - listSET_LIST_ITEM_VALUE( &( pxCurrentTCB->xGenericListItem ), xTimeToWake ); - - if( xTimeToWake < xTickCount ) - { - /* Wake time has overflowed. Place this item in the overflow list. */ - vListInsert( ( xList * ) pxOverflowDelayedTaskList, ( xListItem * ) &( pxCurrentTCB->xGenericListItem ) ); - } - else - { - /* The wake time has not overflowed, so we can use the current block list. */ - vListInsert( ( xList * ) pxDelayedTaskList, ( xListItem * ) &( pxCurrentTCB->xGenericListItem ) ); - } - } - #endif -} -/*-----------------------------------------------------------*/ - -signed portBASE_TYPE xTaskRemoveFromEventList( const xList * const pxEventList ) -{ -tskTCB *pxUnblockedTCB; -portBASE_TYPE xReturn; - - /* THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED OR THE - SCHEDULER SUSPENDED. It can also be called from within an ISR. */ - - /* The event list is sorted in priority order, so we can remove the - first in the list, remove the TCB from the delayed list, and add - it to the ready list. - - If an event is for a queue that is locked then this function will never - get called - the lock count on the queue will get modified instead. This - means we can always expect exclusive access to the event list here. */ - pxUnblockedTCB = ( tskTCB * ) listGET_OWNER_OF_HEAD_ENTRY( pxEventList ); - vListRemove( &( pxUnblockedTCB->xEventListItem ) ); - - if( uxSchedulerSuspended == ( unsigned portBASE_TYPE ) pdFALSE ) - { - vListRemove( &( pxUnblockedTCB->xGenericListItem ) ); - prvAddTaskToReadyQueue( pxUnblockedTCB ); - } - else - { - /* We cannot access the delayed or ready lists, so will hold this - task pending until the scheduler is resumed. */ - vListInsertEnd( ( xList * ) &( xPendingReadyList ), &( pxUnblockedTCB->xEventListItem ) ); - } - - if( pxUnblockedTCB->uxPriority >= pxCurrentTCB->uxPriority ) - { - /* Return true if the task removed from the event list has - a higher priority than the calling task. This allows - the calling task to know if it should force a context - switch now. */ - xReturn = pdTRUE; - } - else - { - xReturn = pdFALSE; - } - - return xReturn; -} -/*-----------------------------------------------------------*/ - -void vTaskSetTimeOutState( xTimeOutType * const pxTimeOut ) -{ - pxTimeOut->xOverflowCount = xNumOfOverflows; - pxTimeOut->xTimeOnEntering = xTickCount; -} -/*-----------------------------------------------------------*/ - -portBASE_TYPE xTaskCheckForTimeOut( xTimeOutType * const pxTimeOut, portTickType * const pxTicksToWait ) -{ -portBASE_TYPE xReturn; - - #if ( INCLUDE_vTaskSuspend == 1 ) - /* If INCLUDE_vTaskSuspend is set to 1 and the block time specified is - the maximum block time then the task should block indefinitely, and - therefore never time out. */ - if( *pxTicksToWait == portMAX_DELAY ) - { - xReturn = pdFALSE; - } - else /* We are not blocking indefinitely, perform the checks below. */ - #endif - - if( ( xNumOfOverflows != pxTimeOut->xOverflowCount ) && ( xTickCount >= pxTimeOut->xTimeOnEntering ) ) - { - /* The tick count is greater than the time at which vTaskSetTimeout() - was called, but has also overflowed since vTaskSetTimeOut() was called. - It must have wrapped all the way around and gone past us again. This - passed since vTaskSetTimeout() was called. */ - xReturn = pdTRUE; - } - else if( ( xTickCount - pxTimeOut->xTimeOnEntering ) < *pxTicksToWait ) - { - /* Not a genuine timeout. Adjust parameters for time remaining. */ - *pxTicksToWait -= ( xTickCount - pxTimeOut->xTimeOnEntering ); - vTaskSetTimeOutState( pxTimeOut ); - xReturn = pdFALSE; - } - else - { - xReturn = pdTRUE; - } - - return xReturn; -} -/*-----------------------------------------------------------*/ - -void vTaskMissedYield( void ) -{ - xMissedYield = pdTRUE; -} - -/* - * ----------------------------------------------------------- - * The Idle task. - * ---------------------------------------------------------- - * - * The portTASK_FUNCTION() macro is used to allow port/compiler specific - * language extensions. The equivalent prototype for this function is: - * - * void prvIdleTask( void *pvParameters ); - * - */ -static portTASK_FUNCTION( prvIdleTask, pvParameters ) -{ - /* Stop warnings. */ - ( void ) pvParameters; - - for( ;; ) - { - /* See if any tasks have been deleted. */ - prvCheckTasksWaitingTermination(); - - #if ( configUSE_PREEMPTION == 0 ) - { - /* If we are not using preemption we keep forcing a task switch to - see if any other task has become available. If we are using - preemption we don't need to do this as any task becoming available - will automatically get the processor anyway. */ - taskYIELD(); - } - #endif - - #if ( ( configUSE_PREEMPTION == 1 ) && ( configIDLE_SHOULD_YIELD == 1 ) ) - { - /* When using preemption tasks of equal priority will be - timesliced. If a task that is sharing the idle priority is ready - to run then the idle task should yield before the end of the - timeslice. - - A critical region is not required here as we are just reading from - the list, and an occasional incorrect value will not matter. If - the ready list at the idle priority contains more than one task - then a task other than the idle task is ready to execute. */ - if( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ tskIDLE_PRIORITY ] ) ) > ( unsigned portBASE_TYPE ) 1 ) - { - taskYIELD(); - } - } - #endif - - #if ( configUSE_IDLE_HOOK == 1 ) - { - extern void vApplicationIdleHook( void ); - - /* Call the user defined function from within the idle task. This - allows the application designer to add background functionality - without the overhead of a separate task. - NOTE: vApplicationIdleHook() MUST NOT, UNDER ANY CIRCUMSTANCES, - CALL A FUNCTION THAT MIGHT BLOCK. */ - vApplicationIdleHook(); - } - #endif - } -} /*lint !e715 pvParameters is not accessed but all task functions require the same prototype. */ - - - - - - - -/*----------------------------------------------------------- - * File private functions documented at the top of the file. - *----------------------------------------------------------*/ - - - -static void prvInitialiseTCBVariables( tskTCB *pxTCB, const signed portCHAR * const pcName, unsigned portBASE_TYPE uxPriority ) -{ - /* Store the function name in the TCB. */ - strncpy( ( char * ) pxTCB->pcTaskName, ( const char * ) pcName, ( unsigned portSHORT ) configMAX_TASK_NAME_LEN ); - pxTCB->pcTaskName[ ( unsigned portSHORT ) configMAX_TASK_NAME_LEN - ( unsigned portSHORT ) 1 ] = '\0'; - - /* This is used as an array index so must ensure it's not too large. */ - if( uxPriority >= configMAX_PRIORITIES ) - { - uxPriority = configMAX_PRIORITIES - 1; - } - - pxTCB->uxPriority = uxPriority; - #if ( configUSE_MUTEXES == 1 ) - { - pxTCB->uxBasePriority = uxPriority; - } - #endif - - vListInitialiseItem( &( pxTCB->xGenericListItem ) ); - vListInitialiseItem( &( pxTCB->xEventListItem ) ); - - /* Set the pxTCB as a link back from the xListItem. This is so we can get - back to the containing TCB from a generic item in a list. */ - listSET_LIST_ITEM_OWNER( &( pxTCB->xGenericListItem ), pxTCB ); - - /* Event lists are always in priority order. */ - listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), configMAX_PRIORITIES - ( portTickType ) uxPriority ); - listSET_LIST_ITEM_OWNER( &( pxTCB->xEventListItem ), pxTCB ); -} -/*-----------------------------------------------------------*/ - -static void prvInitialiseTaskLists( void ) -{ -unsigned portBASE_TYPE uxPriority; - - for( uxPriority = 0; uxPriority < configMAX_PRIORITIES; uxPriority++ ) - { - vListInitialise( ( xList * ) &( pxReadyTasksLists[ uxPriority ] ) ); - } - - vListInitialise( ( xList * ) &xDelayedTaskList1 ); - vListInitialise( ( xList * ) &xDelayedTaskList2 ); - vListInitialise( ( xList * ) &xPendingReadyList ); - - #if ( INCLUDE_vTaskDelete == 1 ) - { - vListInitialise( ( xList * ) &xTasksWaitingTermination ); - } - #endif - - #if ( INCLUDE_vTaskSuspend == 1 ) - { - vListInitialise( ( xList * ) &xSuspendedTaskList ); - } - #endif - - /* Start with pxDelayedTaskList using list1 and the pxOverflowDelayedTaskList - using list2. */ - pxDelayedTaskList = &xDelayedTaskList1; - pxOverflowDelayedTaskList = &xDelayedTaskList2; -} -/*-----------------------------------------------------------*/ - -static void prvCheckTasksWaitingTermination( void ) -{ - #if ( INCLUDE_vTaskDelete == 1 ) - { - portBASE_TYPE xListIsEmpty; - - /* ucTasksDeleted is used to prevent vTaskSuspendAll() being called - too often in the idle task. */ - if( uxTasksDeleted > ( unsigned portBASE_TYPE ) 0 ) - { - vTaskSuspendAll(); - xListIsEmpty = listLIST_IS_EMPTY( &xTasksWaitingTermination ); - xTaskResumeAll(); - - if( !xListIsEmpty ) - { - tskTCB *pxTCB; - - portENTER_CRITICAL(); - { - pxTCB = ( tskTCB * ) listGET_OWNER_OF_HEAD_ENTRY( ( ( xList * ) &xTasksWaitingTermination ) ); - vListRemove( &( pxTCB->xGenericListItem ) ); - --uxCurrentNumberOfTasks; - --uxTasksDeleted; - } - portEXIT_CRITICAL(); - - prvDeleteTCB( pxTCB ); - } - } - } - #endif -} -/*-----------------------------------------------------------*/ - -static tskTCB *prvAllocateTCBAndStack( unsigned portSHORT usStackDepth ) -{ -tskTCB *pxNewTCB; - - /* Allocate space for the TCB. Where the memory comes from depends on - the implementation of the port malloc function. */ - pxNewTCB = ( tskTCB * ) pvPortMalloc( sizeof( tskTCB ) ); - - if( pxNewTCB != NULL ) - { - /* Allocate space for the stack used by the task being created. - The base of the stack memory stored in the TCB so the task can - be deleted later if required. */ - pxNewTCB->pxStack = ( portSTACK_TYPE * ) pvPortMalloc( ( ( size_t )usStackDepth ) * sizeof( portSTACK_TYPE ) ); - - if( pxNewTCB->pxStack == NULL ) - { - /* Could not allocate the stack. Delete the allocated TCB. */ - vPortFree( pxNewTCB ); - pxNewTCB = NULL; - } - else - { - /* Just to help debugging. */ - memset( pxNewTCB->pxStack, tskSTACK_FILL_BYTE, usStackDepth * sizeof( portSTACK_TYPE ) ); - } - } - - return pxNewTCB; -} -/*-----------------------------------------------------------*/ - -#if ( configUSE_TRACE_FACILITY == 1 ) - - static void prvListTaskWithinSingleList( const signed portCHAR *pcWriteBuffer, xList *pxList, signed portCHAR cStatus ) - { - volatile tskTCB *pxNextTCB, *pxFirstTCB; - static portCHAR pcStatusString[ 50 ]; - unsigned portSHORT usStackRemaining; - - /* Write the details of all the TCB's in pxList into the buffer. */ - listGET_OWNER_OF_NEXT_ENTRY( pxFirstTCB, pxList ); - do - { - listGET_OWNER_OF_NEXT_ENTRY( pxNextTCB, pxList ); - usStackRemaining = usTaskCheckFreeStackSpace( ( unsigned portCHAR * ) pxNextTCB->pxStack ); - sprintf( pcStatusString, ( portCHAR * ) "%s\t\t%c\t%u\t%u\t%u\r\n", pxNextTCB->pcTaskName, cStatus, ( unsigned int ) pxNextTCB->uxPriority, usStackRemaining, ( unsigned int ) pxNextTCB->uxTCBNumber ); - strcat( ( portCHAR * ) pcWriteBuffer, ( portCHAR * ) pcStatusString ); - - } while( pxNextTCB != pxFirstTCB ); - } - -#endif -/*-----------------------------------------------------------*/ - -#if ( configUSE_TRACE_FACILITY == 1 ) - unsigned portSHORT usTaskCheckFreeStackSpace( const unsigned portCHAR * pucStackByte ) - { - register unsigned portSHORT usCount = 0; - - while( *pucStackByte == tskSTACK_FILL_BYTE ) - { - pucStackByte -= portSTACK_GROWTH; - usCount++; - } - - usCount /= sizeof( portSTACK_TYPE ); - - return usCount; - } -#endif -/*-----------------------------------------------------------*/ - - - -#if ( ( INCLUDE_vTaskDelete == 1 ) || ( INCLUDE_vTaskCleanUpResources == 1 ) ) - - static void prvDeleteTCB( tskTCB *pxTCB ) - { - /* Free up the memory allocated by the scheduler for the task. It is up to - the task to free any memory allocated at the application level. */ - vPortFree( pxTCB->pxStack ); - vPortFree( pxTCB ); - } - -#endif - - -/*-----------------------------------------------------------*/ - -#if ( INCLUDE_xTaskGetCurrentTaskHandle == 1 ) - - xTaskHandle xTaskGetCurrentTaskHandle( void ) - { - xTaskHandle xReturn; - - portENTER_CRITICAL(); - { - xReturn = ( xTaskHandle ) pxCurrentTCB; - } - portEXIT_CRITICAL(); - - return xReturn; - } - -#endif - -/*-----------------------------------------------------------*/ - -#if ( INCLUDE_xTaskGetSchedulerState == 1 ) - - portBASE_TYPE xTaskGetSchedulerState( void ) - { - portBASE_TYPE xReturn; - - if( xSchedulerRunning == pdFALSE ) - { - xReturn = taskSCHEDULER_NOT_STARTED; - } - else - { - if( uxSchedulerSuspended == ( unsigned portBASE_TYPE ) pdFALSE ) - { - xReturn = taskSCHEDULER_RUNNING; - } - else - { - xReturn = taskSCHEDULER_SUSPENDED; - } - } - - return xReturn; - } - -#endif - -#if ( configUSE_MUTEXES == 1 ) - - void vTaskPriorityInherit( xTaskHandle * const pxMutexHolder ) - { - tskTCB * const pxTCB = ( tskTCB * ) pxMutexHolder; - - if( pxTCB->uxPriority < pxCurrentTCB->uxPriority ) - { - /* Adjust the mutex holder state to account for its new priority. */ - listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), configMAX_PRIORITIES - ( portTickType ) pxCurrentTCB->uxPriority ); - - /* If the task being modified is in the ready state it will need to - be moved in to a new list. */ - if( listIS_CONTAINED_WITHIN( &( pxReadyTasksLists[ pxTCB->uxPriority ] ), &( pxTCB->xGenericListItem ) ) ) - { - vListRemove( &( pxTCB->xGenericListItem ) ); - - /* Inherit the priority before being moved into the new list. */ - pxTCB->uxPriority = pxCurrentTCB->uxPriority; - prvAddTaskToReadyQueue( pxTCB ); - } - else - { - /* Just inherit the priority. */ - pxTCB->uxPriority = pxCurrentTCB->uxPriority; - } - } - } - -#endif - -#if ( configUSE_MUTEXES == 1 ) - - void vTaskPriorityDisinherit( xTaskHandle * const pxMutexHolder ) - { - tskTCB * const pxTCB = ( tskTCB * ) pxMutexHolder; - - if( pxMutexHolder != NULL ) - { - if( pxTCB->uxPriority != pxTCB->uxBasePriority ) - { - /* We must be the running task to be able to give the mutex back. - Remove ourselves from the ready list we currently appear in. */ - vListRemove( &( pxTCB->xGenericListItem ) ); - - /* Disinherit the priority before adding ourselves into the new - ready list. */ - pxTCB->uxPriority = pxTCB->uxBasePriority; - listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), configMAX_PRIORITIES - ( portTickType ) pxTCB->uxPriority ); - prvAddTaskToReadyQueue( pxTCB ); - } - } - } - -#endif - - - - - diff --git a/Makefile b/Makefile index 2d510f5..82eb159 100644 --- a/Makefile +++ b/Makefile @@ -12,8 +12,9 @@ export CCGLD=-T p30f4012.gld export OSROOT=/usr/src/FreeRTOS/Source export OSFILES=$(OSROOT)/list.c $(OSROOT)/queue.c $(OSROOT)/tasks.c \ $(OSROOT)/croutine.c $(OSROOT)/portable/MPLAB/PIC24_dsPIC/port.c \ + $(OSROOT)/portable/MPLAB/PIC24_dsPIC/portasm_dsPIC.S \ $(OSROOT)/portable/MemMang/heap_1.c -export OSOBJS=list.o queue.o tasks.o croutine.o port.o heap_1.o +export OSOBJS=list.o queue.o tasks.o croutine.o port.o portasm_dsPIC.o heap_1.o export OSINCDIR=-I$(OSROOT)/include -I$(OSROOT)/portable/MPLAB/PIC24_ds_PIC export OSFLAGS=-DMPLAB_DSPIC_PORT -DTCKPS0=TCKPS -DTCKPS1=TSYNC diff --git a/TODO b/TODO deleted file mode 100644 index f9f5558..0000000 --- a/TODO +++ /dev/null @@ -1 +0,0 @@ -Update freeRTOS. diff --git a/c~ b/c~ new file mode 100644 index 0000000..83eb549 --- /dev/null +++ b/c~ @@ -0,0 +1,286 @@ +2012.04.20 Started aic-2.3.0. + Reworked source tree. + Capacitor involucre sizes made invisible in schematics. + Created a workaround to fix a incompatibility between + pic30-gcc 3.01 and FreeRTOS. See the hack 1 in the Hacks + file. + +2009.02.09 Started aic-2.2.0. + aic-2.2.* uses the irs21094 MOSFET driver. + +2008.08.26 Started aic-2.1.0. + aic-2.1.* uses the LT1162 MOSFET driver. + +2006.06.11 Started aic-2.0.0. + aic-2.*.* uses the dsPIC30F4012 processor. + aic-2.0.* uses the MAX5062 MOSFET driver. + +2006.06.11 Inicio do projeto aic-2.0.0 + +2008.02.15 Incluido destrutor virtual na classe AIC_COMM. + + Alterada a implementacao da serializacao de valores double + em AIC_UDP::send_command(). + + Corrigido bug no processamento dos argumentos dos comandos + AIC_USER0, AIC_USER1, AIC_USER2 e AIC_USER3. + + Incluido o diretorio /usr/src/linux/include, na variavel de + ambiente CINCLUDE. + +2007.12.05 Criada a classe Sputtering na biblioteca, para suportar a + aplicacao de controle do sputtering. + +2007.11.28 Criadas constantes com os bits de flags do pacote de status + da AIC. + + Processamento de comandos enviados para a AIC alterado para + suportar comandos definidos pelo usuario. + +2007.11.27 Modificado o arquivo lib/aicio/pwm.a51 para nao utilizar o + acelerador matematico, que estava gerando problemas de + reentrancia. + + Alterado o arquivo doc/Makefile para utilizar os nomes dos + arquivos de layout gerados pela nova versao (20060321) do + PCB. + + Criados os programas SputPIDweb, SputPIDDaemon e sputtering. + + Renomeado o programa SputDaemon para SputWeb. + + Criada a versao 1.6.1 + + +2006.02.24 Incluidos os esquematicos e o layout do PCB no arquivo de + documentacao em pdf. + +2006.01.19 Criado o programa DoorWeb. + +2006.01.11 Criado o target upload nos Makefiles, para fazer o upload + dos programas nas AICs. + +2006.01.09 Criado o programa DoorOpen. + +2005.12.15 Removido o arquivo lib/aicio/motor.a51. As variaveis globais + estao agora definidas em lib/aicio/motor.c. + + +2005.12.14 Corrigido o problema na funcao pwm_set_duty(), que nao + funcionava em tempo real. Os registradores do banco 1 nao + podem ser utilizados em rotinas de interrupcao. + + Corrigido um bug na rotina native_initialize do PWM. Estava + sendo dado um push de um registrador do banco 1, quando + deveria ser do banco 0. + + Criado o identificador de comando MOTOR_REF, para enviar + para a AIC a referencia para o PID implementadod pelo + programa PIDDaemon. + + +2005.11.25 Alterado o "dominio" do pacote AIC para br.ufrgs.ece. + + Criada a versao 1.6.0 + + +2005.10.19 Criado o programa CmdDaemon, semelhante ao IODaemon, mas + apenas recebe comandos, sem enviar dados de sensores. + +2005.09.25 Reestruturados os Makefiles. Agora os Makefiles nos + diretorios utilizam as variaveis definidas no Makefile no + diretorio principal, ao inves de redefini-las. As + redefinicoes sao feitas apenas nas (poucas) vezes em que sao + necessarias. + + Criada a versao 1.5.1 + + Removidas as declaracoes de variaveis globais em arquivos em + Assembly e criada uma funcao dummy para defini-las nos + arquivos C, ja' que nao e' possivel emitir Assembly in-line + fora de funcoes. + +2005.09.02 Criado o programa EncoderRtRead para teste do encoder em + tempo real utilizando as funcoes de ponto flutuante, ou + seja, obtendo a leitura em radianos. + +2005.08.31 Incluido suporte para ponto-flutuante. Implementadas em C as + funcoes de interface que utilizam ponto flutuante. + + Criados os programas EncoderRtTest para teste do encoder em + tempo real. + + Criado o programa MotorRtTest para teste do motor em tempo + real, utilizando as funcoes de ponto flutante. + +2005.08.30 Criado o programa PwmRtTest, para teste do PWM em tempo real + em C. + + Incluidas no aicio.h consantes com a frequencia de + referencia, frequencia de chaveamento, delay de turn-off e + contagens maximas e minimas do PWM. + +2005.08.13 Programas de tempo real modificados para utilizar a API do + RTAI (Real Time Application Interface) para a TINI, ao inves + de implementar diretamente todo o tratamento de tempo real. + + Criada versao 1.5.0 + +2005.08.12 Criado o programa DoorDaemon, para implementar a abertura de + uma porta conectada no sinal de freio da AIC atraves da + Internet, utilizando um protocolo CHAP com sha-1. + +2005.06.03 Criada versao 1.4.2 + + Criada a biblioteca aicio.mpp.lib, com funcoes implementadas + que podem ser chamadas a partir de modulos de tempo real em + C para acessar o hardware da AIC. Codigos fontes dos metodos + nativos que acessam o hardware modificados para usarem a + biblioteca aicio.mpp.lib. + + Criado o programa PID, que implementa em tempo real o + prototipo de um controlador PID, com transferencia de + referencias e variaveis de saida entre a interface com o + usuario e o modulo de tempo real. + + Criados os programas BrakeRtTest e IndexRtTest para de teste + do freio e do indice em tempo real em C. + +2005.01.06 Criada versao 1.4.1 + +2004.12.05 Corrigido bug nas inicializacao das classes AIC_CAN e + AIC_HOST_CAN que violava o padrao ISO C++ e impedia estas + classes de serem compiladas com o g++ 3.4.3. + +2004.11.29 Criada versao 1.4.0 + +2004.09.28 Alterados os nomes das classes utilizadas para sinalizar + excecoes. Foram removidos os prefixos que podem ser + deduzidos a partir da hierarquia de classes. + + Corrigido o log dos comandos no IODaemon no modo debug. + Agora e' logado o codigo do comando em decimal. + + Corrigido bug na classe HostCAN, que fazia com que a + filtragem das mensagens nao funcionasse. O centro de + mensagens 15 foi desabilitado. A recepcao de mensagens + passou a funcionar no modo WriteOver. + + Corrigido bug nos metodos Encoder::read() e + Encoder::readAndClear(). O calculo da conversao de numero de + pulsos para radianos estava errado. + + Removido o flag canWANT_EXCLUSIVE dos construtores das + classes AIC_CAN e AIC_HOST_CAN. Com isto pode-se + compartilhar a placa PCICAN entre aplicacoes. + + Criado buffer de mensagens estatico nas classes AIC_CAN e + AIC_HOST_CAN para armazenar as mensagens destinada as outras + instancias da classe. + +2004.06.28 Criada documentacao on-line para a biblioteca em C++ e em + Java utilizando o Doxygen. + + Eliminada a documentacao utilizando o javadoc. + +2004.06.18 Ajustados os Makefiles para criar os arquivos .runinfo + utilizados pelo RTAI-3.x. + + Removido o periodo do programa pid. Agora o controlador + executa com ciclo livre, temporizado pelo processo de + amostragem. + + Criado um destructor virtual para a classe AIC. A falta + deste destructor causava erro de segmentacao quando da + destruicao do objeto. + + Alterados programas em C++ para permitirem a passagem na + linha de comando do numero da porta de status a ser + utilizada (porta de comando no caso do aicd). + +2004.05.26 Criados os programas BrakeApply e BrakeRelease. + +2004.05.18 Criada a macro RESTORE_STRETCH, utilizada nas biblotecas + nativas para retornar o strech ao valor original. + + Criadas versoes das macros SET_STRETCH e RESTORE_STRETCH que + nao geram codigo. Atraves de compilacao condicional as + versoes que nao geram codigo sao utilizadas quando o valor + de strech e' negativo. Esta caracteristica e' utilizada para + utilizar o valor de stretch default da TINI. + + Alterados o esquematico e o layout do PCB para utilizar + 6N137 ao inves de 6N136. + + Alterados os Makefiles dos programas que necessitam do + suporte do RTAI para funcionarem com o RTAI-3.x. + +2004.03.24 Alterados programas de teste e aplicativos em Java para + eliminar excessoes de endereco invalido, que nao sao mais + geradas pela classe AIC. + + Metodos das classes Brake, Index, Encoder e PWM + implementados em Assembly como metodos nativos. + + Criada versao 1.3.0. + +2004.03.08 Consolidadas as constantes definindo enderecos dos + dispositivos na AIC na classe PLD. Consolidadas as + constantes definindo bits do registrador de controle na + classe CtrlRegister. + +2004.01.11 Passou a ser utilizado o header iostream ao inves de + iostream.h, conforme o novo padrao de C++. Esta adaptacao + foi necessaria para compilacao com o GCC 3.3.2. + +2003.12.31 Alterados os codigos identificadores de comandos e status, + por estarem relacionados com a prioridade das mensgens no + barramento CAN. Os novos codigos conferem uma prioridade + mais adequada aos diversos tipos de mensagens. Alterada a + documentacao para refletir as mudancas nos protocolos. + + Programas em C++ alterados para utilizar comunicacao CAN por + default. A comunicacao por UDP e' suportada atraves de opcao + na linha de comando. + +2003.12.30 Alterado o protocolo de aplicacao de ASCII para binario, com + alteracao no prototipo das funcoes de baixo nivel para + transmissao e recepcao de comandos e status. + + Criada versao 1.2.0. + +2003.12.28 Documentados os protocolos de aplicacao e classes das + bibliotecas. + +2003.12.23 IODaemon alterado para utilizar comunicacao CAN por default. + A comunicacao por UDP e' suportada atraves de opcao na linha + de comando. + +2003.12.22 Criada documentacao das classes em AIC.jar no formado + javadoc. Alterado o Makefile para criar documentacao em + doc/javadocs. + +2003.12.21 Programas em C++ alterados para utilizarem comunicacao por + CAN por default e por UDP quando compilados com USE_UDP + definido. Makefiles alterados para compilar duas versoes dos + programas. + +2003.12.18 Alteradas as classes utilizadas para representar excessoes. + + Criada uma hierarquia mais detalhada. + +2003.12.17 Alteracao na classe AIC_HOST, que tornou-se virtual. + + Criadas classes AIC_HOST_UDP e AIC_HOST_CAN, derivadas de + AIC_HOST. + +2003.12.16 Alteracao da classe AIC, que tornou-se virtual. + + Criadas classes AIC_UDP e AIC_CAN, derivadas de AIC. + +2003.12.15 Alteracao na classe Host, que tornou-se abstrata. + + Criadas classes HostUDP e HostCAN, derivadas de Host. + +2002.xx.xx Started aic-1.0.0. + aic-1.0.0 uses the TINI DS390 processor. \ No newline at end of file diff --git a/doc/aic-0.5080.drill.gcode b/doc/aic-0.5080.drill.gcode new file mode 100644 index 0000000..91bbf85 --- /dev/null +++ b/doc/aic-0.5080.drill.gcode @@ -0,0 +1,83 @@ +(Created by G-code exporter) +(Wed Jul 15 16:09:51 2015) +(Units: mm) +(Board size: 180.34 x 104.14 mm) +(Drill file: 70 drills) +(Drill diameter: 0.508000 mm) +#100=2.000000 (safe Z) +#104=-2.000000 (drill depth) +(---------------------------------) +G17 G21 G90 G64 P0.003 M3 S3000 M7 F50.000000 +G0 Z#100 +G81 X38.735000 Y60.325000 Z#104 R#100 +G81 X36.830000 Y63.500000 Z#104 R#100 +G81 X41.910000 Y67.310000 Z#104 R#100 +G81 X51.435000 Y68.580000 Z#104 R#100 +G81 X51.435000 Y74.930000 Z#104 R#100 +G81 X58.420000 Y76.200000 Z#104 R#100 +G81 X59.055000 Y74.930000 Z#104 R#100 +G81 X59.055000 Y77.470000 Z#104 R#100 +G81 X67.945000 Y74.930000 Z#104 R#100 +G81 X72.390000 Y74.930000 Z#104 R#100 +G81 X79.375000 Y67.945000 Z#104 R#100 +G81 X85.725000 Y66.040000 Z#104 R#100 +G81 X87.630000 Y64.770000 Z#104 R#100 +G81 X88.900000 Y66.040000 Z#104 R#100 +G81 X92.710000 Y67.945000 Z#104 R#100 +G81 X91.440000 Y73.025000 Z#104 R#100 +G81 X90.805000 Y74.295000 Z#104 R#100 +G81 X84.455000 Y75.565000 Z#104 R#100 +G81 X86.995000 Y80.645000 Z#104 R#100 +G81 X84.455000 Y83.185000 Z#104 R#100 +G81 X74.295000 Y93.980000 Z#104 R#100 +G81 X69.850000 Y92.710000 Z#104 R#100 +G81 X67.945000 Y87.630000 Z#104 R#100 +G81 X63.500000 Y86.360000 Z#104 R#100 +G81 X59.055000 Y98.425000 Z#104 R#100 +G81 X67.945000 Y99.695000 Z#104 R#100 +G81 X71.755000 Y99.695000 Z#104 R#100 +G81 X74.295000 Y101.600000 Z#104 R#100 +G81 X78.105000 Y99.695000 Z#104 R#100 +G81 X95.250000 Y94.615000 Z#104 R#100 +G81 X101.600000 Y80.645000 Z#104 R#100 +G81 X107.950000 Y76.835000 Z#104 R#100 +G81 X105.410000 Y69.850000 Z#104 R#100 +G81 X102.870000 Y68.580000 Z#104 R#100 +G81 X100.330000 Y67.945000 Z#104 R#100 +G81 X100.330000 Y69.850000 Z#104 R#100 +G81 X97.790000 Y63.500000 Z#104 R#100 +G81 X95.885000 Y59.690000 Z#104 R#100 +G81 X90.805000 Y60.960000 Z#104 R#100 +G81 X88.900000 Y46.355000 Z#104 R#100 +G81 X100.330000 Y33.020000 Z#104 R#100 +G81 X108.585000 Y41.910000 Z#104 R#100 +G81 X123.190000 Y56.515000 Z#104 R#100 +G81 X123.190000 Y60.960000 Z#104 R#100 +G81 X129.540000 Y66.040000 Z#104 R#100 +G81 X129.540000 Y73.025000 Z#104 R#100 +G81 X139.700000 Y56.515000 Z#104 R#100 +G81 X154.305000 Y71.120000 Z#104 R#100 +G81 X156.845000 Y68.580000 Z#104 R#100 +G81 X158.115000 Y69.850000 Z#104 R#100 +G81 X154.305000 Y75.565000 Z#104 R#100 +G81 X127.000000 Y93.980000 Z#104 R#100 +G81 X117.475000 Y99.695000 Z#104 R#100 +G81 X57.785000 Y66.040000 Z#104 R#100 +G81 X55.245000 Y59.690000 Z#104 R#100 +G81 X45.085000 Y81.915000 Z#104 R#100 +G81 X46.355000 Y82.550000 Z#104 R#100 +G81 X45.085000 Y89.535000 Z#104 R#100 +G81 X41.275000 Y90.805000 Z#104 R#100 +G81 X37.465000 Y88.265000 Z#104 R#100 +G81 X24.765000 Y81.915000 Z#104 R#100 +G81 X29.845000 Y74.930000 Z#104 R#100 +G81 X87.630000 Y23.495000 Z#104 R#100 +G81 X123.190000 Y10.795000 Z#104 R#100 +G81 X125.730000 Y12.065000 Z#104 R#100 +G81 X128.270000 Y13.335000 Z#104 R#100 +G81 X138.430000 Y13.335000 Z#104 R#100 +G81 X139.700000 Y12.065000 Z#104 R#100 +G81 X140.970000 Y10.795000 Z#104 R#100 +G81 X140.970000 Y34.290000 Z#104 R#100 +M5 M9 M2 +(end, total distance 711.14mm = 28.00in) diff --git a/doc/aic-0.7112.drill.gcode b/doc/aic-0.7112.drill.gcode new file mode 100644 index 0000000..e1d2fdf --- /dev/null +++ b/doc/aic-0.7112.drill.gcode @@ -0,0 +1,149 @@ +(Created by G-code exporter) +(Wed Jul 15 16:09:51 2015) +(Units: mm) +(Board size: 180.34 x 104.14 mm) +(Drill file: 136 drills) +(Drill diameter: 0.711200 mm) +#100=2.000000 (safe Z) +#104=-2.000000 (drill depth) +(---------------------------------) +G17 G21 G90 G64 P0.003 M3 S3000 M7 F50.000000 +G0 Z#100 +G81 X29.845000 Y7.620000 Z#104 R#100 +G81 X34.290000 Y7.620000 Z#104 R#100 +G81 X34.290000 Y12.700000 Z#104 R#100 +G81 X29.845000 Y12.700000 Z#104 R#100 +G81 X40.005000 Y12.700000 Z#104 R#100 +G81 X40.005000 Y7.620000 Z#104 R#100 +G81 X40.005000 Y71.120000 Z#104 R#100 +G81 X37.465000 Y71.120000 Z#104 R#100 +G81 X34.925000 Y71.120000 Z#104 R#100 +G81 X32.385000 Y71.120000 Z#104 R#100 +G81 X29.845000 Y71.120000 Z#104 R#100 +G81 X27.305000 Y71.120000 Z#104 R#100 +G81 X24.765000 Y71.120000 Z#104 R#100 +G81 X24.765000 Y78.740000 Z#104 R#100 +G81 X27.305000 Y78.740000 Z#104 R#100 +G81 X29.845000 Y78.740000 Z#104 R#100 +G81 X32.385000 Y78.740000 Z#104 R#100 +G81 X34.925000 Y78.740000 Z#104 R#100 +G81 X37.465000 Y78.740000 Z#104 R#100 +G81 X40.005000 Y78.740000 Z#104 R#100 +G81 X42.545000 Y78.740000 Z#104 R#100 +G81 X45.085000 Y78.740000 Z#104 R#100 +G81 X47.625000 Y78.740000 Z#104 R#100 +G81 X50.165000 Y78.740000 Z#104 R#100 +G81 X52.705000 Y78.740000 Z#104 R#100 +G81 X55.245000 Y78.740000 Z#104 R#100 +G81 X57.785000 Y78.740000 Z#104 R#100 +G81 X63.500000 Y77.470000 Z#104 R#100 +G81 X63.500000 Y72.390000 Z#104 R#100 +G81 X57.785000 Y71.120000 Z#104 R#100 +G81 X55.245000 Y71.120000 Z#104 R#100 +G81 X52.705000 Y71.120000 Z#104 R#100 +G81 X50.165000 Y71.120000 Z#104 R#100 +G81 X47.625000 Y71.120000 Z#104 R#100 +G81 X45.085000 Y71.120000 Z#104 R#100 +G81 X42.545000 Y71.120000 Z#104 R#100 +G81 X50.165000 Y85.090000 Z#104 R#100 +G81 X52.705000 Y85.090000 Z#104 R#100 +G81 X55.245000 Y85.090000 Z#104 R#100 +G81 X57.785000 Y85.090000 Z#104 R#100 +G81 X57.785000 Y92.710000 Z#104 R#100 +G81 X55.245000 Y92.710000 Z#104 R#100 +G81 X52.705000 Y92.710000 Z#104 R#100 +G81 X50.165000 Y92.710000 Z#104 R#100 +G81 X51.435000 Y96.520000 Z#104 R#100 +G81 X56.515000 Y96.520000 Z#104 R#100 +G81 X78.105000 Y92.710000 Z#104 R#100 +G81 X80.645000 Y92.710000 Z#104 R#100 +G81 X83.185000 Y92.710000 Z#104 R#100 +G81 X85.725000 Y92.710000 Z#104 R#100 +G81 X84.455000 Y96.520000 Z#104 R#100 +G81 X79.375000 Y96.520000 Z#104 R#100 +G81 X80.645000 Y85.090000 Z#104 R#100 +G81 X78.105000 Y85.090000 Z#104 R#100 +G81 X83.185000 Y85.090000 Z#104 R#100 +G81 X85.725000 Y85.090000 Z#104 R#100 +G81 X85.725000 Y78.740000 Z#104 R#100 +G81 X83.185000 Y78.740000 Z#104 R#100 +G81 X80.645000 Y78.740000 Z#104 R#100 +G81 X78.105000 Y78.740000 Z#104 R#100 +G81 X78.105000 Y71.120000 Z#104 R#100 +G81 X80.645000 Y71.120000 Z#104 R#100 +G81 X83.185000 Y71.120000 Z#104 R#100 +G81 X85.725000 Y71.120000 Z#104 R#100 +G81 X91.440000 Y71.120000 Z#104 R#100 +G81 X93.980000 Y71.120000 Z#104 R#100 +G81 X96.520000 Y71.120000 Z#104 R#100 +G81 X99.060000 Y71.120000 Z#104 R#100 +G81 X101.600000 Y71.120000 Z#104 R#100 +G81 X104.140000 Y71.120000 Z#104 R#100 +G81 X106.680000 Y71.120000 Z#104 R#100 +G81 X109.220000 Y71.120000 Z#104 R#100 +G81 X115.570000 Y71.120000 Z#104 R#100 +G81 X118.110000 Y71.120000 Z#104 R#100 +G81 X120.650000 Y71.120000 Z#104 R#100 +G81 X123.190000 Y71.120000 Z#104 R#100 +G81 X125.730000 Y71.120000 Z#104 R#100 +G81 X128.270000 Y71.120000 Z#104 R#100 +G81 X130.810000 Y71.120000 Z#104 R#100 +G81 X135.255000 Y72.390000 Z#104 R#100 +G81 X135.255000 Y77.470000 Z#104 R#100 +G81 X130.810000 Y78.740000 Z#104 R#100 +G81 X128.270000 Y78.740000 Z#104 R#100 +G81 X125.730000 Y78.740000 Z#104 R#100 +G81 X123.190000 Y78.740000 Z#104 R#100 +G81 X120.650000 Y78.740000 Z#104 R#100 +G81 X118.110000 Y78.740000 Z#104 R#100 +G81 X115.570000 Y78.740000 Z#104 R#100 +G81 X115.570000 Y85.090000 Z#104 R#100 +G81 X118.110000 Y85.090000 Z#104 R#100 +G81 X120.650000 Y85.090000 Z#104 R#100 +G81 X123.190000 Y85.090000 Z#104 R#100 +G81 X123.190000 Y92.710000 Z#104 R#100 +G81 X120.650000 Y92.710000 Z#104 R#100 +G81 X118.110000 Y92.710000 Z#104 R#100 +G81 X115.570000 Y92.710000 Z#104 R#100 +G81 X116.840000 Y96.520000 Z#104 R#100 +G81 X121.920000 Y96.520000 Z#104 R#100 +G81 X130.175000 Y96.520000 Z#104 R#100 +G81 X135.255000 Y96.520000 Z#104 R#100 +G81 X135.255000 Y90.805000 Z#104 R#100 +G81 X130.175000 Y90.805000 Z#104 R#100 +G81 X109.220000 Y78.740000 Z#104 R#100 +G81 X106.680000 Y78.740000 Z#104 R#100 +G81 X104.140000 Y78.740000 Z#104 R#100 +G81 X101.600000 Y78.740000 Z#104 R#100 +G81 X99.060000 Y78.740000 Z#104 R#100 +G81 X96.520000 Y78.740000 Z#104 R#100 +G81 X93.980000 Y78.740000 Z#104 R#100 +G81 X91.440000 Y78.740000 Z#104 R#100 +G81 X32.385000 Y85.090000 Z#104 R#100 +G81 X29.845000 Y85.090000 Z#104 R#100 +G81 X27.305000 Y85.090000 Z#104 R#100 +G81 X24.765000 Y85.090000 Z#104 R#100 +G81 X24.765000 Y92.710000 Z#104 R#100 +G81 X27.305000 Y92.710000 Z#104 R#100 +G81 X29.845000 Y92.710000 Z#104 R#100 +G81 X32.385000 Y92.710000 Z#104 R#100 +G81 X31.115000 Y96.520000 Z#104 R#100 +G81 X26.035000 Y96.520000 Z#104 R#100 +G81 X115.570000 Y22.860000 Z#104 R#100 +G81 X118.110000 Y22.860000 Z#104 R#100 +G81 X120.650000 Y22.860000 Z#104 R#100 +G81 X123.190000 Y22.860000 Z#104 R#100 +G81 X125.730000 Y22.860000 Z#104 R#100 +G81 X128.270000 Y22.860000 Z#104 R#100 +G81 X130.810000 Y22.860000 Z#104 R#100 +G81 X135.255000 Y21.590000 Z#104 R#100 +G81 X135.255000 Y16.510000 Z#104 R#100 +G81 X130.810000 Y15.240000 Z#104 R#100 +G81 X128.270000 Y15.240000 Z#104 R#100 +G81 X125.730000 Y15.240000 Z#104 R#100 +G81 X123.190000 Y15.240000 Z#104 R#100 +G81 X120.650000 Y15.240000 Z#104 R#100 +G81 X118.110000 Y15.240000 Z#104 R#100 +G81 X115.570000 Y15.240000 Z#104 R#100 +M5 M9 M2 +(end, total distance 749.14mm = 29.49in) diff --git a/doc/aic-0.7620.drill.gcode b/doc/aic-0.7620.drill.gcode new file mode 100644 index 0000000..08493ec --- /dev/null +++ b/doc/aic-0.7620.drill.gcode @@ -0,0 +1,121 @@ +(Created by G-code exporter) +(Wed Jul 15 16:09:51 2015) +(Units: mm) +(Board size: 180.34 x 104.14 mm) +(Drill file: 108 drills) +(Drill diameter: 0.762000 mm) +#100=2.000000 (safe Z) +#104=-2.000000 (drill depth) +(---------------------------------) +G17 G21 G90 G64 P0.003 M3 S3000 M7 F50.000000 +G0 Z#100 +G81 X14.605000 Y13.335000 Z#104 R#100 +G81 X14.605000 Y15.875000 Z#104 R#100 +G81 X14.605000 Y18.415000 Z#104 R#100 +G81 X14.605000 Y20.955000 Z#104 R#100 +G81 X14.605000 Y23.495000 Z#104 R#100 +G81 X14.605000 Y26.035000 Z#104 R#100 +G81 X14.605000 Y28.575000 Z#104 R#100 +G81 X14.605000 Y31.115000 Z#104 R#100 +G81 X14.605000 Y33.655000 Z#104 R#100 +G81 X14.605000 Y36.195000 Z#104 R#100 +G81 X14.605000 Y38.735000 Z#104 R#100 +G81 X14.605000 Y41.275000 Z#104 R#100 +G81 X14.605000 Y43.815000 Z#104 R#100 +G81 X14.605000 Y46.355000 Z#104 R#100 +G81 X14.605000 Y48.895000 Z#104 R#100 +G81 X14.605000 Y51.435000 Z#104 R#100 +G81 X14.605000 Y53.975000 Z#104 R#100 +G81 X14.605000 Y56.515000 Z#104 R#100 +G81 X14.605000 Y59.055000 Z#104 R#100 +G81 X14.605000 Y61.595000 Z#104 R#100 +G81 X17.145000 Y61.595000 Z#104 R#100 +G81 X17.145000 Y59.055000 Z#104 R#100 +G81 X19.685000 Y59.055000 Z#104 R#100 +G81 X19.685000 Y61.595000 Z#104 R#100 +G81 X19.685000 Y64.135000 Z#104 R#100 +G81 X17.145000 Y64.135000 Z#104 R#100 +G81 X17.145000 Y66.675000 Z#104 R#100 +G81 X19.685000 Y66.675000 Z#104 R#100 +G81 X19.685000 Y69.215000 Z#104 R#100 +G81 X17.145000 Y69.215000 Z#104 R#100 +G81 X14.605000 Y69.215000 Z#104 R#100 +G81 X14.605000 Y66.675000 Z#104 R#100 +G81 X14.605000 Y64.135000 Z#104 R#100 +G81 X14.605000 Y71.755000 Z#104 R#100 +G81 X14.605000 Y74.295000 Z#104 R#100 +G81 X14.605000 Y76.835000 Z#104 R#100 +G81 X17.145000 Y76.835000 Z#104 R#100 +G81 X19.685000 Y76.835000 Z#104 R#100 +G81 X19.685000 Y79.375000 Z#104 R#100 +G81 X17.145000 Y79.375000 Z#104 R#100 +G81 X17.145000 Y81.915000 Z#104 R#100 +G81 X19.685000 Y81.915000 Z#104 R#100 +G81 X19.685000 Y84.455000 Z#104 R#100 +G81 X19.685000 Y86.995000 Z#104 R#100 +G81 X17.145000 Y86.995000 Z#104 R#100 +G81 X17.145000 Y84.455000 Z#104 R#100 +G81 X14.605000 Y84.455000 Z#104 R#100 +G81 X14.605000 Y86.995000 Z#104 R#100 +G81 X14.605000 Y89.535000 Z#104 R#100 +G81 X14.605000 Y92.075000 Z#104 R#100 +G81 X17.145000 Y92.075000 Z#104 R#100 +G81 X19.685000 Y92.075000 Z#104 R#100 +G81 X19.685000 Y89.535000 Z#104 R#100 +G81 X17.145000 Y89.535000 Z#104 R#100 +G81 X14.605000 Y81.915000 Z#104 R#100 +G81 X14.605000 Y79.375000 Z#104 R#100 +G81 X17.145000 Y74.295000 Z#104 R#100 +G81 X17.145000 Y71.755000 Z#104 R#100 +G81 X19.685000 Y71.755000 Z#104 R#100 +G81 X19.685000 Y74.295000 Z#104 R#100 +G81 X19.685000 Y56.515000 Z#104 R#100 +G81 X17.145000 Y56.515000 Z#104 R#100 +G81 X17.145000 Y53.975000 Z#104 R#100 +G81 X19.685000 Y53.975000 Z#104 R#100 +G81 X19.685000 Y51.435000 Z#104 R#100 +G81 X19.685000 Y48.895000 Z#104 R#100 +G81 X17.145000 Y48.895000 Z#104 R#100 +G81 X17.145000 Y51.435000 Z#104 R#100 +G81 X17.145000 Y46.355000 Z#104 R#100 +G81 X17.145000 Y43.815000 Z#104 R#100 +G81 X19.685000 Y43.815000 Z#104 R#100 +G81 X19.685000 Y46.355000 Z#104 R#100 +G81 X19.685000 Y41.275000 Z#104 R#100 +G81 X17.145000 Y41.275000 Z#104 R#100 +G81 X17.145000 Y38.735000 Z#104 R#100 +G81 X17.145000 Y36.195000 Z#104 R#100 +G81 X19.685000 Y36.195000 Z#104 R#100 +G81 X19.685000 Y38.735000 Z#104 R#100 +G81 X19.685000 Y33.655000 Z#104 R#100 +G81 X19.685000 Y31.115000 Z#104 R#100 +G81 X17.145000 Y31.115000 Z#104 R#100 +G81 X17.145000 Y33.655000 Z#104 R#100 +G81 X17.145000 Y28.575000 Z#104 R#100 +G81 X19.685000 Y28.575000 Z#104 R#100 +G81 X19.685000 Y26.035000 Z#104 R#100 +G81 X19.685000 Y23.495000 Z#104 R#100 +G81 X17.145000 Y23.495000 Z#104 R#100 +G81 X17.145000 Y26.035000 Z#104 R#100 +G81 X17.145000 Y20.955000 Z#104 R#100 +G81 X17.145000 Y18.415000 Z#104 R#100 +G81 X17.145000 Y15.875000 Z#104 R#100 +G81 X17.145000 Y13.335000 Z#104 R#100 +G81 X19.685000 Y13.335000 Z#104 R#100 +G81 X19.685000 Y15.875000 Z#104 R#100 +G81 X19.685000 Y18.415000 Z#104 R#100 +G81 X19.685000 Y20.955000 Z#104 R#100 +G81 X111.125000 Y44.450000 Z#104 R#100 +G81 X111.125000 Y54.610000 Z#104 R#100 +G81 X121.285000 Y54.610000 Z#104 R#100 +G81 X125.095000 Y54.610000 Z#104 R#100 +G81 X125.095000 Y44.450000 Z#104 R#100 +G81 X121.285000 Y44.450000 Z#104 R#100 +G81 X125.095000 Y34.290000 Z#104 R#100 +G81 X135.255000 Y34.290000 Z#104 R#100 +G81 X135.255000 Y44.450000 Z#104 R#100 +G81 X135.255000 Y54.610000 Z#104 R#100 +G81 X135.255000 Y66.040000 Z#104 R#100 +G81 X125.095000 Y66.040000 Z#104 R#100 +M5 M9 M2 +(end, total distance 478.38mm = 18.83in) diff --git a/doc/aic-0.8890.drill.gcode b/doc/aic-0.8890.drill.gcode new file mode 100644 index 0000000..c46fc09 --- /dev/null +++ b/doc/aic-0.8890.drill.gcode @@ -0,0 +1,142 @@ +(Created by G-code exporter) +(Wed Jul 15 16:09:51 2015) +(Units: mm) +(Board size: 180.34 x 104.14 mm) +(Drill file: 129 drills) +(Drill diameter: 0.889000 mm) +#100=2.000000 (safe Z) +#104=-2.000000 (drill depth) +(---------------------------------) +G17 G21 G90 G64 P0.003 M3 S3000 M7 F50.000000 +G0 Z#100 +G81 X24.130000 Y7.620000 Z#104 R#100 +G81 X24.130000 Y10.160000 Z#104 R#100 +G81 X24.130000 Y15.240000 Z#104 R#100 +G81 X24.130000 Y17.780000 Z#104 R#100 +G81 X26.670000 Y15.240000 Z#104 R#100 +G81 X40.005000 Y17.780000 Z#104 R#100 +G81 X41.910000 Y15.875000 Z#104 R#100 +G81 X53.975000 Y10.160000 Z#104 R#100 +G81 X70.485000 Y15.240000 Z#104 R#100 +G81 X78.740000 Y21.590000 Z#104 R#100 +G81 X80.645000 Y19.685000 Z#104 R#100 +G81 X82.550000 Y17.780000 Z#104 R#100 +G81 X85.725000 Y10.160000 Z#104 R#100 +G81 X116.205000 Y24.765000 Z#104 R#100 +G81 X116.205000 Y27.940000 Z#104 R#100 +G81 X118.745000 Y27.940000 Z#104 R#100 +G81 X118.745000 Y31.750000 Z#104 R#100 +G81 X116.205000 Y31.750000 Z#104 R#100 +G81 X116.205000 Y34.290000 Z#104 R#100 +G81 X118.745000 Y34.290000 Z#104 R#100 +G81 X121.285000 Y39.370000 Z#104 R#100 +G81 X125.095000 Y39.370000 Z#104 R#100 +G81 X127.635000 Y39.370000 Z#104 R#100 +G81 X132.080000 Y34.290000 Z#104 R#100 +G81 X135.255000 Y31.750000 Z#104 R#100 +G81 X135.255000 Y27.940000 Z#104 R#100 +G81 X132.080000 Y24.765000 Z#104 R#100 +G81 X125.095000 Y27.940000 Z#104 R#100 +G81 X123.190000 Y29.845000 Z#104 R#100 +G81 X123.190000 Y24.765000 Z#104 R#100 +G81 X119.380000 Y20.320000 Z#104 R#100 +G81 X130.810000 Y7.620000 Z#104 R#100 +G81 X135.255000 Y39.370000 Z#104 R#100 +G81 X135.255000 Y49.530000 Z#104 R#100 +G81 X135.255000 Y59.690000 Z#104 R#100 +G81 X135.255000 Y62.230000 Z#104 R#100 +G81 X132.715000 Y59.690000 Z#104 R#100 +G81 X139.700000 Y62.230000 Z#104 R#100 +G81 X141.605000 Y57.785000 Z#104 R#100 +G81 X139.700000 Y72.390000 Z#104 R#100 +G81 X132.715000 Y76.835000 Z#104 R#100 +G81 X131.445000 Y85.090000 Z#104 R#100 +G81 X128.905000 Y85.090000 Z#104 R#100 +G81 X139.700000 Y85.090000 Z#104 R#100 +G81 X141.605000 Y88.265000 Z#104 R#100 +G81 X160.020000 Y78.105000 Z#104 R#100 +G81 X160.020000 Y75.336400 Z#104 R#100 +G81 X160.020000 Y72.567800 Z#104 R#100 +G81 X160.020000 Y69.799200 Z#104 R#100 +G81 X160.020000 Y67.030600 Z#104 R#100 +G81 X162.560000 Y68.427600 Z#104 R#100 +G81 X162.560000 Y71.196200 Z#104 R#100 +G81 X162.560000 Y73.964800 Z#104 R#100 +G81 X162.560000 Y76.733400 Z#104 R#100 +G81 X125.095000 Y59.690000 Z#104 R#100 +G81 X118.745000 Y59.690000 Z#104 R#100 +G81 X116.205000 Y59.690000 Z#104 R#100 +G81 X113.665000 Y59.690000 Z#104 R#100 +G81 X118.745000 Y62.230000 Z#104 R#100 +G81 X118.745000 Y66.040000 Z#104 R#100 +G81 X116.205000 Y66.040000 Z#104 R#100 +G81 X111.760000 Y66.040000 Z#104 R#100 +G81 X109.855000 Y66.040000 Z#104 R#100 +G81 X107.315000 Y66.040000 Z#104 R#100 +G81 X101.600000 Y66.040000 Z#104 R#100 +G81 X99.060000 Y66.040000 Z#104 R#100 +G81 X93.345000 Y66.040000 Z#104 R#100 +G81 X88.900000 Y67.945000 Z#104 R#100 +G81 X83.185000 Y66.040000 Z#104 R#100 +G81 X81.915000 Y67.945000 Z#104 R#100 +G81 X78.740000 Y66.040000 Z#104 R#100 +G81 X78.740000 Y62.230000 Z#104 R#100 +G81 X82.550000 Y62.230000 Z#104 R#100 +G81 X72.390000 Y69.850000 Z#104 R#100 +G81 X67.945000 Y69.850000 Z#104 R#100 +G81 X68.580000 Y66.040000 Z#104 R#100 +G81 X63.500000 Y66.040000 Z#104 R#100 +G81 X60.325000 Y62.230000 Z#104 R#100 +G81 X53.340000 Y66.040000 Z#104 R#100 +G81 X48.895000 Y66.040000 Z#104 R#100 +G81 X48.895000 Y62.230000 Z#104 R#100 +G81 X38.735000 Y66.040000 Z#104 R#100 +G81 X34.290000 Y66.040000 Z#104 R#100 +G81 X27.305000 Y64.135000 Z#104 R#100 +G81 X24.130000 Y66.040000 Z#104 R#100 +G81 X24.130000 Y76.835000 Z#104 R#100 +G81 X37.465000 Y83.820000 Z#104 R#100 +G81 X41.275000 Y83.820000 Z#104 R#100 +G81 X45.085000 Y83.820000 Z#104 R#100 +G81 X48.260000 Y86.360000 Z#104 R#100 +G81 X45.085000 Y93.980000 Z#104 R#100 +G81 X41.275000 Y93.980000 Z#104 R#100 +G81 X37.465000 Y93.980000 Z#104 R#100 +G81 X60.325000 Y81.915000 Z#104 R#100 +G81 X63.500000 Y83.820000 Z#104 R#100 +G81 X67.945000 Y83.820000 Z#104 R#100 +G81 X67.945000 Y80.010000 Z#104 R#100 +G81 X72.390000 Y80.010000 Z#104 R#100 +G81 X72.390000 Y83.820000 Z#104 R#100 +G81 X76.200000 Y86.360000 Z#104 R#100 +G81 X72.390000 Y93.980000 Z#104 R#100 +G81 X67.945000 Y93.980000 Z#104 R#100 +G81 X63.500000 Y93.980000 Z#104 R#100 +G81 X88.900000 Y96.520000 Z#104 R#100 +G81 X92.710000 Y93.980000 Z#104 R#100 +G81 X97.155000 Y96.520000 Z#104 R#100 +G81 X100.330000 Y92.710000 Z#104 R#100 +G81 X100.330000 Y90.170000 Z#104 R#100 +G81 X101.600000 Y85.090000 Z#104 R#100 +G81 X99.060000 Y85.090000 Z#104 R#100 +G81 X103.505000 Y81.915000 Z#104 R#100 +G81 X106.680000 Y85.090000 Z#104 R#100 +G81 X109.220000 Y85.090000 Z#104 R#100 +G81 X109.220000 Y81.915000 Z#104 R#100 +G81 X113.665000 Y76.835000 Z#104 R#100 +G81 X111.760000 Y73.025000 Z#104 R#100 +G81 X105.410000 Y88.900000 Z#104 R#100 +G81 X106.680000 Y91.440000 Z#104 R#100 +G81 X109.220000 Y91.440000 Z#104 R#100 +G81 X111.760000 Y96.520000 Z#104 R#100 +G81 X92.710000 Y83.820000 Z#104 R#100 +G81 X70.485000 Y57.785000 Z#104 R#100 +G81 X53.975000 Y36.195000 Z#104 R#100 +G81 X111.125000 Y39.370000 Z#104 R#100 +G81 X111.125000 Y49.530000 Z#104 R#100 +G81 X113.665000 Y52.705000 Z#104 R#100 +G81 X121.285000 Y49.530000 Z#104 R#100 +G81 X125.095000 Y49.530000 Z#104 R#100 +G81 X125.095000 Y47.625000 Z#104 R#100 +M5 M9 M2 +(end, total distance 949.65mm = 37.39in) diff --git a/doc/aic-bottom.gcode b/doc/aic-bottom.gcode new file mode 100644 index 0000000..e4b2d84 --- /dev/null +++ b/doc/aic-bottom.gcode @@ -0,0 +1,8980 @@ +(Created by G-code exporter) +(Wed Jul 15 16:09:51 2015) +(Units: mm) +(Board size: 180.34 x 104.14 mm) +(Accuracy 600 dpi) +(Tool diameter: 0.200000 mm) +#100=2.000000 (safe Z) +#101=-0.050000 (cutting depth) +#102=25.000000 (plunge feedrate) +#103=50.000000 (feedrate) +(with predrilling) +(---------------------------------) +G17 G21 G90 G64 P0.003 M3 S3000 M7 +G0 Z#100 +(polygon 1) +G0 X129.286000 Y104.140000 (start point) +G1 Z#101 F#102 +F#103 +G1 X129.286000 Y104.055333 +G1 X129.455333 Y103.886000 +G1 X170.222333 Y103.886000 +G1 X170.391667 Y104.055333 +G1 X170.391667 Y104.140000 +G1 X129.286000 Y104.140000 +G0 Z#100 +(polygon end, distance 82.52) +(polygon 2) +G0 X74.125667 Y102.192667 (start point) +G1 Z#101 F#102 +F#103 +G1 X73.871667 Y101.981000 +G1 X73.660000 Y101.727000 +G1 X73.660000 Y101.473000 +G1 X73.787000 Y101.219000 +G1 X74.041000 Y101.007333 +G1 X74.041000 Y94.530333 +G1 X73.787000 Y94.318667 +G1 X73.660000 Y94.064667 +G1 X73.660000 Y93.810667 +G1 X73.871667 Y93.556667 +G1 X74.125667 Y93.345000 +G1 X74.422000 Y93.345000 +G1 X74.676000 Y93.556667 +G1 X74.887667 Y93.810667 +G1 X74.887667 Y94.064667 +G1 X74.760667 Y94.318667 +G1 X74.506667 Y94.530333 +G1 X74.506667 Y101.007333 +G1 X74.760667 Y101.219000 +G1 X74.887667 Y101.473000 +G1 X74.887667 Y101.727000 +G1 X74.676000 Y101.981000 +G1 X74.422000 Y102.192667 +G1 X74.125667 Y102.192667 +G0 Z#100 +(polygon end, distance 19.67) +(polygon 3) +G0 X61.510333 Y101.811667 (start point) +G1 Z#101 F#102 +F#103 +G1 X58.843333 Y99.187000 +G1 X58.801000 Y98.975333 +G1 X58.547000 Y98.763667 +G1 X58.420000 Y98.509667 +G1 X58.420000 Y98.255667 +G1 X58.631667 Y98.001667 +G1 X58.885667 Y97.790000 +G1 X59.182000 Y97.790000 +G1 X59.436000 Y98.001667 +G1 X59.647667 Y98.255667 +G1 X59.647667 Y98.509667 +G1 X59.520667 Y98.763667 +G1 X59.266667 Y98.975333 +G1 X61.679667 Y101.346000 +G1 X69.723000 Y101.346000 +G1 X71.162333 Y99.949000 +G1 X71.120000 Y99.525667 +G1 X71.331667 Y99.271667 +G1 X71.585667 Y99.060000 +G1 X71.882000 Y99.060000 +G1 X72.136000 Y99.271667 +G1 X72.347667 Y99.525667 +G1 X72.347667 Y99.822000 +G1 X72.136000 Y100.076000 +G1 X71.882000 Y100.287667 +G1 X71.501000 Y100.245333 +G1 X69.892333 Y101.811667 +G1 X61.510333 Y101.811667 +G0 Z#100 +(polygon end, distance 34.76) +(polygon 4) +G0 X76.750333 Y101.811667 (start point) +G1 Z#101 F#102 +F#103 +G1 X75.946000 Y101.007333 +G1 X75.946000 Y93.387333 +G1 X75.438000 Y92.921667 +G1 X70.400333 Y92.921667 +G1 X70.188667 Y93.175667 +G1 X69.934667 Y93.302667 +G1 X69.680667 Y93.302667 +G1 X69.426667 Y93.091000 +G1 X69.215000 Y92.837000 +G1 X69.215000 Y92.540667 +G1 X69.426667 Y92.286667 +G1 X69.680667 Y92.075000 +G1 X69.934667 Y92.075000 +G1 X70.188667 Y92.202000 +G1 X70.400333 Y92.456000 +G1 X75.607333 Y92.456000 +G1 X76.411667 Y93.260333 +G1 X76.411667 Y100.880333 +G1 X76.919667 Y101.346000 +G1 X135.763000 Y101.346000 +G1 X136.906000 Y100.245333 +G1 X136.906000 Y92.794667 +G1 X135.678333 Y91.524667 +G1 X135.339667 Y91.651667 +G1 X134.958667 Y91.609333 +G1 X134.620000 Y91.397667 +G1 X134.408333 Y91.059000 +G1 X134.408333 Y90.508667 +G1 X134.620000 Y90.170000 +G1 X134.958667 Y89.958333 +G1 X135.509000 Y89.958333 +G1 X135.847667 Y90.170000 +G1 X136.059333 Y90.508667 +G1 X136.101667 Y90.889667 +G1 X135.974667 Y91.186000 +G1 X137.371667 Y92.625333 +G1 X137.371667 Y100.372333 +G1 X135.932333 Y101.811667 +G1 X76.750333 Y101.811667 +G0 Z#100 +(polygon end, distance 178.06) +(polygon 5) +G0 X67.775667 Y100.287667 (start point) +G1 Z#101 F#102 +F#103 +G1 X67.521667 Y100.076000 +G1 X67.310000 Y99.822000 +G1 X67.310000 Y99.568000 +G1 X67.437000 Y99.314000 +G1 X67.691000 Y99.102333 +G1 X67.691000 Y94.784333 +G1 X67.310000 Y94.572667 +G1 X67.098333 Y94.234000 +G1 X67.098333 Y93.683667 +G1 X67.310000 Y93.345000 +G1 X67.648667 Y93.133333 +G1 X68.199000 Y93.133333 +G1 X68.537667 Y93.345000 +G1 X68.749333 Y93.683667 +G1 X68.749333 Y94.234000 +G1 X68.537667 Y94.572667 +G1 X68.156667 Y94.784333 +G1 X68.156667 Y99.102333 +G1 X68.410667 Y99.314000 +G1 X68.537667 Y99.568000 +G1 X68.537667 Y99.822000 +G1 X68.326000 Y100.076000 +G1 X68.072000 Y100.287667 +G1 X67.775667 Y100.287667 +G0 Z#100 +(polygon end, distance 16.91) +(polygon 6) +G0 X77.935667 Y100.287667 (start point) +G1 Z#101 F#102 +F#103 +G1 X77.681667 Y100.076000 +G1 X77.470000 Y99.822000 +G1 X77.470000 Y99.525667 +G1 X77.681667 Y99.271667 +G1 X77.935667 Y99.060000 +G1 X78.189667 Y99.060000 +G1 X78.443667 Y99.187000 +G1 X78.655333 Y99.441000 +G1 X116.882333 Y99.441000 +G1 X117.094000 Y99.187000 +G1 X117.348000 Y99.060000 +G1 X117.602000 Y99.060000 +G1 X117.856000 Y99.271667 +G1 X118.067667 Y99.525667 +G1 X118.067667 Y99.822000 +G1 X117.856000 Y100.076000 +G1 X117.602000 Y100.287667 +G1 X117.348000 Y100.287667 +G1 X117.094000 Y100.160667 +G1 X116.882333 Y99.906667 +G1 X78.655333 Y99.906667 +G1 X78.443667 Y100.160667 +G1 X78.189667 Y100.287667 +G1 X77.935667 Y100.287667 +G0 Z#100 +(polygon end, distance 83.17) +(polygon 7) +G0 X79.798333 Y99.356333 (start point) +G1 Z#101 F#102 +F#103 +G1 X79.375000 Y99.144667 +G1 X78.570667 Y98.298000 +G1 X78.401333 Y97.959333 +G1 X78.401333 Y95.631000 +G1 X77.258333 Y94.445667 +G1 X77.131333 Y94.064667 +G1 X77.173667 Y92.413667 +G1 X77.427667 Y92.032667 +G1 X77.808667 Y91.778667 +G1 X78.359000 Y91.778667 +G1 X78.740000 Y92.032667 +G1 X78.994000 Y92.413667 +G1 X79.036333 Y93.556667 +G1 X80.137000 Y94.699667 +G1 X80.264000 Y94.953667 +G1 X80.348667 Y97.409000 +G1 X86.614000 Y97.451333 +G1 X87.630000 Y96.393000 +G1 X87.757000 Y95.927333 +G1 X88.011000 Y95.631000 +G1 X88.307333 Y95.377000 +G1 X88.730667 Y95.250000 +G1 X89.027000 Y95.250000 +G1 X89.450333 Y95.377000 +G1 X89.662000 Y95.546333 +G1 X96.350667 Y95.546333 +G1 X96.562333 Y95.377000 +G1 X96.985667 Y95.250000 +G1 X97.282000 Y95.250000 +G1 X97.705333 Y95.377000 +G1 X97.917000 Y95.546333 +G1 X108.246333 Y95.546333 +G1 X108.288667 Y91.143667 +G1 X108.542667 Y90.762667 +G1 X108.923667 Y90.508667 +G1 X109.474000 Y90.508667 +G1 X109.855000 Y90.762667 +G1 X110.109000 Y91.143667 +G1 X110.151333 Y95.546333 +G1 X110.955667 Y95.546333 +G1 X111.167333 Y95.377000 +G1 X111.590667 Y95.250000 +G1 X111.887000 Y95.250000 +G1 X112.310333 Y95.377000 +G1 X112.522000 Y95.546333 +G1 X117.094000 Y95.588667 +G1 X117.686667 Y95.631000 +G1 X117.686667 Y96.054333 +G1 X119.126000 Y97.451333 +G1 X127.889000 Y97.451333 +G1 X129.286000 Y96.012000 +G1 X129.286000 Y95.631000 +G1 X129.921000 Y95.588667 +G1 X130.386667 Y95.588667 +G1 X131.021667 Y95.631000 +G1 X131.064000 Y96.266000 +G1 X131.064000 Y96.731667 +G1 X131.021667 Y97.366667 +G1 X130.640667 Y97.366667 +G1 X128.778000 Y99.187000 +G1 X128.439333 Y99.356333 +G1 X118.533333 Y99.356333 +G1 X118.194667 Y99.187000 +G1 X116.416667 Y97.451333 +G1 X112.522000 Y97.451333 +G1 X112.310333 Y97.620667 +G1 X111.887000 Y97.747667 +G1 X111.590667 Y97.747667 +G1 X111.167333 Y97.620667 +G1 X110.955667 Y97.451333 +G1 X97.917000 Y97.451333 +G1 X97.705333 Y97.620667 +G1 X97.282000 Y97.747667 +G1 X96.985667 Y97.747667 +G1 X96.562333 Y97.620667 +G1 X96.350667 Y97.451333 +G1 X89.662000 Y97.451333 +G1 X89.450333 Y97.620667 +G1 X88.984667 Y97.747667 +G1 X87.503000 Y99.187000 +G1 X87.164333 Y99.356333 +G1 X79.798333 Y99.356333 +G0 Z#100 +(polygon end, distance 134.79) +(polygon 8) +G0 X43.053000 Y98.848333 (start point) +G1 Z#101 F#102 +F#103 +G1 X42.799000 Y98.679000 +G1 X41.105667 Y96.943333 +G1 X31.834667 Y96.943333 +G1 X31.496000 Y97.282000 +G1 X31.157333 Y97.366667 +G1 X30.776333 Y97.324333 +G1 X30.437667 Y97.070333 +G1 X30.268333 Y96.774000 +G1 X30.268333 Y96.223667 +G1 X30.437667 Y95.927333 +G1 X30.776333 Y95.673333 +G1 X31.157333 Y95.631000 +G1 X31.496000 Y95.715667 +G1 X31.834667 Y96.054333 +G1 X40.809333 Y96.054333 +G1 X40.809333 Y94.699667 +G1 X40.470667 Y94.361000 +G1 X40.386000 Y94.022333 +G1 X40.428333 Y93.641333 +G1 X40.682333 Y93.302667 +G1 X40.978667 Y93.133333 +G1 X41.529000 Y93.133333 +G1 X41.825333 Y93.302667 +G1 X42.079333 Y93.641333 +G1 X42.121667 Y94.022333 +G1 X42.037000 Y94.361000 +G1 X41.698333 Y94.699667 +G1 X41.698333 Y96.308333 +G1 X43.307000 Y97.959333 +G1 X54.440667 Y97.959333 +G1 X55.626000 Y96.731667 +G1 X55.668333 Y96.223667 +G1 X55.880000 Y95.885000 +G1 X56.218667 Y95.673333 +G1 X56.726667 Y95.631000 +G1 X57.319333 Y95.080667 +G1 X57.319333 Y93.429667 +G1 X57.023000 Y93.133333 +G1 X55.964667 Y93.133333 +G1 X55.626000 Y93.472000 +G1 X55.287333 Y93.556667 +G1 X54.906333 Y93.514333 +G1 X54.567667 Y93.260333 +G1 X54.398333 Y92.964000 +G1 X54.398333 Y92.413667 +G1 X54.567667 Y92.117333 +G1 X54.906333 Y91.863333 +G1 X55.287333 Y91.821000 +G1 X55.626000 Y91.905667 +G1 X55.964667 Y92.244333 +G1 X57.023000 Y92.244333 +G1 X57.361667 Y91.905667 +G1 X57.700333 Y91.821000 +G1 X57.996667 Y91.863333 +G1 X59.351333 Y90.466333 +G1 X59.605333 Y90.339333 +G1 X78.570667 Y90.339333 +G1 X82.719333 Y86.148333 +G1 X82.719333 Y85.809667 +G1 X82.380667 Y85.471000 +G1 X82.296000 Y85.132333 +G1 X82.338333 Y84.751333 +G1 X82.592333 Y84.412667 +G1 X82.888667 Y84.243333 +G1 X83.439000 Y84.243333 +G1 X83.735333 Y84.412667 +G1 X83.989333 Y84.751333 +G1 X84.031667 Y85.132333 +G1 X83.947000 Y85.471000 +G1 X83.608333 Y85.809667 +G1 X83.608333 Y86.402333 +G1 X83.523667 Y86.571667 +G1 X79.036333 Y91.101333 +G1 X78.782333 Y91.228333 +G1 X59.859333 Y91.228333 +G1 X58.589333 Y92.456000 +G1 X58.631667 Y92.752333 +G1 X58.547000 Y93.091000 +G1 X58.208333 Y93.429667 +G1 X58.208333 Y95.292333 +G1 X58.123667 Y95.461667 +G1 X57.361667 Y96.266000 +G1 X57.319333 Y96.774000 +G1 X57.107667 Y97.112667 +G1 X56.769000 Y97.324333 +G1 X56.261000 Y97.366667 +G1 X54.821667 Y98.763667 +G1 X54.652333 Y98.848333 +G1 X43.053000 Y98.848333 +G0 Z#100 +(polygon end, distance 140.50) +(polygon 9) +G0 X11.811000 Y98.763667 (start point) +G1 Z#101 F#102 +F#103 +G1 X11.430000 Y98.636667 +G1 X11.049000 Y98.425000 +G1 X10.668000 Y98.001667 +G1 X10.456333 Y97.536000 +G1 X10.456333 Y96.731667 +G1 X10.710333 Y96.181333 +G1 X11.176000 Y95.758000 +G1 X11.641667 Y95.546333 +G1 X12.446000 Y95.546333 +G1 X12.996333 Y95.800333 +G1 X13.419667 Y96.266000 +G1 X13.631333 Y96.731667 +G1 X13.631333 Y97.536000 +G1 X13.419667 Y98.001667 +G1 X12.996333 Y98.467333 +G1 X12.446000 Y98.721333 +G1 X11.811000 Y98.763667 +G0 Z#100 +(polygon end, distance 10.21) +(polygon 10) +G0 X165.481000 Y98.763667 (start point) +G1 Z#101 F#102 +F#103 +G1 X165.100000 Y98.636667 +G1 X164.719000 Y98.425000 +G1 X164.338000 Y98.001667 +G1 X164.126333 Y97.536000 +G1 X164.126333 Y96.731667 +G1 X164.380333 Y96.181333 +G1 X164.846000 Y95.758000 +G1 X165.311667 Y95.546333 +G1 X166.116000 Y95.546333 +G1 X166.666333 Y95.800333 +G1 X167.089667 Y96.266000 +G1 X167.301333 Y96.731667 +G1 X167.301333 Y97.536000 +G1 X167.089667 Y98.001667 +G1 X166.666333 Y98.467333 +G1 X166.116000 Y98.721333 +G1 X165.481000 Y98.763667 +G0 Z#100 +(polygon end, distance 10.21) +(polygon 11) +G0 X25.146000 Y97.366667 (start point) +G1 Z#101 F#102 +F#103 +G1 X25.146000 Y95.631000 +G1 X26.881667 Y95.631000 +G1 X26.881667 Y96.054333 +G1 X27.135667 Y96.054333 +G1 X28.871333 Y94.276333 +G1 X29.125333 Y94.149333 +G1 X31.538333 Y94.149333 +G1 X31.919333 Y93.810667 +G1 X31.919333 Y93.429667 +G1 X31.580667 Y93.091000 +G1 X31.496000 Y92.752333 +G1 X31.538333 Y92.371333 +G1 X31.792333 Y92.032667 +G1 X32.088667 Y91.863333 +G1 X32.639000 Y91.863333 +G1 X32.935333 Y92.032667 +G1 X33.189333 Y92.371333 +G1 X33.231667 Y92.752333 +G1 X33.147000 Y93.091000 +G1 X32.808333 Y93.429667 +G1 X32.808333 Y94.022333 +G1 X32.723667 Y94.191667 +G1 X32.046333 Y94.911333 +G1 X31.792333 Y95.038333 +G1 X29.337000 Y95.038333 +G1 X27.601333 Y96.816333 +G1 X27.347333 Y96.943333 +G1 X26.881667 Y96.943333 +G1 X26.881667 Y97.366667 +G1 X25.146000 Y97.366667 +G0 Z#100 +(polygon end, distance 24.63) +(polygon 12) +G0 X50.546000 Y97.366667 (start point) +G1 Z#101 F#102 +F#103 +G1 X50.546000 Y95.631000 +G1 X52.281667 Y95.631000 +G1 X52.281667 Y97.366667 +G1 X50.546000 Y97.366667 +G0 Z#100 +(polygon end, distance 6.94) +(polygon 13) +G0 X84.285667 Y97.366667 (start point) +G1 Z#101 F#102 +F#103 +G1 X84.031667 Y97.282000 +G1 X83.650667 Y96.901000 +G1 X83.566000 Y96.562333 +G1 X83.608333 Y96.181333 +G1 X83.862333 Y95.842667 +G1 X84.158667 Y95.673333 +G1 X84.709000 Y95.673333 +G1 X85.047667 Y95.885000 +G1 X85.259333 Y96.223667 +G1 X85.259333 Y96.774000 +G1 X85.047667 Y97.112667 +G1 X84.709000 Y97.324333 +G1 X84.285667 Y97.366667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 14) +G0 X121.750667 Y97.366667 (start point) +G1 Z#101 F#102 +F#103 +G1 X121.496667 Y97.282000 +G1 X121.115667 Y96.901000 +G1 X121.031000 Y96.562333 +G1 X121.073333 Y96.181333 +G1 X121.327333 Y95.842667 +G1 X121.623667 Y95.673333 +G1 X122.174000 Y95.673333 +G1 X122.512667 Y95.885000 +G1 X122.724333 Y96.223667 +G1 X122.724333 Y96.774000 +G1 X122.512667 Y97.112667 +G1 X122.174000 Y97.324333 +G1 X121.750667 Y97.366667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 15) +G0 X135.085667 Y97.366667 (start point) +G1 Z#101 F#102 +F#103 +G1 X134.831667 Y97.282000 +G1 X134.450667 Y96.901000 +G1 X134.366000 Y96.604667 +G1 X134.366000 Y96.350667 +G1 X134.493000 Y96.054333 +G1 X132.588000 Y94.191667 +G1 X127.550333 Y94.191667 +G1 X127.338667 Y94.445667 +G1 X127.084667 Y94.572667 +G1 X126.830667 Y94.572667 +G1 X126.576667 Y94.361000 +G1 X126.365000 Y94.107000 +G1 X126.365000 Y93.810667 +G1 X126.576667 Y93.556667 +G1 X126.830667 Y93.345000 +G1 X127.084667 Y93.345000 +G1 X127.338667 Y93.472000 +G1 X127.550333 Y93.726000 +G1 X132.757333 Y93.726000 +G1 X134.831667 Y95.758000 +G1 X135.128000 Y95.631000 +G1 X135.509000 Y95.673333 +G1 X135.847667 Y95.885000 +G1 X136.059333 Y96.223667 +G1 X136.059333 Y96.774000 +G1 X135.847667 Y97.112667 +G1 X135.509000 Y97.324333 +G1 X135.085667 Y97.366667 +G0 Z#100 +(polygon end, distance 24.14) +(polygon 16) +G0 X95.080667 Y95.207667 (start point) +G1 Z#101 F#102 +F#103 +G1 X94.826667 Y94.996000 +G1 X94.615000 Y94.742000 +G1 X94.615000 Y94.445667 +G1 X94.826667 Y94.191667 +G1 X95.080667 Y93.980000 +G1 X95.377000 Y93.980000 +G1 X95.631000 Y94.149333 +G1 X104.605667 Y94.149333 +G1 X106.214333 Y92.498333 +G1 X106.214333 Y92.286667 +G1 X105.791000 Y92.286667 +G1 X105.791000 Y90.551000 +G1 X107.526667 Y90.551000 +G1 X107.526667 Y92.286667 +G1 X107.103333 Y92.286667 +G1 X107.103333 Y92.752333 +G1 X106.976333 Y93.006333 +G1 X104.986667 Y94.953667 +G1 X104.817333 Y95.038333 +G1 X95.631000 Y95.038333 +G1 X95.377000 Y95.207667 +G1 X95.080667 Y95.207667 +G0 Z#100 +(polygon end, distance 33.28) +(polygon 17) +G0 X15.790333 Y94.826667 (start point) +G1 Z#101 F#102 +F#103 +G1 X14.351000 Y93.387333 +G1 X14.351000 Y92.921667 +G1 X13.716000 Y92.921667 +G1 X13.716000 Y91.186000 +G1 X15.451667 Y91.186000 +G1 X15.451667 Y92.921667 +G1 X14.816667 Y92.921667 +G1 X14.816667 Y93.260333 +G1 X15.959667 Y94.361000 +G1 X26.543000 Y94.361000 +G1 X27.051000 Y93.895333 +G1 X27.051000 Y93.514333 +G1 X26.670000 Y93.302667 +G1 X26.458333 Y92.964000 +G1 X26.458333 Y92.413667 +G1 X26.670000 Y92.075000 +G1 X27.008667 Y91.863333 +G1 X27.559000 Y91.863333 +G1 X27.897667 Y92.075000 +G1 X28.109333 Y92.413667 +G1 X28.109333 Y92.964000 +G1 X27.897667 Y93.302667 +G1 X27.516667 Y93.514333 +G1 X27.516667 Y94.022333 +G1 X26.712333 Y94.826667 +G1 X15.790333 Y94.826667 +G0 Z#100 +(polygon end, distance 40.04) +(polygon 18) +G0 X37.295667 Y94.826667 (start point) +G1 Z#101 F#102 +F#103 +G1 X37.041667 Y94.742000 +G1 X36.660667 Y94.361000 +G1 X36.576000 Y94.022333 +G1 X36.618333 Y93.641333 +G1 X36.872333 Y93.302667 +G1 X37.168667 Y93.133333 +G1 X37.719000 Y93.133333 +G1 X38.057667 Y93.345000 +G1 X38.269333 Y93.683667 +G1 X38.269333 Y94.234000 +G1 X38.057667 Y94.572667 +G1 X37.719000 Y94.784333 +G1 X37.295667 Y94.826667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 19) +G0 X44.196000 Y94.826667 (start point) +G1 Z#101 F#102 +F#103 +G1 X44.196000 Y93.091000 +G1 X45.931667 Y93.091000 +G1 X45.931667 Y94.826667 +G1 X44.196000 Y94.826667 +G0 Z#100 +(polygon end, distance 6.94) +(polygon 20) +G0 X62.611000 Y94.826667 (start point) +G1 Z#101 F#102 +F#103 +G1 X62.611000 Y93.091000 +G1 X64.346667 Y93.091000 +G1 X64.346667 Y94.826667 +G1 X62.611000 Y94.826667 +G0 Z#100 +(polygon end, distance 6.94) +(polygon 21) +G0 X72.220667 Y94.826667 (start point) +G1 Z#101 F#102 +F#103 +G1 X71.966667 Y94.742000 +G1 X71.585667 Y94.361000 +G1 X71.501000 Y94.022333 +G1 X71.543333 Y93.641333 +G1 X71.797333 Y93.302667 +G1 X72.093667 Y93.133333 +G1 X72.644000 Y93.133333 +G1 X72.982667 Y93.345000 +G1 X73.194333 Y93.683667 +G1 X73.194333 Y94.234000 +G1 X72.982667 Y94.572667 +G1 X72.644000 Y94.784333 +G1 X72.220667 Y94.826667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 22) +G0 X91.821000 Y94.826667 (start point) +G1 Z#101 F#102 +F#103 +G1 X91.821000 Y93.091000 +G1 X93.556667 Y93.091000 +G1 X93.556667 Y94.826667 +G1 X91.821000 Y94.826667 +G0 Z#100 +(polygon end, distance 6.94) +(polygon 23) +G0 X24.595667 Y93.556667 (start point) +G1 Z#101 F#102 +F#103 +G1 X24.341667 Y93.472000 +G1 X23.960667 Y93.091000 +G1 X23.876000 Y92.752333 +G1 X23.918333 Y92.371333 +G1 X24.172333 Y92.032667 +G1 X24.468667 Y91.863333 +G1 X25.019000 Y91.863333 +G1 X25.357667 Y92.075000 +G1 X25.569333 Y92.413667 +G1 X25.569333 Y92.964000 +G1 X25.357667 Y93.302667 +G1 X25.019000 Y93.514333 +G1 X24.595667 Y93.556667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 24) +G0 X29.675667 Y93.556667 (start point) +G1 Z#101 F#102 +F#103 +G1 X29.421667 Y93.472000 +G1 X29.040667 Y93.091000 +G1 X28.956000 Y92.752333 +G1 X28.998333 Y92.371333 +G1 X29.252333 Y92.032667 +G1 X29.591000 Y91.863333 +G1 X29.591000 Y90.889667 +G1 X28.490333 Y89.746667 +G1 X20.489333 Y89.746667 +G1 X20.277667 Y90.127667 +G1 X19.939000 Y90.339333 +G1 X19.388667 Y90.339333 +G1 X19.050000 Y90.127667 +G1 X18.838333 Y89.789000 +G1 X18.838333 Y89.238667 +G1 X19.007667 Y88.942333 +G1 X19.346333 Y88.688333 +G1 X18.584333 Y88.688333 +G1 X17.949333 Y89.281000 +G1 X17.991667 Y89.577333 +G1 X17.907000 Y89.916000 +G1 X17.568333 Y90.254667 +G1 X17.568333 Y91.313000 +G1 X17.907000 Y91.651667 +G1 X17.991667 Y91.990333 +G1 X17.949333 Y92.371333 +G1 X17.695333 Y92.710000 +G1 X17.399000 Y92.879333 +G1 X16.848667 Y92.879333 +G1 X16.552333 Y92.710000 +G1 X16.298333 Y92.371333 +G1 X16.256000 Y91.990333 +G1 X16.340667 Y91.651667 +G1 X16.679333 Y91.313000 +G1 X16.679333 Y90.254667 +G1 X16.340667 Y89.916000 +G1 X16.256000 Y89.577333 +G1 X16.298333 Y89.196333 +G1 X16.552333 Y88.857667 +G1 X16.848667 Y88.688333 +G1 X17.356667 Y88.646000 +G1 X18.161000 Y87.884000 +G1 X18.330333 Y87.799333 +G1 X19.346333 Y87.799333 +G1 X19.007667 Y87.545333 +G1 X18.838333 Y87.249000 +G1 X18.838333 Y86.698667 +G1 X19.050000 Y86.360000 +G1 X19.388667 Y86.148333 +G1 X19.939000 Y86.148333 +G1 X20.277667 Y86.360000 +G1 X20.489333 Y86.698667 +G1 X20.489333 Y87.249000 +G1 X20.320000 Y87.545333 +G1 X19.981333 Y87.799333 +G1 X20.150667 Y87.799333 +G1 X21.124333 Y86.783333 +G1 X21.124333 Y85.005333 +G1 X21.209000 Y84.836000 +G1 X23.156333 Y82.846333 +G1 X23.410333 Y82.719333 +G1 X33.697333 Y82.719333 +G1 X33.951333 Y82.846333 +G1 X36.957000 Y85.894333 +G1 X47.498000 Y85.894333 +G1 X47.836667 Y85.555667 +G1 X48.175333 Y85.471000 +G1 X48.556333 Y85.513333 +G1 X48.895000 Y85.767333 +G1 X49.064333 Y86.063667 +G1 X49.064333 Y86.614000 +G1 X48.895000 Y86.910333 +G1 X48.556333 Y87.164333 +G1 X48.175333 Y87.206667 +G1 X47.836667 Y87.122000 +G1 X47.498000 Y86.783333 +G1 X36.745333 Y86.783333 +G1 X36.491333 Y86.656333 +G1 X33.485667 Y83.608333 +G1 X30.268333 Y83.608333 +G1 X30.268333 Y84.328000 +G1 X30.607000 Y84.666667 +G1 X30.691667 Y85.005333 +G1 X30.649333 Y85.386333 +G1 X30.395333 Y85.725000 +G1 X30.099000 Y85.894333 +G1 X29.548667 Y85.894333 +G1 X29.252333 Y85.725000 +G1 X28.998333 Y85.386333 +G1 X28.956000 Y85.005333 +G1 X29.040667 Y84.666667 +G1 X29.379333 Y84.328000 +G1 X29.379333 Y83.608333 +G1 X23.664333 Y83.608333 +G1 X22.013333 Y85.217000 +G1 X22.013333 Y87.037333 +G1 X21.928667 Y87.206667 +G1 X20.616333 Y88.561333 +G1 X20.362333 Y88.688333 +G1 X19.981333 Y88.688333 +G1 X20.320000 Y88.942333 +G1 X20.489333 Y89.281000 +G1 X28.617333 Y89.281000 +G1 X30.056667 Y90.720333 +G1 X30.056667 Y91.863333 +G1 X30.437667 Y92.075000 +G1 X30.649333 Y92.413667 +G1 X30.649333 Y92.964000 +G1 X30.437667 Y93.302667 +G1 X30.099000 Y93.514333 +G1 X29.675667 Y93.556667 +G0 Z#100 +(polygon end, distance 123.64) +(polygon 25) +G0 X49.995667 Y93.556667 (start point) +G1 Z#101 F#102 +F#103 +G1 X49.741667 Y93.472000 +G1 X49.360667 Y93.091000 +G1 X49.276000 Y92.752333 +G1 X49.318333 Y92.371333 +G1 X49.572333 Y92.032667 +G1 X49.868667 Y91.863333 +G1 X50.419000 Y91.863333 +G1 X50.757667 Y92.075000 +G1 X50.969333 Y92.413667 +G1 X50.969333 Y92.964000 +G1 X50.757667 Y93.302667 +G1 X50.419000 Y93.514333 +G1 X49.995667 Y93.556667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 26) +G0 X52.535667 Y93.556667 (start point) +G1 Z#101 F#102 +F#103 +G1 X52.281667 Y93.472000 +G1 X51.900667 Y93.091000 +G1 X51.816000 Y92.752333 +G1 X51.858333 Y92.371333 +G1 X52.112333 Y92.032667 +G1 X52.451000 Y91.863333 +G1 X52.451000 Y91.482333 +G1 X51.943000 Y91.016667 +G1 X41.825333 Y91.016667 +G1 X41.613667 Y91.270667 +G1 X41.359667 Y91.397667 +G1 X41.148000 Y91.397667 +G1 X40.894000 Y91.270667 +G1 X40.682333 Y91.016667 +G1 X35.475333 Y91.016667 +G1 X32.131000 Y87.672333 +G1 X32.131000 Y85.936667 +G1 X31.496000 Y85.936667 +G1 X31.496000 Y84.201000 +G1 X33.231667 Y84.201000 +G1 X33.231667 Y85.936667 +G1 X32.596667 Y85.936667 +G1 X32.596667 Y87.503000 +G1 X35.602333 Y90.551000 +G1 X40.682333 Y90.551000 +G1 X40.894000 Y90.297000 +G1 X41.148000 Y90.170000 +G1 X41.359667 Y90.170000 +G1 X41.613667 Y90.297000 +G1 X41.825333 Y90.551000 +G1 X52.112333 Y90.551000 +G1 X52.916667 Y91.355333 +G1 X52.916667 Y91.863333 +G1 X53.297667 Y92.075000 +G1 X53.509333 Y92.413667 +G1 X53.509333 Y92.964000 +G1 X53.297667 Y93.302667 +G1 X52.959000 Y93.514333 +G1 X52.535667 Y93.556667 +G0 Z#100 +(polygon end, distance 60.03) +(polygon 27) +G0 X80.475667 Y93.556667 (start point) +G1 Z#101 F#102 +F#103 +G1 X80.221667 Y93.472000 +G1 X79.840667 Y93.091000 +G1 X79.756000 Y92.752333 +G1 X79.798333 Y92.371333 +G1 X80.052333 Y92.032667 +G1 X80.348667 Y91.863333 +G1 X80.899000 Y91.863333 +G1 X81.237667 Y92.075000 +G1 X81.449333 Y92.413667 +G1 X81.449333 Y92.964000 +G1 X81.237667 Y93.302667 +G1 X80.899000 Y93.514333 +G1 X80.475667 Y93.556667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 28) +G0 X83.015667 Y93.556667 (start point) +G1 Z#101 F#102 +F#103 +G1 X82.761667 Y93.472000 +G1 X82.380667 Y93.091000 +G1 X82.296000 Y92.752333 +G1 X82.338333 Y92.371333 +G1 X82.592333 Y92.032667 +G1 X82.888667 Y91.863333 +G1 X83.227333 Y91.821000 +G1 X83.566000 Y91.905667 +G1 X83.904667 Y92.244333 +G1 X84.963000 Y92.244333 +G1 X85.301667 Y91.905667 +G1 X85.640333 Y91.821000 +G1 X86.021333 Y91.863333 +G1 X86.360000 Y92.117333 +G1 X86.529333 Y92.413667 +G1 X86.529333 Y92.964000 +G1 X86.360000 Y93.260333 +G1 X86.021333 Y93.514333 +G1 X85.640333 Y93.556667 +G1 X85.301667 Y93.472000 +G1 X84.963000 Y93.133333 +G1 X83.904667 Y93.133333 +G1 X83.566000 Y93.472000 +G1 X83.269667 Y93.556667 +G1 X83.015667 Y93.556667 +G0 Z#100 +(polygon end, distance 11.13) +(polygon 29) +G0 X99.441000 Y93.556667 (start point) +G1 Z#101 F#102 +F#103 +G1 X99.441000 Y91.821000 +G1 X101.176667 Y91.821000 +G1 X101.176667 Y93.556667 +G1 X99.441000 Y93.556667 +G0 Z#100 +(polygon end, distance 6.94) +(polygon 30) +G0 X115.400667 Y93.556667 (start point) +G1 Z#101 F#102 +F#103 +G1 X115.146667 Y93.472000 +G1 X114.765667 Y93.091000 +G1 X114.681000 Y92.752333 +G1 X114.723333 Y92.371333 +G1 X114.977333 Y92.032667 +G1 X115.273667 Y91.863333 +G1 X115.824000 Y91.863333 +G1 X116.162667 Y92.075000 +G1 X116.374333 Y92.413667 +G1 X116.374333 Y92.964000 +G1 X116.162667 Y93.302667 +G1 X115.824000 Y93.514333 +G1 X115.400667 Y93.556667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 31) +G0 X117.940667 Y93.556667 (start point) +G1 Z#101 F#102 +F#103 +G1 X117.686667 Y93.472000 +G1 X117.305667 Y93.091000 +G1 X117.221000 Y92.752333 +G1 X117.263333 Y92.371333 +G1 X117.517333 Y92.032667 +G1 X117.813667 Y91.863333 +G1 X118.152333 Y91.821000 +G1 X118.491000 Y91.905667 +G1 X118.829667 Y92.244333 +G1 X119.888000 Y92.244333 +G1 X120.226667 Y91.905667 +G1 X120.565333 Y91.821000 +G1 X120.861667 Y91.863333 +G1 X124.756333 Y87.926333 +G1 X125.010333 Y87.799333 +G1 X140.843000 Y87.799333 +G1 X141.181667 Y87.460667 +G1 X141.520333 Y87.376000 +G1 X141.901333 Y87.418333 +G1 X142.240000 Y87.672333 +G1 X142.409333 Y87.968667 +G1 X142.409333 Y88.519000 +G1 X142.240000 Y88.815333 +G1 X141.901333 Y89.069333 +G1 X141.520333 Y89.111667 +G1 X141.181667 Y89.027000 +G1 X140.843000 Y88.688333 +G1 X125.222000 Y88.688333 +G1 X121.496667 Y92.456000 +G1 X121.454333 Y92.964000 +G1 X121.285000 Y93.260333 +G1 X120.946333 Y93.514333 +G1 X120.565333 Y93.556667 +G1 X120.226667 Y93.472000 +G1 X119.888000 Y93.133333 +G1 X118.829667 Y93.133333 +G1 X118.491000 Y93.472000 +G1 X118.194667 Y93.556667 +G1 X117.940667 Y93.556667 +G0 Z#100 +(polygon end, distance 57.32) +(polygon 32) +G0 X123.020667 Y93.556667 (start point) +G1 Z#101 F#102 +F#103 +G1 X122.766667 Y93.472000 +G1 X122.385667 Y93.091000 +G1 X122.301000 Y92.752333 +G1 X122.343333 Y92.371333 +G1 X122.597333 Y92.032667 +G1 X122.893667 Y91.863333 +G1 X123.444000 Y91.863333 +G1 X123.782667 Y92.075000 +G1 X123.994333 Y92.413667 +G1 X123.994333 Y92.964000 +G1 X123.782667 Y93.302667 +G1 X123.444000 Y93.514333 +G1 X123.020667 Y93.556667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 33) +G0 X19.515667 Y92.921667 (start point) +G1 Z#101 F#102 +F#103 +G1 X19.261667 Y92.837000 +G1 X18.880667 Y92.456000 +G1 X18.796000 Y92.117333 +G1 X18.838333 Y91.736333 +G1 X19.092333 Y91.397667 +G1 X19.388667 Y91.228333 +G1 X19.939000 Y91.228333 +G1 X20.277667 Y91.440000 +G1 X20.489333 Y91.778667 +G1 X20.489333 Y92.329000 +G1 X20.277667 Y92.667667 +G1 X19.939000 Y92.879333 +G1 X19.515667 Y92.921667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 34) +G0 X129.286000 Y91.651667 (start point) +G1 Z#101 F#102 +F#103 +G1 X129.286000 Y89.916000 +G1 X131.021667 Y89.916000 +G1 X131.021667 Y91.651667 +G1 X129.286000 Y91.651667 +G0 Z#100 +(polygon end, distance 6.94) +(polygon 35) +G0 X100.160667 Y91.016667 (start point) +G1 Z#101 F#102 +F#103 +G1 X99.906667 Y90.932000 +G1 X99.525667 Y90.551000 +G1 X99.441000 Y90.212333 +G1 X99.483333 Y89.831333 +G1 X99.737333 Y89.492667 +G1 X100.033667 Y89.323333 +G1 X100.541667 Y89.281000 +G1 X101.346000 Y88.519000 +G1 X101.515333 Y88.434333 +G1 X104.648000 Y88.434333 +G1 X104.986667 Y88.095667 +G1 X105.325333 Y88.011000 +G1 X105.706333 Y88.053333 +G1 X106.045000 Y88.307333 +G1 X106.214333 Y88.603667 +G1 X106.214333 Y89.154000 +G1 X106.045000 Y89.450333 +G1 X105.706333 Y89.704333 +G1 X105.325333 Y89.746667 +G1 X104.986667 Y89.662000 +G1 X104.648000 Y89.323333 +G1 X101.727000 Y89.323333 +G1 X101.176667 Y89.916000 +G1 X101.134333 Y90.424000 +G1 X100.922667 Y90.762667 +G1 X100.584000 Y90.974333 +G1 X100.160667 Y91.016667 +G0 Z#100 +(polygon end, distance 17.21) +(polygon 36) +G0 X14.435667 Y90.381667 (start point) +G1 Z#101 F#102 +F#103 +G1 X14.181667 Y90.297000 +G1 X13.800667 Y89.916000 +G1 X13.716000 Y89.577333 +G1 X13.758333 Y89.196333 +G1 X14.012333 Y88.857667 +G1 X14.308667 Y88.688333 +G1 X14.859000 Y88.688333 +G1 X15.197667 Y88.900000 +G1 X15.409333 Y89.238667 +G1 X15.409333 Y89.789000 +G1 X15.197667 Y90.127667 +G1 X14.859000 Y90.339333 +G1 X14.435667 Y90.381667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 37) +G0 X44.915667 Y90.127667 (start point) +G1 Z#101 F#102 +F#103 +G1 X44.661667 Y89.916000 +G1 X44.450000 Y89.662000 +G1 X44.450000 Y89.365667 +G1 X44.661667 Y89.111667 +G1 X44.915667 Y88.900000 +G1 X45.169667 Y88.900000 +G1 X45.423667 Y89.027000 +G1 X45.635333 Y89.281000 +G1 X77.385333 Y89.281000 +G1 X80.391000 Y86.233000 +G1 X80.391000 Y85.894333 +G1 X80.010000 Y85.682667 +G1 X79.798333 Y85.344000 +G1 X79.798333 Y84.793667 +G1 X80.010000 Y84.455000 +G1 X80.348667 Y84.243333 +G1 X80.899000 Y84.243333 +G1 X81.237667 Y84.455000 +G1 X81.449333 Y84.793667 +G1 X81.449333 Y85.344000 +G1 X81.237667 Y85.682667 +G1 X80.856667 Y85.894333 +G1 X80.856667 Y86.402333 +G1 X77.512333 Y89.746667 +G1 X45.635333 Y89.746667 +G1 X45.423667 Y90.000667 +G1 X45.169667 Y90.127667 +G1 X44.915667 Y90.127667 +G0 Z#100 +(polygon end, distance 81.76) +(polygon 38) +G0 X37.295667 Y88.857667 (start point) +G1 Z#101 F#102 +F#103 +G1 X37.041667 Y88.646000 +G1 X36.830000 Y88.392000 +G1 X36.830000 Y88.095667 +G1 X37.041667 Y87.841667 +G1 X37.295667 Y87.630000 +G1 X37.549667 Y87.630000 +G1 X37.803667 Y87.757000 +G1 X38.015333 Y88.011000 +G1 X51.943000 Y88.011000 +G1 X52.451000 Y87.545333 +G1 X52.451000 Y85.894333 +G1 X52.070000 Y85.682667 +G1 X51.858333 Y85.344000 +G1 X51.858333 Y84.793667 +G1 X52.070000 Y84.455000 +G1 X52.408667 Y84.243333 +G1 X52.959000 Y84.243333 +G1 X53.297667 Y84.455000 +G1 X53.509333 Y84.793667 +G1 X53.509333 Y85.344000 +G1 X53.297667 Y85.682667 +G1 X52.916667 Y85.894333 +G1 X52.916667 Y87.672333 +G1 X52.112333 Y88.476667 +G1 X38.015333 Y88.476667 +G1 X37.803667 Y88.730667 +G1 X37.549667 Y88.857667 +G1 X37.295667 Y88.857667 +G0 Z#100 +(polygon end, distance 41.56) +(polygon 39) +G0 X67.775667 Y88.222667 (start point) +G1 Z#101 F#102 +F#103 +G1 X67.521667 Y88.053333 +G1 X67.352333 Y87.841667 +G1 X55.160333 Y87.841667 +G1 X53.721000 Y86.402333 +G1 X53.721000 Y83.862333 +G1 X52.578000 Y82.761667 +G1 X46.905333 Y82.761667 +G1 X46.693667 Y83.015667 +G1 X46.439667 Y83.142667 +G1 X46.185667 Y83.142667 +G1 X45.931667 Y82.931000 +G1 X45.720000 Y82.677000 +G1 X45.720000 Y82.380667 +G1 X45.931667 Y82.126667 +G1 X46.185667 Y81.915000 +G1 X46.439667 Y81.915000 +G1 X46.693667 Y82.042000 +G1 X46.905333 Y82.296000 +G1 X52.747333 Y82.296000 +G1 X54.186667 Y83.735333 +G1 X54.186667 Y86.275333 +G1 X55.329667 Y87.376000 +G1 X67.352333 Y87.376000 +G1 X67.564000 Y87.122000 +G1 X67.818000 Y86.995000 +G1 X68.072000 Y86.995000 +G1 X68.326000 Y87.206667 +G1 X68.537667 Y87.460667 +G1 X68.537667 Y87.757000 +G1 X68.326000 Y88.011000 +G1 X68.072000 Y88.222667 +G1 X67.775667 Y88.222667 +G0 Z#100 +(polygon end, distance 54.77) +(polygon 40) +G0 X99.483333 Y87.926333 (start point) +G1 Z#101 F#102 +F#103 +G1 X99.060000 Y87.714667 +G1 X98.213333 Y86.825667 +G1 X98.086333 Y86.444667 +G1 X98.128667 Y84.793667 +G1 X98.382667 Y84.412667 +G1 X98.763667 Y84.158667 +G1 X99.314000 Y84.158667 +G1 X99.695000 Y84.412667 +G1 X99.949000 Y84.793667 +G1 X100.033667 Y85.979000 +G1 X103.081667 Y86.021333 +G1 X104.902000 Y84.243333 +G1 X105.283000 Y84.116333 +G1 X106.934000 Y84.158667 +G1 X107.315000 Y84.412667 +G1 X107.569000 Y84.793667 +G1 X107.569000 Y85.344000 +G1 X107.315000 Y85.725000 +G1 X106.934000 Y85.979000 +G1 X105.791000 Y86.021333 +G1 X104.013000 Y87.757000 +G1 X103.674333 Y87.926333 +G1 X99.483333 Y87.926333 +G0 Z#100 +(polygon end, distance 25.55) +(polygon 41) +G0 X14.435667 Y87.841667 (start point) +G1 Z#101 F#102 +F#103 +G1 X14.181667 Y87.757000 +G1 X13.800667 Y87.376000 +G1 X13.716000 Y87.037333 +G1 X13.758333 Y86.656333 +G1 X14.012333 Y86.317667 +G1 X14.308667 Y86.148333 +G1 X14.859000 Y86.148333 +G1 X15.197667 Y86.360000 +G1 X15.409333 Y86.698667 +G1 X15.409333 Y87.249000 +G1 X15.197667 Y87.587667 +G1 X14.859000 Y87.799333 +G1 X14.435667 Y87.841667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 42) +G0 X16.975667 Y87.841667 (start point) +G1 Z#101 F#102 +F#103 +G1 X16.721667 Y87.757000 +G1 X16.340667 Y87.376000 +G1 X16.256000 Y87.037333 +G1 X16.298333 Y86.656333 +G1 X16.552333 Y86.317667 +G1 X16.848667 Y86.148333 +G1 X17.399000 Y86.148333 +G1 X17.737667 Y86.360000 +G1 X17.949333 Y86.698667 +G1 X17.949333 Y87.249000 +G1 X17.737667 Y87.587667 +G1 X17.399000 Y87.799333 +G1 X16.975667 Y87.841667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 43) +G0 X75.988333 Y87.587667 (start point) +G1 Z#101 F#102 +F#103 +G1 X75.565000 Y87.418333 +G1 X75.311000 Y87.206667 +G1 X75.099333 Y86.952667 +G1 X64.092667 Y86.952667 +G1 X63.754000 Y87.164333 +G1 X63.203667 Y87.164333 +G1 X62.865000 Y86.952667 +G1 X62.653333 Y86.614000 +G1 X62.653333 Y86.063667 +G1 X62.865000 Y85.725000 +G1 X63.203667 Y85.513333 +G1 X63.754000 Y85.513333 +G1 X64.092667 Y85.725000 +G1 X75.099333 Y85.725000 +G1 X75.480333 Y85.301667 +G1 X75.861333 Y85.132333 +G1 X76.496333 Y85.132333 +G1 X76.877333 Y85.301667 +G1 X77.216000 Y85.640333 +G1 X77.385333 Y86.021333 +G1 X77.385333 Y86.656333 +G1 X77.216000 Y87.037333 +G1 X76.877333 Y87.376000 +G1 X76.496333 Y87.545333 +G1 X75.988333 Y87.587667 +G0 Z#100 +(polygon end, distance 32.57) +(polygon 44) +G0 X124.968000 Y87.418333 (start point) +G1 Z#101 F#102 +F#103 +G1 X124.714000 Y87.249000 +G1 X123.444000 Y85.936667 +G1 X122.301000 Y85.936667 +G1 X122.301000 Y84.201000 +G1 X124.036667 Y84.201000 +G1 X124.036667 Y85.344000 +G1 X125.264333 Y86.529333 +G1 X129.370667 Y86.529333 +G1 X130.556000 Y85.301667 +G1 X130.556000 Y84.201000 +G1 X132.291667 Y84.201000 +G1 X132.291667 Y84.624333 +G1 X138.938000 Y84.624333 +G1 X139.276667 Y84.285667 +G1 X139.615333 Y84.201000 +G1 X139.996333 Y84.243333 +G1 X140.335000 Y84.497333 +G1 X140.504333 Y84.793667 +G1 X140.504333 Y85.344000 +G1 X140.335000 Y85.640333 +G1 X139.996333 Y85.894333 +G1 X139.615333 Y85.936667 +G1 X139.276667 Y85.852000 +G1 X138.938000 Y85.513333 +G1 X132.291667 Y85.513333 +G1 X132.291667 Y85.936667 +G1 X131.148667 Y85.936667 +G1 X129.836333 Y87.291333 +G1 X129.582333 Y87.418333 +G1 X124.968000 Y87.418333 +G0 Z#100 +(polygon end, distance 44.81) +(polygon 45) +G0 X160.993667 Y86.825667 (start point) +G1 Z#101 F#102 +F#103 +G1 X160.612667 Y86.698667 +G1 X160.189333 Y86.487000 +G1 X159.723667 Y86.021333 +G1 X159.512000 Y85.598000 +G1 X159.385000 Y85.174667 +G1 X159.385000 Y84.709000 +G1 X159.512000 Y84.285667 +G1 X159.723667 Y83.862333 +G1 X160.189333 Y83.396667 +G1 X160.612667 Y83.185000 +G1 X161.036000 Y83.058000 +G1 X161.501667 Y83.058000 +G1 X161.925000 Y83.185000 +G1 X162.348333 Y83.396667 +G1 X162.814000 Y83.862333 +G1 X163.025667 Y84.285667 +G1 X163.152667 Y84.709000 +G1 X163.152667 Y85.174667 +G1 X163.025667 Y85.598000 +G1 X162.814000 Y86.021333 +G1 X162.348333 Y86.487000 +G1 X161.925000 Y86.698667 +G1 X161.501667 Y86.825667 +G1 X160.993667 Y86.825667 +G0 Z#100 +(polygon end, distance 11.82) +(polygon 46) +G0 X128.693333 Y86.021333 (start point) +G1 Z#101 F#102 +F#103 +G1 X128.270000 Y85.809667 +G1 X128.058333 Y85.513333 +G1 X127.931333 Y85.217000 +G1 X127.931333 Y83.608333 +G1 X128.100667 Y83.269667 +G1 X134.366000 Y76.962000 +G1 X134.366000 Y76.581000 +G1 X135.001000 Y76.538667 +G1 X135.466667 Y76.538667 +G1 X136.101667 Y76.581000 +G1 X136.144000 Y77.216000 +G1 X136.144000 Y77.681667 +G1 X136.101667 Y78.316667 +G1 X135.678333 Y78.316667 +G1 X129.836333 Y84.201000 +G1 X129.794000 Y85.344000 +G1 X129.540000 Y85.725000 +G1 X129.159000 Y85.979000 +G1 X128.693333 Y86.021333 +G0 Z#100 +(polygon end, distance 27.14) +(polygon 47) +G0 X24.595667 Y85.936667 (start point) +G1 Z#101 F#102 +F#103 +G1 X24.341667 Y85.852000 +G1 X23.960667 Y85.471000 +G1 X23.876000 Y85.132333 +G1 X23.918333 Y84.751333 +G1 X24.172333 Y84.412667 +G1 X24.468667 Y84.243333 +G1 X25.019000 Y84.243333 +G1 X25.357667 Y84.455000 +G1 X25.569333 Y84.793667 +G1 X25.569333 Y85.344000 +G1 X25.357667 Y85.682667 +G1 X25.019000 Y85.894333 +G1 X24.595667 Y85.936667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 48) +G0 X27.135667 Y85.936667 (start point) +G1 Z#101 F#102 +F#103 +G1 X26.881667 Y85.852000 +G1 X26.500667 Y85.471000 +G1 X26.416000 Y85.132333 +G1 X26.458333 Y84.751333 +G1 X26.712333 Y84.412667 +G1 X27.008667 Y84.243333 +G1 X27.559000 Y84.243333 +G1 X27.897667 Y84.455000 +G1 X28.109333 Y84.793667 +G1 X28.109333 Y85.344000 +G1 X27.897667 Y85.682667 +G1 X27.559000 Y85.894333 +G1 X27.135667 Y85.936667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 49) +G0 X49.995667 Y85.936667 (start point) +G1 Z#101 F#102 +F#103 +G1 X49.741667 Y85.852000 +G1 X49.360667 Y85.471000 +G1 X49.276000 Y85.132333 +G1 X49.318333 Y84.751333 +G1 X49.572333 Y84.412667 +G1 X49.868667 Y84.243333 +G1 X50.419000 Y84.243333 +G1 X50.757667 Y84.455000 +G1 X50.969333 Y84.793667 +G1 X50.969333 Y85.344000 +G1 X50.757667 Y85.682667 +G1 X50.419000 Y85.894333 +G1 X49.995667 Y85.936667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 50) +G0 X55.075667 Y85.936667 (start point) +G1 Z#101 F#102 +F#103 +G1 X54.821667 Y85.852000 +G1 X54.440667 Y85.471000 +G1 X54.356000 Y85.132333 +G1 X54.398333 Y84.751333 +G1 X54.652333 Y84.412667 +G1 X54.948667 Y84.243333 +G1 X55.499000 Y84.243333 +G1 X55.837667 Y84.455000 +G1 X56.049333 Y84.793667 +G1 X56.049333 Y85.344000 +G1 X55.837667 Y85.682667 +G1 X55.499000 Y85.894333 +G1 X55.075667 Y85.936667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 51) +G0 X56.896000 Y85.936667 (start point) +G1 Z#101 F#102 +F#103 +G1 X56.896000 Y84.201000 +G1 X58.631667 Y84.201000 +G1 X58.631667 Y85.936667 +G1 X56.896000 Y85.936667 +G0 Z#100 +(polygon end, distance 6.94) +(polygon 52) +G0 X77.935667 Y85.936667 (start point) +G1 Z#101 F#102 +F#103 +G1 X77.681667 Y85.852000 +G1 X77.300667 Y85.471000 +G1 X77.216000 Y85.132333 +G1 X77.258333 Y84.751333 +G1 X77.512333 Y84.412667 +G1 X77.808667 Y84.243333 +G1 X78.359000 Y84.243333 +G1 X78.697667 Y84.455000 +G1 X78.909333 Y84.793667 +G1 X78.909333 Y85.344000 +G1 X78.697667 Y85.682667 +G1 X78.359000 Y85.894333 +G1 X77.935667 Y85.936667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 53) +G0 X84.836000 Y85.936667 (start point) +G1 Z#101 F#102 +F#103 +G1 X84.836000 Y84.201000 +G1 X86.571667 Y84.201000 +G1 X86.571667 Y85.936667 +G1 X84.836000 Y85.936667 +G0 Z#100 +(polygon end, distance 6.94) +(polygon 54) +G0 X100.711000 Y85.936667 (start point) +G1 Z#101 F#102 +F#103 +G1 X100.711000 Y84.201000 +G1 X102.446667 Y84.201000 +G1 X102.446667 Y85.936667 +G1 X100.711000 Y85.936667 +G0 Z#100 +(polygon end, distance 6.94) +(polygon 55) +G0 X108.331000 Y85.936667 (start point) +G1 Z#101 F#102 +F#103 +G1 X108.331000 Y84.201000 +G1 X110.066667 Y84.201000 +G1 X110.066667 Y85.936667 +G1 X108.331000 Y85.936667 +G0 Z#100 +(polygon end, distance 6.94) +(polygon 56) +G0 X115.400667 Y85.936667 (start point) +G1 Z#101 F#102 +F#103 +G1 X115.146667 Y85.852000 +G1 X114.765667 Y85.471000 +G1 X114.681000 Y85.132333 +G1 X114.723333 Y84.751333 +G1 X114.977333 Y84.412667 +G1 X115.273667 Y84.243333 +G1 X115.824000 Y84.243333 +G1 X116.162667 Y84.455000 +G1 X116.374333 Y84.793667 +G1 X116.374333 Y85.344000 +G1 X116.162667 Y85.682667 +G1 X115.824000 Y85.894333 +G1 X115.400667 Y85.936667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 57) +G0 X117.940667 Y85.936667 (start point) +G1 Z#101 F#102 +F#103 +G1 X117.686667 Y85.852000 +G1 X117.305667 Y85.471000 +G1 X117.221000 Y85.132333 +G1 X117.263333 Y84.751333 +G1 X117.517333 Y84.412667 +G1 X117.813667 Y84.243333 +G1 X118.364000 Y84.243333 +G1 X118.702667 Y84.455000 +G1 X118.914333 Y84.793667 +G1 X118.914333 Y85.344000 +G1 X118.702667 Y85.682667 +G1 X118.364000 Y85.894333 +G1 X117.940667 Y85.936667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 58) +G0 X120.480667 Y85.936667 (start point) +G1 Z#101 F#102 +F#103 +G1 X120.226667 Y85.852000 +G1 X119.845667 Y85.471000 +G1 X119.761000 Y85.132333 +G1 X119.803333 Y84.751333 +G1 X120.057333 Y84.412667 +G1 X120.353667 Y84.243333 +G1 X120.904000 Y84.243333 +G1 X121.242667 Y84.455000 +G1 X121.454333 Y84.793667 +G1 X121.454333 Y85.344000 +G1 X121.242667 Y85.682667 +G1 X120.904000 Y85.894333 +G1 X120.480667 Y85.936667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 59) +G0 X14.435667 Y85.301667 (start point) +G1 Z#101 F#102 +F#103 +G1 X14.181667 Y85.217000 +G1 X13.800667 Y84.836000 +G1 X13.716000 Y84.497333 +G1 X13.758333 Y84.116333 +G1 X14.012333 Y83.777667 +G1 X14.308667 Y83.608333 +G1 X14.859000 Y83.608333 +G1 X15.197667 Y83.820000 +G1 X15.409333 Y84.158667 +G1 X15.409333 Y84.709000 +G1 X15.197667 Y85.047667 +G1 X14.859000 Y85.259333 +G1 X14.435667 Y85.301667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 60) +G0 X16.975667 Y85.301667 (start point) +G1 Z#101 F#102 +F#103 +G1 X16.721667 Y85.217000 +G1 X16.340667 Y84.836000 +G1 X16.256000 Y84.497333 +G1 X16.298333 Y84.116333 +G1 X16.552333 Y83.777667 +G1 X16.848667 Y83.608333 +G1 X17.399000 Y83.608333 +G1 X17.737667 Y83.820000 +G1 X17.949333 Y84.158667 +G1 X17.949333 Y84.709000 +G1 X17.737667 Y85.047667 +G1 X17.399000 Y85.259333 +G1 X16.975667 Y85.301667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 61) +G0 X19.515667 Y85.301667 (start point) +G1 Z#101 F#102 +F#103 +G1 X19.261667 Y85.217000 +G1 X18.880667 Y84.836000 +G1 X18.796000 Y84.497333 +G1 X18.838333 Y84.116333 +G1 X19.092333 Y83.777667 +G1 X19.388667 Y83.608333 +G1 X19.939000 Y83.608333 +G1 X20.277667 Y83.820000 +G1 X20.489333 Y84.158667 +G1 X20.489333 Y84.709000 +G1 X20.277667 Y85.047667 +G1 X19.939000 Y85.259333 +G1 X19.515667 Y85.301667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 62) +G0 X62.780333 Y85.301667 (start point) +G1 Z#101 F#102 +F#103 +G1 X60.833000 Y83.396667 +G1 X56.430333 Y83.396667 +G1 X53.848000 Y80.856667 +G1 X32.935333 Y80.856667 +G1 X32.131000 Y80.052333 +G1 X32.131000 Y79.544333 +G1 X31.750000 Y79.332667 +G1 X31.538333 Y78.994000 +G1 X31.538333 Y78.443667 +G1 X31.750000 Y78.105000 +G1 X32.088667 Y77.893333 +G1 X32.639000 Y77.893333 +G1 X32.977667 Y78.105000 +G1 X33.189333 Y78.443667 +G1 X33.189333 Y78.994000 +G1 X32.977667 Y79.332667 +G1 X32.596667 Y79.544333 +G1 X32.596667 Y79.925333 +G1 X33.104667 Y80.391000 +G1 X54.017333 Y80.391000 +G1 X56.599667 Y82.931000 +G1 X61.002333 Y82.931000 +G1 X62.949667 Y84.836000 +G1 X71.035333 Y84.836000 +G1 X71.501000 Y84.328000 +G1 X71.501000 Y82.931000 +G1 X73.236667 Y82.931000 +G1 X73.236667 Y83.566000 +G1 X74.803000 Y83.566000 +G1 X75.480333 Y82.931000 +G1 X83.862333 Y82.931000 +G1 X84.074000 Y82.677000 +G1 X84.328000 Y82.550000 +G1 X84.582000 Y82.550000 +G1 X84.836000 Y82.761667 +G1 X85.047667 Y83.015667 +G1 X85.047667 Y83.312000 +G1 X84.836000 Y83.566000 +G1 X84.582000 Y83.777667 +G1 X84.328000 Y83.777667 +G1 X84.074000 Y83.650667 +G1 X83.862333 Y83.396667 +G1 X75.649667 Y83.396667 +G1 X74.972333 Y84.031667 +G1 X73.236667 Y84.031667 +G1 X73.236667 Y84.666667 +G1 X71.839667 Y84.666667 +G1 X71.162333 Y85.301667 +G1 X62.780333 Y85.301667 +G0 Z#100 +(polygon end, distance 119.95) +(polygon 63) +G0 X36.576000 Y84.666667 (start point) +G1 Z#101 F#102 +F#103 +G1 X36.576000 Y82.931000 +G1 X38.311667 Y82.931000 +G1 X38.311667 Y84.666667 +G1 X36.576000 Y84.666667 +G0 Z#100 +(polygon end, distance 6.94) +(polygon 64) +G0 X40.386000 Y84.666667 (start point) +G1 Z#101 F#102 +F#103 +G1 X40.386000 Y82.931000 +G1 X42.121667 Y82.931000 +G1 X42.121667 Y84.666667 +G1 X40.386000 Y84.666667 +G0 Z#100 +(polygon end, distance 6.94) +(polygon 65) +G0 X44.915667 Y84.666667 (start point) +G1 Z#101 F#102 +F#103 +G1 X44.661667 Y84.582000 +G1 X44.280667 Y84.201000 +G1 X44.196000 Y83.862333 +G1 X44.238333 Y83.481333 +G1 X44.492333 Y83.142667 +G1 X44.788667 Y82.973333 +G1 X45.339000 Y82.973333 +G1 X45.677667 Y83.185000 +G1 X45.889333 Y83.523667 +G1 X45.889333 Y84.074000 +G1 X45.677667 Y84.412667 +G1 X45.339000 Y84.624333 +G1 X44.915667 Y84.666667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 66) +G0 X63.330667 Y84.666667 (start point) +G1 Z#101 F#102 +F#103 +G1 X63.076667 Y84.582000 +G1 X62.695667 Y84.201000 +G1 X62.611000 Y83.862333 +G1 X62.653333 Y83.481333 +G1 X62.907333 Y83.142667 +G1 X63.203667 Y82.973333 +G1 X63.754000 Y82.973333 +G1 X64.092667 Y83.185000 +G1 X64.304333 Y83.566000 +G1 X67.056000 Y83.566000 +G1 X67.056000 Y82.931000 +G1 X68.791667 Y82.931000 +G1 X68.791667 Y84.666667 +G1 X67.056000 Y84.666667 +G1 X67.056000 Y84.031667 +G1 X64.304333 Y84.031667 +G1 X64.092667 Y84.412667 +G1 X63.754000 Y84.624333 +G1 X63.330667 Y84.666667 +G0 Z#100 +(polygon end, distance 16.93) +(polygon 67) +G0 X92.540667 Y84.666667 (start point) +G1 Z#101 F#102 +F#103 +G1 X92.329000 Y84.582000 +G1 X92.032667 Y84.370333 +G1 X91.863333 Y84.074000 +G1 X91.821000 Y83.735333 +G1 X91.905667 Y83.396667 +G1 X92.244333 Y83.058000 +G1 X92.244333 Y82.338333 +G1 X61.044667 Y82.338333 +G1 X60.706000 Y82.677000 +G1 X60.367333 Y82.761667 +G1 X59.986333 Y82.719333 +G1 X59.647667 Y82.465333 +G1 X59.478333 Y82.169000 +G1 X59.478333 Y81.618667 +G1 X59.647667 Y81.322333 +G1 X59.986333 Y81.068333 +G1 X60.367333 Y81.026000 +G1 X60.706000 Y81.110667 +G1 X61.044667 Y81.449333 +G1 X85.259333 Y81.449333 +G1 X85.259333 Y79.459667 +G1 X84.920667 Y79.121000 +G1 X84.836000 Y78.782333 +G1 X84.878333 Y78.401333 +G1 X85.132333 Y78.062667 +G1 X85.428667 Y77.893333 +G1 X85.979000 Y77.893333 +G1 X86.275333 Y78.062667 +G1 X86.529333 Y78.401333 +G1 X86.571667 Y78.782333 +G1 X86.487000 Y79.121000 +G1 X86.148333 Y79.459667 +G1 X86.148333 Y81.449333 +G1 X102.743000 Y81.449333 +G1 X103.081667 Y81.110667 +G1 X103.420333 Y81.026000 +G1 X103.801333 Y81.068333 +G1 X104.140000 Y81.322333 +G1 X104.182333 Y81.449333 +G1 X108.458000 Y81.449333 +G1 X108.796667 Y81.110667 +G1 X109.135333 Y81.026000 +G1 X109.516333 Y81.068333 +G1 X109.855000 Y81.322333 +G1 X110.024333 Y81.618667 +G1 X110.024333 Y82.169000 +G1 X109.855000 Y82.465333 +G1 X109.516333 Y82.719333 +G1 X109.135333 Y82.761667 +G1 X108.796667 Y82.677000 +G1 X108.458000 Y82.338333 +G1 X104.182333 Y82.338333 +G1 X104.140000 Y82.465333 +G1 X103.801333 Y82.719333 +G1 X103.420333 Y82.761667 +G1 X103.081667 Y82.677000 +G1 X102.743000 Y82.338333 +G1 X93.133333 Y82.338333 +G1 X93.133333 Y83.058000 +G1 X93.472000 Y83.396667 +G1 X93.556667 Y83.735333 +G1 X93.514333 Y84.116333 +G1 X93.260333 Y84.455000 +G1 X92.964000 Y84.624333 +G1 X92.540667 Y84.666667 +G0 Z#100 +(polygon end, distance 117.14) +(polygon 68) +G0 X14.435667 Y82.761667 (start point) +G1 Z#101 F#102 +F#103 +G1 X14.181667 Y82.677000 +G1 X13.800667 Y82.296000 +G1 X13.716000 Y81.999667 +G1 X13.716000 Y81.745667 +G1 X13.843000 Y81.491667 +G1 X13.081000 Y80.687333 +G1 X13.081000 Y63.415333 +G1 X13.885333 Y62.611000 +G1 X20.193000 Y62.611000 +G1 X22.775333 Y60.071000 +G1 X38.142333 Y60.071000 +G1 X38.354000 Y59.817000 +G1 X38.608000 Y59.690000 +G1 X38.862000 Y59.690000 +G1 X39.116000 Y59.901667 +G1 X39.327667 Y60.155667 +G1 X39.327667 Y60.452000 +G1 X39.116000 Y60.706000 +G1 X38.862000 Y60.917667 +G1 X38.608000 Y60.917667 +G1 X38.354000 Y60.790667 +G1 X38.142333 Y60.536667 +G1 X22.944667 Y60.536667 +G1 X20.362333 Y63.076667 +G1 X14.054667 Y63.076667 +G1 X13.546667 Y63.542333 +G1 X13.546667 Y80.518000 +G1 X14.139333 Y81.153000 +G1 X14.478000 Y81.026000 +G1 X14.859000 Y81.068333 +G1 X15.197667 Y81.280000 +G1 X15.409333 Y81.618667 +G1 X15.409333 Y82.169000 +G1 X15.197667 Y82.507667 +G1 X14.859000 Y82.719333 +G1 X14.435667 Y82.761667 +G0 Z#100 +(polygon end, distance 96.80) +(polygon 69) +G0 X16.975667 Y82.761667 (start point) +G1 Z#101 F#102 +F#103 +G1 X16.721667 Y82.677000 +G1 X16.340667 Y82.296000 +G1 X16.256000 Y81.957333 +G1 X16.298333 Y81.618667 +G1 X16.467667 Y81.322333 +G1 X16.764000 Y81.110667 +G1 X16.764000 Y80.137000 +G1 X16.467667 Y79.925333 +G1 X16.298333 Y79.629000 +G1 X16.256000 Y79.290333 +G1 X16.340667 Y78.951667 +G1 X16.764000 Y78.528333 +G1 X16.764000 Y78.443667 +G1 X15.113000 Y78.443667 +G1 X14.181667 Y77.554667 +G1 X13.800667 Y77.216000 +G1 X13.716000 Y76.877333 +G1 X13.758333 Y76.496333 +G1 X14.012333 Y76.157667 +G1 X14.308667 Y75.988333 +G1 X14.647333 Y75.946000 +G1 X14.986000 Y76.030667 +G1 X15.367000 Y76.411667 +G1 X15.451667 Y76.750333 +G1 X15.409333 Y77.131333 +G1 X15.113000 Y77.512333 +G1 X15.367000 Y77.724000 +G1 X20.193000 Y77.724000 +G1 X24.511000 Y73.363667 +G1 X24.426333 Y73.109667 +G1 X24.468667 Y72.728667 +G1 X24.722667 Y72.347667 +G1 X25.103667 Y72.093667 +G1 X39.031333 Y72.051333 +G1 X39.073667 Y70.823667 +G1 X39.327667 Y70.442667 +G1 X39.708667 Y70.188667 +G1 X40.259000 Y70.188667 +G1 X40.640000 Y70.442667 +G1 X40.894000 Y70.823667 +G1 X40.936333 Y72.051333 +G1 X59.266667 Y72.051333 +G1 X59.774667 Y71.585667 +G1 X60.113333 Y71.416333 +G1 X75.141667 Y71.416333 +G1 X76.327000 Y70.273333 +G1 X76.708000 Y70.146333 +G1 X78.359000 Y70.188667 +G1 X78.740000 Y70.442667 +G1 X78.994000 Y70.823667 +G1 X78.994000 Y71.374000 +G1 X78.740000 Y71.755000 +G1 X78.359000 Y72.009000 +G1 X77.216000 Y72.051333 +G1 X76.073000 Y73.152000 +G1 X75.734333 Y73.321333 +G1 X60.706000 Y73.321333 +G1 X60.198000 Y73.787000 +G1 X59.859333 Y73.956333 +G1 X56.176333 Y73.956333 +G1 X56.134000 Y78.994000 +G1 X55.880000 Y79.375000 +G1 X55.499000 Y79.629000 +G1 X54.948667 Y79.629000 +G1 X54.567667 Y79.375000 +G1 X54.313667 Y78.994000 +G1 X54.271333 Y73.956333 +G1 X25.230667 Y73.956333 +G1 X25.019000 Y73.871667 +G1 X20.404667 Y78.443667 +G1 X17.483667 Y78.443667 +G1 X17.483667 Y78.528333 +G1 X17.907000 Y78.951667 +G1 X17.991667 Y79.290333 +G1 X17.949333 Y79.629000 +G1 X17.780000 Y79.925333 +G1 X17.483667 Y80.137000 +G1 X17.483667 Y81.068333 +G1 X17.907000 Y81.491667 +G1 X17.991667 Y81.830333 +G1 X17.949333 Y82.211333 +G1 X17.695333 Y82.550000 +G1 X17.399000 Y82.719333 +G1 X16.975667 Y82.761667 +G0 Z#100 +(polygon end, distance 164.34) +(polygon 70) +G0 X19.515667 Y82.761667 (start point) +G1 Z#101 F#102 +F#103 +G1 X19.261667 Y82.677000 +G1 X18.880667 Y82.296000 +G1 X18.796000 Y81.957333 +G1 X18.838333 Y81.576333 +G1 X19.092333 Y81.237667 +G1 X19.388667 Y81.068333 +G1 X19.939000 Y81.068333 +G1 X20.277667 Y81.280000 +G1 X20.489333 Y81.618667 +G1 X20.489333 Y82.169000 +G1 X20.277667 Y82.507667 +G1 X19.939000 Y82.719333 +G1 X19.515667 Y82.761667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 71) +G0 X24.595667 Y82.507667 (start point) +G1 Z#101 F#102 +F#103 +G1 X24.341667 Y82.296000 +G1 X24.130000 Y82.042000 +G1 X24.130000 Y81.745667 +G1 X24.341667 Y81.491667 +G1 X24.595667 Y81.280000 +G1 X24.849667 Y81.280000 +G1 X25.103667 Y81.407000 +G1 X25.315333 Y81.661000 +G1 X44.492333 Y81.661000 +G1 X44.704000 Y81.407000 +G1 X44.958000 Y81.280000 +G1 X45.212000 Y81.280000 +G1 X45.466000 Y81.491667 +G1 X45.677667 Y81.745667 +G1 X45.677667 Y82.042000 +G1 X45.466000 Y82.296000 +G1 X45.212000 Y82.507667 +G1 X44.958000 Y82.507667 +G1 X44.704000 Y82.380667 +G1 X44.492333 Y82.126667 +G1 X25.315333 Y82.126667 +G1 X25.103667 Y82.380667 +G1 X24.849667 Y82.507667 +G1 X24.595667 Y82.507667 +G0 Z#100 +(polygon end, distance 45.07) +(polygon 72) +G0 X86.825667 Y81.237667 (start point) +G1 Z#101 F#102 +F#103 +G1 X86.571667 Y81.026000 +G1 X86.360000 Y80.772000 +G1 X86.360000 Y80.475667 +G1 X86.571667 Y80.221667 +G1 X86.825667 Y80.010000 +G1 X87.079667 Y80.010000 +G1 X87.333667 Y80.137000 +G1 X87.545333 Y80.391000 +G1 X101.007333 Y80.391000 +G1 X101.219000 Y80.137000 +G1 X101.473000 Y80.010000 +G1 X101.727000 Y80.010000 +G1 X101.981000 Y80.221667 +G1 X102.192667 Y80.475667 +G1 X102.192667 Y80.772000 +G1 X101.981000 Y81.026000 +G1 X101.727000 Y81.237667 +G1 X101.473000 Y81.237667 +G1 X101.219000 Y81.110667 +G1 X101.007333 Y80.856667 +G1 X87.545333 Y80.856667 +G1 X87.333667 Y81.110667 +G1 X87.079667 Y81.237667 +G1 X86.825667 Y81.237667 +G0 Z#100 +(polygon end, distance 33.64) +(polygon 73) +G0 X67.056000 Y80.856667 (start point) +G1 Z#101 F#102 +F#103 +G1 X67.056000 Y79.121000 +G1 X68.791667 Y79.121000 +G1 X68.791667 Y79.756000 +G1 X69.723000 Y79.756000 +G1 X71.670333 Y77.851000 +G1 X74.803000 Y77.851000 +G1 X77.385333 Y75.311000 +G1 X83.862333 Y75.311000 +G1 X84.074000 Y75.057000 +G1 X84.328000 Y74.930000 +G1 X84.582000 Y74.930000 +G1 X84.836000 Y75.141667 +G1 X85.047667 Y75.395667 +G1 X85.047667 Y75.692000 +G1 X84.836000 Y75.946000 +G1 X84.582000 Y76.157667 +G1 X84.328000 Y76.157667 +G1 X84.074000 Y76.030667 +G1 X83.862333 Y75.776667 +G1 X77.554667 Y75.776667 +G1 X74.972333 Y78.316667 +G1 X71.839667 Y78.316667 +G1 X69.892333 Y80.221667 +G1 X68.791667 Y80.221667 +G1 X68.791667 Y80.856667 +G1 X67.056000 Y80.856667 +G0 Z#100 +(polygon end, distance 43.61) +(polygon 74) +G0 X71.501000 Y80.856667 (start point) +G1 Z#101 F#102 +F#103 +G1 X71.501000 Y79.121000 +G1 X73.236667 Y79.121000 +G1 X73.236667 Y79.756000 +G1 X74.845333 Y79.756000 +G1 X77.851000 Y76.708000 +G1 X77.851000 Y76.581000 +G1 X107.357333 Y76.581000 +G1 X107.569000 Y76.327000 +G1 X107.823000 Y76.200000 +G1 X108.077000 Y76.200000 +G1 X108.331000 Y76.411667 +G1 X108.542667 Y76.665667 +G1 X108.542667 Y76.962000 +G1 X108.331000 Y77.216000 +G1 X108.077000 Y77.427667 +G1 X107.823000 Y77.427667 +G1 X107.569000 Y77.300667 +G1 X107.357333 Y77.046667 +G1 X78.189667 Y77.046667 +G1 X74.972333 Y80.221667 +G1 X73.236667 Y80.221667 +G1 X73.236667 Y80.856667 +G1 X71.501000 Y80.856667 +G0 Z#100 +(polygon end, distance 80.78) +(polygon 75) +G0 X14.435667 Y80.221667 (start point) +G1 Z#101 F#102 +F#103 +G1 X14.181667 Y80.137000 +G1 X13.800667 Y79.756000 +G1 X13.716000 Y79.417333 +G1 X13.758333 Y79.036333 +G1 X14.012333 Y78.697667 +G1 X14.308667 Y78.528333 +G1 X14.859000 Y78.528333 +G1 X15.197667 Y78.740000 +G1 X15.409333 Y79.078667 +G1 X15.409333 Y79.629000 +G1 X15.197667 Y79.967667 +G1 X14.859000 Y80.179333 +G1 X14.435667 Y80.221667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 76) +G0 X19.515667 Y80.221667 (start point) +G1 Z#101 F#102 +F#103 +G1 X19.261667 Y80.137000 +G1 X18.880667 Y79.756000 +G1 X18.796000 Y79.417333 +G1 X18.838333 Y79.036333 +G1 X19.092333 Y78.697667 +G1 X19.388667 Y78.528333 +G1 X19.939000 Y78.528333 +G1 X20.277667 Y78.740000 +G1 X20.489333 Y79.078667 +G1 X20.489333 Y79.629000 +G1 X20.277667 Y79.967667 +G1 X19.939000 Y80.179333 +G1 X19.515667 Y80.221667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 77) +G0 X54.525333 Y80.221667 (start point) +G1 Z#101 F#102 +F#103 +G1 X53.721000 Y79.417333 +G1 X53.721000 Y77.554667 +G1 X53.255333 Y77.046667 +G1 X43.264667 Y77.046667 +G1 X42.756667 Y77.512333 +G1 X42.756667 Y77.893333 +G1 X43.137667 Y78.105000 +G1 X43.349333 Y78.443667 +G1 X43.349333 Y78.994000 +G1 X43.137667 Y79.332667 +G1 X42.799000 Y79.544333 +G1 X42.248667 Y79.544333 +G1 X41.910000 Y79.332667 +G1 X41.698333 Y78.994000 +G1 X41.698333 Y78.443667 +G1 X41.910000 Y78.105000 +G1 X42.291000 Y77.893333 +G1 X42.291000 Y77.385333 +G1 X43.095333 Y76.581000 +G1 X53.382333 Y76.581000 +G1 X54.186667 Y77.385333 +G1 X54.186667 Y79.290333 +G1 X54.694667 Y79.756000 +G1 X64.008000 Y79.756000 +G1 X65.955333 Y77.851000 +G1 X69.723000 Y77.851000 +G1 X71.035333 Y76.581000 +G1 X74.168000 Y76.581000 +G1 X76.750333 Y74.041000 +G1 X90.212333 Y74.041000 +G1 X90.424000 Y73.787000 +G1 X90.678000 Y73.660000 +G1 X90.932000 Y73.660000 +G1 X91.186000 Y73.871667 +G1 X91.397667 Y74.125667 +G1 X91.397667 Y74.422000 +G1 X91.186000 Y74.676000 +G1 X90.932000 Y74.887667 +G1 X90.678000 Y74.887667 +G1 X90.424000 Y74.760667 +G1 X90.212333 Y74.506667 +G1 X76.919667 Y74.506667 +G1 X74.337333 Y77.046667 +G1 X71.204667 Y77.046667 +G1 X69.892333 Y78.316667 +G1 X66.124667 Y78.316667 +G1 X64.177333 Y80.221667 +G1 X54.525333 Y80.221667 +G0 Z#100 +(polygon end, distance 114.56) +(polygon 78) +G0 X24.595667 Y79.586667 (start point) +G1 Z#101 F#102 +F#103 +G1 X24.341667 Y79.502000 +G1 X23.960667 Y79.121000 +G1 X23.876000 Y78.782333 +G1 X23.918333 Y78.401333 +G1 X24.172333 Y78.062667 +G1 X24.468667 Y77.893333 +G1 X25.019000 Y77.893333 +G1 X25.357667 Y78.105000 +G1 X25.569333 Y78.443667 +G1 X25.569333 Y78.994000 +G1 X25.357667 Y79.332667 +G1 X25.019000 Y79.544333 +G1 X24.595667 Y79.586667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 79) +G0 X27.135667 Y79.586667 (start point) +G1 Z#101 F#102 +F#103 +G1 X26.881667 Y79.502000 +G1 X26.500667 Y79.121000 +G1 X26.416000 Y78.782333 +G1 X26.458333 Y78.401333 +G1 X26.712333 Y78.062667 +G1 X27.008667 Y77.893333 +G1 X27.559000 Y77.893333 +G1 X27.897667 Y78.105000 +G1 X28.109333 Y78.443667 +G1 X28.109333 Y78.994000 +G1 X27.897667 Y79.332667 +G1 X27.559000 Y79.544333 +G1 X27.135667 Y79.586667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 80) +G0 X29.675667 Y79.586667 (start point) +G1 Z#101 F#102 +F#103 +G1 X29.421667 Y79.502000 +G1 X29.040667 Y79.121000 +G1 X28.956000 Y78.782333 +G1 X28.998333 Y78.401333 +G1 X29.252333 Y78.062667 +G1 X29.548667 Y77.893333 +G1 X30.099000 Y77.893333 +G1 X30.437667 Y78.105000 +G1 X30.649333 Y78.443667 +G1 X30.649333 Y78.994000 +G1 X30.437667 Y79.332667 +G1 X30.099000 Y79.544333 +G1 X29.675667 Y79.586667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 81) +G0 X34.755667 Y79.586667 (start point) +G1 Z#101 F#102 +F#103 +G1 X34.501667 Y79.502000 +G1 X34.120667 Y79.121000 +G1 X34.036000 Y78.782333 +G1 X34.078333 Y78.401333 +G1 X34.332333 Y78.062667 +G1 X34.628667 Y77.893333 +G1 X35.179000 Y77.893333 +G1 X35.517667 Y78.105000 +G1 X35.729333 Y78.443667 +G1 X35.729333 Y78.994000 +G1 X35.517667 Y79.332667 +G1 X35.179000 Y79.544333 +G1 X34.755667 Y79.586667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 82) +G0 X37.295667 Y79.586667 (start point) +G1 Z#101 F#102 +F#103 +G1 X37.084000 Y79.502000 +G1 X36.787667 Y79.290333 +G1 X36.618333 Y78.994000 +G1 X36.576000 Y78.655333 +G1 X36.660667 Y78.316667 +G1 X36.999333 Y77.978000 +G1 X36.999333 Y77.597000 +G1 X36.618333 Y77.258333 +G1 X24.849667 Y77.258333 +G1 X24.511000 Y77.597000 +G1 X24.172333 Y77.681667 +G1 X23.791333 Y77.639333 +G1 X23.452667 Y77.385333 +G1 X23.283333 Y77.089000 +G1 X23.283333 Y76.538667 +G1 X23.452667 Y76.242333 +G1 X23.791333 Y75.988333 +G1 X24.172333 Y75.946000 +G1 X24.511000 Y76.030667 +G1 X24.849667 Y76.369333 +G1 X36.872333 Y76.369333 +G1 X37.041667 Y76.454000 +G1 X37.761333 Y77.131333 +G1 X37.888333 Y77.385333 +G1 X37.888333 Y77.978000 +G1 X38.227000 Y78.316667 +G1 X38.311667 Y78.655333 +G1 X38.269333 Y79.036333 +G1 X38.015333 Y79.375000 +G1 X37.719000 Y79.544333 +G1 X37.295667 Y79.586667 +G0 Z#100 +(polygon end, distance 35.74) +(polygon 83) +G0 X39.835667 Y79.586667 (start point) +G1 Z#101 F#102 +F#103 +G1 X39.581667 Y79.502000 +G1 X39.200667 Y79.121000 +G1 X39.116000 Y78.782333 +G1 X39.158333 Y78.401333 +G1 X39.412333 Y78.062667 +G1 X39.708667 Y77.893333 +G1 X40.259000 Y77.893333 +G1 X40.597667 Y78.105000 +G1 X40.809333 Y78.443667 +G1 X40.809333 Y78.994000 +G1 X40.597667 Y79.332667 +G1 X40.259000 Y79.544333 +G1 X39.835667 Y79.586667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 84) +G0 X44.915667 Y79.586667 (start point) +G1 Z#101 F#102 +F#103 +G1 X44.661667 Y79.502000 +G1 X44.280667 Y79.121000 +G1 X44.196000 Y78.782333 +G1 X44.238333 Y78.401333 +G1 X44.492333 Y78.062667 +G1 X44.788667 Y77.893333 +G1 X45.339000 Y77.893333 +G1 X45.677667 Y78.105000 +G1 X45.889333 Y78.443667 +G1 X45.889333 Y78.994000 +G1 X45.677667 Y79.332667 +G1 X45.339000 Y79.544333 +G1 X44.915667 Y79.586667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 85) +G0 X47.455667 Y79.586667 (start point) +G1 Z#101 F#102 +F#103 +G1 X47.201667 Y79.502000 +G1 X46.820667 Y79.121000 +G1 X46.736000 Y78.782333 +G1 X46.778333 Y78.401333 +G1 X47.032333 Y78.062667 +G1 X47.328667 Y77.893333 +G1 X47.879000 Y77.893333 +G1 X48.217667 Y78.105000 +G1 X48.429333 Y78.443667 +G1 X48.429333 Y78.994000 +G1 X48.217667 Y79.332667 +G1 X47.879000 Y79.544333 +G1 X47.455667 Y79.586667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 86) +G0 X49.995667 Y79.586667 (start point) +G1 Z#101 F#102 +F#103 +G1 X49.741667 Y79.502000 +G1 X49.360667 Y79.121000 +G1 X49.276000 Y78.782333 +G1 X49.318333 Y78.401333 +G1 X49.572333 Y78.062667 +G1 X49.868667 Y77.893333 +G1 X50.419000 Y77.893333 +G1 X50.757667 Y78.105000 +G1 X50.969333 Y78.443667 +G1 X50.969333 Y78.994000 +G1 X50.757667 Y79.332667 +G1 X50.419000 Y79.544333 +G1 X49.995667 Y79.586667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 87) +G0 X52.535667 Y79.586667 (start point) +G1 Z#101 F#102 +F#103 +G1 X52.281667 Y79.502000 +G1 X51.900667 Y79.121000 +G1 X51.816000 Y78.782333 +G1 X51.858333 Y78.401333 +G1 X52.112333 Y78.062667 +G1 X52.408667 Y77.893333 +G1 X52.959000 Y77.893333 +G1 X53.297667 Y78.105000 +G1 X53.509333 Y78.443667 +G1 X53.509333 Y78.994000 +G1 X53.297667 Y79.332667 +G1 X52.959000 Y79.544333 +G1 X52.535667 Y79.586667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 88) +G0 X57.615667 Y79.586667 (start point) +G1 Z#101 F#102 +F#103 +G1 X57.361667 Y79.502000 +G1 X56.980667 Y79.121000 +G1 X56.896000 Y78.782333 +G1 X56.938333 Y78.401333 +G1 X57.192333 Y78.062667 +G1 X57.488667 Y77.893333 +G1 X58.039000 Y77.893333 +G1 X58.377667 Y78.105000 +G1 X58.589333 Y78.443667 +G1 X58.589333 Y78.994000 +G1 X58.377667 Y79.332667 +G1 X58.039000 Y79.544333 +G1 X57.615667 Y79.586667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 89) +G0 X77.935667 Y79.586667 (start point) +G1 Z#101 F#102 +F#103 +G1 X77.681667 Y79.502000 +G1 X77.300667 Y79.121000 +G1 X77.216000 Y78.782333 +G1 X77.258333 Y78.401333 +G1 X77.512333 Y78.062667 +G1 X77.808667 Y77.893333 +G1 X78.359000 Y77.893333 +G1 X78.697667 Y78.105000 +G1 X78.909333 Y78.443667 +G1 X78.909333 Y78.994000 +G1 X78.697667 Y79.332667 +G1 X78.359000 Y79.544333 +G1 X77.935667 Y79.586667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 90) +G0 X80.475667 Y79.586667 (start point) +G1 Z#101 F#102 +F#103 +G1 X80.221667 Y79.502000 +G1 X79.840667 Y79.121000 +G1 X79.756000 Y78.782333 +G1 X79.798333 Y78.401333 +G1 X80.052333 Y78.062667 +G1 X80.348667 Y77.893333 +G1 X80.899000 Y77.893333 +G1 X81.237667 Y78.105000 +G1 X81.449333 Y78.443667 +G1 X81.449333 Y78.994000 +G1 X81.237667 Y79.332667 +G1 X80.899000 Y79.544333 +G1 X80.475667 Y79.586667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 91) +G0 X83.015667 Y79.586667 (start point) +G1 Z#101 F#102 +F#103 +G1 X82.761667 Y79.502000 +G1 X82.380667 Y79.121000 +G1 X82.296000 Y78.782333 +G1 X82.338333 Y78.401333 +G1 X82.592333 Y78.062667 +G1 X82.888667 Y77.893333 +G1 X83.439000 Y77.893333 +G1 X83.777667 Y78.105000 +G1 X83.989333 Y78.443667 +G1 X83.989333 Y78.994000 +G1 X83.777667 Y79.332667 +G1 X83.439000 Y79.544333 +G1 X83.015667 Y79.586667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 92) +G0 X91.270667 Y79.586667 (start point) +G1 Z#101 F#102 +F#103 +G1 X91.016667 Y79.502000 +G1 X90.635667 Y79.121000 +G1 X90.551000 Y78.782333 +G1 X90.593333 Y78.401333 +G1 X90.847333 Y78.062667 +G1 X91.143667 Y77.893333 +G1 X91.694000 Y77.893333 +G1 X92.032667 Y78.105000 +G1 X92.244333 Y78.443667 +G1 X92.244333 Y78.994000 +G1 X92.032667 Y79.332667 +G1 X91.694000 Y79.544333 +G1 X91.270667 Y79.586667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 93) +G0 X93.810667 Y79.586667 (start point) +G1 Z#101 F#102 +F#103 +G1 X93.556667 Y79.502000 +G1 X93.175667 Y79.121000 +G1 X93.091000 Y78.782333 +G1 X93.133333 Y78.401333 +G1 X93.387333 Y78.062667 +G1 X93.683667 Y77.893333 +G1 X94.234000 Y77.893333 +G1 X94.572667 Y78.105000 +G1 X94.784333 Y78.443667 +G1 X94.784333 Y78.994000 +G1 X94.572667 Y79.332667 +G1 X94.234000 Y79.544333 +G1 X93.810667 Y79.586667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 94) +G0 X96.350667 Y79.586667 (start point) +G1 Z#101 F#102 +F#103 +G1 X96.096667 Y79.502000 +G1 X95.715667 Y79.121000 +G1 X95.631000 Y78.782333 +G1 X95.673333 Y78.401333 +G1 X95.927333 Y78.062667 +G1 X96.223667 Y77.893333 +G1 X96.774000 Y77.893333 +G1 X97.112667 Y78.105000 +G1 X97.324333 Y78.443667 +G1 X97.324333 Y78.994000 +G1 X97.112667 Y79.332667 +G1 X96.774000 Y79.544333 +G1 X96.350667 Y79.586667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 95) +G0 X98.890667 Y79.586667 (start point) +G1 Z#101 F#102 +F#103 +G1 X98.636667 Y79.502000 +G1 X98.255667 Y79.121000 +G1 X98.171000 Y78.782333 +G1 X98.213333 Y78.401333 +G1 X98.467333 Y78.062667 +G1 X98.763667 Y77.893333 +G1 X99.314000 Y77.893333 +G1 X99.652667 Y78.105000 +G1 X99.864333 Y78.443667 +G1 X99.864333 Y78.994000 +G1 X99.652667 Y79.332667 +G1 X99.314000 Y79.544333 +G1 X98.890667 Y79.586667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 96) +G0 X101.430667 Y79.586667 (start point) +G1 Z#101 F#102 +F#103 +G1 X101.176667 Y79.502000 +G1 X100.795667 Y79.121000 +G1 X100.711000 Y78.782333 +G1 X100.753333 Y78.401333 +G1 X101.007333 Y78.062667 +G1 X101.303667 Y77.893333 +G1 X101.854000 Y77.893333 +G1 X102.192667 Y78.105000 +G1 X102.404333 Y78.443667 +G1 X102.404333 Y78.994000 +G1 X102.192667 Y79.332667 +G1 X101.854000 Y79.544333 +G1 X101.430667 Y79.586667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 97) +G0 X103.970667 Y79.586667 (start point) +G1 Z#101 F#102 +F#103 +G1 X103.716667 Y79.502000 +G1 X103.335667 Y79.121000 +G1 X103.251000 Y78.782333 +G1 X103.293333 Y78.401333 +G1 X103.547333 Y78.062667 +G1 X103.843667 Y77.893333 +G1 X104.394000 Y77.893333 +G1 X104.732667 Y78.105000 +G1 X104.944333 Y78.443667 +G1 X104.944333 Y78.994000 +G1 X104.732667 Y79.332667 +G1 X104.394000 Y79.544333 +G1 X103.970667 Y79.586667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 98) +G0 X106.510667 Y79.586667 (start point) +G1 Z#101 F#102 +F#103 +G1 X106.256667 Y79.502000 +G1 X105.875667 Y79.121000 +G1 X105.791000 Y78.782333 +G1 X105.833333 Y78.401333 +G1 X106.087333 Y78.062667 +G1 X106.383667 Y77.893333 +G1 X106.934000 Y77.893333 +G1 X107.272667 Y78.105000 +G1 X107.484333 Y78.443667 +G1 X107.484333 Y78.994000 +G1 X107.272667 Y79.332667 +G1 X106.934000 Y79.544333 +G1 X106.510667 Y79.586667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 99) +G0 X109.050667 Y79.586667 (start point) +G1 Z#101 F#102 +F#103 +G1 X108.796667 Y79.502000 +G1 X108.415667 Y79.121000 +G1 X108.331000 Y78.782333 +G1 X108.373333 Y78.401333 +G1 X108.627333 Y78.062667 +G1 X108.923667 Y77.893333 +G1 X109.474000 Y77.893333 +G1 X109.812667 Y78.105000 +G1 X110.024333 Y78.443667 +G1 X110.024333 Y78.994000 +G1 X109.812667 Y79.332667 +G1 X109.474000 Y79.544333 +G1 X109.050667 Y79.586667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 100) +G0 X115.400667 Y79.586667 (start point) +G1 Z#101 F#102 +F#103 +G1 X115.146667 Y79.502000 +G1 X114.765667 Y79.121000 +G1 X114.681000 Y78.782333 +G1 X114.723333 Y78.401333 +G1 X114.977333 Y78.062667 +G1 X115.273667 Y77.893333 +G1 X115.824000 Y77.893333 +G1 X116.162667 Y78.105000 +G1 X116.374333 Y78.443667 +G1 X116.374333 Y78.994000 +G1 X116.162667 Y79.332667 +G1 X115.824000 Y79.544333 +G1 X115.400667 Y79.586667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 101) +G0 X117.940667 Y79.586667 (start point) +G1 Z#101 F#102 +F#103 +G1 X117.686667 Y79.502000 +G1 X117.305667 Y79.121000 +G1 X117.221000 Y78.782333 +G1 X117.263333 Y78.401333 +G1 X117.517333 Y78.062667 +G1 X117.813667 Y77.893333 +G1 X118.364000 Y77.893333 +G1 X118.702667 Y78.105000 +G1 X118.914333 Y78.443667 +G1 X118.914333 Y78.994000 +G1 X118.702667 Y79.332667 +G1 X118.364000 Y79.544333 +G1 X117.940667 Y79.586667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 102) +G0 X120.480667 Y79.586667 (start point) +G1 Z#101 F#102 +F#103 +G1 X120.226667 Y79.502000 +G1 X119.845667 Y79.121000 +G1 X119.761000 Y78.782333 +G1 X119.803333 Y78.401333 +G1 X120.057333 Y78.062667 +G1 X120.353667 Y77.893333 +G1 X120.904000 Y77.893333 +G1 X121.242667 Y78.105000 +G1 X121.454333 Y78.443667 +G1 X121.454333 Y78.994000 +G1 X121.242667 Y79.332667 +G1 X120.904000 Y79.544333 +G1 X120.480667 Y79.586667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 103) +G0 X123.020667 Y79.586667 (start point) +G1 Z#101 F#102 +F#103 +G1 X122.766667 Y79.502000 +G1 X122.385667 Y79.121000 +G1 X122.301000 Y78.782333 +G1 X122.343333 Y78.486000 +G1 X121.073333 Y77.258333 +G1 X114.384667 Y77.258333 +G1 X114.046000 Y77.597000 +G1 X113.707333 Y77.681667 +G1 X113.326333 Y77.639333 +G1 X112.987667 Y77.385333 +G1 X112.818333 Y77.089000 +G1 X112.818333 Y76.538667 +G1 X112.987667 Y76.242333 +G1 X113.326333 Y75.988333 +G1 X113.707333 Y75.946000 +G1 X114.046000 Y76.030667 +G1 X114.384667 Y76.369333 +G1 X121.327333 Y76.369333 +G1 X121.496667 Y76.454000 +G1 X122.936000 Y77.851000 +G1 X123.444000 Y77.893333 +G1 X123.782667 Y78.105000 +G1 X123.994333 Y78.443667 +G1 X123.994333 Y78.994000 +G1 X123.782667 Y79.332667 +G1 X123.444000 Y79.544333 +G1 X123.020667 Y79.586667 +G0 Z#100 +(polygon end, distance 26.63) +(polygon 104) +G0 X125.560667 Y79.586667 (start point) +G1 Z#101 F#102 +F#103 +G1 X125.306667 Y79.502000 +G1 X124.925667 Y79.121000 +G1 X124.841000 Y78.782333 +G1 X124.883333 Y78.401333 +G1 X125.137333 Y78.062667 +G1 X125.433667 Y77.893333 +G1 X125.941667 Y77.851000 +G1 X127.381000 Y76.454000 +G1 X127.550333 Y76.369333 +G1 X131.953000 Y76.369333 +G1 X132.291667 Y76.030667 +G1 X132.630333 Y75.946000 +G1 X133.011333 Y75.988333 +G1 X133.350000 Y76.242333 +G1 X133.519333 Y76.538667 +G1 X133.519333 Y77.089000 +G1 X133.350000 Y77.385333 +G1 X133.011333 Y77.639333 +G1 X132.630333 Y77.681667 +G1 X132.291667 Y77.597000 +G1 X131.953000 Y77.258333 +G1 X127.762000 Y77.258333 +G1 X126.576667 Y78.486000 +G1 X126.534333 Y78.994000 +G1 X126.322667 Y79.332667 +G1 X125.984000 Y79.544333 +G1 X125.560667 Y79.586667 +G0 Z#100 +(polygon end, distance 21.55) +(polygon 105) +G0 X128.100667 Y79.586667 (start point) +G1 Z#101 F#102 +F#103 +G1 X127.846667 Y79.502000 +G1 X127.465667 Y79.121000 +G1 X127.381000 Y78.782333 +G1 X127.423333 Y78.401333 +G1 X127.677333 Y78.062667 +G1 X127.973667 Y77.893333 +G1 X128.524000 Y77.893333 +G1 X128.862667 Y78.105000 +G1 X129.074333 Y78.443667 +G1 X129.074333 Y78.994000 +G1 X128.862667 Y79.332667 +G1 X128.524000 Y79.544333 +G1 X128.100667 Y79.586667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 106) +G0 X130.640667 Y79.586667 (start point) +G1 Z#101 F#102 +F#103 +G1 X130.386667 Y79.502000 +G1 X130.005667 Y79.121000 +G1 X129.921000 Y78.782333 +G1 X129.963333 Y78.401333 +G1 X130.217333 Y78.062667 +G1 X130.513667 Y77.893333 +G1 X131.064000 Y77.893333 +G1 X131.402667 Y78.105000 +G1 X131.614333 Y78.443667 +G1 X131.614333 Y78.994000 +G1 X131.402667 Y79.332667 +G1 X131.064000 Y79.544333 +G1 X130.640667 Y79.586667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 107) +G0 X159.131000 Y78.951667 (start point) +G1 Z#101 F#102 +F#103 +G1 X159.131000 Y77.216000 +G1 X160.866667 Y77.216000 +G1 X160.866667 Y78.951667 +G1 X159.131000 Y78.951667 +G0 Z#100 +(polygon end, distance 6.94) +(polygon 108) +G0 X63.330667 Y78.316667 (start point) +G1 Z#101 F#102 +F#103 +G1 X63.076667 Y78.232000 +G1 X62.695667 Y77.851000 +G1 X62.611000 Y77.512333 +G1 X62.653333 Y77.131333 +G1 X62.907333 Y76.792667 +G1 X63.203667 Y76.623333 +G1 X63.754000 Y76.623333 +G1 X64.092667 Y76.835000 +G1 X64.304333 Y77.173667 +G1 X64.304333 Y77.724000 +G1 X64.092667 Y78.062667 +G1 X63.754000 Y78.274333 +G1 X63.330667 Y78.316667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 109) +G0 X58.885667 Y78.062667 (start point) +G1 Z#101 F#102 +F#103 +G1 X58.631667 Y77.851000 +G1 X58.420000 Y77.597000 +G1 X58.420000 Y77.300667 +G1 X58.631667 Y77.046667 +G1 X58.885667 Y76.835000 +G1 X59.139667 Y76.835000 +G1 X59.393667 Y76.962000 +G1 X59.605333 Y77.216000 +G1 X61.468000 Y77.216000 +G1 X62.780333 Y75.946000 +G1 X69.723000 Y75.946000 +G1 X71.035333 Y74.676000 +G1 X71.797333 Y74.676000 +G1 X72.009000 Y74.422000 +G1 X72.263000 Y74.295000 +G1 X72.517000 Y74.295000 +G1 X72.771000 Y74.506667 +G1 X72.982667 Y74.760667 +G1 X72.982667 Y75.057000 +G1 X72.771000 Y75.311000 +G1 X72.517000 Y75.522667 +G1 X72.263000 Y75.522667 +G1 X72.009000 Y75.395667 +G1 X71.797333 Y75.141667 +G1 X71.204667 Y75.141667 +G1 X69.892333 Y76.411667 +G1 X62.949667 Y76.411667 +G1 X61.637333 Y77.681667 +G1 X59.605333 Y77.681667 +G1 X59.393667 Y77.935667 +G1 X59.139667 Y78.062667 +G1 X58.885667 Y78.062667 +G0 Z#100 +(polygon end, distance 33.15) +(polygon 110) +G0 X16.975667 Y77.681667 (start point) +G1 Z#101 F#102 +F#103 +G1 X16.721667 Y77.597000 +G1 X16.340667 Y77.216000 +G1 X16.256000 Y76.877333 +G1 X16.298333 Y76.496333 +G1 X16.552333 Y76.157667 +G1 X16.848667 Y75.988333 +G1 X17.399000 Y75.988333 +G1 X17.737667 Y76.200000 +G1 X17.949333 Y76.538667 +G1 X17.949333 Y77.089000 +G1 X17.737667 Y77.427667 +G1 X17.399000 Y77.639333 +G1 X16.975667 Y77.681667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 111) +G0 X19.515667 Y77.681667 (start point) +G1 Z#101 F#102 +F#103 +G1 X19.261667 Y77.597000 +G1 X18.880667 Y77.216000 +G1 X18.796000 Y76.877333 +G1 X18.838333 Y76.496333 +G1 X19.092333 Y76.200000 +G1 X20.743333 Y74.633667 +G1 X20.743333 Y65.235667 +G1 X20.912667 Y64.897000 +G1 X22.436667 Y63.457667 +G1 X22.733000 Y63.288333 +G1 X26.373667 Y63.288333 +G1 X26.712333 Y62.992000 +G1 X27.178000 Y62.865000 +G1 X27.601333 Y62.907333 +G1 X27.982333 Y63.076667 +G1 X28.321000 Y63.415333 +G1 X28.490333 Y63.796333 +G1 X28.490333 Y64.431333 +G1 X28.321000 Y64.812333 +G1 X27.982333 Y65.151000 +G1 X27.601333 Y65.320333 +G1 X27.178000 Y65.362667 +G1 X26.712333 Y65.235667 +G1 X26.373667 Y64.939333 +G1 X23.198667 Y64.939333 +G1 X22.394333 Y65.659000 +G1 X22.394333 Y75.057000 +G1 X22.225000 Y75.395667 +G1 X20.574000 Y76.962000 +G1 X20.277667 Y77.427667 +G1 X19.939000 Y77.639333 +G1 X19.515667 Y77.681667 +G0 Z#100 +(polygon end, distance 43.72) +(polygon 112) +G0 X162.390667 Y77.597000 (start point) +G1 Z#101 F#102 +F#103 +G1 X162.136667 Y77.512333 +G1 X161.755667 Y77.131333 +G1 X161.671000 Y76.792667 +G1 X161.713333 Y76.411667 +G1 X161.967333 Y76.073000 +G1 X162.263667 Y75.903667 +G1 X162.814000 Y75.903667 +G1 X163.152667 Y76.115333 +G1 X163.364333 Y76.454000 +G1 X163.364333 Y77.004333 +G1 X163.152667 Y77.343000 +G1 X162.814000 Y77.554667 +G1 X162.390667 Y77.597000 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 113) +G0 X58.250667 Y76.792667 (start point) +G1 Z#101 F#102 +F#103 +G1 X57.996667 Y76.581000 +G1 X57.785000 Y76.327000 +G1 X57.785000 Y76.030667 +G1 X57.996667 Y75.776667 +G1 X58.250667 Y75.565000 +G1 X58.504667 Y75.565000 +G1 X58.758667 Y75.692000 +G1 X58.970333 Y75.946000 +G1 X61.468000 Y75.946000 +G1 X62.780333 Y74.676000 +G1 X67.352333 Y74.676000 +G1 X67.564000 Y74.422000 +G1 X67.818000 Y74.295000 +G1 X68.072000 Y74.295000 +G1 X68.326000 Y74.506667 +G1 X68.537667 Y74.760667 +G1 X68.537667 Y75.057000 +G1 X68.326000 Y75.311000 +G1 X68.072000 Y75.522667 +G1 X67.818000 Y75.522667 +G1 X67.564000 Y75.395667 +G1 X67.352333 Y75.141667 +G1 X62.949667 Y75.141667 +G1 X61.637333 Y76.411667 +G1 X58.970333 Y76.411667 +G1 X58.758667 Y76.665667 +G1 X58.504667 Y76.792667 +G1 X58.250667 Y76.792667 +G0 Z#100 +(polygon end, distance 24.50) +(polygon 114) +G0 X159.850667 Y76.200000 (start point) +G1 Z#101 F#102 +F#103 +G1 X159.596667 Y76.115333 +G1 X159.215667 Y75.734333 +G1 X159.131000 Y75.395667 +G1 X159.173333 Y75.014667 +G1 X159.427333 Y74.676000 +G1 X159.723667 Y74.506667 +G1 X160.274000 Y74.506667 +G1 X160.612667 Y74.718333 +G1 X160.824333 Y75.057000 +G1 X160.824333 Y75.607333 +G1 X160.612667 Y75.946000 +G1 X160.274000 Y76.157667 +G1 X159.850667 Y76.200000 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 115) +G0 X154.135667 Y76.157667 (start point) +G1 Z#101 F#102 +F#103 +G1 X153.881667 Y75.988333 +G1 X153.712333 Y75.776667 +G1 X109.770333 Y75.776667 +G1 X108.458000 Y74.506667 +G1 X94.530333 Y74.506667 +G1 X91.821000 Y71.839667 +G1 X91.524667 Y71.966667 +G1 X91.143667 Y71.924333 +G1 X90.805000 Y71.712667 +G1 X90.593333 Y71.374000 +G1 X90.593333 Y70.823667 +G1 X90.805000 Y70.485000 +G1 X91.143667 Y70.273333 +G1 X91.694000 Y70.273333 +G1 X92.032667 Y70.485000 +G1 X92.244333 Y70.823667 +G1 X92.286667 Y71.204667 +G1 X92.159667 Y71.543333 +G1 X94.699667 Y74.041000 +G1 X108.627333 Y74.041000 +G1 X109.939667 Y75.311000 +G1 X153.712333 Y75.311000 +G1 X153.924000 Y75.057000 +G1 X154.178000 Y74.930000 +G1 X154.432000 Y74.930000 +G1 X154.686000 Y75.141667 +G1 X154.897667 Y75.395667 +G1 X154.897667 Y75.692000 +G1 X154.686000 Y75.946000 +G1 X154.432000 Y76.157667 +G1 X154.135667 Y76.157667 +G0 Z#100 +(polygon end, distance 134.89) +(polygon 116) +G0 X29.675667 Y75.522667 (start point) +G1 Z#101 F#102 +F#103 +G1 X29.421667 Y75.311000 +G1 X29.210000 Y75.057000 +G1 X29.210000 Y74.760667 +G1 X29.421667 Y74.506667 +G1 X29.675667 Y74.295000 +G1 X29.929667 Y74.295000 +G1 X30.183667 Y74.422000 +G1 X30.395333 Y74.676000 +G1 X50.842333 Y74.676000 +G1 X51.054000 Y74.422000 +G1 X51.308000 Y74.295000 +G1 X51.562000 Y74.295000 +G1 X51.816000 Y74.506667 +G1 X52.027667 Y74.760667 +G1 X52.027667 Y75.057000 +G1 X51.816000 Y75.311000 +G1 X51.562000 Y75.522667 +G1 X51.308000 Y75.522667 +G1 X51.054000 Y75.395667 +G1 X50.842333 Y75.141667 +G1 X30.395333 Y75.141667 +G1 X30.183667 Y75.395667 +G1 X29.929667 Y75.522667 +G1 X29.675667 Y75.522667 +G0 Z#100 +(polygon end, distance 47.61) +(polygon 117) +G0 X58.885667 Y75.522667 (start point) +G1 Z#101 F#102 +F#103 +G1 X58.631667 Y75.311000 +G1 X58.420000 Y75.057000 +G1 X58.420000 Y74.760667 +G1 X58.631667 Y74.506667 +G1 X58.885667 Y74.295000 +G1 X59.139667 Y74.295000 +G1 X59.393667 Y74.422000 +G1 X59.605333 Y74.676000 +G1 X61.468000 Y74.676000 +G1 X62.780333 Y73.406000 +G1 X76.073000 Y73.406000 +G1 X76.750333 Y72.771000 +G1 X90.847333 Y72.771000 +G1 X91.059000 Y72.517000 +G1 X91.313000 Y72.390000 +G1 X91.567000 Y72.390000 +G1 X91.821000 Y72.601667 +G1 X92.032667 Y72.855667 +G1 X92.032667 Y73.152000 +G1 X91.821000 Y73.406000 +G1 X91.567000 Y73.617667 +G1 X91.313000 Y73.617667 +G1 X91.059000 Y73.490667 +G1 X90.847333 Y73.236667 +G1 X76.919667 Y73.236667 +G1 X76.242333 Y73.871667 +G1 X62.949667 Y73.871667 +G1 X61.637333 Y75.141667 +G1 X59.605333 Y75.141667 +G1 X59.393667 Y75.395667 +G1 X59.139667 Y75.522667 +G1 X58.885667 Y75.522667 +G0 Z#100 +(polygon end, distance 70.73) +(polygon 118) +G0 X14.435667 Y75.141667 (start point) +G1 Z#101 F#102 +F#103 +G1 X14.181667 Y75.057000 +G1 X13.800667 Y74.676000 +G1 X13.716000 Y74.337333 +G1 X13.758333 Y73.956333 +G1 X14.012333 Y73.617667 +G1 X14.308667 Y73.448333 +G1 X14.859000 Y73.448333 +G1 X15.197667 Y73.660000 +G1 X15.409333 Y73.998667 +G1 X15.409333 Y74.549000 +G1 X15.197667 Y74.887667 +G1 X14.859000 Y75.099333 +G1 X14.435667 Y75.141667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 119) +G0 X16.975667 Y75.141667 (start point) +G1 Z#101 F#102 +F#103 +G1 X16.721667 Y75.057000 +G1 X16.340667 Y74.676000 +G1 X16.256000 Y74.337333 +G1 X16.298333 Y73.956333 +G1 X16.552333 Y73.617667 +G1 X16.848667 Y73.448333 +G1 X17.399000 Y73.448333 +G1 X17.737667 Y73.660000 +G1 X17.949333 Y73.998667 +G1 X17.949333 Y74.549000 +G1 X17.737667 Y74.887667 +G1 X17.399000 Y75.099333 +G1 X16.975667 Y75.141667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 120) +G0 X19.515667 Y75.141667 (start point) +G1 Z#101 F#102 +F#103 +G1 X19.261667 Y75.057000 +G1 X18.880667 Y74.676000 +G1 X18.796000 Y74.337333 +G1 X18.838333 Y73.956333 +G1 X19.092333 Y73.617667 +G1 X19.388667 Y73.448333 +G1 X19.939000 Y73.448333 +G1 X20.277667 Y73.660000 +G1 X20.489333 Y73.998667 +G1 X20.489333 Y74.549000 +G1 X20.277667 Y74.887667 +G1 X19.939000 Y75.099333 +G1 X19.515667 Y75.141667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 121) +G0 X162.390667 Y74.803000 (start point) +G1 Z#101 F#102 +F#103 +G1 X162.179000 Y74.718333 +G1 X161.882667 Y74.506667 +G1 X161.713333 Y74.168000 +G1 X155.998333 Y74.168000 +G1 X155.617333 Y74.506667 +G1 X110.405333 Y74.506667 +G1 X109.093000 Y73.236667 +G1 X95.800333 Y73.236667 +G1 X94.361000 Y71.839667 +G1 X94.064667 Y71.966667 +G1 X93.683667 Y71.924333 +G1 X93.345000 Y71.712667 +G1 X93.133333 Y71.374000 +G1 X93.133333 Y70.823667 +G1 X93.345000 Y70.485000 +G1 X93.683667 Y70.273333 +G1 X94.234000 Y70.273333 +G1 X94.572667 Y70.485000 +G1 X94.784333 Y70.823667 +G1 X94.826667 Y71.204667 +G1 X94.699667 Y71.543333 +G1 X95.969667 Y72.771000 +G1 X109.262333 Y72.771000 +G1 X110.574667 Y74.041000 +G1 X155.448000 Y74.041000 +G1 X155.829000 Y73.702333 +G1 X161.713333 Y73.702333 +G1 X161.925000 Y73.321333 +G1 X162.263667 Y73.109667 +G1 X162.814000 Y73.109667 +G1 X163.152667 Y73.321333 +G1 X163.364333 Y73.660000 +G1 X163.364333 Y74.210333 +G1 X163.152667 Y74.549000 +G1 X162.814000 Y74.760667 +G1 X162.390667 Y74.803000 +G0 Z#100 +(polygon end, distance 146.59) +(polygon 122) +G0 X111.548333 Y73.998667 (start point) +G1 Z#101 F#102 +F#103 +G1 X111.125000 Y73.787000 +G1 X110.913333 Y73.533000 +G1 X110.744000 Y73.194333 +G1 X110.744000 Y72.813333 +G1 X110.913333 Y72.474667 +G1 X111.125000 Y72.220667 +G1 X111.463667 Y72.051333 +G1 X117.898333 Y72.051333 +G1 X117.475000 Y71.839667 +G1 X117.221000 Y71.501000 +G1 X117.136333 Y71.204667 +G1 X117.178667 Y70.823667 +G1 X117.432667 Y70.442667 +G1 X117.813667 Y70.188667 +G1 X120.904000 Y70.188667 +G1 X121.285000 Y70.442667 +G1 X121.539000 Y70.823667 +G1 X121.581333 Y71.247000 +G1 X121.369667 Y71.712667 +G1 X119.210667 Y73.829333 +G1 X118.829667 Y73.956333 +G1 X111.548333 Y73.998667 +G0 Z#100 +(polygon end, distance 27.24) +(polygon 123) +G0 X129.370667 Y73.617667 (start point) +G1 Z#101 F#102 +F#103 +G1 X129.116667 Y73.448333 +G1 X128.947333 Y73.236667 +G1 X125.010333 Y73.236667 +G1 X123.571000 Y71.839667 +G1 X123.274667 Y71.966667 +G1 X122.893667 Y71.924333 +G1 X122.555000 Y71.712667 +G1 X122.343333 Y71.374000 +G1 X122.343333 Y70.823667 +G1 X122.555000 Y70.485000 +G1 X122.893667 Y70.273333 +G1 X123.444000 Y70.273333 +G1 X123.782667 Y70.485000 +G1 X123.994333 Y70.823667 +G1 X124.036667 Y71.204667 +G1 X123.909667 Y71.543333 +G1 X125.179667 Y72.771000 +G1 X128.947333 Y72.771000 +G1 X129.159000 Y72.517000 +G1 X129.413000 Y72.390000 +G1 X129.667000 Y72.390000 +G1 X129.921000 Y72.601667 +G1 X130.132667 Y72.855667 +G1 X130.132667 Y73.152000 +G1 X129.921000 Y73.406000 +G1 X129.667000 Y73.617667 +G1 X129.370667 Y73.617667 +G0 Z#100 +(polygon end, distance 19.78) +(polygon 124) +G0 X159.850667 Y73.406000 (start point) +G1 Z#101 F#102 +F#103 +G1 X159.596667 Y73.321333 +G1 X159.215667 Y72.940333 +G1 X159.131000 Y72.601667 +G1 X159.173333 Y72.220667 +G1 X159.427333 Y71.882000 +G1 X159.723667 Y71.712667 +G1 X160.274000 Y71.712667 +G1 X160.612667 Y71.924333 +G1 X160.824333 Y72.263000 +G1 X160.824333 Y72.813333 +G1 X160.612667 Y73.152000 +G1 X160.274000 Y73.363667 +G1 X159.850667 Y73.406000 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 125) +G0 X135.085667 Y73.236667 (start point) +G1 Z#101 F#102 +F#103 +G1 X134.831667 Y73.152000 +G1 X134.493000 Y72.813333 +G1 X131.995333 Y72.813333 +G1 X131.741333 Y72.686333 +G1 X131.064000 Y71.966667 +G1 X129.921000 Y71.966667 +G1 X129.921000 Y70.231000 +G1 X131.656667 Y70.231000 +G1 X131.656667 Y71.374000 +G1 X132.249333 Y71.924333 +G1 X134.493000 Y71.924333 +G1 X134.831667 Y71.585667 +G1 X135.170333 Y71.501000 +G1 X135.551333 Y71.543333 +G1 X135.890000 Y71.797333 +G1 X135.932333 Y71.924333 +G1 X138.938000 Y71.924333 +G1 X139.276667 Y71.585667 +G1 X139.615333 Y71.501000 +G1 X139.996333 Y71.543333 +G1 X140.335000 Y71.797333 +G1 X140.504333 Y72.093667 +G1 X140.504333 Y72.644000 +G1 X140.335000 Y72.940333 +G1 X139.996333 Y73.194333 +G1 X139.615333 Y73.236667 +G1 X139.276667 Y73.152000 +G1 X138.938000 Y72.813333 +G1 X135.974667 Y72.813333 +G1 X135.636000 Y73.152000 +G1 X135.339667 Y73.236667 +G1 X135.085667 Y73.236667 +G0 Z#100 +(polygon end, distance 26.61) +(polygon 126) +G0 X14.435667 Y72.601667 (start point) +G1 Z#101 F#102 +F#103 +G1 X14.181667 Y72.517000 +G1 X13.800667 Y72.136000 +G1 X13.716000 Y71.797333 +G1 X13.758333 Y71.416333 +G1 X14.012333 Y71.077667 +G1 X14.308667 Y70.908333 +G1 X14.859000 Y70.908333 +G1 X15.197667 Y71.120000 +G1 X15.409333 Y71.458667 +G1 X15.409333 Y72.009000 +G1 X15.197667 Y72.347667 +G1 X14.859000 Y72.559333 +G1 X14.435667 Y72.601667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 127) +G0 X16.975667 Y72.601667 (start point) +G1 Z#101 F#102 +F#103 +G1 X16.721667 Y72.517000 +G1 X16.340667 Y72.136000 +G1 X16.256000 Y71.797333 +G1 X16.298333 Y71.416333 +G1 X16.552333 Y71.077667 +G1 X16.848667 Y70.908333 +G1 X17.399000 Y70.908333 +G1 X17.737667 Y71.120000 +G1 X17.949333 Y71.458667 +G1 X17.949333 Y72.009000 +G1 X17.737667 Y72.347667 +G1 X17.399000 Y72.559333 +G1 X16.975667 Y72.601667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 128) +G0 X19.515667 Y72.601667 (start point) +G1 Z#101 F#102 +F#103 +G1 X19.261667 Y72.517000 +G1 X18.880667 Y72.136000 +G1 X18.796000 Y71.797333 +G1 X18.838333 Y71.416333 +G1 X19.092333 Y71.077667 +G1 X19.388667 Y70.908333 +G1 X19.939000 Y70.908333 +G1 X20.277667 Y71.120000 +G1 X20.489333 Y71.458667 +G1 X20.489333 Y72.009000 +G1 X20.277667 Y72.347667 +G1 X19.939000 Y72.559333 +G1 X19.515667 Y72.601667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 129) +G0 X162.390667 Y72.051333 (start point) +G1 Z#101 F#102 +F#103 +G1 X162.136667 Y71.966667 +G1 X161.755667 Y71.585667 +G1 X161.713333 Y71.331667 +G1 X154.855333 Y71.331667 +G1 X154.643667 Y71.585667 +G1 X154.389667 Y71.712667 +G1 X154.135667 Y71.712667 +G1 X153.881667 Y71.501000 +G1 X153.670000 Y71.247000 +G1 X153.670000 Y70.950667 +G1 X153.881667 Y70.696667 +G1 X154.135667 Y70.485000 +G1 X154.389667 Y70.485000 +G1 X154.643667 Y70.612000 +G1 X154.855333 Y70.866000 +G1 X161.755667 Y70.866000 +G1 X161.925000 Y70.569667 +G1 X162.263667 Y70.358000 +G1 X162.814000 Y70.358000 +G1 X163.152667 Y70.569667 +G1 X163.364333 Y70.908333 +G1 X163.364333 Y71.458667 +G1 X163.152667 Y71.797333 +G1 X162.814000 Y72.009000 +G1 X162.390667 Y72.051333 +G0 Z#100 +(polygon end, distance 22.04) +(polygon 130) +G0 X24.595667 Y71.966667 (start point) +G1 Z#101 F#102 +F#103 +G1 X24.341667 Y71.882000 +G1 X23.960667 Y71.501000 +G1 X23.876000 Y71.162333 +G1 X23.918333 Y70.781333 +G1 X24.172333 Y70.442667 +G1 X24.468667 Y70.273333 +G1 X25.019000 Y70.273333 +G1 X25.357667 Y70.485000 +G1 X25.569333 Y70.823667 +G1 X25.569333 Y71.374000 +G1 X25.357667 Y71.712667 +G1 X25.019000 Y71.924333 +G1 X24.595667 Y71.966667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 131) +G0 X27.135667 Y71.966667 (start point) +G1 Z#101 F#102 +F#103 +G1 X26.881667 Y71.882000 +G1 X26.500667 Y71.501000 +G1 X26.416000 Y71.162333 +G1 X26.458333 Y70.781333 +G1 X26.712333 Y70.442667 +G1 X27.008667 Y70.273333 +G1 X27.559000 Y70.273333 +G1 X27.897667 Y70.485000 +G1 X28.109333 Y70.823667 +G1 X28.109333 Y71.374000 +G1 X27.897667 Y71.712667 +G1 X27.559000 Y71.924333 +G1 X27.135667 Y71.966667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 132) +G0 X29.675667 Y71.966667 (start point) +G1 Z#101 F#102 +F#103 +G1 X29.421667 Y71.882000 +G1 X29.040667 Y71.501000 +G1 X28.956000 Y71.162333 +G1 X28.998333 Y70.781333 +G1 X29.252333 Y70.442667 +G1 X29.548667 Y70.273333 +G1 X30.099000 Y70.273333 +G1 X30.437667 Y70.485000 +G1 X30.649333 Y70.823667 +G1 X30.649333 Y71.374000 +G1 X30.437667 Y71.712667 +G1 X30.099000 Y71.924333 +G1 X29.675667 Y71.966667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 133) +G0 X32.215667 Y71.966667 (start point) +G1 Z#101 F#102 +F#103 +G1 X31.961667 Y71.882000 +G1 X31.580667 Y71.501000 +G1 X31.496000 Y71.162333 +G1 X31.538333 Y70.781333 +G1 X31.792333 Y70.442667 +G1 X32.088667 Y70.273333 +G1 X32.639000 Y70.273333 +G1 X32.977667 Y70.485000 +G1 X33.189333 Y70.823667 +G1 X33.189333 Y71.374000 +G1 X32.977667 Y71.712667 +G1 X32.639000 Y71.924333 +G1 X32.215667 Y71.966667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 134) +G0 X34.755667 Y71.966667 (start point) +G1 Z#101 F#102 +F#103 +G1 X34.501667 Y71.882000 +G1 X34.120667 Y71.501000 +G1 X34.036000 Y71.162333 +G1 X34.078333 Y70.781333 +G1 X34.332333 Y70.442667 +G1 X34.628667 Y70.273333 +G1 X35.179000 Y70.273333 +G1 X35.517667 Y70.485000 +G1 X35.729333 Y70.823667 +G1 X35.729333 Y71.374000 +G1 X35.517667 Y71.712667 +G1 X35.179000 Y71.924333 +G1 X34.755667 Y71.966667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 135) +G0 X37.295667 Y71.966667 (start point) +G1 Z#101 F#102 +F#103 +G1 X37.041667 Y71.882000 +G1 X36.660667 Y71.501000 +G1 X36.576000 Y71.162333 +G1 X36.618333 Y70.781333 +G1 X36.872333 Y70.442667 +G1 X37.168667 Y70.273333 +G1 X37.719000 Y70.273333 +G1 X38.057667 Y70.485000 +G1 X38.269333 Y70.823667 +G1 X38.269333 Y71.374000 +G1 X38.057667 Y71.712667 +G1 X37.719000 Y71.924333 +G1 X37.295667 Y71.966667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 136) +G0 X42.375667 Y71.966667 (start point) +G1 Z#101 F#102 +F#103 +G1 X42.121667 Y71.882000 +G1 X41.740667 Y71.501000 +G1 X41.656000 Y71.162333 +G1 X41.698333 Y70.781333 +G1 X41.952333 Y70.442667 +G1 X42.291000 Y70.273333 +G1 X42.291000 Y69.892333 +G1 X41.148000 Y68.791667 +G1 X25.315333 Y68.791667 +G1 X23.876000 Y67.352333 +G1 X23.876000 Y66.886667 +G1 X23.241000 Y66.886667 +G1 X23.241000 Y65.151000 +G1 X24.976667 Y65.151000 +G1 X24.976667 Y66.886667 +G1 X24.341667 Y66.886667 +G1 X24.341667 Y67.183000 +G1 X25.442333 Y68.326000 +G1 X41.317333 Y68.326000 +G1 X42.756667 Y69.765333 +G1 X42.756667 Y70.273333 +G1 X43.137667 Y70.485000 +G1 X43.349333 Y70.823667 +G1 X43.349333 Y71.374000 +G1 X43.137667 Y71.712667 +G1 X42.799000 Y71.924333 +G1 X42.375667 Y71.966667 +G0 Z#100 +(polygon end, distance 52.03) +(polygon 137) +G0 X44.915667 Y71.966667 (start point) +G1 Z#101 F#102 +F#103 +G1 X44.661667 Y71.882000 +G1 X44.280667 Y71.501000 +G1 X44.196000 Y71.162333 +G1 X44.238333 Y70.781333 +G1 X44.492333 Y70.442667 +G1 X44.788667 Y70.273333 +G1 X45.339000 Y70.273333 +G1 X45.677667 Y70.485000 +G1 X45.889333 Y70.823667 +G1 X45.889333 Y71.374000 +G1 X45.677667 Y71.712667 +G1 X45.339000 Y71.924333 +G1 X44.915667 Y71.966667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 138) +G0 X47.455667 Y71.966667 (start point) +G1 Z#101 F#102 +F#103 +G1 X47.201667 Y71.882000 +G1 X46.820667 Y71.501000 +G1 X46.736000 Y71.162333 +G1 X46.778333 Y70.781333 +G1 X47.032333 Y70.442667 +G1 X47.328667 Y70.273333 +G1 X47.879000 Y70.273333 +G1 X48.217667 Y70.485000 +G1 X48.429333 Y70.823667 +G1 X48.429333 Y71.374000 +G1 X48.217667 Y71.712667 +G1 X47.879000 Y71.924333 +G1 X47.455667 Y71.966667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 139) +G0 X49.995667 Y71.966667 (start point) +G1 Z#101 F#102 +F#103 +G1 X49.741667 Y71.882000 +G1 X49.360667 Y71.501000 +G1 X49.276000 Y71.162333 +G1 X49.318333 Y70.781333 +G1 X49.572333 Y70.442667 +G1 X49.868667 Y70.273333 +G1 X50.419000 Y70.273333 +G1 X50.757667 Y70.485000 +G1 X50.969333 Y70.823667 +G1 X50.969333 Y71.374000 +G1 X50.757667 Y71.712667 +G1 X50.419000 Y71.924333 +G1 X49.995667 Y71.966667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 140) +G0 X52.535667 Y71.966667 (start point) +G1 Z#101 F#102 +F#103 +G1 X52.281667 Y71.882000 +G1 X51.900667 Y71.501000 +G1 X51.816000 Y71.162333 +G1 X51.858333 Y70.781333 +G1 X52.112333 Y70.442667 +G1 X52.408667 Y70.273333 +G1 X52.959000 Y70.273333 +G1 X53.297667 Y70.485000 +G1 X53.509333 Y70.823667 +G1 X53.509333 Y71.374000 +G1 X53.297667 Y71.712667 +G1 X52.959000 Y71.924333 +G1 X52.535667 Y71.966667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 141) +G0 X55.075667 Y71.966667 (start point) +G1 Z#101 F#102 +F#103 +G1 X54.821667 Y71.882000 +G1 X54.440667 Y71.501000 +G1 X54.356000 Y71.162333 +G1 X54.398333 Y70.781333 +G1 X54.652333 Y70.442667 +G1 X54.948667 Y70.273333 +G1 X55.499000 Y70.273333 +G1 X55.837667 Y70.485000 +G1 X56.049333 Y70.823667 +G1 X56.049333 Y71.374000 +G1 X55.837667 Y71.712667 +G1 X55.499000 Y71.924333 +G1 X55.075667 Y71.966667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 142) +G0 X56.896000 Y71.966667 (start point) +G1 Z#101 F#102 +F#103 +G1 X56.896000 Y70.231000 +G1 X58.631667 Y70.231000 +G1 X58.631667 Y71.966667 +G1 X56.896000 Y71.966667 +G0 Z#100 +(polygon end, distance 6.94) +(polygon 143) +G0 X80.475667 Y71.966667 (start point) +G1 Z#101 F#102 +F#103 +G1 X80.221667 Y71.882000 +G1 X79.840667 Y71.501000 +G1 X79.756000 Y71.162333 +G1 X79.798333 Y70.781333 +G1 X80.052333 Y70.442667 +G1 X80.348667 Y70.273333 +G1 X80.899000 Y70.273333 +G1 X81.237667 Y70.485000 +G1 X81.449333 Y70.823667 +G1 X81.449333 Y71.374000 +G1 X81.237667 Y71.712667 +G1 X80.899000 Y71.924333 +G1 X80.475667 Y71.966667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 144) +G0 X83.015667 Y71.966667 (start point) +G1 Z#101 F#102 +F#103 +G1 X82.761667 Y71.882000 +G1 X82.380667 Y71.501000 +G1 X82.296000 Y71.162333 +G1 X82.338333 Y70.781333 +G1 X82.592333 Y70.442667 +G1 X82.888667 Y70.273333 +G1 X83.439000 Y70.273333 +G1 X83.777667 Y70.485000 +G1 X83.989333 Y70.823667 +G1 X83.989333 Y71.374000 +G1 X83.777667 Y71.712667 +G1 X83.439000 Y71.924333 +G1 X83.015667 Y71.966667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 145) +G0 X84.836000 Y71.966667 (start point) +G1 Z#101 F#102 +F#103 +G1 X84.836000 Y70.231000 +G1 X86.571667 Y70.231000 +G1 X86.571667 Y71.966667 +G1 X84.836000 Y71.966667 +G0 Z#100 +(polygon end, distance 6.94) +(polygon 146) +G0 X96.350667 Y71.966667 (start point) +G1 Z#101 F#102 +F#103 +G1 X96.096667 Y71.882000 +G1 X95.715667 Y71.501000 +G1 X95.631000 Y71.162333 +G1 X95.673333 Y70.781333 +G1 X95.927333 Y70.442667 +G1 X96.223667 Y70.273333 +G1 X96.774000 Y70.273333 +G1 X97.112667 Y70.485000 +G1 X97.324333 Y70.823667 +G1 X97.324333 Y71.374000 +G1 X97.112667 Y71.712667 +G1 X96.774000 Y71.924333 +G1 X96.350667 Y71.966667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 147) +G0 X98.890667 Y71.966667 (start point) +G1 Z#101 F#102 +F#103 +G1 X98.636667 Y71.882000 +G1 X98.255667 Y71.501000 +G1 X98.171000 Y71.162333 +G1 X98.213333 Y70.781333 +G1 X98.467333 Y70.442667 +G1 X98.763667 Y70.273333 +G1 X99.314000 Y70.273333 +G1 X99.652667 Y70.485000 +G1 X99.864333 Y70.823667 +G1 X99.864333 Y71.374000 +G1 X99.652667 Y71.712667 +G1 X99.314000 Y71.924333 +G1 X98.890667 Y71.966667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 148) +G0 X101.430667 Y71.966667 (start point) +G1 Z#101 F#102 +F#103 +G1 X101.176667 Y71.882000 +G1 X100.795667 Y71.501000 +G1 X100.711000 Y71.162333 +G1 X100.753333 Y70.781333 +G1 X101.007333 Y70.442667 +G1 X101.303667 Y70.273333 +G1 X101.854000 Y70.273333 +G1 X102.192667 Y70.485000 +G1 X102.404333 Y70.823667 +G1 X102.404333 Y71.374000 +G1 X102.192667 Y71.712667 +G1 X101.854000 Y71.924333 +G1 X101.430667 Y71.966667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 149) +G0 X103.970667 Y71.966667 (start point) +G1 Z#101 F#102 +F#103 +G1 X103.716667 Y71.882000 +G1 X103.335667 Y71.501000 +G1 X103.251000 Y71.162333 +G1 X103.293333 Y70.781333 +G1 X103.547333 Y70.442667 +G1 X103.843667 Y70.273333 +G1 X104.394000 Y70.273333 +G1 X104.732667 Y70.485000 +G1 X104.944333 Y70.823667 +G1 X104.944333 Y71.374000 +G1 X104.732667 Y71.712667 +G1 X104.394000 Y71.924333 +G1 X103.970667 Y71.966667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 150) +G0 X106.510667 Y71.966667 (start point) +G1 Z#101 F#102 +F#103 +G1 X106.256667 Y71.882000 +G1 X105.875667 Y71.501000 +G1 X105.791000 Y71.162333 +G1 X105.833333 Y70.781333 +G1 X106.087333 Y70.442667 +G1 X106.383667 Y70.273333 +G1 X106.934000 Y70.273333 +G1 X107.272667 Y70.485000 +G1 X107.484333 Y70.823667 +G1 X107.484333 Y71.374000 +G1 X107.272667 Y71.712667 +G1 X106.934000 Y71.924333 +G1 X106.510667 Y71.966667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 151) +G0 X108.331000 Y71.966667 (start point) +G1 Z#101 F#102 +F#103 +G1 X108.331000 Y70.231000 +G1 X110.066667 Y70.231000 +G1 X110.066667 Y71.966667 +G1 X108.331000 Y71.966667 +G0 Z#100 +(polygon end, distance 6.94) +(polygon 152) +G0 X115.400667 Y71.966667 (start point) +G1 Z#101 F#102 +F#103 +G1 X115.146667 Y71.882000 +G1 X114.765667 Y71.501000 +G1 X114.681000 Y71.162333 +G1 X114.723333 Y70.781333 +G1 X114.977333 Y70.442667 +G1 X115.273667 Y70.273333 +G1 X115.824000 Y70.273333 +G1 X116.162667 Y70.485000 +G1 X116.374333 Y70.823667 +G1 X116.374333 Y71.374000 +G1 X116.162667 Y71.712667 +G1 X115.824000 Y71.924333 +G1 X115.400667 Y71.966667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 153) +G0 X125.560667 Y71.966667 (start point) +G1 Z#101 F#102 +F#103 +G1 X125.306667 Y71.882000 +G1 X124.925667 Y71.501000 +G1 X124.841000 Y71.162333 +G1 X124.883333 Y70.781333 +G1 X125.137333 Y70.442667 +G1 X125.433667 Y70.273333 +G1 X125.984000 Y70.273333 +G1 X126.322667 Y70.485000 +G1 X126.534333 Y70.823667 +G1 X126.534333 Y71.374000 +G1 X126.322667 Y71.712667 +G1 X125.984000 Y71.924333 +G1 X125.560667 Y71.966667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 154) +G0 X128.100667 Y71.966667 (start point) +G1 Z#101 F#102 +F#103 +G1 X127.846667 Y71.882000 +G1 X127.465667 Y71.501000 +G1 X127.381000 Y71.162333 +G1 X127.423333 Y70.781333 +G1 X127.677333 Y70.442667 +G1 X127.973667 Y70.273333 +G1 X128.524000 Y70.273333 +G1 X128.862667 Y70.485000 +G1 X129.074333 Y70.823667 +G1 X129.074333 Y71.374000 +G1 X128.862667 Y71.712667 +G1 X128.524000 Y71.924333 +G1 X128.100667 Y71.966667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 155) +G0 X67.775667 Y70.696667 (start point) +G1 Z#101 F#102 +F#103 +G1 X67.521667 Y70.612000 +G1 X67.140667 Y70.231000 +G1 X67.056000 Y69.892333 +G1 X67.098333 Y69.511333 +G1 X67.352333 Y69.172667 +G1 X67.648667 Y69.003333 +G1 X68.199000 Y69.003333 +G1 X68.537667 Y69.215000 +G1 X68.749333 Y69.553667 +G1 X68.749333 Y70.104000 +G1 X68.537667 Y70.442667 +G1 X68.199000 Y70.654333 +G1 X67.775667 Y70.696667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 156) +G0 X72.220667 Y70.696667 (start point) +G1 Z#101 F#102 +F#103 +G1 X71.966667 Y70.612000 +G1 X71.585667 Y70.231000 +G1 X71.501000 Y69.892333 +G1 X71.543333 Y69.511333 +G1 X71.797333 Y69.172667 +G1 X72.093667 Y69.003333 +G1 X72.644000 Y69.003333 +G1 X72.982667 Y69.215000 +G1 X73.194333 Y69.553667 +G1 X73.194333 Y70.104000 +G1 X72.982667 Y70.442667 +G1 X72.644000 Y70.654333 +G1 X72.220667 Y70.696667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 157) +G0 X159.850667 Y70.654333 (start point) +G1 Z#101 F#102 +F#103 +G1 X159.596667 Y70.569667 +G1 X159.215667 Y70.188667 +G1 X159.131000 Y69.850000 +G1 X159.173333 Y69.469000 +G1 X159.427333 Y69.130333 +G1 X159.723667 Y68.961000 +G1 X160.274000 Y68.961000 +G1 X160.612667 Y69.172667 +G1 X160.824333 Y69.511333 +G1 X160.824333 Y70.061667 +G1 X160.612667 Y70.400333 +G1 X160.274000 Y70.612000 +G1 X159.850667 Y70.654333 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 158) +G0 X100.160667 Y70.442667 (start point) +G1 Z#101 F#102 +F#103 +G1 X99.906667 Y70.273333 +G1 X99.737333 Y70.061667 +G1 X78.655333 Y70.061667 +G1 X77.343000 Y68.791667 +G1 X51.985333 Y68.791667 +G1 X51.773667 Y69.045667 +G1 X51.519667 Y69.172667 +G1 X51.265667 Y69.172667 +G1 X51.011667 Y68.961000 +G1 X50.800000 Y68.707000 +G1 X50.800000 Y68.410667 +G1 X51.011667 Y68.156667 +G1 X51.265667 Y67.945000 +G1 X51.519667 Y67.945000 +G1 X51.773667 Y68.072000 +G1 X51.985333 Y68.326000 +G1 X77.512333 Y68.326000 +G1 X78.824667 Y69.596000 +G1 X99.737333 Y69.596000 +G1 X99.949000 Y69.342000 +G1 X100.203000 Y69.215000 +G1 X100.457000 Y69.215000 +G1 X100.711000 Y69.426667 +G1 X100.922667 Y69.680667 +G1 X100.922667 Y69.977000 +G1 X100.711000 Y70.231000 +G1 X100.457000 Y70.442667 +G1 X100.160667 Y70.442667 +G0 Z#100 +(polygon end, distance 103.25) +(polygon 159) +G0 X105.240667 Y70.442667 (start point) +G1 Z#101 F#102 +F#103 +G1 X104.986667 Y70.231000 +G1 X104.775000 Y69.977000 +G1 X104.775000 Y69.680667 +G1 X104.986667 Y69.426667 +G1 X105.240667 Y69.215000 +G1 X105.494667 Y69.215000 +G1 X105.748667 Y69.342000 +G1 X105.960333 Y69.596000 +G1 X157.522333 Y69.596000 +G1 X157.734000 Y69.342000 +G1 X157.988000 Y69.215000 +G1 X158.242000 Y69.215000 +G1 X158.496000 Y69.426667 +G1 X158.707667 Y69.680667 +G1 X158.707667 Y69.977000 +G1 X158.496000 Y70.231000 +G1 X158.242000 Y70.442667 +G1 X157.988000 Y70.442667 +G1 X157.734000 Y70.315667 +G1 X157.522333 Y70.061667 +G1 X105.960333 Y70.061667 +G1 X105.748667 Y70.315667 +G1 X105.494667 Y70.442667 +G1 X105.240667 Y70.442667 +G0 Z#100 +(polygon end, distance 109.84) +(polygon 160) +G0 X14.435667 Y70.061667 (start point) +G1 Z#101 F#102 +F#103 +G1 X14.181667 Y69.977000 +G1 X13.800667 Y69.596000 +G1 X13.716000 Y69.257333 +G1 X13.758333 Y68.876333 +G1 X14.012333 Y68.537667 +G1 X14.308667 Y68.368333 +G1 X14.859000 Y68.368333 +G1 X15.197667 Y68.580000 +G1 X15.409333 Y68.918667 +G1 X15.409333 Y69.469000 +G1 X15.197667 Y69.807667 +G1 X14.859000 Y70.019333 +G1 X14.435667 Y70.061667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 161) +G0 X16.975667 Y70.061667 (start point) +G1 Z#101 F#102 +F#103 +G1 X16.721667 Y69.977000 +G1 X16.340667 Y69.596000 +G1 X16.256000 Y69.257333 +G1 X16.298333 Y68.876333 +G1 X16.552333 Y68.537667 +G1 X16.848667 Y68.368333 +G1 X17.399000 Y68.368333 +G1 X17.737667 Y68.580000 +G1 X17.949333 Y68.918667 +G1 X17.949333 Y69.469000 +G1 X17.737667 Y69.807667 +G1 X17.399000 Y70.019333 +G1 X16.975667 Y70.061667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 162) +G0 X19.515667 Y70.061667 (start point) +G1 Z#101 F#102 +F#103 +G1 X19.261667 Y69.977000 +G1 X18.880667 Y69.596000 +G1 X18.796000 Y69.257333 +G1 X18.838333 Y68.876333 +G1 X19.092333 Y68.537667 +G1 X19.388667 Y68.368333 +G1 X19.939000 Y68.368333 +G1 X20.277667 Y68.580000 +G1 X20.489333 Y68.918667 +G1 X20.489333 Y69.469000 +G1 X20.277667 Y69.807667 +G1 X19.939000 Y70.019333 +G1 X19.515667 Y70.061667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 163) +G0 X162.390667 Y69.257333 (start point) +G1 Z#101 F#102 +F#103 +G1 X162.136667 Y69.172667 +G1 X161.755667 Y68.791667 +G1 X161.671000 Y68.453000 +G1 X161.713333 Y68.072000 +G1 X161.967333 Y67.733333 +G1 X162.263667 Y67.564000 +G1 X162.814000 Y67.564000 +G1 X163.152667 Y67.775667 +G1 X163.364333 Y68.114333 +G1 X163.364333 Y68.664667 +G1 X163.152667 Y69.003333 +G1 X162.814000 Y69.215000 +G1 X162.390667 Y69.257333 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 164) +G0 X102.700667 Y69.172667 (start point) +G1 Z#101 F#102 +F#103 +G1 X102.446667 Y68.961000 +G1 X102.235000 Y68.707000 +G1 X102.235000 Y68.410667 +G1 X102.446667 Y68.156667 +G1 X102.700667 Y67.945000 +G1 X102.954667 Y67.945000 +G1 X103.208667 Y68.072000 +G1 X103.420333 Y68.326000 +G1 X156.252333 Y68.326000 +G1 X156.464000 Y68.072000 +G1 X156.718000 Y67.945000 +G1 X156.972000 Y67.945000 +G1 X157.226000 Y68.156667 +G1 X157.437667 Y68.410667 +G1 X157.437667 Y68.707000 +G1 X157.226000 Y68.961000 +G1 X156.972000 Y69.172667 +G1 X156.718000 Y69.172667 +G1 X156.464000 Y69.045667 +G1 X156.252333 Y68.791667 +G1 X103.420333 Y68.791667 +G1 X103.208667 Y69.045667 +G1 X102.954667 Y69.172667 +G1 X102.700667 Y69.172667 +G0 Z#100 +(polygon end, distance 112.38) +(polygon 165) +G0 X81.703333 Y69.130333 (start point) +G1 Z#101 F#102 +F#103 +G1 X81.322333 Y69.003333 +G1 X80.814333 Y68.495333 +G1 X80.687333 Y68.072000 +G1 X80.687333 Y67.775667 +G1 X80.814333 Y67.352333 +G1 X81.322333 Y66.844333 +G1 X81.788000 Y66.717333 +G1 X82.211333 Y66.759667 +G1 X82.634667 Y66.971333 +G1 X88.138000 Y66.971333 +G1 X88.561333 Y66.759667 +G1 X88.984667 Y66.717333 +G1 X89.450333 Y66.844333 +G1 X89.958333 Y67.352333 +G1 X90.085333 Y67.775667 +G1 X90.085333 Y68.072000 +G1 X89.958333 Y68.495333 +G1 X89.450333 Y69.003333 +G1 X88.984667 Y69.130333 +G1 X88.561333 Y69.088000 +G1 X88.138000 Y68.876333 +G1 X82.634667 Y68.876333 +G1 X82.211333 Y69.088000 +G1 X81.703333 Y69.130333 +G0 Z#100 +(polygon end, distance 21.77) +(polygon 166) +G0 X79.205667 Y68.537667 (start point) +G1 Z#101 F#102 +F#103 +G1 X78.951667 Y68.326000 +G1 X78.740000 Y68.072000 +G1 X78.782333 Y67.648667 +G1 X78.613000 Y67.521667 +G1 X42.460333 Y67.521667 +G1 X42.248667 Y67.775667 +G1 X41.994667 Y67.902667 +G1 X41.740667 Y67.902667 +G1 X41.486667 Y67.691000 +G1 X41.275000 Y67.437000 +G1 X41.275000 Y67.140667 +G1 X41.486667 Y66.886667 +G1 X41.740667 Y66.675000 +G1 X41.994667 Y66.675000 +G1 X42.248667 Y66.802000 +G1 X42.460333 Y67.056000 +G1 X78.782333 Y67.056000 +G1 X79.121000 Y67.352333 +G1 X79.502000 Y67.310000 +G1 X79.756000 Y67.521667 +G1 X79.967667 Y67.775667 +G1 X79.967667 Y68.072000 +G1 X79.756000 Y68.326000 +G1 X79.502000 Y68.537667 +G1 X79.205667 Y68.537667 +G0 Z#100 +(polygon end, distance 79.88) +(polygon 167) +G0 X92.540667 Y68.537667 (start point) +G1 Z#101 F#102 +F#103 +G1 X92.286667 Y68.326000 +G1 X92.075000 Y68.072000 +G1 X92.075000 Y67.775667 +G1 X92.286667 Y67.521667 +G1 X92.540667 Y67.310000 +G1 X92.794667 Y67.310000 +G1 X93.048667 Y67.437000 +G1 X93.260333 Y67.691000 +G1 X99.737333 Y67.691000 +G1 X99.949000 Y67.437000 +G1 X100.203000 Y67.310000 +G1 X100.457000 Y67.310000 +G1 X100.711000 Y67.521667 +G1 X100.922667 Y67.775667 +G1 X100.922667 Y68.072000 +G1 X100.711000 Y68.326000 +G1 X100.457000 Y68.537667 +G1 X100.203000 Y68.537667 +G1 X99.949000 Y68.410667 +G1 X99.737333 Y68.156667 +G1 X93.260333 Y68.156667 +G1 X93.048667 Y68.410667 +G1 X92.794667 Y68.537667 +G1 X92.540667 Y68.537667 +G0 Z#100 +(polygon end, distance 19.67) +(polygon 168) +G0 X159.808333 Y67.945000 (start point) +G1 Z#101 F#102 +F#103 +G1 X159.385000 Y67.733333 +G1 X159.173333 Y67.437000 +G1 X159.046333 Y67.140667 +G1 X159.046333 Y65.743667 +G1 X158.326667 Y65.066333 +G1 X126.026333 Y65.066333 +G1 X126.026333 Y66.167000 +G1 X125.899333 Y66.463333 +G1 X125.899333 Y66.844333 +G1 X125.518333 Y66.844333 +G1 X125.222000 Y66.971333 +G1 X124.925667 Y66.971333 +G1 X124.629333 Y66.844333 +G1 X124.248333 Y66.844333 +G1 X124.248333 Y66.463333 +G1 X124.121333 Y66.167000 +G1 X124.121333 Y65.066333 +G1 X117.136333 Y65.066333 +G1 X117.094000 Y66.294000 +G1 X116.840000 Y66.675000 +G1 X116.459000 Y66.929000 +G1 X115.908667 Y66.929000 +G1 X115.527667 Y66.675000 +G1 X115.273667 Y66.294000 +G1 X115.231333 Y65.066333 +G1 X114.046000 Y65.066333 +G1 X112.225667 Y66.844333 +G1 X111.844667 Y66.971333 +G1 X111.463667 Y66.929000 +G1 X111.082667 Y66.675000 +G1 X110.828667 Y66.294000 +G1 X110.786333 Y65.913000 +G1 X110.913333 Y65.532000 +G1 X113.030000 Y63.373000 +G1 X113.453333 Y63.161333 +G1 X158.919333 Y63.161333 +G1 X159.342667 Y63.373000 +G1 X160.824333 Y64.897000 +G1 X160.951333 Y65.278000 +G1 X160.909000 Y67.267667 +G1 X160.655000 Y67.648667 +G1 X160.274000 Y67.902667 +G1 X159.808333 Y67.945000 +G0 Z#100 +(polygon end, distance 114.53) +(polygon 169) +G0 X14.435667 Y67.521667 (start point) +G1 Z#101 F#102 +F#103 +G1 X14.181667 Y67.437000 +G1 X13.800667 Y67.056000 +G1 X13.716000 Y66.717333 +G1 X13.758333 Y66.336333 +G1 X14.012333 Y65.997667 +G1 X14.308667 Y65.828333 +G1 X14.859000 Y65.828333 +G1 X15.197667 Y66.040000 +G1 X15.409333 Y66.378667 +G1 X15.409333 Y66.929000 +G1 X15.197667 Y67.267667 +G1 X14.859000 Y67.479333 +G1 X14.435667 Y67.521667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 170) +G0 X16.975667 Y67.521667 (start point) +G1 Z#101 F#102 +F#103 +G1 X16.721667 Y67.437000 +G1 X16.340667 Y67.056000 +G1 X16.256000 Y66.717333 +G1 X16.298333 Y66.336333 +G1 X16.552333 Y65.997667 +G1 X16.848667 Y65.828333 +G1 X17.399000 Y65.828333 +G1 X17.737667 Y66.040000 +G1 X17.949333 Y66.378667 +G1 X17.949333 Y66.929000 +G1 X17.737667 Y67.267667 +G1 X17.399000 Y67.479333 +G1 X16.975667 Y67.521667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 171) +G0 X19.515667 Y67.521667 (start point) +G1 Z#101 F#102 +F#103 +G1 X19.261667 Y67.437000 +G1 X18.880667 Y67.056000 +G1 X18.796000 Y66.717333 +G1 X18.838333 Y66.336333 +G1 X19.092333 Y65.997667 +G1 X19.388667 Y65.828333 +G1 X19.939000 Y65.828333 +G1 X20.277667 Y66.040000 +G1 X20.489333 Y66.378667 +G1 X20.489333 Y66.929000 +G1 X20.277667 Y67.267667 +G1 X19.939000 Y67.479333 +G1 X19.515667 Y67.521667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 172) +G0 X34.120667 Y66.886667 (start point) +G1 Z#101 F#102 +F#103 +G1 X33.909000 Y66.802000 +G1 X33.612667 Y66.590333 +G1 X33.443333 Y66.294000 +G1 X33.401000 Y65.955333 +G1 X33.485667 Y65.616667 +G1 X33.824333 Y65.278000 +G1 X33.824333 Y64.050333 +G1 X33.909000 Y63.881000 +G1 X35.856333 Y61.891333 +G1 X36.110333 Y61.764333 +G1 X48.175333 Y61.764333 +G1 X48.217667 Y61.637333 +G1 X48.556333 Y61.383333 +G1 X48.937333 Y61.341000 +G1 X49.276000 Y61.425667 +G1 X49.614667 Y61.764333 +G1 X59.605333 Y61.764333 +G1 X59.647667 Y61.637333 +G1 X59.986333 Y61.383333 +G1 X60.367333 Y61.341000 +G1 X60.706000 Y61.425667 +G1 X61.044667 Y61.764333 +G1 X77.978000 Y61.764333 +G1 X78.316667 Y61.425667 +G1 X78.655333 Y61.341000 +G1 X79.036333 Y61.383333 +G1 X79.375000 Y61.637333 +G1 X79.544333 Y61.933667 +G1 X79.544333 Y62.484000 +G1 X79.375000 Y62.780333 +G1 X79.036333 Y63.034333 +G1 X78.655333 Y63.076667 +G1 X78.316667 Y62.992000 +G1 X77.978000 Y62.653333 +G1 X61.002333 Y62.653333 +G1 X60.960000 Y62.780333 +G1 X60.621333 Y63.034333 +G1 X60.240333 Y63.076667 +G1 X59.901667 Y62.992000 +G1 X59.563000 Y62.653333 +G1 X49.572333 Y62.653333 +G1 X49.530000 Y62.780333 +G1 X49.191333 Y63.034333 +G1 X48.810333 Y63.076667 +G1 X48.471667 Y62.992000 +G1 X48.133000 Y62.653333 +G1 X36.322000 Y62.653333 +G1 X34.713333 Y64.304333 +G1 X34.713333 Y65.278000 +G1 X35.052000 Y65.616667 +G1 X35.136667 Y65.955333 +G1 X35.094333 Y66.336333 +G1 X34.840333 Y66.675000 +G1 X34.544000 Y66.844333 +G1 X34.120667 Y66.886667 +G0 Z#100 +(polygon end, distance 101.61) +(polygon 173) +G0 X37.846000 Y66.886667 (start point) +G1 Z#101 F#102 +F#103 +G1 X37.846000 Y65.151000 +G1 X39.581667 Y65.151000 +G1 X39.581667 Y66.886667 +G1 X37.846000 Y66.886667 +G0 Z#100 +(polygon end, distance 6.94) +(polygon 174) +G0 X48.725667 Y66.886667 (start point) +G1 Z#101 F#102 +F#103 +G1 X48.471667 Y66.802000 +G1 X48.090667 Y66.421000 +G1 X48.006000 Y66.082333 +G1 X48.048333 Y65.701333 +G1 X48.302333 Y65.362667 +G1 X48.598667 Y65.193333 +G1 X49.149000 Y65.193333 +G1 X49.487667 Y65.405000 +G1 X49.699333 Y65.743667 +G1 X49.699333 Y66.294000 +G1 X49.487667 Y66.632667 +G1 X49.149000 Y66.844333 +G1 X48.725667 Y66.886667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 175) +G0 X53.170667 Y66.886667 (start point) +G1 Z#101 F#102 +F#103 +G1 X52.916667 Y66.802000 +G1 X52.535667 Y66.421000 +G1 X52.451000 Y66.082333 +G1 X52.493333 Y65.701333 +G1 X52.747333 Y65.362667 +G1 X53.043667 Y65.193333 +G1 X53.594000 Y65.193333 +G1 X53.932667 Y65.405000 +G1 X54.144333 Y65.786000 +G1 X57.192333 Y65.786000 +G1 X57.404000 Y65.532000 +G1 X57.658000 Y65.405000 +G1 X57.912000 Y65.405000 +G1 X58.166000 Y65.616667 +G1 X58.377667 Y65.870667 +G1 X58.377667 Y66.167000 +G1 X58.166000 Y66.421000 +G1 X57.912000 Y66.632667 +G1 X57.658000 Y66.632667 +G1 X57.404000 Y66.505667 +G1 X57.192333 Y66.251667 +G1 X54.144333 Y66.251667 +G1 X53.932667 Y66.632667 +G1 X53.594000 Y66.844333 +G1 X53.170667 Y66.886667 +G0 Z#100 +(polygon end, distance 14.40) +(polygon 176) +G0 X62.611000 Y66.886667 (start point) +G1 Z#101 F#102 +F#103 +G1 X62.611000 Y65.151000 +G1 X64.346667 Y65.151000 +G1 X64.346667 Y65.786000 +G1 X67.691000 Y65.786000 +G1 X67.691000 Y65.151000 +G1 X69.088000 Y65.151000 +G1 X69.765333 Y64.516000 +G1 X87.037333 Y64.516000 +G1 X87.249000 Y64.262000 +G1 X87.503000 Y64.135000 +G1 X87.757000 Y64.135000 +G1 X88.011000 Y64.346667 +G1 X88.222667 Y64.600667 +G1 X88.222667 Y64.897000 +G1 X88.011000 Y65.151000 +G1 X87.757000 Y65.362667 +G1 X87.503000 Y65.362667 +G1 X87.249000 Y65.235667 +G1 X87.037333 Y64.981667 +G1 X69.934667 Y64.981667 +G1 X69.426667 Y65.447333 +G1 X69.426667 Y66.886667 +G1 X67.691000 Y66.886667 +G1 X67.691000 Y66.251667 +G1 X64.346667 Y66.251667 +G1 X64.346667 Y66.886667 +G1 X62.611000 Y66.886667 +G0 Z#100 +(polygon end, distance 58.36) +(polygon 177) +G0 X78.570667 Y66.886667 (start point) +G1 Z#101 F#102 +F#103 +G1 X78.316667 Y66.802000 +G1 X77.935667 Y66.421000 +G1 X77.851000 Y66.082333 +G1 X77.893333 Y65.701333 +G1 X78.147333 Y65.362667 +G1 X78.443667 Y65.193333 +G1 X78.994000 Y65.193333 +G1 X79.332667 Y65.405000 +G1 X79.544333 Y65.743667 +G1 X79.544333 Y66.294000 +G1 X79.332667 Y66.632667 +G1 X78.994000 Y66.844333 +G1 X78.570667 Y66.886667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 178) +G0 X83.015667 Y66.886667 (start point) +G1 Z#101 F#102 +F#103 +G1 X82.761667 Y66.802000 +G1 X82.380667 Y66.421000 +G1 X82.296000 Y66.082333 +G1 X82.338333 Y65.701333 +G1 X82.592333 Y65.362667 +G1 X82.888667 Y65.193333 +G1 X83.439000 Y65.193333 +G1 X83.777667 Y65.405000 +G1 X83.989333 Y65.743667 +G1 X83.989333 Y66.294000 +G1 X83.777667 Y66.632667 +G1 X83.439000 Y66.844333 +G1 X83.015667 Y66.886667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 179) +G0 X92.456000 Y66.886667 (start point) +G1 Z#101 F#102 +F#103 +G1 X92.456000 Y65.151000 +G1 X94.191667 Y65.151000 +G1 X94.191667 Y66.886667 +G1 X92.456000 Y66.886667 +G0 Z#100 +(polygon end, distance 6.94) +(polygon 180) +G0 X98.171000 Y66.886667 (start point) +G1 Z#101 F#102 +F#103 +G1 X98.171000 Y65.151000 +G1 X99.906667 Y65.151000 +G1 X99.906667 Y66.886667 +G1 X98.171000 Y66.886667 +G0 Z#100 +(polygon end, distance 6.94) +(polygon 181) +G0 X101.430667 Y66.886667 (start point) +G1 Z#101 F#102 +F#103 +G1 X101.176667 Y66.802000 +G1 X100.795667 Y66.421000 +G1 X100.711000 Y66.082333 +G1 X100.753333 Y65.701333 +G1 X101.007333 Y65.362667 +G1 X101.303667 Y65.193333 +G1 X101.854000 Y65.193333 +G1 X102.192667 Y65.405000 +G1 X102.404333 Y65.743667 +G1 X102.404333 Y66.294000 +G1 X102.192667 Y66.632667 +G1 X101.854000 Y66.844333 +G1 X101.430667 Y66.886667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 182) +G0 X106.426000 Y66.886667 (start point) +G1 Z#101 F#102 +F#103 +G1 X106.426000 Y65.151000 +G1 X108.161667 Y65.151000 +G1 X108.161667 Y66.886667 +G1 X106.426000 Y66.886667 +G0 Z#100 +(polygon end, distance 6.94) +(polygon 183) +G0 X109.685667 Y66.886667 (start point) +G1 Z#101 F#102 +F#103 +G1 X109.431667 Y66.802000 +G1 X109.050667 Y66.421000 +G1 X108.966000 Y66.082333 +G1 X109.008333 Y65.701333 +G1 X109.262333 Y65.362667 +G1 X109.558667 Y65.193333 +G1 X110.109000 Y65.193333 +G1 X110.447667 Y65.405000 +G1 X110.659333 Y65.743667 +G1 X110.659333 Y66.294000 +G1 X110.447667 Y66.632667 +G1 X110.109000 Y66.844333 +G1 X109.685667 Y66.886667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 184) +G0 X117.856000 Y66.886667 (start point) +G1 Z#101 F#102 +F#103 +G1 X117.856000 Y65.151000 +G1 X119.591667 Y65.151000 +G1 X119.591667 Y66.886667 +G1 X117.856000 Y66.886667 +G0 Z#100 +(polygon end, distance 6.94) +(polygon 185) +G0 X135.085667 Y66.844333 (start point) +G1 Z#101 F#102 +F#103 +G1 X134.831667 Y66.717333 +G1 X134.577667 Y66.505667 +G1 X134.450667 Y66.251667 +G1 X130.090333 Y66.251667 +G1 X129.878667 Y66.505667 +G1 X129.624667 Y66.632667 +G1 X129.370667 Y66.632667 +G1 X129.116667 Y66.421000 +G1 X128.905000 Y66.167000 +G1 X128.905000 Y65.870667 +G1 X129.116667 Y65.616667 +G1 X129.370667 Y65.405000 +G1 X129.624667 Y65.405000 +G1 X129.878667 Y65.532000 +G1 X130.090333 Y65.786000 +G1 X134.450667 Y65.786000 +G1 X134.577667 Y65.532000 +G1 X134.831667 Y65.320333 +G1 X135.128000 Y65.193333 +G1 X135.339667 Y65.193333 +G1 X135.636000 Y65.320333 +G1 X135.890000 Y65.532000 +G1 X136.059333 Y65.870667 +G1 X136.059333 Y66.167000 +G1 X135.890000 Y66.505667 +G1 X135.636000 Y66.717333 +G1 X135.339667 Y66.844333 +G1 X135.085667 Y66.844333 +G0 Z#100 +(polygon end, distance 16.74) +(polygon 186) +G0 X85.555667 Y66.632667 (start point) +G1 Z#101 F#102 +F#103 +G1 X85.301667 Y66.421000 +G1 X85.090000 Y66.167000 +G1 X85.090000 Y65.870667 +G1 X85.301667 Y65.616667 +G1 X85.555667 Y65.405000 +G1 X85.809667 Y65.405000 +G1 X86.063667 Y65.532000 +G1 X86.275333 Y65.786000 +G1 X88.307333 Y65.786000 +G1 X88.519000 Y65.532000 +G1 X88.773000 Y65.405000 +G1 X89.027000 Y65.405000 +G1 X89.281000 Y65.616667 +G1 X89.492667 Y65.870667 +G1 X89.492667 Y66.167000 +G1 X89.281000 Y66.421000 +G1 X89.027000 Y66.632667 +G1 X88.773000 Y66.632667 +G1 X88.519000 Y66.505667 +G1 X88.307333 Y66.251667 +G1 X86.275333 Y66.251667 +G1 X86.063667 Y66.505667 +G1 X85.809667 Y66.632667 +G1 X85.555667 Y66.632667 +G0 Z#100 +(polygon end, distance 10.78) +(polygon 187) +G0 X14.435667 Y64.981667 (start point) +G1 Z#101 F#102 +F#103 +G1 X14.181667 Y64.897000 +G1 X13.800667 Y64.516000 +G1 X13.716000 Y64.177333 +G1 X13.758333 Y63.796333 +G1 X14.012333 Y63.457667 +G1 X14.308667 Y63.288333 +G1 X14.859000 Y63.288333 +G1 X15.197667 Y63.500000 +G1 X15.409333 Y63.838667 +G1 X15.409333 Y64.389000 +G1 X15.197667 Y64.727667 +G1 X14.859000 Y64.939333 +G1 X14.435667 Y64.981667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 188) +G0 X16.975667 Y64.981667 (start point) +G1 Z#101 F#102 +F#103 +G1 X16.721667 Y64.897000 +G1 X16.340667 Y64.516000 +G1 X16.256000 Y64.177333 +G1 X16.298333 Y63.796333 +G1 X16.552333 Y63.457667 +G1 X16.848667 Y63.288333 +G1 X17.399000 Y63.288333 +G1 X17.737667 Y63.500000 +G1 X17.949333 Y63.838667 +G1 X17.949333 Y64.389000 +G1 X17.737667 Y64.727667 +G1 X17.399000 Y64.939333 +G1 X16.975667 Y64.981667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 189) +G0 X19.515667 Y64.981667 (start point) +G1 Z#101 F#102 +F#103 +G1 X19.261667 Y64.897000 +G1 X18.880667 Y64.516000 +G1 X18.796000 Y64.177333 +G1 X18.838333 Y63.796333 +G1 X19.092333 Y63.457667 +G1 X19.388667 Y63.288333 +G1 X19.939000 Y63.288333 +G1 X20.277667 Y63.500000 +G1 X20.489333 Y63.838667 +G1 X20.489333 Y64.389000 +G1 X20.277667 Y64.727667 +G1 X19.939000 Y64.939333 +G1 X19.515667 Y64.981667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 190) +G0 X36.660667 Y64.092667 (start point) +G1 Z#101 F#102 +F#103 +G1 X36.406667 Y63.881000 +G1 X36.195000 Y63.627000 +G1 X36.195000 Y63.330667 +G1 X36.406667 Y63.076667 +G1 X36.660667 Y62.865000 +G1 X36.914667 Y62.865000 +G1 X37.168667 Y62.992000 +G1 X37.380333 Y63.246000 +G1 X97.197333 Y63.246000 +G1 X97.409000 Y62.992000 +G1 X97.663000 Y62.865000 +G1 X97.917000 Y62.865000 +G1 X98.171000 Y63.076667 +G1 X98.382667 Y63.330667 +G1 X98.382667 Y63.627000 +G1 X98.171000 Y63.881000 +G1 X97.917000 Y64.092667 +G1 X97.663000 Y64.092667 +G1 X97.409000 Y63.965667 +G1 X97.197333 Y63.711667 +G1 X37.380333 Y63.711667 +G1 X37.168667 Y63.965667 +G1 X36.914667 Y64.092667 +G1 X36.660667 Y64.092667 +G0 Z#100 +(polygon end, distance 126.35) +(polygon 191) +G0 X82.380667 Y63.076667 (start point) +G1 Z#101 F#102 +F#103 +G1 X82.126667 Y62.992000 +G1 X81.745667 Y62.611000 +G1 X81.661000 Y62.272333 +G1 X81.703333 Y61.891333 +G1 X81.957333 Y61.552667 +G1 X82.253667 Y61.383333 +G1 X82.592333 Y61.341000 +G1 X82.931000 Y61.425667 +G1 X83.269667 Y61.722000 +G1 X117.983000 Y61.722000 +G1 X118.321667 Y61.425667 +G1 X118.618000 Y61.341000 +G1 X118.829667 Y61.341000 +G1 X119.126000 Y61.425667 +G1 X119.464667 Y61.722000 +G1 X134.493000 Y61.722000 +G1 X134.831667 Y61.425667 +G1 X135.128000 Y61.341000 +G1 X135.339667 Y61.341000 +G1 X135.636000 Y61.425667 +G1 X135.974667 Y61.722000 +G1 X138.938000 Y61.722000 +G1 X139.276667 Y61.425667 +G1 X139.615333 Y61.341000 +G1 X139.996333 Y61.383333 +G1 X140.335000 Y61.637333 +G1 X140.504333 Y61.933667 +G1 X140.504333 Y62.484000 +G1 X140.335000 Y62.780333 +G1 X139.996333 Y63.034333 +G1 X139.615333 Y63.076667 +G1 X139.276667 Y62.992000 +G1 X138.938000 Y62.695667 +G1 X135.974667 Y62.695667 +G1 X135.636000 Y62.992000 +G1 X135.339667 Y63.076667 +G1 X135.128000 Y63.076667 +G1 X134.831667 Y62.992000 +G1 X134.493000 Y62.695667 +G1 X119.464667 Y62.695667 +G1 X119.126000 Y62.992000 +G1 X118.829667 Y63.076667 +G1 X118.618000 Y63.076667 +G1 X118.321667 Y62.992000 +G1 X117.983000 Y62.695667 +G1 X83.269667 Y62.695667 +G1 X82.931000 Y62.992000 +G1 X82.634667 Y63.076667 +G1 X82.380667 Y63.076667 +G0 Z#100 +(polygon end, distance 121.22) +(polygon 192) +G0 X14.435667 Y62.441667 (start point) +G1 Z#101 F#102 +F#103 +G1 X14.181667 Y62.357000 +G1 X13.800667 Y61.976000 +G1 X13.716000 Y61.637333 +G1 X13.758333 Y61.256333 +G1 X14.012333 Y60.917667 +G1 X14.308667 Y60.748333 +G1 X14.859000 Y60.748333 +G1 X15.197667 Y60.960000 +G1 X15.409333 Y61.298667 +G1 X15.409333 Y61.849000 +G1 X15.197667 Y62.187667 +G1 X14.859000 Y62.399333 +G1 X14.435667 Y62.441667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 193) +G0 X16.975667 Y62.441667 (start point) +G1 Z#101 F#102 +F#103 +G1 X16.721667 Y62.357000 +G1 X16.340667 Y61.976000 +G1 X16.256000 Y61.637333 +G1 X16.298333 Y61.256333 +G1 X16.552333 Y60.917667 +G1 X16.848667 Y60.748333 +G1 X17.399000 Y60.748333 +G1 X17.737667 Y60.960000 +G1 X17.949333 Y61.298667 +G1 X17.949333 Y61.849000 +G1 X17.737667 Y62.187667 +G1 X17.399000 Y62.399333 +G1 X16.975667 Y62.441667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 194) +G0 X19.515667 Y62.441667 (start point) +G1 Z#101 F#102 +F#103 +G1 X19.261667 Y62.357000 +G1 X18.880667 Y61.976000 +G1 X18.796000 Y61.637333 +G1 X18.838333 Y61.256333 +G1 X19.092333 Y60.917667 +G1 X19.388667 Y60.748333 +G1 X19.939000 Y60.748333 +G1 X20.277667 Y60.960000 +G1 X20.489333 Y61.298667 +G1 X20.489333 Y61.849000 +G1 X20.277667 Y62.187667 +G1 X19.939000 Y62.399333 +G1 X19.515667 Y62.441667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 195) +G0 X160.993667 Y62.018333 (start point) +G1 Z#101 F#102 +F#103 +G1 X160.612667 Y61.891333 +G1 X160.189333 Y61.679667 +G1 X159.723667 Y61.214000 +G1 X159.512000 Y60.790667 +G1 X159.385000 Y60.367333 +G1 X159.385000 Y59.901667 +G1 X159.512000 Y59.478333 +G1 X159.723667 Y59.055000 +G1 X160.189333 Y58.589333 +G1 X160.612667 Y58.377667 +G1 X161.036000 Y58.250667 +G1 X161.501667 Y58.250667 +G1 X161.925000 Y58.377667 +G1 X162.348333 Y58.589333 +G1 X162.814000 Y59.055000 +G1 X163.025667 Y59.478333 +G1 X163.152667 Y59.901667 +G1 X163.152667 Y60.367333 +G1 X163.025667 Y60.790667 +G1 X162.814000 Y61.214000 +G1 X162.348333 Y61.679667 +G1 X161.925000 Y61.891333 +G1 X161.501667 Y62.018333 +G1 X160.993667 Y62.018333 +G0 Z#100 +(polygon end, distance 11.82) +(polygon 196) +G0 X90.635667 Y61.552667 (start point) +G1 Z#101 F#102 +F#103 +G1 X90.381667 Y61.341000 +G1 X90.170000 Y61.087000 +G1 X90.170000 Y60.790667 +G1 X90.381667 Y60.536667 +G1 X90.635667 Y60.325000 +G1 X90.889667 Y60.325000 +G1 X91.143667 Y60.452000 +G1 X91.355333 Y60.706000 +G1 X122.597333 Y60.706000 +G1 X122.809000 Y60.452000 +G1 X123.063000 Y60.325000 +G1 X123.317000 Y60.325000 +G1 X123.571000 Y60.536667 +G1 X123.782667 Y60.790667 +G1 X123.782667 Y61.087000 +G1 X123.571000 Y61.341000 +G1 X123.317000 Y61.552667 +G1 X123.063000 Y61.552667 +G1 X122.809000 Y61.425667 +G1 X122.597333 Y61.171667 +G1 X91.355333 Y61.171667 +G1 X91.143667 Y61.425667 +G1 X90.889667 Y61.552667 +G1 X90.635667 Y61.552667 +G0 Z#100 +(polygon end, distance 69.20) +(polygon 197) +G0 X113.495667 Y60.536667 (start point) +G1 Z#101 F#102 +F#103 +G1 X113.241667 Y60.452000 +G1 X112.860667 Y60.071000 +G1 X112.776000 Y59.732333 +G1 X112.818333 Y59.351333 +G1 X113.072333 Y59.012667 +G1 X113.368667 Y58.843333 +G1 X113.707333 Y58.801000 +G1 X114.046000 Y58.885667 +G1 X114.384667 Y59.224333 +G1 X115.443000 Y59.224333 +G1 X115.781667 Y58.885667 +G1 X116.120333 Y58.801000 +G1 X116.501333 Y58.843333 +G1 X116.840000 Y59.097333 +G1 X117.009333 Y59.393667 +G1 X117.009333 Y59.944000 +G1 X116.840000 Y60.240333 +G1 X116.501333 Y60.494333 +G1 X116.120333 Y60.536667 +G1 X115.781667 Y60.452000 +G1 X115.443000 Y60.113333 +G1 X114.384667 Y60.113333 +G1 X114.046000 Y60.452000 +G1 X113.749667 Y60.536667 +G1 X113.495667 Y60.536667 +G0 Z#100 +(polygon end, distance 11.13) +(polygon 198) +G0 X117.856000 Y60.536667 (start point) +G1 Z#101 F#102 +F#103 +G1 X117.856000 Y58.801000 +G1 X119.591667 Y58.801000 +G1 X119.591667 Y59.224333 +G1 X124.206000 Y59.224333 +G1 X124.206000 Y58.801000 +G1 X125.941667 Y58.801000 +G1 X125.941667 Y59.224333 +G1 X131.953000 Y59.224333 +G1 X132.291667 Y58.885667 +G1 X132.630333 Y58.801000 +G1 X133.011333 Y58.843333 +G1 X133.350000 Y59.097333 +G1 X133.519333 Y59.393667 +G1 X133.519333 Y59.944000 +G1 X133.350000 Y60.240333 +G1 X133.011333 Y60.494333 +G1 X132.630333 Y60.536667 +G1 X132.291667 Y60.452000 +G1 X131.953000 Y60.113333 +G1 X125.941667 Y60.113333 +G1 X125.941667 Y60.536667 +G1 X124.206000 Y60.536667 +G1 X124.206000 Y60.113333 +G1 X119.591667 Y60.113333 +G1 X119.591667 Y60.536667 +G1 X117.856000 Y60.536667 +G0 Z#100 +(polygon end, distance 36.97) +(polygon 199) +G0 X135.085667 Y60.536667 (start point) +G1 Z#101 F#102 +F#103 +G1 X134.831667 Y60.452000 +G1 X134.450667 Y60.071000 +G1 X134.366000 Y59.732333 +G1 X134.408333 Y59.351333 +G1 X134.662333 Y59.012667 +G1 X134.958667 Y58.843333 +G1 X135.509000 Y58.843333 +G1 X135.847667 Y59.055000 +G1 X136.059333 Y59.393667 +G1 X136.059333 Y59.944000 +G1 X135.847667 Y60.282667 +G1 X135.509000 Y60.494333 +G1 X135.085667 Y60.536667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 200) +G0 X55.075667 Y60.282667 (start point) +G1 Z#101 F#102 +F#103 +G1 X54.821667 Y60.071000 +G1 X54.610000 Y59.817000 +G1 X54.610000 Y59.520667 +G1 X54.821667 Y59.266667 +G1 X55.075667 Y59.055000 +G1 X55.329667 Y59.055000 +G1 X55.583667 Y59.182000 +G1 X55.795333 Y59.436000 +G1 X95.292333 Y59.436000 +G1 X95.504000 Y59.182000 +G1 X95.758000 Y59.055000 +G1 X96.012000 Y59.055000 +G1 X96.266000 Y59.266667 +G1 X96.477667 Y59.520667 +G1 X96.477667 Y59.817000 +G1 X96.266000 Y60.071000 +G1 X96.012000 Y60.282667 +G1 X95.758000 Y60.282667 +G1 X95.504000 Y60.155667 +G1 X95.292333 Y59.901667 +G1 X55.795333 Y59.901667 +G1 X55.583667 Y60.155667 +G1 X55.329667 Y60.282667 +G1 X55.075667 Y60.282667 +G0 Z#100 +(polygon end, distance 85.71) +(polygon 201) +G0 X14.435667 Y59.901667 (start point) +G1 Z#101 F#102 +F#103 +G1 X14.181667 Y59.817000 +G1 X13.800667 Y59.436000 +G1 X13.716000 Y59.097333 +G1 X13.758333 Y58.716333 +G1 X14.012333 Y58.377667 +G1 X14.308667 Y58.208333 +G1 X14.859000 Y58.208333 +G1 X15.197667 Y58.420000 +G1 X15.409333 Y58.758667 +G1 X15.409333 Y59.309000 +G1 X15.197667 Y59.647667 +G1 X14.859000 Y59.859333 +G1 X14.435667 Y59.901667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 202) +G0 X16.975667 Y59.901667 (start point) +G1 Z#101 F#102 +F#103 +G1 X16.721667 Y59.817000 +G1 X16.340667 Y59.436000 +G1 X16.256000 Y59.097333 +G1 X16.298333 Y58.716333 +G1 X16.552333 Y58.377667 +G1 X16.848667 Y58.208333 +G1 X17.399000 Y58.208333 +G1 X17.737667 Y58.420000 +G1 X17.949333 Y58.758667 +G1 X17.949333 Y59.309000 +G1 X17.737667 Y59.647667 +G1 X17.399000 Y59.859333 +G1 X16.975667 Y59.901667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 203) +G0 X19.515667 Y59.901667 (start point) +G1 Z#101 F#102 +F#103 +G1 X19.261667 Y59.817000 +G1 X18.880667 Y59.436000 +G1 X18.796000 Y59.097333 +G1 X18.838333 Y58.716333 +G1 X19.092333 Y58.377667 +G1 X19.388667 Y58.208333 +G1 X19.939000 Y58.208333 +G1 X20.277667 Y58.420000 +G1 X20.489333 Y58.758667 +G1 X20.489333 Y59.309000 +G1 X20.277667 Y59.647667 +G1 X19.939000 Y59.859333 +G1 X19.515667 Y59.901667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 204) +G0 X141.435667 Y58.631667 (start point) +G1 Z#101 F#102 +F#103 +G1 X141.181667 Y58.547000 +G1 X140.843000 Y58.208333 +G1 X71.120000 Y58.208333 +G1 X70.950667 Y58.420000 +G1 X70.612000 Y58.589333 +G1 X70.315667 Y58.589333 +G1 X69.977000 Y58.420000 +G1 X69.765333 Y58.166000 +G1 X69.638333 Y57.869667 +G1 X69.638333 Y57.658000 +G1 X69.765333 Y57.361667 +G1 X69.977000 Y57.107667 +G1 X70.315667 Y56.938333 +G1 X62.145333 Y56.938333 +G1 X61.976000 Y56.853667 +G1 X58.716333 Y53.636333 +G1 X58.589333 Y53.382333 +G1 X58.589333 Y51.900667 +G1 X57.912000 Y51.900667 +G1 X57.912000 Y49.657000 +G1 X60.155667 Y49.657000 +G1 X60.155667 Y51.900667 +G1 X59.478333 Y51.900667 +G1 X59.478333 Y53.128333 +G1 X62.357000 Y56.049333 +G1 X109.050667 Y56.049333 +G1 X110.278333 Y54.779333 +G1 X110.278333 Y54.483000 +G1 X110.405333 Y54.186667 +G1 X110.617000 Y53.932667 +G1 X110.955667 Y53.763333 +G1 X111.209667 Y53.763333 +G1 X111.506000 Y53.890333 +G1 X111.760000 Y54.102000 +G1 X111.929333 Y54.440667 +G1 X111.929333 Y54.737000 +G1 X111.760000 Y55.075667 +G1 X111.506000 Y55.287333 +G1 X111.209667 Y55.414333 +G1 X110.913333 Y55.414333 +G1 X109.431667 Y56.853667 +G1 X109.262333 Y56.938333 +G1 X70.612000 Y56.938333 +G1 X70.950667 Y57.107667 +G1 X71.120000 Y57.319333 +G1 X140.843000 Y57.319333 +G1 X141.181667 Y56.980667 +G1 X141.520333 Y56.896000 +G1 X141.901333 Y56.938333 +G1 X142.240000 Y57.192333 +G1 X142.409333 Y57.488667 +G1 X142.409333 Y58.039000 +G1 X142.197667 Y58.377667 +G1 X141.859000 Y58.589333 +G1 X141.435667 Y58.631667 +G0 Z#100 +(polygon end, distance 269.54) +(polygon 205) +G0 X14.435667 Y57.361667 (start point) +G1 Z#101 F#102 +F#103 +G1 X14.181667 Y57.277000 +G1 X13.800667 Y56.896000 +G1 X13.716000 Y56.557333 +G1 X13.758333 Y56.176333 +G1 X14.012333 Y55.837667 +G1 X14.308667 Y55.668333 +G1 X14.859000 Y55.668333 +G1 X15.197667 Y55.880000 +G1 X15.409333 Y56.218667 +G1 X15.409333 Y56.769000 +G1 X15.197667 Y57.107667 +G1 X14.859000 Y57.319333 +G1 X14.435667 Y57.361667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 206) +G0 X16.975667 Y57.361667 (start point) +G1 Z#101 F#102 +F#103 +G1 X16.721667 Y57.277000 +G1 X16.340667 Y56.896000 +G1 X16.256000 Y56.557333 +G1 X16.298333 Y56.176333 +G1 X16.552333 Y55.837667 +G1 X16.848667 Y55.668333 +G1 X17.399000 Y55.668333 +G1 X17.737667 Y55.880000 +G1 X17.949333 Y56.218667 +G1 X17.949333 Y56.769000 +G1 X17.737667 Y57.107667 +G1 X17.399000 Y57.319333 +G1 X16.975667 Y57.361667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 207) +G0 X19.515667 Y57.361667 (start point) +G1 Z#101 F#102 +F#103 +G1 X19.261667 Y57.277000 +G1 X18.880667 Y56.896000 +G1 X18.796000 Y56.557333 +G1 X18.838333 Y56.176333 +G1 X19.092333 Y55.837667 +G1 X19.388667 Y55.668333 +G1 X19.939000 Y55.668333 +G1 X20.277667 Y55.880000 +G1 X20.489333 Y56.218667 +G1 X20.489333 Y56.769000 +G1 X20.277667 Y57.107667 +G1 X19.939000 Y57.319333 +G1 X19.515667 Y57.361667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 208) +G0 X123.020667 Y57.107667 (start point) +G1 Z#101 F#102 +F#103 +G1 X122.766667 Y56.896000 +G1 X122.555000 Y56.642000 +G1 X122.555000 Y56.345667 +G1 X122.766667 Y56.091667 +G1 X123.020667 Y55.880000 +G1 X123.274667 Y55.880000 +G1 X123.528667 Y56.007000 +G1 X123.740333 Y56.261000 +G1 X139.107333 Y56.261000 +G1 X139.319000 Y56.007000 +G1 X139.573000 Y55.880000 +G1 X139.827000 Y55.880000 +G1 X140.081000 Y56.091667 +G1 X140.292667 Y56.345667 +G1 X140.292667 Y56.642000 +G1 X140.081000 Y56.896000 +G1 X139.827000 Y57.107667 +G1 X139.573000 Y57.107667 +G1 X139.319000 Y56.980667 +G1 X139.107333 Y56.726667 +G1 X123.740333 Y56.726667 +G1 X123.528667 Y56.980667 +G1 X123.274667 Y57.107667 +G1 X123.020667 Y57.107667 +G0 Z#100 +(polygon end, distance 37.45) +(polygon 209) +G0 X63.246000 Y55.541333 (start point) +G1 Z#101 F#102 +F#103 +G1 X62.738000 Y55.372000 +G1 X62.018333 Y54.821667 +G1 X60.494333 Y53.255333 +G1 X60.367333 Y52.789667 +G1 X60.409667 Y52.366333 +G1 X60.579000 Y51.985333 +G1 X60.536667 Y51.181000 +G1 X60.452000 Y50.757667 +G1 X60.536667 Y50.376667 +G1 X60.579000 Y49.233667 +G1 X60.367333 Y49.064333 +G1 X60.071000 Y49.191333 +G1 X23.706667 Y49.191333 +G1 X23.156333 Y48.937333 +G1 X22.733000 Y48.471667 +G1 X22.521333 Y48.006000 +G1 X22.521333 Y47.201667 +G1 X22.733000 Y46.736000 +G1 X23.156333 Y46.270333 +G1 X23.706667 Y46.016333 +G1 X60.071000 Y46.016333 +G1 X60.621333 Y46.270333 +G1 X61.044667 Y46.736000 +G1 X61.256333 Y47.201667 +G1 X62.357000 Y48.260000 +G1 X62.526333 Y48.598667 +G1 X62.611000 Y50.376667 +G1 X62.695667 Y50.800000 +G1 X62.611000 Y51.181000 +G1 X62.568667 Y52.027667 +G1 X63.034333 Y52.451000 +G1 X63.330667 Y52.366333 +G1 X95.504000 Y52.408667 +G1 X95.504000 Y51.265667 +G1 X95.377000 Y50.927000 +G1 X95.419333 Y50.461333 +G1 X95.588667 Y50.122667 +G1 X95.927333 Y49.826333 +G1 X96.181333 Y49.699333 +G1 X96.816333 Y49.699333 +G1 X97.070333 Y49.826333 +G1 X97.409000 Y50.122667 +G1 X97.578333 Y50.461333 +G1 X97.620667 Y50.927000 +G1 X97.493667 Y51.265667 +G1 X97.493667 Y52.239333 +G1 X112.903000 Y52.239333 +G1 X113.241667 Y51.900667 +G1 X113.580333 Y51.816000 +G1 X113.961333 Y51.858333 +G1 X114.300000 Y52.112333 +G1 X114.469333 Y52.408667 +G1 X114.469333 Y52.959000 +G1 X114.300000 Y53.255333 +G1 X113.961333 Y53.509333 +G1 X113.580333 Y53.551667 +G1 X113.241667 Y53.467000 +G1 X112.903000 Y53.128333 +G1 X97.747667 Y53.128333 +G1 X97.705333 Y53.636333 +G1 X97.536000 Y54.017333 +G1 X96.774000 Y54.821667 +G1 X96.435333 Y55.033333 +G1 X95.927333 Y55.372000 +G1 X95.419333 Y55.541333 +G1 X63.246000 Y55.541333 +G0 Z#100 +(polygon end, distance 203.01) +(polygon 210) +G0 X120.438333 Y55.414333 (start point) +G1 Z#101 F#102 +F#103 +G1 X120.438333 Y53.763333 +G1 X122.089333 Y53.763333 +G1 X122.089333 Y55.414333 +G1 X120.438333 Y55.414333 +G0 Z#100 +(polygon end, distance 6.60) +(polygon 211) +G0 X124.925667 Y55.414333 (start point) +G1 Z#101 F#102 +F#103 +G1 X124.587000 Y55.245000 +G1 X124.375333 Y54.991000 +G1 X124.248333 Y54.694667 +G1 X124.248333 Y54.483000 +G1 X124.375333 Y54.186667 +G1 X124.587000 Y53.932667 +G1 X124.925667 Y53.763333 +G1 X125.179667 Y53.763333 +G1 X125.476000 Y53.890333 +G1 X125.730000 Y54.102000 +G1 X125.899333 Y54.440667 +G1 X125.899333 Y54.737000 +G1 X125.730000 Y55.075667 +G1 X125.476000 Y55.287333 +G1 X125.179667 Y55.414333 +G1 X124.925667 Y55.414333 +G0 Z#100 +(polygon end, distance 5.14) +(polygon 212) +G0 X134.408333 Y55.414333 (start point) +G1 Z#101 F#102 +F#103 +G1 X134.408333 Y53.763333 +G1 X136.059333 Y53.763333 +G1 X136.059333 Y55.414333 +G1 X134.408333 Y55.414333 +G0 Z#100 +(polygon end, distance 6.60) +(polygon 213) +G0 X14.435667 Y54.821667 (start point) +G1 Z#101 F#102 +F#103 +G1 X14.181667 Y54.737000 +G1 X13.800667 Y54.356000 +G1 X13.716000 Y54.017333 +G1 X13.758333 Y53.636333 +G1 X14.012333 Y53.297667 +G1 X14.308667 Y53.128333 +G1 X14.859000 Y53.128333 +G1 X15.197667 Y53.340000 +G1 X15.409333 Y53.678667 +G1 X15.409333 Y54.229000 +G1 X15.197667 Y54.567667 +G1 X14.859000 Y54.779333 +G1 X14.435667 Y54.821667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 214) +G0 X16.975667 Y54.821667 (start point) +G1 Z#101 F#102 +F#103 +G1 X16.721667 Y54.737000 +G1 X16.340667 Y54.356000 +G1 X16.256000 Y54.017333 +G1 X16.298333 Y53.636333 +G1 X16.552333 Y53.297667 +G1 X16.848667 Y53.128333 +G1 X17.399000 Y53.128333 +G1 X17.737667 Y53.340000 +G1 X17.949333 Y53.678667 +G1 X17.949333 Y54.229000 +G1 X17.737667 Y54.567667 +G1 X17.399000 Y54.779333 +G1 X16.975667 Y54.821667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 215) +G0 X19.515667 Y54.821667 (start point) +G1 Z#101 F#102 +F#103 +G1 X19.261667 Y54.737000 +G1 X18.880667 Y54.356000 +G1 X18.796000 Y54.017333 +G1 X18.838333 Y53.636333 +G1 X19.092333 Y53.297667 +G1 X19.388667 Y53.128333 +G1 X19.939000 Y53.128333 +G1 X20.277667 Y53.340000 +G1 X20.489333 Y53.678667 +G1 X20.489333 Y54.229000 +G1 X20.277667 Y54.567667 +G1 X19.939000 Y54.779333 +G1 X19.515667 Y54.821667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 216) +G0 X29.591000 Y54.059667 (start point) +G1 Z#101 F#102 +F#103 +G1 X29.252333 Y53.932667 +G1 X28.871333 Y53.678667 +G1 X28.575000 Y53.297667 +G1 X28.448000 Y52.832000 +G1 X28.490333 Y52.324000 +G1 X28.659667 Y51.943000 +G1 X29.083000 Y51.519667 +G1 X29.464000 Y51.350333 +G1 X30.183667 Y51.350333 +G1 X30.564667 Y51.519667 +G1 X30.988000 Y51.943000 +G1 X31.157333 Y52.324000 +G1 X31.157333 Y53.043667 +G1 X30.988000 Y53.424667 +G1 X30.564667 Y53.848000 +G1 X30.183667 Y54.017333 +G1 X29.591000 Y54.059667 +G0 Z#100 +(polygon end, distance 8.63) +(polygon 217) +G0 X38.608000 Y54.059667 (start point) +G1 Z#101 F#102 +F#103 +G1 X38.608000 Y51.308000 +G1 X41.359667 Y51.308000 +G1 X41.359667 Y54.059667 +G1 X38.608000 Y54.059667 +G0 Z#100 +(polygon end, distance 11.01) +(polygon 218) +G0 X164.253333 Y52.366333 (start point) +G1 Z#101 F#102 +F#103 +G1 X163.830000 Y52.154667 +G1 X163.576000 Y51.816000 +G1 X163.533667 Y51.646667 +G1 X149.140333 Y51.646667 +G1 X144.018000 Y46.566667 +G1 X89.450333 Y46.566667 +G1 X89.238667 Y46.820667 +G1 X88.984667 Y46.947667 +G1 X88.730667 Y46.947667 +G1 X88.476667 Y46.736000 +G1 X88.265000 Y46.482000 +G1 X88.265000 Y46.185667 +G1 X88.476667 Y45.931667 +G1 X88.730667 Y45.720000 +G1 X88.984667 Y45.720000 +G1 X89.238667 Y45.847000 +G1 X89.450333 Y46.101000 +G1 X144.187333 Y46.101000 +G1 X149.309667 Y51.181000 +G1 X163.533667 Y51.181000 +G1 X163.787667 Y50.757667 +G1 X164.168667 Y50.503667 +G1 X164.719000 Y50.503667 +G1 X165.100000 Y50.757667 +G1 X165.354000 Y51.138667 +G1 X165.354000 Y51.689000 +G1 X165.100000 Y52.070000 +G1 X164.719000 Y52.324000 +G1 X164.253333 Y52.366333 +G0 Z#100 +(polygon end, distance 161.13) +(polygon 219) +G0 X14.435667 Y52.281667 (start point) +G1 Z#101 F#102 +F#103 +G1 X14.181667 Y52.197000 +G1 X13.800667 Y51.816000 +G1 X13.716000 Y51.477333 +G1 X13.758333 Y51.096333 +G1 X14.012333 Y50.757667 +G1 X14.308667 Y50.588333 +G1 X14.859000 Y50.588333 +G1 X15.197667 Y50.800000 +G1 X15.409333 Y51.138667 +G1 X15.409333 Y51.689000 +G1 X15.197667 Y52.027667 +G1 X14.859000 Y52.239333 +G1 X14.435667 Y52.281667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 220) +G0 X16.975667 Y52.281667 (start point) +G1 Z#101 F#102 +F#103 +G1 X16.721667 Y52.197000 +G1 X16.340667 Y51.816000 +G1 X16.256000 Y51.477333 +G1 X16.298333 Y51.096333 +G1 X16.552333 Y50.757667 +G1 X16.848667 Y50.588333 +G1 X17.399000 Y50.588333 +G1 X17.737667 Y50.800000 +G1 X17.949333 Y51.138667 +G1 X17.949333 Y51.689000 +G1 X17.737667 Y52.027667 +G1 X17.399000 Y52.239333 +G1 X16.975667 Y52.281667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 221) +G0 X19.515667 Y52.281667 (start point) +G1 Z#101 F#102 +F#103 +G1 X19.261667 Y52.197000 +G1 X18.880667 Y51.816000 +G1 X18.796000 Y51.477333 +G1 X18.838333 Y51.096333 +G1 X19.092333 Y50.757667 +G1 X19.388667 Y50.588333 +G1 X19.939000 Y50.588333 +G1 X20.277667 Y50.800000 +G1 X20.489333 Y51.138667 +G1 X20.489333 Y51.689000 +G1 X20.277667 Y52.027667 +G1 X19.939000 Y52.239333 +G1 X19.515667 Y52.281667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 222) +G0 X63.923333 Y51.900667 (start point) +G1 Z#101 F#102 +F#103 +G1 X63.711667 Y51.816000 +G1 X63.457667 Y51.689000 +G1 X63.161333 Y51.350333 +G1 X63.034333 Y51.096333 +G1 X63.034333 Y50.461333 +G1 X63.161333 Y50.207333 +G1 X63.457667 Y49.868667 +G1 X63.796333 Y49.699333 +G1 X64.431333 Y49.699333 +G1 X64.770000 Y49.868667 +G1 X65.066333 Y50.207333 +G1 X65.193333 Y50.461333 +G1 X65.193333 Y51.096333 +G1 X65.066333 Y51.350333 +G1 X64.770000 Y51.689000 +G1 X64.431333 Y51.858333 +G1 X63.923333 Y51.900667 +G0 Z#100 +(polygon end, distance 7.00) +(polygon 223) +G0 X90.297000 Y51.900667 (start point) +G1 Z#101 F#102 +F#103 +G1 X90.297000 Y49.657000 +G1 X90.974333 Y49.657000 +G1 X90.974333 Y48.810333 +G1 X91.059000 Y48.641000 +G1 X92.371333 Y47.286333 +G1 X92.625333 Y47.159333 +G1 X124.333000 Y47.159333 +G1 X124.671667 Y46.820667 +G1 X125.010333 Y46.736000 +G1 X125.391333 Y46.778333 +G1 X125.730000 Y47.032333 +G1 X125.899333 Y47.328667 +G1 X125.899333 Y47.879000 +G1 X125.730000 Y48.175333 +G1 X125.391333 Y48.429333 +G1 X125.010333 Y48.471667 +G1 X124.671667 Y48.387000 +G1 X124.333000 Y48.048333 +G1 X92.837000 Y48.048333 +G1 X91.863333 Y49.064333 +G1 X91.863333 Y49.657000 +G1 X92.540667 Y49.657000 +G1 X92.540667 Y51.900667 +G1 X90.297000 Y51.900667 +G0 Z#100 +(polygon end, distance 81.00) +(polygon 224) +G0 X93.768333 Y51.900667 (start point) +G1 Z#101 F#102 +F#103 +G1 X93.556667 Y51.816000 +G1 X93.302667 Y51.689000 +G1 X93.006333 Y51.350333 +G1 X92.879333 Y51.096333 +G1 X92.879333 Y50.461333 +G1 X93.006333 Y50.207333 +G1 X93.302667 Y49.868667 +G1 X93.641333 Y49.699333 +G1 X94.276333 Y49.699333 +G1 X94.615000 Y49.868667 +G1 X94.911333 Y50.207333 +G1 X95.038333 Y50.461333 +G1 X95.038333 Y51.096333 +G1 X94.911333 Y51.350333 +G1 X94.615000 Y51.689000 +G1 X94.276333 Y51.858333 +G1 X93.768333 Y51.900667 +G0 Z#100 +(polygon end, distance 7.00) +(polygon 225) +G0 X110.955667 Y50.376667 (start point) +G1 Z#101 F#102 +F#103 +G1 X110.701667 Y50.292000 +G1 X110.320667 Y49.911000 +G1 X110.236000 Y49.572333 +G1 X110.278333 Y49.191333 +G1 X110.532333 Y48.852667 +G1 X110.828667 Y48.683333 +G1 X111.379000 Y48.683333 +G1 X111.717667 Y48.895000 +G1 X111.929333 Y49.233667 +G1 X111.929333 Y49.784000 +G1 X111.717667 Y50.122667 +G1 X111.379000 Y50.334333 +G1 X110.955667 Y50.376667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 226) +G0 X120.396000 Y50.376667 (start point) +G1 Z#101 F#102 +F#103 +G1 X120.396000 Y48.641000 +G1 X122.131667 Y48.641000 +G1 X122.131667 Y50.376667 +G1 X120.396000 Y50.376667 +G0 Z#100 +(polygon end, distance 6.94) +(polygon 227) +G0 X124.925667 Y50.376667 (start point) +G1 Z#101 F#102 +F#103 +G1 X124.671667 Y50.292000 +G1 X124.290667 Y49.911000 +G1 X124.206000 Y49.572333 +G1 X124.248333 Y49.191333 +G1 X124.502333 Y48.852667 +G1 X124.798667 Y48.683333 +G1 X125.349000 Y48.683333 +G1 X125.687667 Y48.895000 +G1 X125.899333 Y49.233667 +G1 X125.899333 Y49.784000 +G1 X125.687667 Y50.122667 +G1 X125.349000 Y50.334333 +G1 X124.925667 Y50.376667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 228) +G0 X134.366000 Y50.376667 (start point) +G1 Z#101 F#102 +F#103 +G1 X134.366000 Y48.641000 +G1 X136.101667 Y48.641000 +G1 X136.101667 Y50.376667 +G1 X134.366000 Y50.376667 +G0 Z#100 +(polygon end, distance 6.94) +(polygon 229) +G0 X163.491333 Y49.826333 (start point) +G1 Z#101 F#102 +F#103 +G1 X163.491333 Y47.921333 +G1 X165.396333 Y47.921333 +G1 X165.396333 Y49.826333 +G1 X163.491333 Y49.826333 +G0 Z#100 +(polygon end, distance 7.62) +(polygon 230) +G0 X14.435667 Y49.741667 (start point) +G1 Z#101 F#102 +F#103 +G1 X14.181667 Y49.657000 +G1 X13.800667 Y49.276000 +G1 X13.716000 Y48.937333 +G1 X13.758333 Y48.556333 +G1 X14.012333 Y48.217667 +G1 X14.308667 Y48.048333 +G1 X14.859000 Y48.048333 +G1 X15.197667 Y48.260000 +G1 X15.409333 Y48.598667 +G1 X15.409333 Y49.149000 +G1 X15.197667 Y49.487667 +G1 X14.859000 Y49.699333 +G1 X14.435667 Y49.741667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 231) +G0 X16.975667 Y49.741667 (start point) +G1 Z#101 F#102 +F#103 +G1 X16.721667 Y49.657000 +G1 X16.340667 Y49.276000 +G1 X16.256000 Y48.937333 +G1 X16.298333 Y48.556333 +G1 X16.552333 Y48.217667 +G1 X16.848667 Y48.048333 +G1 X17.399000 Y48.048333 +G1 X17.737667 Y48.260000 +G1 X17.949333 Y48.598667 +G1 X17.949333 Y49.149000 +G1 X17.737667 Y49.487667 +G1 X17.399000 Y49.699333 +G1 X16.975667 Y49.741667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 232) +G0 X19.515667 Y49.741667 (start point) +G1 Z#101 F#102 +F#103 +G1 X19.261667 Y49.657000 +G1 X18.880667 Y49.276000 +G1 X18.796000 Y48.937333 +G1 X18.838333 Y48.556333 +G1 X19.092333 Y48.217667 +G1 X19.388667 Y48.048333 +G1 X19.939000 Y48.048333 +G1 X20.277667 Y48.260000 +G1 X20.489333 Y48.598667 +G1 X20.489333 Y49.149000 +G1 X20.277667 Y49.487667 +G1 X19.939000 Y49.699333 +G1 X19.515667 Y49.741667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 233) +G0 X14.435667 Y47.201667 (start point) +G1 Z#101 F#102 +F#103 +G1 X14.181667 Y47.117000 +G1 X13.800667 Y46.736000 +G1 X13.716000 Y46.397333 +G1 X13.758333 Y46.016333 +G1 X14.012333 Y45.677667 +G1 X14.308667 Y45.508333 +G1 X14.859000 Y45.508333 +G1 X15.197667 Y45.720000 +G1 X15.409333 Y46.058667 +G1 X15.409333 Y46.609000 +G1 X15.197667 Y46.947667 +G1 X14.859000 Y47.159333 +G1 X14.435667 Y47.201667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 234) +G0 X16.975667 Y47.201667 (start point) +G1 Z#101 F#102 +F#103 +G1 X16.721667 Y47.117000 +G1 X16.340667 Y46.736000 +G1 X16.256000 Y46.397333 +G1 X16.298333 Y46.016333 +G1 X16.552333 Y45.677667 +G1 X16.848667 Y45.508333 +G1 X17.399000 Y45.508333 +G1 X17.737667 Y45.720000 +G1 X17.949333 Y46.058667 +G1 X17.949333 Y46.609000 +G1 X17.737667 Y46.947667 +G1 X17.399000 Y47.159333 +G1 X16.975667 Y47.201667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 235) +G0 X19.515667 Y47.201667 (start point) +G1 Z#101 F#102 +F#103 +G1 X19.261667 Y47.117000 +G1 X18.880667 Y46.736000 +G1 X18.796000 Y46.397333 +G1 X18.838333 Y46.016333 +G1 X19.092333 Y45.677667 +G1 X19.388667 Y45.508333 +G1 X19.939000 Y45.508333 +G1 X20.277667 Y45.720000 +G1 X20.489333 Y46.058667 +G1 X20.489333 Y46.609000 +G1 X20.277667 Y46.947667 +G1 X19.939000 Y47.159333 +G1 X19.515667 Y47.201667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 236) +G0 X39.751000 Y45.423667 (start point) +G1 Z#101 F#102 +F#103 +G1 X39.370000 Y45.296667 +G1 X38.989000 Y45.085000 +G1 X38.608000 Y44.661667 +G1 X38.396333 Y44.196000 +G1 X38.396333 Y43.391667 +G1 X38.650333 Y42.841333 +G1 X39.116000 Y42.418000 +G1 X39.581667 Y42.206333 +G1 X94.361000 Y42.206333 +G1 X94.911333 Y42.460333 +G1 X95.334667 Y42.926000 +G1 X95.546333 Y43.391667 +G1 X95.546333 Y44.196000 +G1 X95.334667 Y44.661667 +G1 X94.911333 Y45.127333 +G1 X94.361000 Y45.381333 +G1 X39.751000 Y45.423667 +G0 Z#100 +(polygon end, distance 118.16) +(polygon 237) +G0 X110.278333 Y45.254333 (start point) +G1 Z#101 F#102 +F#103 +G1 X110.278333 Y43.603333 +G1 X111.929333 Y43.603333 +G1 X111.929333 Y45.254333 +G1 X110.278333 Y45.254333 +G0 Z#100 +(polygon end, distance 6.60) +(polygon 238) +G0 X121.115667 Y45.254333 (start point) +G1 Z#101 F#102 +F#103 +G1 X120.777000 Y45.085000 +G1 X120.565333 Y44.831000 +G1 X120.438333 Y44.534667 +G1 X120.438333 Y44.323000 +G1 X120.565333 Y44.026667 +G1 X120.777000 Y43.772667 +G1 X121.115667 Y43.603333 +G1 X121.369667 Y43.603333 +G1 X121.666000 Y43.730333 +G1 X121.920000 Y43.942000 +G1 X122.089333 Y44.280667 +G1 X122.089333 Y44.577000 +G1 X121.920000 Y44.915667 +G1 X121.666000 Y45.127333 +G1 X121.369667 Y45.254333 +G1 X121.115667 Y45.254333 +G0 Z#100 +(polygon end, distance 5.14) +(polygon 239) +G0 X124.248333 Y45.254333 (start point) +G1 Z#101 F#102 +F#103 +G1 X124.248333 Y43.603333 +G1 X125.899333 Y43.603333 +G1 X125.899333 Y45.254333 +G1 X124.248333 Y45.254333 +G0 Z#100 +(polygon end, distance 6.60) +(polygon 240) +G0 X135.085667 Y45.254333 (start point) +G1 Z#101 F#102 +F#103 +G1 X134.747000 Y45.085000 +G1 X134.535333 Y44.831000 +G1 X134.408333 Y44.534667 +G1 X134.408333 Y44.323000 +G1 X134.535333 Y44.026667 +G1 X134.747000 Y43.772667 +G1 X135.085667 Y43.603333 +G1 X135.339667 Y43.603333 +G1 X135.636000 Y43.730333 +G1 X135.890000 Y43.942000 +G1 X136.059333 Y44.280667 +G1 X136.059333 Y44.577000 +G1 X135.890000 Y44.915667 +G1 X135.636000 Y45.127333 +G1 X135.339667 Y45.254333 +G1 X135.085667 Y45.254333 +G0 Z#100 +(polygon end, distance 5.14) +(polygon 241) +G0 X14.435667 Y44.661667 (start point) +G1 Z#101 F#102 +F#103 +G1 X14.181667 Y44.577000 +G1 X13.800667 Y44.196000 +G1 X13.716000 Y43.857333 +G1 X13.758333 Y43.476333 +G1 X14.012333 Y43.137667 +G1 X14.308667 Y42.968333 +G1 X14.859000 Y42.968333 +G1 X15.197667 Y43.180000 +G1 X15.409333 Y43.518667 +G1 X15.409333 Y44.069000 +G1 X15.197667 Y44.407667 +G1 X14.859000 Y44.619333 +G1 X14.435667 Y44.661667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 242) +G0 X16.975667 Y44.661667 (start point) +G1 Z#101 F#102 +F#103 +G1 X16.721667 Y44.577000 +G1 X16.340667 Y44.196000 +G1 X16.256000 Y43.857333 +G1 X16.298333 Y43.476333 +G1 X16.552333 Y43.137667 +G1 X16.848667 Y42.968333 +G1 X17.399000 Y42.968333 +G1 X17.737667 Y43.180000 +G1 X17.949333 Y43.518667 +G1 X17.949333 Y44.069000 +G1 X17.737667 Y44.407667 +G1 X17.399000 Y44.619333 +G1 X16.975667 Y44.661667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 243) +G0 X19.515667 Y44.661667 (start point) +G1 Z#101 F#102 +F#103 +G1 X19.261667 Y44.577000 +G1 X18.880667 Y44.196000 +G1 X18.796000 Y43.857333 +G1 X18.838333 Y43.476333 +G1 X19.092333 Y43.137667 +G1 X19.388667 Y42.968333 +G1 X19.939000 Y42.968333 +G1 X20.277667 Y43.180000 +G1 X20.489333 Y43.518667 +G1 X20.489333 Y44.069000 +G1 X20.277667 Y44.407667 +G1 X19.939000 Y44.619333 +G1 X19.515667 Y44.661667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 244) +G0 X164.253333 Y42.841333 (start point) +G1 Z#101 F#102 +F#103 +G1 X163.830000 Y42.629667 +G1 X163.576000 Y42.291000 +G1 X163.533667 Y42.121667 +G1 X109.135333 Y42.121667 +G1 X108.923667 Y42.375667 +G1 X108.669667 Y42.502667 +G1 X108.415667 Y42.502667 +G1 X108.161667 Y42.291000 +G1 X107.950000 Y42.037000 +G1 X107.950000 Y41.740667 +G1 X108.161667 Y41.486667 +G1 X108.415667 Y41.275000 +G1 X108.669667 Y41.275000 +G1 X108.923667 Y41.402000 +G1 X109.135333 Y41.656000 +G1 X163.533667 Y41.656000 +G1 X163.787667 Y41.232667 +G1 X164.168667 Y40.978667 +G1 X164.719000 Y40.978667 +G1 X165.100000 Y41.232667 +G1 X165.354000 Y41.613667 +G1 X165.354000 Y42.164000 +G1 X165.100000 Y42.545000 +G1 X164.719000 Y42.799000 +G1 X164.253333 Y42.841333 +G0 Z#100 +(polygon end, distance 117.58) +(polygon 245) +G0 X14.435667 Y42.121667 (start point) +G1 Z#101 F#102 +F#103 +G1 X14.181667 Y42.037000 +G1 X13.800667 Y41.656000 +G1 X13.716000 Y41.317333 +G1 X13.758333 Y40.936333 +G1 X14.012333 Y40.597667 +G1 X14.308667 Y40.428333 +G1 X14.859000 Y40.428333 +G1 X15.197667 Y40.640000 +G1 X15.409333 Y40.978667 +G1 X15.409333 Y41.529000 +G1 X15.197667 Y41.867667 +G1 X14.859000 Y42.079333 +G1 X14.435667 Y42.121667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 246) +G0 X16.975667 Y42.121667 (start point) +G1 Z#101 F#102 +F#103 +G1 X16.721667 Y42.037000 +G1 X16.340667 Y41.656000 +G1 X16.256000 Y41.317333 +G1 X16.298333 Y40.936333 +G1 X16.552333 Y40.597667 +G1 X16.848667 Y40.428333 +G1 X17.399000 Y40.428333 +G1 X17.737667 Y40.640000 +G1 X17.949333 Y40.978667 +G1 X17.949333 Y41.529000 +G1 X17.737667 Y41.867667 +G1 X17.399000 Y42.079333 +G1 X16.975667 Y42.121667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 247) +G0 X19.515667 Y42.121667 (start point) +G1 Z#101 F#102 +F#103 +G1 X19.261667 Y42.037000 +G1 X18.880667 Y41.656000 +G1 X18.796000 Y41.317333 +G1 X18.838333 Y40.936333 +G1 X19.092333 Y40.597667 +G1 X19.388667 Y40.428333 +G1 X19.939000 Y40.428333 +G1 X20.277667 Y40.640000 +G1 X20.489333 Y40.978667 +G1 X20.489333 Y41.529000 +G1 X20.277667 Y41.867667 +G1 X19.939000 Y42.079333 +G1 X19.515667 Y42.121667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 248) +G0 X23.876000 Y41.613667 (start point) +G1 Z#101 F#102 +F#103 +G1 X23.495000 Y41.486667 +G1 X23.114000 Y41.275000 +G1 X22.733000 Y40.851667 +G1 X22.521333 Y40.428333 +G1 X21.844000 Y39.708667 +G1 X14.393333 Y39.708667 +G1 X14.054667 Y39.539333 +G1 X13.800667 Y39.327667 +G1 X13.589000 Y38.904333 +G1 X13.589000 Y38.523333 +G1 X13.800667 Y38.100000 +G1 X14.054667 Y37.888333 +G1 X14.393333 Y37.719000 +G1 X22.394333 Y37.719000 +G1 X22.733000 Y37.888333 +G1 X23.410333 Y38.523333 +G1 X23.706667 Y38.396333 +G1 X45.466000 Y38.396333 +G1 X46.016333 Y38.650333 +G1 X46.439667 Y39.116000 +G1 X46.651333 Y39.581667 +G1 X46.651333 Y40.386000 +G1 X46.439667 Y40.851667 +G1 X46.016333 Y41.317333 +G1 X45.466000 Y41.571333 +G1 X23.876000 Y41.613667 +G0 Z#100 +(polygon end, distance 70.34) +(polygon 249) +G0 X163.491333 Y40.301333 (start point) +G1 Z#101 F#102 +F#103 +G1 X163.491333 Y38.396333 +G1 X165.396333 Y38.396333 +G1 X165.396333 Y40.301333 +G1 X163.491333 Y40.301333 +G0 Z#100 +(polygon end, distance 7.62) +(polygon 250) +G0 X110.955667 Y40.216667 (start point) +G1 Z#101 F#102 +F#103 +G1 X110.701667 Y40.132000 +G1 X110.363000 Y39.793333 +G1 X62.145333 Y39.793333 +G1 X61.891333 Y39.666333 +G1 X58.674000 Y36.406667 +G1 X58.589333 Y36.237333 +G1 X58.589333 Y32.850667 +G1 X57.912000 Y32.850667 +G1 X57.912000 Y30.607000 +G1 X60.155667 Y30.607000 +G1 X60.155667 Y32.850667 +G1 X59.478333 Y32.850667 +G1 X59.478333 Y36.025667 +G1 X62.399333 Y38.904333 +G1 X110.363000 Y38.904333 +G1 X110.701667 Y38.565667 +G1 X111.040333 Y38.481000 +G1 X111.421333 Y38.523333 +G1 X111.760000 Y38.777333 +G1 X111.929333 Y39.073667 +G1 X111.929333 Y39.624000 +G1 X111.717667 Y39.962667 +G1 X111.379000 Y40.174333 +G1 X110.955667 Y40.216667 +G0 Z#100 +(polygon end, distance 124.48) +(polygon 251) +G0 X120.396000 Y40.216667 (start point) +G1 Z#101 F#102 +F#103 +G1 X120.396000 Y38.481000 +G1 X122.131667 Y38.481000 +G1 X122.131667 Y40.216667 +G1 X120.396000 Y40.216667 +G0 Z#100 +(polygon end, distance 6.94) +(polygon 252) +G0 X124.925667 Y40.216667 (start point) +G1 Z#101 F#102 +F#103 +G1 X124.671667 Y40.132000 +G1 X124.290667 Y39.751000 +G1 X124.206000 Y39.412333 +G1 X124.248333 Y39.031333 +G1 X124.502333 Y38.692667 +G1 X124.798667 Y38.523333 +G1 X125.349000 Y38.523333 +G1 X125.687667 Y38.735000 +G1 X125.899333 Y39.073667 +G1 X125.899333 Y39.624000 +G1 X125.687667 Y39.962667 +G1 X125.349000 Y40.174333 +G1 X124.925667 Y40.216667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 253) +G0 X127.465667 Y40.216667 (start point) +G1 Z#101 F#102 +F#103 +G1 X127.211667 Y40.132000 +G1 X126.830667 Y39.751000 +G1 X126.746000 Y39.412333 +G1 X126.788333 Y39.031333 +G1 X127.042333 Y38.692667 +G1 X127.338667 Y38.523333 +G1 X127.677333 Y38.481000 +G1 X128.016000 Y38.565667 +G1 X128.354667 Y38.904333 +G1 X134.366000 Y38.904333 +G1 X134.366000 Y38.481000 +G1 X136.101667 Y38.481000 +G1 X136.101667 Y40.216667 +G1 X134.366000 Y40.216667 +G1 X134.366000 Y39.793333 +G1 X128.354667 Y39.793333 +G1 X128.016000 Y40.132000 +G1 X127.719667 Y40.216667 +G1 X127.465667 Y40.216667 +G0 Z#100 +(polygon end, distance 22.59) +(polygon 254) +G0 X53.763333 Y37.422667 (start point) +G1 Z#101 F#102 +F#103 +G1 X53.424667 Y37.295667 +G1 X53.213000 Y37.168667 +G1 X14.393333 Y37.168667 +G1 X13.970000 Y36.957000 +G1 X13.758333 Y36.703000 +G1 X13.589000 Y36.364333 +G1 X13.589000 Y35.983333 +G1 X13.758333 Y35.644667 +G1 X13.970000 Y35.390667 +G1 X14.393333 Y35.179000 +G1 X53.170667 Y35.179000 +G1 X53.636333 Y34.967333 +G1 X54.271333 Y34.967333 +G1 X54.652333 Y35.136667 +G1 X54.991000 Y35.475333 +G1 X55.160333 Y35.856333 +G1 X55.160333 Y36.491333 +G1 X54.991000 Y36.872333 +G1 X54.652333 Y37.211000 +G1 X54.271333 Y37.380333 +G1 X53.763333 Y37.422667 +G0 Z#100 +(polygon end, distance 85.87) +(polygon 255) +G0 X117.263333 Y37.126333 (start point) +G1 Z#101 F#102 +F#103 +G1 X116.840000 Y36.914667 +G1 X115.358333 Y35.390667 +G1 X115.231333 Y35.009667 +G1 X115.273667 Y33.993667 +G1 X115.527667 Y33.612667 +G1 X115.908667 Y33.358667 +G1 X116.459000 Y33.358667 +G1 X116.840000 Y33.612667 +G1 X117.094000 Y33.993667 +G1 X117.136333 Y34.501667 +G1 X117.813667 Y35.221333 +G1 X123.444000 Y35.221333 +G1 X124.121333 Y34.501667 +G1 X124.121333 Y34.120667 +G1 X124.248333 Y33.824333 +G1 X124.248333 Y33.443333 +G1 X124.629333 Y33.443333 +G1 X124.925667 Y33.316333 +G1 X132.334000 Y33.316333 +G1 X132.672667 Y33.485667 +G1 X132.884333 Y33.739667 +G1 X133.053667 Y34.078333 +G1 X133.053667 Y34.459333 +G1 X132.884333 Y34.798000 +G1 X132.672667 Y35.052000 +G1 X132.334000 Y35.221333 +G1 X125.941667 Y35.221333 +G1 X125.899333 Y35.390667 +G1 X124.417667 Y36.914667 +G1 X123.994333 Y37.126333 +G1 X117.263333 Y37.126333 +G0 Z#100 +(polygon end, distance 42.17) +(polygon 256) +G0 X63.246000 Y36.533667 (start point) +G1 Z#101 F#102 +F#103 +G1 X62.949667 Y36.449000 +G1 X62.611000 Y36.279667 +G1 X62.272333 Y35.983333 +G1 X61.933667 Y35.771667 +G1 X60.536667 Y34.332333 +G1 X60.367333 Y33.951333 +G1 X60.367333 Y33.316333 +G1 X60.579000 Y32.850667 +G1 X60.536667 Y32.131000 +G1 X60.452000 Y31.707667 +G1 X60.536667 Y31.326667 +G1 X60.579000 Y30.141333 +G1 X60.113333 Y29.972000 +G1 X55.837667 Y25.738667 +G1 X27.516667 Y25.696333 +G1 X27.220333 Y25.569333 +G1 X23.368000 Y29.379333 +G1 X23.029333 Y29.548667 +G1 X14.393333 Y29.548667 +G1 X13.970000 Y29.337000 +G1 X13.758333 Y29.083000 +G1 X13.589000 Y28.744333 +G1 X13.589000 Y28.363333 +G1 X13.758333 Y28.024667 +G1 X13.970000 Y27.770667 +G1 X14.393333 Y27.559000 +G1 X22.479000 Y27.559000 +G1 X26.331333 Y23.664333 +G1 X26.585333 Y23.156333 +G1 X27.051000 Y22.733000 +G1 X27.516667 Y22.521333 +G1 X56.896000 Y22.521333 +G1 X57.319333 Y22.690667 +G1 X62.272333 Y27.601333 +G1 X62.526333 Y28.151667 +G1 X62.611000 Y31.326667 +G1 X62.695667 Y31.750000 +G1 X62.611000 Y32.131000 +G1 X62.568667 Y32.893000 +G1 X62.992000 Y33.274000 +G1 X95.504000 Y33.316333 +G1 X95.504000 Y32.215667 +G1 X95.377000 Y31.877000 +G1 X95.419333 Y31.411333 +G1 X95.588667 Y31.072667 +G1 X95.927333 Y30.776333 +G1 X96.181333 Y30.649333 +G1 X96.816333 Y30.649333 +G1 X97.155000 Y30.818667 +G1 X97.493667 Y31.199667 +G1 X97.493667 Y31.284333 +G1 X115.443000 Y31.284333 +G1 X115.781667 Y30.945667 +G1 X116.120333 Y30.861000 +G1 X116.501333 Y30.903333 +G1 X116.840000 Y31.157333 +G1 X117.009333 Y31.453667 +G1 X117.009333 Y32.004000 +G1 X116.840000 Y32.300333 +G1 X116.501333 Y32.554333 +G1 X116.120333 Y32.596667 +G1 X115.781667 Y32.512000 +G1 X115.443000 Y32.173333 +G1 X97.493667 Y32.173333 +G1 X97.493667 Y33.485667 +G1 X97.705333 Y33.951333 +G1 X97.705333 Y34.586333 +G1 X97.536000 Y34.967333 +G1 X96.774000 Y35.771667 +G1 X96.435333 Y35.983333 +G1 X96.096667 Y36.279667 +G1 X95.631000 Y36.491333 +G1 X63.246000 Y36.533667 +G0 Z#100 +(polygon end, distance 233.48) +(polygon 257) +G0 X117.856000 Y35.136667 (start point) +G1 Z#101 F#102 +F#103 +G1 X117.856000 Y33.401000 +G1 X119.591667 Y33.401000 +G1 X119.591667 Y35.136667 +G1 X117.856000 Y35.136667 +G0 Z#100 +(polygon end, distance 6.94) +(polygon 258) +G0 X135.085667 Y35.094333 (start point) +G1 Z#101 F#102 +F#103 +G1 X134.747000 Y34.925000 +G1 X134.535333 Y34.671000 +G1 X134.408333 Y34.374667 +G1 X134.408333 Y34.163000 +G1 X134.535333 Y33.866667 +G1 X134.747000 Y33.612667 +G1 X135.085667 Y33.443333 +G1 X135.339667 Y33.443333 +G1 X135.636000 Y33.570333 +G1 X135.890000 Y33.782000 +G1 X136.017000 Y34.036000 +G1 X140.377333 Y34.036000 +G1 X140.589000 Y33.782000 +G1 X140.843000 Y33.655000 +G1 X141.097000 Y33.655000 +G1 X141.351000 Y33.866667 +G1 X141.562667 Y34.120667 +G1 X141.562667 Y34.417000 +G1 X141.351000 Y34.671000 +G1 X141.097000 Y34.882667 +G1 X140.843000 Y34.882667 +G1 X140.589000 Y34.755667 +G1 X140.377333 Y34.501667 +G1 X136.017000 Y34.501667 +G1 X135.890000 Y34.755667 +G1 X135.636000 Y34.967333 +G1 X135.339667 Y35.094333 +G1 X135.085667 Y35.094333 +G0 Z#100 +(polygon end, distance 16.73) +(polygon 259) +G0 X14.393333 Y34.628667 (start point) +G1 Z#101 F#102 +F#103 +G1 X13.970000 Y34.417000 +G1 X13.758333 Y34.163000 +G1 X13.589000 Y33.824333 +G1 X13.589000 Y33.443333 +G1 X13.758333 Y33.104667 +G1 X13.970000 Y32.850667 +G1 X14.393333 Y32.639000 +G1 X28.490333 Y32.639000 +G1 X28.659667 Y32.258000 +G1 X34.163000 Y26.754667 +G1 X34.544000 Y26.585333 +G1 X41.359667 Y26.543000 +G1 X41.359667 Y29.294667 +G1 X35.433000 Y29.294667 +G1 X30.649333 Y34.120667 +G1 X30.437667 Y34.417000 +G1 X30.014333 Y34.628667 +G1 X14.393333 Y34.628667 +G0 Z#100 +(polygon end, distance 64.21) +(polygon 260) +G0 X100.160667 Y33.612667 (start point) +G1 Z#101 F#102 +F#103 +G1 X99.906667 Y33.401000 +G1 X99.695000 Y33.147000 +G1 X99.695000 Y32.850667 +G1 X99.906667 Y32.596667 +G1 X100.160667 Y32.385000 +G1 X100.414667 Y32.385000 +G1 X100.668667 Y32.512000 +G1 X100.880333 Y32.766000 +G1 X161.163000 Y32.766000 +G1 X161.840333 Y32.131000 +G1 X163.533667 Y32.131000 +G1 X163.787667 Y31.707667 +G1 X164.168667 Y31.453667 +G1 X164.719000 Y31.453667 +G1 X165.100000 Y31.707667 +G1 X165.354000 Y32.088667 +G1 X165.354000 Y32.639000 +G1 X165.100000 Y33.020000 +G1 X164.719000 Y33.274000 +G1 X164.168667 Y33.274000 +G1 X163.787667 Y33.020000 +G1 X163.533667 Y32.596667 +G1 X162.009667 Y32.596667 +G1 X161.332333 Y33.231667 +G1 X100.880333 Y33.231667 +G1 X100.668667 Y33.485667 +G1 X100.414667 Y33.612667 +G1 X100.160667 Y33.612667 +G0 Z#100 +(polygon end, distance 134.55) +(polygon 261) +G0 X63.923333 Y32.850667 (start point) +G1 Z#101 F#102 +F#103 +G1 X63.711667 Y32.766000 +G1 X63.457667 Y32.639000 +G1 X63.161333 Y32.300333 +G1 X63.034333 Y32.046333 +G1 X63.034333 Y31.411333 +G1 X63.161333 Y31.157333 +G1 X63.457667 Y30.818667 +G1 X63.796333 Y30.649333 +G1 X64.431333 Y30.649333 +G1 X64.770000 Y30.818667 +G1 X65.066333 Y31.157333 +G1 X65.193333 Y31.411333 +G1 X65.193333 Y32.046333 +G1 X65.066333 Y32.300333 +G1 X64.770000 Y32.639000 +G1 X64.431333 Y32.808333 +G1 X63.923333 Y32.850667 +G0 Z#100 +(polygon end, distance 7.00) +(polygon 262) +G0 X90.297000 Y32.850667 (start point) +G1 Z#101 F#102 +F#103 +G1 X90.297000 Y30.607000 +G1 X90.974333 Y30.607000 +G1 X90.974333 Y30.395333 +G1 X91.059000 Y30.226000 +G1 X91.736333 Y29.506333 +G1 X91.990333 Y29.379333 +G1 X122.428000 Y29.379333 +G1 X122.766667 Y29.040667 +G1 X123.105333 Y28.956000 +G1 X123.486333 Y28.998333 +G1 X123.825000 Y29.252333 +G1 X123.994333 Y29.548667 +G1 X123.994333 Y30.099000 +G1 X123.825000 Y30.395333 +G1 X123.486333 Y30.649333 +G1 X123.105333 Y30.691667 +G1 X122.766667 Y30.607000 +G1 X122.428000 Y30.268333 +G1 X92.202000 Y30.268333 +G1 X91.905667 Y30.607000 +G1 X92.540667 Y30.607000 +G1 X92.540667 Y32.850667 +G1 X90.297000 Y32.850667 +G0 Z#100 +(polygon end, distance 75.33) +(polygon 263) +G0 X93.768333 Y32.850667 (start point) +G1 Z#101 F#102 +F#103 +G1 X93.556667 Y32.766000 +G1 X93.302667 Y32.639000 +G1 X93.006333 Y32.300333 +G1 X92.879333 Y32.046333 +G1 X92.879333 Y31.411333 +G1 X93.006333 Y31.157333 +G1 X93.302667 Y30.818667 +G1 X93.641333 Y30.649333 +G1 X94.276333 Y30.649333 +G1 X94.615000 Y30.818667 +G1 X94.911333 Y31.157333 +G1 X95.038333 Y31.411333 +G1 X95.038333 Y32.046333 +G1 X94.911333 Y32.300333 +G1 X94.615000 Y32.639000 +G1 X94.276333 Y32.808333 +G1 X93.768333 Y32.850667 +G0 Z#100 +(polygon end, distance 7.00) +(polygon 264) +G0 X118.575667 Y32.596667 (start point) +G1 Z#101 F#102 +F#103 +G1 X118.321667 Y32.512000 +G1 X117.940667 Y32.131000 +G1 X117.856000 Y31.792333 +G1 X117.898333 Y31.411333 +G1 X118.152333 Y31.072667 +G1 X118.448667 Y30.903333 +G1 X118.787333 Y30.861000 +G1 X119.126000 Y30.945667 +G1 X119.464667 Y31.284333 +G1 X134.493000 Y31.284333 +G1 X134.831667 Y30.945667 +G1 X135.170333 Y30.861000 +G1 X135.551333 Y30.903333 +G1 X135.890000 Y31.157333 +G1 X136.059333 Y31.453667 +G1 X136.059333 Y32.004000 +G1 X135.890000 Y32.300333 +G1 X135.551333 Y32.554333 +G1 X135.170333 Y32.596667 +G1 X134.831667 Y32.512000 +G1 X134.493000 Y32.173333 +G1 X119.464667 Y32.173333 +G1 X119.126000 Y32.512000 +G1 X118.829667 Y32.596667 +G1 X118.575667 Y32.596667 +G0 Z#100 +(polygon end, distance 39.07) +(polygon 265) +G0 X23.876000 Y32.554333 (start point) +G1 Z#101 F#102 +F#103 +G1 X23.537333 Y32.427333 +G1 X23.368000 Y32.342667 +G1 X23.071667 Y32.088667 +G1 X14.393333 Y32.088667 +G1 X14.054667 Y31.919333 +G1 X13.800667 Y31.707667 +G1 X13.589000 Y31.284333 +G1 X13.589000 Y30.903333 +G1 X13.800667 Y30.480000 +G1 X14.054667 Y30.268333 +G1 X14.393333 Y30.099000 +G1 X23.071667 Y30.099000 +G1 X23.410333 Y29.802667 +G1 X23.791333 Y29.675667 +G1 X24.468667 Y29.675667 +G1 X24.934333 Y29.887333 +G1 X25.315333 Y30.268333 +G1 X25.527000 Y30.734000 +G1 X25.527000 Y31.453667 +G1 X25.315333 Y31.919333 +G1 X24.934333 Y32.300333 +G1 X24.468667 Y32.512000 +G1 X23.876000 Y32.554333 +G0 Z#100 +(polygon end, distance 27.01) +(polygon 266) +G0 X163.491333 Y30.776333 (start point) +G1 Z#101 F#102 +F#103 +G1 X163.491333 Y28.871333 +G1 X165.396333 Y28.871333 +G1 X165.396333 Y30.776333 +G1 X163.491333 Y30.776333 +G0 Z#100 +(polygon end, distance 7.62) +(polygon 267) +G0 X29.591000 Y29.294667 (start point) +G1 Z#101 F#102 +F#103 +G1 X29.252333 Y29.167667 +G1 X28.871333 Y28.913667 +G1 X28.575000 Y28.532667 +G1 X28.448000 Y28.067000 +G1 X28.490333 Y27.559000 +G1 X28.659667 Y27.178000 +G1 X29.083000 Y26.754667 +G1 X29.464000 Y26.585333 +G1 X30.183667 Y26.585333 +G1 X30.564667 Y26.754667 +G1 X30.988000 Y27.178000 +G1 X31.157333 Y27.559000 +G1 X31.157333 Y28.278667 +G1 X30.988000 Y28.659667 +G1 X30.564667 Y29.083000 +G1 X30.183667 Y29.252333 +G1 X29.591000 Y29.294667 +G0 Z#100 +(polygon end, distance 8.63) +(polygon 268) +G0 X116.035667 Y28.786667 (start point) +G1 Z#101 F#102 +F#103 +G1 X115.781667 Y28.702000 +G1 X115.400667 Y28.321000 +G1 X115.316000 Y27.982333 +G1 X115.358333 Y27.601333 +G1 X115.612333 Y27.262667 +G1 X115.908667 Y27.093333 +G1 X116.459000 Y27.093333 +G1 X116.797667 Y27.305000 +G1 X117.009333 Y27.643667 +G1 X117.009333 Y28.194000 +G1 X116.797667 Y28.532667 +G1 X116.459000 Y28.744333 +G1 X116.035667 Y28.786667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 269) +G0 X117.856000 Y28.786667 (start point) +G1 Z#101 F#102 +F#103 +G1 X117.856000 Y27.051000 +G1 X119.591667 Y27.051000 +G1 X119.591667 Y27.474333 +G1 X124.206000 Y27.474333 +G1 X124.206000 Y27.051000 +G1 X125.941667 Y27.051000 +G1 X125.941667 Y27.474333 +G1 X126.830667 Y27.474333 +G1 X127.804333 Y26.458333 +G1 X127.804333 Y23.579667 +G1 X127.465667 Y23.241000 +G1 X127.381000 Y22.902333 +G1 X127.423333 Y22.521333 +G1 X127.677333 Y22.182667 +G1 X127.973667 Y22.013333 +G1 X128.524000 Y22.013333 +G1 X128.820333 Y22.182667 +G1 X129.074333 Y22.521333 +G1 X129.116667 Y22.902333 +G1 X129.032000 Y23.241000 +G1 X128.693333 Y23.579667 +G1 X128.693333 Y26.712333 +G1 X128.608667 Y26.881667 +G1 X127.296333 Y28.236333 +G1 X127.042333 Y28.363333 +G1 X125.941667 Y28.363333 +G1 X125.941667 Y28.786667 +G1 X124.206000 Y28.786667 +G1 X124.206000 Y28.363333 +G1 X119.591667 Y28.363333 +G1 X119.591667 Y28.786667 +G1 X117.856000 Y28.786667 +G0 Z#100 +(polygon end, distance 36.72) +(polygon 270) +G0 X135.085667 Y28.786667 (start point) +G1 Z#101 F#102 +F#103 +G1 X134.831667 Y28.702000 +G1 X134.450667 Y28.321000 +G1 X134.366000 Y27.982333 +G1 X134.408333 Y27.601333 +G1 X134.662333 Y27.262667 +G1 X134.958667 Y27.093333 +G1 X135.509000 Y27.093333 +G1 X135.847667 Y27.305000 +G1 X136.059333 Y27.643667 +G1 X136.059333 Y28.194000 +G1 X135.847667 Y28.532667 +G1 X135.509000 Y28.744333 +G1 X135.085667 Y28.786667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 271) +G0 X14.393333 Y26.966333 (start point) +G1 Z#101 F#102 +F#103 +G1 X13.970000 Y26.754667 +G1 X13.716000 Y26.416000 +G1 X13.631333 Y26.119667 +G1 X13.673667 Y25.738667 +G1 X13.927667 Y25.357667 +G1 X14.308667 Y25.103667 +G1 X21.166667 Y25.061333 +G1 X23.156333 Y23.114000 +G1 X23.156333 Y18.796000 +G1 X22.733000 Y19.177000 +G1 X22.352000 Y19.346333 +G1 X14.308667 Y19.304000 +G1 X13.927667 Y19.050000 +G1 X13.673667 Y18.669000 +G1 X13.673667 Y18.118667 +G1 X13.927667 Y17.737667 +G1 X14.308667 Y17.483667 +G1 X21.801667 Y17.441333 +G1 X22.309667 Y16.975667 +G1 X22.648333 Y16.806333 +G1 X39.412333 Y16.806333 +G1 X39.666333 Y16.679333 +G1 X40.301333 Y16.679333 +G1 X40.640000 Y16.848667 +G1 X40.936333 Y17.187333 +G1 X41.063333 Y17.441333 +G1 X41.063333 Y18.076333 +G1 X40.936333 Y18.330333 +G1 X40.640000 Y18.669000 +G1 X40.301333 Y18.838333 +G1 X39.666333 Y18.838333 +G1 X39.412333 Y18.711333 +G1 X25.061333 Y18.711333 +G1 X25.061333 Y23.664333 +G1 X24.892000 Y24.003000 +G1 X22.182667 Y26.754667 +G1 X21.759333 Y26.966333 +G1 X14.393333 Y26.966333 +G0 Z#100 +(polygon end, distance 89.28) +(polygon 272) +G0 X131.868333 Y25.992667 (start point) +G1 Z#101 F#102 +F#103 +G1 X131.445000 Y25.823333 +G1 X131.191000 Y25.611667 +G1 X130.937000 Y25.315333 +G1 X130.810000 Y24.892000 +G1 X130.810000 Y24.595667 +G1 X130.937000 Y24.172333 +G1 X131.191000 Y23.876000 +G1 X131.487333 Y23.622000 +G1 X131.953000 Y23.495000 +G1 X134.366000 Y21.124333 +G1 X134.366000 Y20.701000 +G1 X135.001000 Y20.658667 +G1 X135.466667 Y20.658667 +G1 X136.101667 Y20.701000 +G1 X136.144000 Y21.336000 +G1 X136.144000 Y21.801667 +G1 X136.101667 Y22.436667 +G1 X135.678333 Y22.436667 +G1 X133.307667 Y24.849667 +G1 X133.180667 Y25.315333 +G1 X132.926667 Y25.611667 +G1 X132.630333 Y25.865667 +G1 X132.207000 Y25.992667 +G1 X131.868333 Y25.992667 +G0 Z#100 +(polygon end, distance 16.75) +(polygon 273) +G0 X116.035667 Y25.611667 (start point) +G1 Z#101 F#102 +F#103 +G1 X115.781667 Y25.527000 +G1 X115.400667 Y25.146000 +G1 X115.316000 Y24.807333 +G1 X115.358333 Y24.426333 +G1 X115.612333 Y24.087667 +G1 X115.908667 Y23.918333 +G1 X116.247333 Y23.876000 +G1 X116.586000 Y23.960667 +G1 X116.924667 Y24.299333 +G1 X122.428000 Y24.299333 +G1 X122.766667 Y23.960667 +G1 X123.105333 Y23.876000 +G1 X123.486333 Y23.918333 +G1 X123.825000 Y24.172333 +G1 X123.994333 Y24.468667 +G1 X123.994333 Y25.019000 +G1 X123.825000 Y25.315333 +G1 X123.486333 Y25.569333 +G1 X123.105333 Y25.611667 +G1 X122.766667 Y25.527000 +G1 X122.428000 Y25.188333 +G1 X116.924667 Y25.188333 +G1 X116.586000 Y25.527000 +G1 X116.289667 Y25.611667 +G1 X116.035667 Y25.611667 +G0 Z#100 +(polygon end, distance 20.02) +(polygon 274) +G0 X163.660667 Y25.061333 (start point) +G1 Z#101 F#102 +F#103 +G1 X163.237333 Y24.849667 +G1 X163.025667 Y24.595667 +G1 X162.856333 Y24.257000 +G1 X162.856333 Y23.876000 +G1 X163.025667 Y23.537333 +G1 X163.237333 Y23.283333 +G1 X163.660667 Y23.071667 +G1 X164.041667 Y23.071667 +G1 X164.465000 Y23.283333 +G1 X164.676667 Y23.537333 +G1 X164.846000 Y23.876000 +G1 X164.846000 Y24.257000 +G1 X164.634333 Y24.680333 +G1 X164.380333 Y24.892000 +G1 X164.041667 Y25.061333 +G1 X163.660667 Y25.061333 +G0 Z#100 +(polygon end, distance 6.25) +(polygon 275) +G0 X14.435667 Y24.341667 (start point) +G1 Z#101 F#102 +F#103 +G1 X14.181667 Y24.257000 +G1 X13.800667 Y23.876000 +G1 X13.716000 Y23.537333 +G1 X13.758333 Y23.156333 +G1 X14.012333 Y22.817667 +G1 X14.308667 Y22.648333 +G1 X14.859000 Y22.648333 +G1 X15.197667 Y22.860000 +G1 X15.409333 Y23.198667 +G1 X15.409333 Y23.749000 +G1 X15.197667 Y24.087667 +G1 X14.859000 Y24.299333 +G1 X14.435667 Y24.341667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 276) +G0 X16.975667 Y24.341667 (start point) +G1 Z#101 F#102 +F#103 +G1 X16.721667 Y24.257000 +G1 X16.340667 Y23.876000 +G1 X16.256000 Y23.537333 +G1 X16.298333 Y23.156333 +G1 X16.552333 Y22.817667 +G1 X16.848667 Y22.648333 +G1 X17.399000 Y22.648333 +G1 X17.737667 Y22.860000 +G1 X17.949333 Y23.198667 +G1 X17.949333 Y23.749000 +G1 X17.737667 Y24.087667 +G1 X17.399000 Y24.299333 +G1 X16.975667 Y24.341667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 277) +G0 X19.515667 Y24.341667 (start point) +G1 Z#101 F#102 +F#103 +G1 X19.261667 Y24.257000 +G1 X18.880667 Y23.876000 +G1 X18.796000 Y23.537333 +G1 X18.838333 Y23.156333 +G1 X19.092333 Y22.817667 +G1 X19.388667 Y22.648333 +G1 X19.939000 Y22.648333 +G1 X20.277667 Y22.860000 +G1 X20.489333 Y23.198667 +G1 X20.489333 Y23.749000 +G1 X20.277667 Y24.087667 +G1 X19.939000 Y24.299333 +G1 X19.515667 Y24.341667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 278) +G0 X87.460667 Y24.087667 (start point) +G1 Z#101 F#102 +F#103 +G1 X87.206667 Y23.876000 +G1 X86.995000 Y23.622000 +G1 X86.995000 Y23.325667 +G1 X87.206667 Y23.071667 +G1 X87.460667 Y22.860000 +G1 X87.714667 Y22.860000 +G1 X87.968667 Y22.987000 +G1 X88.180333 Y23.241000 +G1 X111.633000 Y23.241000 +G1 X113.580333 Y21.336000 +G1 X131.953000 Y21.336000 +G1 X135.170333 Y18.161000 +G1 X165.523333 Y18.161000 +G1 X165.692667 Y17.822333 +G1 X166.031333 Y17.526000 +G1 X166.412333 Y17.483667 +G1 X166.751000 Y17.568333 +G1 X167.132000 Y17.949333 +G1 X167.216667 Y18.288000 +G1 X167.174333 Y18.669000 +G1 X166.920333 Y19.007667 +G1 X166.624000 Y19.177000 +G1 X166.073667 Y19.177000 +G1 X165.735000 Y18.965333 +G1 X165.523333 Y18.626667 +G1 X135.339667 Y18.626667 +G1 X132.122333 Y21.801667 +G1 X113.749667 Y21.801667 +G1 X111.802333 Y23.706667 +G1 X88.180333 Y23.706667 +G1 X87.968667 Y23.960667 +G1 X87.714667 Y24.087667 +G1 X87.460667 Y24.087667 +G0 Z#100 +(polygon end, distance 167.15) +(polygon 279) +G0 X115.400667 Y23.706667 (start point) +G1 Z#101 F#102 +F#103 +G1 X115.146667 Y23.622000 +G1 X114.765667 Y23.241000 +G1 X114.681000 Y22.902333 +G1 X114.723333 Y22.521333 +G1 X114.977333 Y22.182667 +G1 X115.273667 Y22.013333 +G1 X115.824000 Y22.013333 +G1 X116.162667 Y22.225000 +G1 X116.374333 Y22.563667 +G1 X116.374333 Y23.114000 +G1 X116.162667 Y23.452667 +G1 X115.824000 Y23.664333 +G1 X115.400667 Y23.706667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 280) +G0 X117.940667 Y23.706667 (start point) +G1 Z#101 F#102 +F#103 +G1 X117.686667 Y23.622000 +G1 X117.305667 Y23.241000 +G1 X117.221000 Y22.902333 +G1 X117.263333 Y22.521333 +G1 X117.517333 Y22.182667 +G1 X117.813667 Y22.013333 +G1 X118.364000 Y22.013333 +G1 X118.702667 Y22.225000 +G1 X118.914333 Y22.563667 +G1 X118.914333 Y23.114000 +G1 X118.702667 Y23.452667 +G1 X118.364000 Y23.664333 +G1 X117.940667 Y23.706667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 281) +G0 X120.480667 Y23.706667 (start point) +G1 Z#101 F#102 +F#103 +G1 X120.226667 Y23.622000 +G1 X119.845667 Y23.241000 +G1 X119.761000 Y22.902333 +G1 X119.803333 Y22.521333 +G1 X120.057333 Y22.182667 +G1 X120.353667 Y22.013333 +G1 X120.904000 Y22.013333 +G1 X121.242667 Y22.225000 +G1 X121.454333 Y22.563667 +G1 X121.454333 Y23.114000 +G1 X121.242667 Y23.452667 +G1 X120.904000 Y23.664333 +G1 X120.480667 Y23.706667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 282) +G0 X123.020667 Y23.706667 (start point) +G1 Z#101 F#102 +F#103 +G1 X122.766667 Y23.622000 +G1 X122.385667 Y23.241000 +G1 X122.301000 Y22.902333 +G1 X122.343333 Y22.521333 +G1 X122.597333 Y22.182667 +G1 X122.893667 Y22.013333 +G1 X123.444000 Y22.013333 +G1 X123.782667 Y22.225000 +G1 X123.994333 Y22.563667 +G1 X123.994333 Y23.114000 +G1 X123.782667 Y23.452667 +G1 X123.444000 Y23.664333 +G1 X123.020667 Y23.706667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 283) +G0 X125.560667 Y23.706667 (start point) +G1 Z#101 F#102 +F#103 +G1 X125.306667 Y23.622000 +G1 X124.925667 Y23.241000 +G1 X124.841000 Y22.902333 +G1 X124.883333 Y22.521333 +G1 X125.137333 Y22.182667 +G1 X125.433667 Y22.013333 +G1 X125.984000 Y22.013333 +G1 X126.322667 Y22.225000 +G1 X126.534333 Y22.563667 +G1 X126.534333 Y23.114000 +G1 X126.322667 Y23.452667 +G1 X125.984000 Y23.664333 +G1 X125.560667 Y23.706667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 284) +G0 X130.640667 Y23.706667 (start point) +G1 Z#101 F#102 +F#103 +G1 X130.386667 Y23.622000 +G1 X130.005667 Y23.241000 +G1 X129.921000 Y22.902333 +G1 X129.963333 Y22.521333 +G1 X130.217333 Y22.182667 +G1 X130.513667 Y22.013333 +G1 X131.064000 Y22.013333 +G1 X131.402667 Y22.225000 +G1 X131.614333 Y22.563667 +G1 X131.614333 Y23.114000 +G1 X131.402667 Y23.452667 +G1 X131.064000 Y23.664333 +G1 X130.640667 Y23.706667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 285) +G0 X165.481000 Y23.706667 (start point) +G1 Z#101 F#102 +F#103 +G1 X165.481000 Y21.971000 +G1 X167.216667 Y21.971000 +G1 X167.216667 Y23.706667 +G1 X165.481000 Y23.706667 +G0 Z#100 +(polygon end, distance 6.94) +(polygon 286) +G0 X78.570667 Y22.436667 (start point) +G1 Z#101 F#102 +F#103 +G1 X78.316667 Y22.352000 +G1 X77.978000 Y22.013333 +G1 X47.540333 Y22.013333 +G1 X47.371000 Y21.928667 +G1 X42.121667 Y16.721667 +G1 X41.613667 Y16.679333 +G1 X41.275000 Y16.467667 +G1 X41.063333 Y16.129000 +G1 X41.063333 Y15.663333 +G1 X27.347333 Y15.663333 +G1 X27.305000 Y15.790333 +G1 X26.966333 Y16.044333 +G1 X26.585333 Y16.086667 +G1 X26.246667 Y16.002000 +G1 X25.908000 Y15.663333 +G1 X24.976667 Y15.663333 +G1 X24.976667 Y16.086667 +G1 X23.241000 Y16.086667 +G1 X23.241000 Y14.351000 +G1 X24.976667 Y14.351000 +G1 X24.976667 Y14.774333 +G1 X25.950333 Y14.774333 +G1 X25.992667 Y14.647333 +G1 X26.331333 Y14.393333 +G1 X26.712333 Y14.351000 +G1 X27.051000 Y14.435667 +G1 X27.389667 Y14.774333 +G1 X41.317333 Y14.774333 +G1 X41.486667 Y14.859000 +G1 X41.656000 Y14.986000 +G1 X42.164000 Y15.028333 +G1 X42.502667 Y15.240000 +G1 X42.714333 Y15.578667 +G1 X42.756667 Y16.086667 +G1 X47.752000 Y21.124333 +G1 X77.978000 Y21.124333 +G1 X78.316667 Y20.785667 +G1 X78.655333 Y20.701000 +G1 X79.036333 Y20.743333 +G1 X79.375000 Y20.997333 +G1 X79.417333 Y21.124333 +G1 X93.810667 Y21.124333 +G1 X96.054333 Y18.838333 +G1 X96.054333 Y13.673667 +G1 X95.969667 Y13.673667 +G1 X95.588667 Y13.335000 +G1 X95.419333 Y12.996333 +G1 X95.419333 Y12.361333 +G1 X95.546333 Y12.107333 +G1 X95.842667 Y11.768667 +G1 X96.181333 Y11.599333 +G1 X96.816333 Y11.599333 +G1 X97.155000 Y11.768667 +G1 X97.451333 Y12.107333 +G1 X97.578333 Y12.361333 +G1 X97.578333 Y12.996333 +G1 X97.409000 Y13.335000 +G1 X97.028000 Y13.673667 +G1 X96.943333 Y13.673667 +G1 X96.943333 Y19.092333 +G1 X96.816333 Y19.346333 +G1 X94.191667 Y21.928667 +G1 X94.022333 Y22.013333 +G1 X79.459667 Y22.013333 +G1 X79.121000 Y22.352000 +G1 X78.824667 Y22.436667 +G1 X78.570667 Y22.436667 +G0 Z#100 +(polygon end, distance 175.00) +(polygon 287) +G0 X14.435667 Y21.801667 (start point) +G1 Z#101 F#102 +F#103 +G1 X14.181667 Y21.717000 +G1 X13.800667 Y21.336000 +G1 X13.716000 Y20.997333 +G1 X13.758333 Y20.616333 +G1 X14.012333 Y20.277667 +G1 X14.308667 Y20.108333 +G1 X14.859000 Y20.108333 +G1 X15.197667 Y20.320000 +G1 X15.409333 Y20.658667 +G1 X15.409333 Y21.209000 +G1 X15.197667 Y21.547667 +G1 X14.859000 Y21.759333 +G1 X14.435667 Y21.801667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 288) +G0 X16.975667 Y21.801667 (start point) +G1 Z#101 F#102 +F#103 +G1 X16.721667 Y21.717000 +G1 X16.340667 Y21.336000 +G1 X16.256000 Y20.997333 +G1 X16.298333 Y20.616333 +G1 X16.552333 Y20.277667 +G1 X16.848667 Y20.108333 +G1 X17.399000 Y20.108333 +G1 X17.737667 Y20.320000 +G1 X17.949333 Y20.658667 +G1 X17.949333 Y21.209000 +G1 X17.737667 Y21.547667 +G1 X17.399000 Y21.759333 +G1 X16.975667 Y21.801667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 289) +G0 X19.515667 Y21.801667 (start point) +G1 Z#101 F#102 +F#103 +G1 X19.261667 Y21.717000 +G1 X18.880667 Y21.336000 +G1 X18.796000 Y20.997333 +G1 X18.838333 Y20.616333 +G1 X19.092333 Y20.277667 +G1 X19.388667 Y20.108333 +G1 X19.939000 Y20.108333 +G1 X20.277667 Y20.320000 +G1 X20.489333 Y20.658667 +G1 X20.489333 Y21.209000 +G1 X20.277667 Y21.547667 +G1 X19.939000 Y21.759333 +G1 X19.515667 Y21.801667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 290) +G0 X119.210667 Y21.166667 (start point) +G1 Z#101 F#102 +F#103 +G1 X118.956667 Y21.082000 +G1 X118.575667 Y20.701000 +G1 X118.491000 Y20.362333 +G1 X118.533333 Y20.066000 +G1 X115.231333 Y16.806333 +G1 X115.104333 Y16.552333 +G1 X115.104333 Y15.959667 +G1 X114.765667 Y15.621000 +G1 X114.681000 Y15.282333 +G1 X114.723333 Y14.901333 +G1 X114.977333 Y14.562667 +G1 X115.273667 Y14.393333 +G1 X115.824000 Y14.393333 +G1 X116.120333 Y14.562667 +G1 X116.374333 Y14.901333 +G1 X116.416667 Y15.282333 +G1 X116.332000 Y15.621000 +G1 X115.993333 Y15.959667 +G1 X115.993333 Y16.340667 +G1 X119.126000 Y19.431000 +G1 X119.634000 Y19.473333 +G1 X119.972667 Y19.685000 +G1 X120.184333 Y20.023667 +G1 X120.184333 Y20.574000 +G1 X119.972667 Y20.912667 +G1 X119.634000 Y21.124333 +G1 X119.210667 Y21.166667 +G0 Z#100 +(polygon end, distance 19.34) +(polygon 291) +G0 X80.433333 Y20.785667 (start point) +G1 Z#101 F#102 +F#103 +G1 X80.137000 Y20.658667 +G1 X49.233667 Y20.574000 +G1 X48.979667 Y20.447000 +G1 X42.121667 Y13.631333 +G1 X33.993667 Y13.589000 +G1 X33.612667 Y13.335000 +G1 X33.358667 Y12.954000 +G1 X33.358667 Y12.403667 +G1 X33.612667 Y12.022667 +G1 X33.993667 Y11.768667 +G1 X42.629667 Y11.726333 +G1 X43.010667 Y11.853333 +G1 X49.911000 Y18.711333 +G1 X80.052333 Y18.711333 +G1 X80.306333 Y18.584333 +G1 X80.941333 Y18.584333 +G1 X81.195333 Y18.711333 +G1 X91.694000 Y18.711333 +G1 X93.006333 Y17.356667 +G1 X93.006333 Y13.250333 +G1 X92.879333 Y12.996333 +G1 X92.879333 Y12.361333 +G1 X93.006333 Y12.107333 +G1 X93.006333 Y10.583333 +G1 X93.175667 Y10.244667 +G1 X94.615000 Y8.763000 +G1 X95.038333 Y8.551333 +G1 X117.644333 Y8.551333 +G1 X118.067667 Y8.763000 +G1 X121.454333 Y12.192000 +G1 X121.581333 Y12.573000 +G1 X121.539000 Y15.494000 +G1 X121.285000 Y15.875000 +G1 X120.904000 Y16.129000 +G1 X117.813667 Y16.129000 +G1 X117.432667 Y15.875000 +G1 X117.178667 Y15.494000 +G1 X117.178667 Y14.943667 +G1 X117.432667 Y14.562667 +G1 X117.813667 Y14.308667 +G1 X119.676333 Y14.266333 +G1 X119.676333 Y13.038667 +G1 X117.051667 Y10.456333 +G1 X95.588667 Y10.456333 +G1 X94.911333 Y11.176000 +G1 X94.911333 Y12.107333 +G1 X95.038333 Y12.361333 +G1 X95.038333 Y12.996333 +G1 X94.911333 Y13.250333 +G1 X94.911333 Y17.949333 +G1 X94.742000 Y18.288000 +G1 X92.667667 Y20.404667 +G1 X92.244333 Y20.616333 +G1 X81.195333 Y20.616333 +G1 X80.941333 Y20.743333 +G1 X80.433333 Y20.785667 +G0 Z#100 +(polygon end, distance 213.26) +(polygon 292) +G0 X82.380667 Y18.626667 (start point) +G1 Z#101 F#102 +F#103 +G1 X82.126667 Y18.542000 +G1 X81.788000 Y18.203333 +G1 X51.350333 Y18.203333 +G1 X51.096333 Y18.076333 +G1 X44.280667 Y11.218333 +G1 X32.554333 Y11.218333 +G1 X30.649333 Y13.081000 +G1 X30.226000 Y13.462000 +G1 X29.887333 Y13.546667 +G1 X29.506333 Y13.504333 +G1 X29.167667 Y13.250333 +G1 X29.125333 Y13.123333 +G1 X27.855333 Y13.123333 +G1 X27.601333 Y12.996333 +G1 X25.230667 Y10.583333 +G1 X24.976667 Y10.583333 +G1 X24.976667 Y11.006667 +G1 X23.241000 Y11.006667 +G1 X23.241000 Y9.271000 +G1 X24.976667 Y9.271000 +G1 X24.976667 Y9.694333 +G1 X25.442333 Y9.694333 +G1 X25.696333 Y9.821333 +G1 X28.067000 Y12.234333 +G1 X29.083000 Y12.234333 +G1 X29.421667 Y11.895667 +G1 X29.760333 Y11.811000 +G1 X30.099000 Y11.853333 +G1 X30.437667 Y12.065000 +G1 X32.131000 Y10.414000 +G1 X32.300333 Y10.329333 +G1 X44.492333 Y10.329333 +G1 X44.746333 Y10.456333 +G1 X51.562000 Y17.314333 +G1 X81.788000 Y17.314333 +G1 X82.126667 Y16.975667 +G1 X82.465333 Y16.891000 +G1 X82.846333 Y16.933333 +G1 X83.185000 Y17.187333 +G1 X83.227333 Y17.314333 +G1 X90.000667 Y17.314333 +G1 X90.974333 Y16.298333 +G1 X90.974333 Y13.800667 +G1 X90.297000 Y13.800667 +G1 X90.297000 Y11.557000 +G1 X90.974333 Y11.557000 +G1 X90.974333 Y10.075333 +G1 X91.059000 Y9.906000 +G1 X93.641333 Y7.281333 +G1 X93.895333 Y7.154333 +G1 X130.048000 Y7.154333 +G1 X130.386667 Y6.815667 +G1 X130.725333 Y6.731000 +G1 X131.106333 Y6.773333 +G1 X131.445000 Y7.027333 +G1 X131.614333 Y7.323667 +G1 X131.614333 Y7.874000 +G1 X131.445000 Y8.170333 +G1 X131.106333 Y8.424333 +G1 X130.725333 Y8.466667 +G1 X130.386667 Y8.382000 +G1 X130.048000 Y8.043333 +G1 X94.107000 Y8.043333 +G1 X91.863333 Y10.329333 +G1 X91.863333 Y11.557000 +G1 X92.540667 Y11.557000 +G1 X92.540667 Y13.800667 +G1 X91.863333 Y13.800667 +G1 X91.863333 Y16.552333 +G1 X91.778667 Y16.721667 +G1 X90.466333 Y18.076333 +G1 X90.212333 Y18.203333 +G1 X83.269667 Y18.203333 +G1 X82.931000 Y18.542000 +G1 X82.634667 Y18.626667 +G1 X82.380667 Y18.626667 +G0 Z#100 +(polygon end, distance 249.68) +(polygon 293) +G0 X163.660667 Y18.076333 (start point) +G1 Z#101 F#102 +F#103 +G1 X163.237333 Y17.864667 +G1 X163.025667 Y17.610667 +G1 X162.856333 Y17.272000 +G1 X162.856333 Y16.891000 +G1 X163.025667 Y16.552333 +G1 X163.237333 Y16.298333 +G1 X163.660667 Y16.086667 +G1 X164.041667 Y16.086667 +G1 X164.465000 Y16.298333 +G1 X164.676667 Y16.552333 +G1 X164.846000 Y16.891000 +G1 X164.846000 Y17.272000 +G1 X164.634333 Y17.695333 +G1 X164.380333 Y17.907000 +G1 X164.041667 Y18.076333 +G1 X163.660667 Y18.076333 +G0 Z#100 +(polygon end, distance 6.25) +(polygon 294) +G0 X135.085667 Y17.356667 (start point) +G1 Z#101 F#102 +F#103 +G1 X134.831667 Y17.272000 +G1 X134.450667 Y16.891000 +G1 X134.366000 Y16.552333 +G1 X134.408333 Y16.256000 +G1 X133.773333 Y15.663333 +G1 X131.656667 Y15.663333 +G1 X131.656667 Y16.086667 +G1 X129.921000 Y16.086667 +G1 X129.921000 Y14.351000 +G1 X131.656667 Y14.351000 +G1 X131.656667 Y14.774333 +G1 X134.027333 Y14.774333 +G1 X134.196667 Y14.859000 +G1 X135.001000 Y15.621000 +G1 X135.509000 Y15.663333 +G1 X135.847667 Y15.875000 +G1 X136.059333 Y16.213667 +G1 X136.059333 Y16.764000 +G1 X135.847667 Y17.102667 +G1 X135.509000 Y17.314333 +G1 X135.085667 Y17.356667 +G0 Z#100 +(polygon end, distance 17.24) +(polygon 295) +G0 X14.393333 Y16.848667 (start point) +G1 Z#101 F#102 +F#103 +G1 X13.970000 Y16.637000 +G1 X13.758333 Y16.383000 +G1 X13.589000 Y16.044333 +G1 X13.589000 Y15.663333 +G1 X13.758333 Y15.324667 +G1 X13.970000 Y15.070667 +G1 X14.393333 Y14.859000 +G1 X19.939000 Y14.859000 +G1 X21.209000 Y13.546667 +G1 X21.209000 Y8.678333 +G1 X21.378333 Y8.339667 +G1 X22.860000 Y6.815667 +G1 X23.283333 Y6.604000 +G1 X33.909000 Y6.604000 +G1 X36.830000 Y3.640667 +G1 X37.253333 Y3.429000 +G1 X43.857333 Y3.429000 +G1 X43.984333 Y3.259667 +G1 X44.365333 Y3.005667 +G1 X44.873333 Y2.836333 +G1 X45.254333 Y2.836333 +G1 X45.804667 Y3.005667 +G1 X46.185667 Y3.302000 +G1 X46.482000 Y3.683000 +G1 X46.651333 Y4.233333 +G1 X46.651333 Y4.614333 +G1 X46.482000 Y5.164667 +G1 X46.185667 Y5.545667 +G1 X45.804667 Y5.842000 +G1 X45.254333 Y6.011333 +G1 X44.873333 Y6.011333 +G1 X44.365333 Y5.842000 +G1 X43.984333 Y5.588000 +G1 X43.857333 Y5.418667 +G1 X37.803667 Y5.418667 +G1 X35.136667 Y8.128000 +G1 X35.136667 Y8.466667 +G1 X34.713333 Y8.466667 +G1 X34.417000 Y8.593667 +G1 X23.833667 Y8.593667 +G1 X23.198667 Y9.271000 +G1 X23.198667 Y14.139333 +G1 X22.987000 Y14.562667 +G1 X20.828000 Y16.679333 +G1 X20.489333 Y16.848667 +G1 X14.393333 Y16.848667 +G0 Z#100 +(polygon end, distance 84.91) +(polygon 296) +G0 X70.315667 Y16.086667 (start point) +G1 Z#101 F#102 +F#103 +G1 X70.061667 Y16.002000 +G1 X69.723000 Y15.663333 +G1 X59.605333 Y15.663333 +G1 X59.436000 Y15.578667 +G1 X58.716333 Y14.901333 +G1 X58.589333 Y14.647333 +G1 X58.589333 Y13.800667 +G1 X57.912000 Y13.800667 +G1 X57.912000 Y11.557000 +G1 X60.155667 Y11.557000 +G1 X60.155667 Y13.800667 +G1 X59.478333 Y13.800667 +G1 X59.478333 Y14.393333 +G1 X59.817000 Y14.774333 +G1 X69.723000 Y14.774333 +G1 X70.061667 Y14.435667 +G1 X70.400333 Y14.351000 +G1 X70.781333 Y14.393333 +G1 X71.120000 Y14.647333 +G1 X71.289333 Y14.943667 +G1 X71.289333 Y15.494000 +G1 X71.077667 Y15.832667 +G1 X70.739000 Y16.044333 +G1 X70.315667 Y16.086667 +G0 Z#100 +(polygon end, distance 36.02) +(polygon 297) +G0 X123.020667 Y16.086667 (start point) +G1 Z#101 F#102 +F#103 +G1 X122.766667 Y16.002000 +G1 X122.385667 Y15.621000 +G1 X122.301000 Y15.282333 +G1 X122.343333 Y14.901333 +G1 X122.597333 Y14.562667 +G1 X122.893667 Y14.393333 +G1 X123.444000 Y14.393333 +G1 X123.782667 Y14.605000 +G1 X123.994333 Y14.943667 +G1 X123.994333 Y15.494000 +G1 X123.782667 Y15.832667 +G1 X123.444000 Y16.044333 +G1 X123.020667 Y16.086667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 298) +G0 X125.560667 Y16.086667 (start point) +G1 Z#101 F#102 +F#103 +G1 X125.306667 Y16.002000 +G1 X124.925667 Y15.621000 +G1 X124.841000 Y15.282333 +G1 X124.883333 Y14.901333 +G1 X125.137333 Y14.562667 +G1 X125.433667 Y14.393333 +G1 X125.984000 Y14.393333 +G1 X126.322667 Y14.605000 +G1 X126.534333 Y14.943667 +G1 X126.534333 Y15.494000 +G1 X126.322667 Y15.832667 +G1 X125.984000 Y16.044333 +G1 X125.560667 Y16.086667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 299) +G0 X128.100667 Y16.086667 (start point) +G1 Z#101 F#102 +F#103 +G1 X127.846667 Y16.002000 +G1 X127.465667 Y15.621000 +G1 X127.381000 Y15.282333 +G1 X127.423333 Y14.901333 +G1 X127.677333 Y14.562667 +G1 X127.973667 Y14.393333 +G1 X128.524000 Y14.393333 +G1 X128.862667 Y14.605000 +G1 X129.074333 Y14.943667 +G1 X129.074333 Y15.494000 +G1 X128.862667 Y15.832667 +G1 X128.524000 Y16.044333 +G1 X128.100667 Y16.086667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 300) +G0 X14.435667 Y14.181667 (start point) +G1 Z#101 F#102 +F#103 +G1 X14.181667 Y14.097000 +G1 X13.800667 Y13.716000 +G1 X13.716000 Y13.377333 +G1 X13.758333 Y12.996333 +G1 X14.012333 Y12.657667 +G1 X14.308667 Y12.488333 +G1 X14.859000 Y12.488333 +G1 X15.197667 Y12.700000 +G1 X15.409333 Y13.038667 +G1 X15.409333 Y13.589000 +G1 X15.197667 Y13.927667 +G1 X14.859000 Y14.139333 +G1 X14.435667 Y14.181667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 301) +G0 X16.975667 Y14.181667 (start point) +G1 Z#101 F#102 +F#103 +G1 X16.721667 Y14.097000 +G1 X16.340667 Y13.716000 +G1 X16.256000 Y13.377333 +G1 X16.298333 Y12.996333 +G1 X16.552333 Y12.657667 +G1 X16.848667 Y12.488333 +G1 X17.399000 Y12.488333 +G1 X17.737667 Y12.700000 +G1 X17.949333 Y13.038667 +G1 X17.949333 Y13.589000 +G1 X17.737667 Y13.927667 +G1 X17.399000 Y14.139333 +G1 X16.975667 Y14.181667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 302) +G0 X19.515667 Y14.181667 (start point) +G1 Z#101 F#102 +F#103 +G1 X19.261667 Y14.097000 +G1 X18.880667 Y13.716000 +G1 X18.796000 Y13.377333 +G1 X18.838333 Y12.996333 +G1 X19.092333 Y12.657667 +G1 X19.388667 Y12.488333 +G1 X19.939000 Y12.488333 +G1 X20.277667 Y12.700000 +G1 X20.489333 Y13.038667 +G1 X20.489333 Y13.589000 +G1 X20.277667 Y13.927667 +G1 X19.939000 Y14.139333 +G1 X19.515667 Y14.181667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 303) +G0 X128.100667 Y13.927667 (start point) +G1 Z#101 F#102 +F#103 +G1 X127.846667 Y13.716000 +G1 X127.635000 Y13.462000 +G1 X127.635000 Y13.165667 +G1 X127.846667 Y12.911667 +G1 X128.100667 Y12.700000 +G1 X128.354667 Y12.700000 +G1 X128.608667 Y12.827000 +G1 X128.820333 Y13.081000 +G1 X137.837333 Y13.081000 +G1 X138.049000 Y12.827000 +G1 X138.303000 Y12.700000 +G1 X138.557000 Y12.700000 +G1 X138.811000 Y12.911667 +G1 X139.022667 Y13.165667 +G1 X139.022667 Y13.462000 +G1 X138.811000 Y13.716000 +G1 X138.557000 Y13.927667 +G1 X138.303000 Y13.927667 +G1 X138.049000 Y13.800667 +G1 X137.837333 Y13.546667 +G1 X128.820333 Y13.546667 +G1 X128.608667 Y13.800667 +G1 X128.354667 Y13.927667 +G1 X128.100667 Y13.927667 +G0 Z#100 +(polygon end, distance 24.75) +(polygon 304) +G0 X61.383333 Y13.800667 (start point) +G1 Z#101 F#102 +F#103 +G1 X61.171667 Y13.716000 +G1 X60.917667 Y13.589000 +G1 X60.621333 Y13.250333 +G1 X60.494333 Y12.996333 +G1 X60.452000 Y12.530667 +G1 X60.579000 Y12.192000 +G1 X60.579000 Y11.133667 +G1 X54.737000 Y11.133667 +G1 X54.271333 Y11.345333 +G1 X53.636333 Y11.345333 +G1 X53.255333 Y11.176000 +G1 X52.916667 Y10.837333 +G1 X52.747333 Y10.456333 +G1 X52.747333 Y9.821333 +G1 X52.916667 Y9.440333 +G1 X53.255333 Y9.101667 +G1 X53.636333 Y8.932333 +G1 X54.271333 Y8.932333 +G1 X54.737000 Y9.144000 +G1 X84.920667 Y9.144000 +G1 X85.386333 Y8.932333 +G1 X86.021333 Y8.932333 +G1 X86.402333 Y9.101667 +G1 X86.741000 Y9.440333 +G1 X86.910333 Y9.821333 +G1 X86.910333 Y10.456333 +G1 X86.741000 Y10.837333 +G1 X86.402333 Y11.176000 +G1 X86.021333 Y11.345333 +G1 X85.386333 Y11.345333 +G1 X84.920667 Y11.133667 +G1 X62.568667 Y11.133667 +G1 X62.568667 Y12.192000 +G1 X62.695667 Y12.530667 +G1 X62.653333 Y12.996333 +G1 X62.526333 Y13.250333 +G1 X62.230000 Y13.589000 +G1 X61.891333 Y13.758333 +G1 X61.383333 Y13.800667 +G0 Z#100 +(polygon end, distance 76.13) +(polygon 305) +G0 X63.923333 Y13.800667 (start point) +G1 Z#101 F#102 +F#103 +G1 X63.711667 Y13.716000 +G1 X63.457667 Y13.589000 +G1 X63.161333 Y13.250333 +G1 X63.034333 Y12.996333 +G1 X63.034333 Y12.361333 +G1 X63.161333 Y12.107333 +G1 X63.457667 Y11.768667 +G1 X63.796333 Y11.599333 +G1 X64.431333 Y11.599333 +G1 X64.770000 Y11.768667 +G1 X65.066333 Y12.107333 +G1 X65.193333 Y12.361333 +G1 X65.193333 Y12.996333 +G1 X65.066333 Y13.250333 +G1 X64.770000 Y13.589000 +G1 X64.431333 Y13.758333 +G1 X63.923333 Y13.800667 +G0 Z#100 +(polygon end, distance 7.00) +(polygon 306) +G0 X125.560667 Y12.657667 (start point) +G1 Z#101 F#102 +F#103 +G1 X125.306667 Y12.446000 +G1 X125.095000 Y12.192000 +G1 X125.095000 Y11.895667 +G1 X125.306667 Y11.641667 +G1 X125.560667 Y11.430000 +G1 X125.814667 Y11.430000 +G1 X126.068667 Y11.557000 +G1 X126.280333 Y11.811000 +G1 X139.107333 Y11.811000 +G1 X139.319000 Y11.557000 +G1 X139.573000 Y11.430000 +G1 X139.827000 Y11.430000 +G1 X140.081000 Y11.641667 +G1 X140.292667 Y11.895667 +G1 X140.292667 Y12.192000 +G1 X140.081000 Y12.446000 +G1 X139.827000 Y12.657667 +G1 X139.573000 Y12.657667 +G1 X139.319000 Y12.530667 +G1 X139.107333 Y12.276667 +G1 X126.280333 Y12.276667 +G1 X126.068667 Y12.530667 +G1 X125.814667 Y12.657667 +G1 X125.560667 Y12.657667 +G0 Z#100 +(polygon end, distance 32.37) +(polygon 307) +G0 X157.183667 Y12.657667 (start point) +G1 Z#101 F#102 +F#103 +G1 X156.887333 Y12.361333 +G1 X156.887333 Y12.192000 +G1 X156.718000 Y12.276667 +G1 X156.379333 Y12.276667 +G1 X156.083000 Y11.980333 +G1 X156.083000 Y11.599333 +G1 X156.379333 Y11.303000 +G1 X156.760333 Y11.303000 +G1 X156.887333 Y11.430000 +G1 X157.099000 Y11.303000 +G1 X157.649333 Y11.345333 +G1 X157.691667 Y11.133667 +G1 X157.861000 Y11.049000 +G1 X158.030333 Y11.091333 +G1 X158.115000 Y11.303000 +G1 X158.496000 Y11.303000 +G1 X158.792333 Y11.345333 +G1 X158.792333 Y10.964333 +G1 X158.961667 Y10.795000 +G1 X159.088667 Y10.795000 +G1 X159.258000 Y10.964333 +G1 X159.258000 Y11.303000 +G1 X159.469667 Y11.303000 +G1 X159.681333 Y11.472333 +G1 X159.893000 Y11.303000 +G1 X160.231667 Y11.303000 +G1 X160.401000 Y11.387667 +G1 X160.401000 Y11.091333 +G1 X160.697333 Y10.795000 +G1 X161.332333 Y10.795000 +G1 X161.501667 Y10.964333 +G1 X161.501667 Y11.091333 +G1 X161.374667 Y11.218333 +G1 X161.374667 Y12.107333 +G1 X161.205333 Y12.276667 +G1 X161.078333 Y12.276667 +G1 X160.909000 Y12.107333 +G1 X160.655000 Y12.276667 +G1 X160.401000 Y12.149667 +G1 X160.274000 Y12.276667 +G1 X159.893000 Y12.276667 +G1 X159.681333 Y12.107333 +G1 X159.469667 Y12.276667 +G1 X158.961667 Y12.276667 +G1 X158.792333 Y12.107333 +G1 X158.623000 Y12.276667 +G1 X158.496000 Y12.276667 +G1 X158.326667 Y12.107333 +G1 X158.326667 Y11.768667 +G1 X158.115000 Y11.768667 +G1 X158.115000 Y12.107333 +G1 X157.945667 Y12.276667 +G1 X157.861000 Y12.361333 +G1 X157.564667 Y12.657667 +G1 X157.183667 Y12.657667 +G0 Z#100 +(polygon end, distance 16.28) +(polygon 308) +G0 X145.118667 Y12.276667 (start point) +G1 Z#101 F#102 +F#103 +G1 X144.949333 Y12.107333 +G1 X144.949333 Y11.599333 +G1 X145.245667 Y11.303000 +G1 X145.796000 Y11.345333 +G1 X145.880667 Y11.472333 +G1 X146.050000 Y11.303000 +G1 X146.558000 Y11.303000 +G1 X146.727333 Y11.472333 +G1 X146.896667 Y11.303000 +G1 X147.489333 Y11.303000 +G1 X147.574000 Y11.091333 +G1 X147.743333 Y11.049000 +G1 X147.912667 Y11.133667 +G1 X147.955000 Y11.303000 +G1 X148.082000 Y11.303000 +G1 X148.251333 Y11.472333 +G1 X148.251333 Y11.726333 +G1 X148.336000 Y11.430000 +G1 X148.463000 Y11.303000 +G1 X148.590000 Y11.303000 +G1 X148.759333 Y11.430000 +G1 X148.886333 Y11.303000 +G1 X149.267333 Y11.303000 +G1 X149.394333 Y11.430000 +G1 X149.606000 Y11.303000 +G1 X150.241000 Y11.345333 +G1 X150.368000 Y11.472333 +G1 X150.368000 Y11.599333 +G1 X150.241000 Y11.726333 +G1 X150.241000 Y12.107333 +G1 X150.071667 Y12.276667 +G1 X149.944667 Y12.276667 +G1 X149.775333 Y12.107333 +G1 X149.775333 Y11.768667 +G1 X149.563667 Y11.768667 +G1 X149.563667 Y11.980333 +G1 X149.267333 Y12.276667 +G1 X148.759333 Y12.276667 +G1 X148.547667 Y12.065000 +G1 X148.336000 Y12.276667 +G1 X148.209000 Y12.276667 +G1 X147.997333 Y12.065000 +G1 X147.785667 Y12.276667 +G1 X146.896667 Y12.276667 +G1 X146.727333 Y12.107333 +G1 X146.558000 Y12.276667 +G1 X145.880667 Y12.234333 +G1 X145.796000 Y12.107333 +G1 X145.626667 Y12.276667 +G1 X145.457333 Y12.234333 +G1 X145.288000 Y12.234333 +G1 X145.118667 Y12.276667 +G0 Z#100 +(polygon end, distance 14.97) +(polygon 309) +G0 X145.796000 Y11.895667 (start point) +G1 Z#101 F#102 +F#103 +G1 X145.796000 Y11.726333 +G1 X145.880667 Y11.684000 +G1 X145.880667 Y11.853333 +G1 X145.796000 Y11.895667 +G0 Z#100 +(polygon end, distance 0.53) +(polygon 310) +G0 X150.622000 Y12.276667 (start point) +G1 Z#101 F#102 +F#103 +G1 X150.452667 Y12.107333 +G1 X150.452667 Y11.260667 +G1 X150.368000 Y11.260667 +G1 X150.198667 Y11.091333 +G1 X150.198667 Y10.964333 +G1 X150.368000 Y10.795000 +G1 X151.003000 Y10.795000 +G1 X151.172333 Y10.964333 +G1 X151.172333 Y11.091333 +G1 X151.003000 Y11.260667 +G1 X150.918333 Y11.260667 +G1 X150.918333 Y12.107333 +G1 X150.749000 Y12.276667 +G1 X150.622000 Y12.276667 +G0 Z#100 +(polygon end, distance 4.32) +(polygon 311) +G0 X151.595667 Y12.276667 (start point) +G1 Z#101 F#102 +F#103 +G1 X151.426333 Y12.107333 +G1 X151.426333 Y11.980333 +G1 X151.553333 Y11.853333 +G1 X151.553333 Y10.964333 +G1 X151.722667 Y10.795000 +G1 X151.849667 Y10.795000 +G1 X152.019000 Y10.964333 +G1 X152.019000 Y11.387667 +G1 X152.188333 Y11.303000 +G1 X152.611667 Y11.345333 +G1 X152.611667 Y11.218333 +G1 X152.781000 Y11.049000 +G1 X152.908000 Y11.049000 +G1 X153.077333 Y11.218333 +G1 X153.077333 Y11.430000 +G1 X153.289000 Y11.303000 +G1 X153.797000 Y11.345333 +G1 X153.881667 Y11.472333 +G1 X154.051000 Y11.303000 +G1 X154.516667 Y11.303000 +G1 X154.686000 Y11.387667 +G1 X154.686000 Y11.091333 +G1 X154.982333 Y10.795000 +G1 X155.617333 Y10.795000 +G1 X155.786667 Y10.964333 +G1 X155.786667 Y11.091333 +G1 X155.659667 Y11.218333 +G1 X155.659667 Y11.853333 +G1 X155.786667 Y11.980333 +G1 X155.786667 Y12.107333 +G1 X155.617333 Y12.276667 +G1 X154.982333 Y12.276667 +G1 X154.770667 Y12.107333 +G1 X154.516667 Y12.276667 +G1 X153.881667 Y12.234333 +G1 X153.797000 Y12.107333 +G1 X153.627667 Y12.276667 +G1 X153.458333 Y12.234333 +G1 X153.289000 Y12.234333 +G1 X153.077333 Y12.234333 +G1 X152.950333 Y12.234333 +G1 X152.738667 Y12.234333 +G1 X152.569333 Y12.234333 +G1 X152.061333 Y12.276667 +G1 X151.849667 Y12.149667 +G1 X151.722667 Y12.276667 +G1 X151.595667 Y12.276667 +G0 Z#100 +(polygon end, distance 13.27) +(polygon 312) +G0 X153.797000 Y11.895667 (start point) +G1 Z#101 F#102 +F#103 +G1 X153.797000 Y11.726333 +G1 X153.881667 Y11.684000 +G1 X153.881667 Y11.853333 +G1 X153.797000 Y11.895667 +G0 Z#100 +(polygon end, distance 0.53) +(polygon 313) +G0 X155.151667 Y11.811000 (start point) +G1 Z#101 F#102 +F#103 +G1 X155.151667 Y11.260667 +G1 X155.194000 Y11.557000 +G1 X155.151667 Y11.811000 +G0 Z#100 +(polygon end, distance 1.11) +(polygon 314) +G0 X123.020667 Y11.387667 (start point) +G1 Z#101 F#102 +F#103 +G1 X122.766667 Y11.176000 +G1 X122.555000 Y10.922000 +G1 X122.555000 Y10.625667 +G1 X122.766667 Y10.371667 +G1 X123.020667 Y10.160000 +G1 X123.274667 Y10.160000 +G1 X123.528667 Y10.287000 +G1 X123.740333 Y10.541000 +G1 X140.377333 Y10.541000 +G1 X140.589000 Y10.287000 +G1 X140.843000 Y10.160000 +G1 X141.097000 Y10.160000 +G1 X141.351000 Y10.371667 +G1 X141.562667 Y10.625667 +G1 X141.562667 Y10.922000 +G1 X141.351000 Y11.176000 +G1 X141.097000 Y11.387667 +G1 X140.843000 Y11.387667 +G1 X140.589000 Y11.260667 +G1 X140.377333 Y11.006667 +G1 X123.740333 Y11.006667 +G1 X123.528667 Y11.260667 +G1 X123.274667 Y11.387667 +G1 X123.020667 Y11.387667 +G0 Z#100 +(polygon end, distance 39.99) +(polygon 315) +G0 X149.352000 Y10.752667 (start point) +G1 Z#101 F#102 +F#103 +G1 X149.055667 Y10.456333 +G1 X149.055667 Y10.287000 +G1 X148.886333 Y10.371667 +G1 X148.420667 Y10.371667 +G1 X148.251333 Y10.244667 +G1 X148.124333 Y10.371667 +G1 X147.616333 Y10.371667 +G1 X147.320000 Y10.075333 +G1 X147.362333 Y9.652000 +G1 X147.616333 Y9.398000 +G1 X148.124333 Y9.398000 +G1 X148.336000 Y9.567333 +G1 X148.547667 Y9.398000 +G1 X148.928667 Y9.398000 +G1 X149.055667 Y9.525000 +G1 X149.225000 Y9.398000 +G1 X149.733000 Y9.398000 +G1 X150.029333 Y9.694333 +G1 X150.029333 Y9.567333 +G1 X150.198667 Y9.398000 +G1 X150.706667 Y9.398000 +G1 X151.003000 Y9.694333 +G1 X151.003000 Y9.906000 +G1 X151.341667 Y9.906000 +G1 X151.341667 Y9.059333 +G1 X151.511000 Y8.890000 +G1 X151.638000 Y8.890000 +G1 X151.807333 Y9.059333 +G1 X151.807333 Y10.202333 +G1 X151.638000 Y10.371667 +G1 X151.003000 Y10.371667 +G1 X150.876000 Y10.244667 +G1 X150.664333 Y10.371667 +G1 X150.029333 Y10.329333 +G1 X150.029333 Y10.456333 +G1 X149.733000 Y10.752667 +G1 X149.352000 Y10.752667 +G0 Z#100 +(polygon end, distance 13.40) +(polygon 316) +G0 X152.654000 Y10.371667 (start point) +G1 Z#101 F#102 +F#103 +G1 X152.484667 Y10.202333 +G1 X152.484667 Y9.863667 +G1 X152.273000 Y9.863667 +G1 X152.103667 Y9.694333 +G1 X152.103667 Y9.567333 +G1 X152.273000 Y9.398000 +G1 X152.950333 Y9.440333 +G1 X153.035000 Y9.525000 +G1 X153.246667 Y9.398000 +G1 X153.712333 Y9.440333 +G1 X153.797000 Y9.271000 +G1 X153.797000 Y9.059333 +G1 X153.966333 Y8.890000 +G1 X154.093333 Y8.890000 +G1 X154.262667 Y9.059333 +G1 X154.262667 Y9.313333 +G1 X154.347333 Y9.017000 +G1 X154.474333 Y8.890000 +G1 X154.601333 Y8.890000 +G1 X154.770667 Y9.059333 +G1 X154.770667 Y9.271000 +G1 X154.897667 Y9.482667 +G1 X155.067000 Y9.398000 +G1 X155.405667 Y9.398000 +G1 X155.659667 Y9.609667 +G1 X155.786667 Y9.440333 +G1 X156.040667 Y9.355667 +G1 X155.702000 Y9.355667 +G1 X155.532667 Y9.186333 +G1 X155.532667 Y9.059333 +G1 X155.702000 Y8.890000 +G1 X156.337000 Y8.890000 +G1 X156.506333 Y9.059333 +G1 X156.506333 Y10.202333 +G1 X156.337000 Y10.371667 +G1 X156.210000 Y10.371667 +G1 X156.040667 Y10.202333 +G1 X156.040667 Y9.863667 +G1 X155.871333 Y9.863667 +G1 X155.702000 Y9.779000 +G1 X155.702000 Y10.075333 +G1 X155.405667 Y10.371667 +G1 X154.897667 Y10.371667 +G1 X154.686000 Y10.160000 +G1 X154.474333 Y10.371667 +G1 X154.347333 Y10.371667 +G1 X154.178000 Y10.202333 +G1 X153.924000 Y10.371667 +G1 X153.712333 Y10.287000 +G1 X153.543000 Y10.371667 +G1 X153.077333 Y10.371667 +G1 X152.908000 Y10.202333 +G1 X152.781000 Y10.371667 +G1 X152.654000 Y10.371667 +G0 Z#100 +(polygon end, distance 15.04) +(polygon 317) +G0 X154.262667 Y9.948333 (start point) +G1 Z#101 F#102 +F#103 +G1 X154.262667 Y9.694333 +G1 X154.305000 Y9.821333 +G1 X154.262667 Y9.948333 +G0 Z#100 +(polygon end, distance 0.52) +(polygon 318) +G0 X157.353000 Y10.371667 (start point) +G1 Z#101 F#102 +F#103 +G1 X157.183667 Y10.202333 +G1 X157.183667 Y9.863667 +G1 X156.972000 Y9.863667 +G1 X156.802667 Y9.694333 +G1 X156.802667 Y9.567333 +G1 X156.972000 Y9.398000 +G1 X157.649333 Y9.440333 +G1 X157.776333 Y9.567333 +G1 X157.945667 Y9.398000 +G1 X158.453667 Y9.440333 +G1 X158.538333 Y9.271000 +G1 X158.538333 Y9.059333 +G1 X158.707667 Y8.890000 +G1 X158.834667 Y8.890000 +G1 X159.004000 Y9.059333 +G1 X159.004000 Y9.313333 +G1 X159.088667 Y9.017000 +G1 X159.215667 Y8.890000 +G1 X159.342667 Y8.890000 +G1 X159.512000 Y9.059333 +G1 X159.512000 Y9.482667 +G1 X159.681333 Y9.398000 +G1 X160.104667 Y9.398000 +G1 X160.274000 Y9.482667 +G1 X160.274000 Y9.059333 +G1 X160.443333 Y8.890000 +G1 X160.570333 Y8.890000 +G1 X160.739667 Y9.059333 +G1 X160.739667 Y9.567333 +G1 X161.036000 Y9.567333 +G1 X161.036000 Y9.059333 +G1 X161.205333 Y8.890000 +G1 X161.332333 Y8.890000 +G1 X161.501667 Y9.059333 +G1 X161.501667 Y10.202333 +G1 X161.332333 Y10.371667 +G1 X161.205333 Y10.371667 +G1 X160.866667 Y10.075333 +G1 X160.655000 Y10.329333 +G1 X160.485667 Y10.371667 +G1 X160.274000 Y10.244667 +G1 X160.147000 Y10.371667 +G1 X159.469667 Y10.329333 +G1 X159.342667 Y10.244667 +G1 X159.215667 Y10.371667 +G1 X159.088667 Y10.371667 +G1 X158.919333 Y10.202333 +G1 X158.665333 Y10.371667 +G1 X158.453667 Y10.287000 +G1 X158.284333 Y10.371667 +G1 X157.818667 Y10.371667 +G1 X157.649333 Y10.202333 +G1 X157.480000 Y10.371667 +G1 X157.353000 Y10.371667 +G0 Z#100 +(polygon end, distance 15.35) +(polygon 319) +G0 X157.649333 Y10.075333 (start point) +G1 Z#101 F#102 +F#103 +G1 X157.649333 Y9.948333 +G1 X157.691667 Y10.033000 +G1 X157.649333 Y10.075333 +G0 Z#100 +(polygon end, distance 0.28) +(polygon 320) +G0 X159.004000 Y9.948333 (start point) +G1 Z#101 F#102 +F#103 +G1 X159.004000 Y9.694333 +G1 X159.046333 Y9.821333 +G1 X159.004000 Y9.948333 +G0 Z#100 +(polygon end, distance 0.52) +(polygon 321) +G0 X11.811000 Y10.202333 (start point) +G1 Z#101 F#102 +F#103 +G1 X11.430000 Y10.075333 +G1 X11.049000 Y9.863667 +G1 X10.668000 Y9.440333 +G1 X10.456333 Y8.974667 +G1 X10.456333 Y7.831667 +G1 X10.710333 Y7.281333 +G1 X11.176000 Y6.858000 +G1 X11.641667 Y6.646333 +G1 X12.446000 Y6.646333 +G1 X12.996333 Y6.900333 +G1 X13.419667 Y7.366000 +G1 X13.631333 Y7.831667 +G1 X13.631333 Y8.974667 +G1 X13.419667 Y9.440333 +G1 X12.996333 Y9.906000 +G1 X12.446000 Y10.160000 +G1 X11.811000 Y10.202333 +G0 Z#100 +(polygon end, distance 10.89) +(polygon 322) +G0 X165.481000 Y10.202333 (start point) +G1 Z#101 F#102 +F#103 +G1 X165.100000 Y10.075333 +G1 X164.719000 Y9.863667 +G1 X164.338000 Y9.440333 +G1 X164.126333 Y8.974667 +G1 X164.126333 Y8.170333 +G1 X164.380333 Y7.620000 +G1 X164.846000 Y7.196667 +G1 X165.311667 Y6.985000 +G1 X166.116000 Y6.985000 +G1 X166.666333 Y7.239000 +G1 X167.089667 Y7.704667 +G1 X167.301333 Y8.170333 +G1 X167.301333 Y8.974667 +G1 X167.089667 Y9.440333 +G1 X166.666333 Y9.906000 +G1 X166.116000 Y10.160000 +G1 X165.481000 Y10.202333 +G0 Z#100 +(polygon end, distance 10.21) +(polygon 323) +G0 X158.834667 Y8.847667 (start point) +G1 Z#101 F#102 +F#103 +G1 X158.538333 Y8.551333 +G1 X158.538333 Y8.339667 +G1 X158.369000 Y8.466667 +G1 X157.988000 Y8.466667 +G1 X157.691667 Y8.170333 +G1 X157.691667 Y7.789333 +G1 X157.988000 Y7.493000 +G1 X158.369000 Y7.493000 +G1 X158.538333 Y7.662333 +G1 X158.707667 Y7.493000 +G1 X159.215667 Y7.493000 +G1 X159.427333 Y7.662333 +G1 X159.681333 Y7.493000 +G1 X160.104667 Y7.535333 +G1 X160.147000 Y7.323667 +G1 X160.316333 Y7.239000 +G1 X160.401000 Y7.281333 +G1 X160.697333 Y6.985000 +G1 X161.332333 Y6.985000 +G1 X161.501667 Y7.154333 +G1 X161.501667 Y7.281333 +G1 X161.374667 Y7.408333 +G1 X161.374667 Y8.043333 +G1 X161.501667 Y8.170333 +G1 X161.501667 Y8.297333 +G1 X161.332333 Y8.466667 +G1 X160.697333 Y8.466667 +G1 X160.570333 Y8.339667 +G1 X160.358667 Y8.466667 +G1 X160.147000 Y8.382000 +G1 X159.977667 Y8.466667 +G1 X159.512000 Y8.466667 +G1 X159.469667 Y8.636000 +G1 X159.215667 Y8.847667 +G1 X158.834667 Y8.847667 +G0 Z#100 +(polygon end, distance 10.92) +(polygon 324) +G0 X160.866667 Y8.001000 (start point) +G1 Z#101 F#102 +F#103 +G1 X160.866667 Y7.450667 +G1 X160.909000 Y7.747000 +G1 X160.866667 Y8.001000 +G0 Z#100 +(polygon end, distance 1.11) +(polygon 325) +G0 X39.835667 Y8.466667 (start point) +G1 Z#101 F#102 +F#103 +G1 X39.581667 Y8.382000 +G1 X39.200667 Y8.001000 +G1 X39.116000 Y7.662333 +G1 X39.158333 Y7.281333 +G1 X39.412333 Y6.942667 +G1 X39.708667 Y6.773333 +G1 X40.259000 Y6.773333 +G1 X40.597667 Y6.985000 +G1 X40.809333 Y7.323667 +G1 X40.809333 Y7.874000 +G1 X40.597667 Y8.212667 +G1 X40.259000 Y8.424333 +G1 X39.835667 Y8.466667 +G0 Z#100 +(polygon end, distance 5.43) +(polygon 326) +G0 X146.177000 Y8.466667 (start point) +G1 Z#101 F#102 +F#103 +G1 X146.007667 Y8.297333 +G1 X146.007667 Y7.408333 +G1 X146.177000 Y7.239000 +G1 X146.304000 Y7.239000 +G1 X146.473333 Y7.408333 +G1 X146.473333 Y7.620000 +G1 X146.685000 Y7.493000 +G1 X147.023667 Y7.535333 +G1 X147.108333 Y7.408333 +G1 X147.277667 Y7.239000 +G1 X147.489333 Y7.281333 +G1 X147.489333 Y7.154333 +G1 X147.658667 Y6.985000 +G1 X147.785667 Y6.985000 +G1 X147.955000 Y7.154333 +G1 X147.955000 Y7.366000 +G1 X148.082000 Y7.577667 +G1 X148.251333 Y7.493000 +G1 X148.759333 Y7.535333 +G1 X148.844000 Y7.662333 +G1 X149.013333 Y7.493000 +G1 X149.521333 Y7.493000 +G1 X149.733000 Y7.662333 +G1 X149.817667 Y7.577667 +G1 X149.648333 Y7.408333 +G1 X149.648333 Y7.281333 +G1 X149.944667 Y6.985000 +G1 X150.452667 Y6.985000 +G1 X150.749000 Y7.281333 +G1 X150.749000 Y7.662333 +G1 X150.579667 Y7.874000 +G1 X150.749000 Y8.043333 +G1 X150.749000 Y8.170333 +G1 X150.452667 Y8.466667 +G1 X149.944667 Y8.466667 +G1 X149.733000 Y8.297333 +G1 X149.479000 Y8.466667 +G1 X148.844000 Y8.424333 +G1 X148.759333 Y8.297333 +G1 X148.590000 Y8.466667 +G1 X148.420667 Y8.424333 +G1 X148.251333 Y8.424333 +G1 X148.082000 Y8.466667 +G1 X147.870333 Y8.255000 +G1 X147.658667 Y8.466667 +G1 X147.235333 Y8.424333 +G1 X147.066000 Y8.424333 +G1 X146.854333 Y8.424333 +G1 X146.685000 Y8.424333 +G1 X146.473333 Y8.424333 +G1 X146.346333 Y8.424333 +G1 X146.177000 Y8.466667 +G0 Z#100 +(polygon end, distance 14.19) +(polygon 327) +G0 X148.759333 Y8.085667 (start point) +G1 Z#101 F#102 +F#103 +G1 X148.759333 Y7.916333 +G1 X148.844000 Y7.874000 +G1 X148.844000 Y8.043333 +G1 X148.759333 Y8.085667 +G0 Z#100 +(polygon end, distance 0.53) +(polygon 328) +G0 X150.114000 Y8.001000 (start point) +G1 Z#101 F#102 +F#103 +G1 X150.241000 Y7.958667 +G1 X150.325667 Y8.001000 +G1 X150.114000 Y8.001000 +G0 Z#100 +(polygon end, distance 0.44) +(polygon 329) +G0 X150.071667 Y7.493000 (start point) +G1 Z#101 F#102 +F#103 +G1 X150.198667 Y7.450667 +G1 X150.283333 Y7.493000 +G1 X150.071667 Y7.493000 +G0 Z#100 +(polygon end, distance 0.44) +(polygon 330) +G0 X151.214667 Y8.466667 (start point) +G1 Z#101 F#102 +F#103 +G1 X151.045333 Y8.297333 +G1 X151.045333 Y7.789333 +G1 X151.341667 Y7.493000 +G1 X151.892000 Y7.535333 +G1 X152.019000 Y7.620000 +G1 X152.146000 Y7.493000 +G1 X152.527000 Y7.493000 +G1 X152.738667 Y7.662333 +G1 X152.738667 Y7.154333 +G1 X152.908000 Y6.985000 +G1 X153.035000 Y6.985000 +G1 X153.204333 Y7.154333 +G1 X153.204333 Y7.535333 +G1 X153.839333 Y7.493000 +G1 X154.051000 Y7.620000 +G1 X154.178000 Y7.493000 +G1 X154.559000 Y7.493000 +G1 X154.770667 Y7.662333 +G1 X154.982333 Y7.493000 +G1 X155.194000 Y7.493000 +G1 X155.194000 Y7.154333 +G1 X155.363333 Y6.985000 +G1 X155.490333 Y6.985000 +G1 X155.659667 Y7.154333 +G1 X155.659667 Y7.577667 +G1 X155.829000 Y7.493000 +G1 X156.294667 Y7.493000 +G1 X156.591000 Y7.789333 +G1 X156.591000 Y8.001000 +G1 X156.929667 Y8.001000 +G1 X156.929667 Y7.450667 +G1 X156.591000 Y7.450667 +G1 X156.421667 Y7.281333 +G1 X156.421667 Y7.154333 +G1 X156.591000 Y6.985000 +G1 X157.099000 Y6.985000 +G1 X157.395333 Y7.281333 +G1 X157.395333 Y8.170333 +G1 X157.099000 Y8.466667 +G1 X156.591000 Y8.466667 +G1 X156.464000 Y8.339667 +G1 X156.252333 Y8.466667 +G1 X154.982333 Y8.466667 +G1 X154.770667 Y8.297333 +G1 X154.559000 Y8.466667 +G1 X154.051000 Y8.466667 +G1 X153.881667 Y8.297333 +G1 X153.754667 Y8.466667 +G1 X153.627667 Y8.466667 +G1 X153.458333 Y8.297333 +G1 X153.458333 Y7.958667 +G1 X153.204333 Y7.916333 +G1 X153.204333 Y8.170333 +G1 X152.908000 Y8.466667 +G1 X152.738667 Y8.424333 +G1 X152.569333 Y8.424333 +G1 X152.146000 Y8.466667 +G1 X151.934333 Y8.255000 +G1 X151.722667 Y8.466667 +G1 X151.553333 Y8.424333 +G1 X151.384000 Y8.424333 +G1 X151.214667 Y8.466667 +G0 Z#100 +(polygon end, distance 20.35) +(polygon 331) +G0 X149.352000 Y6.561667 (start point) +G1 Z#101 F#102 +F#103 +G1 X148.674667 Y5.884333 +G1 X148.674667 Y5.376333 +G1 X148.971000 Y5.080000 +G1 X149.352000 Y5.080000 +G1 X149.563667 Y5.291667 +G1 X149.817667 Y5.080000 +G1 X150.198667 Y5.080000 +G1 X150.410333 Y5.249333 +G1 X150.622000 Y5.080000 +G1 X151.003000 Y5.080000 +G1 X151.214667 Y5.249333 +G1 X151.426333 Y5.080000 +G1 X151.934333 Y5.080000 +G1 X152.230667 Y5.376333 +G1 X152.230667 Y5.503333 +G1 X152.061333 Y5.672667 +G1 X151.934333 Y5.672667 +G1 X151.807333 Y5.545667 +G1 X151.595667 Y5.545667 +G1 X151.595667 Y5.588000 +G1 X152.230667 Y6.265333 +G1 X152.230667 Y6.392333 +G1 X152.061333 Y6.561667 +G1 X151.299333 Y6.561667 +G1 X151.130000 Y6.434667 +G1 X151.003000 Y6.561667 +G1 X150.622000 Y6.561667 +G1 X150.410333 Y6.392333 +G1 X150.198667 Y6.561667 +G1 X149.817667 Y6.561667 +G1 X149.648333 Y6.392333 +G1 X149.479000 Y6.561667 +G1 X149.352000 Y6.561667 +G0 Z#100 +(polygon end, distance 10.95) +(polygon 332) +G0 X149.479000 Y6.096000 (start point) +G1 Z#101 F#102 +F#103 +G1 X149.436667 Y6.011333 +G1 X149.521333 Y5.926667 +G1 X149.521333 Y6.096000 +G1 X149.479000 Y6.096000 +G0 Z#100 +(polygon end, distance 0.43) +(polygon 333) +G0 X151.299333 Y6.096000 (start point) +G1 Z#101 F#102 +F#103 +G1 X151.299333 Y5.969000 +G1 X151.426333 Y6.053667 +G1 X151.426333 Y6.096000 +G1 X151.299333 Y6.096000 +G0 Z#100 +(polygon end, distance 0.45) +(polygon 334) +G0 X152.823333 Y6.561667 (start point) +G1 Z#101 F#102 +F#103 +G1 X152.527000 Y6.265333 +G1 X152.527000 Y5.376333 +G1 X152.823333 Y5.080000 +G1 X152.950333 Y5.080000 +G1 X153.119667 Y5.249333 +G1 X153.119667 Y5.376333 +G1 X152.992667 Y5.503333 +G1 X152.992667 Y5.672667 +G1 X153.162000 Y5.588000 +G1 X153.627667 Y5.588000 +G1 X153.881667 Y5.799667 +G1 X153.881667 Y5.503333 +G1 X153.754667 Y5.376333 +G1 X153.754667 Y5.249333 +G1 X153.924000 Y5.080000 +G1 X154.051000 Y5.080000 +G1 X154.347333 Y5.376333 +G1 X154.347333 Y6.265333 +G1 X154.135667 Y6.519333 +G1 X153.966333 Y6.561667 +G1 X153.754667 Y6.434667 +G1 X153.627667 Y6.561667 +G1 X152.823333 Y6.561667 +G0 Z#100 +(polygon end, distance 7.57) +(polygon 335) +G0 X152.992667 Y6.138333 (start point) +G1 Z#101 F#102 +F#103 +G1 X152.992667 Y5.969000 +G1 X153.162000 Y6.053667 +G1 X153.458333 Y6.053667 +G1 X153.416000 Y6.096000 +G1 X152.992667 Y6.138333 +G0 Z#100 +(polygon end, distance 1.14) +(polygon 336) +G0 X154.940000 Y6.561667 (start point) +G1 Z#101 F#102 +F#103 +G1 X154.643667 Y6.265333 +G1 X154.643667 Y5.376333 +G1 X154.940000 Y5.080000 +G1 X155.321000 Y5.080000 +G1 X155.617333 Y5.376333 +G1 X155.617333 Y6.138333 +G1 X156.083000 Y6.096000 +G1 X156.210000 Y6.096000 +G1 X155.913667 Y5.757333 +G1 X155.913667 Y5.376333 +G1 X156.210000 Y5.080000 +G1 X156.718000 Y5.080000 +G1 X157.014333 Y5.376333 +G1 X157.014333 Y5.503333 +G1 X156.845000 Y5.672667 +G1 X156.718000 Y5.672667 +G1 X156.591000 Y5.545667 +G1 X156.379333 Y5.545667 +G1 X156.379333 Y5.630333 +G1 X156.929667 Y6.138333 +G1 X157.437667 Y6.096000 +G1 X157.564667 Y6.096000 +G1 X157.268333 Y5.757333 +G1 X157.268333 Y5.376333 +G1 X157.564667 Y5.080000 +G1 X158.072667 Y5.080000 +G1 X158.369000 Y5.376333 +G1 X158.369000 Y5.503333 +G1 X158.199667 Y5.672667 +G1 X158.072667 Y5.672667 +G1 X157.945667 Y5.545667 +G1 X157.734000 Y5.545667 +G1 X157.734000 Y5.588000 +G1 X158.369000 Y6.265333 +G1 X158.369000 Y6.392333 +G1 X158.199667 Y6.561667 +G1 X155.659667 Y6.561667 +G1 X155.490333 Y6.392333 +G1 X155.321000 Y6.561667 +G1 X154.940000 Y6.561667 +G0 Z#100 +(polygon end, distance 16.22) +(polygon 337) +G0 X159.215667 Y6.561667 (start point) +G1 Z#101 F#102 +F#103 +G1 X159.046333 Y6.392333 +G1 X159.046333 Y6.265333 +G1 X159.215667 Y6.096000 +G1 X159.554333 Y6.096000 +G1 X159.554333 Y5.545667 +G1 X159.215667 Y5.545667 +G1 X159.046333 Y5.376333 +G1 X159.046333 Y5.249333 +G1 X159.215667 Y5.080000 +G1 X159.723667 Y5.080000 +G1 X159.850667 Y5.207000 +G1 X160.020000 Y5.080000 +G1 X160.401000 Y5.080000 +G1 X160.570333 Y5.207000 +G1 X160.697333 Y5.080000 +G1 X161.205333 Y5.080000 +G1 X161.501667 Y5.376333 +G1 X161.501667 Y6.392333 +G1 X161.332333 Y6.561667 +G1 X161.205333 Y6.561667 +G1 X161.036000 Y6.392333 +G1 X161.036000 Y6.053667 +G1 X160.866667 Y6.053667 +G1 X160.866667 Y6.392333 +G1 X160.739667 Y6.519333 +G1 X160.062333 Y6.561667 +G1 X159.850667 Y6.434667 +G1 X159.723667 Y6.561667 +G1 X159.215667 Y6.561667 +G0 Z#100 +(polygon end, distance 9.30) +(polygon 338) +G0 X160.866667 Y5.588000 (start point) +G1 Z#101 F#102 +F#103 +G1 X160.951333 Y5.545667 +G1 X161.036000 Y5.588000 +G1 X160.866667 Y5.588000 +G0 Z#100 +(polygon end, distance 0.36) +(polygon 339) +G0 X158.369000 Y6.053667 (start point) +G1 Z#101 F#102 +F#103 +G1 X158.199667 Y5.884333 +G1 X158.199667 Y5.757333 +G1 X158.369000 Y5.588000 +G1 X159.004000 Y5.588000 +G1 X159.173333 Y5.757333 +G1 X159.173333 Y5.884333 +G1 X159.004000 Y6.053667 +G1 X158.369000 Y6.053667 +G0 Z#100 +(polygon end, distance 2.48) +(predrilling) +F#102 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X0.000000 Y0.000000 Z#101 R#100 +G81 X24.130000 Y7.620000 Z#101 R#100 +G81 X24.130000 Y10.160000 Z#101 R#100 +G81 X24.130000 Y15.240000 Z#101 R#100 +G81 X24.130000 Y17.780000 Z#101 R#100 +G81 X26.670000 Y15.240000 Z#101 R#100 +G81 X29.845000 Y12.700000 Z#101 R#100 +G81 X34.290000 Y12.700000 Z#101 R#100 +G81 X34.290000 Y7.620000 Z#101 R#100 +G81 X29.845000 Y7.620000 Z#101 R#100 +G81 X40.005000 Y7.620000 Z#101 R#100 +G81 X40.005000 Y12.700000 Z#101 R#100 +G81 X41.910000 Y15.875000 Z#101 R#100 +G81 X40.005000 Y17.780000 Z#101 R#100 +G81 X53.975000 Y10.160000 Z#101 R#100 +G81 X70.485000 Y15.240000 Z#101 R#100 +G81 X78.740000 Y21.590000 Z#101 R#100 +G81 X80.645000 Y19.685000 Z#101 R#100 +G81 X82.550000 Y17.780000 Z#101 R#100 +G81 X85.725000 Y10.160000 Z#101 R#100 +G81 X116.205000 Y24.765000 Z#101 R#100 +G81 X116.205000 Y27.940000 Z#101 R#100 +G81 X118.745000 Y27.940000 Z#101 R#100 +G81 X118.745000 Y31.750000 Z#101 R#100 +G81 X116.205000 Y31.750000 Z#101 R#100 +G81 X116.205000 Y34.290000 Z#101 R#100 +G81 X118.745000 Y34.290000 Z#101 R#100 +G81 X121.285000 Y39.370000 Z#101 R#100 +G81 X125.095000 Y39.370000 Z#101 R#100 +G81 X127.635000 Y39.370000 Z#101 R#100 +G81 X132.080000 Y34.290000 Z#101 R#100 +G81 X135.255000 Y31.750000 Z#101 R#100 +G81 X135.255000 Y27.940000 Z#101 R#100 +G81 X132.080000 Y24.765000 Z#101 R#100 +G81 X125.095000 Y27.940000 Z#101 R#100 +G81 X123.190000 Y29.845000 Z#101 R#100 +G81 X123.190000 Y24.765000 Z#101 R#100 +G81 X119.380000 Y20.320000 Z#101 R#100 +G81 X135.255000 Y16.510000 Z#101 R#100 +G81 X130.810000 Y7.620000 Z#101 R#100 +G81 X135.255000 Y39.370000 Z#101 R#100 +G81 X135.255000 Y49.530000 Z#101 R#100 +G81 X135.255000 Y59.690000 Z#101 R#100 +G81 X135.255000 Y62.230000 Z#101 R#100 +G81 X132.715000 Y59.690000 Z#101 R#100 +G81 X139.700000 Y62.230000 Z#101 R#100 +G81 X141.605000 Y57.785000 Z#101 R#100 +G81 X139.700000 Y72.390000 Z#101 R#100 +G81 X132.715000 Y76.835000 Z#101 R#100 +G81 X131.445000 Y85.090000 Z#101 R#100 +G81 X128.905000 Y85.090000 Z#101 R#100 +G81 X139.700000 Y85.090000 Z#101 R#100 +G81 X141.605000 Y88.265000 Z#101 R#100 +G81 X160.020000 Y78.105000 Z#101 R#100 +G81 X160.020000 Y75.336400 Z#101 R#100 +G81 X160.020000 Y72.567800 Z#101 R#100 +G81 X160.020000 Y69.799200 Z#101 R#100 +G81 X160.020000 Y67.030600 Z#101 R#100 +G81 X162.560000 Y68.427600 Z#101 R#100 +G81 X162.560000 Y71.196200 Z#101 R#100 +G81 X162.560000 Y73.964800 Z#101 R#100 +G81 X162.560000 Y76.733400 Z#101 R#100 +G81 X125.095000 Y59.690000 Z#101 R#100 +G81 X118.745000 Y59.690000 Z#101 R#100 +G81 X116.205000 Y59.690000 Z#101 R#100 +G81 X113.665000 Y59.690000 Z#101 R#100 +G81 X118.745000 Y62.230000 Z#101 R#100 +G81 X118.745000 Y66.040000 Z#101 R#100 +G81 X116.205000 Y66.040000 Z#101 R#100 +G81 X111.760000 Y66.040000 Z#101 R#100 +G81 X109.855000 Y66.040000 Z#101 R#100 +G81 X107.315000 Y66.040000 Z#101 R#100 +G81 X101.600000 Y66.040000 Z#101 R#100 +G81 X99.060000 Y66.040000 Z#101 R#100 +G81 X93.345000 Y66.040000 Z#101 R#100 +G81 X88.900000 Y67.945000 Z#101 R#100 +G81 X83.185000 Y66.040000 Z#101 R#100 +G81 X81.915000 Y67.945000 Z#101 R#100 +G81 X78.740000 Y66.040000 Z#101 R#100 +G81 X78.740000 Y62.230000 Z#101 R#100 +G81 X82.550000 Y62.230000 Z#101 R#100 +G81 X72.390000 Y69.850000 Z#101 R#100 +G81 X67.945000 Y69.850000 Z#101 R#100 +G81 X68.580000 Y66.040000 Z#101 R#100 +G81 X63.500000 Y66.040000 Z#101 R#100 +G81 X60.325000 Y62.230000 Z#101 R#100 +G81 X53.340000 Y66.040000 Z#101 R#100 +G81 X48.895000 Y66.040000 Z#101 R#100 +G81 X48.895000 Y62.230000 Z#101 R#100 +G81 X38.735000 Y66.040000 Z#101 R#100 +G81 X34.290000 Y66.040000 Z#101 R#100 +G81 X27.305000 Y64.135000 Z#101 R#100 +G81 X24.130000 Y66.040000 Z#101 R#100 +G81 X24.130000 Y76.835000 Z#101 R#100 +G81 X37.465000 Y83.820000 Z#101 R#100 +G81 X41.275000 Y83.820000 Z#101 R#100 +G81 X45.085000 Y83.820000 Z#101 R#100 +G81 X48.260000 Y86.360000 Z#101 R#100 +G81 X45.085000 Y93.980000 Z#101 R#100 +G81 X41.275000 Y93.980000 Z#101 R#100 +G81 X37.465000 Y93.980000 Z#101 R#100 +G81 X60.325000 Y81.915000 Z#101 R#100 +G81 X63.500000 Y83.820000 Z#101 R#100 +G81 X67.945000 Y83.820000 Z#101 R#100 +G81 X67.945000 Y80.010000 Z#101 R#100 +G81 X72.390000 Y80.010000 Z#101 R#100 +G81 X72.390000 Y83.820000 Z#101 R#100 +G81 X76.200000 Y86.360000 Z#101 R#100 +G81 X72.390000 Y93.980000 Z#101 R#100 +G81 X67.945000 Y93.980000 Z#101 R#100 +G81 X63.500000 Y93.980000 Z#101 R#100 +G81 X88.900000 Y96.520000 Z#101 R#100 +G81 X92.710000 Y93.980000 Z#101 R#100 +G81 X97.155000 Y96.520000 Z#101 R#100 +G81 X100.330000 Y92.710000 Z#101 R#100 +G81 X100.330000 Y90.170000 Z#101 R#100 +G81 X101.600000 Y85.090000 Z#101 R#100 +G81 X99.060000 Y85.090000 Z#101 R#100 +G81 X103.505000 Y81.915000 Z#101 R#100 +G81 X106.680000 Y85.090000 Z#101 R#100 +G81 X109.220000 Y85.090000 Z#101 R#100 +G81 X109.220000 Y81.915000 Z#101 R#100 +G81 X113.665000 Y76.835000 Z#101 R#100 +G81 X111.760000 Y73.025000 Z#101 R#100 +G81 X105.410000 Y88.900000 Z#101 R#100 +G81 X106.680000 Y91.440000 Z#101 R#100 +G81 X109.220000 Y91.440000 Z#101 R#100 +G81 X111.760000 Y96.520000 Z#101 R#100 +G81 X92.710000 Y83.820000 Z#101 R#100 +G81 X70.485000 Y57.785000 Z#101 R#100 +G81 X53.975000 Y36.195000 Z#101 R#100 +G81 X111.125000 Y39.370000 Z#101 R#100 +G81 X111.125000 Y49.530000 Z#101 R#100 +G81 X113.665000 Y52.705000 Z#101 R#100 +G81 X121.285000 Y49.530000 Z#101 R#100 +G81 X125.095000 Y49.530000 Z#101 R#100 +G81 X125.095000 Y47.625000 Z#101 R#100 +(443 predrills) +(milling distance 8817.39mm = 347.14in) +M5 M9 M2 diff --git a/doc/aic-bottom.gcode.png b/doc/aic-bottom.gcode.png new file mode 100644 index 0000000..503e4bb Binary files /dev/null and b/doc/aic-bottom.gcode.png differ diff --git a/doc/aic-drillmill.gcode b/doc/aic-drillmill.gcode new file mode 100644 index 0000000..e274bf8 --- /dev/null +++ b/doc/aic-drillmill.gcode @@ -0,0 +1,392 @@ +(Created by G-code exporter) +(Wed Jul 15 16:09:51 2015) +(Units: mm) +(Board size: 180.34 x 104.14 mm) +(Drillmill file) +(Tool diameter: 1.000000 mm) +#100=2.000000 (safe Z) +#105=-1.000000 (mill depth) +#106=25.000000 (mill plunge feedrate) +#107=50.000000 (mill feedrate) +(---------------------------------) +G17 G21 G90 G64 P0.003 M3 S3000 M7 +G0 X12.065000 Y8.255000 +G1 Z#105 F#106 +G0 Z#100 +G0 X12.065000 Y8.585200 +G1 Z#105 F#106 +G0 Z#100 +G0 X24.130000 Y31.115000 +G1 Z#105 F#106 +G0 Z#100 +G0 X29.845000 Y27.940000 +G1 Z#105 F#106 +G0 Z#100 +G0 X40.005000 Y27.940000 +G1 Z#105 F#106 +G0 Z#100 +G0 X45.085000 Y40.005000 +G1 Z#105 F#106 +G0 Z#100 +G0 X40.005000 Y43.815000 +G1 Z#105 F#106 +G0 Z#100 +G0 X40.005000 Y52.705000 +G1 Z#105 F#106 +G0 Z#100 +G0 X29.845000 Y52.705000 +G1 Z#105 F#106 +G0 Z#100 +G0 X24.130000 Y47.625000 +G1 Z#105 F#106 +G0 Z#100 +G0 X29.845000 Y40.005000 +G1 Z#105 F#106 +G0 Z#100 +G0 X59.055000 Y31.750000 +G1 Z#105 F#106 +G0 Z#100 +G0 X61.595000 Y31.750000 +G1 Z#105 F#106 +G0 Z#100 +G0 X64.135000 Y31.750000 +G1 Z#105 F#106 +G0 Z#100 +G0 X64.135000 Y50.800000 +G1 Z#105 F#106 +G0 Z#100 +G0 X61.595000 Y50.800000 +G1 Z#105 F#106 +G0 Z#100 +G0 X59.055000 Y50.800000 +G1 Z#105 F#106 +G0 Z#100 +G0 X91.440000 Y50.800000 +G1 Z#105 F#106 +G0 Z#100 +G0 X93.980000 Y50.800000 +G1 Z#105 F#106 +G0 Z#100 +G0 X96.520000 Y50.800000 +G1 Z#105 F#106 +G0 Z#100 +G0 X93.980000 Y43.815000 +G1 Z#105 F#106 +F#107 +G1 X94.026100 Y43.815000 +G1 X93.980000 Y43.861100 +G1 X93.933900 Y43.815000 +G1 X93.980000 Y43.768900 +G1 X94.026100 Y43.815000 +G0 X93.980000 Y43.815000 +G0 Z#100 +G0 X93.980000 Y31.750000 +G1 Z#105 F#106 +F#107 +G1 X94.026100 Y31.750000 +G1 X93.980000 Y31.796100 +G1 X93.933900 Y31.750000 +G1 X93.980000 Y31.703900 +G1 X94.026100 Y31.750000 +G0 X93.980000 Y31.750000 +G0 Z#100 +G0 X96.520000 Y31.750000 +G1 Z#105 F#106 +F#107 +G1 X96.566100 Y31.750000 +G1 X96.520000 Y31.796100 +G1 X96.473900 Y31.750000 +G1 X96.520000 Y31.703900 +G1 X96.566100 Y31.750000 +G0 X96.520000 Y31.750000 +G0 Z#100 +G0 X91.440000 Y31.750000 +G1 Z#105 F#106 +F#107 +G1 X91.486100 Y31.750000 +G1 X91.440000 Y31.796100 +G1 X91.393900 Y31.750000 +G1 X91.440000 Y31.703900 +G1 X91.486100 Y31.750000 +G0 X91.440000 Y31.750000 +G0 Z#100 +G0 X91.440000 Y12.700000 +G1 Z#105 F#106 +F#107 +G1 X91.486100 Y12.700000 +G1 X91.440000 Y12.746100 +G1 X91.393900 Y12.700000 +G1 X91.440000 Y12.653900 +G1 X91.486100 Y12.700000 +G0 X91.440000 Y12.700000 +G0 Z#100 +G0 X93.980000 Y12.700000 +G1 Z#105 F#106 +F#107 +G1 X94.026100 Y12.700000 +G1 X93.980000 Y12.746100 +G1 X93.933900 Y12.700000 +G1 X93.980000 Y12.653900 +G1 X94.026100 Y12.700000 +G0 X93.980000 Y12.700000 +G0 Z#100 +G0 X96.520000 Y12.700000 +G1 Z#105 F#106 +F#107 +G1 X96.680400 Y12.700000 +G1 X96.520000 Y12.860400 +G1 X96.359600 Y12.700000 +G1 X96.520000 Y12.539600 +G1 X96.680400 Y12.700000 +G0 X96.520000 Y12.700000 +G0 Z#100 +G0 X64.135000 Y12.700000 +G1 Z#105 F#106 +F#107 +G1 X64.295400 Y12.700000 +G1 X64.135000 Y12.860400 +G1 X63.974600 Y12.700000 +G1 X64.135000 Y12.539600 +G1 X64.295400 Y12.700000 +G0 X64.135000 Y12.700000 +G0 Z#100 +G0 X61.595000 Y12.700000 +G1 Z#105 F#106 +F#107 +G1 X61.793500 Y12.700000 +G1 X61.656340 Y12.888785 +G1 X61.434410 Y12.816675 +G1 X61.434410 Y12.583325 +G1 X61.656340 Y12.511215 +G1 X61.793500 Y12.700000 +G0 X61.595000 Y12.700000 +G0 Z#100 +G0 X59.055000 Y12.700000 +G1 Z#105 F#106 +F#107 +G1 X59.253500 Y12.700000 +G1 X59.116340 Y12.888785 +G1 X58.894410 Y12.816675 +G1 X58.894410 Y12.583325 +G1 X59.116340 Y12.511215 +G1 X59.253500 Y12.700000 +G0 X59.055000 Y12.700000 +G0 Z#100 +G0 X45.085000 Y4.445000 +G1 Z#105 F#106 +F#107 +G1 X45.283500 Y4.445000 +G1 X45.146340 Y4.633785 +G1 X44.924410 Y4.561675 +G1 X44.924410 Y4.328325 +G1 X45.146340 Y4.256215 +G1 X45.283500 Y4.445000 +G0 X45.085000 Y4.445000 +G0 Z#100 +G0 X12.065000 Y97.155000 +G1 Z#105 F#106 +F#107 +G1 X12.263500 Y97.155000 +G1 X12.126340 Y97.343785 +G1 X11.904410 Y97.271675 +G1 X11.904410 Y97.038325 +G1 X12.126340 Y96.966215 +G1 X12.263500 Y97.155000 +G0 X12.065000 Y97.155000 +G0 Z#100 +G0 X12.065000 Y97.155000 +G1 Z#105 F#106 +F#107 +G1 X12.263500 Y97.155000 +G1 X12.126340 Y97.343785 +G1 X11.904410 Y97.271675 +G1 X11.904410 Y97.038325 +G1 X12.126340 Y96.966215 +G1 X12.263500 Y97.155000 +G0 X12.065000 Y97.155000 +G0 Z#100 +G0 X161.290000 Y84.963000 +G1 Z#105 F#106 +F#107 +G1 X161.488500 Y84.963000 +G1 X161.351340 Y85.151785 +G1 X161.129410 Y85.079675 +G1 X161.129410 Y84.846325 +G1 X161.351340 Y84.774215 +G1 X161.488500 Y84.963000 +G0 X161.290000 Y84.963000 +G0 Z#100 +G0 X165.735000 Y97.155000 +G1 Z#105 F#106 +F#107 +G1 X165.933500 Y97.155000 +G1 X165.796340 Y97.343785 +G1 X165.574410 Y97.271675 +G1 X165.574410 Y97.038325 +G1 X165.796340 Y96.966215 +G1 X165.933500 Y97.155000 +G0 X165.735000 Y97.155000 +G0 Z#100 +G0 X161.290000 Y60.172600 +G1 Z#105 F#106 +F#107 +G1 X161.552000 Y60.172600 +G1 X161.370962 Y60.421777 +G1 X161.078038 Y60.326600 +G1 X161.078038 Y60.018600 +G1 X161.370962 Y59.923423 +G1 X161.552000 Y60.172600 +G0 X161.290000 Y60.172600 +G0 Z#100 +G0 X164.465000 Y51.435000 +G1 Z#105 F#106 +F#107 +G1 X164.727000 Y51.435000 +G1 X164.545962 Y51.684177 +G1 X164.253038 Y51.589000 +G1 X164.253038 Y51.281000 +G1 X164.545962 Y51.185823 +G1 X164.727000 Y51.435000 +G0 X164.465000 Y51.435000 +G0 Z#100 +G0 X164.465000 Y48.895000 +G1 Z#105 F#106 +F#107 +G1 X164.727000 Y48.895000 +G1 X164.545962 Y49.144177 +G1 X164.253038 Y49.049000 +G1 X164.253038 Y48.741000 +G1 X164.545962 Y48.645823 +G1 X164.727000 Y48.895000 +G0 X164.465000 Y48.895000 +G0 Z#100 +G0 X164.465000 Y41.910000 +G1 Z#105 F#106 +F#107 +G1 X164.727000 Y41.910000 +G1 X164.545962 Y42.159177 +G1 X164.253038 Y42.064000 +G1 X164.253038 Y41.756000 +G1 X164.545962 Y41.660823 +G1 X164.727000 Y41.910000 +G0 X164.465000 Y41.910000 +G0 Z#100 +G0 X164.465000 Y39.370000 +G1 Z#105 F#106 +F#107 +G1 X164.981000 Y39.370000 +G1 X164.829867 Y39.734867 +G1 X164.465000 Y39.886000 +G1 X164.100133 Y39.734867 +G1 X163.949000 Y39.370000 +G1 X164.100133 Y39.005133 +G1 X164.465000 Y38.854000 +G1 X164.829867 Y39.005133 +G1 X164.981000 Y39.370000 +G0 X164.465000 Y39.370000 +G0 Z#100 +G0 X164.465000 Y32.385000 +G1 Z#105 F#106 +F#107 +G1 X164.981000 Y32.385000 +G1 X164.829867 Y32.749867 +G1 X164.465000 Y32.901000 +G1 X164.100133 Y32.749867 +G1 X163.949000 Y32.385000 +G1 X164.100133 Y32.020133 +G1 X164.465000 Y31.869000 +G1 X164.829867 Y32.020133 +G1 X164.981000 Y32.385000 +G0 X164.465000 Y32.385000 +G0 Z#100 +G0 X164.465000 Y29.845000 +G1 Z#105 F#106 +F#107 +G1 X164.981000 Y29.845000 +G1 X164.829867 Y30.209867 +G1 X164.465000 Y30.361000 +G1 X164.100133 Y30.209867 +G1 X163.949000 Y29.845000 +G1 X164.100133 Y29.480133 +G1 X164.465000 Y29.329000 +G1 X164.829867 Y29.480133 +G1 X164.981000 Y29.845000 +G0 X164.465000 Y29.845000 +G0 Z#100 +G0 X163.880800 Y24.104600 +G1 Z#105 F#106 +F#107 +G1 X164.396800 Y24.104600 +G1 X164.245667 Y24.469467 +G1 X163.880800 Y24.620600 +G1 X163.515933 Y24.469467 +G1 X163.364800 Y24.104600 +G1 X163.515933 Y23.739733 +G1 X163.880800 Y23.588600 +G1 X164.245667 Y23.739733 +G1 X164.396800 Y24.104600 +G0 X163.880800 Y24.104600 +G0 Z#100 +G0 X166.370000 Y22.860000 +G1 Z#105 F#106 +F#107 +G1 X166.886000 Y22.860000 +G1 X166.734867 Y23.224867 +G1 X166.370000 Y23.376000 +G1 X166.005133 Y23.224867 +G1 X165.854000 Y22.860000 +G1 X166.005133 Y22.495133 +G1 X166.370000 Y22.344000 +G1 X166.734867 Y22.495133 +G1 X166.886000 Y22.860000 +G0 X166.370000 Y22.860000 +G0 Z#100 +G0 X166.370000 Y18.364200 +G1 Z#105 F#106 +F#107 +G1 X166.886000 Y18.364200 +G1 X166.734867 Y18.729067 +G1 X166.370000 Y18.880200 +G1 X166.005133 Y18.729067 +G1 X165.854000 Y18.364200 +G1 X166.005133 Y17.999333 +G1 X166.370000 Y17.848200 +G1 X166.734867 Y17.999333 +G1 X166.886000 Y18.364200 +G0 X166.370000 Y18.364200 +G0 Z#100 +G0 X163.880800 Y17.094200 +G1 Z#105 F#106 +F#107 +G1 X164.904800 Y17.094200 +G1 X164.742244 Y17.647816 +G1 X164.306185 Y18.025663 +G1 X163.735070 Y18.107777 +G1 X163.210223 Y17.868088 +G1 X162.898279 Y17.382694 +G1 X162.898279 Y16.805706 +G1 X163.210223 Y16.320312 +G1 X163.735070 Y16.080623 +G1 X164.306185 Y16.162737 +G1 X164.742244 Y16.540584 +G1 X164.904800 Y17.094200 +G0 X163.880800 Y17.094200 +G0 Z#100 +G0 X165.735000 Y8.585200 +G1 Z#105 F#106 +F#107 +G1 X166.759000 Y8.585200 +G1 X166.596444 Y9.138816 +G1 X166.160385 Y9.516663 +G1 X165.589270 Y9.598777 +G1 X165.064423 Y9.359088 +G1 X164.752479 Y8.873694 +G1 X164.752479 Y8.296706 +G1 X165.064423 Y7.811312 +G1 X165.589270 Y7.571623 +G1 X166.160385 Y7.653737 +G1 X166.596444 Y8.031584 +G1 X166.759000 Y8.585200 +G0 X165.735000 Y8.585200 +G0 Z#100 +M5 M9 M2 diff --git a/doc/aic-outline.gcode b/doc/aic-outline.gcode new file mode 100644 index 0000000..1c64683 --- /dev/null +++ b/doc/aic-outline.gcode @@ -0,0 +1,23 @@ +(Created by G-code exporter) +(Wed Jul 15 16:09:51 2015) +(Units: mm) +(Board size: 180.34 x 104.14 mm) +(Outline mill file) +(Tool diameter: 1.000000 mm) +#100=2.000000 (safe Z) +#105=-1.000000 (mill depth) +#106=25.000000 (mill plunge feedrate) +#107=50.000000 (mill feedrate) +(---------------------------------) +G17 G21 G90 G64 P0.003 M3 S3000 M7 +G0 Z#100 +G0 X180.840000 Y-0.500000 +G1 Z#105 F#106 +G1 X-0.500000 Y-0.500000 F#107 +G1 X-0.500000 Y104.640000 +G1 X180.840000 Y104.640000 +G1 X180.840000 Y-0.500000 +G0 Z#100 +M5 M9 M2 +(end, total distance G0 3.00 mm = 0.12 in) +( total distance G1 575.96 mm = 22.68 in) diff --git a/doc/aic.bottom.gbr b/doc/aic.bottom.gbr new file mode 100644 index 0000000..e611810 --- /dev/null +++ b/doc/aic.bottom.gbr @@ -0,0 +1,1685 @@ +G04 start of page 2 for group 0 idx 0 * +G04 Title: (unknown), solder * +G04 Creator: pcb 20140316 * +G04 CreationDate: Wed 15 Jul 2015 07:10:19 PM GMT UTC * +G04 For: fetter * +G04 Format: Gerber/RS-274X * +G04 PCB-Dimensions (mm): 180.34 104.14 * +G04 PCB-Coordinate-Origin: lower left * +%MOMM*% +%FSLAX43Y43*% +%LNBOTTOM*% +%ADD34C,1.321*% +%ADD33C,1.092*% +%ADD32C,1.067*% +%ADD31C,0.711*% +%ADD30C,0.889*% +%ADD29C,2.667*% +%ADD28C,3.556*% +%ADD27C,2.032*% +%ADD26C,1.524*% +%ADD25C,0.002*% +%ADD24C,2.540*% +%ADD23C,2.159*% +%ADD22C,0.508*% +%ADD21C,1.397*% +%ADD20C,1.016*% +%ADD19C,0.762*% +%ADD18C,2.921*% +%ADD17C,1.651*% +%ADD16C,2.286*% +%ADD15C,3.048*% +%ADD14C,1.778*% +%ADD13C,0.635*% +%ADD12C,0.254*% +%ADD11C,0.203*% +G54D11*X0Y104140D02*X180340D01* +X0D02*Y0D01* +X180340Y104140D02*Y0D01* +X0D02*X180340D01* +G54D12*X10160Y104140D02*X50800D01* +X92710Y23495D02*X68580D01* +X66675Y21590D02*X68580Y23495D01* +G54D13*X83820Y12700D02*Y19050D01* +X86360Y21590D01* +X69215Y39370D02*X118110D01* +G54D14*X83820Y32385D02*Y34290D01* +G54D15*X85090Y34925D02*X116840D01* +G54D16*X117475D02*X118745Y33655D01* +G54D13*X88900Y30480D02*Y31750D01* +X88265Y29845D02*X88900Y30480D01* +G54D15*X123825Y24130D02*X119380Y28575D01* +G54D17*X86360Y17780D02*X88265Y19685D01* +G54D13*X64770Y16510D02*Y15240D01* +G54D17*X59690D02*Y12700D01* +Y15240D02*X62230D01* +G54D13*X109855D02*X120650D01* +G54D14*X94615Y10160D02*X126365D01* +X118110D02*X118745Y10795D01* +Y12700D01* +G54D13*X128905Y17780D02*X90170D01* +G54D17*X130810Y19685D02*X137795Y12700D01* +G54D13*X90170Y17780D02*X88900Y16510D01* +Y10160D01* +G54D17*X86360Y10795D02*Y17780D01* +G54D13*Y21590D02*X132715D01* +G54D17*X88265Y19685D02*X130810D01* +G54D12*X48260Y21590D02*X66675D01* +X57150Y10795D02*X39370D01* +G54D13*X55245Y47625D02*X87630D01* +X84455Y52705D02*X67310D01* +G54D16*X83820Y53340D02*X84455Y53975D01* +G54D14*X83820Y50800D02*Y53340D01* +G54D13*X52705Y39370D02*X45085D01* +X118110Y56515D02*X71120D01* +X88900Y48895D02*Y50800D01* +X87630Y47625D02*X88900Y48895D01* +G54D18*X116840Y53975D02*X85090D01* +G54D13*X121285Y50800D02*Y53340D01* +G54D15*X86360Y43815D02*X140335D01* +G54D12*X57150Y60960D02*X89535D01* +G54D13*X109855Y57785D02*X38735D01* +G54D19*X97790Y62230D02*X41275D01* +G54D12*X125095Y59690D02*X84455D01* +G54D13*X101600Y62230D02*X144145D01* +G54D12*X143510Y63500D02*X82550D01* +G54D13*X61595Y27940D02*X53340D01* +X60960Y20320D02*X64770Y16510D01* +X53340Y27940D02*X52070Y26670D01* +Y22860D01* +X64135Y31750D02*X83820D01* +G54D17*X64135Y34290D02*Y34925D01* +G54D12*X39370Y34290D02*X45085D01* +G54D17*X55245D02*X48260D01* +X55245D02*Y34925D01* +X62865Y36195D02*X64135Y34925D01* +X45085Y21590D02*X48260Y24765D01* +X55245Y34925D02*X56515Y36195D01* +X62865D01* +G54D12*X40640Y12065D02*X54610D01* +X14656Y18415D02*X45085D01* +X41910Y13335D02*X52070D01* +G54D13*X46355Y15240D02*X49530D01* +X45085Y16510D02*X46355Y15240D01* +X45085Y31750D02*X61595D01* +G54D16*X83820Y34290D02*X84455Y34925D01* +G54D12*X80010Y33020D02*X19050D01* +X18415Y32385D01* +X15875D01* +G54D13*X88265Y29845D02*X57150D01* +G54D12*X48260Y21590D02*X45085Y18415D01* +X15875Y51435D02*X31115D01* +X36195Y46355D02*X31115Y51435D01* +X71755Y41910D02*X15875D01* +X40640Y56515D02*X57150D01* +G54D13*X71120D02*X70485Y55880D01* +X64135Y59690D02*X66675D01* +X70485Y55880D02*X69215Y54610D01* +G54D12*X36195Y46355D02*X91440D01* +G54D13*X88900Y10160D02*X86360Y7620D01* +X57150Y24765D02*X64135D01* +G54D17*X86360Y10795D02*X85090Y9525D01* +G54D13*X86360Y7620D02*X49530D01* +G54D17*X62865Y9525D02*X85090D01* +X59690Y12700D02*X62865Y9525D01* +G54D13*X61595Y59690D02*X47625D01* +G54D17*X64135Y66040D02*Y64135D01* +X55245Y66040D02*Y64135D01* +G54D13*X41275Y85090D02*X48895D01* +X62230Y92710D02*X59690D01* +G54D17*X61595Y73025D02*X59690Y71120D01* +X62230D01* +G54D13*X50800Y86995D02*X55245D01* +G54D17*X51435Y83820D02*X45085Y77470D01* +G54D12*X103505Y101600D02*X104140Y100965D01* +X106045Y101600D02*Y93980D01* +X44450Y101600D02*X103505D01* +G54D17*X50165Y96520D02*X52070Y98425D01* +X61595D01* +X63500Y96520D01* +G54D12*X43180Y100330D02*X44450Y101600D01* +X43180Y92710D02*Y100330D01* +X101600Y67310D02*X138430D01* +X102870Y68580D02*X128905D01* +G54D17*X120015Y72390D02*X120650Y73025D01* +X104775Y72390D02*X120015D01* +X103505Y71120D02*X104775Y72390D01* +X125095Y78740D02*Y73025D01* +G54D13*X142875Y78740D02*Y77470D01* +X143510Y76835D01* +G54D17*X140335Y71120D02*Y73025D01* +G54D12*X126365Y83820D02*Y86360D01* +X116205Y80010D02*X125730D01* +X126365Y80645D02*X123825Y83185D01* +X102870Y89535D02*X135255D01* +X112395Y74930D02*X117475D01* +X109220D02*X107950D01* +X110490Y76200D02*X109220Y74930D01* +X104140Y73660D02*X117475D01* +X119380Y83185D02*X117475Y85090D01* +X112395Y80010D02*X110490D01* +X108585Y78105D01* +X114300D02*X116205Y80010D01* +X112395Y87630D02*X125095D01* +G54D20*X116840Y86360D02*X104140D01* +G54D12*X104775Y83185D02*X105410Y83820D01* +X99695Y86360D02*X102870Y89535D01* +G54D13*X94615Y92710D02*X96520D01* +X120650Y90805D02*X101600D01* +G54D12*X104140Y93345D02*X104775Y92710D01* +X110490D01* +X108585Y99695D02*X110490Y101600D01* +X118745D01* +X121285Y99060D01* +X112395Y93980D02*Y99695D01* +X121285Y99060D02*Y98425D01* +G54D13*X122555Y95250D02*X125730Y98425D01* +X137160D02*X139065Y96520D01* +X125730Y98425D02*X137160D01* +G54D12*X104140Y100965D02*Y93345D01* +G54D17*X102235Y92710D02*Y93980D01* +X100965Y95250D01* +G54D12*X110490Y64770D02*X111760Y66040D01* +X116840D02*X111760D01* +X92710Y64770D02*X110490D01* +G54D17*X68580Y66040D02*X66675Y64135D01* +G54D12*X88900Y73025D02*X103505D01* +X89535Y74295D02*X103505D01* +X106045Y76835D01* +X110490Y78105D02*X114300D01* +X102870Y68580D02*X101600Y69850D01* +X103505Y73025D02*X104140Y73660D01* +G54D17*X102235Y71120D02*X103505D01* +G54D12*X109220Y76835D02*X106045D01* +X105410Y80010D02*X102235Y76835D01* +X105410Y78105D02*X102870Y75565D01* +X107950Y80010D02*X105410D01* +X108585Y78105D02*X105410D01* +G54D13*X71120Y81915D02*X120015D01* +G54D12*X117475Y76200D02*X110490D01* +X117475Y85090D02*X109220D01* +X107950Y83820D01* +X105410D02*X107950D01* +X109220Y76835D02*X110490Y78105D01* +X112395Y83820D02*X116840D01* +X95885Y75565D02*X102870D01* +X95885Y83185D02*X104775D01* +X71755Y74295D02*X70485Y75565D01* +X71755Y74295D02*X85725D01* +X71120Y73025D02*X84455D01* +X99695Y85090D02*Y86360D01* +G54D13*X97155D02*Y85090D01* +G54D12*X102235Y76835D03* +X72390D02*X102235D01* +G54D13*X94615Y78740D02*Y81915D01* +G54D12*X43180Y92710D02*X45085Y90805D01* +Y96520D02*X47625Y93980D01* +G54D13*X73660Y92710D02*X75565Y94615D01* +X38735Y88265D02*X55245D01* +X73660Y91440D02*Y92710D01* +X48895Y85090D02*X50800Y86995D01* +G54D17*X51435Y85090D02*Y83820D01* +G54D13*X55245Y88265D02*X59690Y92710D01* +X55245Y86995D02*X57150Y85090D01* +G54D12*X47625Y93980D02*X53340D01* +X77470Y68580D02*X23495D01* +X74930Y69850D02*X22225D01* +X24765Y74295D02*X69850D01* +X17780Y73965D02*X24435D01* +X24765Y74295D01* +X26035Y75565D02*X70485D01* +G54D13*X41275Y72390D02*X48260D01* +G54D12*X26035Y71120D02*X17856D01* +G54D13*X48260Y72390D02*X49530Y71120D01* +G54D12*X55245Y73025D02*X57150Y71120D01* +X50800Y66040D02*X45085D01* +X17856Y71120D02*X17780Y71196D01* +G54D17*X21590Y64135D02*X20320Y65405D01* +Y67031D01* +X66675Y64135D02*X21590D01* +G54D12*X90170Y80645D02*X78740D01* +G54D13*X87630Y83820D02*Y81915D01* +G54D12*X93345Y80645D02*X89535D01* +G54D13*X78740Y88900D02*X80010Y90170D01* +X97155Y86360D02*X101600Y90805D01* +G54D12*X88900Y71120D02*X85725Y74295D01* +X86360Y71120D02*X84455Y73025D01* +X91440Y66040D02*X94615D01* +X87630Y67945D02*X80010D01* +X100965D02*X101600Y67310D01* +Y69850D02*X80010D01* +G54D17*X92075Y67945D02*X98425D01* +G54D12*X62865Y99695D02*X102235D01* +G54D17*X93345Y98425D02*X100330D01* +G54D12*X69850Y74295D02*X71120Y73025D01* +G54D17*Y96520D02*Y91440D01* +G54D13*X75565Y94615D02*X85090D01* +G54D17*X100965Y95250D02*Y97790D01* +X100330Y98425D02*X100965Y97790D01* +X91440Y96520D02*X63500D01* +X91440D02*X93345Y98425D01* +G54D13*X74930Y88900D02*X78740D01* +G54D17*X76835Y86995D02*X80645D01* +X81280Y86360D02*X80645Y86995D01* +X81280Y85090D02*Y86360D01* +X73660Y85090D02*X74930D01* +X76835Y86995D01* +G54D13*X54610Y78740D02*X52705Y76835D01* +X57150Y78740D02*X59055Y76835D01* +X52705D02*X47625D01* +X59055D02*X66675D01* +G54D12*X50800Y73025D02*X55245D01* +G54D17*X68580D02*X61595D01* +G54D12*X164465Y94615D02*X165735Y93345D01* +G54D13*X163195Y92075D02*Y89535D01* +G54D12*X165735Y93345D02*Y92075D01* +G54D13*X153035Y96520D02*X154305D01* +G54D12*X153670Y94615D02*X164465D01* +X158750Y89535D02*X160655D01* +G54D13*X161925Y88265D02*X160020D01* +X163195Y89535D02*X161925Y88265D01* +X158750Y85090D02*Y86995D01* +X160020Y88265D01* +X158750Y85090D02*X156845Y83185D01* +G54D12*X151765Y89535D02*X158750D01* +X153035Y92710D02*Y93980D01* +X153670Y94615D01* +G54D21*X158750Y74930D02*X160500Y76640D01* +G54D12*X147955Y78740D02*Y80010D01* +G54D13*X156845Y83185D02*X146685D01* +G54D12*X147955Y80010D02*X147320Y80645D01* +X123825Y83185D02*X119380D01* +X126365Y83820D02*X127635Y82550D01* +G54D13*X146685Y83185D02*X143510Y86360D01* +X150495Y85090D02*Y83185D01* +G54D12*X127635Y82550D02*X133985D01* +X150495Y74930D02*X128905D01* +X137795Y77470D02*Y78740D01* +X137160Y76835D02*X137795Y77470D01* +X127000Y76835D02*X137160D01* +X137795Y71120D02*Y69850D01* +X147320Y80645D02*X126365D01* +X137795Y69850D02*X139065Y68580D01* +X154940D01* +X135255Y81915D02*X155575D01* +G54D17*X120650Y73025D02*X154940D01* +G54D13*X122555Y92710D02*X125095D01* +G54D12*X127635Y87630D02*X128270Y88265D01* +X127635Y92710D02*Y91440D01* +X126365Y86360D02*X125095Y87630D01* +X127635Y91440D02*X128270Y90805D01* +G54D13*X151130Y94615D02*X153035Y96520D01* +X147955Y93980D02*X148590Y94615D01* +X151130D01* +X139065Y96520D02*X149225D01* +X139065Y93980D02*Y96520D01* +X122555Y95250D02*Y92710D01* +X120650Y90805D02*X122555Y92710D01* +X143510Y86360D02*X132080D01* +G54D12*X128270Y90805D02*X144780D01* +X128270Y88265D02*X142875D01* +X144780Y90805D02*X147955Y87630D01* +X150495Y90805D02*X151765Y89535D01* +X150495Y92710D02*Y90805D01* +G54D13*X147955Y92710D02*Y93980D01* +G54D12*Y87630D02*Y85090D01* +X125730Y80010D02*X126365Y79375D01* +Y77470D01* +X127000Y76835D01* +X127635Y85090D02*Y87630D01* +X122555Y66040D02*X125933D01* +X127000D02*X125730D01* +X121285Y77470D02*X118745D01* +X117475Y76200D01* +Y74930D02*X118745Y76200D01* +X121920D01* +X118745Y74930D02*X117475Y73660D01* +X121285Y74930D02*X118745D01* +X167005Y76200D02*Y80645D01* +X165735Y81915D01* +X167005Y76200D02*Y68580D01* +Y63500D02*X166370Y62865D01* +X167005Y68580D02*Y63500D01* +G54D22*X163195Y81915D02*Y78105D01* +G54D21*X158750Y65405D02*Y74930D01* +G54D13*X146050Y64135D02*Y66040D01* +G54D12*X141605Y60325D02*X157480D01* +G54D13*X144145Y62230D02*X146050Y64135D01* +G54D12*X156210Y67310D02*Y66040D01* +X154940Y68580D02*X156210Y67310D01* +G54D13*X143510Y76835D02*X156210D01* +G54D22*X154940Y73025D02*X160020Y78105D01* +X165100D01* +X165735Y77470D01* +Y76835D01* +G54D21*X157440Y64135D02*X153035D01* +X157440D02*X158750Y65405D01* +G54D12*X157480Y60325D02*X160020Y62865D01* +X166370D02*X160020D01* +G54D15*X152400Y24130D02*X123825D01* +G54D13*X120650Y15240D02*X121285Y14605D01* +X128905Y17780D02*X135890Y10795D01* +X121285Y14605D02*Y12700D01* +X132715Y21590D02*X139065Y15240D01* +G54D14*X165735Y33655D02*X150495D01* +G54D13*X121285Y36195D02*Y31750D01* +G54D14*X118745Y33655D02*Y28575D01* +G54D17*X158750Y26035D02*X165735D01* +G54D14*X118745Y48895D02*Y52705D01* +G54D15*X156210Y47625D02*X120650D01* +G54D23*X118745Y52705D02*X117475Y53975D01* +G54D13*X121285Y53340D02*X118110Y56515D01* +G54D14*X120015Y47625D02*X118745Y48895D01* +X165735Y36195D02*X126365D01* +G54D13*X118110Y39370D02*X121285Y36195D01* +G54D14*X156845Y40005D02*X158115Y38735D01* +X165735D02*X158115D01* +G54D15*X135255Y40005D02*X156210Y40005D01* +G54D13*X152400Y12700D02*X154940Y10160D01* +X156195D01* +G54D14*X158115Y13970D02*Y8890D01* +X159795Y15665D02*X158115Y13970D01* +G54D24*X145415Y27940D02*X150495Y33020D01* +G54D14*X165735Y31115D02*X156210D01* +X157480Y28575D02*X152400Y23495D01* +X165735Y28575D02*X157480D01* +X156845Y7620D02*X158115Y8890D01* +G54D24*X145415Y27940D02*X141605D01* +G54D13*X147955Y10795D02*X149860Y12700D01* +X135890Y10795D02*X147955D01* +X149980Y12700D02*X150000Y12720D01* +G54D17*X137795Y12700D02*X146050D01* +G54D14*X142875Y4445D02*X135255D01* +X156845Y7620D02*X146050D01* +X142875Y4445D01* +X165735Y15875D02*X160020D01* +G54D17*X158115Y18415D02*X165735D01* +G54D13*X152400Y12700D02*X150000Y12720D01* +X139065Y15240D02*X156210D01* +G54D17*X157480Y17780D02*X140335D01* +X156210Y23495D02*Y17780D01* +X157480D02*X158115Y18415D01* +X156210Y23495D02*X158750Y26035D01* +G54D11*X19050Y9144D02*Y10160D01* +X19431Y9779D01* +X19812Y10160D01* +Y9144D02*Y10160D01* +X20498Y9652D02*X20625Y9779D01* +X20244Y9652D02*X20498D01* +X20117Y9779D02*X20244Y9652D01* +X20117Y9779D02*Y10033D01* +X20244Y10160D01* +X20625Y9652D02*Y10033D01* +X20752Y10160D01* +X20244D02*X20498D01* +X20625Y10033D01* +X21057Y9144D02*Y10033D01* +X21184Y10160D01* +X21565Y9144D02*Y10033D01* +X21692Y10160D01* +X21438Y9525D02*X21692D01* +X22073Y10160D02*X22454D01* +X21946Y10033D02*X22073Y10160D01* +X21946Y9779D02*Y10033D01* +Y9779D02*X22073Y9652D01* +X22327D01* +X22454Y9779D01* +X21946Y9906D02*X22454D01* +Y9779D02*Y9906D01* +X22885Y9779D02*Y10160D01* +Y9779D02*X23012Y9652D01* +X23266D01* +X22758D02*X22885Y9779D01* +X24028Y9144D02*Y10160D01* +Y9144D02*X24536D01* +X24028Y9652D02*X24409D01* +X24968Y10160D02*X25349D01* +X24841Y10033D02*X24968Y10160D01* +X24841Y9779D02*Y10033D01* +Y9779D02*X24968Y9652D01* +X25222D01* +X25349Y9779D01* +X24841Y9906D02*X25349D01* +Y9779D02*Y9906D01* +X25781Y9144D02*Y10033D01* +X25908Y10160D01* +X25654Y9525D02*X25908D01* +X26289Y9144D02*Y10033D01* +X26416Y10160D01* +X26162Y9525D02*X26416D01* +X26797Y10160D02*X27178D01* +X26670Y10033D02*X26797Y10160D01* +X26670Y9779D02*Y10033D01* +Y9779D02*X26797Y9652D01* +X27051D01* +X27178Y9779D01* +X26670Y9906D02*X27178D01* +Y9779D02*Y9906D01* +X27610Y9779D02*Y10160D01* +Y9779D02*X27737Y9652D01* +X27991D01* +X27483D02*X27610Y9779D01* +X28753Y9144D02*Y10160D01* +X29261D01* +X29947Y9652D02*X30074Y9779D01* +X29693Y9652D02*X29947D01* +X29566Y9779D02*X29693Y9652D01* +X29566Y9779D02*Y10033D01* +X29693Y10160D01* +X30074Y9652D02*Y10033D01* +X30201Y10160D01* +X29693D02*X29947D01* +X30074Y10033D01* +X30886Y9652D02*X31013Y9779D01* +X30632Y9652D02*X30886D01* +X30505Y9779D02*X30632Y9652D01* +X30505Y9779D02*Y10033D01* +X30632Y10160D01* +X30886D01* +X31013Y10033D01* +X30505Y10414D02*X30632Y10541D01* +X30886D01* +X31013Y10414D01* +Y9652D02*Y10414D01* +X31445Y10160D02*X31826D01* +X31318Y10033D02*X31445Y10160D01* +X31318Y9779D02*Y10033D01* +Y9779D02*X31445Y9652D01* +X31699D01* +X31826Y9779D01* +X31318Y9906D02*X31826D01* +Y9779D02*Y9906D01* +X32258Y10160D02*X32639D01* +X32766Y10033D01* +X32639Y9906D02*X32766Y10033D01* +X32258Y9906D02*X32639D01* +X32131Y9779D02*X32258Y9906D01* +X32131Y9779D02*X32258Y9652D01* +X32639D01* +X32766Y9779D01* +X32131Y10033D02*X32258Y10160D01* +X19177Y7239D02*Y8255D01* +X19558Y7239D02*X19685Y7366D01* +Y8128D01* +X19558Y8255D02*X19685Y8128D01* +X19050Y8255D02*X19558D01* +X19050Y7239D02*X19558D01* +X19990Y7493D02*Y7620D01* +Y7874D02*Y8255D01* +X20371D02*X20752D01* +X20244Y8128D02*X20371Y8255D01* +X20244Y7874D02*Y8128D01* +Y7874D02*X20371Y7747D01* +X20625D01* +X20752Y7874D01* +X20244Y8001D02*X20752D01* +Y7874D02*Y8001D01* +X21438Y7747D02*X21565Y7874D01* +X21184Y7747D02*X21438D01* +X21057Y7874D02*X21184Y7747D01* +X21057Y7874D02*Y8128D01* +X21184Y8255D01* +X21438D01* +X21565Y8128D01* +X21057Y8509D02*X21184Y8636D01* +X21438D01* +X21565Y8509D01* +Y7747D02*Y8509D01* +X21869Y7874D02*Y8128D01* +Y7874D02*X21996Y7747D01* +X22250D01* +X22377Y7874D01* +Y8128D01* +X22250Y8255D02*X22377Y8128D01* +X21996Y8255D02*X22250D01* +X21869Y8128D02*X21996Y8255D01* +X23266D02*X23647D01* +X23139Y8128D02*X23266Y8255D01* +X23139Y7366D02*Y8128D01* +Y7366D02*X23266Y7239D01* +X23647D01* +X24333Y7747D02*X24460Y7874D01* +X24079Y7747D02*X24333D01* +X23952Y7874D02*X24079Y7747D01* +X23952Y7874D02*Y8128D01* +X24079Y8255D01* +X24460Y7747D02*Y8128D01* +X24587Y8255D01* +X24079D02*X24333D01* +X24460Y8128D01* +X24892Y7239D02*Y8255D01* +Y8128D02*X25019Y8255D01* +X25273D01* +X25400Y8128D01* +Y7874D02*Y8128D01* +X25273Y7747D02*X25400Y7874D01* +X25019Y7747D02*X25273D01* +X24892Y7874D02*X25019Y7747D01* +X25832Y8255D02*X26213D01* +X25705Y8128D02*X25832Y8255D01* +X25705Y7874D02*Y8128D01* +Y7874D02*X25832Y7747D01* +X26086D01* +X26213Y7874D01* +X25705Y8001D02*X26213D01* +Y7874D02*Y8001D01* +X26645Y7874D02*Y8255D01* +Y7874D02*X26772Y7747D01* +X27026D01* +X26518D02*X26645Y7874D01* +X27330Y7239D02*Y8128D01* +X27457Y8255D01* +X27711Y7874D02*Y8128D01* +Y7874D02*X27838Y7747D01* +X28092D01* +X28219Y7874D01* +Y8128D01* +X28092Y8255D02*X28219Y8128D01* +X27838Y8255D02*X28092D01* +X27711Y8128D02*X27838Y8255D01* +X28651Y7874D02*Y8255D01* +Y7874D02*X28778Y7747D01* +X28905D01* +X29032Y7874D01* +Y8255D01* +X28524Y7747D02*X28651Y7874D01* +X30302Y7239D02*X30429Y7366D01* +X29921Y7239D02*X30302D01* +X29794Y7366D02*X29921Y7239D01* +X29794Y7366D02*Y7620D01* +X29921Y7747D01* +X30302D01* +X30429Y7874D01* +Y8128D01* +X30302Y8255D02*X30429Y8128D01* +X29921Y8255D02*X30302D01* +X29794Y8128D02*X29921Y8255D01* +X31115Y7747D02*X31242Y7874D01* +X30861Y7747D02*X31115D01* +X30734Y7874D02*X30861Y7747D01* +X30734Y7874D02*Y8128D01* +X30861Y8255D01* +X31242Y7747D02*Y8128D01* +X31369Y8255D01* +X30861D02*X31115D01* +X31242Y8128D01* +X31801Y7874D02*Y8255D01* +Y7874D02*X31928Y7747D01* +X32055D01* +X32182Y7874D01* +Y8255D01* +X31674Y7747D02*X31801Y7874D01* +X32614Y7239D02*Y8128D01* +X32741Y8255D01* +X32487Y7620D02*X32741D01* +X32995Y7493D02*Y7620D01* +Y7874D02*Y8255D01* +X33376Y7874D02*Y8255D01* +Y7874D02*X33503Y7747D01* +X33630D01* +X33757Y7874D01* +Y8255D01* +X33249Y7747D02*X33376Y7874D01* +X34061Y7493D02*Y7620D01* +Y7874D02*Y8255D01* +X19050Y5461D02*Y6350D01* +Y5461D02*X19177Y5334D01* +X19558D01* +X19685Y5461D01* +Y6350D01* +X19050Y5842D02*X19685D01* +X19990Y5334D02*X20244D01* +X20117D02*Y6350D01* +X19990D02*X20244D01* +X20676D02*X21057D01* +X20549Y6223D02*X20676Y6350D01* +X20549Y5461D02*Y6223D01* +Y5461D02*X20676Y5334D01* +X21057D01* +X21361Y5842D02*X21869D01* +X22174Y5461D02*X22301Y5334D01* +X22682D01* +X22809Y5461D01* +Y5715D01* +X22174Y6350D02*X22809Y5715D01* +X22174Y6350D02*X22809D01* +X23114D02*X23241D01* +X23546Y5461D02*X23673Y5334D01* +X24054D01* +X24181Y5461D01* +Y5715D01* +X23546Y6350D02*X24181Y5715D01* +X23546Y6350D02*X24181D01* +X24486D02*X24613D01* +X24917Y6223D02*X25044Y6350D01* +X24917Y5461D02*Y6223D01* +Y5461D02*X25044Y5334D01* +X25298D01* +X25425Y5461D01* +Y6223D01* +X25298Y6350D02*X25425Y6223D01* +X25044Y6350D02*X25298D01* +X24917Y6096D02*X25425Y5588D01* +X26187Y6223D02*X26314Y6350D01* +X26187Y5461D02*X26314Y5334D01* +X26187Y5461D02*Y6223D01* +X26746Y5842D02*X27127D01* +X26619Y5969D02*X26746Y5842D01* +X26619Y5969D02*Y6223D01* +X26746Y6350D01* +X27127D01* +X27432Y5334D02*X27559Y5461D01* +Y6223D01* +X27432Y6350D02*X27559Y6223D01* +X28321Y5461D02*X28448Y5334D01* +X28829D01* +X28956Y5461D01* +Y5715D01* +X28321Y6350D02*X28956Y5715D01* +X28321Y6350D02*X28956D01* +X29261Y6223D02*X29388Y6350D01* +X29261Y5461D02*Y6223D01* +Y5461D02*X29388Y5334D01* +X29642D01* +X29769Y5461D01* +Y6223D01* +X29642Y6350D02*X29769Y6223D01* +X29388Y6350D02*X29642D01* +X29261Y6096D02*X29769Y5588D01* +X30074Y6223D02*X30201Y6350D01* +X30074Y5461D02*Y6223D01* +Y5461D02*X30201Y5334D01* +X30455D01* +X30582Y5461D01* +Y6223D01* +X30455Y6350D02*X30582Y6223D01* +X30201Y6350D02*X30455D01* +X30074Y6096D02*X30582Y5588D01* +X30886Y6350D02*X31394Y5842D01* +Y5461D02*Y5842D01* +X31267Y5334D02*X31394Y5461D01* +X31013Y5334D02*X31267D01* +X30886Y5461D02*X31013Y5334D01* +X30886Y5461D02*Y5715D01* +X31013Y5842D01* +X31394D01* +X19050Y11049D02*X19558D01* +X19685Y11176D01* +Y11430D01* +X19558Y11557D02*X19685Y11430D01* +X19177Y11557D02*X19558D01* +X19177Y11049D02*Y12065D01* +Y11557D02*X19685Y12065D01* +X19990Y11684D02*Y11938D01* +Y11684D02*X20117Y11557D01* +X20371D01* +X20498Y11684D01* +Y11938D01* +X20371Y12065D02*X20498Y11938D01* +X20117Y12065D02*X20371D01* +X19990Y11938D02*X20117Y12065D01* +X21311Y11049D02*Y12065D01* +X21184D02*X21311Y11938D01* +X20930Y12065D02*X21184D01* +X20803Y11938D02*X20930Y12065D01* +X20803Y11684D02*Y11938D01* +Y11684D02*X20930Y11557D01* +X21184D01* +X21311Y11684D01* +X21742D02*Y12065D01* +Y11684D02*X21869Y11557D01* +X22123D01* +X21615D02*X21742Y11684D01* +X22428Y11303D02*Y11430D01* +Y11684D02*Y12065D01* +X23063Y11557D02*X23190Y11684D01* +X22809Y11557D02*X23063D01* +X22682Y11684D02*X22809Y11557D01* +X22682Y11684D02*Y11938D01* +X22809Y12065D01* +X23063D01* +X23190Y11938D01* +X22682Y12319D02*X22809Y12446D01* +X23063D01* +X23190Y12319D01* +Y11557D02*Y12319D01* +X23495Y11684D02*Y11938D01* +Y11684D02*X23622Y11557D01* +X23876D01* +X24003Y11684D01* +Y11938D01* +X23876Y12065D02*X24003Y11938D01* +X23622Y12065D02*X23876D01* +X23495Y11938D02*X23622Y12065D01* +X24892Y11049D02*Y12065D01* +X25273Y11049D02*X25400Y11176D01* +Y11938D01* +X25273Y12065D02*X25400Y11938D01* +X24765Y12065D02*X25273D01* +X24765Y11049D02*X25273D01* +X26086Y11557D02*X26213Y11684D01* +X25832Y11557D02*X26086D01* +X25705Y11684D02*X25832Y11557D01* +X25705Y11684D02*Y11938D01* +X25832Y12065D01* +X26213Y11557D02*Y11938D01* +X26340Y12065D01* +X25832D02*X26086D01* +X26213Y11938D01* +X26772Y11684D02*Y12065D01* +Y11684D02*X26899Y11557D01* +X27026D01* +X27153Y11684D01* +Y12065D01* +X26645Y11557D02*X26772Y11684D01* +X27457Y11303D02*Y11430D01* +Y11684D02*Y12065D01* +X27838D02*X28219D01* +X27711Y11938D02*X27838Y12065D01* +X27711Y11684D02*Y11938D01* +Y11684D02*X27838Y11557D01* +X28092D01* +X28219Y11684D01* +X27711Y11811D02*X28219D01* +Y11684D02*Y11811D01* +X28524Y11049D02*Y11938D01* +X28651Y12065D01* +X29362Y11049D02*X29870D01* +X29616D02*Y12065D01* +X30302Y11684D02*Y12065D01* +Y11684D02*X30429Y11557D01* +X30683D01* +X30175D02*X30302Y11684D01* +X31115Y12065D02*X31496D01* +X30988Y11938D02*X31115Y12065D01* +X30988Y11684D02*Y11938D01* +Y11684D02*X31115Y11557D01* +X31369D01* +X31496Y11684D01* +X30988Y11811D02*X31496D01* +Y11684D02*Y11811D01* +X31801Y11557D02*Y11811D01* +X32055Y12065D01* +X32309Y11811D01* +Y11557D02*Y11811D01* +X32614Y11303D02*Y11430D01* +Y11684D02*Y12065D01* +X32868Y11557D02*X33376D01* +X32868Y12065D02*X33376Y11557D01* +X32868Y12065D02*X33376D01* +X34061Y11557D02*X34188Y11684D01* +X33807Y11557D02*X34061D01* +X33680Y11684D02*X33807Y11557D01* +X33680Y11684D02*Y11938D01* +X33807Y12065D01* +X34188Y11557D02*Y11938D01* +X34315Y12065D01* +X33807D02*X34061D01* +X34188Y11938D01* +X34747Y11684D02*Y12065D01* +Y11684D02*X34874Y11557D01* +X35001D01* +X35128Y11684D01* +Y12065D01* +X34620Y11557D02*X34747Y11684D01* +G54D25*G36* +X56388Y85852D02*Y84328D01* +X57912D01* +Y85852D01* +X56388D01* +G37* +G54D26*X59690Y85090D03* +G54D25*G36* +X93853Y85852D02*Y84328D01* +X95377D01* +Y85852D01* +X93853D01* +G37* +G54D26*X97155Y85090D03* +X99695D03* +X102235D03* +X64770Y92710D03* +X62230D03* +X59690D03* +G54D25*G36* +X72898Y92202D02*Y90678D01* +X74422D01* +Y92202D01* +X72898D01* +G37* +G54D26*X71120Y91440D03* +X57150Y92710D03* +G54D25*G36* +X49403Y97282D02*Y95758D01* +X50927D01* +Y97282D01* +X49403D01* +G37* +G54D26*X45085Y96520D03* +G54D25*G36* +X49403Y91567D02*Y90043D01* +X50927D01* +Y91567D01* +X49403D01* +G37* +G54D26*X45085Y90805D03* +G54D25*G36* +X48133Y85852D02*Y84328D01* +X49657D01* +Y85852D01* +X48133D01* +G37* +G54D26*X51435Y85090D03* +G54D25*G36* +X86868Y94742D02*Y93218D01* +X88392D01* +Y94742D01* +X86868D01* +G37* +G54D26*X87630Y83820D03* +X86360Y71120D03* +X88900D03* +Y78740D03* +X86360D03* +G54D25*G36* +X93853Y71882D02*Y70358D01* +X95377D01* +Y71882D01* +X93853D01* +G37* +G54D26*X97155Y71120D03* +X99695D03* +X102235D03* +Y78740D03* +X99695D03* +X97155D03* +X94615D03* +G54D25*G36* +X79248Y93472D02*Y91948D01* +X80772D01* +Y93472D01* +X79248D01* +G37* +G54D26*X80010Y90170D03* +G54D25*G36* +X100203Y97282D02*Y95758D01* +X101727D01* +Y97282D01* +X100203D01* +G37* +G54D26*X95885Y96520D03* +X102235Y92710D03* +X99695D03* +X97155D03* +X94615D03* +G54D25*G36* +X116078Y94742D02*Y93218D01* +X117602D01* +Y94742D01* +X116078D01* +G37* +G54D26*X107950Y93980D03* +G54D25*G36* +X128143Y97282D02*Y95758D01* +X129667D01* +Y97282D01* +X128143D01* +G37* +G54D26*X123825Y96520D03* +X112395Y93980D03* +X130175Y92710D03* +G54D25*G36* +X134493Y94742D02*Y93218D01* +X136017D01* +Y94742D01* +X134493D01* +G37* +G54D26*X127635Y92710D03* +X125095D03* +X122555D03* +G54D25*G36* +X107188Y80772D02*Y79248D01* +X108712D01* +Y80772D01* +X107188D01* +G37* +G54D26*X116840Y83820D03* +G54D25*G36* +X107188Y84582D02*Y83058D01* +X108712D01* +Y84582D01* +X107188D01* +G37* +G36* +X111633Y80772D02*Y79248D01* +X113157D01* +Y80772D01* +X111633D01* +G37* +G36* +X116078Y73152D02*Y71628D01* +X117602D01* +Y73152D01* +X116078D01* +G37* +G54D26*X116840Y77470D03* +G54D25*G36* +X121793Y71882D02*Y70358D01* +X123317D01* +Y71882D01* +X121793D01* +G37* +G54D26*X125095Y71120D03* +X127635D03* +X130175D03* +X132715D03* +X135255D03* +X137795D03* +X140335D03* +X142875D03* +X145415D03* +X147955D03* +Y78740D03* +X145415D03* +X142875D03* +X140335D03* +X137795D03* +X135255D03* +X132715D03* +X130175D03* +X127635D03* +X125095D03* +X122555D03* +G54D25*G36* +X138303Y84582D02*Y83058D01* +X139827D01* +Y84582D01* +X138303D01* +G37* +G54D26*X130175Y85090D03* +X135255Y83820D03* +G54D25*G36* +X111633Y84582D02*Y83058D01* +X113157D01* +Y84582D01* +X111633D01* +G37* +G36* +X121793Y85852D02*Y84328D01* +X123317D01* +Y85852D01* +X121793D01* +G37* +G54D26*X125095Y85090D03* +X127635D03* +G54D15*X168275Y97155D03* +D03* +G54D25*G36* +X164973Y92837D02*Y91313D01* +X166497D01* +Y92837D01* +X164973D01* +G37* +G54D26*X163195Y92075D03* +X165735Y89535D03* +Y86995D03* +X163195Y89535D03* +Y86995D03* +X160655Y92075D03* +Y89535D03* +Y86995D03* +X150495Y71120D03* +Y78740D03* +X153035Y71120D03* +X155575D03* +Y78740D03* +X153035D03* +X165735Y79375D03* +Y76835D03* +Y74295D03* +X163195D03* +X160655D03* +X165735Y71755D03* +X163195D03* +X160655D03* +X163195Y79375D03* +Y76835D03* +X160655Y79375D03* +Y76835D03* +X139065Y93980D03* +X142875D03* +G54D25*G36* +X153543Y97282D02*Y95758D01* +X155067D01* +Y97282D01* +X153543D01* +G37* +G54D26*X149225Y96520D03* +X155575Y92710D03* +X153035D03* +X150495D03* +X147955D03* +G54D25*G36* +X142113Y84582D02*Y83058D01* +X143637D01* +Y84582D01* +X142113D01* +G37* +G36* +X147193Y85852D02*Y84328D01* +X148717D01* +Y85852D01* +X147193D01* +G37* +G54D26*X150495Y85090D03* +X153035D03* +X155575D03* +X165735Y84455D03* +Y81915D03* +X163195Y84455D03* +Y81915D03* +X160655Y84455D03* +Y81915D03* +G54D25*G36* +X120269Y13716D02*Y11684D01* +X122301D01* +Y13716D01* +X120269D01* +G37* +G54D27*X118745Y12700D03* +X116205D03* +G54D25*G36* +X87884Y13716D02*Y11684D01* +X89916D01* +Y13716D01* +X87884D01* +G37* +G54D27*X86360Y12700D03* +X83820D03* +G54D25*G36* +X120269Y32766D02*Y30734D01* +X122301D01* +Y32766D01* +X120269D01* +G37* +G54D27*X118745Y31750D03* +X116205D03* +G54D25*G36* +X87884Y32766D02*Y30734D01* +X89916D01* +Y32766D01* +X87884D01* +G37* +G54D27*X86360Y31750D03* +X83820D03* +G54D25*G36* +X87884Y51816D02*Y49784D01* +X89916D01* +Y51816D01* +X87884D01* +G37* +G54D27*X86360Y50800D03* +X83820D03* +G54D25*G36* +X15050Y30670D02*Y29020D01* +X16700D01* +Y30670D01* +X15050D01* +G37* +G54D17*X15875Y32385D03* +G54D25*G36* +X15050Y40196D02*Y38544D01* +X16700D01* +Y40196D01* +X15050D01* +G37* +G54D17*X15875Y41910D03* +G54D15*X14605Y8585D03* +G54D25*G36* +X13208Y23622D02*Y22098D01* +X14732D01* +Y23622D01* +X13208D01* +G37* +G54D26*X13970Y18364D03* +G54D14*X16459Y17094D03* +Y24105D03* +G54D15*X14605Y97155D03* +G54D28*X19050Y84963D03* +G54D25*G36* +X15050Y49720D02*Y48070D01* +X16700D01* +Y49720D01* +X15050D01* +G37* +G54D17*X15875Y51435D03* +G54D28*X19050Y60173D03* +G54D25*G36* +X19558Y78867D02*Y77343D01* +X21082D01* +Y78867D01* +X19558D01* +G37* +G54D26*X17780Y76733D03* +X20320Y75336D03* +X17780Y73965D03* +X20320Y72568D03* +X17780Y71196D03* +X20320Y69799D03* +Y67031D03* +X17780Y68428D03* +G54D25*G36* +X54483Y60452D02*Y58928D01* +X56007D01* +Y60452D01* +X54483D01* +G37* +G36* +X54546Y66738D02*Y65342D01* +X55944D01* +Y66738D01* +X54546D01* +G37* +G36* +Y45148D02*Y43752D01* +X55944D01* +Y45148D01* +X54546D01* +G37* +G54D26*X55245Y39370D03* +X45085Y59690D03* +G54D21*Y66040D03* +Y44450D03* +G54D25*G36* +X44323Y40132D02*Y38608D01* +X45847D01* +Y40132D01* +X44323D01* +G37* +G36* +X60833Y66802D02*Y65278D01* +X62357D01* +Y66802D01* +X60833D01* +G37* +G36* +Y60452D02*Y58928D01* +X62357D01* +Y60452D01* +X60833D01* +G37* +G54D26*X64135Y59690D03* +Y66040D03* +G54D25*G36* +X80518Y66802D02*Y65278D01* +X82042D01* +Y66802D01* +X80518D01* +G37* +G54D26*X78740Y66040D03* +G54D25*G36* +X58293Y50292D02*Y48768D01* +X59817D01* +Y50292D01* +X58293D01* +G37* +G54D21*X59055Y44450D03* +G54D25*G36* +X58293Y40132D02*Y38608D01* +X59817D01* +Y40132D01* +X58293D01* +G37* +G36* +X58356Y55308D02*Y53912D01* +X59754D01* +Y55308D01* +X58356D01* +G37* +G54D26*X69215Y49530D03* +G54D25*G36* +X68516Y45148D02*Y43752D01* +X69914D01* +Y45148D01* +X68516D01* +G37* +G54D26*X69215Y39370D03* +G54D21*Y54610D03* +G54D25*G36* +X48768Y16002D02*Y14478D01* +X50292D01* +Y16002D01* +X48768D01* +G37* +G54D26*X52070Y15240D03* +X54610D03* +X57150D03* +X59690D03* +X62230D03* +X64770D03* +Y22860D03* +X62230D03* +G54D25*G36* +X70358Y85852D02*Y84328D01* +X71882D01* +Y85852D01* +X70358D01* +G37* +G54D26*X73660Y85090D03* +X62230D03* +X64770D03* +X83820Y71120D03* +Y78740D03* +X81280D03* +X78740D03* +X76200D03* +X73660D03* +G54D25*G36* +X62738Y97282D02*Y95758D01* +X64262D01* +Y97282D01* +X62738D01* +G37* +G54D26*X58420Y96520D03* +G54D25*G36* +X77978Y85852D02*Y84328D01* +X79502D01* +Y85852D01* +X77978D01* +G37* +G54D26*X81280Y85090D03* +G54D25*G36* +X44323Y78232D02*Y76708D01* +X45847D01* +Y78232D01* +X44323D01* +G37* +G54D26*X45085Y72390D03* +G54D25*G36* +X48768Y71882D02*Y70358D01* +X50292D01* +Y71882D01* +X48768D01* +G37* +G54D26*X52070Y71120D03* +X54610D03* +X57150D03* +X59690D03* +X54610Y78740D03* +G54D25*G36* +X44386Y55308D02*Y53912D01* +X45784D01* +Y55308D01* +X44386D01* +G37* +G54D26*X52070Y78740D03* +X49530D03* +G54D21*X55245Y54610D03* +G54D25*G36* +X72263Y66802D02*Y65278D01* +X73787D01* +Y66802D01* +X72263D01* +G37* +G54D26*X70485Y66040D03* +G54D25*G36* +X70358Y71882D02*Y70358D01* +X71882D01* +Y71882D01* +X70358D01* +G37* +G54D26*X73660Y71120D03* +X76200D03* +X78740D03* +X81280D03* +X62230D03* +X64770D03* +X71120Y78740D03* +X64770D03* +X62230D03* +X59690D03* +Y22860D03* +G54D25*G36* +X60833Y35052D02*Y33528D01* +X62357D01* +Y35052D01* +X60833D01* +G37* +G54D26*X57150Y78740D03* +Y22860D03* +G54D25*G36* +X44323Y50292D02*Y48768D01* +X45847D01* +Y50292D01* +X44323D01* +G37* +G54D26*X55245Y49530D03* +X54610Y22860D03* +X52070D03* +X49530D03* +G54D25*G36* +X44323Y22352D02*Y20828D01* +X45847D01* +Y22352D01* +X44323D01* +G37* +G54D26*X45085Y16510D03* +G54D25*G36* +X54483Y28702D02*Y27178D01* +X56007D01* +Y28702D01* +X54483D01* +G37* +G36* +X60833D02*Y27178D01* +X62357D01* +Y28702D01* +X60833D01* +G37* +G54D26*X64135Y27940D03* +Y34290D03* +G54D25*G36* +X54546Y34988D02*Y33592D01* +X55944D01* +Y34988D01* +X54546D01* +G37* +G54D26*X45085Y27940D03* +G54D21*Y34290D03* +G54D26*X107950Y69850D03* +G54D25*G36* +X120269Y51816D02*Y49784D01* +X122301D01* +Y51816D01* +X120269D01* +G37* +G54D27*X118745Y50800D03* +X116205D03* +G54D26*X112395Y69850D03* +G54D25*G36* +X155448Y66802D02*Y65278D01* +X156972D01* +Y66802D01* +X155448D01* +G37* +G54D26*X160655Y66675D03* +Y64135D03* +X165735Y69215D03* +X163195D03* +X160655D03* +X165735Y66675D03* +X163195D03* +Y64135D03* +Y61595D03* +X165735Y64135D03* +Y61595D03* +X160655D03* +Y59055D03* +Y56515D03* +Y53975D03* +Y51435D03* +X146050Y66040D03* +G54D25*G36* +X140843Y66802D02*Y65278D01* +X142367D01* +Y66802D01* +X140843D01* +G37* +G54D26*X131445Y66040D03* +X127000D03* +G54D25*G36* +X86233Y66802D02*Y65278D01* +X87757D01* +Y66802D01* +X86233D01* +G37* +G54D26*X97155Y66040D03* +G54D25*G36* +X110998Y66802D02*Y65278D01* +X112522D01* +Y66802D01* +X110998D01* +G37* +G54D26*X101600Y66040D03* +G54D25*G36* +X116078Y66802D02*Y65278D01* +X117602D01* +Y66802D01* +X116078D01* +G37* +G36* +X155448Y10922D02*Y9398D01* +X156972D01* +Y10922D01* +X155448D01* +G37* +G54D26*X156210Y7620D03* +G54D25*G36* +X155448Y16002D02*Y14478D01* +X156972D01* +Y16002D01* +X155448D01* +G37* +G54D26*X156210Y17780D03* +G54D15*X168275Y8585D03* +Y8255D03* +G54D25*G36* +X149733Y8382D02*Y6858D01* +X151257D01* +Y8382D01* +X149733D01* +G37* +G54D26*X150495Y12700D03* +G54D25*G36* +X139573Y13462D02*Y11938D01* +X141097D01* +Y13462D01* +X139573D01* +G37* +G54D26*X140335Y7620D03* +G54D25*G36* +X145288Y8382D02*Y6858D01* +X146812D01* +Y8382D01* +X145288D01* +G37* +G54D26*X146050Y12700D03* +X165735Y15875D03* +Y13335D03* +X163195Y15875D03* +Y13335D03* +X160655Y15875D03* +Y13335D03* +G54D25*G36* +X139065Y29210D02*Y26670D01* +X141605D01* +Y29210D01* +X139065D01* +G37* +G54D24*X150495Y27940D03* +G54D25*G36* +X139065Y53975D02*Y51435D01* +X141605D01* +Y53975D01* +X139065D01* +G37* +G54D24*X150495Y52705D03* +G54D26*X165735Y59055D03* +Y56515D03* +Y53975D03* +X163195Y59055D03* +Y56515D03* +Y53975D03* +X165735Y51435D03* +Y48895D03* +Y46355D03* +X163195Y51435D03* +Y48895D03* +X160655D03* +X165735Y41275D03* +Y38735D03* +Y36195D03* +Y33655D03* +Y31115D03* +Y28575D03* +Y26035D03* +Y23495D03* +Y20955D03* +Y18415D03* +Y43815D03* +X163195D03* +Y46355D03* +Y41275D03* +Y38735D03* +Y36195D03* +Y33655D03* +Y31115D03* +Y28575D03* +Y26035D03* +Y23495D03* +Y20955D03* +Y18415D03* +X160655Y46355D03* +Y43815D03* +Y41275D03* +Y38735D03* +Y36195D03* +Y33655D03* +Y31115D03* +Y28575D03* +Y26035D03* +Y23495D03* +Y20955D03* +Y18415D03* +G54D15*X86360Y43815D03* +G54D20*X92710Y23495D03* +X80010Y33020D03* +X91440Y46355D03* +X89535Y74295D03* +X88900Y73025D03* +X80010Y69850D03* +X82550Y63500D03* +G54D23*X91440Y67945D03* +G54D16*X126365Y10160D03* +Y36195D03* +G54D26*X138430Y15875D03* +G54D16*X94615Y10160D03* +G54D26*X101600Y21590D03* +X97790Y17780D03* +G54D27*X99695Y19685D03* +G54D15*X140335Y43815D03* +G54D29*X156210Y31115D03* +G54D15*Y47625D03* +G54D26*X153670Y15240D03* +G54D27*X140335Y17780D03* +G54D15*X150495Y40005D03* +G54D18*X135255Y4445D03* +G54D15*Y40005D03* +G54D26*X109855Y15240D03* +G54D20*X26035Y71120D03* +G54D26*X38735Y88265D03* +X40640Y85090D03* +G54D20*X26035Y75565D03* +G54D26*X47625Y76835D03* +X40640Y72390D03* +G54D20*X22225Y69850D03* +X23495Y68580D03* +X40640Y56515D03* +G54D26*X38735Y57785D03* +X45085Y62230D03* +X40640D03* +X47625Y59690D03* +G54D20*X53340Y93980D03* +G54D26*X66675Y76835D03* +Y52705D03* +G54D20*X77470Y68580D03* +X72390Y76835D03* +G54D26*X74930Y88900D03* +G54D17*X68580Y66040D03* +G54D26*X60960Y20320D03* +X57150Y24765D03* +X64135Y31750D03* +Y24765D03* +G54D20*X39370Y10795D03* +G54D26*X49530Y7620D03* +G54D20*X52070Y13335D03* +X54610Y12065D03* +X57150Y10795D03* +X39370Y34290D03* +X41910Y13335D03* +G54D16*X48260Y24765D03* +G54D20*X40640Y12065D03* +X71755Y41910D03* +G54D26*X45085Y31750D03* +X55245Y47625D03* +X57150Y29845D03* +X61595Y31750D03* +G54D14*X48260Y34290D03* +G54D26*X52705Y39370D03* +X71120Y81915D03* +G54D20*X62865Y99695D03* +G54D16*X68580Y96520D03* +G54D20*X50800Y66040D03* +Y73025D03* +G54D26*X61595Y62230D03* +G54D20*X57150Y56515D03* +Y60960D03* +G54D26*X66675Y59690D03* +G54D14*X68580Y73025D03* +G54D20*X80010Y67945D03* +X74930Y69850D03* +X100965Y67945D03* +G54D23*X98425D03* +G54D20*X93345Y80645D03* +X91440Y66040D03* +X92710Y64770D03* +G54D16*X91440Y96520D03* +G54D20*X106045Y101600D03* +X89535Y60960D03* +X87630Y67945D03* +X84455Y59690D03* +X78740Y80645D03* +X95885Y75565D03* +G54D26*X76835Y81915D03* +G54D16*X83185Y96520D03* +G54D20*X85090Y94615D03* +X128905Y68580D03* +X125095Y59690D03* +X122555Y66040D03* +X128905Y74930D03* +X150495D03* +X121920Y76200D03* +X112395Y74930D03* +X135255Y89535D03* +X95885Y83185D03* +G54D26*X132080Y86360D03* +G54D20*X94615Y66040D03* +G54D26*X97790Y62230D03* +X131445D03* +G54D20*X139065Y90805D03* +X142875Y88265D03* +X133985Y82550D03* +X135255Y81915D03* +G54D16*X153035Y64135D03* +G54D20*X143510Y63500D03* +X138430Y67310D03* +X141605Y60325D03* +X155575Y81915D03* +G54D26*X156210Y76835D03* +G54D20*X112395Y87630D03* +X121285Y98425D03* +X112395Y99695D03* +X110490Y92710D03* +X108585Y99695D03* +X102235D03* +X106045Y93980D03* +G54D16*X104140Y86360D03* +G54D26*X120015Y62230D03* +G54D20*X107950Y74930D03* +G54D26*X101600Y62230D03* +G54D21*X109855Y57785D03* +G54D20*X121285Y74930D03* +G54D26*X120015Y81915D03* +G54D20*X121285Y77470D03* +G54D26*X116840Y86360D03* +G54D21*G54D22*G54D30*G54D21*G54D30*G54D21*G54D30*G54D22*G54D30*G54D22*G54D30*G54D22*G54D30*G54D22*G54D30*G54D22*G54D30*G54D22*G54D30*G54D22*G54D30*G54D22*G54D30*G54D22*G54D30*G54D22*G54D30*G54D22*G54D30*G54D22*G54D30*G54D22*G54D30*G54D22*G54D30*G54D22*G54D30*G54D22*G54D30*G54D22*G54D30*G54D22*G54D30*G54D22*G54D30*G54D22*G54D30*G54D22*G54D30*G54D22*G54D31*G54D30*G54D31*G54D30*G54D31*G54D30*G54D31*G54D30*G54D31*G54D30*G54D31*G54D30*G54D31*G54D30*G54D31*G54D30*G54D31*G54D30*G54D31*G54D27*G54D19*G54D31*G54D19*G54D30*G54D31*G54D30*G54D31*G54D19*G54D32*G54D33*G54D27*G54D32*G54D34*G54D27*G54D15*G54D33*G54D15*G54D30*G54D19*G54D30*G54D19*G54D30*G54D19*G54D30*G54D19*G54D30*G54D19*G54D30*G54D19*G54D31*G54D30*G54D31*G54D30*G54D31*G54D19*G54D31*G54D19*G54D30*G54D31*G54D30*G54D31*G54D30*G54D31*G54D30*G54D19*G54D30*G54D19*G54D30*G54D32*G54D30*G54D19*G54D30*G54D27*G54D31*G54D19*G54D26*G54D19*M02* diff --git a/doc/aic.bottommask.gbr b/doc/aic.bottommask.gbr new file mode 100644 index 0000000..0fe06c0 --- /dev/null +++ b/doc/aic.bottommask.gbr @@ -0,0 +1,755 @@ +G04 start of page 6 for group -4062 idx -4062 * +G04 Title: (unknown), soldermask * +G04 Creator: pcb 20140316 * +G04 CreationDate: Wed 15 Jul 2015 07:10:19 PM GMT UTC * +G04 For: fetter * +G04 Format: Gerber/RS-274X * +G04 PCB-Dimensions (mm): 180.34 104.14 * +G04 PCB-Coordinate-Origin: lower left * +%MOMM*% +%FSLAX43Y43*% +%LNBOTTOMMASK*% +%ADD89C,2.692*% +%ADD88C,1.549*% +%ADD87C,3.708*% +%ADD86C,1.930*% +%ADD85C,1.803*% +%ADD84C,2.184*% +%ADD83C,3.200*% +%ADD82C,1.676*% +%ADD81C,0.002*% +%ADD80C,0.203*% +G54D80*X0Y104140D02*X180340D01* +X0D02*Y0D01* +X180340Y104140D02*Y0D01* +X0D02*X180340D01* +G54D81*G36* +X56312Y85928D02*Y84252D01* +X57988D01* +Y85928D01* +X56312D01* +G37* +G54D82*X59690Y85090D03* +G54D81*G36* +X93777Y85928D02*Y84252D01* +X95453D01* +Y85928D01* +X93777D01* +G37* +G54D82*X97155Y85090D03* +X99695D03* +X102235D03* +X64770Y92710D03* +X62230D03* +X59690D03* +G54D81*G36* +X72822Y92278D02*Y90602D01* +X74498D01* +Y92278D01* +X72822D01* +G37* +G54D82*X71120Y91440D03* +X57150Y92710D03* +G54D81*G36* +X49327Y97358D02*Y95682D01* +X51003D01* +Y97358D01* +X49327D01* +G37* +G54D82*X45085Y96520D03* +G54D81*G36* +X49327Y91643D02*Y89967D01* +X51003D01* +Y91643D01* +X49327D01* +G37* +G54D82*X45085Y90805D03* +G54D81*G36* +X48057Y85928D02*Y84252D01* +X49733D01* +Y85928D01* +X48057D01* +G37* +G54D82*X51435Y85090D03* +G54D81*G36* +X86792Y94818D02*Y93142D01* +X88468D01* +Y94818D01* +X86792D01* +G37* +G54D82*X87630Y83820D03* +X86360Y71120D03* +X88900D03* +Y78740D03* +X86360D03* +G54D81*G36* +X93777Y71958D02*Y70282D01* +X95453D01* +Y71958D01* +X93777D01* +G37* +G54D82*X97155Y71120D03* +X99695D03* +X102235D03* +Y78740D03* +X99695D03* +X97155D03* +X94615D03* +G54D81*G36* +X79172Y93548D02*Y91872D01* +X80848D01* +Y93548D01* +X79172D01* +G37* +G54D82*X80010Y90170D03* +G54D81*G36* +X100127Y97358D02*Y95682D01* +X101803D01* +Y97358D01* +X100127D01* +G37* +G54D82*X95885Y96520D03* +X102235Y92710D03* +X99695D03* +X97155D03* +X94615D03* +G54D81*G36* +X116002Y94818D02*Y93142D01* +X117678D01* +Y94818D01* +X116002D01* +G37* +G54D82*X107950Y93980D03* +G54D81*G36* +X128067Y97358D02*Y95682D01* +X129743D01* +Y97358D01* +X128067D01* +G37* +G54D82*X123825Y96520D03* +X112395Y93980D03* +X130175Y92710D03* +G54D81*G36* +X134417Y94818D02*Y93142D01* +X136093D01* +Y94818D01* +X134417D01* +G37* +G54D82*X127635Y92710D03* +X125095D03* +X122555D03* +G54D81*G36* +X107112Y80848D02*Y79172D01* +X108788D01* +Y80848D01* +X107112D01* +G37* +G54D82*X116840Y83820D03* +G54D81*G36* +X107112Y84658D02*Y82982D01* +X108788D01* +Y84658D01* +X107112D01* +G37* +G36* +X111557Y80848D02*Y79172D01* +X113233D01* +Y80848D01* +X111557D01* +G37* +G36* +X116002Y73228D02*Y71552D01* +X117678D01* +Y73228D01* +X116002D01* +G37* +G54D82*X116840Y77470D03* +G54D81*G36* +X121717Y71958D02*Y70282D01* +X123393D01* +Y71958D01* +X121717D01* +G37* +G54D82*X125095Y71120D03* +X127635D03* +X130175D03* +X132715D03* +X135255D03* +X137795D03* +X140335D03* +X142875D03* +X145415D03* +X147955D03* +Y78740D03* +X145415D03* +X142875D03* +X140335D03* +X137795D03* +X135255D03* +X132715D03* +X130175D03* +X127635D03* +X125095D03* +X122555D03* +G54D81*G36* +X138227Y84658D02*Y82982D01* +X139903D01* +Y84658D01* +X138227D01* +G37* +G54D82*X130175Y85090D03* +X135255Y83820D03* +G54D81*G36* +X111557Y84658D02*Y82982D01* +X113233D01* +Y84658D01* +X111557D01* +G37* +G36* +X121717Y85928D02*Y84252D01* +X123393D01* +Y85928D01* +X121717D01* +G37* +G54D82*X125095Y85090D03* +X127635D03* +G54D83*X168275Y97155D03* +D03* +G54D81*G36* +X164897Y92913D02*Y91237D01* +X166573D01* +Y92913D01* +X164897D01* +G37* +G54D82*X163195Y92075D03* +X165735Y89535D03* +Y86995D03* +X163195Y89535D03* +Y86995D03* +X160655Y92075D03* +Y89535D03* +Y86995D03* +X150495Y71120D03* +Y78740D03* +X153035Y71120D03* +X155575D03* +Y78740D03* +X153035D03* +X165735Y79375D03* +Y76835D03* +Y74295D03* +X163195D03* +X160655D03* +X165735Y71755D03* +X163195D03* +X160655D03* +X163195Y79375D03* +Y76835D03* +X160655Y79375D03* +Y76835D03* +X139065Y93980D03* +X142875D03* +G54D81*G36* +X153467Y97358D02*Y95682D01* +X155143D01* +Y97358D01* +X153467D01* +G37* +G54D82*X149225Y96520D03* +X155575Y92710D03* +X153035D03* +X150495D03* +X147955D03* +G54D81*G36* +X142037Y84658D02*Y82982D01* +X143713D01* +Y84658D01* +X142037D01* +G37* +G36* +X147117Y85928D02*Y84252D01* +X148793D01* +Y85928D01* +X147117D01* +G37* +G54D82*X150495Y85090D03* +X153035D03* +X155575D03* +X165735Y84455D03* +Y81915D03* +X163195Y84455D03* +Y81915D03* +X160655Y84455D03* +Y81915D03* +G54D81*G36* +X120193Y13792D02*Y11608D01* +X122377D01* +Y13792D01* +X120193D01* +G37* +G54D84*X118745Y12700D03* +X116205D03* +G54D81*G36* +X87808Y13792D02*Y11608D01* +X89992D01* +Y13792D01* +X87808D01* +G37* +G54D84*X86360Y12700D03* +X83820D03* +G54D81*G36* +X120193Y32842D02*Y30658D01* +X122377D01* +Y32842D01* +X120193D01* +G37* +G54D84*X118745Y31750D03* +X116205D03* +G54D81*G36* +X87808Y32842D02*Y30658D01* +X89992D01* +Y32842D01* +X87808D01* +G37* +G54D84*X86360Y31750D03* +X83820D03* +G54D81*G36* +X87808Y51892D02*Y49708D01* +X89992D01* +Y51892D01* +X87808D01* +G37* +G54D84*X86360Y50800D03* +X83820D03* +G54D81*G36* +X14973Y30747D02*Y28943D01* +X16777D01* +Y30747D01* +X14973D01* +G37* +G54D85*X15875Y32385D03* +G54D81*G36* +X14973Y40272D02*Y38468D01* +X16777D01* +Y40272D01* +X14973D01* +G37* +G54D85*X15875Y41910D03* +G54D83*X14605Y8585D03* +G54D81*G36* +X13132Y23698D02*Y22022D01* +X14808D01* +Y23698D01* +X13132D01* +G37* +G54D82*X13970Y18364D03* +G54D86*X16459Y17094D03* +Y24105D03* +G54D83*X14605Y97155D03* +G54D87*X19050Y84963D03* +G54D81*G36* +X14973Y49797D02*Y47993D01* +X16777D01* +Y49797D01* +X14973D01* +G37* +G54D85*X15875Y51435D03* +G54D87*X19050Y60173D03* +G54D81*G36* +X19482Y78943D02*Y77267D01* +X21158D01* +Y78943D01* +X19482D01* +G37* +G54D82*X17780Y76733D03* +X20320Y75336D03* +X17780Y73965D03* +X20320Y72568D03* +X17780Y71196D03* +X20320Y69799D03* +Y67031D03* +X17780Y68428D03* +G54D81*G36* +X54407Y60528D02*Y58852D01* +X56083D01* +Y60528D01* +X54407D01* +G37* +G36* +X54470Y66815D02*Y65265D01* +X56020D01* +Y66815D01* +X54470D01* +G37* +G36* +Y45225D02*Y43675D01* +X56020D01* +Y45225D01* +X54470D01* +G37* +G54D82*X55245Y39370D03* +X45085Y59690D03* +G54D88*Y66040D03* +Y44450D03* +G54D81*G36* +X44247Y40208D02*Y38532D01* +X45923D01* +Y40208D01* +X44247D01* +G37* +G36* +X60757Y66878D02*Y65202D01* +X62433D01* +Y66878D01* +X60757D01* +G37* +G36* +Y60528D02*Y58852D01* +X62433D01* +Y60528D01* +X60757D01* +G37* +G54D82*X64135Y59690D03* +Y66040D03* +G54D81*G36* +X80442Y66878D02*Y65202D01* +X82118D01* +Y66878D01* +X80442D01* +G37* +G54D82*X78740Y66040D03* +G54D81*G36* +X58217Y50368D02*Y48692D01* +X59893D01* +Y50368D01* +X58217D01* +G37* +G54D88*X59055Y44450D03* +G54D81*G36* +X58217Y40208D02*Y38532D01* +X59893D01* +Y40208D01* +X58217D01* +G37* +G36* +X58280Y55385D02*Y53835D01* +X59830D01* +Y55385D01* +X58280D01* +G37* +G54D82*X69215Y49530D03* +G54D81*G36* +X68440Y45225D02*Y43675D01* +X69990D01* +Y45225D01* +X68440D01* +G37* +G54D82*X69215Y39370D03* +G54D88*Y54610D03* +G54D81*G36* +X48692Y16078D02*Y14402D01* +X50368D01* +Y16078D01* +X48692D01* +G37* +G54D82*X52070Y15240D03* +X54610D03* +X57150D03* +X59690D03* +X62230D03* +X64770D03* +Y22860D03* +X62230D03* +G54D81*G36* +X70282Y85928D02*Y84252D01* +X71958D01* +Y85928D01* +X70282D01* +G37* +G54D82*X73660Y85090D03* +X62230D03* +X64770D03* +X83820Y71120D03* +Y78740D03* +X81280D03* +X78740D03* +X76200D03* +X73660D03* +G54D81*G36* +X62662Y97358D02*Y95682D01* +X64338D01* +Y97358D01* +X62662D01* +G37* +G54D82*X58420Y96520D03* +G54D81*G36* +X77902Y85928D02*Y84252D01* +X79578D01* +Y85928D01* +X77902D01* +G37* +G54D82*X81280Y85090D03* +G54D81*G36* +X44247Y78308D02*Y76632D01* +X45923D01* +Y78308D01* +X44247D01* +G37* +G54D82*X45085Y72390D03* +G54D81*G36* +X48692Y71958D02*Y70282D01* +X50368D01* +Y71958D01* +X48692D01* +G37* +G54D82*X52070Y71120D03* +X54610D03* +X57150D03* +X59690D03* +X54610Y78740D03* +G54D81*G36* +X44310Y55385D02*Y53835D01* +X45860D01* +Y55385D01* +X44310D01* +G37* +G54D82*X52070Y78740D03* +X49530D03* +G54D88*X55245Y54610D03* +G54D81*G36* +X72187Y66878D02*Y65202D01* +X73863D01* +Y66878D01* +X72187D01* +G37* +G54D82*X70485Y66040D03* +G54D81*G36* +X70282Y71958D02*Y70282D01* +X71958D01* +Y71958D01* +X70282D01* +G37* +G54D82*X73660Y71120D03* +X76200D03* +X78740D03* +X81280D03* +X62230D03* +X64770D03* +X71120Y78740D03* +X64770D03* +X62230D03* +X59690D03* +Y22860D03* +G54D81*G36* +X60757Y35128D02*Y33452D01* +X62433D01* +Y35128D01* +X60757D01* +G37* +G54D82*X57150Y78740D03* +Y22860D03* +G54D81*G36* +X44247Y50368D02*Y48692D01* +X45923D01* +Y50368D01* +X44247D01* +G37* +G54D82*X55245Y49530D03* +X54610Y22860D03* +X52070D03* +X49530D03* +G54D81*G36* +X44247Y22428D02*Y20752D01* +X45923D01* +Y22428D01* +X44247D01* +G37* +G54D82*X45085Y16510D03* +G54D81*G36* +X54407Y28778D02*Y27102D01* +X56083D01* +Y28778D01* +X54407D01* +G37* +G36* +X60757D02*Y27102D01* +X62433D01* +Y28778D01* +X60757D01* +G37* +G54D82*X64135Y27940D03* +Y34290D03* +G54D81*G36* +X54470Y35065D02*Y33515D01* +X56020D01* +Y35065D01* +X54470D01* +G37* +G54D82*X45085Y27940D03* +G54D88*Y34290D03* +G54D82*X107950Y69850D03* +G54D81*G36* +X120193Y51892D02*Y49708D01* +X122377D01* +Y51892D01* +X120193D01* +G37* +G54D84*X118745Y50800D03* +X116205D03* +G54D82*X112395Y69850D03* +G54D81*G36* +X155372Y66878D02*Y65202D01* +X157048D01* +Y66878D01* +X155372D01* +G37* +G54D82*X160655Y66675D03* +Y64135D03* +X165735Y69215D03* +X163195D03* +X160655D03* +X165735Y66675D03* +X163195D03* +Y64135D03* +Y61595D03* +X165735Y64135D03* +Y61595D03* +X160655D03* +Y59055D03* +Y56515D03* +Y53975D03* +Y51435D03* +X146050Y66040D03* +G54D81*G36* +X140767Y66878D02*Y65202D01* +X142443D01* +Y66878D01* +X140767D01* +G37* +G54D82*X131445Y66040D03* +X127000D03* +G54D81*G36* +X86157Y66878D02*Y65202D01* +X87833D01* +Y66878D01* +X86157D01* +G37* +G54D82*X97155Y66040D03* +G54D81*G36* +X110922Y66878D02*Y65202D01* +X112598D01* +Y66878D01* +X110922D01* +G37* +G54D82*X101600Y66040D03* +G54D81*G36* +X116002Y66878D02*Y65202D01* +X117678D01* +Y66878D01* +X116002D01* +G37* +G36* +X155372Y10998D02*Y9322D01* +X157048D01* +Y10998D01* +X155372D01* +G37* +G54D82*X156210Y7620D03* +G54D81*G36* +X155372Y16078D02*Y14402D01* +X157048D01* +Y16078D01* +X155372D01* +G37* +G54D82*X156210Y17780D03* +G54D83*X168275Y8585D03* +Y8255D03* +G54D81*G36* +X149657Y8458D02*Y6782D01* +X151333D01* +Y8458D01* +X149657D01* +G37* +G54D82*X150495Y12700D03* +G54D81*G36* +X139497Y13538D02*Y11862D01* +X141173D01* +Y13538D01* +X139497D01* +G37* +G54D82*X140335Y7620D03* +G54D81*G36* +X145212Y8458D02*Y6782D01* +X146888D01* +Y8458D01* +X145212D01* +G37* +G54D82*X146050Y12700D03* +X165735Y15875D03* +Y13335D03* +X163195Y15875D03* +Y13335D03* +X160655Y15875D03* +Y13335D03* +G54D81*G36* +X138989Y29286D02*Y26594D01* +X141681D01* +Y29286D01* +X138989D01* +G37* +G54D89*X150495Y27940D03* +G54D81*G36* +X138989Y54051D02*Y51359D01* +X141681D01* +Y54051D01* +X138989D01* +G37* +G54D89*X150495Y52705D03* +G54D82*X165735Y59055D03* +Y56515D03* +Y53975D03* +X163195Y59055D03* +Y56515D03* +Y53975D03* +X165735Y51435D03* +Y48895D03* +Y46355D03* +X163195Y51435D03* +Y48895D03* +X160655D03* +X165735Y41275D03* +Y38735D03* +Y36195D03* +Y33655D03* +Y31115D03* +Y28575D03* +Y26035D03* +Y23495D03* +Y20955D03* +Y18415D03* +Y43815D03* +X163195D03* +Y46355D03* +Y41275D03* +Y38735D03* +Y36195D03* +Y33655D03* +Y31115D03* +Y28575D03* +Y26035D03* +Y23495D03* +Y20955D03* +Y18415D03* +X160655Y46355D03* +Y43815D03* +Y41275D03* +Y38735D03* +Y36195D03* +Y33655D03* +Y31115D03* +Y28575D03* +Y26035D03* +Y23495D03* +Y20955D03* +Y18415D03* +M02* diff --git a/doc/aic.bottompaste.gbr b/doc/aic.bottompaste.gbr new file mode 100644 index 0000000..765eda3 --- /dev/null +++ b/doc/aic.bottompaste.gbr @@ -0,0 +1,13 @@ +G04 start of page 10 for group -4014 idx -4014 * +G04 Title: (unknown), bottompaste * +G04 Creator: pcb 20140316 * +G04 CreationDate: Wed 15 Jul 2015 07:10:19 PM GMT UTC * +G04 For: fetter * +G04 Format: Gerber/RS-274X * +G04 PCB-Dimensions (mm): 180.34 104.14 * +G04 PCB-Coordinate-Origin: lower left * +%MOMM*% +%FSLAX43Y43*% +%LNBOTTOMPASTE*% +%ADD11C,0.0100*% +M02* diff --git a/doc/aic.bottomsilk.gbr b/doc/aic.bottomsilk.gbr new file mode 100644 index 0000000..2aa51da --- /dev/null +++ b/doc/aic.bottomsilk.gbr @@ -0,0 +1,17 @@ +G04 start of page 8 for group -4078 idx -4078 * +G04 Title: (unknown), bottomsilk * +G04 Creator: pcb 20140316 * +G04 CreationDate: Wed 15 Jul 2015 07:10:19 PM GMT UTC * +G04 For: fetter * +G04 Format: Gerber/RS-274X * +G04 PCB-Dimensions (mm): 180.34 104.14 * +G04 PCB-Coordinate-Origin: lower left * +%MOMM*% +%FSLAX43Y43*% +%LNBOTTOMSILK*% +%ADD94C,0.203*% +G54D94*X0Y104140D02*X180340D01* +X0D02*Y0D01* +X180340Y104140D02*Y0D01* +X0D02*X180340D01* +M02* diff --git a/doc/aic.fab.gbr b/doc/aic.fab.gbr index ff0a8fe..3714cd9 100644 --- a/doc/aic.fab.gbr +++ b/doc/aic.fab.gbr @@ -1,3645 +1,3882 @@ G04 start of page 11 for group -3984 idx -3984 * G04 Title: (unknown), fab * -G04 Creator: pcb 20100929 * -G04 CreationDate: Thu 16 Dec 2010 04:58:02 PM GMT UTC * +G04 Creator: pcb 20140316 * +G04 CreationDate: Wed 15 Jul 2015 07:10:19 PM GMT UTC * G04 For: fetter * G04 Format: Gerber/RS-274X * -G04 PCB-Dimensions: 710000 410000 * +G04 PCB-Dimensions (mm): 180.34 104.14 * G04 PCB-Coordinate-Origin: lower left * -%MOIN*% -%FSLAX25Y25*% +%MOMM*% +%FSLAX43Y43*% %LNFAB*% -%ADD11C,0.0100*% -%ADD24C,0.0080*% -%ADD42C,0.0060*% -G54D24*X75000Y334500D02*Y329700D01* -Y334500D02*X79160Y336900D01* -X75000Y334500D02*X70840Y336900D01* -X73400Y334500D02*G75*G03X76600Y334500I1600J0D01*G01* -G75*G03X73400Y334500I-1600J0D01*G01* -X71800D02*G75*G03X78200Y334500I3200J0D01*G01* -G75*G03X71800Y334500I-3200J0D01*G01* -X75000Y236900D02*Y232100D01* -Y236900D02*X79160Y239300D01* -X75000Y236900D02*X70840Y239300D01* -X73400Y236900D02*G75*G03X76600Y236900I1600J0D01*G01* -G75*G03X73400Y236900I-1600J0D01*G01* -X71800D02*G75*G03X78200Y236900I3200J0D01*G01* -G75*G03X71800Y236900I-3200J0D01*G01* -X15000Y421250D02*Y416450D01* -Y421250D02*X19160Y423650D01* -X15000Y421250D02*X10840Y423650D01* -X13400Y421250D02*G75*G03X16600Y421250I1600J0D01*G01* -G75*G03X13400Y421250I-1600J0D01*G01* -X11800D02*G75*G03X18200Y421250I3200J0D01*G01* -G75*G03X11800Y421250I-3200J0D01*G01* -G54D42*X135000Y423500D02*Y422750D01* -X136500Y421250D01* -X138000Y422750D01* -Y423500D02*Y422750D01* -X136500Y421250D02*Y417500D01* -X139801Y420500D02*X142051D01* -X139801Y417500D02*X142801D01* -X139801Y423500D02*Y417500D01* -Y423500D02*X142801D01* -X147603D02*X148353Y422750D01* -X145353Y423500D02*X147603D01* -X144603Y422750D02*X145353Y423500D01* -X144603Y422750D02*Y421250D01* -X145353Y420500D01* -X147603D01* -X148353Y419750D01* -Y418250D01* -X147603Y417500D02*X148353Y418250D01* -X145353Y417500D02*X147603D01* -X144603Y418250D02*X145353Y417500D01* -X135000Y414249D02*X150154D01* -X98000Y422750D02*X98750Y423500D01* -X101000D01* -X101750Y422750D01* -Y421250D01* -X98000Y417500D02*X101750Y421250D01* -X98000Y417500D02*X101750D01* -X98000Y414249D02*X103551D01* -X45000Y418250D02*X45750Y417500D01* -X45000Y422750D02*Y418250D01* -Y422750D02*X45750Y423500D01* -X47250D01* -X48000Y422750D01* -Y418250D01* -X47250Y417500D02*X48000Y418250D01* -X45750Y417500D02*X47250D01* -X45000Y419000D02*X48000Y422000D01* -X49801Y417500D02*X50551D01* -X53103D02*X54603D01* -X53853Y423500D02*Y417500D01* -X52353Y422000D02*X53853Y423500D01* -X56404Y422750D02*X57154Y423500D01* -X59404D01* -X60154Y422750D01* -Y421250D01* -X56404Y417500D02*X60154Y421250D01* -X56404Y417500D02*X60154D01* -X61956Y418250D02*X62706Y417500D01* -X61956Y422750D02*Y418250D01* -Y422750D02*X62706Y423500D01* -X64206D01* -X64956Y422750D01* -Y418250D01* -X64206Y417500D02*X64956Y418250D01* -X62706Y417500D02*X64206D01* -X61956Y419000D02*X64956Y422000D01* -X45000Y414249D02*X66757D01* -X660900Y34100D02*X664100D01* -X660900D02*Y30900D01* -X664100D01* -Y34100D02*Y30900D01* -X659300Y35700D02*X665700D01* -X659300D02*Y29300D01* -X665700D01* -Y35700D02*Y29300D01* -X660900Y384100D02*X664100D01* -X660900D02*Y380900D01* -X664100D01* -Y384100D02*Y380900D01* -X659300Y385700D02*X665700D01* -X659300D02*Y379300D01* -X665700D01* -Y385700D02*Y379300D01* -X55900Y384100D02*X59100D01* -X55900D02*Y380900D01* -X59100D01* -Y384100D02*Y380900D01* -X54300Y385700D02*X60700D01* -X54300D02*Y379300D01* -X60700D01* -Y385700D02*Y379300D01* -X55900Y35400D02*X59100D01* -X55900D02*Y32200D01* -X59100D01* -Y35400D02*Y32200D01* -X54300Y37000D02*X60700D01* -X54300D02*Y30600D01* -X60700D01* -Y37000D02*Y30600D01* -X660900Y384100D02*X664100D01* -X660900D02*Y380900D01* -X664100D01* -Y384100D02*Y380900D01* -X659300Y385700D02*X665700D01* -X659300D02*Y379300D01* -X665700D01* -Y385700D02*Y379300D01* -X660900Y35400D02*X664100D01* -X660900D02*Y32200D01* -X664100D01* -Y35400D02*Y32200D01* -X659300Y37000D02*X665700D01* -X659300D02*Y30600D01* -X665700D01* -Y37000D02*Y30600D01* -X13400Y437850D02*X16600D01* -X13400D02*Y434650D01* -X16600D01* -Y437850D02*Y434650D01* -X11800Y439450D02*X18200D01* -X11800D02*Y433050D01* -X18200D01* -Y439450D02*Y433050D01* -X135000Y438500D02*Y437750D01* -X136500Y436250D01* -X138000Y437750D01* -Y438500D02*Y437750D01* -X136500Y436250D02*Y432500D01* -X139801Y435500D02*X142051D01* -X139801Y432500D02*X142801D01* -X139801Y438500D02*Y432500D01* -Y438500D02*X142801D01* -X147603D02*X148353Y437750D01* -X145353Y438500D02*X147603D01* -X144603Y437750D02*X145353Y438500D01* -X144603Y437750D02*Y436250D01* -X145353Y435500D01* -X147603D01* -X148353Y434750D01* -Y433250D01* -X147603Y432500D02*X148353Y433250D01* -X145353Y432500D02*X147603D01* -X144603Y433250D02*X145353Y432500D01* -X135000Y429249D02*X150154D01* -X100250Y438500D02*X101000Y437750D01* -X98750Y438500D02*X100250D01* -X98000Y437750D02*X98750Y438500D01* -X98000Y437750D02*Y433250D01* -X98750Y432500D01* -X100250Y435500D02*X101000Y434750D01* -X98000Y435500D02*X100250D01* -X98750Y432500D02*X100250D01* -X101000Y433250D01* -Y434750D02*Y433250D01* -X98000Y429249D02*X102801D01* -X45000Y433250D02*X45750Y432500D01* -X45000Y437750D02*Y433250D01* -Y437750D02*X45750Y438500D01* -X47250D01* -X48000Y437750D01* -Y433250D01* -X47250Y432500D02*X48000Y433250D01* -X45750Y432500D02*X47250D01* -X45000Y434000D02*X48000Y437000D01* -X49801Y432500D02*X50551D01* -X52353Y433250D02*X53103Y432500D01* -X52353Y437750D02*Y433250D01* -Y437750D02*X53103Y438500D01* -X54603D01* -X55353Y437750D01* -Y433250D01* -X54603Y432500D02*X55353Y433250D01* -X53103Y432500D02*X54603D01* -X52353Y434000D02*X55353Y437000D01* -X57154Y433250D02*X57904Y432500D01* -X57154Y434750D02*Y433250D01* -Y434750D02*X57904Y435500D01* -X59404D01* -X60154Y434750D01* -Y433250D01* -X59404Y432500D02*X60154Y433250D01* -X57904Y432500D02*X59404D01* -X57154Y436250D02*X57904Y435500D01* -X57154Y437750D02*Y436250D01* -Y437750D02*X57904Y438500D01* -X59404D01* -X60154Y437750D01* -Y436250D01* -X59404Y435500D02*X60154Y436250D01* -X61956Y433250D02*X62706Y432500D01* -X61956Y437750D02*Y433250D01* -Y437750D02*X62706Y438500D01* -X64206D01* -X64956Y437750D01* -Y433250D01* -X64206Y432500D02*X64956Y433250D01* -X62706Y432500D02*X64206D01* -X61956Y434000D02*X64956Y437000D01* -X45000Y429249D02*X66757D01* -X551700Y207500D02*G75*G03X553300Y207500I800J0D01*G01* -G75*G03X551700Y207500I-800J0D01*G01* -X550100D02*G75*G03X554900Y207500I2400J0D01*G01* -G75*G03X550100Y207500I-2400J0D01*G01* -X591700D02*G75*G03X593300Y207500I800J0D01*G01* -G75*G03X591700Y207500I-800J0D01*G01* -X590100D02*G75*G03X594900Y207500I2400J0D01*G01* -G75*G03X590100Y207500I-2400J0D01*G01* -X551700Y110000D02*G75*G03X553300Y110000I800J0D01*G01* -G75*G03X551700Y110000I-800J0D01*G01* -X550100D02*G75*G03X554900Y110000I2400J0D01*G01* -G75*G03X550100Y110000I-2400J0D01*G01* -X591700D02*G75*G03X593300Y110000I800J0D01*G01* -G75*G03X591700Y110000I-800J0D01*G01* -X590100D02*G75*G03X594900Y110000I2400J0D01*G01* -G75*G03X590100Y110000I-2400J0D01*G01* -X14200Y451250D02*G75*G03X15800Y451250I800J0D01*G01* -G75*G03X14200Y451250I-800J0D01*G01* -X12600D02*G75*G03X17400Y451250I2400J0D01*G01* -G75*G03X12600Y451250I-2400J0D01*G01* -X135000Y453500D02*Y452750D01* -X136500Y451250D01* -X138000Y452750D01* -Y453500D02*Y452750D01* -X136500Y451250D02*Y447500D01* -X139801Y450500D02*X142051D01* -X139801Y447500D02*X142801D01* -X139801Y453500D02*Y447500D01* -Y453500D02*X142801D01* -X147603D02*X148353Y452750D01* -X145353Y453500D02*X147603D01* -X144603Y452750D02*X145353Y453500D01* -X144603Y452750D02*Y451250D01* -X145353Y450500D01* -X147603D01* -X148353Y449750D01* -Y448250D01* -X147603Y447500D02*X148353Y448250D01* -X145353Y447500D02*X147603D01* -X144603Y448250D02*X145353Y447500D01* -X135000Y444249D02*X150154D01* -X98000Y450500D02*X101000Y453500D01* -X98000Y450500D02*X101750D01* -X101000Y453500D02*Y447500D01* -X98000Y444249D02*X103551D01* -X45000Y448250D02*X45750Y447500D01* -X45000Y452750D02*Y448250D01* -Y452750D02*X45750Y453500D01* -X47250D01* -X48000Y452750D01* -Y448250D01* -X47250Y447500D02*X48000Y448250D01* -X45750Y447500D02*X47250D01* -X45000Y449000D02*X48000Y452000D01* -X49801Y447500D02*X50551D01* -X52353Y448250D02*X53103Y447500D01* -X52353Y452750D02*Y448250D01* -Y452750D02*X53103Y453500D01* -X54603D01* -X55353Y452750D01* -Y448250D01* -X54603Y447500D02*X55353Y448250D01* -X53103Y447500D02*X54603D01* -X52353Y449000D02*X55353Y452000D01* -X59404Y453500D02*X60154Y452750D01* -X57904Y453500D02*X59404D01* -X57154Y452750D02*X57904Y453500D01* -X57154Y452750D02*Y448250D01* -X57904Y447500D01* -X59404Y450500D02*X60154Y449750D01* -X57154Y450500D02*X59404D01* -X57904Y447500D02*X59404D01* -X60154Y448250D01* -Y449750D02*Y448250D01* -X61956D02*X62706Y447500D01* -X61956Y452750D02*Y448250D01* -Y452750D02*X62706Y453500D01* -X64206D01* -X64956Y452750D01* -Y448250D01* -X64206Y447500D02*X64956Y448250D01* -X62706Y447500D02*X64206D01* -X61956Y449000D02*X64956Y452000D01* -X45000Y444249D02*X66757D01* -X337600Y174900D02*X342400Y170100D01* -X337600D02*X342400Y174900D01* -X338400Y174100D02*X341600D01* -X338400D02*Y170900D01* -X341600D01* -Y174100D02*Y170900D01* -X550100Y174900D02*X554900Y170100D01* -X550100D02*X554900Y174900D01* -X550900Y174100D02*X554100D01* -X550900D02*Y170900D01* -X554100D01* -Y174100D02*Y170900D01* -X612600Y124900D02*X617400Y120100D01* -X612600D02*X617400Y124900D01* -X613400Y124100D02*X616600D01* -X613400D02*Y120900D01* -X616600D01* -Y124100D02*Y120900D01* -X612600Y189900D02*X617400Y185100D01* -X612600D02*X617400Y189900D01* -X613400Y189100D02*X616600D01* -X613400D02*Y185900D01* -X616600D01* -Y189100D02*Y185900D01* -X590100Y159900D02*X594900Y155100D01* -X590100D02*X594900Y159900D01* -X590900Y159100D02*X594100D01* -X590900D02*Y155900D01* -X594100D01* -Y159100D02*Y155900D01* -X530100Y19900D02*X534900Y15100D01* -X530100D02*X534900Y19900D01* -X530900Y19100D02*X534100D01* -X530900D02*Y15900D01* -X534100D01* -Y19100D02*Y15900D01* -X530100Y159900D02*X534900Y155100D01* -X530100D02*X534900Y159900D01* -X530900Y159100D02*X534100D01* -X530900D02*Y155900D01* -X534100D01* -Y159100D02*Y155900D01* -X12600Y468650D02*X17400Y463850D01* -X12600D02*X17400Y468650D01* -X13400Y467850D02*X16600D01* -X13400D02*Y464650D01* -X16600D01* -Y467850D02*Y464650D01* -X135000Y468500D02*Y467750D01* -X136500Y466250D01* -X138000Y467750D01* -Y468500D02*Y467750D01* -X136500Y466250D02*Y462500D01* -X139801Y465500D02*X142051D01* -X139801Y462500D02*X142801D01* -X139801Y468500D02*Y462500D01* -Y468500D02*X142801D01* -X147603D02*X148353Y467750D01* -X145353Y468500D02*X147603D01* -X144603Y467750D02*X145353Y468500D01* -X144603Y467750D02*Y466250D01* -X145353Y465500D01* -X147603D01* -X148353Y464750D01* -Y463250D01* -X147603Y462500D02*X148353Y463250D01* -X145353Y462500D02*X147603D01* -X144603Y463250D02*X145353Y462500D01* -X135000Y459249D02*X150154D01* -X98000Y462500D02*X101750Y466250D01* -Y468500D02*Y466250D01* -X98000Y468500D02*X101750D01* -X98000Y459249D02*X103551D01* -X45000Y463250D02*X45750Y462500D01* -X45000Y467750D02*Y463250D01* -Y467750D02*X45750Y468500D01* -X47250D01* -X48000Y467750D01* -Y463250D01* -X47250Y462500D02*X48000Y463250D01* -X45750Y462500D02*X47250D01* -X45000Y464000D02*X48000Y467000D01* -X49801Y462500D02*X50551D01* -X52353Y463250D02*X53103Y462500D01* -X52353Y467750D02*Y463250D01* -Y467750D02*X53103Y468500D01* -X54603D01* -X55353Y467750D01* -Y463250D01* -X54603Y462500D02*X55353Y463250D01* -X53103Y462500D02*X54603D01* -X52353Y464000D02*X55353Y467000D01* -X57154Y468500D02*X60154D01* -X57154D02*Y465500D01* -X57904Y466250D01* -X59404D01* -X60154Y465500D01* -Y463250D01* -X59404Y462500D02*X60154Y463250D01* -X57904Y462500D02*X59404D01* -X57154Y463250D02*X57904Y462500D01* -X61956Y468500D02*X64956D01* -X61956D02*Y465500D01* -X62706Y466250D01* -X64206D01* -X64956Y465500D01* -Y463250D01* -X64206Y462500D02*X64956Y463250D01* -X62706Y462500D02*X64206D01* -X61956Y463250D02*X62706Y462500D01* -X45000Y459249D02*X66757D01* -X64800Y98100D02*Y91700D01* -X61600Y94900D02*X68000D01* -X63200Y96500D02*X66400D01* -X63200D02*Y93300D01* -X66400D01* -Y96500D02*Y93300D01* -X64800Y70500D02*Y64100D01* -X61600Y67300D02*X68000D01* -X63200Y68900D02*X66400D01* -X63200D02*Y65700D01* -X66400D01* -Y68900D02*Y65700D01* -X15000Y484450D02*Y478050D01* -X11800Y481250D02*X18200D01* -X13400Y482850D02*X16600D01* -X13400D02*Y479650D01* -X16600D01* -Y482850D02*Y479650D01* -X135000Y483500D02*Y482750D01* -X136500Y481250D01* -X138000Y482750D01* -Y483500D02*Y482750D01* -X136500Y481250D02*Y477500D01* -X139801Y480500D02*X142051D01* -X139801Y477500D02*X142801D01* -X139801Y483500D02*Y477500D01* -Y483500D02*X142801D01* -X147603D02*X148353Y482750D01* -X145353Y483500D02*X147603D01* -X144603Y482750D02*X145353Y483500D01* -X144603Y482750D02*Y481250D01* -X145353Y480500D01* -X147603D01* -X148353Y479750D01* -Y478250D01* -X147603Y477500D02*X148353Y478250D01* -X145353Y477500D02*X147603D01* -X144603Y478250D02*X145353Y477500D01* -X135000Y474249D02*X150154D01* -X98000Y482750D02*X98750Y483500D01* -X101000D01* -X101750Y482750D01* -Y481250D01* -X98000Y477500D02*X101750Y481250D01* -X98000Y477500D02*X101750D01* -X98000Y474249D02*X103551D01* -X45000Y478250D02*X45750Y477500D01* -X45000Y482750D02*Y478250D01* -Y482750D02*X45750Y483500D01* -X47250D01* -X48000Y482750D01* -Y478250D01* -X47250Y477500D02*X48000Y478250D01* -X45750Y477500D02*X47250D01* -X45000Y479000D02*X48000Y482000D01* -X49801Y477500D02*X50551D01* -X52353Y478250D02*X53103Y477500D01* -X52353Y482750D02*Y478250D01* -Y482750D02*X53103Y483500D01* -X54603D01* -X55353Y482750D01* -Y478250D01* -X54603Y477500D02*X55353Y478250D01* -X53103Y477500D02*X54603D01* -X52353Y479000D02*X55353Y482000D01* -X57154Y483500D02*X60154D01* -X57154D02*Y480500D01* -X57904Y481250D01* -X59404D01* -X60154Y480500D01* -Y478250D01* -X59404Y477500D02*X60154Y478250D01* -X57904Y477500D02*X59404D01* -X57154Y478250D02*X57904Y477500D01* -X61956Y482750D02*X62706Y483500D01* -X64956D01* -X65706Y482750D01* -Y481250D01* -X61956Y477500D02*X65706Y481250D01* -X61956Y477500D02*X65706D01* -X45000Y474249D02*X67507D01* -X62500Y155000D02*Y151800D01* -Y155000D02*X65273Y156600D01* -X62500Y155000D02*X59727Y156600D01* -X60900Y155000D02*G75*G03X64100Y155000I1600J0D01*G01* -G75*G03X60900Y155000I-1600J0D01*G01* -X62500Y165000D02*Y161800D01* -Y165000D02*X65273Y166600D01* -X62500Y165000D02*X59727Y166600D01* -X60900Y165000D02*G75*G03X64100Y165000I1600J0D01*G01* -G75*G03X60900Y165000I-1600J0D01*G01* -X62500Y117500D02*Y114300D01* -Y117500D02*X65273Y119100D01* -X62500Y117500D02*X59727Y119100D01* -X60900Y117500D02*G75*G03X64100Y117500I1600J0D01*G01* -G75*G03X60900Y117500I-1600J0D01*G01* -X62500Y127500D02*Y124300D01* -Y127500D02*X65273Y129100D01* -X62500Y127500D02*X59727Y129100D01* -X60900Y127500D02*G75*G03X64100Y127500I1600J0D01*G01* -G75*G03X60900Y127500I-1600J0D01*G01* -X62500Y192500D02*Y189300D01* -Y192500D02*X65273Y194100D01* -X62500Y192500D02*X59727Y194100D01* -X60900Y192500D02*G75*G03X64100Y192500I1600J0D01*G01* -G75*G03X60900Y192500I-1600J0D01*G01* -X62500Y202500D02*Y199300D01* -Y202500D02*X65273Y204100D01* -X62500Y202500D02*X59727Y204100D01* -X60900Y202500D02*G75*G03X64100Y202500I1600J0D01*G01* -G75*G03X60900Y202500I-1600J0D01*G01* -X15000Y496250D02*Y493050D01* -Y496250D02*X17773Y497850D01* -X15000Y496250D02*X12227Y497850D01* -X13400Y496250D02*G75*G03X16600Y496250I1600J0D01*G01* -G75*G03X13400Y496250I-1600J0D01*G01* -X135000Y498500D02*Y497750D01* -X136500Y496250D01* -X138000Y497750D01* -Y498500D02*Y497750D01* -X136500Y496250D02*Y492500D01* -X139801Y495500D02*X142051D01* -X139801Y492500D02*X142801D01* -X139801Y498500D02*Y492500D01* -Y498500D02*X142801D01* -X147603D02*X148353Y497750D01* -X145353Y498500D02*X147603D01* -X144603Y497750D02*X145353Y498500D01* -X144603Y497750D02*Y496250D01* -X145353Y495500D01* -X147603D01* -X148353Y494750D01* -Y493250D01* -X147603Y492500D02*X148353Y493250D01* -X145353Y492500D02*X147603D01* -X144603Y493250D02*X145353Y492500D01* -X135000Y489249D02*X150154D01* -X100250Y498500D02*X101000Y497750D01* -X98750Y498500D02*X100250D01* -X98000Y497750D02*X98750Y498500D01* -X98000Y497750D02*Y493250D01* -X98750Y492500D01* -X100250Y495500D02*X101000Y494750D01* -X98000Y495500D02*X100250D01* -X98750Y492500D02*X100250D01* -X101000Y493250D01* -Y494750D02*Y493250D01* -X98000Y489249D02*X102801D01* -X45000Y493250D02*X45750Y492500D01* -X45000Y497750D02*Y493250D01* -Y497750D02*X45750Y498500D01* -X47250D01* -X48000Y497750D01* -Y493250D01* -X47250Y492500D02*X48000Y493250D01* -X45750Y492500D02*X47250D01* -X45000Y494000D02*X48000Y497000D01* -X49801Y492500D02*X50551D01* -X52353Y493250D02*X53103Y492500D01* -X52353Y497750D02*Y493250D01* -Y497750D02*X53103Y498500D01* -X54603D01* -X55353Y497750D01* -Y493250D01* -X54603Y492500D02*X55353Y493250D01* -X53103Y492500D02*X54603D01* -X52353Y494000D02*X55353Y497000D01* -X57154Y495500D02*X60154Y498500D01* -X57154Y495500D02*X60904D01* -X60154Y498500D02*Y492500D01* -X62706Y497750D02*X63456Y498500D01* -X64956D01* -X65706Y497750D01* -Y493250D01* -X64956Y492500D02*X65706Y493250D01* -X63456Y492500D02*X64956D01* -X62706Y493250D02*X63456Y492500D01* -Y495500D02*X65706D01* -X45000Y489249D02*X67507D01* -X348400Y201600D02*X351600D01* -X348400D02*Y198400D01* -X351600D01* -Y201600D02*Y198400D01* -X338400Y201600D02*X341600D01* -X338400D02*Y198400D01* -X341600D01* -Y201600D02*Y198400D01* -X328400Y201600D02*X331600D01* -X328400D02*Y198400D01* -X331600D01* -Y201600D02*Y198400D01* -X475900Y126600D02*X479100D01* -X475900D02*Y123400D01* -X479100D01* -Y126600D02*Y123400D01* -X465900Y126600D02*X469100D01* -X465900D02*Y123400D01* -X469100D01* -Y126600D02*Y123400D01* -X455900Y126600D02*X459100D01* -X455900D02*Y123400D01* -X459100D01* -Y126600D02*Y123400D01* -X475900Y201600D02*X479100D01* -X475900D02*Y198400D01* -X479100D01* -Y201600D02*Y198400D01* -X465900Y201600D02*X469100D01* -X465900D02*Y198400D01* -X469100D01* -Y201600D02*Y198400D01* -X455900Y201600D02*X459100D01* -X455900D02*Y198400D01* -X459100D01* -Y201600D02*Y198400D01* -X53400Y91600D02*X56600D01* -X53400D02*Y88400D01* -X56600D01* -Y91600D02*Y88400D01* -X53400Y73900D02*X56600D01* -X53400D02*Y70700D01* -X56600D01* -Y73900D02*Y70700D01* -X348400Y51600D02*X351600D01* -X348400D02*Y48400D01* -X351600D01* -Y51600D02*Y48400D01* -X338400Y51600D02*X341600D01* -X338400D02*Y48400D01* -X341600D01* -Y51600D02*Y48400D01* -X328400Y51600D02*X331600D01* -X328400D02*Y48400D01* -X331600D01* -Y51600D02*Y48400D01* -X475900Y51600D02*X479100D01* -X475900D02*Y48400D01* -X479100D01* -Y51600D02*Y48400D01* -X465900Y51600D02*X469100D01* -X465900D02*Y48400D01* -X469100D01* -Y51600D02*Y48400D01* -X455900Y51600D02*X459100D01* -X455900D02*Y48400D01* -X459100D01* -Y51600D02*Y48400D01* -X348400Y126600D02*X351600D01* -X348400D02*Y123400D01* -X351600D01* -Y126600D02*Y123400D01* -X338400Y126600D02*X341600D01* -X338400D02*Y123400D01* -X341600D01* -Y126600D02*Y123400D01* -X328400Y126600D02*X331600D01* -X328400D02*Y123400D01* -X331600D01* -Y126600D02*Y123400D01* -X13400Y512850D02*X16600D01* -X13400D02*Y509650D01* -X16600D01* -Y512850D02*Y509650D01* -X135000Y513500D02*Y512750D01* -X136500Y511250D01* -X138000Y512750D01* -Y513500D02*Y512750D01* -X136500Y511250D02*Y507500D01* -X139801Y510500D02*X142051D01* -X139801Y507500D02*X142801D01* -X139801Y513500D02*Y507500D01* -Y513500D02*X142801D01* -X147603D02*X148353Y512750D01* -X145353Y513500D02*X147603D01* -X144603Y512750D02*X145353Y513500D01* -X144603Y512750D02*Y511250D01* -X145353Y510500D01* -X147603D01* -X148353Y509750D01* -Y508250D01* -X147603Y507500D02*X148353Y508250D01* -X145353Y507500D02*X147603D01* -X144603Y508250D02*X145353Y507500D01* -X135000Y504249D02*X150154D01* -X98000Y512750D02*X98750Y513500D01* -X101000D01* -X101750Y512750D01* -Y511250D01* -X98000Y507500D02*X101750Y511250D01* -X98000Y507500D02*X101750D01* -X103551Y508250D02*X104301Y507500D01* -X103551Y512750D02*Y508250D01* -Y512750D02*X104301Y513500D01* -X105801D01* -X106551Y512750D01* -Y508250D01* -X105801Y507500D02*X106551Y508250D01* -X104301Y507500D02*X105801D01* -X103551Y509000D02*X106551Y512000D01* -X98000Y504249D02*X108353D01* -X45000Y508250D02*X45750Y507500D01* -X45000Y512750D02*Y508250D01* -Y512750D02*X45750Y513500D01* -X47250D01* -X48000Y512750D01* -Y508250D01* -X47250Y507500D02*X48000Y508250D01* -X45750Y507500D02*X47250D01* -X45000Y509000D02*X48000Y512000D01* -X49801Y507500D02*X50551D01* -X52353Y508250D02*X53103Y507500D01* -X52353Y512750D02*Y508250D01* -Y512750D02*X53103Y513500D01* -X54603D01* -X55353Y512750D01* -Y508250D01* -X54603Y507500D02*X55353Y508250D01* -X53103Y507500D02*X54603D01* -X52353Y509000D02*X55353Y512000D01* -X57154Y510500D02*X60154Y513500D01* -X57154Y510500D02*X60904D01* -X60154Y513500D02*Y507500D01* -X62706Y512750D02*X63456Y513500D01* -X65706D01* -X66456Y512750D01* -Y511250D01* -X62706Y507500D02*X66456Y511250D01* -X62706Y507500D02*X66456D01* -X45000Y504249D02*X68257D01* -X241700Y135000D02*G75*G03X243300Y135000I800J0D01*G01* -G75*G03X241700Y135000I-800J0D01*G01* -X251700D02*G75*G03X253300Y135000I800J0D01*G01* -G75*G03X251700Y135000I-800J0D01*G01* -X241700Y110000D02*G75*G03X243300Y110000I800J0D01*G01* -G75*G03X241700Y110000I-800J0D01*G01* -X251700D02*G75*G03X253300Y110000I800J0D01*G01* -G75*G03X251700Y110000I-800J0D01*G01* -X216700D02*G75*G03X218300Y110000I800J0D01*G01* -G75*G03X216700Y110000I-800J0D01*G01* -X176700D02*G75*G03X178300Y110000I800J0D01*G01* -G75*G03X176700Y110000I-800J0D01*G01* -Y195000D02*G75*G03X178300Y195000I800J0D01*G01* -G75*G03X176700Y195000I-800J0D01*G01* -X216700D02*G75*G03X218300Y195000I800J0D01*G01* -G75*G03X216700Y195000I-800J0D01*G01* -X176700Y155000D02*G75*G03X178300Y155000I800J0D01*G01* -G75*G03X176700Y155000I-800J0D01*G01* -X216700D02*G75*G03X218300Y155000I800J0D01*G01* -G75*G03X216700Y155000I-800J0D01*G01* -X231700D02*G75*G03X233300Y155000I800J0D01*G01* -G75*G03X231700Y155000I-800J0D01*G01* -X271700D02*G75*G03X273300Y155000I800J0D01*G01* -G75*G03X271700Y155000I-800J0D01*G01* -X344200Y370000D02*G75*G03X345800Y370000I800J0D01*G01* -G75*G03X344200Y370000I-800J0D01*G01* -Y330000D02*G75*G03X345800Y330000I800J0D01*G01* -G75*G03X344200Y330000I-800J0D01*G01* -X79200Y307500D02*G75*G03X80800Y307500I800J0D01*G01* -G75*G03X79200Y307500I-800J0D01*G01* -Y296600D02*G75*G03X80800Y296600I800J0D01*G01* -G75*G03X79200Y296600I-800J0D01*G01* -Y285700D02*G75*G03X80800Y285700I800J0D01*G01* -G75*G03X79200Y285700I-800J0D01*G01* -Y274800D02*G75*G03X80800Y274800I800J0D01*G01* -G75*G03X79200Y274800I-800J0D01*G01* -Y263900D02*G75*G03X80800Y263900I800J0D01*G01* -G75*G03X79200Y263900I-800J0D01*G01* -X69200Y302100D02*G75*G03X70800Y302100I800J0D01*G01* -G75*G03X69200Y302100I-800J0D01*G01* -Y291200D02*G75*G03X70800Y291200I800J0D01*G01* -G75*G03X69200Y291200I-800J0D01*G01* -Y280300D02*G75*G03X70800Y280300I800J0D01*G01* -G75*G03X69200Y280300I-800J0D01*G01* -Y269400D02*G75*G03X70800Y269400I800J0D01*G01* -G75*G03X69200Y269400I-800J0D01*G01* -X309200Y335000D02*G75*G03X310800Y335000I800J0D01*G01* -G75*G03X309200Y335000I-800J0D01*G01* -X319200D02*G75*G03X320800Y335000I800J0D01*G01* -G75*G03X319200Y335000I-800J0D01*G01* -X561700Y330000D02*G75*G03X563300Y330000I800J0D01*G01* -G75*G03X561700Y330000I-800J0D01*G01* -Y370000D02*G75*G03X563300Y370000I800J0D01*G01* -G75*G03X561700Y370000I-800J0D01*G01* -X231700Y195000D02*G75*G03X233300Y195000I800J0D01*G01* -G75*G03X231700Y195000I-800J0D01*G01* -X271700D02*G75*G03X273300Y195000I800J0D01*G01* -G75*G03X271700Y195000I-800J0D01*G01* -X531700Y370000D02*G75*G03X533300Y370000I800J0D01*G01* -G75*G03X531700Y370000I-800J0D01*G01* -Y330000D02*G75*G03X533300Y330000I800J0D01*G01* -G75*G03X531700Y330000I-800J0D01*G01* -X441700Y315000D02*G75*G03X443300Y315000I800J0D01*G01* -G75*G03X441700Y315000I-800J0D01*G01* -Y275000D02*G75*G03X443300Y275000I800J0D01*G01* -G75*G03X441700Y275000I-800J0D01*G01* -X191700Y335000D02*G75*G03X193300Y335000I800J0D01*G01* -G75*G03X191700Y335000I-800J0D01*G01* -X201700D02*G75*G03X203300Y335000I800J0D01*G01* -G75*G03X201700Y335000I-800J0D01*G01* -X319200Y260000D02*G75*G03X320800Y260000I800J0D01*G01* -G75*G03X319200Y260000I-800J0D01*G01* -X309200D02*G75*G03X310800Y260000I800J0D01*G01* -G75*G03X309200Y260000I-800J0D01*G01* -X441700Y330000D02*G75*G03X443300Y330000I800J0D01*G01* -G75*G03X441700Y330000I-800J0D01*G01* -Y370000D02*G75*G03X443300Y370000I800J0D01*G01* -G75*G03X441700Y370000I-800J0D01*G01* -X241700Y235000D02*G75*G03X243300Y235000I800J0D01*G01* -G75*G03X241700Y235000I-800J0D01*G01* -X251700D02*G75*G03X253300Y235000I800J0D01*G01* -G75*G03X251700Y235000I-800J0D01*G01* -X546700Y330000D02*G75*G03X548300Y330000I800J0D01*G01* -G75*G03X546700Y330000I-800J0D01*G01* -Y370000D02*G75*G03X548300Y370000I800J0D01*G01* -G75*G03X546700Y370000I-800J0D01*G01* -X459200Y260000D02*G75*G03X460800Y260000I800J0D01*G01* -G75*G03X459200Y260000I-800J0D01*G01* -X499200D02*G75*G03X500800Y260000I800J0D01*G01* -G75*G03X499200Y260000I-800J0D01*G01* -X439200D02*G75*G03X440800Y260000I800J0D01*G01* -G75*G03X439200Y260000I-800J0D01*G01* -X399200D02*G75*G03X400800Y260000I800J0D01*G01* -G75*G03X399200Y260000I-800J0D01*G01* -X424200Y330000D02*G75*G03X425800Y330000I800J0D01*G01* -G75*G03X424200Y330000I-800J0D01*G01* -Y370000D02*G75*G03X425800Y370000I800J0D01*G01* -G75*G03X424200Y370000I-800J0D01*G01* -X614200Y60000D02*G75*G03X615800Y60000I800J0D01*G01* -G75*G03X614200Y60000I-800J0D01*G01* -Y70000D02*G75*G03X615800Y70000I800J0D01*G01* -G75*G03X614200Y70000I-800J0D01*G01* -X341700Y260000D02*G75*G03X343300Y260000I800J0D01*G01* -G75*G03X341700Y260000I-800J0D01*G01* -X381700D02*G75*G03X383300Y260000I800J0D01*G01* -G75*G03X381700Y260000I-800J0D01*G01* -X556700D02*G75*G03X558300Y260000I800J0D01*G01* -G75*G03X556700Y260000I-800J0D01*G01* -X516700D02*G75*G03X518300Y260000I800J0D01*G01* -G75*G03X516700Y260000I-800J0D01*G01* -X614200D02*G75*G03X615800Y260000I800J0D01*G01* -G75*G03X614200Y260000I-800J0D01*G01* -X574200D02*G75*G03X575800Y260000I800J0D01*G01* -G75*G03X574200Y260000I-800J0D01*G01* -X314200Y365000D02*G75*G03X315800Y365000I800J0D01*G01* -G75*G03X314200Y365000I-800J0D01*G01* -Y355000D02*G75*G03X315800Y355000I800J0D01*G01* -G75*G03X314200Y355000I-800J0D01*G01* -X459200Y370000D02*G75*G03X460800Y370000I800J0D01*G01* -G75*G03X459200Y370000I-800J0D01*G01* -Y330000D02*G75*G03X460800Y330000I800J0D01*G01* -G75*G03X459200Y330000I-800J0D01*G01* -X614200Y40000D02*G75*G03X615800Y40000I800J0D01*G01* -G75*G03X614200Y40000I-800J0D01*G01* -Y30000D02*G75*G03X615800Y30000I800J0D01*G01* -G75*G03X614200Y30000I-800J0D01*G01* -X289200Y360000D02*G75*G03X290800Y360000I800J0D01*G01* -G75*G03X289200Y360000I-800J0D01*G01* -X279200D02*G75*G03X280800Y360000I800J0D01*G01* -G75*G03X279200Y360000I-800J0D01*G01* -X241700Y260000D02*G75*G03X243300Y260000I800J0D01*G01* -G75*G03X241700Y260000I-800J0D01*G01* -X251700D02*G75*G03X253300Y260000I800J0D01*G01* -G75*G03X251700Y260000I-800J0D01*G01* -X286700D02*G75*G03X288300Y260000I800J0D01*G01* -G75*G03X286700Y260000I-800J0D01*G01* -X276700D02*G75*G03X278300Y260000I800J0D01*G01* -G75*G03X276700Y260000I-800J0D01*G01* -X216700Y235000D02*G75*G03X218300Y235000I800J0D01*G01* -G75*G03X216700Y235000I-800J0D01*G01* -X176700D02*G75*G03X178300Y235000I800J0D01*G01* -G75*G03X176700Y235000I-800J0D01*G01* -X424200Y315000D02*G75*G03X425800Y315000I800J0D01*G01* -G75*G03X424200Y315000I-800J0D01*G01* -Y275000D02*G75*G03X425800Y275000I800J0D01*G01* -G75*G03X424200Y275000I-800J0D01*G01* -X279200Y335000D02*G75*G03X280800Y335000I800J0D01*G01* -G75*G03X279200Y335000I-800J0D01*G01* -X289200D02*G75*G03X290800Y335000I800J0D01*G01* -G75*G03X289200Y335000I-800J0D01*G01* -X496700Y40000D02*G75*G03X498300Y40000I800J0D01*G01* -G75*G03X496700Y40000I-800J0D01*G01* -X279200Y322500D02*G75*G03X280800Y322500I800J0D01*G01* -G75*G03X279200Y322500I-800J0D01*G01* -X241700Y245000D02*G75*G03X243300Y245000I800J0D01*G01* -G75*G03X241700Y245000I-800J0D01*G01* -X431700Y60000D02*G75*G03X433300Y60000I800J0D01*G01* -G75*G03X431700Y60000I-800J0D01*G01* -X239200Y80000D02*G75*G03X240800Y80000I800J0D01*G01* -G75*G03X239200Y80000I-800J0D01*G01* -X176700Y125000D02*G75*G03X178300Y125000I800J0D01*G01* -G75*G03X176700Y125000I-800J0D01*G01* -X371700Y40000D02*G75*G03X373300Y40000I800J0D01*G01* -G75*G03X371700Y40000I-800J0D01*G01* -X399200Y85000D02*G75*G03X400800Y85000I800J0D01*G01* -G75*G03X399200Y85000I-800J0D01*G01* -X151700Y347500D02*G75*G03X153300Y347500I800J0D01*G01* -G75*G03X151700Y347500I-800J0D01*G01* -X496700Y142500D02*G75*G03X498300Y142500I800J0D01*G01* -G75*G03X496700Y142500I-800J0D01*G01* -X194200Y30000D02*G75*G03X195800Y30000I800J0D01*G01* -G75*G03X194200Y30000I-800J0D01*G01* -X216700Y187500D02*G75*G03X218300Y187500I800J0D01*G01* -G75*G03X216700Y187500I-800J0D01*G01* -X186700Y235000D02*G75*G03X188300Y235000I800J0D01*G01* -G75*G03X186700Y235000I-800J0D01*G01* -X471700Y322500D02*G75*G03X473300Y322500I800J0D01*G01* -G75*G03X471700Y322500I-800J0D01*G01* -X601700Y252500D02*G75*G03X603300Y252500I800J0D01*G01* -G75*G03X601700Y252500I-800J0D01*G01* -X399200Y245000D02*G75*G03X400800Y245000I800J0D01*G01* -G75*G03X399200Y245000I-800J0D01*G01* -X261700Y302500D02*G75*G03X263300Y302500I800J0D01*G01* -G75*G03X261700Y302500I-800J0D01*G01* -X159200Y335000D02*G75*G03X160800Y335000I800J0D01*G01* -G75*G03X159200Y335000I-800J0D01*G01* -X224200Y117500D02*G75*G03X225800Y117500I800J0D01*G01* -G75*G03X224200Y117500I-800J0D01*G01* -X519200Y340000D02*G75*G03X520800Y340000I800J0D01*G01* -G75*G03X519200Y340000I-800J0D01*G01* -X384200Y245000D02*G75*G03X385800Y245000I800J0D01*G01* -G75*G03X384200Y245000I-800J0D01*G01* -X186700Y302500D02*G75*G03X188300Y302500I800J0D01*G01* -G75*G03X186700Y302500I-800J0D01*G01* -X224200Y97500D02*G75*G03X225800Y97500I800J0D01*G01* -G75*G03X224200Y97500I-800J0D01*G01* -X431700Y227500D02*G75*G03X433300Y227500I800J0D01*G01* -G75*G03X431700Y227500I-800J0D01*G01* -X251700Y125000D02*G75*G03X253300Y125000I800J0D01*G01* -G75*G03X251700Y125000I-800J0D01*G01* -X241700D02*G75*G03X243300Y125000I800J0D01*G01* -G75*G03X241700Y125000I-800J0D01*G01* -X544200Y62500D02*G75*G03X545800Y62500I800J0D01*G01* -G75*G03X544200Y62500I-800J0D01*G01* -X301700Y322500D02*G75*G03X303300Y322500I800J0D01*G01* -G75*G03X301700Y322500I-800J0D01*G01* -X294200Y350000D02*G75*G03X295800Y350000I800J0D01*G01* -G75*G03X294200Y350000I-800J0D01*G01* -X176700Y245000D02*G75*G03X178300Y245000I800J0D01*G01* -G75*G03X176700Y245000I-800J0D01*G01* -X189200Y135000D02*G75*G03X190800Y135000I800J0D01*G01* -G75*G03X189200Y135000I-800J0D01*G01* -X251700Y97500D02*G75*G03X253300Y97500I800J0D01*G01* -G75*G03X251700Y97500I-800J0D01*G01* -X614200Y302500D02*G75*G03X615800Y302500I800J0D01*G01* -G75*G03X614200Y302500I-800J0D01*G01* -X384200Y70000D02*G75*G03X385800Y70000I800J0D01*G01* -G75*G03X384200Y70000I-800J0D01*G01* -X471700Y245000D02*G75*G03X473300Y245000I800J0D01*G01* -G75*G03X471700Y245000I-800J0D01*G01* -X261700Y207500D02*G75*G03X263300Y207500I800J0D01*G01* -G75*G03X261700Y207500I-800J0D01*G01* -Y235000D02*G75*G03X263300Y235000I800J0D01*G01* -G75*G03X261700Y235000I-800J0D01*G01* -X151700Y227500D02*G75*G03X153300Y227500I800J0D01*G01* -G75*G03X151700Y227500I-800J0D01*G01* -X604200Y60000D02*G75*G03X605800Y60000I800J0D01*G01* -G75*G03X604200Y60000I-800J0D01*G01* -X206700Y155000D02*G75*G03X208300Y155000I800J0D01*G01* -G75*G03X206700Y155000I-800J0D01*G01* -X516700Y245000D02*G75*G03X518300Y245000I800J0D01*G01* -G75*G03X516700Y245000I-800J0D01*G01* -X159200D02*G75*G03X160800Y245000I800J0D01*G01* -G75*G03X159200Y245000I-800J0D01*G01* -X551700Y70000D02*G75*G03X553300Y70000I800J0D01*G01* -G75*G03X551700Y70000I-800J0D01*G01* -X391700Y77500D02*G75*G03X393300Y77500I800J0D01*G01* -G75*G03X391700Y77500I-800J0D01*G01* -X386700Y267500D02*G75*G03X388300Y267500I800J0D01*G01* -G75*G03X386700Y267500I-800J0D01*G01* -X269200Y287500D02*G75*G03X270800Y287500I800J0D01*G01* -G75*G03X269200Y287500I-800J0D01*G01* -X359200Y267500D02*G75*G03X360800Y267500I800J0D01*G01* -G75*G03X359200Y267500I-800J0D01*G01* -X409200Y340000D02*G75*G03X410800Y340000I800J0D01*G01* -G75*G03X409200Y340000I-800J0D01*G01* -X269200Y380000D02*G75*G03X270800Y380000I800J0D01*G01* -G75*G03X269200Y380000I-800J0D01*G01* -X359200D02*G75*G03X360800Y380000I800J0D01*G01* -G75*G03X359200Y380000I-800J0D01*G01* -X189200Y97500D02*G75*G03X190800Y97500I800J0D01*G01* -G75*G03X189200Y97500I-800J0D01*G01* -X269200Y260000D02*G75*G03X270800Y260000I800J0D01*G01* -G75*G03X269200Y260000I-800J0D01*G01* -X326700Y380000D02*G75*G03X328300Y380000I800J0D01*G01* -G75*G03X326700Y380000I-800J0D01*G01* -X159200Y285000D02*G75*G03X160800Y285000I800J0D01*G01* -G75*G03X159200Y285000I-800J0D01*G01* -X14200Y526250D02*G75*G03X15800Y526250I800J0D01*G01* -G75*G03X14200Y526250I-800J0D01*G01* -X135000Y528500D02*Y527750D01* -X136500Y526250D01* -X138000Y527750D01* -Y528500D02*Y527750D01* -X136500Y526250D02*Y522500D01* -X139801Y525500D02*X142051D01* -X139801Y522500D02*X142801D01* -X139801Y528500D02*Y522500D01* -Y528500D02*X142801D01* -X147603D02*X148353Y527750D01* -X145353Y528500D02*X147603D01* -X144603Y527750D02*X145353Y528500D01* -X144603Y527750D02*Y526250D01* -X145353Y525500D01* -X147603D01* -X148353Y524750D01* -Y523250D01* -X147603Y522500D02*X148353Y523250D01* -X145353Y522500D02*X147603D01* -X144603Y523250D02*X145353Y522500D01* -X135000Y519249D02*X150154D01* -X98750Y522500D02*X100250D01* -X99500Y528500D02*Y522500D01* -X98000Y527000D02*X99500Y528500D01* -X102051Y527750D02*X102801Y528500D01* -X105051D01* -X105801Y527750D01* -Y526250D01* -X102051Y522500D02*X105801Y526250D01* -X102051Y522500D02*X105801D01* -X107603D02*X110603Y525500D01* -Y527750D02*Y525500D01* -X109853Y528500D02*X110603Y527750D01* -X108353Y528500D02*X109853D01* -X107603Y527750D02*X108353Y528500D01* -X107603Y527750D02*Y526250D01* -X108353Y525500D01* -X110603D01* -X98000Y519249D02*X112404D01* -X45000Y523250D02*X45750Y522500D01* -X45000Y527750D02*Y523250D01* -Y527750D02*X45750Y528500D01* -X47250D01* -X48000Y527750D01* -Y523250D01* -X47250Y522500D02*X48000Y523250D01* -X45750Y522500D02*X47250D01* -X45000Y524000D02*X48000Y527000D01* -X49801Y522500D02*X50551D01* -X52353Y523250D02*X53103Y522500D01* -X52353Y527750D02*Y523250D01* -Y527750D02*X53103Y528500D01* -X54603D01* -X55353Y527750D01* -Y523250D01* -X54603Y522500D02*X55353Y523250D01* -X53103Y522500D02*X54603D01* -X52353Y524000D02*X55353Y527000D01* -X57154Y527750D02*X57904Y528500D01* -X59404D01* -X60154Y527750D01* -Y523250D01* -X59404Y522500D02*X60154Y523250D01* -X57904Y522500D02*X59404D01* -X57154Y523250D02*X57904Y522500D01* -Y525500D02*X60154D01* -X61956Y528500D02*X64956D01* -X61956D02*Y525500D01* -X62706Y526250D01* -X64206D01* -X64956Y525500D01* -Y523250D01* -X64206Y522500D02*X64956Y523250D01* -X62706Y522500D02*X64206D01* -X61956Y523250D02*X62706Y522500D01* -X45000Y519249D02*X66757D01* -X651300Y363700D02*X653700Y361300D01* -X651300D02*X653700Y363700D01* -X651300Y353700D02*X653700Y351300D01* -X651300D02*X653700Y353700D01* -X651300Y343700D02*X653700Y341300D01* -X651300D02*X653700Y343700D01* -X651300Y333700D02*X653700Y331300D01* -X651300D02*X653700Y333700D01* -X651300Y323700D02*X653700Y321300D01* -X651300D02*X653700Y323700D01* -X651300Y313700D02*X653700Y311300D01* -X651300D02*X653700Y313700D01* -X651300Y303700D02*X653700Y301300D01* -X651300D02*X653700Y303700D01* -X651300Y293700D02*X653700Y291300D01* -X651300D02*X653700Y293700D01* -X651300Y283700D02*X653700Y281300D01* -X651300D02*X653700Y283700D01* -X651300Y273700D02*X653700Y271300D01* -X651300D02*X653700Y273700D01* -X651300Y263700D02*X653700Y261300D01* -X651300D02*X653700Y263700D01* -X651300Y253700D02*X653700Y251300D01* -X651300D02*X653700Y253700D01* -X651300Y243700D02*X653700Y241300D01* -X651300D02*X653700Y243700D01* -X651300Y233700D02*X653700Y231300D01* -X651300D02*X653700Y233700D01* -X651300Y223700D02*X653700Y221300D01* -X651300D02*X653700Y223700D01* -X651300Y213700D02*X653700Y211300D01* -X651300D02*X653700Y213700D01* -X651300Y203700D02*X653700Y201300D01* -X651300D02*X653700Y203700D01* -X651300Y193700D02*X653700Y191300D01* -X651300D02*X653700Y193700D01* -X651300Y183700D02*X653700Y181300D01* -X651300D02*X653700Y183700D01* -X651300Y173700D02*X653700Y171300D01* -X651300D02*X653700Y173700D01* -X651300Y163700D02*X653700Y161300D01* -X651300D02*X653700Y163700D01* -X651300Y153700D02*X653700Y151300D01* -X651300D02*X653700Y153700D01* -X651300Y143700D02*X653700Y141300D01* -X651300D02*X653700Y143700D01* -X651300Y133700D02*X653700Y131300D01* -X651300D02*X653700Y133700D01* -X651300Y123700D02*X653700Y121300D01* -X651300D02*X653700Y123700D01* -X651300Y113700D02*X653700Y111300D01* -X651300D02*X653700Y113700D01* -X651300Y103700D02*X653700Y101300D01* -X651300D02*X653700Y103700D01* -X651300Y93700D02*X653700Y91300D01* -X651300D02*X653700Y93700D01* -X651300Y83700D02*X653700Y81300D01* -X651300D02*X653700Y83700D01* -X651300Y73700D02*X653700Y71300D01* -X651300D02*X653700Y73700D01* -X651300Y63700D02*X653700Y61300D01* -X651300D02*X653700Y63700D01* -X651300Y53700D02*X653700Y51300D01* -X651300D02*X653700Y53700D01* -X641300Y363700D02*X643700Y361300D01* -X641300D02*X643700Y363700D01* -X641300Y353700D02*X643700Y351300D01* -X641300D02*X643700Y353700D01* -X641300Y343700D02*X643700Y341300D01* -X641300D02*X643700Y343700D01* -X641300Y333700D02*X643700Y331300D01* -X641300D02*X643700Y333700D01* -X641300Y323700D02*X643700Y321300D01* -X641300D02*X643700Y323700D01* -X641300Y313700D02*X643700Y311300D01* -X641300D02*X643700Y313700D01* -X641300Y303700D02*X643700Y301300D01* -X641300D02*X643700Y303700D01* -X641300Y293700D02*X643700Y291300D01* -X641300D02*X643700Y293700D01* -X641300Y283700D02*X643700Y281300D01* -X641300D02*X643700Y283700D01* -X641300Y273700D02*X643700Y271300D01* -X641300D02*X643700Y273700D01* -X641300Y263700D02*X643700Y261300D01* -X641300D02*X643700Y263700D01* -X641300Y253700D02*X643700Y251300D01* -X641300D02*X643700Y253700D01* -X641300Y243700D02*X643700Y241300D01* -X641300D02*X643700Y243700D01* -X641300Y233700D02*X643700Y231300D01* -X641300D02*X643700Y233700D01* -X641300Y223700D02*X643700Y221300D01* -X641300D02*X643700Y223700D01* -X641300Y213700D02*X643700Y211300D01* -X641300D02*X643700Y213700D01* -X641300Y203700D02*X643700Y201300D01* -X641300D02*X643700Y203700D01* -X641300Y193700D02*X643700Y191300D01* -X641300D02*X643700Y193700D01* -X641300Y183700D02*X643700Y181300D01* -X641300D02*X643700Y183700D01* -X641300Y173700D02*X643700Y171300D01* -X641300D02*X643700Y173700D01* -X641300Y163700D02*X643700Y161300D01* -X641300D02*X643700Y163700D01* -X641300Y153700D02*X643700Y151300D01* -X641300D02*X643700Y153700D01* -X641300Y143700D02*X643700Y141300D01* -X641300D02*X643700Y143700D01* -X641300Y133700D02*X643700Y131300D01* -X641300D02*X643700Y133700D01* -X641300Y123700D02*X643700Y121300D01* -X641300D02*X643700Y123700D01* -X641300Y113700D02*X643700Y111300D01* -X641300D02*X643700Y113700D01* -X641300Y103700D02*X643700Y101300D01* -X641300D02*X643700Y103700D01* -X641300Y93700D02*X643700Y91300D01* -X641300D02*X643700Y93700D01* -X641300Y83700D02*X643700Y81300D01* -X641300D02*X643700Y83700D01* -X641300Y73700D02*X643700Y71300D01* -X641300D02*X643700Y73700D01* -X641300Y63700D02*X643700Y61300D01* -X641300D02*X643700Y63700D01* -X641300Y53700D02*X643700Y51300D01* -X641300D02*X643700Y53700D01* -X631300Y363700D02*X633700Y361300D01* -X631300D02*X633700Y363700D01* -X631300Y353700D02*X633700Y351300D01* -X631300D02*X633700Y353700D01* -X631300Y343700D02*X633700Y341300D01* -X631300D02*X633700Y343700D01* -X631300Y333700D02*X633700Y331300D01* -X631300D02*X633700Y333700D01* -X631300Y323700D02*X633700Y321300D01* -X631300D02*X633700Y323700D01* -X631300Y313700D02*X633700Y311300D01* -X631300D02*X633700Y313700D01* -X631300Y303700D02*X633700Y301300D01* -X631300D02*X633700Y303700D01* -X631300Y293700D02*X633700Y291300D01* -X631300D02*X633700Y293700D01* -X631300Y283700D02*X633700Y281300D01* -X631300D02*X633700Y283700D01* -X631300Y273700D02*X633700Y271300D01* -X631300D02*X633700Y273700D01* -X631300Y263700D02*X633700Y261300D01* -X631300D02*X633700Y263700D01* -X631300Y253700D02*X633700Y251300D01* -X631300D02*X633700Y253700D01* -X631300Y243700D02*X633700Y241300D01* -X631300D02*X633700Y243700D01* -X631300Y233700D02*X633700Y231300D01* -X631300D02*X633700Y233700D01* -X631300Y223700D02*X633700Y221300D01* -X631300D02*X633700Y223700D01* -X631300Y213700D02*X633700Y211300D01* -X631300D02*X633700Y213700D01* -X631300Y203700D02*X633700Y201300D01* -X631300D02*X633700Y203700D01* -X631300Y193700D02*X633700Y191300D01* -X631300D02*X633700Y193700D01* -X631300Y183700D02*X633700Y181300D01* -X631300D02*X633700Y183700D01* -X631300Y173700D02*X633700Y171300D01* -X631300D02*X633700Y173700D01* -X631300Y163700D02*X633700Y161300D01* -X631300D02*X633700Y163700D01* -X631300Y153700D02*X633700Y151300D01* -X631300D02*X633700Y153700D01* -X631300Y143700D02*X633700Y141300D01* -X631300D02*X633700Y143700D01* -X631300Y133700D02*X633700Y131300D01* -X631300D02*X633700Y133700D01* -X631300Y123700D02*X633700Y121300D01* -X631300D02*X633700Y123700D01* -X631300Y113700D02*X633700Y111300D01* -X631300D02*X633700Y113700D01* -X631300Y103700D02*X633700Y101300D01* -X631300D02*X633700Y103700D01* -X631300Y93700D02*X633700Y91300D01* -X631300D02*X633700Y93700D01* -X631300Y83700D02*X633700Y81300D01* -X631300D02*X633700Y83700D01* -X631300Y73700D02*X633700Y71300D01* -X631300D02*X633700Y73700D01* -X631300Y63700D02*X633700Y61300D01* -X631300D02*X633700Y63700D01* -X631300Y53700D02*X633700Y51300D01* -X631300D02*X633700Y53700D01* -X231300Y216200D02*X233700Y213800D01* -X231300D02*X233700Y216200D01* -X271300D02*X273700Y213800D01* -X271300D02*X273700Y216200D01* -X216300Y136200D02*X218700Y133800D01* -X216300D02*X218700Y136200D01* -X176300D02*X178700Y133800D01* -X176300D02*X178700Y136200D01* -X176300Y216200D02*X178700Y213800D01* -X176300D02*X178700Y216200D01* -X216300D02*X218700Y213800D01* -X216300D02*X218700Y216200D01* -X271300Y176200D02*X273700Y173800D01* -X271300D02*X273700Y176200D01* -X231300D02*X233700Y173800D01* -X231300D02*X233700Y176200D01* -X216300D02*X218700Y173800D01* -X216300D02*X218700Y176200D01* -X176300D02*X178700Y173800D01* -X176300D02*X178700Y176200D01* -X216300Y261200D02*X218700Y258800D01* -X216300D02*X218700Y261200D01* -X176300D02*X178700Y258800D01* -X176300D02*X178700Y261200D01* -X13800Y542450D02*X16200Y540050D01* -X13800D02*X16200Y542450D01* -X135000Y543500D02*Y542750D01* -X136500Y541250D01* -X138000Y542750D01* -Y543500D02*Y542750D01* -X136500Y541250D02*Y537500D01* -X139801Y540500D02*X142051D01* -X139801Y537500D02*X142801D01* -X139801Y543500D02*Y537500D01* -Y543500D02*X142801D01* -X147603D02*X148353Y542750D01* -X145353Y543500D02*X147603D01* -X144603Y542750D02*X145353Y543500D01* -X144603Y542750D02*Y541250D01* -X145353Y540500D01* -X147603D01* -X148353Y539750D01* -Y538250D01* -X147603Y537500D02*X148353Y538250D01* -X145353Y537500D02*X147603D01* -X144603Y538250D02*X145353Y537500D01* -X135000Y534249D02*X150154D01* -X98750Y537500D02*X100250D01* -X99500Y543500D02*Y537500D01* -X98000Y542000D02*X99500Y543500D01* -X102051Y538250D02*X102801Y537500D01* -X102051Y542750D02*Y538250D01* -Y542750D02*X102801Y543500D01* -X104301D01* -X105051Y542750D01* -Y538250D01* -X104301Y537500D02*X105051Y538250D01* -X102801Y537500D02*X104301D01* -X102051Y539000D02*X105051Y542000D01* -X106853Y538250D02*X107603Y537500D01* -X106853Y539750D02*Y538250D01* -Y539750D02*X107603Y540500D01* -X109103D01* -X109853Y539750D01* -Y538250D01* -X109103Y537500D02*X109853Y538250D01* -X107603Y537500D02*X109103D01* -X106853Y541250D02*X107603Y540500D01* -X106853Y542750D02*Y541250D01* -Y542750D02*X107603Y543500D01* -X109103D01* -X109853Y542750D01* -Y541250D01* -X109103Y540500D02*X109853Y541250D01* -X98000Y534249D02*X111654D01* -X45000Y538250D02*X45750Y537500D01* -X45000Y542750D02*Y538250D01* -Y542750D02*X45750Y543500D01* -X47250D01* -X48000Y542750D01* -Y538250D01* -X47250Y537500D02*X48000Y538250D01* -X45750Y537500D02*X47250D01* -X45000Y539000D02*X48000Y542000D01* -X49801Y537500D02*X50551D01* -X52353Y538250D02*X53103Y537500D01* -X52353Y542750D02*Y538250D01* -Y542750D02*X53103Y543500D01* -X54603D01* -X55353Y542750D01* -Y538250D01* -X54603Y537500D02*X55353Y538250D01* -X53103Y537500D02*X54603D01* -X52353Y539000D02*X55353Y542000D01* -X57154Y542750D02*X57904Y543500D01* -X59404D01* -X60154Y542750D01* -Y538250D01* -X59404Y537500D02*X60154Y538250D01* -X57904Y537500D02*X59404D01* -X57154Y538250D02*X57904Y537500D01* -Y540500D02*X60154D01* -X61956Y538250D02*X62706Y537500D01* -X61956Y542750D02*Y538250D01* -Y542750D02*X62706Y543500D01* -X64206D01* -X64956Y542750D01* -Y538250D01* -X64206Y537500D02*X64956Y538250D01* -X62706Y537500D02*X64206D01* -X61956Y539000D02*X64956Y542000D01* -X45000Y534249D02*X66757D01* -X177500Y86600D02*Y83400D01* -X175900Y85000D02*X179100D01* -X177500Y66600D02*Y63400D01* -X175900Y65000D02*X179100D01* -X195000Y61600D02*Y58400D01* -X193400Y60000D02*X196600D01* -X205000Y61600D02*Y58400D01* -X203400Y60000D02*X206600D01* -X215000Y61600D02*Y58400D01* -X213400Y60000D02*X216600D01* -X225000Y61600D02*Y58400D01* -X223400Y60000D02*X226600D01* -X235000Y61600D02*Y58400D01* -X233400Y60000D02*X236600D01* -X245000Y61600D02*Y58400D01* -X243400Y60000D02*X246600D01* -X255000Y61600D02*Y58400D01* -X253400Y60000D02*X256600D01* -X255000Y91600D02*Y88400D01* -X253400Y90000D02*X256600D01* -X245000Y91600D02*Y88400D01* -X243400Y90000D02*X246600D01* -X235000Y91600D02*Y88400D01* -X233400Y90000D02*X236600D01* -X225000Y91600D02*Y88400D01* -X223400Y90000D02*X226600D01* -X215000Y91600D02*Y88400D01* -X213400Y90000D02*X216600D01* -X205000Y91600D02*Y88400D01* -X203400Y90000D02*X206600D01* -X195000Y91600D02*Y88400D01* -X193400Y90000D02*X196600D01* -X250000Y381600D02*Y378400D01* -X248400Y380000D02*X251600D01* -X230000Y381600D02*Y378400D01* -X228400Y380000D02*X231600D01* -X195000Y281600D02*Y278400D01* -X193400Y280000D02*X196600D01* -X205000Y281600D02*Y278400D01* -X203400Y280000D02*X206600D01* -X215000Y281600D02*Y278400D01* -X213400Y280000D02*X216600D01* -X225000Y281600D02*Y278400D01* -X223400Y280000D02*X226600D01* -X235000Y281600D02*Y278400D01* -X233400Y280000D02*X236600D01* -X245000Y281600D02*Y278400D01* -X243400Y280000D02*X246600D01* -X255000Y281600D02*Y278400D01* -X253400Y280000D02*X256600D01* -X255000Y311600D02*Y308400D01* -X253400Y310000D02*X256600D01* -X245000Y311600D02*Y308400D01* -X243400Y310000D02*X246600D01* -X235000Y311600D02*Y308400D01* -X233400Y310000D02*X236600D01* -X225000Y311600D02*Y308400D01* -X223400Y310000D02*X226600D01* -X215000Y311600D02*Y308400D01* -X213400Y310000D02*X216600D01* -X205000Y311600D02*Y308400D01* -X203400Y310000D02*X206600D01* -X195000Y311600D02*Y308400D01* -X193400Y310000D02*X196600D01* -X372500Y336600D02*Y333400D01* -X370900Y335000D02*X374100D01* -X382500Y336600D02*Y333400D01* -X380900Y335000D02*X384100D01* -X392500Y336600D02*Y333400D01* -X390900Y335000D02*X394100D01* -X402500Y336600D02*Y333400D01* -X400900Y335000D02*X404100D01* -X402500Y366600D02*Y363400D01* -X400900Y365000D02*X404100D01* -X392500Y366600D02*Y363400D01* -X390900Y365000D02*X394100D01* -X382500Y366600D02*Y363400D01* -X380900Y365000D02*X384100D01* -X372500Y366600D02*Y363400D01* -X370900Y365000D02*X374100D01* -X397500Y381600D02*Y378400D01* -X395900Y380000D02*X399100D01* -X377500Y381600D02*Y378400D01* -X375900Y380000D02*X379100D01* -X372500Y281600D02*Y278400D01* -X370900Y280000D02*X374100D01* -X382500Y281600D02*Y278400D01* -X380900Y280000D02*X384100D01* -X392500Y281600D02*Y278400D01* -X390900Y280000D02*X394100D01* -X402500Y281600D02*Y278400D01* -X400900Y280000D02*X404100D01* -X402500Y311600D02*Y308400D01* -X400900Y310000D02*X404100D01* -X392500Y311600D02*Y308400D01* -X390900Y310000D02*X394100D01* -X382500Y311600D02*Y308400D01* -X380900Y310000D02*X384100D01* -X372500Y311600D02*Y308400D01* -X370900Y310000D02*X374100D01* -X582500Y336600D02*Y333400D01* -X580900Y335000D02*X584100D01* -X592500Y336600D02*Y333400D01* -X590900Y335000D02*X594100D01* -X602500Y336600D02*Y333400D01* -X600900Y335000D02*X604100D01* -X612500Y336600D02*Y333400D01* -X610900Y335000D02*X614100D01* -X612500Y366600D02*Y363400D01* -X610900Y365000D02*X614100D01* -X602500Y366600D02*Y363400D01* -X600900Y365000D02*X604100D01* -X592500Y366600D02*Y363400D01* -X590900Y365000D02*X594100D01* -X582500Y366600D02*Y363400D01* -X580900Y365000D02*X584100D01* -X482500Y336600D02*Y333400D01* -X480900Y335000D02*X484100D01* -X492500Y336600D02*Y333400D01* -X490900Y335000D02*X494100D01* -X502500Y336600D02*Y333400D01* -X500900Y335000D02*X504100D01* -X512500Y336600D02*Y333400D01* -X510900Y335000D02*X514100D01* -X512500Y366600D02*Y363400D01* -X510900Y365000D02*X514100D01* -X502500Y366600D02*Y363400D01* -X500900Y365000D02*X504100D01* -X492500Y366600D02*Y363400D01* -X490900Y365000D02*X494100D01* -X482500Y366600D02*Y363400D01* -X480900Y365000D02*X484100D01* -X482500Y281600D02*Y278400D01* -X480900Y280000D02*X484100D01* -X492500Y281600D02*Y278400D01* -X490900Y280000D02*X494100D01* -X502500Y281600D02*Y278400D01* -X500900Y280000D02*X504100D01* -X512500Y281600D02*Y278400D01* -X510900Y280000D02*X514100D01* -X522500Y281600D02*Y278400D01* -X520900Y280000D02*X524100D01* -X532500Y281600D02*Y278400D01* -X530900Y280000D02*X534100D01* -X542500Y281600D02*Y278400D01* -X540900Y280000D02*X544100D01* -X552500Y281600D02*Y278400D01* -X550900Y280000D02*X554100D01* -X562500Y281600D02*Y278400D01* -X560900Y280000D02*X564100D01* -X572500Y281600D02*Y278400D01* -X570900Y280000D02*X574100D01* -X582500Y281600D02*Y278400D01* -X580900Y280000D02*X584100D01* -X592500Y281600D02*Y278400D01* -X590900Y280000D02*X594100D01* -X602500Y281600D02*Y278400D01* -X600900Y280000D02*X604100D01* -X612500Y281600D02*Y278400D01* -X610900Y280000D02*X614100D01* -X612500Y311600D02*Y308400D01* -X610900Y310000D02*X614100D01* -X602500Y311600D02*Y308400D01* -X600900Y310000D02*X604100D01* -X592500Y311600D02*Y308400D01* -X590900Y310000D02*X594100D01* -X582500Y311600D02*Y308400D01* -X580900Y310000D02*X584100D01* -X572500Y311600D02*Y308400D01* -X570900Y310000D02*X574100D01* -X562500Y311600D02*Y308400D01* -X560900Y310000D02*X564100D01* -X552500Y311600D02*Y308400D01* -X550900Y310000D02*X554100D01* -X542500Y311600D02*Y308400D01* -X540900Y310000D02*X544100D01* -X532500Y311600D02*Y308400D01* -X530900Y310000D02*X534100D01* -X522500Y311600D02*Y308400D01* -X520900Y310000D02*X524100D01* -X512500Y311600D02*Y308400D01* -X510900Y310000D02*X514100D01* -X502500Y311600D02*Y308400D01* -X500900Y310000D02*X504100D01* -X492500Y311600D02*Y308400D01* -X490900Y310000D02*X494100D01* -X482500Y311600D02*Y308400D01* -X480900Y310000D02*X484100D01* -X607500Y381600D02*Y378400D01* -X605900Y380000D02*X609100D01* -X587500Y381600D02*Y378400D01* -X585900Y380000D02*X589100D01* -X460000Y286600D02*Y283400D01* -X458400Y285000D02*X461600D01* -X460000Y306600D02*Y303400D01* -X458400Y305000D02*X461600D01* -X507500Y381600D02*Y378400D01* -X505900Y380000D02*X509100D01* -X487500Y381600D02*Y378400D01* -X485900Y380000D02*X489100D01* -X177500Y306600D02*Y303400D01* -X175900Y305000D02*X179100D01* -X177500Y286600D02*Y283400D01* -X175900Y285000D02*X179100D01* -X575000Y31600D02*Y28400D01* -X573400Y30000D02*X576600D01* -X575000Y51600D02*Y48400D01* -X573400Y50000D02*X576600D01* -X552500Y51600D02*Y48400D01* -X550900Y50000D02*X554100D01* -X552500Y31600D02*Y28400D01* -X550900Y30000D02*X554100D01* -X197500Y359100D02*Y355900D01* -X195900Y357500D02*X199100D01* -X177500Y359100D02*Y355900D01* -X175900Y357500D02*X179100D01* -X592500Y31600D02*Y28400D01* -X590900Y30000D02*X594100D01* -X592500Y51600D02*Y48400D01* -X590900Y50000D02*X594100D01* -X280000Y281600D02*Y278400D01* -X278400Y280000D02*X281600D01* -X290000Y281600D02*Y278400D01* -X288400Y280000D02*X291600D01* -X300000Y281600D02*Y278400D01* -X298400Y280000D02*X301600D01* -X310000Y281600D02*Y278400D01* -X308400Y280000D02*X311600D01* -X320000Y281600D02*Y278400D01* -X318400Y280000D02*X321600D01* -X330000Y281600D02*Y278400D01* -X328400Y280000D02*X331600D01* -X340000Y281600D02*Y278400D01* -X338400Y280000D02*X341600D01* -X350000Y281600D02*Y278400D01* -X348400Y280000D02*X351600D01* -X350000Y311600D02*Y308400D01* -X348400Y310000D02*X351600D01* -X340000Y311600D02*Y308400D01* -X338400Y310000D02*X341600D01* -X330000Y311600D02*Y308400D01* -X328400Y310000D02*X331600D01* -X320000Y311600D02*Y308400D01* -X318400Y310000D02*X321600D01* -X310000Y311600D02*Y308400D01* -X308400Y310000D02*X311600D01* -X300000Y311600D02*Y308400D01* -X298400Y310000D02*X301600D01* -X290000Y311600D02*Y308400D01* -X288400Y310000D02*X291600D01* -X280000Y311600D02*Y308400D01* -X278400Y310000D02*X281600D01* -X197500Y381600D02*Y378400D01* -X195900Y380000D02*X199100D01* -X177500Y381600D02*Y378400D01* -X175900Y380000D02*X179100D01* -X225000Y336600D02*Y333400D01* -X223400Y335000D02*X226600D01* -X235000Y336600D02*Y333400D01* -X233400Y335000D02*X236600D01* -X245000Y336600D02*Y333400D01* -X243400Y335000D02*X246600D01* -X255000Y336600D02*Y333400D01* -X253400Y335000D02*X256600D01* -X255000Y366600D02*Y363400D01* -X253400Y365000D02*X256600D01* -X245000Y366600D02*Y363400D01* -X243400Y365000D02*X246600D01* -X235000Y366600D02*Y363400D01* -X233400Y365000D02*X236600D01* -X225000Y366600D02*Y363400D01* -X223400Y365000D02*X226600D01* -X15000Y557850D02*Y554650D01* -X13400Y556250D02*X16600D01* -X135000Y558500D02*Y557750D01* -X136500Y556250D01* -X138000Y557750D01* -Y558500D02*Y557750D01* -X136500Y556250D02*Y552500D01* -X139801Y555500D02*X142051D01* -X139801Y552500D02*X142801D01* -X139801Y558500D02*Y552500D01* -Y558500D02*X142801D01* -X147603D02*X148353Y557750D01* -X145353Y558500D02*X147603D01* -X144603Y557750D02*X145353Y558500D01* -X144603Y557750D02*Y556250D01* -X145353Y555500D01* -X147603D01* -X148353Y554750D01* -Y553250D01* -X147603Y552500D02*X148353Y553250D01* -X145353Y552500D02*X147603D01* -X144603Y553250D02*X145353Y552500D01* -X135000Y549249D02*X150154D01* -X98750Y552500D02*X100250D01* -X99500Y558500D02*Y552500D01* -X98000Y557000D02*X99500Y558500D01* -X102051Y557750D02*X102801Y558500D01* -X104301D01* -X105051Y557750D01* -Y553250D01* -X104301Y552500D02*X105051Y553250D01* -X102801Y552500D02*X104301D01* -X102051Y553250D02*X102801Y552500D01* -Y555500D02*X105051D01* -X109103Y558500D02*X109853Y557750D01* -X107603Y558500D02*X109103D01* -X106853Y557750D02*X107603Y558500D01* -X106853Y557750D02*Y553250D01* -X107603Y552500D01* -X109103Y555500D02*X109853Y554750D01* -X106853Y555500D02*X109103D01* -X107603Y552500D02*X109103D01* -X109853Y553250D01* -Y554750D02*Y553250D01* -X98000Y549249D02*X111654D01* -X45000Y553250D02*X45750Y552500D01* -X45000Y557750D02*Y553250D01* -Y557750D02*X45750Y558500D01* -X47250D01* -X48000Y557750D01* -Y553250D01* -X47250Y552500D02*X48000Y553250D01* -X45750Y552500D02*X47250D01* -X45000Y554000D02*X48000Y557000D01* -X49801Y552500D02*X50551D01* -X52353Y553250D02*X53103Y552500D01* -X52353Y557750D02*Y553250D01* -Y557750D02*X53103Y558500D01* -X54603D01* -X55353Y557750D01* -Y553250D01* -X54603Y552500D02*X55353Y553250D01* -X53103Y552500D02*X54603D01* -X52353Y554000D02*X55353Y557000D01* -X57154Y557750D02*X57904Y558500D01* -X60154D01* -X60904Y557750D01* -Y556250D01* -X57154Y552500D02*X60904Y556250D01* -X57154Y552500D02*X60904D01* -X62706Y553250D02*X63456Y552500D01* -X62706Y554750D02*Y553250D01* -Y554750D02*X63456Y555500D01* -X64956D01* -X65706Y554750D01* -Y553250D01* -X64956Y552500D02*X65706Y553250D01* -X63456Y552500D02*X64956D01* -X62706Y556250D02*X63456Y555500D01* -X62706Y557750D02*Y556250D01* -Y557750D02*X63456Y558500D01* -X64956D01* -X65706Y557750D01* -Y556250D01* -X64956Y555500D02*X65706Y556250D01* -X45000Y549249D02*X67507D01* -X102500Y280000D02*Y278400D01* -Y280000D02*X103886Y280800D01* -X102500Y280000D02*X101114Y280800D01* -X365000Y92500D02*Y90900D01* -Y92500D02*X366386Y93300D01* -X365000Y92500D02*X363614Y93300D01* -X282500Y165000D02*Y163400D01* -Y165000D02*X283886Y165800D01* -X282500Y165000D02*X281114Y165800D01* -X315000Y130000D02*Y128400D01* -Y130000D02*X316386Y130800D01* -X315000Y130000D02*X313614Y130800D01* -X427500Y392500D02*Y390900D01* -Y392500D02*X428886Y393300D01* -X427500Y392500D02*X426114Y393300D01* -X402500Y392500D02*Y390900D01* -Y392500D02*X403886Y393300D01* -X402500Y392500D02*X401114Y393300D01* -X360000Y182500D02*Y180900D01* -Y182500D02*X361386Y183300D01* -X360000Y182500D02*X358614Y183300D01* -X87500Y275000D02*Y273400D01* -Y275000D02*X88886Y275800D01* -X87500Y275000D02*X86114Y275800D01* -X247500Y392500D02*Y390900D01* -Y392500D02*X248886Y393300D01* -X247500Y392500D02*X246114Y393300D01* -X367500Y317500D02*Y315900D01* -Y317500D02*X368886Y318300D01* -X367500Y317500D02*X366114Y318300D01* -X225000Y222500D02*Y220900D01* -Y222500D02*X226386Y223300D01* -X225000Y222500D02*X223614Y223300D01* -X225000Y240000D02*Y238400D01* -Y240000D02*X226386Y240800D01* -X225000Y240000D02*X223614Y240800D01* -X442500Y345000D02*Y343400D01* -Y345000D02*X443886Y345800D01* -X442500Y345000D02*X441114Y345800D01* -X352500Y240000D02*Y238400D01* -Y240000D02*X353886Y240800D01* -X352500Y240000D02*X351114Y240800D01* -X507500Y270000D02*Y268400D01* -Y270000D02*X508886Y270800D01* -X507500Y270000D02*X506114Y270800D01* -X345000Y267500D02*Y265900D01* -Y267500D02*X346386Y268300D01* -X345000Y267500D02*X343614Y268300D01* -X507500Y295000D02*Y293400D01* -Y295000D02*X508886Y295800D01* -X507500Y295000D02*X506114Y295800D01* -X315000Y267500D02*Y265900D01* -Y267500D02*X316386Y268300D01* -X315000Y267500D02*X313614Y268300D01* -X477500Y387500D02*Y385900D01* -Y387500D02*X478886Y388300D01* -X477500Y387500D02*X476114Y388300D01* -X477500Y295000D02*Y293400D01* -Y295000D02*X478886Y295800D01* -X477500Y295000D02*X476114Y295800D01* -X417500Y370000D02*Y368400D01* -Y370000D02*X418886Y370800D01* -X417500Y370000D02*X416114Y370800D01* -X295000Y275000D02*Y273400D01* -Y275000D02*X296386Y275800D01* -X295000Y275000D02*X293614Y275800D01* -X155000Y42500D02*Y40900D01* -Y42500D02*X156386Y43300D01* -X155000Y42500D02*X153614Y43300D01* -X360000Y260000D02*Y258400D01* -Y260000D02*X361386Y260800D01* -X360000Y260000D02*X358614Y260800D01* -X425000Y295000D02*Y293400D01* -Y295000D02*X426386Y295800D01* -X425000Y295000D02*X423614Y295800D01* -X205000Y52500D02*Y50900D01* -Y52500D02*X206386Y53300D01* -X205000Y52500D02*X203614Y53300D01* -X547500Y357500D02*Y355900D01* -Y357500D02*X548886Y358300D01* -X547500Y357500D02*X546114Y358300D01* -X532500Y352500D02*Y350900D01* -Y352500D02*X533886Y353300D01* -X532500Y352500D02*X531114Y353300D01* -X562500Y347500D02*Y345900D01* -Y347500D02*X563886Y348300D01* -X562500Y347500D02*X561114Y348300D01* -X332500Y235000D02*Y233400D01* -Y235000D02*X333886Y235800D01* -X332500Y235000D02*X331114Y235800D01* -X492500Y235000D02*Y233400D01* -Y235000D02*X493886Y235800D01* -X492500Y235000D02*X491114Y235800D01* -X210000Y370000D02*Y368400D01* -Y370000D02*X211386Y370800D01* -X210000Y370000D02*X208614Y370800D01* -X592500Y295000D02*Y293400D01* -Y295000D02*X593886Y295800D01* -X592500Y295000D02*X591114Y295800D01* -X482500Y260000D02*Y258400D01* -Y260000D02*X483886Y260800D01* -X482500Y260000D02*X481114Y260800D01* -X477500Y305000D02*Y303400D01* -Y305000D02*X478886Y305800D01* -X477500Y305000D02*X476114Y305800D01* -X160000Y222500D02*Y220900D01* -Y222500D02*X161386Y223300D01* -X160000Y222500D02*X158614Y223300D01* -X480000Y300000D02*Y298400D01* -Y300000D02*X481386Y300800D01* -X480000Y300000D02*X478614Y300800D01* -X92500Y270000D02*Y268400D01* -Y270000D02*X93886Y270800D01* -X92500Y270000D02*X91114Y270800D01* -X397500Y267500D02*Y265900D01* -Y267500D02*X398886Y268300D01* -X397500Y267500D02*X396114Y268300D01* -X442500Y392500D02*Y390900D01* -Y392500D02*X443886Y393300D01* -X442500Y392500D02*X441114Y393300D01* -X365000Y255000D02*Y253400D01* -Y255000D02*X366386Y255800D01* -X365000Y255000D02*X363614Y255800D01* -X417500Y400000D02*Y398400D01* -Y400000D02*X418886Y400800D01* -X417500Y400000D02*X416114Y400800D01* -X565000Y250000D02*Y248400D01* -Y250000D02*X566386Y250800D01* -X565000Y250000D02*X563614Y250800D01* -X435000Y365000D02*Y363400D01* -Y365000D02*X436386Y365800D01* -X435000Y365000D02*X433614Y365800D01* -X305000Y270000D02*Y268400D01* -Y270000D02*X306386Y270800D01* -X305000Y270000D02*X303614Y270800D01* -X442500Y295000D02*Y293400D01* -Y295000D02*X443886Y295800D01* -X442500Y295000D02*X441114Y295800D01* -X102500Y297500D02*Y295900D01* -Y297500D02*X103886Y298300D01* -X102500Y297500D02*X101114Y298300D01* -X377500Y327500D02*Y325900D01* -Y327500D02*X378886Y328300D01* -X377500Y327500D02*X376114Y328300D01* -X352500Y292500D02*Y290900D01* -Y292500D02*X353886Y293300D01* -X352500Y292500D02*X351114Y293300D01* -X350000Y287500D02*Y285900D01* -Y287500D02*X351386Y288300D01* -X350000Y287500D02*X348614Y288300D01* -X372500Y260000D02*Y258400D01* -Y260000D02*X373886Y260800D01* -X372500Y260000D02*X371114Y260800D01* -X310000Y317500D02*Y315900D01* -Y317500D02*X311386Y318300D01* -X310000Y317500D02*X308614Y318300D01* -X215000Y47500D02*Y45900D01* -Y47500D02*X216386Y48300D01* -X215000Y47500D02*X213614Y48300D01* -X285000Y302500D02*Y300900D01* -Y302500D02*X286386Y303300D01* -X285000Y302500D02*X283614Y303300D01* -X225000Y42500D02*Y40900D01* -Y42500D02*X226386Y43300D01* -X225000Y42500D02*X223614Y43300D01* -X377500Y297500D02*Y295900D01* -Y297500D02*X378886Y298300D01* -X377500Y297500D02*X376114Y298300D01* -X315000Y275000D02*Y273400D01* -Y275000D02*X316386Y275800D01* -X315000Y275000D02*X313614Y275800D01* -X325000Y250000D02*Y248400D01* -Y250000D02*X326386Y250800D01* -X325000Y250000D02*X323614Y250800D01* -X527500Y325000D02*Y323400D01* -Y325000D02*X528886Y325800D01* -X527500Y325000D02*X526114Y325800D01* -X532500Y322500D02*Y320900D01* -Y322500D02*X533886Y323300D01* -X532500Y322500D02*X531114Y323300D01* -X545000Y265000D02*Y263400D01* -Y265000D02*X546386Y265800D01* -X545000Y265000D02*X543614Y265800D01* -X557500Y237500D02*Y235900D01* -Y237500D02*X558886Y238300D01* -X557500Y237500D02*X556114Y238300D01* -X612500Y322500D02*Y320900D01* -Y322500D02*X613886Y323300D01* -X612500Y322500D02*X611114Y323300D01* -X200000Y260000D02*Y258400D01* -Y260000D02*X201386Y260800D01* -X200000Y260000D02*X198614Y260800D01* -X155000Y135000D02*Y133400D01* -Y135000D02*X156386Y135800D01* -X155000Y135000D02*X153614Y135800D01* -X165000Y52500D02*Y50900D01* -Y52500D02*X166386Y53300D01* -X165000Y52500D02*X163614Y53300D01* -X160000Y47500D02*Y45900D01* -Y47500D02*X161386Y48300D01* -X160000Y47500D02*X158614Y48300D01* -X200000Y287500D02*Y285900D01* -Y287500D02*X201386Y288300D01* -X200000Y287500D02*X198614Y288300D01* -X460000Y340000D02*Y338400D01* -Y340000D02*X461386Y340800D01* -X460000Y340000D02*X458614Y340800D01* -X335000Y372500D02*Y370900D01* -Y372500D02*X336386Y373300D01* -X335000Y372500D02*X333614Y373300D01* -X15000Y571250D02*Y569650D01* -Y571250D02*X16386Y572050D01* -X15000Y571250D02*X13614Y572050D01* -X135000Y573500D02*Y572750D01* -X136500Y571250D01* -X138000Y572750D01* -Y573500D02*Y572750D01* -X136500Y571250D02*Y567500D01* -X139801Y570500D02*X142051D01* -X139801Y567500D02*X142801D01* -X139801Y573500D02*Y567500D01* -Y573500D02*X142801D01* -X147603D02*X148353Y572750D01* -X145353Y573500D02*X147603D01* -X144603Y572750D02*X145353Y573500D01* -X144603Y572750D02*Y571250D01* -X145353Y570500D01* -X147603D01* -X148353Y569750D01* -Y568250D01* -X147603Y567500D02*X148353Y568250D01* -X145353Y567500D02*X147603D01* -X144603Y568250D02*X145353Y567500D01* -X135000Y564249D02*X150154D01* -X98000Y567500D02*X101750Y571250D01* -Y573500D02*Y571250D01* -X98000Y573500D02*X101750D01* -X103551Y568250D02*X104301Y567500D01* -X103551Y572750D02*Y568250D01* -Y572750D02*X104301Y573500D01* -X105801D01* -X106551Y572750D01* -Y568250D01* -X105801Y567500D02*X106551Y568250D01* -X104301Y567500D02*X105801D01* -X103551Y569000D02*X106551Y572000D01* -X98000Y564249D02*X108353D01* -X45000Y568250D02*X45750Y567500D01* -X45000Y572750D02*Y568250D01* -Y572750D02*X45750Y573500D01* -X47250D01* -X48000Y572750D01* -Y568250D01* -X47250Y567500D02*X48000Y568250D01* -X45750Y567500D02*X47250D01* -X45000Y569000D02*X48000Y572000D01* -X49801Y567500D02*X50551D01* -X52353Y568250D02*X53103Y567500D01* -X52353Y572750D02*Y568250D01* -Y572750D02*X53103Y573500D01* -X54603D01* -X55353Y572750D01* -Y568250D01* -X54603Y567500D02*X55353Y568250D01* -X53103Y567500D02*X54603D01* -X52353Y569000D02*X55353Y572000D01* -X57154Y572750D02*X57904Y573500D01* -X60154D01* -X60904Y572750D01* -Y571250D01* -X57154Y567500D02*X60904Y571250D01* -X57154Y567500D02*X60904D01* -X62706Y568250D02*X63456Y567500D01* -X62706Y572750D02*Y568250D01* -Y572750D02*X63456Y573500D01* -X64956D01* -X65706Y572750D01* -Y568250D01* -X64956Y567500D02*X65706Y568250D01* -X63456Y567500D02*X64956D01* -X62706Y569000D02*X65706Y572000D01* -X45000Y564249D02*X67507D01* -X3000Y588500D02*X3750Y587750D01* -X750Y588500D02*X3000D01* -X0Y587750D02*X750Y588500D01* -X0Y587750D02*Y586250D01* -X750Y585500D01* -X3000D01* -X3750Y584750D01* -Y583250D01* -X3000Y582500D02*X3750Y583250D01* -X750Y582500D02*X3000D01* -X0Y583250D02*X750Y582500D01* -X5551Y585500D02*Y583250D01* -X6301Y582500D01* -X8551Y585500D02*Y581000D01* -X7801Y580250D02*X8551Y581000D01* -X6301Y580250D02*X7801D01* -X5551Y581000D02*X6301Y580250D01* -Y582500D02*X7801D01* -X8551Y583250D01* -X11103Y584750D02*Y582500D01* -Y584750D02*X11853Y585500D01* -X12603D01* -X13353Y584750D01* -Y582500D01* -Y584750D02*X14103Y585500D01* -X14853D01* -X15603Y584750D01* -Y582500D01* -X10353Y585500D02*X11103Y584750D01* -X17404Y588500D02*Y582500D01* -Y583250D02*X18154Y582500D01* -X19654D01* -X20404Y583250D01* -Y584750D02*Y583250D01* -X19654Y585500D02*X20404Y584750D01* -X18154Y585500D02*X19654D01* -X17404Y584750D02*X18154Y585500D01* -X22206Y584750D02*Y583250D01* -Y584750D02*X22956Y585500D01* -X24456D01* -X25206Y584750D01* -Y583250D01* -X24456Y582500D02*X25206Y583250D01* -X22956Y582500D02*X24456D01* -X22206Y583250D02*X22956Y582500D01* -X27007Y588500D02*Y583250D01* -X27757Y582500D01* -X41750Y588500D02*Y582500D01* -X44000Y588500D02*X44750Y587750D01* -Y583250D01* -X44000Y582500D02*X44750Y583250D01* -X41000Y582500D02*X44000D01* -X41000Y588500D02*X44000D01* -X46551Y587000D02*Y586250D01* -Y584750D02*Y582500D01* -X50303Y585500D02*X51053Y584750D01* -X48803Y585500D02*X50303D01* -X48053Y584750D02*X48803Y585500D01* -X48053Y584750D02*Y583250D01* -X48803Y582500D01* -X51053Y585500D02*Y583250D01* -X51803Y582500D01* -X48803D02*X50303D01* -X51053Y583250D01* -X54354Y584750D02*Y582500D01* -Y584750D02*X55104Y585500D01* -X55854D01* -X56604Y584750D01* -Y582500D01* -Y584750D02*X57354Y585500D01* -X58104D01* -X58854Y584750D01* -Y582500D01* -X53604Y585500D02*X54354Y584750D01* -X60656Y582500D02*X61406D01* -X65907Y583250D02*X66657Y582500D01* -X65907Y587750D02*X66657Y588500D01* -X65907Y587750D02*Y583250D01* -X68459Y588500D02*X69959D01* -X69209D02*Y582500D01* -X68459D02*X69959D01* -X72510Y584750D02*Y582500D01* -Y584750D02*X73260Y585500D01* -X74010D01* -X74760Y584750D01* -Y582500D01* -X71760Y585500D02*X72510Y584750D01* -X77312Y585500D02*X79562D01* -X76562Y584750D02*X77312Y585500D01* -X76562Y584750D02*Y583250D01* -X77312Y582500D01* -X79562D01* -X81363Y588500D02*Y582500D01* -Y584750D02*X82113Y585500D01* -X83613D01* -X84363Y584750D01* -Y582500D01* -X86165Y588500D02*X86915Y587750D01* -Y583250D01* -X86165Y582500D02*X86915Y583250D01* -X95750Y582500D02*X98000D01* -X95000Y583250D02*X95750Y582500D01* -X95000Y587750D02*Y583250D01* -Y587750D02*X95750Y588500D01* -X98000D01* -X99801Y584750D02*Y583250D01* -Y584750D02*X100551Y585500D01* -X102051D01* -X102801Y584750D01* -Y583250D01* -X102051Y582500D02*X102801Y583250D01* -X100551Y582500D02*X102051D01* -X99801Y583250D02*X100551Y582500D01* -X104603Y585500D02*Y583250D01* -X105353Y582500D01* -X106853D01* -X107603Y583250D01* -Y585500D02*Y583250D01* -X110154Y584750D02*Y582500D01* -Y584750D02*X110904Y585500D01* -X111654D01* -X112404Y584750D01* -Y582500D01* -X109404Y585500D02*X110154Y584750D01* -X114956Y588500D02*Y583250D01* -X115706Y582500D01* -X114206Y586250D02*X115706D01* -X130750Y588500D02*Y582500D01* -X130000Y588500D02*X133000D01* -X133750Y587750D01* -Y586250D01* -X133000Y585500D02*X133750Y586250D01* -X130750Y585500D02*X133000D01* -X135551Y588500D02*Y583250D01* -X136301Y582500D01* -X140053Y585500D02*X140803Y584750D01* -X138553Y585500D02*X140053D01* -X137803Y584750D02*X138553Y585500D01* -X137803Y584750D02*Y583250D01* -X138553Y582500D01* -X140803Y585500D02*Y583250D01* -X141553Y582500D01* -X138553D02*X140053D01* -X140803Y583250D01* -X144104Y588500D02*Y583250D01* -X144854Y582500D01* -X143354Y586250D02*X144854D01* -X147106Y582500D02*X149356D01* -X146356Y583250D02*X147106Y582500D01* -X146356Y584750D02*Y583250D01* -Y584750D02*X147106Y585500D01* -X148606D01* -X149356Y584750D01* -X146356Y584000D02*X149356D01* -Y584750D02*Y584000D01* -X154157Y588500D02*Y582500D01* -X153407D02*X154157Y583250D01* -X151907Y582500D02*X153407D01* -X151157Y583250D02*X151907Y582500D01* -X151157Y584750D02*Y583250D01* -Y584750D02*X151907Y585500D01* -X153407D01* -X154157Y584750D01* -X157459Y585500D02*Y584750D01* -Y583250D02*Y582500D01* -X155959Y587750D02*Y587000D01* -Y587750D02*X156709Y588500D01* -X158209D01* -X158959Y587750D01* -Y587000D01* -X157459Y585500D02*X158959Y587000D01* -X0Y603500D02*X3000D01* -X1500D02*Y597500D01* -X4801Y603500D02*Y597500D01* -Y599750D02*X5551Y600500D01* -X7051D01* -X7801Y599750D01* -Y597500D01* -X10353D02*X12603D01* -X9603Y598250D02*X10353Y597500D01* -X9603Y599750D02*Y598250D01* -Y599750D02*X10353Y600500D01* -X11853D01* -X12603Y599750D01* -X9603Y599000D02*X12603D01* -Y599750D02*Y599000D01* -X15154Y599750D02*Y597500D01* -Y599750D02*X15904Y600500D01* -X17404D01* -X14404D02*X15154Y599750D01* -X19956Y597500D02*X22206D01* -X19206Y598250D02*X19956Y597500D01* -X19206Y599750D02*Y598250D01* -Y599750D02*X19956Y600500D01* -X21456D01* -X22206Y599750D01* -X19206Y599000D02*X22206D01* -Y599750D02*Y599000D01* -X28957Y600500D02*X29707Y599750D01* -X27457Y600500D02*X28957D01* -X26707Y599750D02*X27457Y600500D01* -X26707Y599750D02*Y598250D01* -X27457Y597500D01* -X29707Y600500D02*Y598250D01* -X30457Y597500D01* -X27457D02*X28957D01* -X29707Y598250D01* -X33009Y599750D02*Y597500D01* -Y599750D02*X33759Y600500D01* -X35259D01* -X32259D02*X33009Y599750D01* -X37810Y597500D02*X40060D01* -X37060Y598250D02*X37810Y597500D01* -X37060Y599750D02*Y598250D01* -Y599750D02*X37810Y600500D01* -X39310D01* -X40060Y599750D01* -X37060Y599000D02*X40060D01* -Y599750D02*Y599000D01* -X45312Y597500D02*X46812D01* -X46062Y603500D02*Y597500D01* -X44562Y602000D02*X46062Y603500D01* -X49363Y597500D02*X50863D01* -X50113Y603500D02*Y597500D01* -X48613Y602000D02*X50113Y603500D01* -X58365D02*Y597500D01* -X57615D02*X58365Y598250D01* -X56115Y597500D02*X57615D01* -X55365Y598250D02*X56115Y597500D01* -X55365Y599750D02*Y598250D01* -Y599750D02*X56115Y600500D01* -X57615D01* -X58365Y599750D01* -X60166Y602000D02*Y601250D01* -Y599750D02*Y597500D01* -X62418Y602750D02*Y597500D01* -Y602750D02*X63168Y603500D01* -X63918D01* -X61668Y600500D02*X63168D01* -X66169Y602750D02*Y597500D01* -Y602750D02*X66919Y603500D01* -X67669D01* -X65419Y600500D02*X66919D01* -X69921Y597500D02*X72171D01* -X69171Y598250D02*X69921Y597500D01* -X69171Y599750D02*Y598250D01* -Y599750D02*X69921Y600500D01* -X71421D01* -X72171Y599750D01* -X69171Y599000D02*X72171D01* -Y599750D02*Y599000D01* -X74722Y599750D02*Y597500D01* -Y599750D02*X75472Y600500D01* -X76972D01* -X73972D02*X74722Y599750D01* -X79524Y597500D02*X81774D01* -X78774Y598250D02*X79524Y597500D01* -X78774Y599750D02*Y598250D01* -Y599750D02*X79524Y600500D01* -X81024D01* -X81774Y599750D01* -X78774Y599000D02*X81774D01* -Y599750D02*Y599000D01* -X84325Y599750D02*Y597500D01* -Y599750D02*X85075Y600500D01* -X85825D01* -X86575Y599750D01* -Y597500D01* -X83575Y600500D02*X84325Y599750D01* -X89127Y603500D02*Y598250D01* -X89877Y597500D01* -X88377Y601250D02*X89877D01* -X97078Y603500D02*Y597500D01* -X96328D02*X97078Y598250D01* -X94828Y597500D02*X96328D01* -X94078Y598250D02*X94828Y597500D01* -X94078Y599750D02*Y598250D01* -Y599750D02*X94828Y600500D01* -X96328D01* -X97078Y599750D01* -X99630D02*Y597500D01* -Y599750D02*X100380Y600500D01* -X101880D01* -X98880D02*X99630Y599750D01* -X103681Y602000D02*Y601250D01* -Y599750D02*Y597500D01* -X105183Y603500D02*Y598250D01* -X105933Y597500D01* -X107434Y603500D02*Y598250D01* -X108184Y597500D01* -X113136D02*X115386D01* -X116136Y598250D01* -X115386Y599000D02*X116136Y598250D01* -X113136Y599000D02*X115386D01* -X112386Y599750D02*X113136Y599000D01* -X112386Y599750D02*X113136Y600500D01* -X115386D01* -X116136Y599750D01* -X112386Y598250D02*X113136Y597500D01* -X117937Y602000D02*Y601250D01* -Y599750D02*Y597500D01* -X119439Y600500D02*X122439D01* -X119439Y597500D02*X122439Y600500D01* -X119439Y597500D02*X122439D01* -X124990D02*X127240D01* -X124240Y598250D02*X124990Y597500D01* -X124240Y599750D02*Y598250D01* -Y599750D02*X124990Y600500D01* -X126490D01* -X127240Y599750D01* -X124240Y599000D02*X127240D01* -Y599750D02*Y599000D01* -X129792Y597500D02*X132042D01* -X132792Y598250D01* -X132042Y599000D02*X132792Y598250D01* -X129792Y599000D02*X132042D01* -X129042Y599750D02*X129792Y599000D01* -X129042Y599750D02*X129792Y600500D01* -X132042D01* -X132792Y599750D01* -X129042Y598250D02*X129792Y597500D01* -X137293Y600500D02*Y598250D01* -X138043Y597500D01* -X139543D01* -X140293Y598250D01* -Y600500D02*Y598250D01* -X142845Y597500D02*X145095D01* -X145845Y598250D01* -X145095Y599000D02*X145845Y598250D01* -X142845Y599000D02*X145095D01* -X142095Y599750D02*X142845Y599000D01* -X142095Y599750D02*X142845Y600500D01* -X145095D01* -X145845Y599750D01* -X142095Y598250D02*X142845Y597500D01* -X148396D02*X150646D01* -X147646Y598250D02*X148396Y597500D01* -X147646Y599750D02*Y598250D01* -Y599750D02*X148396Y600500D01* -X149896D01* -X150646Y599750D01* -X147646Y599000D02*X150646D01* -Y599750D02*Y599000D01* -X155448Y603500D02*Y597500D01* -X154698D02*X155448Y598250D01* -X153198Y597500D02*X154698D01* -X152448Y598250D02*X153198Y597500D01* -X152448Y599750D02*Y598250D01* -Y599750D02*X153198Y600500D01* -X154698D01* -X155448Y599750D01* -X159949Y602000D02*Y601250D01* -Y599750D02*Y597500D01* -X162201Y599750D02*Y597500D01* -Y599750D02*X162951Y600500D01* -X163701D01* -X164451Y599750D01* -Y597500D01* -X161451Y600500D02*X162201Y599750D01* -X169702Y603500D02*Y598250D01* -X170452Y597500D01* -X168952Y601250D02*X170452D01* -X171954Y603500D02*Y597500D01* -Y599750D02*X172704Y600500D01* -X174204D01* -X174954Y599750D01* -Y597500D01* -X176755Y602000D02*Y601250D01* -Y599750D02*Y597500D01* -X179007D02*X181257D01* -X182007Y598250D01* -X181257Y599000D02*X182007Y598250D01* -X179007Y599000D02*X181257D01* -X178257Y599750D02*X179007Y599000D01* -X178257Y599750D02*X179007Y600500D01* -X181257D01* -X182007Y599750D01* -X178257Y598250D02*X179007Y597500D01* -X186508Y603500D02*Y598250D01* -X187258Y597500D01* -X191010Y600500D02*X191760Y599750D01* -X189510Y600500D02*X191010D01* -X188760Y599750D02*X189510Y600500D01* -X188760Y599750D02*Y598250D01* -X189510Y597500D01* -X191760Y600500D02*Y598250D01* -X192510Y597500D01* -X189510D02*X191010D01* -X191760Y598250D01* -X194311Y600500D02*Y598250D01* -X195061Y597500D01* -X197311Y600500D02*Y596000D01* -X196561Y595250D02*X197311Y596000D01* -X195061Y595250D02*X196561D01* -X194311Y596000D02*X195061Y595250D01* -Y597500D02*X196561D01* -X197311Y598250D01* -X199113Y599750D02*Y598250D01* -Y599750D02*X199863Y600500D01* -X201363D01* -X202113Y599750D01* -Y598250D01* -X201363Y597500D02*X202113Y598250D01* -X199863Y597500D02*X201363D01* -X199113Y598250D02*X199863Y597500D01* -X203914Y600500D02*Y598250D01* -X204664Y597500D01* -X206164D01* -X206914Y598250D01* -Y600500D02*Y598250D01* -X209466Y603500D02*Y598250D01* -X210216Y597500D01* -X208716Y601250D02*X210216D01* -X211717Y596000D02*X213217Y597500D01* -X217719Y600500D02*X220719Y603500D01* -X217719Y600500D02*X221469D01* -X220719Y603500D02*Y597500D01* -X223270D02*X226270Y600500D01* -Y602750D02*Y600500D01* -X225520Y603500D02*X226270Y602750D01* -X224020Y603500D02*X225520D01* -X223270Y602750D02*X224020Y603500D01* -X223270Y602750D02*Y601250D01* -X224020Y600500D01* -X226270D01* -X228072Y598250D02*X228822Y597500D01* -X228072Y602750D02*Y598250D01* -Y602750D02*X228822Y603500D01* -X230322D01* -X231072Y602750D01* -Y598250D01* -X230322Y597500D02*X231072Y598250D01* -X228822Y597500D02*X230322D01* -X228072Y599000D02*X231072Y602000D01* -X235573Y603500D02*Y597500D01* -Y599750D02*X236323Y600500D01* -X237823D01* -X238573Y599750D01* -Y597500D01* -X240375Y599750D02*Y598250D01* -Y599750D02*X241125Y600500D01* -X242625D01* -X243375Y599750D01* -Y598250D01* -X242625Y597500D02*X243375Y598250D01* -X241125Y597500D02*X242625D01* -X240375Y598250D02*X241125Y597500D01* -X245176Y603500D02*Y598250D01* -X245926Y597500D01* -X248178D02*X250428D01* -X247428Y598250D02*X248178Y597500D01* -X247428Y599750D02*Y598250D01* -Y599750D02*X248178Y600500D01* -X249678D01* -X250428Y599750D01* -X247428Y599000D02*X250428D01* -Y599750D02*Y599000D01* -X252979Y597500D02*X255229D01* -X255979Y598250D01* -X255229Y599000D02*X255979Y598250D01* -X252979Y599000D02*X255229D01* -X252229Y599750D02*X252979Y599000D01* -X252229Y599750D02*X252979Y600500D01* -X255229D01* -X255979Y599750D01* -X252229Y598250D02*X252979Y597500D01* -X261231Y603500D02*Y598250D01* -X261981Y597500D01* -X260481Y601250D02*X261981D01* -X263482Y599750D02*Y598250D01* -Y599750D02*X264232Y600500D01* -X265732D01* -X266482Y599750D01* -Y598250D01* -X265732Y597500D02*X266482Y598250D01* -X264232Y597500D02*X265732D01* -X263482Y598250D02*X264232Y597500D01* -X269034Y603500D02*Y598250D01* -X269784Y597500D01* -X268284Y601250D02*X269784D01* -X273535Y600500D02*X274285Y599750D01* -X272035Y600500D02*X273535D01* -X271285Y599750D02*X272035Y600500D01* -X271285Y599750D02*Y598250D01* -X272035Y597500D01* -X274285Y600500D02*Y598250D01* -X275035Y597500D01* -X272035D02*X273535D01* -X274285Y598250D01* -X276837Y603500D02*Y598250D01* -X277587Y597500D01* -G54D11*X0Y410000D02*X710000D01* +%ADD97C,0.254*% +%ADD96C,0.152*% +%ADD95C,0.203*% +G54D95*X0Y104140D02*X180340D01* X0D02*Y0D01* -X710000Y410000D02*Y0D01* -X0D02*X710000D01* -G54D42*X200000Y423500D02*Y417500D01* -Y423500D02*X202250Y421250D01* -X204500Y423500D01* -Y417500D01* -X208551Y420500D02*X209301Y419750D01* -X207051Y420500D02*X208551D01* -X206301Y419750D02*X207051Y420500D01* -X206301Y419750D02*Y418250D01* -X207051Y417500D01* -X209301Y420500D02*Y418250D01* -X210051Y417500D01* -X207051D02*X208551D01* -X209301Y418250D01* -X211853Y420500D02*X214853Y417500D01* -X211853D02*X214853Y420500D01* -X216654Y422000D02*Y421250D01* -Y419750D02*Y417500D01* -X218906Y419750D02*Y417500D01* -Y419750D02*X219656Y420500D01* -X220406D01* -X221156Y419750D01* -Y417500D01* -Y419750D02*X221906Y420500D01* -X222656D01* -X223406Y419750D01* -Y417500D01* -X218156Y420500D02*X218906Y419750D01* -X225207Y420500D02*Y418250D01* -X225957Y417500D01* -X227457D01* -X228207Y418250D01* -Y420500D02*Y418250D01* -X230759Y419750D02*Y417500D01* -Y419750D02*X231509Y420500D01* -X232259D01* -X233009Y419750D01* -Y417500D01* -Y419750D02*X233759Y420500D01* -X234509D01* -X235259Y419750D01* -Y417500D01* -X230009Y420500D02*X230759Y419750D01* -X240510Y423500D02*Y417500D01* -X242760Y423500D02*X243510Y422750D01* -Y418250D01* -X242760Y417500D02*X243510Y418250D01* -X239760Y417500D02*X242760D01* -X239760Y423500D02*X242760D01* -X245312Y422000D02*Y421250D01* -Y419750D02*Y417500D01* -X247563Y419750D02*Y417500D01* -Y419750D02*X248313Y420500D01* -X249063D01* -X249813Y419750D01* -Y417500D01* -Y419750D02*X250563Y420500D01* -X251313D01* -X252063Y419750D01* -Y417500D01* -X246813Y420500D02*X247563Y419750D01* -X254615Y417500D02*X256865D01* -X253865Y418250D02*X254615Y417500D01* -X253865Y419750D02*Y418250D01* -Y419750D02*X254615Y420500D01* -X256115D01* -X256865Y419750D01* -X253865Y419000D02*X256865D01* -Y419750D02*Y419000D01* -X259416Y419750D02*Y417500D01* -Y419750D02*X260166Y420500D01* -X260916D01* -X261666Y419750D01* -Y417500D01* -X258666Y420500D02*X259416Y419750D01* -X264218Y417500D02*X266468D01* -X267218Y418250D01* -X266468Y419000D02*X267218Y418250D01* -X264218Y419000D02*X266468D01* -X263468Y419750D02*X264218Y419000D01* -X263468Y419750D02*X264218Y420500D01* -X266468D01* -X267218Y419750D01* -X263468Y418250D02*X264218Y417500D01* -X269019Y422000D02*Y421250D01* -Y419750D02*Y417500D01* -X270521Y419750D02*Y418250D01* -Y419750D02*X271271Y420500D01* -X272771D01* -X273521Y419750D01* -Y418250D01* -X272771Y417500D02*X273521Y418250D01* -X271271Y417500D02*X272771D01* -X270521Y418250D02*X271271Y417500D01* -X276072Y419750D02*Y417500D01* -Y419750D02*X276822Y420500D01* -X277572D01* -X278322Y419750D01* -Y417500D01* -X275322Y420500D02*X276072Y419750D01* -X280874Y417500D02*X283124D01* -X283874Y418250D01* -X283124Y419000D02*X283874Y418250D01* -X280874Y419000D02*X283124D01* -X280124Y419750D02*X280874Y419000D01* -X280124Y419750D02*X280874Y420500D01* -X283124D01* -X283874Y419750D01* -X280124Y418250D02*X280874Y417500D01* -X285675Y421250D02*X286425D01* -X285675Y419750D02*X286425D01* -X290927Y417500D02*X294677Y421250D01* -Y423500D02*Y421250D01* -X290927Y423500D02*X294677D01* -X297228Y417500D02*X298728D01* -X297978Y423500D02*Y417500D01* -X296478Y422000D02*X297978Y423500D01* -X300530Y418250D02*X301280Y417500D01* -X300530Y422750D02*Y418250D01* -Y422750D02*X301280Y423500D01* -X302780D01* -X303530Y422750D01* -Y418250D01* -X302780Y417500D02*X303530Y418250D01* -X301280Y417500D02*X302780D01* -X300530Y419000D02*X303530Y422000D01* -X305331Y418250D02*X306081Y417500D01* -X305331Y422750D02*Y418250D01* -Y422750D02*X306081Y423500D01* -X307581D01* -X308331Y422750D01* -Y418250D01* -X307581Y417500D02*X308331Y418250D01* -X306081Y417500D02*X307581D01* -X305331Y419000D02*X308331Y422000D01* -X313583Y419750D02*Y417500D01* -Y419750D02*X314333Y420500D01* -X315083D01* -X315833Y419750D01* -Y417500D01* -Y419750D02*X316583Y420500D01* -X317333D01* -X318083Y419750D01* -Y417500D01* -X312833Y420500D02*X313583Y419750D01* -X319884Y422000D02*Y421250D01* -Y419750D02*Y417500D01* -X321386Y423500D02*Y418250D01* -X322136Y417500D01* -X324387D02*X326637D01* -X327387Y418250D01* -X326637Y419000D02*X327387Y418250D01* -X324387Y419000D02*X326637D01* -X323637Y419750D02*X324387Y419000D01* -X323637Y419750D02*X324387Y420500D01* -X326637D01* -X327387Y419750D01* -X323637Y418250D02*X324387Y417500D01* -X331889Y420500D02*Y418250D01* -X332639Y417500D01* -X333389D01* -X334139Y418250D01* -Y420500D02*Y418250D01* -X334889Y417500D01* -X335639D01* -X336389Y418250D01* -Y420500D02*Y418250D01* -X338190Y422000D02*Y421250D01* -Y419750D02*Y417500D01* -X342692Y423500D02*Y417500D01* -X341942D02*X342692Y418250D01* -X340442Y417500D02*X341942D01* -X339692Y418250D02*X340442Y417500D01* -X339692Y419750D02*Y418250D01* -Y419750D02*X340442Y420500D01* -X341942D01* -X342692Y419750D01* -X345243Y417500D02*X347493D01* -X344493Y418250D02*X345243Y417500D01* -X344493Y419750D02*Y418250D01* -Y419750D02*X345243Y420500D01* -X346743D01* -X347493Y419750D01* -X344493Y419000D02*X347493D01* -Y419750D02*Y419000D01* -X349295Y416000D02*X350795Y417500D01* -X355296Y420500D02*X358296Y423500D01* -X355296Y420500D02*X359046D01* -X358296Y423500D02*Y417500D01* -X361598D02*X363098D01* -X362348Y423500D02*Y417500D01* -X360848Y422000D02*X362348Y423500D01* -X364899Y418250D02*X365649Y417500D01* -X364899Y422750D02*Y418250D01* -Y422750D02*X365649Y423500D01* -X367149D01* -X367899Y422750D01* -Y418250D01* -X367149Y417500D02*X367899Y418250D01* -X365649Y417500D02*X367149D01* -X364899Y419000D02*X367899Y422000D01* -X369701Y418250D02*X370451Y417500D01* -X369701Y422750D02*Y418250D01* -Y422750D02*X370451Y423500D01* -X371951D01* -X372701Y422750D01* -Y418250D01* -X371951Y417500D02*X372701Y418250D01* -X370451Y417500D02*X371951D01* -X369701Y419000D02*X372701Y422000D01* -X377952Y419750D02*Y417500D01* -Y419750D02*X378702Y420500D01* -X379452D01* -X380202Y419750D01* -Y417500D01* -Y419750D02*X380952Y420500D01* -X381702D01* -X382452Y419750D01* -Y417500D01* -X377202Y420500D02*X377952Y419750D01* -X384254Y422000D02*Y421250D01* -Y419750D02*Y417500D01* -X385755Y423500D02*Y418250D01* -X386505Y417500D01* -X388757D02*X391007D01* -X391757Y418250D01* -X391007Y419000D02*X391757Y418250D01* -X388757Y419000D02*X391007D01* -X388007Y419750D02*X388757Y419000D01* -X388007Y419750D02*X388757Y420500D01* -X391007D01* -X391757Y419750D01* -X388007Y418250D02*X388757Y417500D01* -X396258Y423500D02*Y417500D01* -Y419750D02*X397008Y420500D01* -X398508D01* -X399258Y419750D01* -Y417500D01* -X401060Y422000D02*Y421250D01* -Y419750D02*Y417500D01* -X404811Y420500D02*X405561Y419750D01* -X403311Y420500D02*X404811D01* -X402561Y419750D02*X403311Y420500D01* -X402561Y419750D02*Y418250D01* -X403311Y417500D01* -X404811D01* -X405561Y418250D01* -X402561Y416000D02*X403311Y415250D01* -X404811D01* -X405561Y416000D01* -Y420500D02*Y416000D01* -X407363Y423500D02*Y417500D01* -Y419750D02*X408113Y420500D01* -X409613D01* -X410363Y419750D01* -Y417500D01* -X197226Y-9500D02*X200226D01* -X200976Y-8750D01* -Y-7250D02*Y-8750D01* -X200226Y-6500D02*X200976Y-7250D01* -X197976Y-6500D02*X200226D01* -X197976Y-3500D02*Y-9500D01* -X197226Y-3500D02*X200226D01* -X200976Y-4250D01* -Y-5750D01* -X200226Y-6500D02*X200976Y-5750D01* -X202777Y-7250D02*Y-8750D01* -Y-7250D02*X203527Y-6500D01* -X205027D01* -X205777Y-7250D01* -Y-8750D01* -X205027Y-9500D02*X205777Y-8750D01* -X203527Y-9500D02*X205027D01* -X202777Y-8750D02*X203527Y-9500D01* -X209829Y-6500D02*X210579Y-7250D01* -X208329Y-6500D02*X209829D01* -X207579Y-7250D02*X208329Y-6500D01* -X207579Y-7250D02*Y-8750D01* -X208329Y-9500D01* -X210579Y-6500D02*Y-8750D01* -X211329Y-9500D01* -X208329D02*X209829D01* -X210579Y-8750D01* -X213880Y-7250D02*Y-9500D01* -Y-7250D02*X214630Y-6500D01* -X216130D01* -X213130D02*X213880Y-7250D01* -X220932Y-3500D02*Y-9500D01* -X220182D02*X220932Y-8750D01* -X218682Y-9500D02*X220182D01* -X217932Y-8750D02*X218682Y-9500D01* -X217932Y-7250D02*Y-8750D01* -Y-7250D02*X218682Y-6500D01* -X220182D01* -X220932Y-7250D01* -X225433D02*Y-8750D01* -Y-7250D02*X226183Y-6500D01* -X227683D01* -X228433Y-7250D01* -Y-8750D01* -X227683Y-9500D02*X228433Y-8750D01* -X226183Y-9500D02*X227683D01* -X225433Y-8750D02*X226183Y-9500D01* -X230235Y-6500D02*Y-8750D01* -X230985Y-9500D01* -X232485D01* -X233235Y-8750D01* -Y-6500D02*Y-8750D01* -X235786Y-3500D02*Y-8750D01* -X236536Y-9500D01* -X235036Y-5750D02*X236536D01* -X238038Y-3500D02*Y-8750D01* -X238788Y-9500D01* -X240289Y-5000D02*Y-5750D01* -Y-7250D02*Y-9500D01* -X242541Y-7250D02*Y-9500D01* -Y-7250D02*X243291Y-6500D01* -X244041D01* -X244791Y-7250D01* -Y-9500D01* -X241791Y-6500D02*X242541Y-7250D01* -X247342Y-9500D02*X249592D01* -X246592Y-8750D02*X247342Y-9500D01* -X246592Y-7250D02*Y-8750D01* -Y-7250D02*X247342Y-6500D01* -X248842D01* -X249592Y-7250D01* -X246592Y-8000D02*X249592D01* -Y-7250D02*Y-8000D01* -X254094Y-5000D02*Y-5750D01* -Y-7250D02*Y-9500D01* -X256345D02*X258595D01* -X259345Y-8750D01* -X258595Y-8000D02*X259345Y-8750D01* -X256345Y-8000D02*X258595D01* -X255595Y-7250D02*X256345Y-8000D01* -X255595Y-7250D02*X256345Y-6500D01* -X258595D01* -X259345Y-7250D01* -X255595Y-8750D02*X256345Y-9500D01* -X264597Y-3500D02*Y-8750D01* -X265347Y-9500D01* -X263847Y-5750D02*X265347D01* -X266848Y-3500D02*Y-9500D01* -Y-7250D02*X267598Y-6500D01* -X269098D01* -X269848Y-7250D01* -Y-9500D01* -X272400D02*X274650D01* -X271650Y-8750D02*X272400Y-9500D01* -X271650Y-7250D02*Y-8750D01* -Y-7250D02*X272400Y-6500D01* -X273900D01* -X274650Y-7250D01* -X271650Y-8000D02*X274650D01* -Y-7250D02*Y-8000D01* -X279901Y-6500D02*X282151D01* -X279151Y-7250D02*X279901Y-6500D01* -X279151Y-7250D02*Y-8750D01* -X279901Y-9500D01* -X282151D01* -X284703D02*X286953D01* -X283953Y-8750D02*X284703Y-9500D01* -X283953Y-7250D02*Y-8750D01* -Y-7250D02*X284703Y-6500D01* -X286203D01* -X286953Y-7250D01* -X283953Y-8000D02*X286953D01* -Y-7250D02*Y-8000D01* -X289504Y-7250D02*Y-9500D01* -Y-7250D02*X290254Y-6500D01* -X291004D01* -X291754Y-7250D01* -Y-9500D01* -X288754Y-6500D02*X289504Y-7250D01* -X294306Y-3500D02*Y-8750D01* -X295056Y-9500D01* -X293556Y-5750D02*X295056D01* -X297307Y-9500D02*X299557D01* -X296557Y-8750D02*X297307Y-9500D01* -X296557Y-7250D02*Y-8750D01* -Y-7250D02*X297307Y-6500D01* -X298807D01* -X299557Y-7250D01* -X296557Y-8000D02*X299557D01* -Y-7250D02*Y-8000D01* -X302109Y-7250D02*Y-9500D01* -Y-7250D02*X302859Y-6500D01* -X304359D01* -X301359D02*X302109Y-7250D01* -X306160Y-3500D02*Y-8750D01* -X306910Y-9500D01* -X308412Y-5000D02*Y-5750D01* -Y-7250D02*Y-9500D01* -X310663Y-7250D02*Y-9500D01* -Y-7250D02*X311413Y-6500D01* -X312163D01* -X312913Y-7250D01* -Y-9500D01* -X309913Y-6500D02*X310663Y-7250D01* -X315465Y-9500D02*X317715D01* -X314715Y-8750D02*X315465Y-9500D01* -X314715Y-7250D02*Y-8750D01* -Y-7250D02*X315465Y-6500D01* -X316965D01* -X317715Y-7250D01* -X314715Y-8000D02*X317715D01* -Y-7250D02*Y-8000D01* -X322216Y-7250D02*Y-8750D01* -Y-7250D02*X322966Y-6500D01* -X324466D01* -X325216Y-7250D01* -Y-8750D01* -X324466Y-9500D02*X325216Y-8750D01* -X322966Y-9500D02*X324466D01* -X322216Y-8750D02*X322966Y-9500D01* -X327768Y-4250D02*Y-9500D01* -Y-4250D02*X328518Y-3500D01* -X329268D01* -X327018Y-6500D02*X328518D01* -X334219Y-3500D02*Y-8750D01* -X334969Y-9500D01* -X333469Y-5750D02*X334969D01* -X336471Y-3500D02*Y-9500D01* -Y-7250D02*X337221Y-6500D01* -X338721D01* -X339471Y-7250D01* -Y-9500D01* -X341272Y-5000D02*Y-5750D01* -Y-7250D02*Y-9500D01* -X343524D02*X345774D01* -X346524Y-8750D01* -X345774Y-8000D02*X346524Y-8750D01* -X343524Y-8000D02*X345774D01* -X342774Y-7250D02*X343524Y-8000D01* -X342774Y-7250D02*X343524Y-6500D01* -X345774D01* -X346524Y-7250D01* -X342774Y-8750D02*X343524Y-9500D01* -X351775D02*X353275D01* -X352525Y-3500D02*Y-9500D01* -X351025Y-5000D02*X352525Y-3500D01* -X355077Y-8750D02*X355827Y-9500D01* -X355077Y-4250D02*Y-8750D01* -Y-4250D02*X355827Y-3500D01* -X357327D01* -X358077Y-4250D01* -Y-8750D01* -X357327Y-9500D02*X358077Y-8750D01* -X355827Y-9500D02*X357327D01* -X355077Y-8000D02*X358077Y-5000D01* -X363328Y-7250D02*Y-9500D01* -Y-7250D02*X364078Y-6500D01* -X364828D01* -X365578Y-7250D01* -Y-9500D01* -Y-7250D02*X366328Y-6500D01* -X367078D01* -X367828Y-7250D01* -Y-9500D01* -X362578Y-6500D02*X363328Y-7250D01* -X369630Y-5000D02*Y-5750D01* -Y-7250D02*Y-9500D01* -X371131Y-3500D02*Y-8750D01* -X371881Y-9500D01* -X376833Y-7250D02*Y-9500D01* -Y-7250D02*X377583Y-6500D01* -X379083D01* -X376083D02*X376833Y-7250D01* -X381634Y-9500D02*X383884D01* -X380884Y-8750D02*X381634Y-9500D01* -X380884Y-7250D02*Y-8750D01* -Y-7250D02*X381634Y-6500D01* -X383134D01* -X383884Y-7250D01* -X380884Y-8000D02*X383884D01* -Y-7250D02*Y-8000D01* -X386436Y-6500D02*X388686D01* -X385686Y-7250D02*X386436Y-6500D01* -X385686Y-7250D02*Y-8750D01* -X386436Y-9500D01* -X388686D01* -X391237Y-3500D02*Y-8750D01* -X391987Y-9500D01* -X390487Y-5750D02*X391987D01* -X395739Y-6500D02*X396489Y-7250D01* -X394239Y-6500D02*X395739D01* -X393489Y-7250D02*X394239Y-6500D01* -X393489Y-7250D02*Y-8750D01* -X394239Y-9500D01* -X396489Y-6500D02*Y-8750D01* -X397239Y-9500D01* -X394239D02*X395739D01* -X396489Y-8750D01* -X399790Y-7250D02*Y-9500D01* -Y-7250D02*X400540Y-6500D01* -X401290D01* -X402040Y-7250D01* -Y-9500D01* -X399040Y-6500D02*X399790Y-7250D01* -X406092Y-6500D02*X406842Y-7250D01* -X404592Y-6500D02*X406092D01* -X403842Y-7250D02*X404592Y-6500D01* -X403842Y-7250D02*Y-8750D01* -X404592Y-9500D01* -X406092D01* -X406842Y-8750D01* -X403842Y-11000D02*X404592Y-11750D01* -X406092D01* -X406842Y-11000D01* -Y-6500D02*Y-11000D01* -X408643Y-3500D02*Y-8750D01* -X409393Y-9500D01* -X411645D02*X413895D01* -X410895Y-8750D02*X411645Y-9500D01* -X410895Y-7250D02*Y-8750D01* -Y-7250D02*X411645Y-6500D01* -X413145D01* -X413895Y-7250D01* -X410895Y-8000D02*X413895D01* -Y-7250D02*Y-8000D01* -X418396Y-6500D02*X421396D01* -X425898Y-8750D02*X426648Y-9500D01* -X425898Y-4250D02*Y-8750D01* -Y-4250D02*X426648Y-3500D01* -X428148D01* -X428898Y-4250D01* -Y-8750D01* -X428148Y-9500D02*X428898Y-8750D01* -X426648Y-9500D02*X428148D01* -X425898Y-8000D02*X428898Y-5000D01* -X430699Y-11000D02*X432199Y-9500D01* -X434001Y-8750D02*X434751Y-9500D01* -X434001Y-4250D02*Y-8750D01* -Y-4250D02*X434751Y-3500D01* -X436251D01* -X437001Y-4250D01* -Y-8750D01* -X436251Y-9500D02*X437001Y-8750D01* -X434751Y-9500D02*X436251D01* -X434001Y-8000D02*X437001Y-5000D01* -X442252Y-3500D02*Y-8750D01* -X443002Y-9500D01* -X441502Y-5750D02*X443002D01* -X444504Y-7250D02*Y-8750D01* -Y-7250D02*X445254Y-6500D01* -X446754D01* -X447504Y-7250D01* -Y-8750D01* -X446754Y-9500D02*X447504Y-8750D01* -X445254Y-9500D02*X446754D01* -X444504Y-8750D02*X445254Y-9500D01* -X452005D02*X455755Y-5750D01* -Y-3500D02*Y-5750D01* -X452005Y-3500D02*X455755D01* -X458307Y-9500D02*X459807D01* -X459057Y-3500D02*Y-9500D01* -X457557Y-5000D02*X459057Y-3500D01* -X461608Y-8750D02*X462358Y-9500D01* -X461608Y-4250D02*Y-8750D01* -Y-4250D02*X462358Y-3500D01* -X463858D01* -X464608Y-4250D01* -Y-8750D01* -X463858Y-9500D02*X464608Y-8750D01* -X462358Y-9500D02*X463858D01* -X461608Y-8000D02*X464608Y-5000D01* -X466410Y-8750D02*X467160Y-9500D01* -X466410Y-4250D02*Y-8750D01* -Y-4250D02*X467160Y-3500D01* -X468660D01* -X469410Y-4250D01* -Y-8750D01* -X468660Y-9500D02*X469410Y-8750D01* -X467160Y-9500D02*X468660D01* -X466410Y-8000D02*X469410Y-5000D01* -X471211Y-11000D02*X472711Y-9500D01* -X474513Y-6500D02*X477513Y-3500D01* -X474513Y-6500D02*X478263D01* -X477513Y-3500D02*Y-9500D01* -X480814D02*X482314D01* -X481564Y-3500D02*Y-9500D01* -X480064Y-5000D02*X481564Y-3500D01* -X484116Y-8750D02*X484866Y-9500D01* -X484116Y-4250D02*Y-8750D01* -Y-4250D02*X484866Y-3500D01* -X486366D01* -X487116Y-4250D01* -Y-8750D01* -X486366Y-9500D02*X487116Y-8750D01* -X484866Y-9500D02*X486366D01* -X484116Y-8000D02*X487116Y-5000D01* -X488917Y-8750D02*X489667Y-9500D01* -X488917Y-4250D02*Y-8750D01* -Y-4250D02*X489667Y-3500D01* -X491167D01* -X491917Y-4250D01* -Y-8750D01* -X491167Y-9500D02*X491917Y-8750D01* -X489667Y-9500D02*X491167D01* -X488917Y-8000D02*X491917Y-5000D01* -X497169Y-7250D02*Y-9500D01* -Y-7250D02*X497919Y-6500D01* -X498669D01* -X499419Y-7250D01* -Y-9500D01* -Y-7250D02*X500169Y-6500D01* -X500919D01* -X501669Y-7250D01* -Y-9500D01* -X496419Y-6500D02*X497169Y-7250D01* -X503470Y-5000D02*Y-5750D01* -Y-7250D02*Y-9500D01* -X504972Y-3500D02*Y-8750D01* -X505722Y-9500D01* -X507973D02*X510223D01* -X510973Y-8750D01* -X510223Y-8000D02*X510973Y-8750D01* -X507973Y-8000D02*X510223D01* -X507223Y-7250D02*X507973Y-8000D01* -X507223Y-7250D02*X507973Y-6500D01* -X510223D01* -X510973Y-7250D01* -X507223Y-8750D02*X507973Y-9500D01* -X200750Y438500D02*Y432500D01* -X203000Y438500D02*X203750Y437750D01* -Y433250D01* -X203000Y432500D02*X203750Y433250D01* -X200000Y432500D02*X203000D01* -X200000Y438500D02*X203000D01* -X207801Y435500D02*X208551Y434750D01* -X206301Y435500D02*X207801D01* -X205551Y434750D02*X206301Y435500D01* -X205551Y434750D02*Y433250D01* -X206301Y432500D01* -X208551Y435500D02*Y433250D01* -X209301Y432500D01* -X206301D02*X207801D01* -X208551Y433250D01* -X211853Y438500D02*Y433250D01* -X212603Y432500D01* -X211103Y436250D02*X212603D01* -X214854Y432500D02*X217104D01* -X214104Y433250D02*X214854Y432500D01* -X214104Y434750D02*Y433250D01* -Y434750D02*X214854Y435500D01* -X216354D01* -X217104Y434750D01* -X214104Y434000D02*X217104D01* -Y434750D02*Y434000D01* -X218906Y436250D02*X219656D01* -X218906Y434750D02*X219656D01* -X224157Y438500D02*X227157D01* -X225657D02*Y432500D01* -X228959Y438500D02*Y432500D01* -Y434750D02*X229709Y435500D01* -X231209D01* -X231959Y434750D01* -Y432500D01* -X233760Y435500D02*Y433250D01* -X234510Y432500D01* -X236010D01* -X236760Y433250D01* -Y435500D02*Y433250D01* -X242012Y432500D02*X243512D01* -X242762Y438500D02*Y432500D01* -X241262Y437000D02*X242762Y438500D01* -X247563D02*X248313Y437750D01* -X246063Y438500D02*X247563D01* -X245313Y437750D02*X246063Y438500D01* -X245313Y437750D02*Y433250D01* -X246063Y432500D01* -X247563Y435500D02*X248313Y434750D01* -X245313Y435500D02*X247563D01* -X246063Y432500D02*X247563D01* -X248313Y433250D01* -Y434750D02*Y433250D01* -X253565Y438500D02*Y432500D01* -X255815Y438500D02*X256565Y437750D01* -Y433250D01* -X255815Y432500D02*X256565Y433250D01* -X252815Y432500D02*X255815D01* -X252815Y438500D02*X255815D01* -X259116Y432500D02*X261366D01* -X258366Y433250D02*X259116Y432500D01* -X258366Y434750D02*Y433250D01* -Y434750D02*X259116Y435500D01* -X260616D01* -X261366Y434750D01* -X258366Y434000D02*X261366D01* -Y434750D02*Y434000D01* -X263918Y435500D02*X266168D01* -X263168Y434750D02*X263918Y435500D01* -X263168Y434750D02*Y433250D01* -X263918Y432500D01* -X266168D01* -X270669Y437750D02*X271419Y438500D01* -X273669D01* -X274419Y437750D01* -Y436250D01* -X270669Y432500D02*X274419Y436250D01* -X270669Y432500D02*X274419D01* -X276221Y433250D02*X276971Y432500D01* -X276221Y437750D02*Y433250D01* -Y437750D02*X276971Y438500D01* -X278471D01* -X279221Y437750D01* -Y433250D01* -X278471Y432500D02*X279221Y433250D01* -X276971Y432500D02*X278471D01* -X276221Y434000D02*X279221Y437000D01* -X281772Y432500D02*X283272D01* -X282522Y438500D02*Y432500D01* -X281022Y437000D02*X282522Y438500D01* -X285074Y433250D02*X285824Y432500D01* -X285074Y437750D02*Y433250D01* -Y437750D02*X285824Y438500D01* -X287324D01* -X288074Y437750D01* -Y433250D01* -X287324Y432500D02*X288074Y433250D01* -X285824Y432500D02*X287324D01* -X285074Y434000D02*X288074Y437000D01* -X292575Y433250D02*X293325Y432500D01* -X292575Y437750D02*Y433250D01* -Y437750D02*X293325Y438500D01* -X294825D01* -X295575Y437750D01* -Y433250D01* -X294825Y432500D02*X295575Y433250D01* -X293325Y432500D02*X294825D01* -X292575Y434000D02*X295575Y437000D01* -X297377Y435500D02*X300377Y438500D01* -X297377Y435500D02*X301127D01* -X300377Y438500D02*Y432500D01* -X302928Y436250D02*X303678D01* -X302928Y434750D02*X303678D01* -X305480Y438500D02*X308480D01* -X305480D02*Y435500D01* -X306230Y436250D01* -X307730D01* -X308480Y435500D01* -Y433250D01* -X307730Y432500D02*X308480Y433250D01* -X306230Y432500D02*X307730D01* -X305480Y433250D02*X306230Y432500D01* -X310281Y433250D02*X311031Y432500D01* -X310281Y434750D02*Y433250D01* -Y434750D02*X311031Y435500D01* -X312531D01* -X313281Y434750D01* -Y433250D01* -X312531Y432500D02*X313281Y433250D01* -X311031Y432500D02*X312531D01* -X310281Y436250D02*X311031Y435500D01* -X310281Y437750D02*Y436250D01* -Y437750D02*X311031Y438500D01* -X312531D01* -X313281Y437750D01* -Y436250D01* -X312531Y435500D02*X313281Y436250D01* -X315083D02*X315833D01* -X315083Y434750D02*X315833D01* -X317634Y433250D02*X318384Y432500D01* -X317634Y437750D02*Y433250D01* -Y437750D02*X318384Y438500D01* -X319884D01* -X320634Y437750D01* -Y433250D01* -X319884Y432500D02*X320634Y433250D01* -X318384Y432500D02*X319884D01* -X317634Y434000D02*X320634Y437000D01* -X322436Y437750D02*X323186Y438500D01* -X325436D01* -X326186Y437750D01* -Y436250D01* -X322436Y432500D02*X326186Y436250D01* -X322436Y432500D02*X326186D01* -X331437Y438500D02*Y432500D01* -X330687Y438500D02*X333687D01* -X334437Y437750D01* -Y436250D01* -X333687Y435500D02*X334437Y436250D01* -X331437Y435500D02*X333687D01* -X336239Y438500D02*Y432500D01* -Y438500D02*X338489Y436250D01* -X340739Y438500D01* -Y432500D01* -X348240Y438500D02*X348990Y437750D01* -X345990Y438500D02*X348240D01* -X345240Y437750D02*X345990Y438500D01* -X345240Y437750D02*Y433250D01* -X345990Y432500D01* -X348240D01* -X348990Y433250D01* -Y434750D02*Y433250D01* -X348240Y435500D02*X348990Y434750D01* -X346740Y435500D02*X348240D01* -X350792Y438500D02*Y432500D01* -Y438500D02*X353042Y436250D01* -X355292Y438500D01* -Y432500D01* -X357093Y438500D02*X360093D01* -X358593D02*Y432500D01* -X364595Y438500D02*Y433250D01* -X365345Y432500D01* -X366845D01* -X367595Y433250D01* -Y438500D02*Y433250D01* -X369396Y438500D02*X372396D01* -X370896D02*Y432500D01* -X374948D02*X377198D01* -X374198Y433250D02*X374948Y432500D01* -X374198Y437750D02*Y433250D01* -Y437750D02*X374948Y438500D01* -X377198D01* -X200000Y452750D02*Y447500D01* -Y452750D02*X200750Y453500D01* -X203000D01* -X203750Y452750D01* -Y447500D01* -X200000Y450500D02*X203750D01* -X205551D02*Y448250D01* -X206301Y447500D01* -X207801D01* -X208551Y448250D01* -Y450500D02*Y448250D01* -X211103Y453500D02*Y448250D01* -X211853Y447500D01* -X210353Y451250D02*X211853D01* -X213354Y453500D02*Y447500D01* -Y449750D02*X214104Y450500D01* -X215604D01* -X216354Y449750D01* -Y447500D01* -X218156Y449750D02*Y448250D01* -Y449750D02*X218906Y450500D01* -X220406D01* -X221156Y449750D01* -Y448250D01* -X220406Y447500D02*X221156Y448250D01* -X218906Y447500D02*X220406D01* -X218156Y448250D02*X218906Y447500D01* -X223707Y449750D02*Y447500D01* -Y449750D02*X224457Y450500D01* -X225957D01* -X222957D02*X223707Y449750D01* -X227759Y451250D02*X228509D01* -X227759Y449750D02*X228509D01* -X233010Y453500D02*Y447500D01* -X235260Y449750D01* -X237510Y447500D01* -Y453500D02*Y447500D01* -X241562Y450500D02*X242312Y449750D01* -X240062Y450500D02*X241562D01* -X239312Y449750D02*X240062Y450500D01* -X239312Y449750D02*Y448250D01* -X240062Y447500D01* -X242312Y450500D02*Y448250D01* -X243062Y447500D01* -X240062D02*X241562D01* -X242312Y448250D01* -X244863Y453500D02*Y448250D01* -X245613Y447500D01* -X247865Y453500D02*Y448250D01* -X248615Y447500D01* -X247115Y451250D02*X248615D01* -X250866Y447500D02*X253116D01* -X250116Y448250D02*X250866Y447500D01* -X250116Y449750D02*Y448250D01* -Y449750D02*X250866Y450500D01* -X252366D01* -X253116Y449750D01* -X250116Y449000D02*X253116D01* -Y449750D02*Y449000D01* -X255668Y449750D02*Y447500D01* -Y449750D02*X256418Y450500D01* -X257918D01* -X254918D02*X255668Y449750D01* -X262419Y453500D02*Y447500D01* -Y453500D02*X265419D01* -X262419Y450500D02*X264669D01* -X267971Y447500D02*X270221D01* -X267221Y448250D02*X267971Y447500D01* -X267221Y449750D02*Y448250D01* -Y449750D02*X267971Y450500D01* -X269471D01* -X270221Y449750D01* -X267221Y449000D02*X270221D01* -Y449750D02*Y449000D01* -X272772Y453500D02*Y448250D01* -X273522Y447500D01* -X272022Y451250D02*X273522D01* -X275774Y453500D02*Y448250D01* -X276524Y447500D01* -X275024Y451250D02*X276524D01* -X278775Y447500D02*X281025D01* -X278025Y448250D02*X278775Y447500D01* -X278025Y449750D02*Y448250D01* -Y449750D02*X278775Y450500D01* -X280275D01* -X281025Y449750D01* -X278025Y449000D02*X281025D01* -Y449750D02*Y449000D01* -X283577Y449750D02*Y447500D01* -Y449750D02*X284327Y450500D01* -X285827D01* -X282827D02*X283577Y449750D01* -X290328Y453500D02*Y447500D01* -X293328D01* -X297380Y450500D02*X298130Y449750D01* -X295880Y450500D02*X297380D01* -X295130Y449750D02*X295880Y450500D01* -X295130Y449750D02*Y448250D01* -X295880Y447500D01* -X298130Y450500D02*Y448250D01* -X298880Y447500D01* -X295880D02*X297380D01* -X298130Y448250D01* -X302931Y450500D02*X303681Y449750D01* -X301431Y450500D02*X302931D01* -X300681Y449750D02*X301431Y450500D01* -X300681Y449750D02*Y448250D01* -X301431Y447500D01* -X302931D01* -X303681Y448250D01* -X300681Y446000D02*X301431Y445250D01* -X302931D01* -X303681Y446000D01* -Y450500D02*Y446000D01* -X306233Y447500D02*X308483D01* -X305483Y448250D02*X306233Y447500D01* -X305483Y449750D02*Y448250D01* -Y449750D02*X306233Y450500D01* -X307733D01* -X308483Y449750D01* -X305483Y449000D02*X308483D01* -Y449750D02*Y449000D01* -X311034Y447500D02*X313284D01* -X314034Y448250D01* -X313284Y449000D02*X314034Y448250D01* -X311034Y449000D02*X313284D01* -X310284Y449750D02*X311034Y449000D01* -X310284Y449750D02*X311034Y450500D01* -X313284D01* -X314034Y449750D01* -X310284Y448250D02*X311034Y447500D01* -X200000Y468500D02*X203000D01* -X201500D02*Y462500D01* -X204801Y467000D02*Y466250D01* -Y464750D02*Y462500D01* -X207053Y468500D02*Y463250D01* -X207803Y462500D01* -X206303Y466250D02*X207803D01* -X209304Y468500D02*Y463250D01* -X210054Y462500D01* -X212306D02*X214556D01* -X211556Y463250D02*X212306Y462500D01* -X211556Y464750D02*Y463250D01* -Y464750D02*X212306Y465500D01* -X213806D01* -X214556Y464750D01* -X211556Y464000D02*X214556D01* -Y464750D02*Y464000D01* -X216357Y466250D02*X217107D01* -X216357Y464750D02*X217107D01* -X221609Y463250D02*X222359Y462500D01* -X221609Y467750D02*X222359Y468500D01* -X221609Y467750D02*Y463250D01* -X224160Y465500D02*Y463250D01* -X224910Y462500D01* -X226410D01* -X227160Y463250D01* -Y465500D02*Y463250D01* -X229712Y464750D02*Y462500D01* -Y464750D02*X230462Y465500D01* -X231212D01* -X231962Y464750D01* -Y462500D01* -X228962Y465500D02*X229712Y464750D01* -X233763Y468500D02*Y462500D01* -Y464750D02*X236013Y462500D01* -X233763Y464750D02*X235263Y466250D01* -X238565Y464750D02*Y462500D01* -Y464750D02*X239315Y465500D01* -X240065D01* -X240815Y464750D01* -Y462500D01* -X237815Y465500D02*X238565Y464750D01* -X242616D02*Y463250D01* -Y464750D02*X243366Y465500D01* -X244866D01* -X245616Y464750D01* -Y463250D01* -X244866Y462500D02*X245616Y463250D01* -X243366Y462500D02*X244866D01* -X242616Y463250D02*X243366Y462500D01* -X247418Y465500D02*Y463250D01* -X248168Y462500D01* -X248918D01* -X249668Y463250D01* -Y465500D02*Y463250D01* -X250418Y462500D01* -X251168D01* -X251918Y463250D01* -Y465500D02*Y463250D01* -X254469Y464750D02*Y462500D01* -Y464750D02*X255219Y465500D01* -X255969D01* -X256719Y464750D01* -Y462500D01* -X253719Y465500D02*X254469Y464750D01* -X258521Y468500D02*X259271Y467750D01* -Y463250D01* -X258521Y462500D02*X259271Y463250D01* -X263772Y465500D02*X266772D01* -X271274Y468500D02*Y462500D01* -Y468500D02*X274274D01* -X271274Y465500D02*X273524D01* -X278325D02*X279075Y464750D01* -X276825Y465500D02*X278325D01* -X276075Y464750D02*X276825Y465500D01* -X276075Y464750D02*Y463250D01* -X276825Y462500D01* -X279075Y465500D02*Y463250D01* -X279825Y462500D01* -X276825D02*X278325D01* -X279075Y463250D01* -X281627Y468500D02*Y462500D01* -Y463250D02*X282377Y462500D01* -X283877D01* -X284627Y463250D01* -Y464750D02*Y463250D01* -X283877Y465500D02*X284627Y464750D01* -X282377Y465500D02*X283877D01* -X281627Y464750D02*X282377Y465500D01* -X287178Y464750D02*Y462500D01* -Y464750D02*X287928Y465500D01* -X289428D01* -X286428D02*X287178Y464750D01* -X291230Y467000D02*Y466250D01* -Y464750D02*Y462500D01* -X293481Y465500D02*X295731D01* -X292731Y464750D02*X293481Y465500D01* -X292731Y464750D02*Y463250D01* -X293481Y462500D01* -X295731D01* -X299783Y465500D02*X300533Y464750D01* -X298283Y465500D02*X299783D01* -X297533Y464750D02*X298283Y465500D01* -X297533Y464750D02*Y463250D01* -X298283Y462500D01* -X300533Y465500D02*Y463250D01* -X301283Y462500D01* -X298283D02*X299783D01* -X300533Y463250D01* -X303834Y468500D02*Y463250D01* -X304584Y462500D01* -X303084Y466250D02*X304584D01* -X306086Y467000D02*Y466250D01* -Y464750D02*Y462500D01* -X307587Y464750D02*Y463250D01* -Y464750D02*X308337Y465500D01* -X309837D01* -X310587Y464750D01* -Y463250D01* -X309837Y462500D02*X310587Y463250D01* -X308337Y462500D02*X309837D01* -X307587Y463250D02*X308337Y462500D01* -X313139Y464750D02*Y462500D01* -Y464750D02*X313889Y465500D01* -X314639D01* -X315389Y464750D01* -Y462500D01* -X312389Y465500D02*X313139Y464750D01* -X320640Y468500D02*Y462500D01* -X322890Y468500D02*X323640Y467750D01* -Y463250D01* -X322890Y462500D02*X323640Y463250D01* -X319890Y462500D02*X322890D01* -X319890Y468500D02*X322890D01* -X326192Y464750D02*Y462500D01* -Y464750D02*X326942Y465500D01* -X328442D01* -X325442D02*X326192Y464750D01* -X332493Y465500D02*X333243Y464750D01* -X330993Y465500D02*X332493D01* -X330243Y464750D02*X330993Y465500D01* -X330243Y464750D02*Y463250D01* -X330993Y462500D01* -X333243Y465500D02*Y463250D01* -X333993Y462500D01* -X330993D02*X332493D01* -X333243Y463250D01* -X335795Y465500D02*Y463250D01* -X336545Y462500D01* -X337295D01* -X338045Y463250D01* -Y465500D02*Y463250D01* -X338795Y462500D01* -X339545D01* -X340295Y463250D01* -Y465500D02*Y463250D01* -X342096Y467000D02*Y466250D01* -Y464750D02*Y462500D01* -X344348Y464750D02*Y462500D01* -Y464750D02*X345098Y465500D01* -X345848D01* -X346598Y464750D01* -Y462500D01* -X343598Y465500D02*X344348Y464750D01* -X350649Y465500D02*X351399Y464750D01* -X349149Y465500D02*X350649D01* -X348399Y464750D02*X349149Y465500D01* -X348399Y464750D02*Y463250D01* -X349149Y462500D01* -X350649D01* -X351399Y463250D01* -X348399Y461000D02*X349149Y460250D01* -X350649D01* -X351399Y461000D01* -Y465500D02*Y461000D01* +X180340Y104140D02*Y0D01* +X0D02*X180340D01* +X19050Y84963D02*Y83744D01* +Y84963D02*X20107Y85573D01* +X19050Y84963D02*X17993Y85573D01* +X18644Y84963D02*G75*G03X19456Y84963I406J0D01*G01* +G75*G03X18644Y84963I-406J0D01*G01* +X18237D02*G75*G03X19863Y84963I813J0D01*G01* +G75*G03X18237Y84963I-813J0D01*G01* +X19050Y60173D02*Y58953D01* +Y60173D02*X20107Y60782D01* +X19050Y60173D02*X17993Y60782D01* +X18644Y60173D02*G75*G03X19456Y60173I406J0D01*G01* +G75*G03X18644Y60173I-406J0D01*G01* +X18237D02*G75*G03X19863Y60173I813J0D01*G01* +G75*G03X18237Y60173I-813J0D01*G01* +X3810Y106998D02*Y105778D01* +Y106998D02*X4867Y107607D01* +X3810Y106998D02*X2753Y107607D01* +X3404Y106998D02*G75*G03X4216Y106998I406J0D01*G01* +G75*G03X3404Y106998I-406J0D01*G01* +X2997D02*G75*G03X4623Y106998I813J0D01*G01* +G75*G03X2997Y106998I-813J0D01*G01* +G54D96*X34290Y107569D02*Y107378D01* +X34671Y106998D01* +X35052Y107378D01* +Y107569D02*Y107378D01* +X34671Y106998D02*Y106045D01* +X35509Y106807D02*X36081D01* +X35509Y106045D02*X36271D01* +X35509Y107569D02*Y106045D01* +Y107569D02*X36271D01* +X37490D02*X37681Y107378D01* +X36919Y107569D02*X37490D01* +X36728Y107378D02*X36919Y107569D01* +X36728Y107378D02*Y106998D01* +X36919Y106807D01* +X37490D01* +X37681Y106616D01* +Y106236D01* +X37490Y106045D02*X37681Y106236D01* +X36919Y106045D02*X37490D01* +X36728Y106236D02*X36919Y106045D01* +X24892Y107378D02*X25082Y107569D01* +X25654D01* +X25844Y107378D01* +Y106998D01* +X24892Y106045D02*X25844Y106998D01* +X24892Y106045D02*X25844D01* +X11430Y106236D02*X11620Y106045D01* +X11430Y107378D02*Y106236D01* +Y107378D02*X11620Y107569D01* +X12002D01* +X12192Y107378D01* +Y106236D01* +X12002Y106045D02*X12192Y106236D01* +X11620Y106045D02*X12002D01* +X11430Y106426D02*X12192Y107188D01* +X12649Y106045D02*X12840D01* +X13487D02*X13868D01* +X13678Y107569D02*Y106045D01* +X13297Y107188D02*X13678Y107569D01* +X14326Y107378D02*X14516Y107569D01* +X15088D01* +X15278Y107378D01* +Y106998D01* +X14326Y106045D02*X15278Y106998D01* +X14326Y106045D02*X15278D01* +X15735Y106236D02*X15926Y106045D01* +X15735Y107378D02*Y106236D01* +Y107378D02*X15926Y107569D01* +X16307D01* +X16497Y107378D01* +Y106236D01* +X16307Y106045D02*X16497Y106236D01* +X15926Y106045D02*X16307D01* +X15735Y106426D02*X16497Y107188D01* +X14199Y97561D02*X15011D01* +X14199D02*Y96749D01* +X15011D01* +Y97561D02*Y96749D01* +X13792Y97968D02*X15418D01* +X13792D02*Y96342D01* +X15418D01* +Y97968D02*Y96342D01* +X14199Y8992D02*X15011D01* +X14199D02*Y8179D01* +X15011D01* +Y8992D02*Y8179D01* +X13792Y9398D02*X15418D01* +X13792D02*Y7772D01* +X15418D01* +Y9398D02*Y7772D01* +X167869Y97561D02*X168681D01* +X167869D02*Y96749D01* +X168681D01* +Y97561D02*Y96749D01* +X167462Y97968D02*X169088D01* +X167462D02*Y96342D01* +X169088D01* +Y97968D02*Y96342D01* +X167869Y8992D02*X168681D01* +X167869D02*Y8179D01* +X168681D01* +Y8992D02*Y8179D01* +X167462Y9398D02*X169088D01* +X167462D02*Y7772D01* +X169088D01* +Y9398D02*Y7772D01* +X167869Y8661D02*X168681D01* +X167869D02*Y7849D01* +X168681D01* +Y8661D02*Y7849D01* +X167462Y9068D02*X169088D01* +X167462D02*Y7442D01* +X169088D01* +Y9068D02*Y7442D01* +X167869Y97561D02*X168681D01* +X167869D02*Y96749D01* +X168681D01* +Y97561D02*Y96749D01* +X167462Y97968D02*X169088D01* +X167462D02*Y96342D01* +X169088D01* +Y97968D02*Y96342D01* +X3404Y111214D02*X4216D01* +X3404D02*Y110401D01* +X4216D01* +Y111214D02*Y110401D01* +X2997Y111620D02*X4623D01* +X2997D02*Y109995D01* +X4623D01* +Y111620D02*Y109995D01* +X34290Y111379D02*Y111188D01* +X34671Y110808D01* +X35052Y111188D01* +Y111379D02*Y111188D01* +X34671Y110808D02*Y109855D01* +X35509Y110617D02*X36081D01* +X35509Y109855D02*X36271D01* +X35509Y111379D02*Y109855D01* +Y111379D02*X36271D01* +X37490D02*X37681Y111188D01* +X36919Y111379D02*X37490D01* +X36728Y111188D02*X36919Y111379D01* +X36728Y111188D02*Y110808D01* +X36919Y110617D01* +X37490D01* +X37681Y110426D01* +Y110046D01* +X37490Y109855D02*X37681Y110046D01* +X36919Y109855D02*X37490D01* +X36728Y110046D02*X36919Y109855D01* +X25464Y111379D02*X25654Y111188D01* +X25082Y111379D02*X25464D01* +X24892Y111188D02*X25082Y111379D01* +X24892Y111188D02*Y110046D01* +X25082Y109855D01* +X25464Y110617D02*X25654Y110426D01* +X24892Y110617D02*X25464D01* +X25082Y109855D02*X25464D01* +X25654Y110046D01* +Y110426D02*Y110046D01* +X11430D02*X11620Y109855D01* +X11430Y111188D02*Y110046D01* +Y111188D02*X11620Y111379D01* +X12002D01* +X12192Y111188D01* +Y110046D01* +X12002Y109855D02*X12192Y110046D01* +X11620Y109855D02*X12002D01* +X11430Y110236D02*X12192Y110998D01* +X12649Y109855D02*X12840D01* +X13297Y110046D02*X13487Y109855D01* +X13297Y111188D02*Y110046D01* +Y111188D02*X13487Y111379D01* +X13868D01* +X14059Y111188D01* +Y110046D01* +X13868Y109855D02*X14059Y110046D01* +X13487Y109855D02*X13868D01* +X13297Y110236D02*X14059Y110998D01* +X14516Y110046D02*X14707Y109855D01* +X14516Y110426D02*Y110046D01* +Y110426D02*X14707Y110617D01* +X15088D01* +X15278Y110426D01* +Y110046D01* +X15088Y109855D02*X15278Y110046D01* +X14707Y109855D02*X15088D01* +X14516Y110808D02*X14707Y110617D01* +X14516Y111188D02*Y110808D01* +Y111188D02*X14707Y111379D01* +X15088D01* +X15278Y111188D01* +Y110808D01* +X15088Y110617D02*X15278Y110808D01* +X15735Y110046D02*X15926Y109855D01* +X15735Y111188D02*Y110046D01* +Y111188D02*X15926Y111379D01* +X16307D01* +X16497Y111188D01* +Y110046D01* +X16307Y109855D02*X16497Y110046D01* +X15926Y109855D02*X16307D01* +X15735Y110236D02*X16497Y110998D01* +X140132Y27940D02*G75*G03X140538Y27940I203J0D01*G01* +G75*G03X140132Y27940I-203J0D01*G01* +X139725D02*G75*G03X140945Y27940I610J0D01*G01* +G75*G03X139725Y27940I-610J0D01*G01* +X150292D02*G75*G03X150698Y27940I203J0D01*G01* +G75*G03X150292Y27940I-203J0D01*G01* +X149885D02*G75*G03X151105Y27940I610J0D01*G01* +G75*G03X149885Y27940I-610J0D01*G01* +X140132Y52705D02*G75*G03X140538Y52705I203J0D01*G01* +G75*G03X140132Y52705I-203J0D01*G01* +X139725D02*G75*G03X140945Y52705I610J0D01*G01* +G75*G03X139725Y52705I-610J0D01*G01* +X150292D02*G75*G03X150698Y52705I203J0D01*G01* +G75*G03X150292Y52705I-203J0D01*G01* +X149885D02*G75*G03X151105Y52705I610J0D01*G01* +G75*G03X149885Y52705I-610J0D01*G01* +X3607Y114618D02*G75*G03X4013Y114618I203J0D01*G01* +G75*G03X3607Y114618I-203J0D01*G01* +X3200D02*G75*G03X4420Y114618I610J0D01*G01* +G75*G03X3200Y114618I-610J0D01*G01* +X34290Y115189D02*Y114998D01* +X34671Y114618D01* +X35052Y114998D01* +Y115189D02*Y114998D01* +X34671Y114618D02*Y113665D01* +X35509Y114427D02*X36081D01* +X35509Y113665D02*X36271D01* +X35509Y115189D02*Y113665D01* +Y115189D02*X36271D01* +X37490D02*X37681Y114998D01* +X36919Y115189D02*X37490D01* +X36728Y114998D02*X36919Y115189D01* +X36728Y114998D02*Y114618D01* +X36919Y114427D01* +X37490D01* +X37681Y114236D01* +Y113856D01* +X37490Y113665D02*X37681Y113856D01* +X36919Y113665D02*X37490D01* +X36728Y113856D02*X36919Y113665D01* +X24892Y114427D02*X25654Y115189D01* +X24892Y114427D02*X25844D01* +X25654Y115189D02*Y113665D01* +X11430Y113856D02*X11620Y113665D01* +X11430Y114998D02*Y113856D01* +Y114998D02*X11620Y115189D01* +X12002D01* +X12192Y114998D01* +Y113856D01* +X12002Y113665D02*X12192Y113856D01* +X11620Y113665D02*X12002D01* +X11430Y114046D02*X12192Y114808D01* +X12649Y113665D02*X12840D01* +X13297Y113856D02*X13487Y113665D01* +X13297Y114998D02*Y113856D01* +Y114998D02*X13487Y115189D01* +X13868D01* +X14059Y114998D01* +Y113856D01* +X13868Y113665D02*X14059Y113856D01* +X13487Y113665D02*X13868D01* +X13297Y114046D02*X14059Y114808D01* +X15088Y115189D02*X15278Y114998D01* +X14707Y115189D02*X15088D01* +X14516Y114998D02*X14707Y115189D01* +X14516Y114998D02*Y113856D01* +X14707Y113665D01* +X15088Y114427D02*X15278Y114236D01* +X14516Y114427D02*X15088D01* +X14707Y113665D02*X15088D01* +X15278Y113856D01* +Y114236D02*Y113856D01* +X15735D02*X15926Y113665D01* +X15735Y114998D02*Y113856D01* +Y114998D02*X15926Y115189D01* +X16307D01* +X16497Y114998D01* +Y113856D01* +X16307Y113665D02*X16497Y113856D01* +X15926Y113665D02*X16307D01* +X15735Y114046D02*X16497Y114808D01* +X85750Y44425D02*X86970Y43205D01* +X85750D02*X86970Y44425D01* +X85954Y44221D02*X86766D01* +X85954D02*Y43409D01* +X86766D01* +Y44221D02*Y43409D01* +X139725Y44425D02*X140945Y43205D01* +X139725D02*X140945Y44425D01* +X139929Y44221D02*X140741D01* +X139929D02*Y43409D01* +X140741D01* +Y44221D02*Y43409D01* +X155600Y31725D02*X156820Y30505D01* +X155600D02*X156820Y31725D01* +X155804Y31521D02*X156616D01* +X155804D02*Y30709D01* +X156616D01* +Y31521D02*Y30709D01* +X155600Y48235D02*X156820Y47015D01* +X155600D02*X156820Y48235D01* +X155804Y48031D02*X156616D01* +X155804D02*Y47219D01* +X156616D01* +Y48031D02*Y47219D01* +X149885Y40615D02*X151105Y39395D01* +X149885D02*X151105Y40615D01* +X150089Y40411D02*X150901D01* +X150089D02*Y39599D01* +X150901D01* +Y40411D02*Y39599D01* +X134645Y5055D02*X135865Y3835D01* +X134645D02*X135865Y5055D01* +X134849Y4851D02*X135661D01* +X134849D02*Y4039D01* +X135661D01* +Y4851D02*Y4039D01* +X134645Y40615D02*X135865Y39395D01* +X134645D02*X135865Y40615D01* +X134849Y40411D02*X135661D01* +X134849D02*Y39599D01* +X135661D01* +Y40411D02*Y39599D01* +X3200Y119037D02*X4420Y117818D01* +X3200D02*X4420Y119037D01* +X3404Y118834D02*X4216D01* +X3404D02*Y118021D01* +X4216D01* +Y118834D02*Y118021D01* +X34290Y118999D02*Y118808D01* +X34671Y118428D01* +X35052Y118808D01* +Y118999D02*Y118808D01* +X34671Y118428D02*Y117475D01* +X35509Y118237D02*X36081D01* +X35509Y117475D02*X36271D01* +X35509Y118999D02*Y117475D01* +Y118999D02*X36271D01* +X37490D02*X37681Y118808D01* +X36919Y118999D02*X37490D01* +X36728Y118808D02*X36919Y118999D01* +X36728Y118808D02*Y118428D01* +X36919Y118237D01* +X37490D01* +X37681Y118046D01* +Y117666D01* +X37490Y117475D02*X37681Y117666D01* +X36919Y117475D02*X37490D01* +X36728Y117666D02*X36919Y117475D01* +X24892D02*X25844Y118428D01* +Y118999D02*Y118428D01* +X24892Y118999D02*X25844D01* +X11430Y117666D02*X11620Y117475D01* +X11430Y118808D02*Y117666D01* +Y118808D02*X11620Y118999D01* +X12002D01* +X12192Y118808D01* +Y117666D01* +X12002Y117475D02*X12192Y117666D01* +X11620Y117475D02*X12002D01* +X11430Y117856D02*X12192Y118618D01* +X12649Y117475D02*X12840D01* +X13297Y117666D02*X13487Y117475D01* +X13297Y118808D02*Y117666D01* +Y118808D02*X13487Y118999D01* +X13868D01* +X14059Y118808D01* +Y117666D01* +X13868Y117475D02*X14059Y117666D01* +X13487Y117475D02*X13868D01* +X13297Y117856D02*X14059Y118618D01* +X14516Y118999D02*X15278D01* +X14516D02*Y118237D01* +X14707Y118428D01* +X15088D01* +X15278Y118237D01* +Y117666D01* +X15088Y117475D02*X15278Y117666D01* +X14707Y117475D02*X15088D01* +X14516Y117666D02*X14707Y117475D01* +X15735Y118999D02*X16497D01* +X15735D02*Y118237D01* +X15926Y118428D01* +X16307D01* +X16497Y118237D01* +Y117666D01* +X16307Y117475D02*X16497Y117666D01* +X15926Y117475D02*X16307D01* +X15735Y117666D02*X15926Y117475D01* +X16459Y24917D02*Y23292D01* +X15646Y24105D02*X17272D01* +X16053Y24511D02*X16866D01* +X16053D02*Y23698D01* +X16866D01* +Y24511D02*Y23698D01* +X16459Y17907D02*Y16281D01* +X15646Y17094D02*X17272D01* +X16053Y17501D02*X16866D01* +X16053D02*Y16688D01* +X16866D01* +Y17501D02*Y16688D01* +X3810Y123050D02*Y121425D01* +X2997Y122238D02*X4623D01* +X3404Y122644D02*X4216D01* +X3404D02*Y121831D01* +X4216D01* +Y122644D02*Y121831D01* +X34290Y122809D02*Y122618D01* +X34671Y122238D01* +X35052Y122618D01* +Y122809D02*Y122618D01* +X34671Y122238D02*Y121285D01* +X35509Y122047D02*X36081D01* +X35509Y121285D02*X36271D01* +X35509Y122809D02*Y121285D01* +Y122809D02*X36271D01* +X37490D02*X37681Y122618D01* +X36919Y122809D02*X37490D01* +X36728Y122618D02*X36919Y122809D01* +X36728Y122618D02*Y122238D01* +X36919Y122047D01* +X37490D01* +X37681Y121856D01* +Y121476D01* +X37490Y121285D02*X37681Y121476D01* +X36919Y121285D02*X37490D01* +X36728Y121476D02*X36919Y121285D01* +X24892Y122618D02*X25082Y122809D01* +X25654D01* +X25844Y122618D01* +Y122238D01* +X24892Y121285D02*X25844Y122238D01* +X24892Y121285D02*X25844D01* +X11430Y121476D02*X11620Y121285D01* +X11430Y122618D02*Y121476D01* +Y122618D02*X11620Y122809D01* +X12002D01* +X12192Y122618D01* +Y121476D01* +X12002Y121285D02*X12192Y121476D01* +X11620Y121285D02*X12002D01* +X11430Y121666D02*X12192Y122428D01* +X12649Y121285D02*X12840D01* +X13297Y121476D02*X13487Y121285D01* +X13297Y122618D02*Y121476D01* +Y122618D02*X13487Y122809D01* +X13868D01* +X14059Y122618D01* +Y121476D01* +X13868Y121285D02*X14059Y121476D01* +X13487Y121285D02*X13868D01* +X13297Y121666D02*X14059Y122428D01* +X14516Y122809D02*X15278D01* +X14516D02*Y122047D01* +X14707Y122238D01* +X15088D01* +X15278Y122047D01* +Y121476D01* +X15088Y121285D02*X15278Y121476D01* +X14707Y121285D02*X15088D01* +X14516Y121476D02*X14707Y121285D01* +X15735Y122618D02*X15926Y122809D01* +X16497D01* +X16688Y122618D01* +Y122238D01* +X15735Y121285D02*X16688Y122238D01* +X15735Y121285D02*X16688D01* +X15875Y48895D02*Y48082D01* +Y48895D02*X16579Y49301D01* +X15875Y48895D02*X15171Y49301D01* +X15469Y48895D02*G75*G03X16281Y48895I406J0D01*G01* +G75*G03X15469Y48895I-406J0D01*G01* +X15875Y51435D02*Y50622D01* +Y51435D02*X16579Y51841D01* +X15875Y51435D02*X15171Y51841D01* +X15469Y51435D02*G75*G03X16281Y51435I406J0D01*G01* +G75*G03X15469Y51435I-406J0D01*G01* +X15875Y29845D02*Y29032D01* +Y29845D02*X16579Y30251D01* +X15875Y29845D02*X15171Y30251D01* +X15469Y29845D02*G75*G03X16281Y29845I406J0D01*G01* +G75*G03X15469Y29845I-406J0D01*G01* +X15875Y32385D02*Y31572D01* +Y32385D02*X16579Y32791D01* +X15875Y32385D02*X15171Y32791D01* +X15469Y32385D02*G75*G03X16281Y32385I406J0D01*G01* +G75*G03X15469Y32385I-406J0D01*G01* +X15875Y39370D02*Y38557D01* +Y39370D02*X16579Y39776D01* +X15875Y39370D02*X15171Y39776D01* +X15469Y39370D02*G75*G03X16281Y39370I406J0D01*G01* +G75*G03X15469Y39370I-406J0D01*G01* +X15875Y41910D02*Y41097D01* +Y41910D02*X16579Y42316D01* +X15875Y41910D02*X15171Y42316D01* +X15469Y41910D02*G75*G03X16281Y41910I406J0D01*G01* +G75*G03X15469Y41910I-406J0D01*G01* +X3810Y126048D02*Y125235D01* +Y126048D02*X4514Y126454D01* +X3810Y126048D02*X3106Y126454D01* +X3404Y126048D02*G75*G03X4216Y126048I406J0D01*G01* +G75*G03X3404Y126048I-406J0D01*G01* +X34290Y126619D02*Y126428D01* +X34671Y126048D01* +X35052Y126428D01* +Y126619D02*Y126428D01* +X34671Y126048D02*Y125095D01* +X35509Y125857D02*X36081D01* +X35509Y125095D02*X36271D01* +X35509Y126619D02*Y125095D01* +Y126619D02*X36271D01* +X37490D02*X37681Y126428D01* +X36919Y126619D02*X37490D01* +X36728Y126428D02*X36919Y126619D01* +X36728Y126428D02*Y126048D01* +X36919Y125857D01* +X37490D01* +X37681Y125666D01* +Y125286D01* +X37490Y125095D02*X37681Y125286D01* +X36919Y125095D02*X37490D01* +X36728Y125286D02*X36919Y125095D01* +X25464Y126619D02*X25654Y126428D01* +X25082Y126619D02*X25464D01* +X24892Y126428D02*X25082Y126619D01* +X24892Y126428D02*Y125286D01* +X25082Y125095D01* +X25464Y125857D02*X25654Y125666D01* +X24892Y125857D02*X25464D01* +X25082Y125095D02*X25464D01* +X25654Y125286D01* +Y125666D02*Y125286D01* +X11430D02*X11620Y125095D01* +X11430Y126428D02*Y125286D01* +Y126428D02*X11620Y126619D01* +X12002D01* +X12192Y126428D01* +Y125286D01* +X12002Y125095D02*X12192Y125286D01* +X11620Y125095D02*X12002D01* +X11430Y125476D02*X12192Y126238D01* +X12649Y125095D02*X12840D01* +X13297Y125286D02*X13487Y125095D01* +X13297Y126428D02*Y125286D01* +Y126428D02*X13487Y126619D01* +X13868D01* +X14059Y126428D01* +Y125286D01* +X13868Y125095D02*X14059Y125286D01* +X13487Y125095D02*X13868D01* +X13297Y125476D02*X14059Y126238D01* +X14516Y125857D02*X15278Y126619D01* +X14516Y125857D02*X15469D01* +X15278Y126619D02*Y125095D01* +X15926Y126428D02*X16116Y126619D01* +X16497D01* +X16688Y126428D01* +Y125286D01* +X16497Y125095D02*X16688Y125286D01* +X16116Y125095D02*X16497D01* +X15926Y125286D02*X16116Y125095D01* +Y125857D02*X16688D01* +X88494Y32156D02*X89306D01* +X88494D02*Y31344D01* +X89306D01* +Y32156D02*Y31344D01* +X85954Y32156D02*X86766D01* +X85954D02*Y31344D01* +X86766D01* +Y32156D02*Y31344D01* +X83414Y32156D02*X84226D01* +X83414D02*Y31344D01* +X84226D01* +Y32156D02*Y31344D01* +X120879Y13106D02*X121691D01* +X120879D02*Y12294D01* +X121691D01* +Y13106D02*Y12294D01* +X118339Y13106D02*X119151D01* +X118339D02*Y12294D01* +X119151D01* +Y13106D02*Y12294D01* +X115799Y13106D02*X116611D01* +X115799D02*Y12294D01* +X116611D01* +Y13106D02*Y12294D01* +X88494Y13106D02*X89306D01* +X88494D02*Y12294D01* +X89306D01* +Y13106D02*Y12294D01* +X85954Y13106D02*X86766D01* +X85954D02*Y12294D01* +X86766D01* +Y13106D02*Y12294D01* +X83414Y13106D02*X84226D01* +X83414D02*Y12294D01* +X84226D01* +Y13106D02*Y12294D01* +X13564Y23266D02*X14376D01* +X13564D02*Y22454D01* +X14376D01* +Y23266D02*Y22454D01* +X13564Y18771D02*X14376D01* +X13564D02*Y17958D01* +X14376D01* +Y18771D02*Y17958D01* +X120879Y51206D02*X121691D01* +X120879D02*Y50394D01* +X121691D01* +Y51206D02*Y50394D01* +X118339Y51206D02*X119151D01* +X118339D02*Y50394D01* +X119151D01* +Y51206D02*Y50394D01* +X115799Y51206D02*X116611D01* +X115799D02*Y50394D01* +X116611D01* +Y51206D02*Y50394D01* +X120879Y32156D02*X121691D01* +X120879D02*Y31344D01* +X121691D01* +Y32156D02*Y31344D01* +X118339Y32156D02*X119151D01* +X118339D02*Y31344D01* +X119151D01* +Y32156D02*Y31344D01* +X115799Y32156D02*X116611D01* +X115799D02*Y31344D01* +X116611D01* +Y32156D02*Y31344D01* +X88494Y51206D02*X89306D01* +X88494D02*Y50394D01* +X89306D01* +Y51206D02*Y50394D01* +X85954Y51206D02*X86766D01* +X85954D02*Y50394D01* +X86766D01* +Y51206D02*Y50394D01* +X83414Y51206D02*X84226D01* +X83414D02*Y50394D01* +X84226D01* +Y51206D02*Y50394D01* +X3404Y130264D02*X4216D01* +X3404D02*Y129451D01* +X4216D01* +Y130264D02*Y129451D01* +X34290Y130429D02*Y130238D01* +X34671Y129857D01* +X35052Y130238D01* +Y130429D02*Y130238D01* +X34671Y129857D02*Y128905D01* +X35509Y129667D02*X36081D01* +X35509Y128905D02*X36271D01* +X35509Y130429D02*Y128905D01* +Y130429D02*X36271D01* +X37490D02*X37681Y130238D01* +X36919Y130429D02*X37490D01* +X36728Y130238D02*X36919Y130429D01* +X36728Y130238D02*Y129857D01* +X36919Y129667D01* +X37490D01* +X37681Y129476D01* +Y129095D01* +X37490Y128905D02*X37681Y129095D01* +X36919Y128905D02*X37490D01* +X36728Y129095D02*X36919Y128905D01* +X24892Y130238D02*X25082Y130429D01* +X25654D01* +X25844Y130238D01* +Y129857D01* +X24892Y128905D02*X25844Y129857D01* +X24892Y128905D02*X25844D01* +X26302Y129095D02*X26492Y128905D01* +X26302Y130238D02*Y129095D01* +Y130238D02*X26492Y130429D01* +X26873D01* +X27064Y130238D01* +Y129095D01* +X26873Y128905D02*X27064Y129095D01* +X26492Y128905D02*X26873D01* +X26302Y129286D02*X27064Y130048D01* +X11430Y129095D02*X11620Y128905D01* +X11430Y130238D02*Y129095D01* +Y130238D02*X11620Y130429D01* +X12002D01* +X12192Y130238D01* +Y129095D01* +X12002Y128905D02*X12192Y129095D01* +X11620Y128905D02*X12002D01* +X11430Y129286D02*X12192Y130048D01* +X12649Y128905D02*X12840D01* +X13297Y129095D02*X13487Y128905D01* +X13297Y130238D02*Y129095D01* +Y130238D02*X13487Y130429D01* +X13868D01* +X14059Y130238D01* +Y129095D01* +X13868Y128905D02*X14059Y129095D01* +X13487Y128905D02*X13868D01* +X13297Y129286D02*X14059Y130048D01* +X14516Y129667D02*X15278Y130429D01* +X14516Y129667D02*X15469D01* +X15278Y130429D02*Y128905D01* +X15926Y130238D02*X16116Y130429D01* +X16688D01* +X16878Y130238D01* +Y129857D01* +X15926Y128905D02*X16878Y129857D01* +X15926Y128905D02*X16878D01* +X70917Y85090D02*G75*G03X71323Y85090I203J0D01*G01* +G75*G03X70917Y85090I-203J0D01*G01* +X73457D02*G75*G03X73863Y85090I203J0D01*G01* +G75*G03X73457Y85090I-203J0D01*G01* +X107747Y80010D02*G75*G03X108153Y80010I203J0D01*G01* +G75*G03X107747Y80010I-203J0D01*G01* +Y69850D02*G75*G03X108153Y69850I203J0D01*G01* +G75*G03X107747Y69850I-203J0D01*G01* +X55042Y59690D02*G75*G03X55448Y59690I203J0D01*G01* +G75*G03X55042Y59690I-203J0D01*G01* +X44882D02*G75*G03X45288Y59690I203J0D01*G01* +G75*G03X44882Y59690I-203J0D01*G01* +X72822Y66040D02*G75*G03X73228Y66040I203J0D01*G01* +G75*G03X72822Y66040I-203J0D01*G01* +X70282D02*G75*G03X70688Y66040I203J0D01*G01* +G75*G03X70282Y66040I-203J0D01*G01* +X61392D02*G75*G03X61798Y66040I203J0D01*G01* +G75*G03X61392Y66040I-203J0D01*G01* +X63932D02*G75*G03X64338Y66040I203J0D01*G01* +G75*G03X63932Y66040I-203J0D01*G01* +X73457Y91440D02*G75*G03X73863Y91440I203J0D01*G01* +G75*G03X73457Y91440I-203J0D01*G01* +X70917D02*G75*G03X71323Y91440I203J0D01*G01* +G75*G03X70917Y91440I-203J0D01*G01* +X156007Y10160D02*G75*G03X156413Y10160I203J0D01*G01* +G75*G03X156007Y10160I-203J0D01*G01* +Y7620D02*G75*G03X156413Y7620I203J0D01*G01* +G75*G03X156007Y7620I-203J0D01*G01* +X116637Y93980D02*G75*G03X117043Y93980I203J0D01*G01* +G75*G03X116637Y93980I-203J0D01*G01* +Y83820D02*G75*G03X117043Y83820I203J0D01*G01* +G75*G03X116637Y83820I-203J0D01*G01* +X79807Y92710D02*G75*G03X80213Y92710I203J0D01*G01* +G75*G03X79807Y92710I-203J0D01*G01* +Y90170D02*G75*G03X80213Y90170I203J0D01*G01* +G75*G03X79807Y90170I-203J0D01*G01* +X156007Y66040D02*G75*G03X156413Y66040I203J0D01*G01* +G75*G03X156007Y66040I-203J0D01*G01* +X145847D02*G75*G03X146253Y66040I203J0D01*G01* +G75*G03X145847Y66040I-203J0D01*G01* +X141402D02*G75*G03X141808Y66040I203J0D01*G01* +G75*G03X141402Y66040I-203J0D01*G01* +X131242D02*G75*G03X131648Y66040I203J0D01*G01* +G75*G03X131242Y66040I-203J0D01*G01* +X86792D02*G75*G03X87198Y66040I203J0D01*G01* +G75*G03X86792Y66040I-203J0D01*G01* +X96952D02*G75*G03X97358Y66040I203J0D01*G01* +G75*G03X96952Y66040I-203J0D01*G01* +X156007Y15240D02*G75*G03X156413Y15240I203J0D01*G01* +G75*G03X156007Y15240I-203J0D01*G01* +Y17780D02*G75*G03X156413Y17780I203J0D01*G01* +G75*G03X156007Y17780I-203J0D01*G01* +X107747Y83820D02*G75*G03X108153Y83820I203J0D01*G01* +G75*G03X107747Y83820I-203J0D01*G01* +Y93980D02*G75*G03X108153Y93980I203J0D01*G01* +G75*G03X107747Y93980I-203J0D01*G01* +X111557Y66040D02*G75*G03X111963Y66040I203J0D01*G01* +G75*G03X111557Y66040I-203J0D01*G01* +X101397D02*G75*G03X101803Y66040I203J0D01*G01* +G75*G03X101397Y66040I-203J0D01*G01* +X116637D02*G75*G03X117043Y66040I203J0D01*G01* +G75*G03X116637Y66040I-203J0D01*G01* +X126797D02*G75*G03X127203Y66040I203J0D01*G01* +G75*G03X126797Y66040I-203J0D01*G01* +X138862Y83820D02*G75*G03X139268Y83820I203J0D01*G01* +G75*G03X138862Y83820I-203J0D01*G01* +Y93980D02*G75*G03X139268Y93980I203J0D01*G01* +G75*G03X138862Y93980I-203J0D01*G01* +X61392Y59690D02*G75*G03X61798Y59690I203J0D01*G01* +G75*G03X61392Y59690I-203J0D01*G01* +X63932D02*G75*G03X64338Y59690I203J0D01*G01* +G75*G03X63932Y59690I-203J0D01*G01* +X112192Y83820D02*G75*G03X112598Y83820I203J0D01*G01* +G75*G03X112192Y83820I-203J0D01*G01* +Y93980D02*G75*G03X112598Y93980I203J0D01*G01* +G75*G03X112192Y93980I-203J0D01*G01* +X81077Y66040D02*G75*G03X81483Y66040I203J0D01*G01* +G75*G03X81077Y66040I-203J0D01*G01* +X78537D02*G75*G03X78943Y66040I203J0D01*G01* +G75*G03X78537Y66040I-203J0D01*G01* +X48692Y85090D02*G75*G03X49098Y85090I203J0D01*G01* +G75*G03X48692Y85090I-203J0D01*G01* +X51232D02*G75*G03X51638Y85090I203J0D01*G01* +G75*G03X51232Y85090I-203J0D01*G01* +X112192Y80010D02*G75*G03X112598Y80010I203J0D01*G01* +G75*G03X112192Y80010I-203J0D01*G01* +Y69850D02*G75*G03X112598Y69850I203J0D01*G01* +G75*G03X112192Y69850I-203J0D01*G01* +X135052Y93980D02*G75*G03X135458Y93980I203J0D01*G01* +G75*G03X135052Y93980I-203J0D01*G01* +Y83820D02*G75*G03X135458Y83820I203J0D01*G01* +G75*G03X135052Y83820I-203J0D01*G01* +X58852Y49530D02*G75*G03X59258Y49530I203J0D01*G01* +G75*G03X58852Y49530I-203J0D01*G01* +X69012D02*G75*G03X69418Y49530I203J0D01*G01* +G75*G03X69012Y49530I-203J0D01*G01* +X142672Y83820D02*G75*G03X143078Y83820I203J0D01*G01* +G75*G03X142672Y83820I-203J0D01*G01* +Y93980D02*G75*G03X143078Y93980I203J0D01*G01* +G75*G03X142672Y93980I-203J0D01*G01* +X78537Y85090D02*G75*G03X78943Y85090I203J0D01*G01* +G75*G03X78537Y85090I-203J0D01*G01* +X81077D02*G75*G03X81483Y85090I203J0D01*G01* +G75*G03X81077Y85090I-203J0D01*G01* +X20117Y78105D02*G75*G03X20523Y78105I203J0D01*G01* +G75*G03X20117Y78105I-203J0D01*G01* +Y75336D02*G75*G03X20523Y75336I203J0D01*G01* +G75*G03X20117Y75336I-203J0D01*G01* +Y72568D02*G75*G03X20523Y72568I203J0D01*G01* +G75*G03X20117Y72568I-203J0D01*G01* +Y69799D02*G75*G03X20523Y69799I203J0D01*G01* +G75*G03X20117Y69799I-203J0D01*G01* +Y67031D02*G75*G03X20523Y67031I203J0D01*G01* +G75*G03X20117Y67031I-203J0D01*G01* +X17577Y76733D02*G75*G03X17983Y76733I203J0D01*G01* +G75*G03X17577Y76733I-203J0D01*G01* +Y73965D02*G75*G03X17983Y73965I203J0D01*G01* +G75*G03X17577Y73965I-203J0D01*G01* +Y71196D02*G75*G03X17983Y71196I203J0D01*G01* +G75*G03X17577Y71196I-203J0D01*G01* +Y68428D02*G75*G03X17983Y68428I203J0D01*G01* +G75*G03X17577Y68428I-203J0D01*G01* +X87427Y93980D02*G75*G03X87833Y93980I203J0D01*G01* +G75*G03X87427Y93980I-203J0D01*G01* +Y83820D02*G75*G03X87833Y83820I203J0D01*G01* +G75*G03X87427Y83820I-203J0D01*G01* +X58852Y39370D02*G75*G03X59258Y39370I203J0D01*G01* +G75*G03X58852Y39370I-203J0D01*G01* +X69012D02*G75*G03X69418Y39370I203J0D01*G01* +G75*G03X69012Y39370I-203J0D01*G01* +X44882D02*G75*G03X45288Y39370I203J0D01*G01* +G75*G03X44882Y39370I-203J0D01*G01* +X55042D02*G75*G03X55448Y39370I203J0D01*G01* +G75*G03X55042Y39370I-203J0D01*G01* +X44882Y49530D02*G75*G03X45288Y49530I203J0D01*G01* +G75*G03X44882Y49530I-203J0D01*G01* +X55042D02*G75*G03X55448Y49530I203J0D01*G01* +G75*G03X55042Y49530I-203J0D01*G01* +Y27940D02*G75*G03X55448Y27940I203J0D01*G01* +G75*G03X55042Y27940I-203J0D01*G01* +X44882D02*G75*G03X45288Y27940I203J0D01*G01* +G75*G03X44882Y27940I-203J0D01*G01* +X61392D02*G75*G03X61798Y27940I203J0D01*G01* +G75*G03X61392Y27940I-203J0D01*G01* +X63932D02*G75*G03X64338Y27940I203J0D01*G01* +G75*G03X63932Y27940I-203J0D01*G01* +X61392Y34290D02*G75*G03X61798Y34290I203J0D01*G01* +G75*G03X61392Y34290I-203J0D01*G01* +X63932D02*G75*G03X64338Y34290I203J0D01*G01* +G75*G03X63932Y34290I-203J0D01*G01* +X126162Y10160D02*G75*G03X126568Y10160I203J0D01*G01* +G75*G03X126162Y10160I-203J0D01*G01* +X70917Y81915D02*G75*G03X71323Y81915I203J0D01*G01* +G75*G03X70917Y81915I-203J0D01*G01* +X61392Y62230D02*G75*G03X61798Y62230I203J0D01*G01* +G75*G03X61392Y62230I-203J0D01*G01* +X109652Y15240D02*G75*G03X110058Y15240I203J0D01*G01* +G75*G03X109652Y15240I-203J0D01*G01* +X60757Y20320D02*G75*G03X61163Y20320I203J0D01*G01* +G75*G03X60757Y20320I-203J0D01*G01* +X44882Y31750D02*G75*G03X45288Y31750I203J0D01*G01* +G75*G03X44882Y31750I-203J0D01*G01* +X94412Y10160D02*G75*G03X94818Y10160I203J0D01*G01* +G75*G03X94412Y10160I-203J0D01*G01* +X101397Y21590D02*G75*G03X101803Y21590I203J0D01*G01* +G75*G03X101397Y21590I-203J0D01*G01* +X38532Y88265D02*G75*G03X38938Y88265I203J0D01*G01* +G75*G03X38532Y88265I-203J0D01*G01* +X126162Y36195D02*G75*G03X126568Y36195I203J0D01*G01* +G75*G03X126162Y36195I-203J0D01*G01* +X49327Y7620D02*G75*G03X49733Y7620I203J0D01*G01* +G75*G03X49327Y7620I-203J0D01*G01* +X55042Y47625D02*G75*G03X55448Y47625I203J0D01*G01* +G75*G03X55042Y47625I-203J0D01*G01* +X47422Y59690D02*G75*G03X47828Y59690I203J0D01*G01* +G75*G03X47422Y59690I-203J0D01*G01* +X119812Y81915D02*G75*G03X120218Y81915I203J0D01*G01* +G75*G03X119812Y81915I-203J0D01*G01* +X152832Y64135D02*G75*G03X153238Y64135I203J0D01*G01* +G75*G03X152832Y64135I-203J0D01*G01* +X101397Y62230D02*G75*G03X101803Y62230I203J0D01*G01* +G75*G03X101397Y62230I-203J0D01*G01* +X66472Y76835D02*G75*G03X66878Y76835I203J0D01*G01* +G75*G03X66472Y76835I-203J0D01*G01* +X40437Y85090D02*G75*G03X40843Y85090I203J0D01*G01* +G75*G03X40437Y85090I-203J0D01*G01* +X56947Y29845D02*G75*G03X57353Y29845I203J0D01*G01* +G75*G03X56947Y29845I-203J0D01*G01* +X131877Y86360D02*G75*G03X132283Y86360I203J0D01*G01* +G75*G03X131877Y86360I-203J0D01*G01* +X97587Y62230D02*G75*G03X97993Y62230I203J0D01*G01* +G75*G03X97587Y62230I-203J0D01*G01* +X47422Y76835D02*G75*G03X47828Y76835I203J0D01*G01* +G75*G03X47422Y76835I-203J0D01*G01* +X56947Y24765D02*G75*G03X57353Y24765I203J0D01*G01* +G75*G03X56947Y24765I-203J0D01*G01* +X109652Y57785D02*G75*G03X110058Y57785I203J0D01*G01* +G75*G03X109652Y57785I-203J0D01*G01* +X63932Y31750D02*G75*G03X64338Y31750I203J0D01*G01* +G75*G03X63932Y31750I-203J0D01*G01* +X61392D02*G75*G03X61798Y31750I203J0D01*G01* +G75*G03X61392Y31750I-203J0D01*G01* +X138227Y15875D02*G75*G03X138633Y15875I203J0D01*G01* +G75*G03X138227Y15875I-203J0D01*G01* +X76632Y81915D02*G75*G03X77038Y81915I203J0D01*G01* +G75*G03X76632Y81915I-203J0D01*G01* +X74727Y88900D02*G75*G03X75133Y88900I203J0D01*G01* +G75*G03X74727Y88900I-203J0D01*G01* +X44882Y62230D02*G75*G03X45288Y62230I203J0D01*G01* +G75*G03X44882Y62230I-203J0D01*G01* +X48057Y34290D02*G75*G03X48463Y34290I203J0D01*G01* +G75*G03X48057Y34290I-203J0D01*G01* +X63932Y24765D02*G75*G03X64338Y24765I203J0D01*G01* +G75*G03X63932Y24765I-203J0D01*G01* +X156007Y76835D02*G75*G03X156413Y76835I203J0D01*G01* +G75*G03X156007Y76835I-203J0D01*G01* +X97587Y17780D02*G75*G03X97993Y17780I203J0D01*G01* +G75*G03X97587Y17780I-203J0D01*G01* +X119812Y62230D02*G75*G03X120218Y62230I203J0D01*G01* +G75*G03X119812Y62230I-203J0D01*G01* +X66472Y52705D02*G75*G03X66878Y52705I203J0D01*G01* +G75*G03X66472Y52705I-203J0D01*G01* +Y59690D02*G75*G03X66878Y59690I203J0D01*G01* +G75*G03X66472Y59690I-203J0D01*G01* +X38532Y57785D02*G75*G03X38938Y57785I203J0D01*G01* +G75*G03X38532Y57785I-203J0D01*G01* +X153467Y15240D02*G75*G03X153873Y15240I203J0D01*G01* +G75*G03X153467Y15240I-203J0D01*G01* +X52502Y39370D02*G75*G03X52908Y39370I203J0D01*G01* +G75*G03X52502Y39370I-203J0D01*G01* +X131242Y62230D02*G75*G03X131648Y62230I203J0D01*G01* +G75*G03X131242Y62230I-203J0D01*G01* +X40437D02*G75*G03X40843Y62230I203J0D01*G01* +G75*G03X40437Y62230I-203J0D01*G01* +X140132Y17780D02*G75*G03X140538Y17780I203J0D01*G01* +G75*G03X140132Y17780I-203J0D01*G01* +X99492Y19685D02*G75*G03X99898Y19685I203J0D01*G01* +G75*G03X99492Y19685I-203J0D01*G01* +X98222Y67945D02*G75*G03X98628Y67945I203J0D01*G01* +G75*G03X98222Y67945I-203J0D01*G01* +X68377Y73025D02*G75*G03X68783Y73025I203J0D01*G01* +G75*G03X68377Y73025I-203J0D01*G01* +X91237Y67945D02*G75*G03X91643Y67945I203J0D01*G01* +G75*G03X91237Y67945I-203J0D01*G01* +X103937Y86360D02*G75*G03X104343Y86360I203J0D01*G01* +G75*G03X103937Y86360I-203J0D01*G01* +X68377Y96520D02*G75*G03X68783Y96520I203J0D01*G01* +G75*G03X68377Y96520I-203J0D01*G01* +X91237D02*G75*G03X91643Y96520I203J0D01*G01* +G75*G03X91237Y96520I-203J0D01*G01* +X48057Y24765D02*G75*G03X48463Y24765I203J0D01*G01* +G75*G03X48057Y24765I-203J0D01*G01* +X68377Y66040D02*G75*G03X68783Y66040I203J0D01*G01* +G75*G03X68377Y66040I-203J0D01*G01* +X82982Y96520D02*G75*G03X83388Y96520I203J0D01*G01* +G75*G03X82982Y96520I-203J0D01*G01* +X40437Y72390D02*G75*G03X40843Y72390I203J0D01*G01* +G75*G03X40437Y72390I-203J0D01*G01* +X3607Y133668D02*G75*G03X4013Y133668I203J0D01*G01* +G75*G03X3607Y133668I-203J0D01*G01* +X34290Y134239D02*Y134048D01* +X34671Y133668D01* +X35052Y134048D01* +Y134239D02*Y134048D01* +X34671Y133668D02*Y132715D01* +X35509Y133477D02*X36081D01* +X35509Y132715D02*X36271D01* +X35509Y134239D02*Y132715D01* +Y134239D02*X36271D01* +X37490D02*X37681Y134048D01* +X36919Y134239D02*X37490D01* +X36728Y134048D02*X36919Y134239D01* +X36728Y134048D02*Y133668D01* +X36919Y133477D01* +X37490D01* +X37681Y133286D01* +Y132906D01* +X37490Y132715D02*X37681Y132906D01* +X36919Y132715D02*X37490D01* +X36728Y132906D02*X36919Y132715D01* +X25082D02*X25464D01* +X25273Y134239D02*Y132715D01* +X24892Y133858D02*X25273Y134239D01* +X25921Y134048D02*X26111Y134239D01* +X26683D01* +X26873Y134048D01* +Y133668D01* +X25921Y132715D02*X26873Y133668D01* +X25921Y132715D02*X26873D01* +X27330D02*X28092Y133477D01* +Y134048D02*Y133477D01* +X27902Y134239D02*X28092Y134048D01* +X27521Y134239D02*X27902D01* +X27330Y134048D02*X27521Y134239D01* +X27330Y134048D02*Y133668D01* +X27521Y133477D01* +X28092D01* +X11430Y132906D02*X11620Y132715D01* +X11430Y134048D02*Y132906D01* +Y134048D02*X11620Y134239D01* +X12002D01* +X12192Y134048D01* +Y132906D01* +X12002Y132715D02*X12192Y132906D01* +X11620Y132715D02*X12002D01* +X11430Y133096D02*X12192Y133858D01* +X12649Y132715D02*X12840D01* +X13297Y132906D02*X13487Y132715D01* +X13297Y134048D02*Y132906D01* +Y134048D02*X13487Y134239D01* +X13868D01* +X14059Y134048D01* +Y132906D01* +X13868Y132715D02*X14059Y132906D01* +X13487Y132715D02*X13868D01* +X13297Y133096D02*X14059Y133858D01* +X14516Y134048D02*X14707Y134239D01* +X15088D01* +X15278Y134048D01* +Y132906D01* +X15088Y132715D02*X15278Y132906D01* +X14707Y132715D02*X15088D01* +X14516Y132906D02*X14707Y132715D01* +Y133477D02*X15278D01* +X15735Y134239D02*X16497D01* +X15735D02*Y133477D01* +X15926Y133668D01* +X16307D01* +X16497Y133477D01* +Y132906D01* +X16307Y132715D02*X16497Y132906D01* +X15926Y132715D02*X16307D01* +X15735Y132906D02*X15926Y132715D01* +X54940Y66345D02*X55550Y65735D01* +X54940D02*X55550Y66345D01* +X44780D02*X45390Y65735D01* +X44780D02*X45390Y66345D01* +X54940Y44755D02*X55550Y44145D01* +X54940D02*X55550Y44755D01* +X44780D02*X45390Y44145D01* +X44780D02*X45390Y44755D01* +X68910D02*X69520Y44145D01* +X68910D02*X69520Y44755D01* +X58750D02*X59360Y44145D01* +X58750D02*X59360Y44755D01* +X44780Y54915D02*X45390Y54305D01* +X44780D02*X45390Y54915D01* +X54940D02*X55550Y54305D01* +X54940D02*X55550Y54915D01* +X54940Y34595D02*X55550Y33985D01* +X54940D02*X55550Y34595D01* +X44780D02*X45390Y33985D01* +X44780D02*X45390Y34595D01* +X58750Y54915D02*X59360Y54305D01* +X58750D02*X59360Y54915D01* +X68910D02*X69520Y54305D01* +X68910D02*X69520Y54915D01* +X165430Y92380D02*X166040Y91770D01* +X165430D02*X166040Y92380D01* +X165430Y89840D02*X166040Y89230D01* +X165430D02*X166040Y89840D01* +X165430Y87300D02*X166040Y86690D01* +X165430D02*X166040Y87300D01* +X165430Y84760D02*X166040Y84150D01* +X165430D02*X166040Y84760D01* +X165430Y82220D02*X166040Y81610D01* +X165430D02*X166040Y82220D01* +X165430Y79680D02*X166040Y79070D01* +X165430D02*X166040Y79680D01* +X165430Y77140D02*X166040Y76530D01* +X165430D02*X166040Y77140D01* +X165430Y74600D02*X166040Y73990D01* +X165430D02*X166040Y74600D01* +X165430Y72060D02*X166040Y71450D01* +X165430D02*X166040Y72060D01* +X165430Y69520D02*X166040Y68910D01* +X165430D02*X166040Y69520D01* +X165430Y66980D02*X166040Y66370D01* +X165430D02*X166040Y66980D01* +X165430Y64440D02*X166040Y63830D01* +X165430D02*X166040Y64440D01* +X165430Y61900D02*X166040Y61290D01* +X165430D02*X166040Y61900D01* +X165430Y59360D02*X166040Y58750D01* +X165430D02*X166040Y59360D01* +X165430Y56820D02*X166040Y56210D01* +X165430D02*X166040Y56820D01* +X165430Y54280D02*X166040Y53670D01* +X165430D02*X166040Y54280D01* +X165430Y51740D02*X166040Y51130D01* +X165430D02*X166040Y51740D01* +X165430Y49200D02*X166040Y48590D01* +X165430D02*X166040Y49200D01* +X165430Y46660D02*X166040Y46050D01* +X165430D02*X166040Y46660D01* +X165430Y44120D02*X166040Y43510D01* +X165430D02*X166040Y44120D01* +X165430Y41580D02*X166040Y40970D01* +X165430D02*X166040Y41580D01* +X165430Y39040D02*X166040Y38430D01* +X165430D02*X166040Y39040D01* +X165430Y36500D02*X166040Y35890D01* +X165430D02*X166040Y36500D01* +X165430Y33960D02*X166040Y33350D01* +X165430D02*X166040Y33960D01* +X165430Y31420D02*X166040Y30810D01* +X165430D02*X166040Y31420D01* +X165430Y28880D02*X166040Y28270D01* +X165430D02*X166040Y28880D01* +X165430Y26340D02*X166040Y25730D01* +X165430D02*X166040Y26340D01* +X165430Y23800D02*X166040Y23190D01* +X165430D02*X166040Y23800D01* +X165430Y21260D02*X166040Y20650D01* +X165430D02*X166040Y21260D01* +X165430Y18720D02*X166040Y18110D01* +X165430D02*X166040Y18720D01* +X165430Y16180D02*X166040Y15570D01* +X165430D02*X166040Y16180D01* +X165430Y13640D02*X166040Y13030D01* +X165430D02*X166040Y13640D01* +X162890Y92380D02*X163500Y91770D01* +X162890D02*X163500Y92380D01* +X162890Y89840D02*X163500Y89230D01* +X162890D02*X163500Y89840D01* +X162890Y87300D02*X163500Y86690D01* +X162890D02*X163500Y87300D01* +X162890Y84760D02*X163500Y84150D01* +X162890D02*X163500Y84760D01* +X162890Y82220D02*X163500Y81610D01* +X162890D02*X163500Y82220D01* +X162890Y79680D02*X163500Y79070D01* +X162890D02*X163500Y79680D01* +X162890Y77140D02*X163500Y76530D01* +X162890D02*X163500Y77140D01* +X162890Y74600D02*X163500Y73990D01* +X162890D02*X163500Y74600D01* +X162890Y72060D02*X163500Y71450D01* +X162890D02*X163500Y72060D01* +X162890Y69520D02*X163500Y68910D01* +X162890D02*X163500Y69520D01* +X162890Y66980D02*X163500Y66370D01* +X162890D02*X163500Y66980D01* +X162890Y64440D02*X163500Y63830D01* +X162890D02*X163500Y64440D01* +X162890Y61900D02*X163500Y61290D01* +X162890D02*X163500Y61900D01* +X162890Y59360D02*X163500Y58750D01* +X162890D02*X163500Y59360D01* +X162890Y56820D02*X163500Y56210D01* +X162890D02*X163500Y56820D01* +X162890Y54280D02*X163500Y53670D01* +X162890D02*X163500Y54280D01* +X162890Y51740D02*X163500Y51130D01* +X162890D02*X163500Y51740D01* +X162890Y49200D02*X163500Y48590D01* +X162890D02*X163500Y49200D01* +X162890Y46660D02*X163500Y46050D01* +X162890D02*X163500Y46660D01* +X162890Y44120D02*X163500Y43510D01* +X162890D02*X163500Y44120D01* +X162890Y41580D02*X163500Y40970D01* +X162890D02*X163500Y41580D01* +X162890Y39040D02*X163500Y38430D01* +X162890D02*X163500Y39040D01* +X162890Y36500D02*X163500Y35890D01* +X162890D02*X163500Y36500D01* +X162890Y33960D02*X163500Y33350D01* +X162890D02*X163500Y33960D01* +X162890Y31420D02*X163500Y30810D01* +X162890D02*X163500Y31420D01* +X162890Y28880D02*X163500Y28270D01* +X162890D02*X163500Y28880D01* +X162890Y26340D02*X163500Y25730D01* +X162890D02*X163500Y26340D01* +X162890Y23800D02*X163500Y23190D01* +X162890D02*X163500Y23800D01* +X162890Y21260D02*X163500Y20650D01* +X162890D02*X163500Y21260D01* +X162890Y18720D02*X163500Y18110D01* +X162890D02*X163500Y18720D01* +X162890Y16180D02*X163500Y15570D01* +X162890D02*X163500Y16180D01* +X162890Y13640D02*X163500Y13030D01* +X162890D02*X163500Y13640D01* +X160350Y92380D02*X160960Y91770D01* +X160350D02*X160960Y92380D01* +X160350Y89840D02*X160960Y89230D01* +X160350D02*X160960Y89840D01* +X160350Y87300D02*X160960Y86690D01* +X160350D02*X160960Y87300D01* +X160350Y84760D02*X160960Y84150D01* +X160350D02*X160960Y84760D01* +X160350Y82220D02*X160960Y81610D01* +X160350D02*X160960Y82220D01* +X160350Y79680D02*X160960Y79070D01* +X160350D02*X160960Y79680D01* +X160350Y77140D02*X160960Y76530D01* +X160350D02*X160960Y77140D01* +X160350Y74600D02*X160960Y73990D01* +X160350D02*X160960Y74600D01* +X160350Y72060D02*X160960Y71450D01* +X160350D02*X160960Y72060D01* +X160350Y69520D02*X160960Y68910D01* +X160350D02*X160960Y69520D01* +X160350Y66980D02*X160960Y66370D01* +X160350D02*X160960Y66980D01* +X160350Y64440D02*X160960Y63830D01* +X160350D02*X160960Y64440D01* +X160350Y61900D02*X160960Y61290D01* +X160350D02*X160960Y61900D01* +X160350Y59360D02*X160960Y58750D01* +X160350D02*X160960Y59360D01* +X160350Y56820D02*X160960Y56210D01* +X160350D02*X160960Y56820D01* +X160350Y54280D02*X160960Y53670D01* +X160350D02*X160960Y54280D01* +X160350Y51740D02*X160960Y51130D01* +X160350D02*X160960Y51740D01* +X160350Y49200D02*X160960Y48590D01* +X160350D02*X160960Y49200D01* +X160350Y46660D02*X160960Y46050D01* +X160350D02*X160960Y46660D01* +X160350Y44120D02*X160960Y43510D01* +X160350D02*X160960Y44120D01* +X160350Y41580D02*X160960Y40970D01* +X160350D02*X160960Y41580D01* +X160350Y39040D02*X160960Y38430D01* +X160350D02*X160960Y39040D01* +X160350Y36500D02*X160960Y35890D01* +X160350D02*X160960Y36500D01* +X160350Y33960D02*X160960Y33350D01* +X160350D02*X160960Y33960D01* +X160350Y31420D02*X160960Y30810D01* +X160350D02*X160960Y31420D01* +X160350Y28880D02*X160960Y28270D01* +X160350D02*X160960Y28880D01* +X160350Y26340D02*X160960Y25730D01* +X160350D02*X160960Y26340D01* +X160350Y23800D02*X160960Y23190D01* +X160350D02*X160960Y23800D01* +X160350Y21260D02*X160960Y20650D01* +X160350D02*X160960Y21260D01* +X160350Y18720D02*X160960Y18110D01* +X160350D02*X160960Y18720D01* +X160350Y16180D02*X160960Y15570D01* +X160350D02*X160960Y16180D01* +X160350Y13640D02*X160960Y13030D01* +X160350D02*X160960Y13640D01* +X3505Y137782D02*X4115Y137173D01* +X3505D02*X4115Y137782D01* +X34290Y138049D02*Y137858D01* +X34671Y137478D01* +X35052Y137858D01* +Y138049D02*Y137858D01* +X34671Y137478D02*Y136525D01* +X35509Y137287D02*X36081D01* +X35509Y136525D02*X36271D01* +X35509Y138049D02*Y136525D01* +Y138049D02*X36271D01* +X37490D02*X37681Y137858D01* +X36919Y138049D02*X37490D01* +X36728Y137858D02*X36919Y138049D01* +X36728Y137858D02*Y137478D01* +X36919Y137287D01* +X37490D01* +X37681Y137096D01* +Y136716D01* +X37490Y136525D02*X37681Y136716D01* +X36919Y136525D02*X37490D01* +X36728Y136716D02*X36919Y136525D01* +X25082D02*X25464D01* +X25273Y138049D02*Y136525D01* +X24892Y137668D02*X25273Y138049D01* +X25921Y136716D02*X26111Y136525D01* +X25921Y137858D02*Y136716D01* +Y137858D02*X26111Y138049D01* +X26492D01* +X26683Y137858D01* +Y136716D01* +X26492Y136525D02*X26683Y136716D01* +X26111Y136525D02*X26492D01* +X25921Y136906D02*X26683Y137668D01* +X27140Y136716D02*X27330Y136525D01* +X27140Y137096D02*Y136716D01* +Y137096D02*X27330Y137287D01* +X27711D01* +X27902Y137096D01* +Y136716D01* +X27711Y136525D02*X27902Y136716D01* +X27330Y136525D02*X27711D01* +X27140Y137478D02*X27330Y137287D01* +X27140Y137858D02*Y137478D01* +Y137858D02*X27330Y138049D01* +X27711D01* +X27902Y137858D01* +Y137478D01* +X27711Y137287D02*X27902Y137478D01* +X11430Y136716D02*X11620Y136525D01* +X11430Y137858D02*Y136716D01* +Y137858D02*X11620Y138049D01* +X12002D01* +X12192Y137858D01* +Y136716D01* +X12002Y136525D02*X12192Y136716D01* +X11620Y136525D02*X12002D01* +X11430Y136906D02*X12192Y137668D01* +X12649Y136525D02*X12840D01* +X13297Y136716D02*X13487Y136525D01* +X13297Y137858D02*Y136716D01* +Y137858D02*X13487Y138049D01* +X13868D01* +X14059Y137858D01* +Y136716D01* +X13868Y136525D02*X14059Y136716D01* +X13487Y136525D02*X13868D01* +X13297Y136906D02*X14059Y137668D01* +X14516Y137858D02*X14707Y138049D01* +X15088D01* +X15278Y137858D01* +Y136716D01* +X15088Y136525D02*X15278Y136716D01* +X14707Y136525D02*X15088D01* +X14516Y136716D02*X14707Y136525D01* +Y137287D02*X15278D01* +X15735Y136716D02*X15926Y136525D01* +X15735Y137858D02*Y136716D01* +Y137858D02*X15926Y138049D01* +X16307D01* +X16497Y137858D01* +Y136716D01* +X16307Y136525D02*X16497Y136716D01* +X15926Y136525D02*X16307D01* +X15735Y136906D02*X16497Y137668D01* +X57150Y85496D02*Y84684D01* +X56744Y85090D02*X57556D01* +X59690Y85496D02*Y84684D01* +X59284Y85090D02*X60096D01* +X62230Y85496D02*Y84684D01* +X61824Y85090D02*X62636D01* +X64770Y85496D02*Y84684D01* +X64364Y85090D02*X65176D01* +X64770Y93116D02*Y92304D01* +X64364Y92710D02*X65176D01* +X62230Y93116D02*Y92304D01* +X61824Y92710D02*X62636D01* +X59690Y93116D02*Y92304D01* +X59284Y92710D02*X60096D01* +X57150Y93116D02*Y92304D01* +X56744Y92710D02*X57556D01* +X50165Y96926D02*Y96114D01* +X49759Y96520D02*X50571D01* +X45085Y96926D02*Y96114D01* +X44679Y96520D02*X45491D01* +X71120Y71526D02*Y70714D01* +X70714Y71120D02*X71526D01* +X73660Y71526D02*Y70714D01* +X73254Y71120D02*X74066D01* +X76200Y71526D02*Y70714D01* +X75794Y71120D02*X76606D01* +X78740Y71526D02*Y70714D01* +X78334Y71120D02*X79146D01* +X81280Y71526D02*Y70714D01* +X80874Y71120D02*X81686D01* +X83820Y71526D02*Y70714D01* +X83414Y71120D02*X84226D01* +X86360Y71526D02*Y70714D01* +X85954Y71120D02*X86766D01* +X88900Y71526D02*Y70714D01* +X88494Y71120D02*X89306D01* +X88900Y79146D02*Y78334D01* +X88494Y78740D02*X89306D01* +X86360Y79146D02*Y78334D01* +X85954Y78740D02*X86766D01* +X83820Y79146D02*Y78334D01* +X83414Y78740D02*X84226D01* +X81280Y79146D02*Y78334D01* +X80874Y78740D02*X81686D01* +X78740Y79146D02*Y78334D01* +X78334Y78740D02*X79146D01* +X76200Y79146D02*Y78334D01* +X75794Y78740D02*X76606D01* +X73660Y79146D02*Y78334D01* +X73254Y78740D02*X74066D01* +X71120Y79146D02*Y78334D01* +X70714Y78740D02*X71526D01* +X150495Y8026D02*Y7214D01* +X150089Y7620D02*X150901D01* +X150495Y13106D02*Y12294D01* +X150089Y12700D02*X150901D01* +X50165Y91211D02*Y90399D01* +X49759Y90805D02*X50571D01* +X45085Y91211D02*Y90399D01* +X44679Y90805D02*X45491D01* +X140335Y13106D02*Y12294D01* +X139929Y12700D02*X140741D01* +X140335Y8026D02*Y7214D01* +X139929Y7620D02*X140741D01* +X146050Y8026D02*Y7214D01* +X145644Y7620D02*X146456D01* +X146050Y13106D02*Y12294D01* +X145644Y12700D02*X146456D01* +X45085Y77876D02*Y77064D01* +X44679Y77470D02*X45491D01* +X45085Y72796D02*Y71984D01* +X44679Y72390D02*X45491D01* +X128905Y96926D02*Y96114D01* +X128499Y96520D02*X129311D01* +X123825Y96926D02*Y96114D01* +X123419Y96520D02*X124231D01* +X116840Y72796D02*Y71984D01* +X116434Y72390D02*X117246D01* +X116840Y77876D02*Y77064D01* +X116434Y77470D02*X117246D01* +X154305Y96926D02*Y96114D01* +X153899Y96520D02*X154711D01* +X149225Y96926D02*Y96114D01* +X148819Y96520D02*X149631D01* +X122555Y71526D02*Y70714D01* +X122149Y71120D02*X122961D01* +X125095Y71526D02*Y70714D01* +X124689Y71120D02*X125501D01* +X127635Y71526D02*Y70714D01* +X127229Y71120D02*X128041D01* +X130175Y71526D02*Y70714D01* +X129769Y71120D02*X130581D01* +X132715Y71526D02*Y70714D01* +X132309Y71120D02*X133121D01* +X135255Y71526D02*Y70714D01* +X134849Y71120D02*X135661D01* +X137795Y71526D02*Y70714D01* +X137389Y71120D02*X138201D01* +X140335Y71526D02*Y70714D01* +X139929Y71120D02*X140741D01* +X142875Y71526D02*Y70714D01* +X142469Y71120D02*X143281D01* +X145415Y71526D02*Y70714D01* +X145009Y71120D02*X145821D01* +X147955Y71526D02*Y70714D01* +X147549Y71120D02*X148361D01* +X150495Y71526D02*Y70714D01* +X150089Y71120D02*X150901D01* +X153035Y71526D02*Y70714D01* +X152629Y71120D02*X153441D01* +X155575Y71526D02*Y70714D01* +X155169Y71120D02*X155981D01* +X155575Y79146D02*Y78334D01* +X155169Y78740D02*X155981D01* +X153035Y79146D02*Y78334D01* +X152629Y78740D02*X153441D01* +X150495Y79146D02*Y78334D01* +X150089Y78740D02*X150901D01* +X147955Y79146D02*Y78334D01* +X147549Y78740D02*X148361D01* +X145415Y79146D02*Y78334D01* +X145009Y78740D02*X145821D01* +X142875Y79146D02*Y78334D01* +X142469Y78740D02*X143281D01* +X140335Y79146D02*Y78334D01* +X139929Y78740D02*X140741D01* +X137795Y79146D02*Y78334D01* +X137389Y78740D02*X138201D01* +X135255Y79146D02*Y78334D01* +X134849Y78740D02*X135661D01* +X132715Y79146D02*Y78334D01* +X132309Y78740D02*X133121D01* +X130175Y79146D02*Y78334D01* +X129769Y78740D02*X130581D01* +X127635Y79146D02*Y78334D01* +X127229Y78740D02*X128041D01* +X125095Y79146D02*Y78334D01* +X124689Y78740D02*X125501D01* +X122555Y79146D02*Y78334D01* +X122149Y78740D02*X122961D01* +X122555Y85496D02*Y84684D01* +X122149Y85090D02*X122961D01* +X125095Y85496D02*Y84684D01* +X124689Y85090D02*X125501D01* +X127635Y85496D02*Y84684D01* +X127229Y85090D02*X128041D01* +X130175Y85496D02*Y84684D01* +X129769Y85090D02*X130581D01* +X130175Y93116D02*Y92304D01* +X129769Y92710D02*X130581D01* +X127635Y93116D02*Y92304D01* +X127229Y92710D02*X128041D01* +X125095Y93116D02*Y92304D01* +X124689Y92710D02*X125501D01* +X122555Y93116D02*Y92304D01* +X122149Y92710D02*X122961D01* +X147955Y85496D02*Y84684D01* +X147549Y85090D02*X148361D01* +X150495Y85496D02*Y84684D01* +X150089Y85090D02*X150901D01* +X153035Y85496D02*Y84684D01* +X152629Y85090D02*X153441D01* +X155575Y85496D02*Y84684D01* +X155169Y85090D02*X155981D01* +X155575Y93116D02*Y92304D01* +X155169Y92710D02*X155981D01* +X153035Y93116D02*Y92304D01* +X152629Y92710D02*X153441D01* +X150495Y93116D02*Y92304D01* +X150089Y92710D02*X150901D01* +X147955Y93116D02*Y92304D01* +X147549Y92710D02*X148361D01* +X94615Y71526D02*Y70714D01* +X94209Y71120D02*X95021D01* +X97155Y71526D02*Y70714D01* +X96749Y71120D02*X97561D01* +X99695Y71526D02*Y70714D01* +X99289Y71120D02*X100101D01* +X102235Y71526D02*Y70714D01* +X101829Y71120D02*X102641D01* +X102235Y79146D02*Y78334D01* +X101829Y78740D02*X102641D01* +X99695Y79146D02*Y78334D01* +X99289Y78740D02*X100101D01* +X97155Y79146D02*Y78334D01* +X96749Y78740D02*X97561D01* +X94615Y79146D02*Y78334D01* +X94209Y78740D02*X95021D01* +X100965Y96926D02*Y96114D01* +X100559Y96520D02*X101371D01* +X95885Y96926D02*Y96114D01* +X95479Y96520D02*X96291D01* +X94615Y85496D02*Y84684D01* +X94209Y85090D02*X95021D01* +X97155Y85496D02*Y84684D01* +X96749Y85090D02*X97561D01* +X99695Y85496D02*Y84684D01* +X99289Y85090D02*X100101D01* +X102235Y85496D02*Y84684D01* +X101829Y85090D02*X102641D01* +X102235Y93116D02*Y92304D01* +X101829Y92710D02*X102641D01* +X99695Y93116D02*Y92304D01* +X99289Y92710D02*X100101D01* +X97155Y93116D02*Y92304D01* +X96749Y92710D02*X97561D01* +X94615Y93116D02*Y92304D01* +X94209Y92710D02*X95021D01* +X49530Y71526D02*Y70714D01* +X49124Y71120D02*X49936D01* +X52070Y71526D02*Y70714D01* +X51664Y71120D02*X52476D01* +X54610Y71526D02*Y70714D01* +X54204Y71120D02*X55016D01* +X57150Y71526D02*Y70714D01* +X56744Y71120D02*X57556D01* +X59690Y71526D02*Y70714D01* +X59284Y71120D02*X60096D01* +X62230Y71526D02*Y70714D01* +X61824Y71120D02*X62636D01* +X64770Y71526D02*Y70714D01* +X64364Y71120D02*X65176D01* +X64770Y79146D02*Y78334D01* +X64364Y78740D02*X65176D01* +X62230Y79146D02*Y78334D01* +X61824Y78740D02*X62636D01* +X59690Y79146D02*Y78334D01* +X59284Y78740D02*X60096D01* +X57150Y79146D02*Y78334D01* +X56744Y78740D02*X57556D01* +X54610Y79146D02*Y78334D01* +X54204Y78740D02*X55016D01* +X52070Y79146D02*Y78334D01* +X51664Y78740D02*X52476D01* +X49530Y79146D02*Y78334D01* +X49124Y78740D02*X49936D01* +X63500Y96926D02*Y96114D01* +X63094Y96520D02*X63906D01* +X58420Y96926D02*Y96114D01* +X58014Y96520D02*X58826D01* +X49530Y15646D02*Y14834D01* +X49124Y15240D02*X49936D01* +X52070Y15646D02*Y14834D01* +X51664Y15240D02*X52476D01* +X54610Y15646D02*Y14834D01* +X54204Y15240D02*X55016D01* +X57150Y15646D02*Y14834D01* +X56744Y15240D02*X57556D01* +X59690Y15646D02*Y14834D01* +X59284Y15240D02*X60096D01* +X62230Y15646D02*Y14834D01* +X61824Y15240D02*X62636D01* +X64770Y15646D02*Y14834D01* +X64364Y15240D02*X65176D01* +X64770Y23266D02*Y22454D01* +X64364Y22860D02*X65176D01* +X62230Y23266D02*Y22454D01* +X61824Y22860D02*X62636D01* +X59690Y23266D02*Y22454D01* +X59284Y22860D02*X60096D01* +X57150Y23266D02*Y22454D01* +X56744Y22860D02*X57556D01* +X54610Y23266D02*Y22454D01* +X54204Y22860D02*X55016D01* +X52070Y23266D02*Y22454D01* +X51664Y22860D02*X52476D01* +X49530Y23266D02*Y22454D01* +X49124Y22860D02*X49936D01* +X45085Y21996D02*Y21184D01* +X44679Y21590D02*X45491D01* +X45085Y16916D02*Y16104D01* +X44679Y16510D02*X45491D01* +X3810Y141694D02*Y140881D01* +X3404Y141288D02*X4216D01* +X34290Y141859D02*Y141668D01* +X34671Y141288D01* +X35052Y141668D01* +Y141859D02*Y141668D01* +X34671Y141288D02*Y140335D01* +X35509Y141097D02*X36081D01* +X35509Y140335D02*X36271D01* +X35509Y141859D02*Y140335D01* +Y141859D02*X36271D01* +X37490D02*X37681Y141668D01* +X36919Y141859D02*X37490D01* +X36728Y141668D02*X36919Y141859D01* +X36728Y141668D02*Y141288D01* +X36919Y141097D01* +X37490D01* +X37681Y140906D01* +Y140526D01* +X37490Y140335D02*X37681Y140526D01* +X36919Y140335D02*X37490D01* +X36728Y140526D02*X36919Y140335D01* +X25082D02*X25464D01* +X25273Y141859D02*Y140335D01* +X24892Y141478D02*X25273Y141859D01* +X25921Y141668D02*X26111Y141859D01* +X26492D01* +X26683Y141668D01* +Y140526D01* +X26492Y140335D02*X26683Y140526D01* +X26111Y140335D02*X26492D01* +X25921Y140526D02*X26111Y140335D01* +Y141097D02*X26683D01* +X27711Y141859D02*X27902Y141668D01* +X27330Y141859D02*X27711D01* +X27140Y141668D02*X27330Y141859D01* +X27140Y141668D02*Y140526D01* +X27330Y140335D01* +X27711Y141097D02*X27902Y140906D01* +X27140Y141097D02*X27711D01* +X27330Y140335D02*X27711D01* +X27902Y140526D01* +Y140906D02*Y140526D01* +X11430D02*X11620Y140335D01* +X11430Y141668D02*Y140526D01* +Y141668D02*X11620Y141859D01* +X12002D01* +X12192Y141668D01* +Y140526D01* +X12002Y140335D02*X12192Y140526D01* +X11620Y140335D02*X12002D01* +X11430Y140716D02*X12192Y141478D01* +X12649Y140335D02*X12840D01* +X13297Y140526D02*X13487Y140335D01* +X13297Y141668D02*Y140526D01* +Y141668D02*X13487Y141859D01* +X13868D01* +X14059Y141668D01* +Y140526D01* +X13868Y140335D02*X14059Y140526D01* +X13487Y140335D02*X13868D01* +X13297Y140716D02*X14059Y141478D01* +X14516Y141668D02*X14707Y141859D01* +X15278D01* +X15469Y141668D01* +Y141288D01* +X14516Y140335D02*X15469Y141288D01* +X14516Y140335D02*X15469D01* +X15926Y140526D02*X16116Y140335D01* +X15926Y140906D02*Y140526D01* +Y140906D02*X16116Y141097D01* +X16497D01* +X16688Y140906D01* +Y140526D01* +X16497Y140335D02*X16688Y140526D01* +X16116Y140335D02*X16497D01* +X15926Y141288D02*X16116Y141097D01* +X15926Y141668D02*Y141288D01* +Y141668D02*X16116Y141859D01* +X16497D01* +X16688Y141668D01* +Y141288D01* +X16497Y141097D02*X16688Y141288D01* +X26035Y71120D02*Y70714D01* +Y71120D02*X26387Y71323D01* +X26035Y71120D02*X25683Y71323D01* +X92710Y23495D02*Y23089D01* +Y23495D02*X93062Y23698D01* +X92710Y23495D02*X92358Y23698D01* +X71755Y41910D02*Y41504D01* +Y41910D02*X72107Y42113D01* +X71755Y41910D02*X71403Y42113D01* +X80010Y33020D02*Y32614D01* +Y33020D02*X80362Y33223D01* +X80010Y33020D02*X79658Y33223D01* +X108585Y99695D02*Y99289D01* +Y99695D02*X108937Y99898D01* +X108585Y99695D02*X108233Y99898D01* +X102235Y99695D02*Y99289D01* +Y99695D02*X102587Y99898D01* +X102235Y99695D02*X101883Y99898D01* +X91440Y46355D02*Y45949D01* +Y46355D02*X91792Y46558D01* +X91440Y46355D02*X91088Y46558D01* +X22225Y69850D02*Y69444D01* +Y69850D02*X22577Y70053D01* +X22225Y69850D02*X21873Y70053D01* +X62865Y99695D02*Y99289D01* +Y99695D02*X63217Y99898D01* +X62865Y99695D02*X62513Y99898D01* +X93345Y80645D02*Y80239D01* +Y80645D02*X93697Y80848D01* +X93345Y80645D02*X92993Y80848D01* +X57150Y56515D02*Y56109D01* +Y56515D02*X57502Y56718D01* +X57150Y56515D02*X56798Y56718D01* +X57150Y60960D02*Y60554D01* +Y60960D02*X57502Y61163D01* +X57150Y60960D02*X56798Y61163D01* +X112395Y87630D02*Y87224D01* +Y87630D02*X112747Y87833D01* +X112395Y87630D02*X112043Y87833D01* +X89535Y60960D02*Y60554D01* +Y60960D02*X89887Y61163D01* +X89535Y60960D02*X89183Y61163D01* +X128905Y68580D02*Y68174D01* +Y68580D02*X129257Y68783D01* +X128905Y68580D02*X128553Y68783D01* +X87630Y67945D02*Y67539D01* +Y67945D02*X87982Y68148D01* +X87630Y67945D02*X87278Y68148D01* +X128905Y74930D02*Y74524D01* +Y74930D02*X129257Y75133D01* +X128905Y74930D02*X128553Y75133D01* +X80010Y67945D02*Y67539D01* +Y67945D02*X80362Y68148D01* +X80010Y67945D02*X79658Y68148D01* +X121285Y98425D02*Y98019D01* +Y98425D02*X121637Y98628D01* +X121285Y98425D02*X120933Y98628D01* +X121285Y74930D02*Y74524D01* +Y74930D02*X121637Y75133D01* +X121285Y74930D02*X120933Y75133D01* +X106045Y93980D02*Y93574D01* +Y93980D02*X106397Y94183D01* +X106045Y93980D02*X105693Y94183D01* +X74930Y69850D02*Y69444D01* +Y69850D02*X75282Y70053D01* +X74930Y69850D02*X74578Y70053D01* +X39370Y10795D02*Y10389D01* +Y10795D02*X39722Y10998D01* +X39370Y10795D02*X39018Y10998D01* +X91440Y66040D02*Y65634D01* +Y66040D02*X91792Y66243D01* +X91440Y66040D02*X91088Y66243D01* +X107950Y74930D02*Y74524D01* +Y74930D02*X108302Y75133D01* +X107950Y74930D02*X107598Y75133D01* +X52070Y13335D02*Y12929D01* +Y13335D02*X52422Y13538D01* +X52070Y13335D02*X51718Y13538D01* +X139065Y90805D02*Y90399D01* +Y90805D02*X139417Y91008D01* +X139065Y90805D02*X138713Y91008D01* +X135255Y89535D02*Y89129D01* +Y89535D02*X135607Y89738D01* +X135255Y89535D02*X134903Y89738D01* +X142875Y88265D02*Y87859D01* +Y88265D02*X143227Y88468D01* +X142875Y88265D02*X142523Y88468D01* +X84455Y59690D02*Y59284D01* +Y59690D02*X84807Y59893D01* +X84455Y59690D02*X84103Y59893D01* +X125095Y59690D02*Y59284D01* +Y59690D02*X125447Y59893D01* +X125095Y59690D02*X124743Y59893D01* +X53340Y93980D02*Y93574D01* +Y93980D02*X53692Y94183D01* +X53340Y93980D02*X52988Y94183D01* +X150495Y74930D02*Y74524D01* +Y74930D02*X150847Y75133D01* +X150495Y74930D02*X150143Y75133D01* +X122555Y66040D02*Y65634D01* +Y66040D02*X122907Y66243D01* +X122555Y66040D02*X122203Y66243D01* +X121285Y77470D02*Y77064D01* +Y77470D02*X121637Y77673D01* +X121285Y77470D02*X120933Y77673D01* +X40640Y56515D02*Y56109D01* +Y56515D02*X40992Y56718D01* +X40640Y56515D02*X40288Y56718D01* +X121920Y76200D02*Y75794D01* +Y76200D02*X122272Y76403D01* +X121920Y76200D02*X121568Y76403D01* +X23495Y68580D02*Y68174D01* +Y68580D02*X23847Y68783D01* +X23495Y68580D02*X23143Y68783D01* +X100965Y67945D02*Y67539D01* +Y67945D02*X101317Y68148D01* +X100965Y67945D02*X100613Y68148D01* +X112395Y99695D02*Y99289D01* +Y99695D02*X112747Y99898D01* +X112395Y99695D02*X112043Y99898D01* +X92710Y64770D02*Y64364D01* +Y64770D02*X93062Y64973D01* +X92710Y64770D02*X92358Y64973D01* +X106045Y101600D02*Y101194D01* +Y101600D02*X106397Y101803D01* +X106045Y101600D02*X105693Y101803D01* +X143510Y63500D02*Y63094D01* +Y63500D02*X143862Y63703D01* +X143510Y63500D02*X143158Y63703D01* +X110490Y92710D02*Y92304D01* +Y92710D02*X110842Y92913D01* +X110490Y92710D02*X110138Y92913D01* +X77470Y68580D02*Y68174D01* +Y68580D02*X77822Y68783D01* +X77470Y68580D02*X77118Y68783D01* +X112395Y74930D02*Y74524D01* +Y74930D02*X112747Y75133D01* +X112395Y74930D02*X112043Y75133D01* +X26035Y75565D02*Y75159D01* +Y75565D02*X26387Y75768D01* +X26035Y75565D02*X25683Y75768D01* +X95885Y83185D02*Y82779D01* +Y83185D02*X96237Y83388D01* +X95885Y83185D02*X95533Y83388D01* +X89535Y74295D02*Y73889D01* +Y74295D02*X89887Y74498D01* +X89535Y74295D02*X89183Y74498D01* +X88900Y73025D02*Y72619D01* +Y73025D02*X89252Y73228D01* +X88900Y73025D02*X88548Y73228D01* +X94615Y66040D02*Y65634D01* +Y66040D02*X94967Y66243D01* +X94615Y66040D02*X94263Y66243D01* +X78740Y80645D02*Y80239D01* +Y80645D02*X79092Y80848D01* +X78740Y80645D02*X78388Y80848D01* +X54610Y12065D02*Y11659D01* +Y12065D02*X54962Y12268D01* +X54610Y12065D02*X54258Y12268D01* +X72390Y76835D02*Y76429D01* +Y76835D02*X72742Y77038D01* +X72390Y76835D02*X72038Y77038D01* +X57150Y10795D02*Y10389D01* +Y10795D02*X57502Y10998D01* +X57150Y10795D02*X56798Y10998D01* +X95885Y75565D02*Y75159D01* +Y75565D02*X96237Y75768D01* +X95885Y75565D02*X95533Y75768D01* +X80010Y69850D02*Y69444D01* +Y69850D02*X80362Y70053D01* +X80010Y69850D02*X79658Y70053D01* +X82550Y63500D02*Y63094D01* +Y63500D02*X82902Y63703D01* +X82550Y63500D02*X82198Y63703D01* +X133985Y82550D02*Y82144D01* +Y82550D02*X134337Y82753D01* +X133985Y82550D02*X133633Y82753D01* +X135255Y81915D02*Y81509D01* +Y81915D02*X135607Y82118D01* +X135255Y81915D02*X134903Y82118D01* +X138430Y67310D02*Y66904D01* +Y67310D02*X138782Y67513D01* +X138430Y67310D02*X138078Y67513D01* +X141605Y60325D02*Y59919D01* +Y60325D02*X141957Y60528D01* +X141605Y60325D02*X141253Y60528D01* +X155575Y81915D02*Y81509D01* +Y81915D02*X155927Y82118D01* +X155575Y81915D02*X155223Y82118D01* +X50800Y66040D02*Y65634D01* +Y66040D02*X51152Y66243D01* +X50800Y66040D02*X50448Y66243D01* +X39370Y34290D02*Y33884D01* +Y34290D02*X39722Y34493D01* +X39370Y34290D02*X39018Y34493D01* +X41910Y13335D02*Y12929D01* +Y13335D02*X42262Y13538D01* +X41910Y13335D02*X41558Y13538D01* +X40640Y12065D02*Y11659D01* +Y12065D02*X40992Y12268D01* +X40640Y12065D02*X40288Y12268D01* +X50800Y73025D02*Y72619D01* +Y73025D02*X51152Y73228D01* +X50800Y73025D02*X50448Y73228D01* +X116840Y86360D02*Y85954D01* +Y86360D02*X117192Y86563D01* +X116840Y86360D02*X116488Y86563D01* +X85090Y94615D02*Y94209D01* +Y94615D02*X85442Y94818D01* +X85090Y94615D02*X84738Y94818D01* +X3810Y145098D02*Y144691D01* +Y145098D02*X4162Y145301D01* +X3810Y145098D02*X3458Y145301D01* +X34290Y145669D02*Y145478D01* +X34671Y145098D01* +X35052Y145478D01* +Y145669D02*Y145478D01* +X34671Y145098D02*Y144145D01* +X35509Y144907D02*X36081D01* +X35509Y144145D02*X36271D01* +X35509Y145669D02*Y144145D01* +Y145669D02*X36271D01* +X37490D02*X37681Y145478D01* +X36919Y145669D02*X37490D01* +X36728Y145478D02*X36919Y145669D01* +X36728Y145478D02*Y145098D01* +X36919Y144907D01* +X37490D01* +X37681Y144716D01* +Y144336D01* +X37490Y144145D02*X37681Y144336D01* +X36919Y144145D02*X37490D01* +X36728Y144336D02*X36919Y144145D01* +X24892D02*X25844Y145098D01* +Y145669D02*Y145098D01* +X24892Y145669D02*X25844D01* +X26302Y144336D02*X26492Y144145D01* +X26302Y145478D02*Y144336D01* +Y145478D02*X26492Y145669D01* +X26873D01* +X27064Y145478D01* +Y144336D01* +X26873Y144145D02*X27064Y144336D01* +X26492Y144145D02*X26873D01* +X26302Y144526D02*X27064Y145288D01* +X11430Y144336D02*X11620Y144145D01* +X11430Y145478D02*Y144336D01* +Y145478D02*X11620Y145669D01* +X12002D01* +X12192Y145478D01* +Y144336D01* +X12002Y144145D02*X12192Y144336D01* +X11620Y144145D02*X12002D01* +X11430Y144526D02*X12192Y145288D01* +X12649Y144145D02*X12840D01* +X13297Y144336D02*X13487Y144145D01* +X13297Y145478D02*Y144336D01* +Y145478D02*X13487Y145669D01* +X13868D01* +X14059Y145478D01* +Y144336D01* +X13868Y144145D02*X14059Y144336D01* +X13487Y144145D02*X13868D01* +X13297Y144526D02*X14059Y145288D01* +X14516Y145478D02*X14707Y145669D01* +X15278D01* +X15469Y145478D01* +Y145098D01* +X14516Y144145D02*X15469Y145098D01* +X14516Y144145D02*X15469D01* +X15926Y144336D02*X16116Y144145D01* +X15926Y145478D02*Y144336D01* +Y145478D02*X16116Y145669D01* +X16497D01* +X16688Y145478D01* +Y144336D01* +X16497Y144145D02*X16688Y144336D01* +X16116Y144145D02*X16497D01* +X15926Y144526D02*X16688Y145288D01* +X762Y149479D02*X952Y149288D01* +X190Y149479D02*X762D01* +X0Y149288D02*X190Y149479D01* +X0Y149288D02*Y148908D01* +X190Y148717D01* +X762D01* +X952Y148526D01* +Y148146D01* +X762Y147955D02*X952Y148146D01* +X190Y147955D02*X762D01* +X0Y148146D02*X190Y147955D01* +X1410Y148717D02*Y148146D01* +X1600Y147955D01* +X2172Y148717D02*Y147574D01* +X1981Y147384D02*X2172Y147574D01* +X1600Y147384D02*X1981D01* +X1410Y147574D02*X1600Y147384D01* +Y147955D02*X1981D01* +X2172Y148146D01* +X2819Y148526D02*Y147955D01* +Y148526D02*X3010Y148717D01* +X3200D01* +X3391Y148526D01* +Y147955D01* +Y148526D02*X3581Y148717D01* +X3772D01* +X3962Y148526D01* +Y147955D01* +X2629Y148717D02*X2819Y148526D01* +X4420Y149479D02*Y147955D01* +Y148146D02*X4610Y147955D01* +X4991D01* +X5182Y148146D01* +Y148526D02*Y148146D01* +X4991Y148717D02*X5182Y148526D01* +X4610Y148717D02*X4991D01* +X4420Y148526D02*X4610Y148717D01* +X5639Y148526D02*Y148146D01* +Y148526D02*X5829Y148717D01* +X6210D01* +X6401Y148526D01* +Y148146D01* +X6210Y147955D02*X6401Y148146D01* +X5829Y147955D02*X6210D01* +X5639Y148146D02*X5829Y147955D01* +X6858Y149479D02*Y148146D01* +X7049Y147955D01* +X0Y147129D02*X7430D01* +X10604Y149479D02*Y147955D01* +X11176Y149479D02*X11366Y149288D01* +Y148146D01* +X11176Y147955D02*X11366Y148146D01* +X10414Y147955D02*X11176D01* +X10414Y149479D02*X11176D01* +X11824Y149098D02*Y148908D01* +Y148526D02*Y147955D01* +X12776Y148717D02*X12967Y148526D01* +X12395Y148717D02*X12776D01* +X12205Y148526D02*X12395Y148717D01* +X12205Y148526D02*Y148146D01* +X12395Y147955D01* +X12967Y148717D02*Y148146D01* +X13157Y147955D01* +X12395D02*X12776D01* +X12967Y148146D01* +X13805Y148526D02*Y147955D01* +Y148526D02*X13995Y148717D01* +X14186D01* +X14376Y148526D01* +Y147955D01* +Y148526D02*X14567Y148717D01* +X14757D01* +X14948Y148526D01* +Y147955D01* +X13614Y148717D02*X13805Y148526D01* +X15405Y147955D02*X15596D01* +X16739Y148146D02*X16929Y147955D01* +X16739Y149288D02*X16929Y149479D01* +X16739Y149288D02*Y148146D01* +X17386Y149479D02*X17767D01* +X17577D02*Y147955D01* +X17386D02*X17767D01* +X18415Y148526D02*Y147955D01* +Y148526D02*X18606Y148717D01* +X18796D01* +X18987Y148526D01* +Y147955D01* +X18225Y148717D02*X18415Y148526D01* +X19634Y148717D02*X20206D01* +X19444Y148526D02*X19634Y148717D01* +X19444Y148526D02*Y148146D01* +X19634Y147955D01* +X20206D01* +X20663Y149479D02*Y147955D01* +Y148526D02*X20853Y148717D01* +X21234D01* +X21425Y148526D01* +Y147955D01* +X21882Y149479D02*X22073Y149288D01* +Y148146D01* +X21882Y147955D02*X22073Y148146D01* +X10414Y147129D02*X22530D01* +X24320Y147955D02*X24892D01* +X24130Y148146D02*X24320Y147955D01* +X24130Y149288D02*Y148146D01* +Y149288D02*X24320Y149479D01* +X24892D01* +X25349Y148526D02*Y148146D01* +Y148526D02*X25540Y148717D01* +X25921D01* +X26111Y148526D01* +Y148146D01* +X25921Y147955D02*X26111Y148146D01* +X25540Y147955D02*X25921D01* +X25349Y148146D02*X25540Y147955D01* +X26568Y148717D02*Y148146D01* +X26759Y147955D01* +X27140D01* +X27330Y148146D01* +Y148717D02*Y148146D01* +X27978Y148526D02*Y147955D01* +Y148526D02*X28169Y148717D01* +X28359D01* +X28550Y148526D01* +Y147955D01* +X27788Y148717D02*X27978Y148526D01* +X29197Y149479D02*Y148146D01* +X29388Y147955D01* +X29007Y148908D02*X29388D01* +X24130Y147129D02*X29769D01* +X33210Y149479D02*Y147955D01* +X33020Y149479D02*X33782D01* +X33972Y149288D01* +Y148908D01* +X33782Y148717D02*X33972Y148908D01* +X33210Y148717D02*X33782D01* +X34430Y149479D02*Y148146D01* +X34620Y147955D01* +X35573Y148717D02*X35763Y148526D01* +X35192Y148717D02*X35573D01* +X35001Y148526D02*X35192Y148717D01* +X35001Y148526D02*Y148146D01* +X35192Y147955D01* +X35763Y148717D02*Y148146D01* +X35954Y147955D01* +X35192D02*X35573D01* +X35763Y148146D01* +X36601Y149479D02*Y148146D01* +X36792Y147955D01* +X36411Y148908D02*X36792D01* +X37363Y147955D02*X37935D01* +X37173Y148146D02*X37363Y147955D01* +X37173Y148526D02*Y148146D01* +Y148526D02*X37363Y148717D01* +X37744D01* +X37935Y148526D01* +X37173Y148336D02*X37935D01* +Y148526D02*Y148336D01* +X39154Y149479D02*Y147955D01* +X38964D02*X39154Y148146D01* +X38583Y147955D02*X38964D01* +X38392Y148146D02*X38583Y147955D01* +X38392Y148526D02*Y148146D01* +Y148526D02*X38583Y148717D01* +X38964D01* +X39154Y148526D01* +X39992Y148717D02*Y148526D01* +Y148146D02*Y147955D01* +X39611Y149288D02*Y149098D01* +Y149288D02*X39802Y149479D01* +X40183D01* +X40373Y149288D01* +Y149098D01* +X39992Y148717D02*X40373Y149098D01* +X33020Y147129D02*X40831D01* +X0Y153289D02*X762D01* +X381D02*Y151765D01* +X1219Y153289D02*Y151765D01* +Y152336D02*X1410Y152527D01* +X1791D01* +X1981Y152336D01* +Y151765D01* +X2629D02*X3200D01* +X2438Y151956D02*X2629Y151765D01* +X2438Y152336D02*Y151956D01* +Y152336D02*X2629Y152527D01* +X3010D01* +X3200Y152336D01* +X2438Y152146D02*X3200D01* +Y152336D02*Y152146D01* +X3848Y152336D02*Y151765D01* +Y152336D02*X4039Y152527D01* +X4420D01* +X3658D02*X3848Y152336D01* +X5067Y151765D02*X5639D01* +X4877Y151956D02*X5067Y151765D01* +X4877Y152336D02*Y151956D01* +Y152336D02*X5067Y152527D01* +X5448D01* +X5639Y152336D01* +X4877Y152146D02*X5639D01* +Y152336D02*Y152146D01* +X7353Y152527D02*X7544Y152336D01* +X6972Y152527D02*X7353D01* +X6782Y152336D02*X6972Y152527D01* +X6782Y152336D02*Y151956D01* +X6972Y151765D01* +X7544Y152527D02*Y151956D01* +X7734Y151765D01* +X6972D02*X7353D01* +X7544Y151956D01* +X8382Y152336D02*Y151765D01* +Y152336D02*X8573Y152527D01* +X8954D01* +X8192D02*X8382Y152336D01* +X9601Y151765D02*X10173D01* +X9411Y151956D02*X9601Y151765D01* +X9411Y152336D02*Y151956D01* +Y152336D02*X9601Y152527D01* +X9982D01* +X10173Y152336D01* +X9411Y152146D02*X10173D01* +Y152336D02*Y152146D01* +X11506Y151765D02*X11887D01* +X11697Y153289D02*Y151765D01* +X11316Y152908D02*X11697Y153289D01* +X12535Y151765D02*X12916D01* +X12725Y153289D02*Y151765D01* +X12344Y152908D02*X12725Y153289D01* +X14821D02*Y151765D01* +X14630D02*X14821Y151956D01* +X14249Y151765D02*X14630D01* +X14059Y151956D02*X14249Y151765D01* +X14059Y152336D02*Y151956D01* +Y152336D02*X14249Y152527D01* +X14630D01* +X14821Y152336D01* +X15278Y152908D02*Y152718D01* +Y152336D02*Y151765D01* +X15850Y153098D02*Y151765D01* +Y153098D02*X16040Y153289D01* +X16231D01* +X15659Y152527D02*X16040D01* +X16802Y153098D02*Y151765D01* +Y153098D02*X16993Y153289D01* +X17183D01* +X16612Y152527D02*X16993D01* +X17755Y151765D02*X18326D01* +X17564Y151956D02*X17755Y151765D01* +X17564Y152336D02*Y151956D01* +Y152336D02*X17755Y152527D01* +X18136D01* +X18326Y152336D01* +X17564Y152146D02*X18326D01* +Y152336D02*Y152146D01* +X18974Y152336D02*Y151765D01* +Y152336D02*X19164Y152527D01* +X19545D01* +X18783D02*X18974Y152336D01* +X20193Y151765D02*X20765D01* +X20003Y151956D02*X20193Y151765D01* +X20003Y152336D02*Y151956D01* +Y152336D02*X20193Y152527D01* +X20574D01* +X20765Y152336D01* +X20003Y152146D02*X20765D01* +Y152336D02*Y152146D01* +X21412Y152336D02*Y151765D01* +Y152336D02*X21603Y152527D01* +X21793D01* +X21984Y152336D01* +Y151765D01* +X21222Y152527D02*X21412Y152336D01* +X22631Y153289D02*Y151956D01* +X22822Y151765D01* +X22441Y152718D02*X22822D01* +X24651Y153289D02*Y151765D01* +X24460D02*X24651Y151956D01* +X24079Y151765D02*X24460D01* +X23889Y151956D02*X24079Y151765D01* +X23889Y152336D02*Y151956D01* +Y152336D02*X24079Y152527D01* +X24460D01* +X24651Y152336D01* +X25298D02*Y151765D01* +Y152336D02*X25489Y152527D01* +X25870D01* +X25108D02*X25298Y152336D01* +X26327Y152908D02*Y152718D01* +Y152336D02*Y151765D01* +X26708Y153289D02*Y151956D01* +X26899Y151765D01* +X27280Y153289D02*Y151956D01* +X27470Y151765D01* +X28727D02*X29299D01* +X29489Y151956D01* +X29299Y152146D02*X29489Y151956D01* +X28727Y152146D02*X29299D01* +X28537Y152336D02*X28727Y152146D01* +X28537Y152336D02*X28727Y152527D01* +X29299D01* +X29489Y152336D01* +X28537Y151956D02*X28727Y151765D01* +X29947Y152908D02*Y152718D01* +Y152336D02*Y151765D01* +X30328Y152527D02*X31090D01* +X30328Y151765D02*X31090Y152527D01* +X30328Y151765D02*X31090D01* +X31737D02*X32309D01* +X31547Y151956D02*X31737Y151765D01* +X31547Y152336D02*Y151956D01* +Y152336D02*X31737Y152527D01* +X32118D01* +X32309Y152336D01* +X31547Y152146D02*X32309D01* +Y152336D02*Y152146D01* +X32957Y151765D02*X33528D01* +X33719Y151956D01* +X33528Y152146D02*X33719Y151956D01* +X32957Y152146D02*X33528D01* +X32766Y152336D02*X32957Y152146D01* +X32766Y152336D02*X32957Y152527D01* +X33528D01* +X33719Y152336D01* +X32766Y151956D02*X32957Y151765D01* +X34862Y152527D02*Y151956D01* +X35052Y151765D01* +X35433D01* +X35624Y151956D01* +Y152527D02*Y151956D01* +X36271Y151765D02*X36843D01* +X37033Y151956D01* +X36843Y152146D02*X37033Y151956D01* +X36271Y152146D02*X36843D01* +X36081Y152336D02*X36271Y152146D01* +X36081Y152336D02*X36271Y152527D01* +X36843D01* +X37033Y152336D01* +X36081Y151956D02*X36271Y151765D01* +X37681D02*X38252D01* +X37490Y151956D02*X37681Y151765D01* +X37490Y152336D02*Y151956D01* +Y152336D02*X37681Y152527D01* +X38062D01* +X38252Y152336D01* +X37490Y152146D02*X38252D01* +Y152336D02*Y152146D01* +X39472Y153289D02*Y151765D01* +X39281D02*X39472Y151956D01* +X38900Y151765D02*X39281D01* +X38710Y151956D02*X38900Y151765D01* +X38710Y152336D02*Y151956D01* +Y152336D02*X38900Y152527D01* +X39281D01* +X39472Y152336D01* +X40615Y152908D02*Y152718D01* +Y152336D02*Y151765D01* +X41186Y152336D02*Y151765D01* +Y152336D02*X41377Y152527D01* +X41567D01* +X41758Y152336D01* +Y151765D01* +X40996Y152527D02*X41186Y152336D01* +X43091Y153289D02*Y151956D01* +X43282Y151765D01* +X42901Y152718D02*X43282D01* +X43663Y153289D02*Y151765D01* +Y152336D02*X43853Y152527D01* +X44234D01* +X44425Y152336D01* +Y151765D01* +X44882Y152908D02*Y152718D01* +Y152336D02*Y151765D01* +X45453D02*X46025D01* +X46215Y151956D01* +X46025Y152146D02*X46215Y151956D01* +X45453Y152146D02*X46025D01* +X45263Y152336D02*X45453Y152146D01* +X45263Y152336D02*X45453Y152527D01* +X46025D01* +X46215Y152336D01* +X45263Y151956D02*X45453Y151765D01* +X47358Y153289D02*Y151956D01* +X47549Y151765D01* +X48501Y152527D02*X48692Y152336D01* +X48120Y152527D02*X48501D01* +X47930Y152336D02*X48120Y152527D01* +X47930Y152336D02*Y151956D01* +X48120Y151765D01* +X48692Y152527D02*Y151956D01* +X48882Y151765D01* +X48120D02*X48501D01* +X48692Y151956D01* +X49340Y152527D02*Y151956D01* +X49530Y151765D01* +X50102Y152527D02*Y151384D01* +X49911Y151194D02*X50102Y151384D01* +X49530Y151194D02*X49911D01* +X49340Y151384D02*X49530Y151194D01* +Y151765D02*X49911D01* +X50102Y151956D01* +X50559Y152336D02*Y151956D01* +Y152336D02*X50749Y152527D01* +X51130D01* +X51321Y152336D01* +Y151956D01* +X51130Y151765D02*X51321Y151956D01* +X50749Y151765D02*X51130D01* +X50559Y151956D02*X50749Y151765D01* +X51778Y152527D02*Y151956D01* +X51968Y151765D01* +X52349D01* +X52540Y151956D01* +Y152527D02*Y151956D01* +X53188Y153289D02*Y151956D01* +X53378Y151765D01* +X52997Y152718D02*X53378D01* +X53759Y151384D02*X54140Y151765D01* +X55283Y152527D02*X56045Y153289D01* +X55283Y152527D02*X56236D01* +X56045Y153289D02*Y151765D01* +X56693D02*X57455Y152527D01* +Y153098D02*Y152527D01* +X57264Y153289D02*X57455Y153098D01* +X56883Y153289D02*X57264D01* +X56693Y153098D02*X56883Y153289D01* +X56693Y153098D02*Y152718D01* +X56883Y152527D01* +X57455D01* +X57912Y151956D02*X58103Y151765D01* +X57912Y153098D02*Y151956D01* +Y153098D02*X58103Y153289D01* +X58484D01* +X58674Y153098D01* +Y151956D01* +X58484Y151765D02*X58674Y151956D01* +X58103Y151765D02*X58484D01* +X57912Y152146D02*X58674Y152908D01* +X59817Y153289D02*Y151765D01* +Y152336D02*X60008Y152527D01* +X60389D01* +X60579Y152336D01* +Y151765D01* +X61036Y152336D02*Y151956D01* +Y152336D02*X61227Y152527D01* +X61608D01* +X61798Y152336D01* +Y151956D01* +X61608Y151765D02*X61798Y151956D01* +X61227Y151765D02*X61608D01* +X61036Y151956D02*X61227Y151765D01* +X62255Y153289D02*Y151956D01* +X62446Y151765D01* +X63017D02*X63589D01* +X62827Y151956D02*X63017Y151765D01* +X62827Y152336D02*Y151956D01* +Y152336D02*X63017Y152527D01* +X63398D01* +X63589Y152336D01* +X62827Y152146D02*X63589D01* +Y152336D02*Y152146D01* +X64237Y151765D02*X64808D01* +X64999Y151956D01* +X64808Y152146D02*X64999Y151956D01* +X64237Y152146D02*X64808D01* +X64046Y152336D02*X64237Y152146D01* +X64046Y152336D02*X64237Y152527D01* +X64808D01* +X64999Y152336D01* +X64046Y151956D02*X64237Y151765D01* +X66332Y153289D02*Y151956D01* +X66523Y151765D01* +X66142Y152718D02*X66523D01* +X66904Y152336D02*Y151956D01* +Y152336D02*X67094Y152527D01* +X67475D01* +X67666Y152336D01* +Y151956D01* +X67475Y151765D02*X67666Y151956D01* +X67094Y151765D02*X67475D01* +X66904Y151956D02*X67094Y151765D01* +X68313Y153289D02*Y151956D01* +X68504Y151765D01* +X68123Y152718D02*X68504D01* +X69456Y152527D02*X69647Y152336D01* +X69075Y152527D02*X69456D01* +X68885Y152336D02*X69075Y152527D01* +X68885Y152336D02*Y151956D01* +X69075Y151765D01* +X69647Y152527D02*Y151956D01* +X69837Y151765D01* +X69075D02*X69456D01* +X69647Y151956D01* +X70295Y153289D02*Y151956D01* +X70485Y151765D01* +G54D97*X0Y104140D02*X180340D01* +X0D02*Y0D01* +X180340Y104140D02*Y0D01* +X0D02*X180340D01* +G54D96*X50800Y107569D02*Y106045D01* +Y107569D02*X51372Y106998D01* +X51943Y107569D01* +Y106045D01* +X52972Y106807D02*X53162Y106616D01* +X52591Y106807D02*X52972D01* +X52400Y106616D02*X52591Y106807D01* +X52400Y106616D02*Y106236D01* +X52591Y106045D01* +X53162Y106807D02*Y106236D01* +X53353Y106045D01* +X52591D02*X52972D01* +X53162Y106236D01* +X53810Y106807D02*X54572Y106045D01* +X53810D02*X54572Y106807D01* +X55029Y107188D02*Y106998D01* +Y106616D02*Y106045D01* +X55601Y106616D02*Y106045D01* +Y106616D02*X55791Y106807D01* +X55982D01* +X56172Y106616D01* +Y106045D01* +Y106616D02*X56363Y106807D01* +X56553D01* +X56744Y106616D01* +Y106045D01* +X55410Y106807D02*X55601Y106616D01* +X57201Y106807D02*Y106236D01* +X57391Y106045D01* +X57772D01* +X57963Y106236D01* +Y106807D02*Y106236D01* +X58611Y106616D02*Y106045D01* +Y106616D02*X58801Y106807D01* +X58992D01* +X59182Y106616D01* +Y106045D01* +Y106616D02*X59373Y106807D01* +X59563D01* +X59754Y106616D01* +Y106045D01* +X58420Y106807D02*X58611Y106616D01* +X61087Y107569D02*Y106045D01* +X61659Y107569D02*X61849Y107378D01* +Y106236D01* +X61659Y106045D02*X61849Y106236D01* +X60897Y106045D02*X61659D01* +X60897Y107569D02*X61659D01* +X62306Y107188D02*Y106998D01* +Y106616D02*Y106045D01* +X62878Y106616D02*Y106045D01* +Y106616D02*X63068Y106807D01* +X63259D01* +X63449Y106616D01* +Y106045D01* +Y106616D02*X63640Y106807D01* +X63830D01* +X64021Y106616D01* +Y106045D01* +X62687Y106807D02*X62878Y106616D01* +X64668Y106045D02*X65240D01* +X64478Y106236D02*X64668Y106045D01* +X64478Y106616D02*Y106236D01* +Y106616D02*X64668Y106807D01* +X65049D01* +X65240Y106616D01* +X64478Y106426D02*X65240D01* +Y106616D02*Y106426D01* +X65888Y106616D02*Y106045D01* +Y106616D02*X66078Y106807D01* +X66269D01* +X66459Y106616D01* +Y106045D01* +X65697Y106807D02*X65888Y106616D01* +X67107Y106045D02*X67678D01* +X67869Y106236D01* +X67678Y106426D02*X67869Y106236D01* +X67107Y106426D02*X67678D01* +X66916Y106616D02*X67107Y106426D01* +X66916Y106616D02*X67107Y106807D01* +X67678D01* +X67869Y106616D01* +X66916Y106236D02*X67107Y106045D01* +X68326Y107188D02*Y106998D01* +Y106616D02*Y106045D01* +X68707Y106616D02*Y106236D01* +Y106616D02*X68898Y106807D01* +X69279D01* +X69469Y106616D01* +Y106236D01* +X69279Y106045D02*X69469Y106236D01* +X68898Y106045D02*X69279D01* +X68707Y106236D02*X68898Y106045D01* +X70117Y106616D02*Y106045D01* +Y106616D02*X70307Y106807D01* +X70498D01* +X70688Y106616D01* +Y106045D01* +X69926Y106807D02*X70117Y106616D01* +X71336Y106045D02*X71907D01* +X72098Y106236D01* +X71907Y106426D02*X72098Y106236D01* +X71336Y106426D02*X71907D01* +X71145Y106616D02*X71336Y106426D01* +X71145Y106616D02*X71336Y106807D01* +X71907D01* +X72098Y106616D01* +X71145Y106236D02*X71336Y106045D01* +X72555Y106998D02*X72746D01* +X72555Y106616D02*X72746D01* +X73889Y106045D02*X74841Y106998D01* +Y107569D02*Y106998D01* +X73889Y107569D02*X74841D01* +X75489Y106045D02*X75870D01* +X75679Y107569D02*Y106045D01* +X75298Y107188D02*X75679Y107569D01* +X76327Y106236D02*X76518Y106045D01* +X76327Y107378D02*Y106236D01* +Y107378D02*X76518Y107569D01* +X76899D01* +X77089Y107378D01* +Y106236D01* +X76899Y106045D02*X77089Y106236D01* +X76518Y106045D02*X76899D01* +X76327Y106426D02*X77089Y107188D01* +X77546Y106236D02*X77737Y106045D01* +X77546Y107378D02*Y106236D01* +Y107378D02*X77737Y107569D01* +X78118D01* +X78308Y107378D01* +Y106236D01* +X78118Y106045D02*X78308Y106236D01* +X77737Y106045D02*X78118D01* +X77546Y106426D02*X78308Y107188D01* +X78765Y106045D02*X78956D01* +X79413Y106236D02*X79604Y106045D01* +X79413Y107378D02*Y106236D01* +Y107378D02*X79604Y107569D01* +X79985D01* +X80175Y107378D01* +Y106236D01* +X79985Y106045D02*X80175Y106236D01* +X79604Y106045D02*X79985D01* +X79413Y106426D02*X80175Y107188D01* +X80632Y106236D02*X80823Y106045D01* +X80632Y107378D02*Y106236D01* +Y107378D02*X80823Y107569D01* +X81204D01* +X81394Y107378D01* +Y106236D01* +X81204Y106045D02*X81394Y106236D01* +X80823Y106045D02*X81204D01* +X80632Y106426D02*X81394Y107188D01* +X81852Y106236D02*X82042Y106045D01* +X81852Y107378D02*Y106236D01* +Y107378D02*X82042Y107569D01* +X82423D01* +X82614Y107378D01* +Y106236D01* +X82423Y106045D02*X82614Y106236D01* +X82042Y106045D02*X82423D01* +X81852Y106426D02*X82614Y107188D01* +X83071Y106236D02*X83261Y106045D01* +X83071Y107378D02*Y106236D01* +Y107378D02*X83261Y107569D01* +X83642D01* +X83833Y107378D01* +Y106236D01* +X83642Y106045D02*X83833Y106236D01* +X83261Y106045D02*X83642D01* +X83071Y106426D02*X83833Y107188D01* +X84290Y106236D02*X84480Y106045D01* +X84290Y107378D02*Y106236D01* +Y107378D02*X84480Y107569D01* +X84861D01* +X85052Y107378D01* +Y106236D01* +X84861Y106045D02*X85052Y106236D01* +X84480Y106045D02*X84861D01* +X84290Y106426D02*X85052Y107188D01* +X85509Y106236D02*X85700Y106045D01* +X85509Y107378D02*Y106236D01* +Y107378D02*X85700Y107569D01* +X86081D01* +X86271Y107378D01* +Y106236D01* +X86081Y106045D02*X86271Y106236D01* +X85700Y106045D02*X86081D01* +X85509Y106426D02*X86271Y107188D01* +X87605Y106616D02*Y106045D01* +Y106616D02*X87795Y106807D01* +X87986D01* +X88176Y106616D01* +Y106045D01* +Y106616D02*X88367Y106807D01* +X88557D01* +X88748Y106616D01* +Y106045D01* +X87414Y106807D02*X87605Y106616D01* +X89205Y107188D02*Y106998D01* +Y106616D02*Y106045D01* +X89586Y107569D02*Y106236D01* +X89776Y106045D01* +X90348D02*X90919D01* +X91110Y106236D01* +X90919Y106426D02*X91110Y106236D01* +X90348Y106426D02*X90919D01* +X90157Y106616D02*X90348Y106426D01* +X90157Y106616D02*X90348Y106807D01* +X90919D01* +X91110Y106616D01* +X90157Y106236D02*X90348Y106045D01* +X92253Y106807D02*Y106236D01* +X92443Y106045D01* +X92634D01* +X92824Y106236D01* +Y106807D02*Y106236D01* +X93015Y106045D01* +X93205D01* +X93396Y106236D01* +Y106807D02*Y106236D01* +X93853Y107188D02*Y106998D01* +Y106616D02*Y106045D01* +X94996Y107569D02*Y106045D01* +X94806D02*X94996Y106236D01* +X94425Y106045D02*X94806D01* +X94234Y106236D02*X94425Y106045D01* +X94234Y106616D02*Y106236D01* +Y106616D02*X94425Y106807D01* +X94806D01* +X94996Y106616D01* +X95644Y106045D02*X96215D01* +X95453Y106236D02*X95644Y106045D01* +X95453Y106616D02*Y106236D01* +Y106616D02*X95644Y106807D01* +X96025D01* +X96215Y106616D01* +X95453Y106426D02*X96215D01* +Y106616D02*Y106426D01* +X96672Y105664D02*X97053Y106045D01* +X98196Y106807D02*X98958Y107569D01* +X98196Y106807D02*X99149D01* +X98958Y107569D02*Y106045D01* +X99797D02*X100178D01* +X99987Y107569D02*Y106045D01* +X99606Y107188D02*X99987Y107569D01* +X100635Y106236D02*X100825Y106045D01* +X100635Y107378D02*Y106236D01* +Y107378D02*X100825Y107569D01* +X101206D01* +X101397Y107378D01* +Y106236D01* +X101206Y106045D02*X101397Y106236D01* +X100825Y106045D02*X101206D01* +X100635Y106426D02*X101397Y107188D01* +X101854Y106236D02*X102045Y106045D01* +X101854Y107378D02*Y106236D01* +Y107378D02*X102045Y107569D01* +X102426D01* +X102616Y107378D01* +Y106236D01* +X102426Y106045D02*X102616Y106236D01* +X102045Y106045D02*X102426D01* +X101854Y106426D02*X102616Y107188D01* +X103073Y106045D02*X103264D01* +X103721Y106236D02*X103911Y106045D01* +X103721Y107378D02*Y106236D01* +Y107378D02*X103911Y107569D01* +X104292D01* +X104483Y107378D01* +Y106236D01* +X104292Y106045D02*X104483Y106236D01* +X103911Y106045D02*X104292D01* +X103721Y106426D02*X104483Y107188D01* +X104940Y106236D02*X105131Y106045D01* +X104940Y107378D02*Y106236D01* +Y107378D02*X105131Y107569D01* +X105512D01* +X105702Y107378D01* +Y106236D01* +X105512Y106045D02*X105702Y106236D01* +X105131Y106045D02*X105512D01* +X104940Y106426D02*X105702Y107188D01* +X106159Y106236D02*X106350Y106045D01* +X106159Y107378D02*Y106236D01* +Y107378D02*X106350Y107569D01* +X106731D01* +X106921Y107378D01* +Y106236D01* +X106731Y106045D02*X106921Y106236D01* +X106350Y106045D02*X106731D01* +X106159Y106426D02*X106921Y107188D01* +X107379Y106236D02*X107569Y106045D01* +X107379Y107378D02*Y106236D01* +Y107378D02*X107569Y107569D01* +X107950D01* +X108141Y107378D01* +Y106236D01* +X107950Y106045D02*X108141Y106236D01* +X107569Y106045D02*X107950D01* +X107379Y106426D02*X108141Y107188D01* +X108598Y106236D02*X108788Y106045D01* +X108598Y107378D02*Y106236D01* +Y107378D02*X108788Y107569D01* +X109169D01* +X109360Y107378D01* +Y106236D01* +X109169Y106045D02*X109360Y106236D01* +X108788Y106045D02*X109169D01* +X108598Y106426D02*X109360Y107188D01* +X109817Y106236D02*X110007Y106045D01* +X109817Y107378D02*Y106236D01* +Y107378D02*X110007Y107569D01* +X110388D01* +X110579Y107378D01* +Y106236D01* +X110388Y106045D02*X110579Y106236D01* +X110007Y106045D02*X110388D01* +X109817Y106426D02*X110579Y107188D01* +X111912Y106616D02*Y106045D01* +Y106616D02*X112103Y106807D01* +X112293D01* +X112484Y106616D01* +Y106045D01* +Y106616D02*X112674Y106807D01* +X112865D01* +X113055Y106616D01* +Y106045D01* +X111722Y106807D02*X111912Y106616D01* +X113513Y107188D02*Y106998D01* +Y106616D02*Y106045D01* +X113894Y107569D02*Y106236D01* +X114084Y106045D01* +X114656D02*X115227D01* +X115418Y106236D01* +X115227Y106426D02*X115418Y106236D01* +X114656Y106426D02*X115227D01* +X114465Y106616D02*X114656Y106426D01* +X114465Y106616D02*X114656Y106807D01* +X115227D01* +X115418Y106616D01* +X114465Y106236D02*X114656Y106045D01* +X116561Y107569D02*Y106045D01* +Y106616D02*X116751Y106807D01* +X117132D01* +X117323Y106616D01* +Y106045D01* +X117780Y107188D02*Y106998D01* +Y106616D02*Y106045D01* +X118732Y106807D02*X118923Y106616D01* +X118351Y106807D02*X118732D01* +X118161Y106616D02*X118351Y106807D01* +X118161Y106616D02*Y106236D01* +X118351Y106045D01* +X118732D01* +X118923Y106236D01* +X118161Y105664D02*X118351Y105474D01* +X118732D01* +X118923Y105664D01* +Y106807D02*Y105664D01* +X119380Y107569D02*Y106045D01* +Y106616D02*X119571Y106807D01* +X119952D01* +X120142Y106616D01* +Y106045D01* +X38678Y-2413D02*X39440D01* +X39630Y-2222D01* +Y-1842D02*Y-2222D01* +X39440Y-1651D02*X39630Y-1842D01* +X38868Y-1651D02*X39440D01* +X38868Y-889D02*Y-2413D01* +X38678Y-889D02*X39440D01* +X39630Y-1080D01* +Y-1460D01* +X39440Y-1651D02*X39630Y-1460D01* +X40087Y-1842D02*Y-2222D01* +Y-1842D02*X40278Y-1651D01* +X40659D01* +X40849Y-1842D01* +Y-2222D01* +X40659Y-2413D02*X40849Y-2222D01* +X40278Y-2413D02*X40659D01* +X40087Y-2222D02*X40278Y-2413D01* +X41878Y-1651D02*X42069Y-1842D01* +X41497Y-1651D02*X41878D01* +X41307Y-1842D02*X41497Y-1651D01* +X41307Y-1842D02*Y-2222D01* +X41497Y-2413D01* +X42069Y-1651D02*Y-2222D01* +X42259Y-2413D01* +X41497D02*X41878D01* +X42069Y-2222D01* +X42907Y-1842D02*Y-2413D01* +Y-1842D02*X43097Y-1651D01* +X43478D01* +X42716D02*X42907Y-1842D01* +X44698Y-889D02*Y-2413D01* +X44507D02*X44698Y-2222D01* +X44126Y-2413D02*X44507D01* +X43936Y-2222D02*X44126Y-2413D01* +X43936Y-1842D02*Y-2222D01* +Y-1842D02*X44126Y-1651D01* +X44507D01* +X44698Y-1842D01* +X45841D02*Y-2222D01* +Y-1842D02*X46031Y-1651D01* +X46412D01* +X46603Y-1842D01* +Y-2222D01* +X46412Y-2413D02*X46603Y-2222D01* +X46031Y-2413D02*X46412D01* +X45841Y-2222D02*X46031Y-2413D01* +X47060Y-1651D02*Y-2222D01* +X47250Y-2413D01* +X47631D01* +X47822Y-2222D01* +Y-1651D02*Y-2222D01* +X48469Y-889D02*Y-2222D01* +X48660Y-2413D01* +X48279Y-1460D02*X48660D01* +X49041Y-889D02*Y-2222D01* +X49231Y-2413D01* +X49612Y-1270D02*Y-1460D01* +Y-1842D02*Y-2413D01* +X50184Y-1842D02*Y-2413D01* +Y-1842D02*X50375Y-1651D01* +X50565D01* +X50756Y-1842D01* +Y-2413D01* +X49994Y-1651D02*X50184Y-1842D01* +X51403Y-2413D02*X51975D01* +X51213Y-2222D02*X51403Y-2413D01* +X51213Y-1842D02*Y-2222D01* +Y-1842D02*X51403Y-1651D01* +X51784D01* +X51975Y-1842D01* +X51213Y-2032D02*X51975D01* +Y-1842D02*Y-2032D01* +X53118Y-1270D02*Y-1460D01* +Y-1842D02*Y-2413D01* +X53689D02*X54261D01* +X54451Y-2222D01* +X54261Y-2032D02*X54451Y-2222D01* +X53689Y-2032D02*X54261D01* +X53499Y-1842D02*X53689Y-2032D01* +X53499Y-1842D02*X53689Y-1651D01* +X54261D01* +X54451Y-1842D01* +X53499Y-2222D02*X53689Y-2413D01* +X55785Y-889D02*Y-2222D01* +X55975Y-2413D01* +X55594Y-1460D02*X55975D01* +X56356Y-889D02*Y-2413D01* +Y-1842D02*X56547Y-1651D01* +X56928D01* +X57118Y-1842D01* +Y-2413D01* +X57766D02*X58337D01* +X57575Y-2222D02*X57766Y-2413D01* +X57575Y-1842D02*Y-2222D01* +Y-1842D02*X57766Y-1651D01* +X58147D01* +X58337Y-1842D01* +X57575Y-2032D02*X58337D01* +Y-1842D02*Y-2032D01* +X59671Y-1651D02*X60242D01* +X59480Y-1842D02*X59671Y-1651D01* +X59480Y-1842D02*Y-2222D01* +X59671Y-2413D01* +X60242D01* +X60890D02*X61462D01* +X60700Y-2222D02*X60890Y-2413D01* +X60700Y-1842D02*Y-2222D01* +Y-1842D02*X60890Y-1651D01* +X61271D01* +X61462Y-1842D01* +X60700Y-2032D02*X61462D01* +Y-1842D02*Y-2032D01* +X62109Y-1842D02*Y-2413D01* +Y-1842D02*X62300Y-1651D01* +X62490D01* +X62681Y-1842D01* +Y-2413D01* +X61919Y-1651D02*X62109Y-1842D01* +X63329Y-889D02*Y-2222D01* +X63519Y-2413D01* +X63138Y-1460D02*X63519D01* +X64091Y-2413D02*X64662D01* +X63900Y-2222D02*X64091Y-2413D01* +X63900Y-1842D02*Y-2222D01* +Y-1842D02*X64091Y-1651D01* +X64472D01* +X64662Y-1842D01* +X63900Y-2032D02*X64662D01* +Y-1842D02*Y-2032D01* +X65310Y-1842D02*Y-2413D01* +Y-1842D02*X65500Y-1651D01* +X65881D01* +X65119D02*X65310Y-1842D01* +X66338Y-889D02*Y-2222D01* +X66529Y-2413D01* +X66910Y-1270D02*Y-1460D01* +Y-1842D02*Y-2413D01* +X67481Y-1842D02*Y-2413D01* +Y-1842D02*X67672Y-1651D01* +X67862D01* +X68053Y-1842D01* +Y-2413D01* +X67291Y-1651D02*X67481Y-1842D01* +X68701Y-2413D02*X69272D01* +X68510Y-2222D02*X68701Y-2413D01* +X68510Y-1842D02*Y-2222D01* +Y-1842D02*X68701Y-1651D01* +X69082D01* +X69272Y-1842D01* +X68510Y-2032D02*X69272D01* +Y-1842D02*Y-2032D01* +X70415Y-1842D02*Y-2222D01* +Y-1842D02*X70606Y-1651D01* +X70987D01* +X71177Y-1842D01* +Y-2222D01* +X70987Y-2413D02*X71177Y-2222D01* +X70606Y-2413D02*X70987D01* +X70415Y-2222D02*X70606Y-2413D01* +X71825Y-1080D02*Y-2413D01* +Y-1080D02*X72015Y-889D01* +X72206D01* +X71634Y-1651D02*X72015D01* +X73463Y-889D02*Y-2222D01* +X73654Y-2413D01* +X73273Y-1460D02*X73654D01* +X74035Y-889D02*Y-2413D01* +Y-1842D02*X74225Y-1651D01* +X74606D01* +X74797Y-1842D01* +Y-2413D01* +X75254Y-1270D02*Y-1460D01* +Y-1842D02*Y-2413D01* +X75825D02*X76397D01* +X76587Y-2222D01* +X76397Y-2032D02*X76587Y-2222D01* +X75825Y-2032D02*X76397D01* +X75635Y-1842D02*X75825Y-2032D01* +X75635Y-1842D02*X75825Y-1651D01* +X76397D01* +X76587Y-1842D01* +X75635Y-2222D02*X75825Y-2413D01* +X77730Y-2222D02*X77921Y-2413D01* +X77730Y-1842D02*Y-2222D01* +Y-1842D02*X77921Y-1651D01* +X78302D01* +X78492Y-1842D01* +Y-2222D01* +X78302Y-2413D02*X78492Y-2222D01* +X77921Y-2413D02*X78302D01* +X77730Y-1460D02*X77921Y-1651D01* +X77730Y-1080D02*Y-1460D01* +Y-1080D02*X77921Y-889D01* +X78302D01* +X78492Y-1080D01* +Y-1460D01* +X78302Y-1651D02*X78492Y-1460D01* +X78950Y-2413D02*X79140D01* +X79597Y-2222D02*X79788Y-2413D01* +X79597Y-1080D02*Y-2222D01* +Y-1080D02*X79788Y-889D01* +X80169D01* +X80359Y-1080D01* +Y-2222D01* +X80169Y-2413D02*X80359Y-2222D01* +X79788Y-2413D02*X80169D01* +X79597Y-2032D02*X80359Y-1270D01* +X80816Y-2222D02*X81007Y-2413D01* +X80816Y-1080D02*Y-2222D01* +Y-1080D02*X81007Y-889D01* +X81388D01* +X81578Y-1080D01* +Y-2222D01* +X81388Y-2413D02*X81578Y-2222D01* +X81007Y-2413D02*X81388D01* +X80816Y-2032D02*X81578Y-1270D01* +X82036Y-2222D02*X82226Y-2413D01* +X82036Y-1080D02*Y-2222D01* +Y-1080D02*X82226Y-889D01* +X82607D01* +X82798Y-1080D01* +Y-2222D01* +X82607Y-2413D02*X82798Y-2222D01* +X82226Y-2413D02*X82607D01* +X82036Y-2032D02*X82798Y-1270D01* +X83255Y-2222D02*X83445Y-2413D01* +X83255Y-1080D02*Y-2222D01* +Y-1080D02*X83445Y-889D01* +X83826D01* +X84017Y-1080D01* +Y-2222D01* +X83826Y-2413D02*X84017Y-2222D01* +X83445Y-2413D02*X83826D01* +X83255Y-2032D02*X84017Y-1270D01* +X84474Y-2222D02*X84665Y-2413D01* +X84474Y-1080D02*Y-2222D01* +Y-1080D02*X84665Y-889D01* +X85046D01* +X85236Y-1080D01* +Y-2222D01* +X85046Y-2413D02*X85236Y-2222D01* +X84665Y-2413D02*X85046D01* +X84474Y-2032D02*X85236Y-1270D01* +X85693Y-2222D02*X85884Y-2413D01* +X85693Y-1080D02*Y-2222D01* +Y-1080D02*X85884Y-889D01* +X86265D01* +X86455Y-1080D01* +Y-2222D01* +X86265Y-2413D02*X86455Y-2222D01* +X85884Y-2413D02*X86265D01* +X85693Y-2032D02*X86455Y-1270D01* +X87789Y-1842D02*Y-2413D01* +Y-1842D02*X87979Y-1651D01* +X88170D01* +X88360Y-1842D01* +Y-2413D01* +Y-1842D02*X88551Y-1651D01* +X88741D01* +X88932Y-1842D01* +Y-2413D01* +X87598Y-1651D02*X87789Y-1842D01* +X89389Y-1270D02*Y-1460D01* +Y-1842D02*Y-2413D01* +X89770Y-889D02*Y-2222D01* +X89960Y-2413D01* +X91218Y-1842D02*Y-2413D01* +Y-1842D02*X91408Y-1651D01* +X91789D01* +X91027D02*X91218Y-1842D01* +X92437Y-2413D02*X93008D01* +X92246Y-2222D02*X92437Y-2413D01* +X92246Y-1842D02*Y-2222D01* +Y-1842D02*X92437Y-1651D01* +X92818D01* +X93008Y-1842D01* +X92246Y-2032D02*X93008D01* +Y-1842D02*Y-2032D01* +X93656Y-1651D02*X94228D01* +X93466Y-1842D02*X93656Y-1651D01* +X93466Y-1842D02*Y-2222D01* +X93656Y-2413D01* +X94228D01* +X94875Y-889D02*Y-2222D01* +X95066Y-2413D01* +X94685Y-1460D02*X95066D01* +X96018Y-1651D02*X96209Y-1842D01* +X95637Y-1651D02*X96018D01* +X95447Y-1842D02*X95637Y-1651D01* +X95447Y-1842D02*Y-2222D01* +X95637Y-2413D01* +X96209Y-1651D02*Y-2222D01* +X96399Y-2413D01* +X95637D02*X96018D01* +X96209Y-2222D01* +X97047Y-1842D02*Y-2413D01* +Y-1842D02*X97238Y-1651D01* +X97428D01* +X97619Y-1842D01* +Y-2413D01* +X96857Y-1651D02*X97047Y-1842D01* +X98647Y-1651D02*X98838Y-1842D01* +X98266Y-1651D02*X98647D01* +X98076Y-1842D02*X98266Y-1651D01* +X98076Y-1842D02*Y-2222D01* +X98266Y-2413D01* +X98647D01* +X98838Y-2222D01* +X98076Y-2794D02*X98266Y-2984D01* +X98647D01* +X98838Y-2794D01* +Y-1651D02*Y-2794D01* +X99295Y-889D02*Y-2222D01* +X99485Y-2413D01* +X100057D02*X100628D01* +X99866Y-2222D02*X100057Y-2413D01* +X99866Y-1842D02*Y-2222D01* +Y-1842D02*X100057Y-1651D01* +X100438D01* +X100628Y-1842D01* +X99866Y-2032D02*X100628D01* +Y-1842D02*Y-2032D01* +X101771Y-1651D02*X102533D01* +X103676Y-2222D02*X103867Y-2413D01* +X103676Y-1080D02*Y-2222D01* +Y-1080D02*X103867Y-889D01* +X104248D01* +X104438Y-1080D01* +Y-2222D01* +X104248Y-2413D02*X104438Y-2222D01* +X103867Y-2413D02*X104248D01* +X103676Y-2032D02*X104438Y-1270D01* +X104896Y-2794D02*X105277Y-2413D01* +X105734Y-2222D02*X105924Y-2413D01* +X105734Y-1080D02*Y-2222D01* +Y-1080D02*X105924Y-889D01* +X106305D01* +X106496Y-1080D01* +Y-2222D01* +X106305Y-2413D02*X106496Y-2222D01* +X105924Y-2413D02*X106305D01* +X105734Y-2032D02*X106496Y-1270D01* +X107829Y-889D02*Y-2222D01* +X108020Y-2413D01* +X107639Y-1460D02*X108020D01* +X108401Y-1842D02*Y-2222D01* +Y-1842D02*X108591Y-1651D01* +X108972D01* +X109163Y-1842D01* +Y-2222D01* +X108972Y-2413D02*X109163Y-2222D01* +X108591Y-2413D02*X108972D01* +X108401Y-2222D02*X108591Y-2413D01* +X110306D02*X111258Y-1460D01* +Y-889D02*Y-1460D01* +X110306Y-889D02*X111258D01* +X111906Y-2413D02*X112287D01* +X112097Y-889D02*Y-2413D01* +X111716Y-1270D02*X112097Y-889D01* +X112744Y-2222D02*X112935Y-2413D01* +X112744Y-1080D02*Y-2222D01* +Y-1080D02*X112935Y-889D01* +X113316D01* +X113506Y-1080D01* +Y-2222D01* +X113316Y-2413D02*X113506Y-2222D01* +X112935Y-2413D02*X113316D01* +X112744Y-2032D02*X113506Y-1270D01* +X113963Y-2222D02*X114154Y-2413D01* +X113963Y-1080D02*Y-2222D01* +Y-1080D02*X114154Y-889D01* +X114535D01* +X114725Y-1080D01* +Y-2222D01* +X114535Y-2413D02*X114725Y-2222D01* +X114154Y-2413D02*X114535D01* +X113963Y-2032D02*X114725Y-1270D01* +X115183Y-2413D02*X115373D01* +X115830Y-2222D02*X116021Y-2413D01* +X115830Y-1080D02*Y-2222D01* +Y-1080D02*X116021Y-889D01* +X116402D01* +X116592Y-1080D01* +Y-2222D01* +X116402Y-2413D02*X116592Y-2222D01* +X116021Y-2413D02*X116402D01* +X115830Y-2032D02*X116592Y-1270D01* +X117050Y-2222D02*X117240Y-2413D01* +X117050Y-1080D02*Y-2222D01* +Y-1080D02*X117240Y-889D01* +X117621D01* +X117812Y-1080D01* +Y-2222D01* +X117621Y-2413D02*X117812Y-2222D01* +X117240Y-2413D02*X117621D01* +X117050Y-2032D02*X117812Y-1270D01* +X118269Y-2222D02*X118459Y-2413D01* +X118269Y-1080D02*Y-2222D01* +Y-1080D02*X118459Y-889D01* +X118840D01* +X119031Y-1080D01* +Y-2222D01* +X118840Y-2413D02*X119031Y-2222D01* +X118459Y-2413D02*X118840D01* +X118269Y-2032D02*X119031Y-1270D01* +X119488Y-2222D02*X119678Y-2413D01* +X119488Y-1080D02*Y-2222D01* +Y-1080D02*X119678Y-889D01* +X120059D01* +X120250Y-1080D01* +Y-2222D01* +X120059Y-2413D02*X120250Y-2222D01* +X119678Y-2413D02*X120059D01* +X119488Y-2032D02*X120250Y-1270D01* +X120707Y-2222D02*X120898Y-2413D01* +X120707Y-1080D02*Y-2222D01* +Y-1080D02*X120898Y-889D01* +X121279D01* +X121469Y-1080D01* +Y-2222D01* +X121279Y-2413D02*X121469Y-2222D01* +X120898Y-2413D02*X121279D01* +X120707Y-2032D02*X121469Y-1270D01* +X121926Y-2222D02*X122117Y-2413D01* +X121926Y-1080D02*Y-2222D01* +Y-1080D02*X122117Y-889D01* +X122498D01* +X122688Y-1080D01* +Y-2222D01* +X122498Y-2413D02*X122688Y-2222D01* +X122117Y-2413D02*X122498D01* +X121926Y-2032D02*X122688Y-1270D01* +X123146Y-2794D02*X123527Y-2413D01* +X123984Y-1651D02*X124746Y-889D01* +X123984Y-1651D02*X124936D01* +X124746Y-889D02*Y-2413D01* +X125584D02*X125965D01* +X125774Y-889D02*Y-2413D01* +X125393Y-1270D02*X125774Y-889D01* +X126422Y-2222D02*X126613Y-2413D01* +X126422Y-1080D02*Y-2222D01* +Y-1080D02*X126613Y-889D01* +X126994D01* +X127184Y-1080D01* +Y-2222D01* +X126994Y-2413D02*X127184Y-2222D01* +X126613Y-2413D02*X126994D01* +X126422Y-2032D02*X127184Y-1270D01* +X127641Y-2222D02*X127832Y-2413D01* +X127641Y-1080D02*Y-2222D01* +Y-1080D02*X127832Y-889D01* +X128213D01* +X128403Y-1080D01* +Y-2222D01* +X128213Y-2413D02*X128403Y-2222D01* +X127832Y-2413D02*X128213D01* +X127641Y-2032D02*X128403Y-1270D01* +X128861Y-2413D02*X129051D01* +X129508Y-2222D02*X129699Y-2413D01* +X129508Y-1080D02*Y-2222D01* +Y-1080D02*X129699Y-889D01* +X130080D01* +X130270Y-1080D01* +Y-2222D01* +X130080Y-2413D02*X130270Y-2222D01* +X129699Y-2413D02*X130080D01* +X129508Y-2032D02*X130270Y-1270D01* +X130728Y-2222D02*X130918Y-2413D01* +X130728Y-1080D02*Y-2222D01* +Y-1080D02*X130918Y-889D01* +X131299D01* +X131490Y-1080D01* +Y-2222D01* +X131299Y-2413D02*X131490Y-2222D01* +X130918Y-2413D02*X131299D01* +X130728Y-2032D02*X131490Y-1270D01* +X131947Y-2222D02*X132137Y-2413D01* +X131947Y-1080D02*Y-2222D01* +Y-1080D02*X132137Y-889D01* +X132518D01* +X132709Y-1080D01* +Y-2222D01* +X132518Y-2413D02*X132709Y-2222D01* +X132137Y-2413D02*X132518D01* +X131947Y-2032D02*X132709Y-1270D01* +X133166Y-2222D02*X133356Y-2413D01* +X133166Y-1080D02*Y-2222D01* +Y-1080D02*X133356Y-889D01* +X133737D01* +X133928Y-1080D01* +Y-2222D01* +X133737Y-2413D02*X133928Y-2222D01* +X133356Y-2413D02*X133737D01* +X133166Y-2032D02*X133928Y-1270D01* +X134385Y-2222D02*X134576Y-2413D01* +X134385Y-1080D02*Y-2222D01* +Y-1080D02*X134576Y-889D01* +X134957D01* +X135147Y-1080D01* +Y-2222D01* +X134957Y-2413D02*X135147Y-2222D01* +X134576Y-2413D02*X134957D01* +X134385Y-2032D02*X135147Y-1270D01* +X135604Y-2222D02*X135795Y-2413D01* +X135604Y-1080D02*Y-2222D01* +Y-1080D02*X135795Y-889D01* +X136176D01* +X136366Y-1080D01* +Y-2222D01* +X136176Y-2413D02*X136366Y-2222D01* +X135795Y-2413D02*X136176D01* +X135604Y-2032D02*X136366Y-1270D01* +X137700Y-1842D02*Y-2413D01* +Y-1842D02*X137890Y-1651D01* +X138081D01* +X138271Y-1842D01* +Y-2413D01* +Y-1842D02*X138462Y-1651D01* +X138652D01* +X138843Y-1842D01* +Y-2413D01* +X137509Y-1651D02*X137700Y-1842D01* +X139300Y-1270D02*Y-1460D01* +Y-1842D02*Y-2413D01* +X139681Y-889D02*Y-2222D01* +X139872Y-2413D01* +X140443D02*X141015D01* +X141205Y-2222D01* +X141015Y-2032D02*X141205Y-2222D01* +X140443Y-2032D02*X141015D01* +X140253Y-1842D02*X140443Y-2032D01* +X140253Y-1842D02*X140443Y-1651D01* +X141015D01* +X141205Y-1842D01* +X140253Y-2222D02*X140443Y-2413D01* +X50990Y111379D02*Y109855D01* +X51562Y111379D02*X51752Y111188D01* +Y110046D01* +X51562Y109855D02*X51752Y110046D01* +X50800Y109855D02*X51562D01* +X50800Y111379D02*X51562D01* +X52781Y110617D02*X52972Y110426D01* +X52400Y110617D02*X52781D01* +X52210Y110426D02*X52400Y110617D01* +X52210Y110426D02*Y110046D01* +X52400Y109855D01* +X52972Y110617D02*Y110046D01* +X53162Y109855D01* +X52400D02*X52781D01* +X52972Y110046D01* +X53810Y111379D02*Y110046D01* +X54000Y109855D01* +X53619Y110808D02*X54000D01* +X54572Y109855D02*X55143D01* +X54381Y110046D02*X54572Y109855D01* +X54381Y110426D02*Y110046D01* +Y110426D02*X54572Y110617D01* +X54953D01* +X55143Y110426D01* +X54381Y110236D02*X55143D01* +Y110426D02*Y110236D01* +X55601Y110808D02*X55791D01* +X55601Y110426D02*X55791D01* +X56934Y111379D02*Y109855D01* +X57506Y110426D01* +X58077Y109855D01* +Y111379D02*Y109855D01* +X58725D02*X59296D01* +X58534Y110046D02*X58725Y109855D01* +X58534Y110426D02*Y110046D01* +Y110426D02*X58725Y110617D01* +X59106D01* +X59296Y110426D01* +X58534Y110236D02*X59296D01* +Y110426D02*Y110236D01* +X60516Y111379D02*Y109855D01* +X60325D02*X60516Y110046D01* +X59944Y109855D02*X60325D01* +X59754Y110046D02*X59944Y109855D01* +X59754Y110426D02*Y110046D01* +Y110426D02*X59944Y110617D01* +X60325D01* +X60516Y110426D01* +X61849Y109855D02*X62230D01* +X62040Y111379D02*Y109855D01* +X61659Y110998D02*X62040Y111379D01* +X62687D02*X63449D01* +X62687D02*Y110617D01* +X62878Y110808D01* +X63259D01* +X63449Y110617D01* +Y110046D01* +X63259Y109855D02*X63449Y110046D01* +X62878Y109855D02*X63259D01* +X62687Y110046D02*X62878Y109855D01* +X64592Y111379D02*X65164D01* +Y110046D01* +X64973Y109855D02*X65164Y110046D01* +X64783Y109855D02*X64973D01* +X64592Y110046D02*X64783Y109855D01* +X65621Y110617D02*Y110046D01* +X65811Y109855D01* +X66192D01* +X66383Y110046D01* +Y110617D02*Y110046D01* +X66840Y111379D02*Y110046D01* +X67031Y109855D01* +X68097Y111188D02*X68288Y111379D01* +X68859D01* +X69050Y111188D01* +Y110808D01* +X68097Y109855D02*X69050Y110808D01* +X68097Y109855D02*X69050D01* +X69507Y110046D02*X69698Y109855D01* +X69507Y111188D02*Y110046D01* +Y111188D02*X69698Y111379D01* +X70079D01* +X70269Y111188D01* +Y110046D01* +X70079Y109855D02*X70269Y110046D01* +X69698Y109855D02*X70079D01* +X69507Y110236D02*X70269Y110998D01* +X70917Y109855D02*X71298D01* +X71107Y111379D02*Y109855D01* +X70726Y110998D02*X71107Y111379D01* +X71755D02*X72517D01* +X71755D02*Y110617D01* +X71946Y110808D01* +X72327D01* +X72517Y110617D01* +Y110046D01* +X72327Y109855D02*X72517Y110046D01* +X71946Y109855D02*X72327D01* +X71755Y110046D02*X71946Y109855D01* +X73660Y110046D02*X73851Y109855D01* +X73660Y111188D02*Y110046D01* +Y111188D02*X73851Y111379D01* +X74232D01* +X74422Y111188D01* +Y110046D01* +X74232Y109855D02*X74422Y110046D01* +X73851Y109855D02*X74232D01* +X73660Y110236D02*X74422Y110998D01* +X74879Y109855D02*X75832Y110808D01* +Y111379D02*Y110808D01* +X74879Y111379D02*X75832D01* +X76289Y110808D02*X76479D01* +X76289Y110426D02*X76479D01* +X77127Y109855D02*X77508D01* +X77318Y111379D02*Y109855D01* +X76937Y110998D02*X77318Y111379D01* +X77965Y110046D02*X78156Y109855D01* +X77965Y111188D02*Y110046D01* +Y111188D02*X78156Y111379D01* +X78537D01* +X78727Y111188D01* +Y110046D01* +X78537Y109855D02*X78727Y110046D01* +X78156Y109855D02*X78537D01* +X77965Y110236D02*X78727Y110998D01* +X79185Y110808D02*X79375D01* +X79185Y110426D02*X79375D01* +X80023Y109855D02*X80404D01* +X80213Y111379D02*Y109855D01* +X79832Y110998D02*X80213Y111379D01* +X80861Y109855D02*X81623Y110617D01* +Y111188D02*Y110617D01* +X81432Y111379D02*X81623Y111188D01* +X81051Y111379D02*X81432D01* +X80861Y111188D02*X81051Y111379D01* +X80861Y111188D02*Y110808D01* +X81051Y110617D01* +X81623D01* +X82956Y111379D02*Y109855D01* +X82766Y111379D02*X83528D01* +X83718Y111188D01* +Y110808D01* +X83528Y110617D02*X83718Y110808D01* +X82956Y110617D02*X83528D01* +X84176Y111379D02*Y109855D01* +Y111379D02*X84747Y110808D01* +X85319Y111379D01* +Y109855D01* +X87224Y111379D02*X87414Y111188D01* +X86652Y111379D02*X87224D01* +X86462Y111188D02*X86652Y111379D01* +X86462Y111188D02*Y110046D01* +X86652Y109855D01* +X87224D01* +X87414Y110046D01* +Y110426D02*Y110046D01* +X87224Y110617D02*X87414Y110426D01* +X86843Y110617D02*X87224D01* +X87871Y111379D02*Y109855D01* +Y111379D02*X88443Y110808D01* +X89014Y111379D01* +Y109855D01* +X89472Y111379D02*X90234D01* +X89853D02*Y109855D01* +X91377Y111379D02*Y110046D01* +X91567Y109855D01* +X91948D01* +X92139Y110046D01* +Y111379D02*Y110046D01* +X92596Y111379D02*X93358D01* +X92977D02*Y109855D01* +X94005D02*X94577D01* +X93815Y110046D02*X94005Y109855D01* +X93815Y111188D02*Y110046D01* +Y111188D02*X94005Y111379D01* +X94577D01* +X50800Y114998D02*Y113665D01* +Y114998D02*X50990Y115189D01* +X51562D01* +X51752Y114998D01* +Y113665D01* +X50800Y114427D02*X51752D01* +X52210D02*Y113856D01* +X52400Y113665D01* +X52781D01* +X52972Y113856D01* +Y114427D02*Y113856D01* +X53619Y115189D02*Y113856D01* +X53810Y113665D01* +X53429Y114618D02*X53810D01* +X54191Y115189D02*Y113665D01* +Y114236D02*X54381Y114427D01* +X54762D01* +X54953Y114236D01* +Y113665D01* +X55410Y114236D02*Y113856D01* +Y114236D02*X55601Y114427D01* +X55982D01* +X56172Y114236D01* +Y113856D01* +X55982Y113665D02*X56172Y113856D01* +X55601Y113665D02*X55982D01* +X55410Y113856D02*X55601Y113665D01* +X56820Y114236D02*Y113665D01* +Y114236D02*X57010Y114427D01* +X57391D01* +X56629D02*X56820Y114236D01* +X57849Y114618D02*X58039D01* +X57849Y114236D02*X58039D01* +X59182Y115189D02*Y113665D01* +X59754Y114236D01* +X60325Y113665D01* +Y115189D02*Y113665D01* +X61354Y114427D02*X61544Y114236D01* +X60973Y114427D02*X61354D01* +X60782Y114236D02*X60973Y114427D01* +X60782Y114236D02*Y113856D01* +X60973Y113665D01* +X61544Y114427D02*Y113856D01* +X61735Y113665D01* +X60973D02*X61354D01* +X61544Y113856D01* +X62192Y115189D02*Y113856D01* +X62382Y113665D01* +X62954Y115189D02*Y113856D01* +X63144Y113665D01* +X62763Y114618D02*X63144D01* +X63716Y113665D02*X64287D01* +X63525Y113856D02*X63716Y113665D01* +X63525Y114236D02*Y113856D01* +Y114236D02*X63716Y114427D01* +X64097D01* +X64287Y114236D01* +X63525Y114046D02*X64287D01* +Y114236D02*Y114046D01* +X64935Y114236D02*Y113665D01* +Y114236D02*X65126Y114427D01* +X65507D01* +X64745D02*X64935Y114236D01* +X66650Y115189D02*Y113665D01* +Y115189D02*X67412D01* +X66650Y114427D02*X67221D01* +X68059Y113665D02*X68631D01* +X67869Y113856D02*X68059Y113665D01* +X67869Y114236D02*Y113856D01* +Y114236D02*X68059Y114427D01* +X68440D01* +X68631Y114236D01* +X67869Y114046D02*X68631D01* +Y114236D02*Y114046D01* +X69279Y115189D02*Y113856D01* +X69469Y113665D01* +X69088Y114618D02*X69469D01* +X70041Y115189D02*Y113856D01* +X70231Y113665D01* +X69850Y114618D02*X70231D01* +X70803Y113665D02*X71374D01* +X70612Y113856D02*X70803Y113665D01* +X70612Y114236D02*Y113856D01* +Y114236D02*X70803Y114427D01* +X71184D01* +X71374Y114236D01* +X70612Y114046D02*X71374D01* +Y114236D02*Y114046D01* +X72022Y114236D02*Y113665D01* +Y114236D02*X72212Y114427D01* +X72593D01* +X71831D02*X72022Y114236D01* +X73736Y115189D02*Y113665D01* +X74498D01* +X75527Y114427D02*X75717Y114236D01* +X75146Y114427D02*X75527D01* +X74955Y114236D02*X75146Y114427D01* +X74955Y114236D02*Y113856D01* +X75146Y113665D01* +X75717Y114427D02*Y113856D01* +X75908Y113665D01* +X75146D02*X75527D01* +X75717Y113856D01* +X76937Y114427D02*X77127Y114236D01* +X76556Y114427D02*X76937D01* +X76365Y114236D02*X76556Y114427D01* +X76365Y114236D02*Y113856D01* +X76556Y113665D01* +X76937D01* +X77127Y113856D01* +X76365Y113284D02*X76556Y113094D01* +X76937D01* +X77127Y113284D01* +Y114427D02*Y113284D01* +X77775Y113665D02*X78346D01* +X77584Y113856D02*X77775Y113665D01* +X77584Y114236D02*Y113856D01* +Y114236D02*X77775Y114427D01* +X78156D01* +X78346Y114236D01* +X77584Y114046D02*X78346D01* +Y114236D02*Y114046D01* +X78994Y113665D02*X79566D01* +X79756Y113856D01* +X79566Y114046D02*X79756Y113856D01* +X78994Y114046D02*X79566D01* +X78804Y114236D02*X78994Y114046D01* +X78804Y114236D02*X78994Y114427D01* +X79566D01* +X79756Y114236D01* +X78804Y113856D02*X78994Y113665D01* +X50800Y118999D02*X51562D01* +X51181D02*Y117475D01* +X52019Y118618D02*Y118428D01* +Y118046D02*Y117475D01* +X52591Y118999D02*Y117666D01* +X52781Y117475D01* +X52400Y118428D02*X52781D01* +X53162Y118999D02*Y117666D01* +X53353Y117475D01* +X53924D02*X54496D01* +X53734Y117666D02*X53924Y117475D01* +X53734Y118046D02*Y117666D01* +Y118046D02*X53924Y118237D01* +X54305D01* +X54496Y118046D01* +X53734Y117856D02*X54496D01* +Y118046D02*Y117856D01* +X54953Y118428D02*X55143D01* +X54953Y118046D02*X55143D01* +X56286Y117666D02*X56477Y117475D01* +X56286Y118808D02*X56477Y118999D01* +X56286Y118808D02*Y117666D01* +X56934Y118237D02*Y117666D01* +X57125Y117475D01* +X57506D01* +X57696Y117666D01* +Y118237D02*Y117666D01* +X58344Y118046D02*Y117475D01* +Y118046D02*X58534Y118237D01* +X58725D01* +X58915Y118046D01* +Y117475D01* +X58153Y118237D02*X58344Y118046D01* +X59373Y118999D02*Y117475D01* +Y118046D02*X59944Y117475D01* +X59373Y118046D02*X59754Y118428D01* +X60592Y118046D02*Y117475D01* +Y118046D02*X60782Y118237D01* +X60973D01* +X61163Y118046D01* +Y117475D01* +X60401Y118237D02*X60592Y118046D01* +X61620D02*Y117666D01* +Y118046D02*X61811Y118237D01* +X62192D01* +X62382Y118046D01* +Y117666D01* +X62192Y117475D02*X62382Y117666D01* +X61811Y117475D02*X62192D01* +X61620Y117666D02*X61811Y117475D01* +X62840Y118237D02*Y117666D01* +X63030Y117475D01* +X63221D01* +X63411Y117666D01* +Y118237D02*Y117666D01* +X63602Y117475D01* +X63792D01* +X63983Y117666D01* +Y118237D02*Y117666D01* +X64630Y118046D02*Y117475D01* +Y118046D02*X64821Y118237D01* +X65011D01* +X65202Y118046D01* +Y117475D01* +X64440Y118237D02*X64630Y118046D01* +X65659Y118999D02*X65850Y118808D01* +Y117666D01* +X65659Y117475D02*X65850Y117666D01* +X66993Y118237D02*X67755D01* +X68898Y118999D02*Y117475D01* +Y118999D02*X69660D01* +X68898Y118237D02*X69469D01* +X70688D02*X70879Y118046D01* +X70307Y118237D02*X70688D01* +X70117Y118046D02*X70307Y118237D01* +X70117Y118046D02*Y117666D01* +X70307Y117475D01* +X70879Y118237D02*Y117666D01* +X71069Y117475D01* +X70307D02*X70688D01* +X70879Y117666D01* +X71526Y118999D02*Y117475D01* +Y117666D02*X71717Y117475D01* +X72098D01* +X72288Y117666D01* +Y118046D02*Y117666D01* +X72098Y118237D02*X72288Y118046D01* +X71717Y118237D02*X72098D01* +X71526Y118046D02*X71717Y118237D01* +X72936Y118046D02*Y117475D01* +Y118046D02*X73127Y118237D01* +X73508D01* +X72746D02*X72936Y118046D01* +X73965Y118618D02*Y118428D01* +Y118046D02*Y117475D01* +X74536Y118237D02*X75108D01* +X74346Y118046D02*X74536Y118237D01* +X74346Y118046D02*Y117666D01* +X74536Y117475D01* +X75108D01* +X76137Y118237D02*X76327Y118046D01* +X75756Y118237D02*X76137D01* +X75565Y118046D02*X75756Y118237D01* +X75565Y118046D02*Y117666D01* +X75756Y117475D01* +X76327Y118237D02*Y117666D01* +X76518Y117475D01* +X75756D02*X76137D01* +X76327Y117666D01* +X77165Y118999D02*Y117666D01* +X77356Y117475D01* +X76975Y118428D02*X77356D01* +X77737Y118618D02*Y118428D01* +Y118046D02*Y117475D01* +X78118Y118046D02*Y117666D01* +Y118046D02*X78308Y118237D01* +X78689D01* +X78880Y118046D01* +Y117666D01* +X78689Y117475D02*X78880Y117666D01* +X78308Y117475D02*X78689D01* +X78118Y117666D02*X78308Y117475D01* +X79527Y118046D02*Y117475D01* +Y118046D02*X79718Y118237D01* +X79908D01* +X80099Y118046D01* +Y117475D01* +X79337Y118237D02*X79527Y118046D01* +X81432Y118999D02*Y117475D01* +X82004Y118999D02*X82194Y118808D01* +Y117666D01* +X82004Y117475D02*X82194Y117666D01* +X81242Y117475D02*X82004D01* +X81242Y118999D02*X82004D01* +X82842Y118046D02*Y117475D01* +Y118046D02*X83033Y118237D01* +X83414D01* +X82652D02*X82842Y118046D01* +X84442Y118237D02*X84633Y118046D01* +X84061Y118237D02*X84442D01* +X83871Y118046D02*X84061Y118237D01* +X83871Y118046D02*Y117666D01* +X84061Y117475D01* +X84633Y118237D02*Y117666D01* +X84823Y117475D01* +X84061D02*X84442D01* +X84633Y117666D01* +X85281Y118237D02*Y117666D01* +X85471Y117475D01* +X85662D01* +X85852Y117666D01* +Y118237D02*Y117666D01* +X86043Y117475D01* +X86233D01* +X86424Y117666D01* +Y118237D02*Y117666D01* +X86881Y118618D02*Y118428D01* +Y118046D02*Y117475D01* +X87452Y118046D02*Y117475D01* +Y118046D02*X87643Y118237D01* +X87833D01* +X88024Y118046D01* +Y117475D01* +X87262Y118237D02*X87452Y118046D01* +X89052Y118237D02*X89243Y118046D01* +X88671Y118237D02*X89052D01* +X88481Y118046D02*X88671Y118237D01* +X88481Y118046D02*Y117666D01* +X88671Y117475D01* +X89052D01* +X89243Y117666D01* +X88481Y117094D02*X88671Y116904D01* +X89052D01* +X89243Y117094D01* +Y118237D02*Y117094D01* M02* diff --git a/doc/aic.nelma.bottom.png b/doc/aic.nelma.bottom.png new file mode 100644 index 0000000..06b3e72 Binary files /dev/null and b/doc/aic.nelma.bottom.png differ diff --git a/doc/aic.nelma.em b/doc/aic.nelma.em new file mode 100644 index 0000000..86995ee --- /dev/null +++ b/doc/aic.nelma.em @@ -0,0 +1,5725 @@ +/* Made with PCB Nelma export HID *//* Wed Jul 15 16:10:34 2015 + */ +/* **** Nets **** */ + +net +5V { + objects = { + "C3-1-bottom", + "C3-1-top", + "C4-2-bottom", + "C4-2-top", + "C7-1-bottom", + "C7-1-top", + "C8-2-bottom", + "C8-2-top", + "C9-2-bottom", + "C9-2-top", + "C10-1-bottom", + "C10-1-top", + "J2-A6-bottom", + "J2-A6-top", + "J2-A28-bottom", + "J2-A28-top", + "J2-B28-bottom", + "J2-B28-top", + "J2-C5-bottom", + "J2-C5-top", + "J2-C28-bottom", + "J2-C28-top", + "R1-2-bottom", + "R1-2-top", + "R3-2-bottom", + "R3-2-top", + "R4-2-bottom", + "R4-2-top", + "R5-2-bottom", + "R5-2-top", + "R11-2-bottom", + "R11-2-top", + "U1-3-bottom", + "U1-3-top", + "U2-8-bottom", + "U2-8-top", + "U4-2-bottom", + "U4-2-top", + "U5-7-bottom", + "U5-7-top", + "U5-8-bottom", + "U5-8-top", + "U6-16-bottom", + "U6-16-top", + "U7-13-bottom", + "U7-13-top", + "U7-20-bottom", + "U7-20-top", + "U7-28-bottom", + "U7-28-top" + } +} +net +12V { + objects = { + "C1-1-bottom", + "C1-1-top", + "C2-2-bottom", + "C2-2-top", + "C16-1-bottom", + "C16-1-top", + "C17-2-bottom", + "C17-2-top", + "C19-1-bottom", + "C19-1-top", + "C20-2-bottom", + "C20-2-top", + "C23-1-bottom", + "C23-1-top", + "C24-2-bottom", + "C24-2-top", + "D5-1-bottom", + "D5-1-top", + "D6-1-bottom", + "D6-1-top", + "J2-A29-bottom", + "J2-A29-top", + "J2-B29-bottom", + "J2-B29-top", + "J2-C29-bottom", + "J2-C29-top", + "U1-1-bottom", + "U1-1-top", + "U8-1-bottom", + "U8-1-top", + "U8-8-bottom", + "U8-8-top", + "U9-1-bottom", + "U9-1-top", + "U10-1-bottom", + "U10-1-top" + } +} +net /RELEASE { + objects = { + "D4-1-bottom", + "D4-1-top", + "J2-A23-bottom", + "J2-A23-top", + "J2-B23-bottom", + "J2-B23-top", + "J2-C23-bottom", + "J2-C23-top", + "Q1-2-bottom", + "Q1-2-top" + } +} +net /SD { + objects = { + "U7-22-bottom", + "U7-22-top", + "U9-3-bottom", + "U9-3-top", + "U10-3-bottom", + "U10-3-top" + } +} +net BRAKE { + objects = { + "U7-4-bottom", + "U7-4-top", + "U8-2-bottom", + "U8-2-top" + } +} +net CANH { + objects = { + "J2-C2-bottom", + "J2-C2-top", + "U3-7-bottom", + "U3-7-top" + } +} +net CANL { + objects = { + "J2-A1-bottom", + "J2-A1-top", + "U3-6-bottom", + "U3-6-top" + } +} +net CHA { + objects = { + "J2-A5-bottom", + "J2-A5-top", + "R5-1-bottom", + "R5-1-top", + "U7-6-bottom", + "U7-6-top" + } +} +net CHB { + objects = { + "J2-C6-bottom", + "J2-C6-top", + "R4-1-bottom", + "R4-1-top", + "U7-7-bottom", + "U7-7-top" + } +} +net CLOCK { + objects = { + "U2-5-bottom", + "U2-5-top", + "U7-9-bottom", + "U7-9-top" + } +} +net CTS { + objects = { + "J1-8-bottom", + "J1-8-top", + "U6-8-bottom", + "U6-8-top" + } +} +net DRVA { + objects = { + "C26-2-bottom", + "C26-2-top", + "R6-2-bottom", + "R6-2-top", + "U7-26-bottom", + "U7-26-top", + "U9-2-bottom", + "U9-2-top" + } +} +net DRVB { + objects = { + "C27-2-bottom", + "C27-2-top", + "R7-2-bottom", + "R7-2-top", + "U7-25-bottom", + "U7-25-top", + "U10-2-bottom", + "U10-2-top" + } +} +net GNDCAN { + objects = { + "C14-1-bottom", + "C14-1-top", + "C15-1-bottom", + "C15-1-top", + "J2-B1-bottom", + "J2-B1-top", + "J2-B2-bottom", + "J2-B2-top", + "U3-2-bottom", + "U3-2-top", + "U3-8-bottom", + "U3-8-top", + "U4-5-bottom", + "U4-5-top" + } +} +net INDEX { + objects = { + "J2-B7-bottom", + "J2-B7-top", + "R12-2-bottom", + "R12-2-top" + } +} +net MOTOR+ { + objects = { + "C21-2-bottom", + "C21-2-top", + "J2-A25-bottom", + "J2-A25-top", + "J2-B25-bottom", + "J2-B25-top", + "J2-C25-bottom", + "J2-C25-top", + "Q2-3-bottom", + "Q2-3-top", + "Q3-2-bottom", + "Q3-2-top", + "U9-11-bottom", + "U9-11-top" + } +} +net MOTOR- { + objects = { + "C25-2-bottom", + "C25-2-top", + "J2-A26-bottom", + "J2-A26-top", + "J2-B26-bottom", + "J2-B26-top", + "J2-C26-bottom", + "J2-C26-top", + "Q4-3-bottom", + "Q4-3-top", + "Q5-2-bottom", + "Q5-2-top", + "U10-11-bottom", + "U10-11-top" + } +} +net PGND { + objects = { + "C1-2-bottom", + "C1-2-top", + "C2-1-bottom", + "C2-1-top", + "C3-2-bottom", + "C3-2-top", + "C4-1-bottom", + "C4-1-top", + "C5-2-bottom", + "C5-2-top", + "C6-1-bottom", + "C6-1-top", + "C6-2-bottom", + "C6-2-top", + "C7-2-bottom", + "C7-2-top", + "C8-1-bottom", + "C8-1-top", + "C9-1-bottom", + "C9-1-top", + "C13-2-bottom", + "C13-2-top", + "C16-2-bottom", + "C16-2-top", + "C17-1-bottom", + "C17-1-top", + "C18-2-bottom", + "C18-2-top", + "C19-2-bottom", + "C19-2-top", + "C20-1-bottom", + "C20-1-top", + "C22-2-bottom", + "C22-2-top", + "C23-2-bottom", + "C23-2-top", + "C24-1-bottom", + "C24-1-top", + "C26-1-bottom", + "C26-1-top", + "C27-1-bottom", + "C27-1-top", + "D1-1-bottom", + "D1-1-top", + "D2-1-bottom", + "D2-1-top", + "D3-1-bottom", + "D3-1-top", + "J1-5-bottom", + "J1-5-top", + "J2-A7-bottom", + "J2-A7-top", + "J2-A22-bottom", + "J2-A22-top", + "J2-A27-bottom", + "J2-A27-top", + "J2-A30-bottom", + "J2-A30-top", + "J2-A31-bottom", + "J2-A31-top", + "J2-B5-bottom", + "J2-B5-top", + "J2-B6-bottom", + "J2-B6-top", + "J2-B22-bottom", + "J2-B22-top", + "J2-B27-bottom", + "J2-B27-top", + "J2-B30-bottom", + "J2-B30-top", + "J2-B31-bottom", + "J2-B31-top", + "J2-C22-bottom", + "J2-C22-top", + "J2-C27-bottom", + "J2-C27-top", + "J2-C30-bottom", + "J2-C30-top", + "J2-C31-bottom", + "J2-C31-top", + "Q1-3-bottom", + "Q1-3-top", + "Q3-3-bottom", + "Q3-3-top", + "Q5-3-bottom", + "Q5-3-top", + "R13-1-bottom", + "R13-1-top", + "R14-1-bottom", + "R14-1-top", + "R15-1-bottom", + "R15-1-top", + "S1-1-bottom", + "S1-1-top", + "U1-2-bottom", + "U1-2-top", + "U2-4-bottom", + "U2-4-top", + "U5-5-bottom", + "U5-5-top", + "U6-15-bottom", + "U6-15-top", + "U7-8-bottom", + "U7-8-top", + "U7-19-bottom", + "U7-19-top", + "U7-27-bottom", + "U7-27-top", + "U8-4-bottom", + "U8-4-top", + "U8-5-bottom", + "U8-5-top", + "U9-5-bottom", + "U9-5-top", + "U9-6-bottom", + "U9-6-top", + "U10-5-bottom", + "U10-5-top", + "U10-6-bottom", + "U10-6-top" + } +} +net REFPOS { + objects = { + "R12-1-bottom", + "R12-1-top", + "R13-2-bottom", + "R13-2-top", + "U7-5-bottom", + "U7-5-top" + } +} +net RTS { + objects = { + "J1-7-bottom", + "J1-7-top", + "U6-7-bottom", + "U6-7-top" + } +} +net RX { + objects = { + "J1-2-bottom", + "J1-2-top", + "U6-13-bottom", + "U6-13-top" + } +} +net TX { + objects = { + "J1-3-bottom", + "J1-3-top", + "U6-14-bottom", + "U6-14-top" + } +} +net unnamed_net1 { + objects = { + "D1-2-bottom", + "D1-2-top", + "R1-1-bottom", + "R1-1-top" + } +} +net unnamed_net2 { + objects = { + "R2-2-bottom", + "R2-2-top", + "U7-1-bottom", + "U7-1-top" + } +} +net unnamed_net3 { + objects = { + "C5-1-bottom", + "C5-1-top", + "R2-1-bottom", + "R2-1-top", + "R3-1-bottom", + "R3-1-top", + "S1-2-bottom", + "S1-2-top" + } +} +net unnamed_net4 { + objects = { + "D2-2-bottom", + "D2-2-top", + "R6-1-bottom", + "R6-1-top" + } +} +net unnamed_net5 { + objects = { + "D3-2-bottom", + "D3-2-top", + "R7-1-bottom", + "R7-1-top" + } +} +net unnamed_net6 { + objects = { + "R8-1-bottom", + "R8-1-top", + "U3-1-bottom", + "U3-1-top", + "U4-6-bottom", + "U4-6-top" + } +} +net unnamed_net7 { + objects = { + "R10-2-bottom", + "R10-2-top", + "U3-4-bottom", + "U3-4-top" + } +} +net unnamed_net8 { + objects = { + "R9-2-bottom", + "R9-2-top", + "U4-3-bottom", + "U4-3-top" + } +} +net unnamed_net9 { + objects = { + "R9-1-bottom", + "R9-1-top", + "U7-17-bottom", + "U7-17-top" + } +} +net unnamed_net10 { + objects = { + "R10-1-bottom", + "R10-1-top", + "U5-3-bottom", + "U5-3-top" + } +} +net unnamed_net11 { + objects = { + "R11-1-bottom", + "R11-1-top", + "U5-6-bottom", + "U5-6-top", + "U7-18-bottom", + "U7-18-top" + } +} +net unnamed_net12 { + objects = { + "C10-2-bottom", + "C10-2-top", + "U6-2-bottom", + "U6-2-top" + } +} +net unnamed_net13 { + objects = { + "C11-1-bottom", + "C11-1-top", + "U6-3-bottom", + "U6-3-top" + } +} +net unnamed_net14 { + objects = { + "C12-2-bottom", + "C12-2-top", + "U6-4-bottom", + "U6-4-top" + } +} +net unnamed_net15 { + objects = { + "C12-1-bottom", + "C12-1-top", + "U6-5-bottom", + "U6-5-top" + } +} +net unnamed_net16 { + objects = { + "C13-1-bottom", + "C13-1-top", + "U6-6-bottom", + "U6-6-top" + } +} +net unnamed_net17 { + objects = { + "U6-9-bottom", + "U6-9-top", + "U7-3-bottom", + "U7-3-top" + } +} +net unnamed_net18 { + objects = { + "U6-10-bottom", + "U6-10-top", + "U7-2-bottom", + "U7-2-top" + } +} +net unnamed_net19 { + objects = { + "U6-11-bottom", + "U6-11-top", + "U7-11-bottom", + "U7-11-top" + } +} +net unnamed_net20 { + objects = { + "U6-12-bottom", + "U6-12-top", + "U7-12-bottom", + "U7-12-top" + } +} +net unnamed_net21 { + objects = { + "C11-2-bottom", + "C11-2-top", + "U6-1-bottom", + "U6-1-top" + } +} +net unnamed_net22 { + objects = { + "Q1-1-bottom", + "Q1-1-top", + "U8-6-bottom", + "U8-6-top", + "U8-7-bottom", + "U8-7-top" + } +} +net unnamed_net23 { + objects = { + "D7-1-bottom", + "D7-1-top", + "Q2-1-bottom", + "Q2-1-top", + "R16-2-bottom", + "R16-2-top" + } +} +net unnamed_net24 { + objects = { + "D8-1-bottom", + "D8-1-top", + "Q3-1-bottom", + "Q3-1-top", + "R17-2-bottom", + "R17-2-top" + } +} +net unnamed_net25 { + objects = { + "D9-1-bottom", + "D9-1-top", + "Q4-1-bottom", + "Q4-1-top", + "R18-1-bottom", + "R18-1-top" + } +} +net unnamed_net26 { + objects = { + "D10-1-bottom", + "D10-1-top", + "Q5-1-bottom", + "Q5-1-top", + "R19-1-bottom", + "R19-1-top" + } +} +net unnamed_net27 { + objects = { + "C21-1-bottom", + "C21-1-top", + "D5-2-bottom", + "D5-2-top", + "U9-13-bottom", + "U9-13-top" + } +} +net unnamed_net28 { + objects = { + "C25-1-bottom", + "C25-1-top", + "D6-2-bottom", + "D6-2-top", + "U10-13-bottom", + "U10-13-top" + } +} +net unnamed_net29 { + objects = { + "R15-2-bottom", + "R15-2-top", + "U10-4-bottom", + "U10-4-top" + } +} +net unnamed_net30 { + objects = { + "R14-2-bottom", + "R14-2-top", + "U9-4-bottom", + "U9-4-top" + } +} +net unnamed_net31 { + objects = { + "D8-2-bottom", + "D8-2-top", + "R17-1-bottom", + "R17-1-top", + "U9-7-bottom", + "U9-7-top" + } +} +net unnamed_net32 { + objects = { + "D7-2-bottom", + "D7-2-top", + "R16-1-bottom", + "R16-1-top", + "U9-12-bottom", + "U9-12-top" + } +} +net unnamed_net33 { + objects = { + "D10-2-bottom", + "D10-2-top", + "R19-2-bottom", + "R19-2-top", + "U10-7-bottom", + "U10-7-top" + } +} +net unnamed_net34 { + objects = { + "D9-2-bottom", + "D9-2-top", + "R18-2-bottom", + "R18-2-top", + "U10-12-bottom", + "U10-12-top" + } +} +net VCAN { + objects = { + "C14-2-bottom", + "C14-2-top", + "C15-2-bottom", + "C15-2-top", + "J2-A2-bottom", + "J2-A2-top", + "J2-C1-bottom", + "J2-C1-top", + "R8-2-bottom", + "R8-2-top", + "U3-3-bottom", + "U3-3-top", + "U4-7-bottom", + "U4-7-top", + "U4-8-bottom", + "U4-8-top", + "U5-2-bottom", + "U5-2-top" + } +} +net Vpp { + objects = { + "C18-1-bottom", + "C18-1-top", + "C22-1-bottom", + "C22-1-top", + "D4-2-bottom", + "D4-2-top", + "J2-A24-bottom", + "J2-A24-top", + "J2-A32-bottom", + "J2-A32-top", + "J2-B24-bottom", + "J2-B24-top", + "J2-B32-bottom", + "J2-B32-top", + "J2-C7-bottom", + "J2-C7-top", + "J2-C24-bottom", + "J2-C24-top", + "J2-C32-bottom", + "J2-C32-top", + "Q2-2-bottom", + "Q2-2-top", + "Q4-2-bottom", + "Q4-2-top" + } +} + +/* **** Objects **** */ + +object C3-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 615, 350 } +} +object C3-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 615, 350 } +} +object C4-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 552, 380 } +} +object C4-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 552, 380 } +} +object C7-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 280, 75 } +} +object C7-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 280, 75 } +} +object C8-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 459, 105 } +} +object C8-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 459, 105 } +} +object C9-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 377, 30 } +} +object C9-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 377, 30 } +} +object C10-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 315, 45 } +} +object C10-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 315, 45 } +} +object J2-A6-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 652, 97 } +} +object J2-A6-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 652, 97 } +} +object J2-A28-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 652, 317 } +} +object J2-A28-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 652, 317 } +} +object J2-B28-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 642, 317 } +} +object J2-B28-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 642, 317 } +} +object J2-C5-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 632, 87 } +} +object J2-C5-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 632, 87 } +} +object J2-C28-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 632, 317 } +} +object J2-C28-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 632, 317 } +} +object R1-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 345, 80 } +} +object R1-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 345, 80 } +} +object R3-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 400, 150 } +} +object R3-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 400, 150 } +} +object R4-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 575, 150 } +} +object R4-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 575, 150 } +} +object R5-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 517, 150 } +} +object R5-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 517, 150 } +} +object R11-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 425, 40 } +} +object R11-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 425, 40 } +} +object U1-3-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 330, 360 } +} +object U1-3-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 330, 360 } +} +object U2-8-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 372, 100 } +} +object U2-8-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 372, 100 } +} +object U4-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 492, 75 } +} +object U4-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 492, 75 } +} +object U5-7-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 382, 45 } +} +object U5-7-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 382, 45 } +} +object U5-8-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 372, 45 } +} +object U5-8-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 372, 45 } +} +object U6-16-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 280, 100 } +} +object U6-16-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 280, 100 } +} +object U7-13-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 602, 130 } +} +object U7-13-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 602, 130 } +} +object U7-20-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 562, 100 } +} +object U7-20-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 562, 100 } +} +object U7-28-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 482, 100 } +} +object U7-28-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 482, 100 } +} +object C1-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 615, 370 } +} +object C1-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 615, 370 } +} +object C2-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 592, 360 } +} +object C2-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 592, 360 } +} +object C16-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 192, 75 } +} +object C16-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 192, 75 } +} +object C17-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 229, 30 } +} +object C17-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 229, 30 } +} +object C19-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 242, 150 } +} +object C19-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 242, 150 } +} +object C20-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 177, 125 } +} +object C20-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 177, 125 } +} +object C23-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 242, 275 } +} +object C23-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 242, 275 } +} +object C24-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 177, 345 } +} +object C24-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 177, 345 } +} +object D5-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 177, 175 } +} +object D5-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 177, 175 } +} +object D6-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 177, 300 } +} +object D6-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 177, 300 } +} +object J2-A29-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 652, 327 } +} +object J2-A29-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 652, 327 } +} +object J2-B29-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 642, 327 } +} +object J2-B29-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 642, 327 } +} +object J2-C29-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 632, 327 } +} +object J2-C29-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 632, 327 } +} +object U1-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 350, 360 } +} +object U1-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 350, 360 } +} +object U8-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 225, 75 } +} +object U8-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 225, 75 } +} +object U8-8-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 225, 45 } +} +object U8-8-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 225, 45 } +} +object U9-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 195, 130 } +} +object U9-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 195, 130 } +} +object U10-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 195, 350 } +} +object U10-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 195, 350 } +} +object D4-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 382, 150 } +} +object D4-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 382, 150 } +} +object J2-A23-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 652, 267 } +} +object J2-A23-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 652, 267 } +} +object J2-B23-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 642, 267 } +} +object J2-B23-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 642, 267 } +} +object J2-C23-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 632, 267 } +} +object J2-C23-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 632, 267 } +} +object Q1-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 467, 360 } +} +object Q1-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 467, 360 } +} +object U7-22-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 542, 100 } +} +object U7-22-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 542, 100 } +} +object U9-3-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 215, 130 } +} +object U9-3-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 215, 130 } +} +object U10-3-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 215, 350 } +} +object U10-3-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 215, 350 } +} +object U7-4-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 512, 130 } +} +object U7-4-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 512, 130 } +} +object U8-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 235, 75 } +} +object U8-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 235, 75 } +} +object J2-C2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 632, 57 } +} +object J2-C2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 632, 57 } +} +object U3-7-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 592, 45 } +} +object U3-7-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 592, 45 } +} +object J2-A1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 652, 47 } +} +object J2-A1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 652, 47 } +} +object U3-6-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 602, 45 } +} +object U3-6-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 602, 45 } +} +object J2-A5-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 652, 87 } +} +object J2-A5-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 652, 87 } +} +object R5-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 557, 150 } +} +object R5-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 557, 150 } +} +object U7-6-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 532, 130 } +} +object U7-6-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 532, 130 } +} +object J2-C6-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 632, 97 } +} +object J2-C6-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 632, 97 } +} +object R4-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 615, 150 } +} +object R4-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 615, 150 } +} +object U7-7-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 542, 130 } +} +object U7-7-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 542, 130 } +} +object U2-5-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 402, 100 } +} +object U2-5-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 402, 100 } +} +object U7-9-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 562, 130 } +} +object U7-9-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 562, 130 } +} +object J1-8-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 70, 129 } +} +object J1-8-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 70, 129 } +} +object U6-8-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 350, 130 } +} +object U6-8-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 350, 130 } +} +object C26-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 177, 30 } +} +object C26-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 177, 30 } +} +object R6-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 425, 135 } +} +object R6-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 425, 135 } +} +object U7-26-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 502, 100 } +} +object U7-26-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 502, 100 } +} +object U9-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 204, 130 } +} +object U9-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 204, 130 } +} +object C27-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 177, 52 } +} +object C27-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 177, 52 } +} +object R7-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 442, 135 } +} +object R7-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 442, 135 } +} +object U7-25-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 512, 100 } +} +object U7-25-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 512, 100 } +} +object U10-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 204, 350 } +} +object U10-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 204, 350 } +} +object C14-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 507, 30 } +} +object C14-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 507, 30 } +} +object C15-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 607, 30 } +} +object C15-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 607, 30 } +} +object J2-B1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 642, 47 } +} +object J2-B1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 642, 47 } +} +object J2-B2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 642, 57 } +} +object J2-B2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 642, 57 } +} +object U3-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 592, 75 } +} +object U3-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 592, 75 } +} +object U3-8-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 582, 45 } +} +object U3-8-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 582, 45 } +} +object U4-5-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 512, 45 } +} +object U4-5-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 512, 45 } +} +object J2-B7-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 642, 107 } +} +object J2-B7-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 642, 107 } +} +object R12-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 442, 40 } +} +object R12-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 442, 40 } +} +object C21-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 252, 175 } +} +object C21-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 252, 175 } +} +object J2-A25-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 652, 287 } +} +object J2-A25-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 652, 287 } +} +object J2-B25-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 642, 287 } +} +object J2-B25-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 642, 287 } +} +object J2-C25-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 632, 287 } +} +object J2-C25-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 632, 287 } +} +object Q2-3-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 330, 210 } +} +object Q2-3-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 330, 210 } +} +object Q3-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 467, 210 } +} +object Q3-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 467, 210 } +} +object U9-11-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 225, 100 } +} +object U9-11-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 225, 100 } +} +object C25-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 252, 300 } +} +object C25-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 252, 300 } +} +object J2-A26-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 652, 297 } +} +object J2-A26-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 652, 297 } +} +object J2-B26-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 642, 297 } +} +object J2-B26-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 642, 297 } +} +object J2-C26-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 632, 297 } +} +object J2-C26-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 632, 297 } +} +object Q4-3-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 330, 285 } +} +object Q4-3-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 330, 285 } +} +object Q5-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 467, 285 } +} +object Q5-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 467, 285 } +} +object U10-11-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 225, 320 } +} +object U10-11-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 225, 320 } +} +object C1-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 615, 380 } +} +object C1-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 615, 380 } +} +object C2-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 592, 380 } +} +object C2-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 592, 380 } +} +object C3-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 615, 340 } +} +object C3-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 615, 340 } +} +object C4-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 552, 360 } +} +object C4-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 552, 360 } +} +object C5-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 320, 75 } +} +object C5-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 320, 75 } +} +object C6-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 575, 380 } +} +object C6-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 575, 380 } +} +object C6-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 575, 360 } +} +object C6-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 575, 360 } +} +object C7-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 290, 75 } +} +object C7-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 290, 75 } +} +object C8-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 459, 125 } +} +object C8-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 459, 125 } +} +object C9-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 397, 30 } +} +object C9-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 397, 30 } +} +object C13-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 280, 50 } +} +object C13-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 280, 50 } +} +object C16-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 202, 75 } +} +object C16-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 202, 75 } +} +object C17-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 250, 30 } +} +object C17-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 250, 30 } +} +object C18-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 592, 202 } +} +object C18-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 592, 202 } +} +object C19-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 252, 150 } +} +object C19-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 252, 150 } +} +object C20-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 177, 105 } +} +object C20-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 177, 105 } +} +object C22-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 592, 300 } +} +object C22-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 592, 300 } +} +object C23-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 252, 275 } +} +object C23-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 252, 275 } +} +object C24-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 177, 325 } +} +object C24-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 177, 325 } +} +object C26-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 197, 30 } +} +object C26-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 197, 30 } +} +object C27-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 197, 52 } +} +object C27-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 197, 52 } +} +object D1-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 62, 292 } +} +object D1-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 62, 292 } +} +object D2-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 62, 254 } +} +object D2-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 62, 254 } +} +object D3-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 62, 217 } +} +object D3-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 62, 217 } +} +object J1-5-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 80, 146 } +} +object J1-5-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 80, 146 } +} +object J2-A7-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 652, 107 } +} +object J2-A7-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 652, 107 } +} +object J2-A22-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 652, 257 } +} +object J2-A22-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 652, 257 } +} +object J2-A27-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 652, 307 } +} +object J2-A27-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 652, 307 } +} +object J2-A30-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 652, 337 } +} +object J2-A30-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 652, 337 } +} +object J2-A31-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 652, 347 } +} +object J2-A31-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 652, 347 } +} +object J2-B5-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 642, 87 } +} +object J2-B5-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 642, 87 } +} +object J2-B6-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 642, 97 } +} +object J2-B6-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 642, 97 } +} +object J2-B22-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 642, 257 } +} +object J2-B22-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 642, 257 } +} +object J2-B27-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 642, 307 } +} +object J2-B27-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 642, 307 } +} +object J2-B30-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 642, 337 } +} +object J2-B30-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 642, 337 } +} +object J2-B31-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 642, 347 } +} +object J2-B31-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 642, 347 } +} +object J2-C22-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 632, 257 } +} +object J2-C22-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 632, 257 } +} +object J2-C27-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 632, 307 } +} +object J2-C27-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 632, 307 } +} +object J2-C30-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 632, 337 } +} +object J2-C30-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 632, 337 } +} +object J2-C31-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 632, 347 } +} +object J2-C31-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 632, 347 } +} +object Q1-3-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 457, 360 } +} +object Q1-3-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 457, 360 } +} +object Q3-3-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 457, 210 } +} +object Q3-3-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 457, 210 } +} +object Q5-3-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 457, 285 } +} +object Q5-3-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 457, 285 } +} +object R13-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 459, 40 } +} +object R13-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 459, 40 } +} +object R14-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 217, 150 } +} +object R14-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 217, 150 } +} +object R15-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 217, 275 } +} +object R15-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 217, 275 } +} +object S1-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 55, 320 } +} +object S1-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 55, 320 } +} +object U1-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 340, 360 } +} +object U1-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 340, 360 } +} +object U2-4-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 402, 130 } +} +object U2-4-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 402, 130 } +} +object U5-5-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 402, 45 } +} +object U5-5-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 402, 45 } +} +object U6-15-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 290, 100 } +} +object U6-15-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 290, 100 } +} +object U7-8-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 552, 130 } +} +object U7-8-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 552, 130 } +} +object U7-19-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 572, 100 } +} +object U7-19-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 572, 100 } +} +object U7-27-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 492, 100 } +} +object U7-27-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 492, 100 } +} +object U8-4-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 254, 75 } +} +object U8-4-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 254, 75 } +} +object U8-5-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 254, 45 } +} +object U8-5-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 254, 45 } +} +object U9-5-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 235, 130 } +} +object U9-5-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 235, 130 } +} +object U9-6-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 245, 130 } +} +object U9-6-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 245, 130 } +} +object U10-5-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 235, 350 } +} +object U10-5-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 235, 350 } +} +object U10-6-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 245, 350 } +} +object U10-6-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 245, 350 } +} +object R12-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 442, 80 } +} +object R12-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 442, 80 } +} +object R13-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 459, 80 } +} +object R13-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 459, 80 } +} +object U7-5-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 522, 130 } +} +object U7-5-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 522, 130 } +} +object J1-7-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 70, 118 } +} +object J1-7-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 70, 118 } +} +object U6-7-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 340, 130 } +} +object U6-7-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 340, 130 } +} +object J1-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 80, 113 } +} +object J1-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 80, 113 } +} +object U6-13-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 310, 100 } +} +object U6-13-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 310, 100 } +} +object J1-3-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 80, 124 } +} +object J1-3-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 80, 124 } +} +object U6-14-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 300, 100 } +} +object U6-14-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 300, 100 } +} +object D1-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 62, 282 } +} +object D1-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 62, 282 } +} +object R1-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 345, 40 } +} +object R1-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 345, 40 } +} +object R2-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 500, 150 } +} +object R2-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 500, 150 } +} +object U7-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 482, 130 } +} +object U7-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 482, 130 } +} +object C5-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 310, 75 } +} +object C5-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 310, 75 } +} +object R2-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 459, 150 } +} +object R2-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 459, 150 } +} +object R3-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 440, 150 } +} +object R3-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 440, 150 } +} +object S1-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 55, 337 } +} +object S1-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 55, 337 } +} +object D2-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 62, 245 } +} +object D2-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 62, 245 } +} +object R6-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 425, 95 } +} +object R6-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 425, 95 } +} +object D3-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 62, 207 } +} +object D3-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 62, 207 } +} +object R7-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 442, 95 } +} +object R7-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 442, 95 } +} +object R8-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 547, 80 } +} +object R8-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 547, 80 } +} +object U3-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 582, 75 } +} +object U3-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 582, 75 } +} +object U4-6-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 502, 45 } +} +object U4-6-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 502, 45 } +} +object R10-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 532, 80 } +} +object R10-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 532, 80 } +} +object U3-4-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 612, 75 } +} +object U3-4-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 612, 75 } +} +object R9-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 562, 40 } +} +object R9-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 562, 40 } +} +object U4-3-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 502, 75 } +} +object U4-3-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 502, 75 } +} +object R9-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 562, 80 } +} +object R9-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 562, 80 } +} +object U7-17-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 592, 100 } +} +object U7-17-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 592, 100 } +} +object R10-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 532, 40 } +} +object R10-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 532, 40 } +} +object U5-3-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 392, 75 } +} +object U5-3-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 392, 75 } +} +object R11-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 425, 80 } +} +object R11-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 425, 80 } +} +object U5-6-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 392, 45 } +} +object U5-6-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 392, 45 } +} +object U7-18-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 582, 100 } +} +object U7-18-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 582, 100 } +} +object C10-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 315, 55 } +} +object C10-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 315, 55 } +} +object U6-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 290, 130 } +} +object U6-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 290, 130 } +} +object C11-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 287, 150 } +} +object C11-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 287, 150 } +} +object U6-3-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 300, 130 } +} +object U6-3-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 300, 130 } +} +object C12-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 310, 150 } +} +object C12-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 310, 150 } +} +object U6-4-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 310, 130 } +} +object U6-4-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 310, 130 } +} +object C12-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 320, 150 } +} +object C12-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 320, 150 } +} +object U6-5-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 320, 130 } +} +object U6-5-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 320, 130 } +} +object C13-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 290, 50 } +} +object C13-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 290, 50 } +} +object U6-6-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 330, 130 } +} +object U6-6-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 330, 130 } +} +object U6-9-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 350, 100 } +} +object U6-9-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 350, 100 } +} +object U7-3-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 502, 130 } +} +object U7-3-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 502, 130 } +} +object U6-10-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 340, 100 } +} +object U6-10-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 340, 100 } +} +object U7-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 492, 130 } +} +object U7-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 492, 130 } +} +object U6-11-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 330, 100 } +} +object U6-11-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 330, 100 } +} +object U7-11-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 582, 130 } +} +object U7-11-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 582, 130 } +} +object U6-12-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 320, 100 } +} +object U6-12-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 320, 100 } +} +object U7-12-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 592, 130 } +} +object U7-12-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 592, 130 } +} +object C11-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 277, 150 } +} +object C11-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 277, 150 } +} +object U6-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 280, 130 } +} +object U6-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 280, 130 } +} +object Q1-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 477, 360 } +} +object Q1-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 477, 360 } +} +object U8-6-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 245, 45 } +} +object U8-6-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 245, 45 } +} +object U8-7-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 235, 45 } +} +object U8-7-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 235, 45 } +} +object D7-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 217, 215 } +} +object D7-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 217, 215 } +} +object Q2-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 350, 210 } +} +object Q2-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 350, 210 } +} +object R16-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 217, 195 } +} +object R16-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 217, 195 } +} +object D8-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 272, 215 } +} +object D8-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 272, 215 } +} +object Q3-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 477, 210 } +} +object Q3-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 477, 210 } +} +object R17-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 272, 195 } +} +object R17-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 272, 195 } +} +object D9-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 217, 254 } +} +object D9-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 217, 254 } +} +object Q4-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 350, 285 } +} +object Q4-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 350, 285 } +} +object R18-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 217, 235 } +} +object R18-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 217, 235 } +} +object D10-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 272, 254 } +} +object D10-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 272, 254 } +} +object Q5-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 477, 285 } +} +object Q5-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 477, 285 } +} +object R19-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 272, 235 } +} +object R19-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 272, 235 } +} +object C21-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 242, 175 } +} +object C21-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 242, 175 } +} +object D5-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 217, 175 } +} +object D5-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 217, 175 } +} +object U9-13-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 204, 100 } +} +object U9-13-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 204, 100 } +} +object C25-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 242, 300 } +} +object C25-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 242, 300 } +} +object D6-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 217, 300 } +} +object D6-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 217, 300 } +} +object U10-13-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 204, 320 } +} +object U10-13-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 204, 320 } +} +object R15-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 177, 275 } +} +object R15-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 177, 275 } +} +object U10-4-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 225, 350 } +} +object U10-4-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 225, 350 } +} +object R14-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 177, 150 } +} +object R14-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 177, 150 } +} +object U9-4-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 225, 130 } +} +object U9-4-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 225, 130 } +} +object D8-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 232, 215 } +} +object D8-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 232, 215 } +} +object R17-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 232, 195 } +} +object R17-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 232, 195 } +} +object U9-7-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 254, 130 } +} +object U9-7-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 254, 130 } +} +object D7-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 177, 215 } +} +object D7-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 177, 215 } +} +object R16-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 177, 195 } +} +object R16-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 177, 195 } +} +object U9-12-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 215, 100 } +} +object U9-12-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 215, 100 } +} +object D10-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 232, 254 } +} +object D10-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 232, 254 } +} +object R19-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 232, 235 } +} +object R19-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 232, 235 } +} +object U10-7-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 254, 350 } +} +object U10-7-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 254, 350 } +} +object D9-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 177, 254 } +} +object D9-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 177, 254 } +} +object R18-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 177, 235 } +} +object R18-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 177, 235 } +} +object U10-12-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 215, 320 } +} +object U10-12-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 215, 320 } +} +object C14-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 487, 30 } +} +object C14-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 487, 30 } +} +object C15-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 587, 30 } +} +object C15-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 587, 30 } +} +object J2-A2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 652, 57 } +} +object J2-A2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 652, 57 } +} +object J2-C1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 632, 47 } +} +object J2-C1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 632, 47 } +} +object R8-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 547, 40 } +} +object R8-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 547, 40 } +} +object U3-3-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 602, 75 } +} +object U3-3-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 602, 75 } +} +object U4-7-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 492, 45 } +} +object U4-7-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 492, 45 } +} +object U4-8-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 482, 45 } +} +object U4-8-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 482, 45 } +} +object U5-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 382, 75 } +} +object U5-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 382, 75 } +} +object C18-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 552, 202 } +} +object C18-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 552, 202 } +} +object C22-1-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 552, 300 } +} +object C22-1-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 552, 300 } +} +object D4-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 342, 150 } +} +object D4-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 342, 150 } +} +object J2-A24-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 652, 277 } +} +object J2-A24-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 652, 277 } +} +object J2-A32-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 652, 357 } +} +object J2-A32-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 652, 357 } +} +object J2-B24-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 642, 277 } +} +object J2-B24-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 642, 277 } +} +object J2-B32-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 642, 357 } +} +object J2-B32-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 642, 357 } +} +object J2-C7-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 632, 107 } +} +object J2-C7-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 632, 107 } +} +object J2-C24-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 632, 277 } +} +object J2-C24-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 632, 277 } +} +object J2-C32-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 632, 357 } +} +object J2-C32-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 632, 357 } +} +object Q2-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 340, 210 } +} +object Q2-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 340, 210 } +} +object Q4-2-bottom { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.bottom.png" + file-pos = { 340, 285 } +} +object Q4-2-top { + position = { 0, 0 } + material = "copper" + type = "image" + role = "net" + file = "aic.nelma.top.png" + file-pos = { 340, 285 } +} + +/* **** Layers **** */ + +layer air-top { + height = 40 + z-order = 1 + material = "air" +} +layer air-bottom { + height = 40 + z-order = 1000 + material = "air" +} +layer bottom { + height = 1 + z-order = 10 + material = "air" + objects = { + "C3-1-bottom", + "C4-2-bottom", + "C7-1-bottom", + "C8-2-bottom", + "C9-2-bottom", + "C10-1-bottom", + "J2-A6-bottom", + "J2-A28-bottom", + "J2-B28-bottom", + "J2-C5-bottom", + "J2-C28-bottom", + "R1-2-bottom", + "R3-2-bottom", + "R4-2-bottom", + "R5-2-bottom", + "R11-2-bottom", + "U1-3-bottom", + "U2-8-bottom", + "U4-2-bottom", + "U5-7-bottom", + "U5-8-bottom", + "U6-16-bottom", + "U7-13-bottom", + "U7-20-bottom", + "U7-28-bottom", + "C1-1-bottom", + "C2-2-bottom", + "C16-1-bottom", + "C17-2-bottom", + "C19-1-bottom", + "C20-2-bottom", + "C23-1-bottom", + "C24-2-bottom", + "D5-1-bottom", + "D6-1-bottom", + "J2-A29-bottom", + "J2-B29-bottom", + "J2-C29-bottom", + "U1-1-bottom", + "U8-1-bottom", + "U8-8-bottom", + "U9-1-bottom", + "U10-1-bottom", + "D4-1-bottom", + "J2-A23-bottom", + "J2-B23-bottom", + "J2-C23-bottom", + "Q1-2-bottom", + "U7-22-bottom", + "U9-3-bottom", + "U10-3-bottom", + "U7-4-bottom", + "U8-2-bottom", + "J2-C2-bottom", + "U3-7-bottom", + "J2-A1-bottom", + "U3-6-bottom", + "J2-A5-bottom", + "R5-1-bottom", + "U7-6-bottom", + "J2-C6-bottom", + "R4-1-bottom", + "U7-7-bottom", + "U2-5-bottom", + "U7-9-bottom", + "J1-8-bottom", + "U6-8-bottom", + "C26-2-bottom", + "R6-2-bottom", + "U7-26-bottom", + "U9-2-bottom", + "C27-2-bottom", + "R7-2-bottom", + "U7-25-bottom", + "U10-2-bottom", + "C14-1-bottom", + "C15-1-bottom", + "J2-B1-bottom", + "J2-B2-bottom", + "U3-2-bottom", + "U3-8-bottom", + "U4-5-bottom", + "J2-B7-bottom", + "R12-2-bottom", + "C21-2-bottom", + "J2-A25-bottom", + "J2-B25-bottom", + "J2-C25-bottom", + "Q2-3-bottom", + "Q3-2-bottom", + "U9-11-bottom", + "C25-2-bottom", + "J2-A26-bottom", + "J2-B26-bottom", + "J2-C26-bottom", + "Q4-3-bottom", + "Q5-2-bottom", + "U10-11-bottom", + "C1-2-bottom", + "C2-1-bottom", + "C3-2-bottom", + "C4-1-bottom", + "C5-2-bottom", + "C6-1-bottom", + "C6-2-bottom", + "C7-2-bottom", + "C8-1-bottom", + "C9-1-bottom", + "C13-2-bottom", + "C16-2-bottom", + "C17-1-bottom", + "C18-2-bottom", + "C19-2-bottom", + "C20-1-bottom", + "C22-2-bottom", + "C23-2-bottom", + "C24-1-bottom", + "C26-1-bottom", + "C27-1-bottom", + "D1-1-bottom", + "D2-1-bottom", + "D3-1-bottom", + "J1-5-bottom", + "J2-A7-bottom", + "J2-A22-bottom", + "J2-A27-bottom", + "J2-A30-bottom", + "J2-A31-bottom", + "J2-B5-bottom", + "J2-B6-bottom", + "J2-B22-bottom", + "J2-B27-bottom", + "J2-B30-bottom", + "J2-B31-bottom", + "J2-C22-bottom", + "J2-C27-bottom", + "J2-C30-bottom", + "J2-C31-bottom", + "Q1-3-bottom", + "Q3-3-bottom", + "Q5-3-bottom", + "R13-1-bottom", + "R14-1-bottom", + "R15-1-bottom", + "S1-1-bottom", + "U1-2-bottom", + "U2-4-bottom", + "U5-5-bottom", + "U6-15-bottom", + "U7-8-bottom", + "U7-19-bottom", + "U7-27-bottom", + "U8-4-bottom", + "U8-5-bottom", + "U9-5-bottom", + "U9-6-bottom", + "U10-5-bottom", + "U10-6-bottom", + "R12-1-bottom", + "R13-2-bottom", + "U7-5-bottom", + "J1-7-bottom", + "U6-7-bottom", + "J1-2-bottom", + "U6-13-bottom", + "J1-3-bottom", + "U6-14-bottom", + "D1-2-bottom", + "R1-1-bottom", + "R2-2-bottom", + "U7-1-bottom", + "C5-1-bottom", + "R2-1-bottom", + "R3-1-bottom", + "S1-2-bottom", + "D2-2-bottom", + "R6-1-bottom", + "D3-2-bottom", + "R7-1-bottom", + "R8-1-bottom", + "U3-1-bottom", + "U4-6-bottom", + "R10-2-bottom", + "U3-4-bottom", + "R9-2-bottom", + "U4-3-bottom", + "R9-1-bottom", + "U7-17-bottom", + "R10-1-bottom", + "U5-3-bottom", + "R11-1-bottom", + "U5-6-bottom", + "U7-18-bottom", + "C10-2-bottom", + "U6-2-bottom", + "C11-1-bottom", + "U6-3-bottom", + "C12-2-bottom", + "U6-4-bottom", + "C12-1-bottom", + "U6-5-bottom", + "C13-1-bottom", + "U6-6-bottom", + "U6-9-bottom", + "U7-3-bottom", + "U6-10-bottom", + "U7-2-bottom", + "U6-11-bottom", + "U7-11-bottom", + "U6-12-bottom", + "U7-12-bottom", + "C11-2-bottom", + "U6-1-bottom", + "Q1-1-bottom", + "U8-6-bottom", + "U8-7-bottom", + "D7-1-bottom", + "Q2-1-bottom", + "R16-2-bottom", + "D8-1-bottom", + "Q3-1-bottom", + "R17-2-bottom", + "D9-1-bottom", + "Q4-1-bottom", + "R18-1-bottom", + "D10-1-bottom", + "Q5-1-bottom", + "R19-1-bottom", + "C21-1-bottom", + "D5-2-bottom", + "U9-13-bottom", + "C25-1-bottom", + "D6-2-bottom", + "U10-13-bottom", + "R15-2-bottom", + "U10-4-bottom", + "R14-2-bottom", + "U9-4-bottom", + "D8-2-bottom", + "R17-1-bottom", + "U9-7-bottom", + "D7-2-bottom", + "R16-1-bottom", + "U9-12-bottom", + "D10-2-bottom", + "R19-2-bottom", + "U10-7-bottom", + "D9-2-bottom", + "R18-2-bottom", + "U10-12-bottom", + "C14-2-bottom", + "C15-2-bottom", + "J2-A2-bottom", + "J2-C1-bottom", + "R8-2-bottom", + "U3-3-bottom", + "U4-7-bottom", + "U4-8-bottom", + "U5-2-bottom", + "C18-1-bottom", + "C22-1-bottom", + "D4-2-bottom", + "J2-A24-bottom", + "J2-A32-bottom", + "J2-B24-bottom", + "J2-B32-bottom", + "J2-C7-bottom", + "J2-C24-bottom", + "J2-C32-bottom", + "Q2-2-bottom", + "Q4-2-bottom" + } +} +layer substrate-11 { + height = 20 + z-order = 11 + material = "composite" +} +layer top { + height = 1 + z-order = 12 + material = "air" + objects = { + "C3-1-top", + "C4-2-top", + "C7-1-top", + "C8-2-top", + "C9-2-top", + "C10-1-top", + "J2-A6-top", + "J2-A28-top", + "J2-B28-top", + "J2-C5-top", + "J2-C28-top", + "R1-2-top", + "R3-2-top", + "R4-2-top", + "R5-2-top", + "R11-2-top", + "U1-3-top", + "U2-8-top", + "U4-2-top", + "U5-7-top", + "U5-8-top", + "U6-16-top", + "U7-13-top", + "U7-20-top", + "U7-28-top", + "C1-1-top", + "C2-2-top", + "C16-1-top", + "C17-2-top", + "C19-1-top", + "C20-2-top", + "C23-1-top", + "C24-2-top", + "D5-1-top", + "D6-1-top", + "J2-A29-top", + "J2-B29-top", + "J2-C29-top", + "U1-1-top", + "U8-1-top", + "U8-8-top", + "U9-1-top", + "U10-1-top", + "D4-1-top", + "J2-A23-top", + "J2-B23-top", + "J2-C23-top", + "Q1-2-top", + "U7-22-top", + "U9-3-top", + "U10-3-top", + "U7-4-top", + "U8-2-top", + "J2-C2-top", + "U3-7-top", + "J2-A1-top", + "U3-6-top", + "J2-A5-top", + "R5-1-top", + "U7-6-top", + "J2-C6-top", + "R4-1-top", + "U7-7-top", + "U2-5-top", + "U7-9-top", + "J1-8-top", + "U6-8-top", + "C26-2-top", + "R6-2-top", + "U7-26-top", + "U9-2-top", + "C27-2-top", + "R7-2-top", + "U7-25-top", + "U10-2-top", + "C14-1-top", + "C15-1-top", + "J2-B1-top", + "J2-B2-top", + "U3-2-top", + "U3-8-top", + "U4-5-top", + "J2-B7-top", + "R12-2-top", + "C21-2-top", + "J2-A25-top", + "J2-B25-top", + "J2-C25-top", + "Q2-3-top", + "Q3-2-top", + "U9-11-top", + "C25-2-top", + "J2-A26-top", + "J2-B26-top", + "J2-C26-top", + "Q4-3-top", + "Q5-2-top", + "U10-11-top", + "C1-2-top", + "C2-1-top", + "C3-2-top", + "C4-1-top", + "C5-2-top", + "C6-1-top", + "C6-2-top", + "C7-2-top", + "C8-1-top", + "C9-1-top", + "C13-2-top", + "C16-2-top", + "C17-1-top", + "C18-2-top", + "C19-2-top", + "C20-1-top", + "C22-2-top", + "C23-2-top", + "C24-1-top", + "C26-1-top", + "C27-1-top", + "D1-1-top", + "D2-1-top", + "D3-1-top", + "J1-5-top", + "J2-A7-top", + "J2-A22-top", + "J2-A27-top", + "J2-A30-top", + "J2-A31-top", + "J2-B5-top", + "J2-B6-top", + "J2-B22-top", + "J2-B27-top", + "J2-B30-top", + "J2-B31-top", + "J2-C22-top", + "J2-C27-top", + "J2-C30-top", + "J2-C31-top", + "Q1-3-top", + "Q3-3-top", + "Q5-3-top", + "R13-1-top", + "R14-1-top", + "R15-1-top", + "S1-1-top", + "U1-2-top", + "U2-4-top", + "U5-5-top", + "U6-15-top", + "U7-8-top", + "U7-19-top", + "U7-27-top", + "U8-4-top", + "U8-5-top", + "U9-5-top", + "U9-6-top", + "U10-5-top", + "U10-6-top", + "R12-1-top", + "R13-2-top", + "U7-5-top", + "J1-7-top", + "U6-7-top", + "J1-2-top", + "U6-13-top", + "J1-3-top", + "U6-14-top", + "D1-2-top", + "R1-1-top", + "R2-2-top", + "U7-1-top", + "C5-1-top", + "R2-1-top", + "R3-1-top", + "S1-2-top", + "D2-2-top", + "R6-1-top", + "D3-2-top", + "R7-1-top", + "R8-1-top", + "U3-1-top", + "U4-6-top", + "R10-2-top", + "U3-4-top", + "R9-2-top", + "U4-3-top", + "R9-1-top", + "U7-17-top", + "R10-1-top", + "U5-3-top", + "R11-1-top", + "U5-6-top", + "U7-18-top", + "C10-2-top", + "U6-2-top", + "C11-1-top", + "U6-3-top", + "C12-2-top", + "U6-4-top", + "C12-1-top", + "U6-5-top", + "C13-1-top", + "U6-6-top", + "U6-9-top", + "U7-3-top", + "U6-10-top", + "U7-2-top", + "U6-11-top", + "U7-11-top", + "U6-12-top", + "U7-12-top", + "C11-2-top", + "U6-1-top", + "Q1-1-top", + "U8-6-top", + "U8-7-top", + "D7-1-top", + "Q2-1-top", + "R16-2-top", + "D8-1-top", + "Q3-1-top", + "R17-2-top", + "D9-1-top", + "Q4-1-top", + "R18-1-top", + "D10-1-top", + "Q5-1-top", + "R19-1-top", + "C21-1-top", + "D5-2-top", + "U9-13-top", + "C25-1-top", + "D6-2-top", + "U10-13-top", + "R15-2-top", + "U10-4-top", + "R14-2-top", + "U9-4-top", + "D8-2-top", + "R17-1-top", + "U9-7-top", + "D7-2-top", + "R16-1-top", + "U9-12-top", + "D10-2-top", + "R19-2-top", + "U10-7-top", + "D9-2-top", + "R18-2-top", + "U10-12-top", + "C14-2-top", + "C15-2-top", + "J2-A2-top", + "J2-C1-top", + "R8-2-top", + "U3-3-top", + "U4-7-top", + "U4-8-top", + "U5-2-top", + "C18-1-top", + "C22-1-top", + "D4-2-top", + "J2-A24-top", + "J2-A32-top", + "J2-B24-top", + "J2-B32-top", + "J2-C7-top", + "J2-C24-top", + "J2-C32-top", + "Q2-2-top", + "Q4-2-top" + } +} + +/* **** Materials **** */ + +material copper { + type = "metal" + permittivity = 8.850000e-12 + conductivity = 0.0 + permeability = 0.0 +} +material air { + type = "dielectric" + permittivity = 8.850000e-12 + conductivity = 0.0 + permeability = 0.0 +} +material composite { + type = "dielectric" + permittivity = 3.540000e-11 + conductivity = 0.0 + permeability = 0.0 +} + +/* **** Space **** */ + +space pcb { + step = { 2.540000e-04, 2.540000e-04, 1.000000e-04 } + layers = { + "air-top", + "air-bottom", + "bottom", + "substrate-11", + "top" + } +} diff --git a/doc/aic.nelma.top.png b/doc/aic.nelma.top.png new file mode 100644 index 0000000..f291bf2 Binary files /dev/null and b/doc/aic.nelma.top.png differ diff --git a/doc/aic.plated-drill.cnc b/doc/aic.plated-drill.cnc index 31052fe..d4b9ae6 100644 --- a/doc/aic.plated-drill.cnc +++ b/doc/aic.plated-drill.cnc @@ -1,516 +1,516 @@ M48 -INCH -T14C0.120 -T18C0.030 -T20C0.055 -T21C0.020 -T25C0.060 -T26C0.080 -T29C0.028 -T30C0.035 -T31C0.042 -T32C0.043 -T33C0.052 +METRIC,000.000 +T69C0.508 +T68C1.397 +T67C1.524 +T66C3.048 +T65C1.321 +T64C1.092 +T63C1.067 +T62C0.762 +T61C2.032 +T60C0.889 +T59C0.711 % -T21 -X036500Y009250 -X031500Y013000 -X036000Y018250 -X035250Y029250 -X035000Y028750 -X031500Y027500 -X032500Y025000 -X010250Y028000 -X010250Y029750 -X008750Y027500 -X009250Y027000 -X016000Y022250 -X021000Y037000 -X030500Y027000 -X028500Y030250 -X015500Y004250 -X020500Y005250 -X021500Y004750 -X022500Y004250 -X015500Y013500 -X016500Y005250 -X016000Y004750 -X028250Y016500 -X024750Y039250 -X020000Y026000 -X020000Y028750 -X022500Y022250 -X022500Y024000 -X031500Y026750 -X029500Y027500 -X039750Y026750 -X036750Y031750 -X036000Y026000 -X036500Y025500 -X041750Y040000 -X035250Y024000 -X034500Y026750 -X033250Y023500 -X031000Y031750 -X037750Y029750 -X033500Y037250 -X050750Y027000 -X049250Y023500 -X048250Y026000 -X050750Y029500 -X059250Y029500 -X048000Y030000 -X044250Y029500 -X053250Y035250 -X037750Y032750 -X037250Y026000 -X054750Y035750 -X056250Y034750 -X052750Y032500 -X053250Y032250 -X056500Y025000 -X054500Y026500 -X055750Y023750 -X061250Y032250 -X044250Y034500 -X047750Y038750 -X044250Y039250 -X043500Y036500 -X042750Y039250 -X040250Y039250 -X041750Y037000 -X042500Y029500 -X047750Y029500 -X047750Y030500 -X046000Y034000 -T29 -X022500Y033500 -X023500Y033500 -X037250Y033500 -X038250Y033500 -X039250Y033500 -X040250Y033500 -X025500Y036500 -X024500Y036500 -X023500Y036500 -X022500Y036500 -X019750Y038000 -X017750Y038000 -X019750Y035750 -X017750Y035750 -X034000Y028000 -X035000Y028000 -X035000Y031000 -X034000Y031000 -X037250Y028000 -X038250Y028000 -X039250Y028000 -X040250Y028000 -X040250Y031000 -X039250Y031000 -X038250Y031000 -X037250Y031000 -X039750Y038000 -X037750Y038000 -X040250Y036500 -X039250Y036500 -X038250Y036500 -X037250Y036500 -X050750Y038000 -X048750Y038000 -X051250Y036500 -X050250Y036500 -X049250Y036500 -X048250Y036500 -X046000Y028500 -X046000Y030500 -X048250Y028000 -X049250Y028000 -X050250Y028000 -X051250Y028000 -X052250Y028000 -X053250Y028000 -X054250Y028000 -X055250Y028000 -X056250Y028000 -X057250Y028000 -X058250Y028000 -X058250Y031000 -X057250Y031000 -X056250Y031000 -X055250Y031000 -X054250Y031000 -X053250Y031000 -X052250Y031000 -X051250Y031000 -X050250Y031000 -X049250Y031000 -X048250Y031000 -X051250Y033500 -X048250Y033500 -X049250Y033500 -X050250Y033500 -X059250Y028000 -X059250Y031000 -X060250Y028000 -X061250Y028000 -X061250Y031000 -X060250Y031000 -X060750Y038000 -X058750Y038000 -X061250Y036500 -X060250Y036500 -X059250Y036500 -X058250Y036500 -X058250Y033500 -X059250Y033500 -X060250Y033500 -X061250Y033500 -X019500Y006000 -X020500Y006000 -X021500Y006000 -X022500Y006000 -X023500Y006000 -X024500Y006000 -X025500Y006000 -X025500Y009000 -X024500Y009000 -X024500Y033500 -X025500Y033500 -X033000Y028000 -X033000Y031000 -X032000Y031000 -X031000Y031000 -X030000Y031000 -X029000Y031000 -X025000Y038000 -X023000Y038000 -X017750Y030500 -X017750Y028500 -X019500Y028000 -X020500Y028000 -X021500Y028000 -X022500Y028000 -X023500Y028000 -X021500Y031000 -X020500Y031000 -X019500Y031000 -X028000Y028000 -X029000Y028000 -X030000Y028000 -X031000Y028000 -X032000Y028000 -X024500Y028000 -X025500Y028000 -X028000Y031000 -X025500Y031000 -X024500Y031000 -X023500Y031000 -X023500Y009000 -X022500Y031000 -X022500Y009000 -X021500Y009000 -X020500Y009000 -X019500Y009000 -X017750Y008500 -X017750Y006500 -X059250Y003000 -X059250Y005000 -X055250Y005000 -X055250Y003000 -X057500Y003000 -X057500Y005000 -T18 -X065250Y036250 -X064250Y036250 -X065250Y035250 -X065250Y034250 -X064250Y035250 -X064250Y034250 -X063250Y036250 -X063250Y035250 -X063250Y034250 -X065250Y031250 -X065250Y030250 -X065250Y029250 -X064250Y029250 -X063250Y029250 -X065250Y028250 -X064250Y028250 -X063250Y028250 -X064250Y031250 -X064250Y030250 -X063250Y031250 -X063250Y030250 -X065250Y033250 -X065250Y032250 -X064250Y033250 -X064250Y032250 -X063250Y033250 -X063250Y032250 -X021750Y026000 -X021750Y017500 -X017750Y026000 -X017750Y017500 -X023250Y017500 -X023250Y021500 -X027250Y017500 -X027250Y021500 -X017750Y021500 -X021750Y021500 -X021750Y013500 -X017750Y013500 -X063250Y026250 -X063250Y025250 -X065250Y027250 -X064250Y027250 -X063250Y027250 -X065250Y026250 -X064250Y026250 -X064250Y025250 -X064250Y024250 -X065250Y025250 -X065250Y024250 -X063250Y024250 -X063250Y023250 -X063250Y022250 -X063250Y021250 -X063250Y020250 -X065250Y006250 -X065250Y005250 -X064250Y006250 -X064250Y005250 -X063250Y006250 -X063250Y005250 -X065250Y023250 -X065250Y022250 -X065250Y021250 -X064250Y023250 -X064250Y022250 -X064250Y021250 -X065250Y020250 -X065250Y019250 -X065250Y018250 -X064250Y020250 -X064250Y019250 -X063250Y019250 -X065250Y016250 -X065250Y015250 -X065250Y014250 -X065250Y013250 -X065250Y012250 -X065250Y011250 -X065250Y010250 -X065250Y009250 -X065250Y008250 -X065250Y007250 -X065250Y017250 -X064250Y017250 -X064250Y018250 -X064250Y016250 -X064250Y015250 -X064250Y014250 -X064250Y013250 -X064250Y012250 -X064250Y011250 -X064250Y010250 -X064250Y009250 -X064250Y008250 -X064250Y007250 -X063250Y018250 -X063250Y017250 -X063250Y016250 -X063250Y015250 -X063250Y014250 -X063250Y013250 -X063250Y012250 -X063250Y011250 -X063250Y010250 -X063250Y009250 -X063250Y008250 -X063250Y007250 -T30 -X029000Y036000 -X028000Y036000 -X019250Y033500 -X020250Y033500 -X034500Y037000 -X034500Y033000 -X031500Y036500 -X031500Y035500 -X046000Y037000 -X042500Y037000 -X044250Y037000 -X053250Y037000 -X042500Y031500 -X046000Y033000 -X042500Y033000 -X044250Y031500 -X054750Y033000 -X053250Y033000 -X044250Y033000 -X054750Y037000 -X056250Y037000 -X056250Y033000 -X008000Y030750 -X007000Y030210 -X008000Y029660 -X007000Y029120 -X008000Y028570 -X007000Y028030 -X008000Y027480 -X008000Y026390 -X007000Y026940 -X021750Y023500 -X021750Y015500 -X017750Y023500 -X017750Y015500 -X024250Y026000 -X024250Y023500 -X025250Y023500 -X025250Y026000 -X032000Y026000 -X031000Y026000 -X023250Y019500 -X023250Y015500 -X027250Y019500 -X027250Y015500 -X028000Y033500 -X029000Y033500 -X031000Y033500 -X032000Y033500 -X028750Y026000 -X027750Y026000 -X024250Y013500 -X017750Y019500 -X021750Y019500 -X021750Y011000 -X024250Y011000 -X025250Y011000 -X025250Y013500 -X017750Y011000 -X042500Y027500 -X044250Y027500 -X061500Y026000 -X057500Y026000 -X055750Y026000 -X051750Y026000 -X050000Y026000 -X034250Y026000 -X038250Y026000 -X044000Y026000 -X040000Y026000 -X046000Y026000 -X061500Y004000 -X061500Y003000 -X061500Y006000 -X061500Y007000 -X036000Y026750 -X049750Y004000 -X049750Y014250 -X054500Y006250 -X037250Y004000 -X040000Y008500 -X038500Y007000 -X039250Y007750 -X060500Y006000 -X055250Y007000 -X043250Y006000 -X015250Y034750 -X016000Y033500 -X018750Y030250 -X016000Y028500 -X015250Y022750 -X017750Y024500 -X016000Y024500 -X018750Y023500 -X026250Y030250 -X026250Y020750 -X029500Y035000 -X027000Y026000 -X024000Y008000 -X022500Y009750 -X025250Y012500 -X025250Y009750 -X019500Y003000 -X019000Y009750 -X017750Y012500 -X021750Y018750 -X022500Y011750 -X024250Y012500 -X019000Y013500 -X020750Y015500 -X028000Y032250 -X027000Y038000 -X024250Y024500 -X026250Y023500 -X027000Y028750 -X038750Y026750 -X036000Y038000 -X030250Y032250 -X032750Y038000 -X052000Y034000 -X038500Y024500 -X051750Y024500 -X060250Y025250 -X061500Y030250 -X041000Y034000 -X047250Y024500 -X040000Y024500 -X043250Y022750 -X047250Y032250 -T31 -X047750Y005000 -X046750Y005000 -X045750Y005000 -X035000Y005000 -X034000Y005000 -X033000Y005000 -X047750Y012500 -X046750Y012500 -X045750Y012500 -X035000Y012500 -X034000Y012500 -X033000Y012500 -X035000Y020000 -X034000Y020000 -X033000Y020000 -X005500Y009000 -X005500Y007230 -X047750Y020000 -X046750Y020000 -X045750Y020000 -T32 -X006250Y011750 -X006250Y012750 -X006250Y015500 -X006250Y016500 -X006250Y019250 -X006250Y020250 -T33 -X006480Y006730 -X006480Y009490 -T20 -X034000Y017250 -X055250Y017250 -X061500Y012250 -X061500Y018750 -X059250Y015750 -X053250Y001750 -X053250Y015750 -T25 -X055250Y011000 -X059250Y011000 -X055250Y020750 -X059250Y020750 -T26 -X066250Y038250 -X066250Y038250 -X005750Y003380 -X005750Y038250 -X066250Y003380 -X066250Y003250 -T14 -X007500Y033450 -X007500Y023690 +T69 +X022225Y069850 +X023495Y068580 +X026035Y075565 +X026035Y071120 +X039370Y034290 +X039370Y010795 +X040640Y056515 +X040640Y012065 +X041910Y013335 +X050800Y073025 +X050800Y066040 +X052070Y013335 +X053340Y093980 +X054610Y012065 +X057150Y060960 +X057150Y056515 +X057150Y010795 +X062865Y099695 +X071755Y041910 +X072390Y076835 +X074930Y069850 +X077470Y068580 +X078740Y080645 +X080010Y069850 +X080010Y067945 +X080010Y033020 +X082550Y063500 +X084455Y059690 +X085090Y094615 +X087630Y067945 +X088900Y073025 +X089535Y074295 +X089535Y060960 +X091440Y066040 +X091440Y046355 +X092710Y064770 +X092710Y023495 +X093345Y080645 +X094615Y066040 +X095885Y083185 +X095885Y075565 +X100965Y067945 +X102235Y099695 +X106045Y101600 +X106045Y093980 +X107950Y074930 +X108585Y099695 +X110490Y092710 +X112395Y099695 +X112395Y087630 +X112395Y074930 +X116840Y086360 +X121285Y098425 +X121285Y077470 +X121285Y074930 +X121920Y076200 +X122555Y066040 +X125095Y059690 +X128905Y074930 +X128905Y068580 +X133985Y082550 +X135255Y089535 +X135255Y081915 +X138430Y067310 +X139065Y090805 +X141605Y060325 +X142875Y088265 +X143510Y063500 +X150495Y074930 +X155575Y081915 +T59 +X045085Y096520 +X045085Y090805 +X045085Y077470 +X045085Y072390 +X045085Y021590 +X045085Y016510 +X049530Y078740 +X049530Y071120 +X049530Y022860 +X049530Y015240 +X050165Y096520 +X050165Y090805 +X052070Y078740 +X052070Y071120 +X052070Y022860 +X052070Y015240 +X054610Y078740 +X054610Y071120 +X054610Y022860 +X054610Y015240 +X057150Y092710 +X057150Y085090 +X057150Y078740 +X057150Y071120 +X057150Y022860 +X057150Y015240 +X058420Y096520 +X059690Y092710 +X059690Y085090 +X059690Y078740 +X059690Y071120 +X059690Y022860 +X059690Y015240 +X062230Y092710 +X062230Y085090 +X062230Y078740 +X062230Y071120 +X062230Y022860 +X062230Y015240 +X063500Y096520 +X064770Y092710 +X064770Y085090 +X064770Y078740 +X064770Y071120 +X064770Y022860 +X064770Y015240 +X071120Y078740 +X071120Y071120 +X073660Y078740 +X073660Y071120 +X076200Y078740 +X076200Y071120 +X078740Y078740 +X078740Y071120 +X081280Y078740 +X081280Y071120 +X083820Y078740 +X083820Y071120 +X086360Y078740 +X086360Y071120 +X088900Y078740 +X088900Y071120 +X094615Y092710 +X094615Y085090 +X094615Y078740 +X094615Y071120 +X095885Y096520 +X097155Y092710 +X097155Y085090 +X097155Y078740 +X097155Y071120 +X099695Y092710 +X099695Y085090 +X099695Y078740 +X099695Y071120 +X100965Y096520 +X102235Y092710 +X102235Y085090 +X102235Y078740 +X102235Y071120 +X116840Y077470 +X116840Y072390 +X122555Y092710 +X122555Y085090 +X122555Y078740 +X122555Y071120 +X123825Y096520 +X125095Y092710 +X125095Y085090 +X125095Y078740 +X125095Y071120 +X127635Y092710 +X127635Y085090 +X127635Y078740 +X127635Y071120 +X128905Y096520 +X130175Y092710 +X130175Y085090 +X130175Y078740 +X130175Y071120 +X132715Y078740 +X132715Y071120 +X135255Y078740 +X135255Y071120 +X137795Y078740 +X137795Y071120 +X140335Y078740 +X140335Y071120 +X140335Y012700 +X140335Y007620 +X142875Y078740 +X142875Y071120 +X145415Y078740 +X145415Y071120 +X146050Y012700 +X146050Y007620 +X147955Y092710 +X147955Y085090 +X147955Y078740 +X147955Y071120 +X149225Y096520 +X150495Y092710 +X150495Y085090 +X150495Y078740 +X150495Y071120 +X150495Y012700 +X150495Y007620 +X153035Y092710 +X153035Y085090 +X153035Y078740 +X153035Y071120 +X154305Y096520 +X155575Y092710 +X155575Y085090 +X155575Y078740 +X155575Y071120 +T62 +X045085Y066040 +X045085Y054610 +X045085Y044450 +X045085Y034290 +X055245Y066040 +X055245Y054610 +X055245Y044450 +X055245Y034290 +X059055Y054610 +X059055Y044450 +X069215Y054610 +X069215Y044450 +X160655Y092075 +X160655Y089535 +X160655Y086995 +X160655Y084455 +X160655Y081915 +X160655Y079375 +X160655Y076835 +X160655Y074295 +X160655Y071755 +X160655Y069215 +X160655Y066675 +X160655Y064135 +X160655Y061595 +X160655Y059055 +X160655Y056515 +X160655Y053975 +X160655Y051435 +X160655Y048895 +X160655Y046355 +X160655Y043815 +X160655Y041275 +X160655Y038735 +X160655Y036195 +X160655Y033655 +X160655Y031115 +X160655Y028575 +X160655Y026035 +X160655Y023495 +X160655Y020955 +X160655Y018415 +X160655Y015875 +X160655Y013335 +X163195Y092075 +X163195Y089535 +X163195Y086995 +X163195Y084455 +X163195Y081915 +X163195Y079375 +X163195Y076835 +X163195Y074295 +X163195Y071755 +X163195Y069215 +X163195Y066675 +X163195Y064135 +X163195Y061595 +X163195Y059055 +X163195Y056515 +X163195Y053975 +X163195Y051435 +X163195Y048895 +X163195Y046355 +X163195Y043815 +X163195Y041275 +X163195Y038735 +X163195Y036195 +X163195Y033655 +X163195Y031115 +X163195Y028575 +X163195Y026035 +X163195Y023495 +X163195Y020955 +X163195Y018415 +X163195Y015875 +X163195Y013335 +X165735Y092075 +X165735Y089535 +X165735Y086995 +X165735Y084455 +X165735Y081915 +X165735Y079375 +X165735Y076835 +X165735Y074295 +X165735Y071755 +X165735Y069215 +X165735Y066675 +X165735Y064135 +X165735Y061595 +X165735Y059055 +X165735Y056515 +X165735Y053975 +X165735Y051435 +X165735Y048895 +X165735Y046355 +X165735Y043815 +X165735Y041275 +X165735Y038735 +X165735Y036195 +X165735Y033655 +X165735Y031115 +X165735Y028575 +X165735Y026035 +X165735Y023495 +X165735Y020955 +X165735Y018415 +X165735Y015875 +X165735Y013335 +T60 +X017780Y076733 +X017780Y073965 +X017780Y071196 +X017780Y068428 +X020320Y078105 +X020320Y075336 +X020320Y072568 +X020320Y069799 +X020320Y067031 +X038735Y088265 +X038735Y057785 +X040640Y085090 +X040640Y072390 +X040640Y062230 +X045085Y062230 +X045085Y059690 +X045085Y049530 +X045085Y039370 +X045085Y031750 +X045085Y027940 +X047625Y076835 +X047625Y059690 +X048260Y034290 +X048260Y024765 +X048895Y085090 +X049530Y007620 +X051435Y085090 +X052705Y039370 +X055245Y059690 +X055245Y049530 +X055245Y047625 +X055245Y039370 +X055245Y027940 +X057150Y029845 +X057150Y024765 +X059055Y049530 +X059055Y039370 +X060960Y020320 +X061595Y066040 +X061595Y062230 +X061595Y059690 +X061595Y034290 +X061595Y031750 +X061595Y027940 +X064135Y066040 +X064135Y059690 +X064135Y034290 +X064135Y031750 +X064135Y027940 +X064135Y024765 +X066675Y076835 +X066675Y059690 +X066675Y052705 +X068580Y096520 +X068580Y073025 +X068580Y066040 +X069215Y049530 +X069215Y039370 +X070485Y066040 +X071120Y091440 +X071120Y085090 +X071120Y081915 +X073025Y066040 +X073660Y091440 +X073660Y085090 +X074930Y088900 +X076835Y081915 +X078740Y085090 +X078740Y066040 +X080010Y092710 +X080010Y090170 +X081280Y085090 +X081280Y066040 +X083185Y096520 +X086995Y066040 +X087630Y093980 +X087630Y083820 +X091440Y096520 +X091440Y067945 +X094615Y010160 +X097155Y066040 +X097790Y062230 +X097790Y017780 +X098425Y067945 +X099695Y019685 +X101600Y066040 +X101600Y062230 +X101600Y021590 +X104140Y086360 +X107950Y093980 +X107950Y083820 +X107950Y080010 +X107950Y069850 +X109855Y057785 +X109855Y015240 +X111760Y066040 +X112395Y093980 +X112395Y083820 +X112395Y080010 +X112395Y069850 +X116840Y093980 +X116840Y083820 +X116840Y066040 +X120015Y081915 +X120015Y062230 +X126365Y036195 +X126365Y010160 +X127000Y066040 +X131445Y066040 +X131445Y062230 +X132080Y086360 +X135255Y093980 +X135255Y083820 +X138430Y015875 +X139065Y093980 +X139065Y083820 +X140335Y017780 +X141605Y066040 +X142875Y093980 +X142875Y083820 +X146050Y066040 +X153035Y064135 +X153670Y015240 +X156210Y076835 +X156210Y066040 +X156210Y017780 +X156210Y015240 +X156210Y010160 +X156210Y007620 +T63 +X013970Y022860 +X013970Y018364 +X083820Y050800 +X083820Y031750 +X083820Y012700 +X086360Y050800 +X086360Y031750 +X086360Y012700 +X088900Y050800 +X088900Y031750 +X088900Y012700 +X116205Y050800 +X116205Y031750 +X116205Y012700 +X118745Y050800 +X118745Y031750 +X118745Y012700 +X121285Y050800 +X121285Y031750 +X121285Y012700 +T64 +X015875Y051435 +X015875Y048895 +X015875Y041910 +X015875Y039370 +X015875Y032385 +X015875Y029845 +T65 +X016459Y024105 +X016459Y017094 +T68 +X086360Y043815 +X135255Y040005 +X135255Y004445 +X140335Y043815 +X150495Y040005 +X156210Y047625 +X156210Y031115 +T67 +X140335Y052705 +X140335Y027940 +X150495Y052705 +X150495Y027940 +T61 +X014605Y097155 +X014605Y008585 +X168275Y097155 +X168275Y097155 +X168275Y008585 +X168275Y008255 +T66 +X019050Y084963 +X019050Y060173 M30 diff --git a/doc/aic.top.gbr b/doc/aic.top.gbr new file mode 100644 index 0000000..f99bb1d --- /dev/null +++ b/doc/aic.top.gbr @@ -0,0 +1,1638 @@ +G04 start of page 3 for group 1 idx 3 * +G04 Title: (unknown), component * +G04 Creator: pcb 20140316 * +G04 CreationDate: Wed 15 Jul 2015 07:10:19 PM GMT UTC * +G04 For: fetter * +G04 Format: Gerber/RS-274X * +G04 PCB-Dimensions (mm): 180.34 104.14 * +G04 PCB-Coordinate-Origin: lower left * +%MOMM*% +%FSLAX43Y43*% +%LNTOP*% +%ADD58C,1.321*% +%ADD57C,1.092*% +%ADD56C,1.067*% +%ADD55C,0.762*% +%ADD54C,0.711*% +%ADD53C,2.921*% +%ADD52C,2.667*% +%ADD51C,2.286*% +%ADD50C,2.159*% +%ADD49C,1.016*% +%ADD48C,1.397*% +%ADD47C,3.556*% +%ADD46C,2.032*% +%ADD45C,0.002*% +%ADD44C,2.540*% +%ADD43C,1.524*% +%ADD42C,1.778*% +%ADD41C,3.048*% +%ADD40C,0.508*% +%ADD39C,0.889*% +%ADD38C,1.651*% +%ADD37C,0.254*% +%ADD36C,0.635*% +%ADD35C,0.203*% +G54D35*X0Y104140D02*X180340D01* +X0D02*Y0D01* +X180340Y104140D02*Y0D01* +X0D02*X180340D01* +G54D36*X45085Y54610D02*Y49530D01* +G54D37*X40640Y56515D02*Y12065D01* +G54D36*X45085Y39370D02*Y44450D01* +X43180Y56515D02*X45085Y54610D01* +Y24765D02*Y31750D01* +Y16510D02*Y18415D01* +X57150Y37465D02*Y29845D01* +X55245Y54610D02*Y47625D01* +X59055Y49530D02*Y66040D01* +X55245Y44450D02*Y39370D01* +X57150Y37465D01* +X52705Y24765D02*Y39370D01* +G54D38*X48260Y34290D02*Y24765D01* +G54D36*X45085Y62230D02*Y59690D01* +G54D37*X26035Y75565D02*Y71120D01* +X20320Y72390D02*X22225Y70485D01* +X20549Y75336D02*X23495Y72390D01* +X20320Y72568D02*Y72390D01* +X23495Y68580D02*Y72390D01* +X22225Y69850D02*Y70485D01* +G54D38*X13970Y60960D02*X20320Y67031D01* +X13970Y22860D02*Y60960D01* +X15875Y29845D02*X13970D01* +X15875Y39370D02*X13970D01* +X15875Y48895D02*X13970D01* +G54D37*X39370Y34290D02*Y10795D01* +G54D36*X57150Y22860D02*Y24765D01* +X54610Y22860D02*X52705Y24765D01* +G54D37*X54610Y12065D02*Y15240D01* +G54D38*X62230Y17145D02*X66675Y21590D01* +X62230Y17145D02*Y15240D01* +G54D36*X60960Y24130D02*Y20320D01* +G54D37*X52070Y13335D02*Y14605D01* +G54D36*X46990Y22860D02*X45085Y24765D01* +G54D37*X52070Y14605D02*Y15240D01* +G54D36*X45085Y18415D02*X46990Y20320D01* +Y22860D01* +X59055Y44450D02*Y26035D01* +G54D38*X64135Y34290D02*X64770D01* +X66675Y32385D01* +G54D36*X61595Y31750D02*Y34290D01* +G54D38*X66675Y21590D02*Y32385D01* +G54D36*X64135Y31750D02*Y24765D01* +X59055Y26035D02*X60960Y24130D01* +G54D37*X57150Y15240D02*Y10795D01* +X95885Y75565D02*Y67310D01* +X92710Y64770D02*X93345Y65405D01* +X90170Y70485D02*X89535Y69850D01* +X90170Y73660D02*Y70485D01* +X89535Y74295D02*X90170Y73660D01* +X95885Y67310D02*X94615Y66040D01* +X93345Y65405D02*Y80645D01* +X88265Y75565D02*Y73660D01* +X107950Y76200D02*Y69850D01* +X112395Y76200D02*Y69850D01* +G54D38*X102235Y71120D02*Y72390D01* +X104140Y74295D01* +G54D37*X102235Y76835D02*X100965Y75565D01* +X102235Y78740D02*Y76835D01* +G54D38*X99695Y66675D02*X98425Y67945D01* +G54D37*X71120Y69850D02*X70485Y69215D01* +Y66040D01* +X72390Y69215D02*X71755Y68580D01* +X78740Y75565D02*X77470Y74295D01* +X80010Y69850D02*Y74295D01* +X81280Y75565D01* +G54D36*X64770Y71120D02*Y69850D01* +X63500Y68580D01* +X61595Y65405D02*Y62865D01* +G54D37*X74930Y74295D02*Y69850D01* +X76200Y75565D02*X74930Y74295D01* +G54D36*X73660Y71120D02*Y76200D01* +G54D37*X77470Y74295D02*Y68580D01* +X72390Y76835D02*Y69215D01* +X76200Y71120D02*Y69215D01* +X81280Y66040D02*Y66675D01* +Y71120D01* +X76200Y69215D02*X73025Y66040D01* +X87630Y85725D02*X88900Y84455D01* +Y83185D01* +X87630Y81915D01* +Y93980D02*Y85725D01* +G54D36*X85090Y94615D02*Y78105D01* +X119380Y95885D02*X103505D01* +G54D37*X110490Y92710D02*Y78105D01* +G54D39*X116840Y93980D02*Y86360D01* +G54D38*X104140Y89535D02*Y74295D01* +G54D36*X102235Y94615D02*X95250D01* +X95885Y96520D02*Y94615D01* +X94615Y93980D02*X95250Y94615D01* +X94615Y92710D02*Y93980D01* +G54D37*X99695Y92710D02*Y90805D01* +G54D38*X102235Y92710D02*Y91440D01* +X104140Y89535D01* +G54D37*X99695Y90805D02*X95885Y86995D01* +Y83185D01* +X88900Y78740D02*Y76200D01* +X88265Y75565D01* +X85090D02*X86360Y76835D01* +X83820Y78740D02*X82550Y77470D01* +X87630Y81915D02*Y67945D01* +G54D36*X83820Y76835D02*Y71120D01* +G54D37*X85090Y67945D02*Y75565D01* +X82550Y63500D02*Y77470D01* +X76200Y78740D02*Y75565D01* +G54D36*X73660Y76200D02*X74930Y77470D01* +G54D37*X81280Y75565D02*Y78740D01* +X78740D02*Y75565D01* +G54D38*X63500Y95885D02*Y94615D01* +G54D36*X80010Y92710D02*X78740D01* +X76835Y90805D01* +G54D40*X74930Y77470D02*Y88900D01* +G54D36*X71120Y78740D02*Y85090D01* +X76835Y90805D02*Y81915D01* +G54D37*X78740Y80645D02*Y85090D01* +G54D38*X81280D02*X83185Y86995D01* +Y95885D02*Y86995D01* +G54D37*X52070Y71120D02*Y76200D01* +G54D36*X47625Y76835D02*X46355Y75565D01* +X52070Y78740D02*X47625Y74295D01* +X46355Y75565D02*X44450D01* +X43180Y74295D01* +Y56515D01* +X47625Y59690D02*Y74295D01* +X38735Y88265D02*Y57785D01* +X40640Y85090D02*Y62230D01* +G54D37*X45085Y100330D02*Y96520D01* +X46355Y101600D02*X45085Y100330D01* +Y90805D02*X41910Y87630D01* +Y13335D01* +G54D36*X49530Y7620D02*Y15240D01* +X69215Y54610D02*Y49530D01* +G54D37*X71755Y68580D02*Y41910D01* +G54D36*X69215Y44450D02*Y39370D01* +G54D41*X86360Y48260D02*Y34290D01* +G54D37*X80010Y33020D02*Y67945D01* +G54D42*X86360Y62230D02*Y31750D01* +X86995Y62865D02*X86360Y62230D01* +G54D37*X84455Y67310D02*X85090Y67945D01* +X84455Y59690D02*Y67310D01* +X89535Y69850D02*Y60960D01* +G54D42*X86995Y62865D02*Y66040D01* +G54D37*X88265Y73660D02*X88900Y73025D01* +X91440Y66040D02*Y46355D01* +G54D42*X115570Y33655D02*Y29845D01* +G54D41*Y30480D02*Y12700D01* +G54D38*X99695Y19685D02*Y66675D01* +G54D42*X116205Y50800D02*Y13335D01* +G54D37*X53340Y77470D02*X52070Y76200D01* +G54D36*X85090Y78105D02*X83820Y76835D01* +G54D43*X73660Y85090D02*Y78740D01* +G54D37*X86360Y76835D02*Y78740D01* +X106045Y78105D02*X107950Y76200D01* +X112395D02*X110490Y78105D01* +X112395Y83820D02*Y87630D01* +X46355Y101600D02*X106045D01* +G54D36*X107950Y95885D02*Y94615D01* +X103505Y95885D02*X102235Y94615D01* +G54D37*X60960Y97790D02*X62865Y99695D01* +X108585D02*X102235D01* +X106045Y93980D02*Y78105D01* +G54D38*X64770Y93345D02*Y85090D01* +X63500Y94615D02*X64770Y93345D01* +G54D37*X59690Y85090D02*Y90170D01* +X60960Y91440D01* +Y97790D01* +G54D36*X58420Y96520D02*Y93980D01* +X57150Y92710D01* +Y85090D01* +G54D38*X50165Y90805D02*X51435Y89535D01* +X50165Y96520D02*Y90805D01* +X51435Y89535D02*Y85090D01* +G54D37*X53340Y93980D02*Y77470D01* +X50800Y66040D02*Y73025D01* +G54D36*X61595Y68580D02*X59055Y66040D01* +G54D37*X57150Y66675D02*X54610Y69215D01* +Y71120D01* +X78740D02*Y66040D01* +X71120Y71120D02*Y69850D01* +G54D36*X63500Y68580D02*X61595D01* +G54D37*X57150Y66675D02*Y56515D01* +G54D36*X66675Y76835D02*Y52705D01* +G54D38*X68580Y96520D02*Y66040D01* +X91440Y67945D02*Y96520D01* +G54D36*X154940Y23495D02*X165735D01* +X158750Y20320D02*Y12700D01* +X165735Y20955D02*X159385D01* +X158750Y20320D01* +G54D42*X142875Y25400D02*Y6350D01* +G54D36*X138430Y9525D02*X140335Y7620D01* +X138430Y9525D02*Y15875D01* +G54D38*X140335Y12700D02*Y17780D01* +G54D36*X153670Y22225D02*X154940Y23495D01* +X153670Y22225D02*Y15240D01* +G54D42*X142875Y6350D02*X144780Y4445D01* +X160655Y13335D02*X165735D01* +X160655Y6350D02*Y13335D01* +X144780Y4445D02*X158750D01* +X160655Y6350D01* +G54D36*X158750Y12700D02*X156210Y10160D01* +G54D42*X146050Y12700D02*Y7620D01* +X126365Y36195D02*Y10160D01* +G54D41*X140335Y53340D02*Y27940D01* +X135255Y40005D02*Y4445D01* +G54D42*X140970Y27940D02*X142875Y26035D01* +G54D40*X116205Y34290D02*Y30480D01* +G54D41*X116635Y40005D02*X135255D01* +G54D42*X140335Y53975D02*X150495Y64135D01* +X153035D01* +G54D37*X157480Y66040D02*X158115Y66675D01* +X144780Y64770D02*X143510Y63500D01* +X156210Y66040D02*X157480D01* +X141605D02*Y60325D01* +X135890Y66040D02*X141605D01* +G54D36*X131445D02*Y62230D01* +G54D41*X150495Y52705D02*Y27940D01* +G54D44*X156210Y31115D02*Y47625D01* +G54D36*X149225Y92075D02*X150495Y90805D01* +X147955Y92710D02*Y90805D01* +X158115D02*X150495D01* +X149225Y96520D02*Y92075D01* +G54D37*X160655Y99695D02*X112395D01* +G54D36*X120015Y95250D02*X119380Y95885D01* +X128905Y95250D02*X130175Y93980D01* +X160655Y92075D02*Y90805D01* +G54D37*X167005Y93345D02*X160655Y99695D01* +X121285Y98425D02*Y90170D01* +G54D36*X165735Y89535D02*Y90170D01* +X165100Y90805D02*X161290D01* +X165735Y90170D02*X165100Y90805D01* +G54D37*X167005Y78740D02*Y93345D01* +G54D36*X161290Y90805D02*X157480D01* +X147955D02*X150495Y88265D01* +X153035Y90805D02*Y85725D01* +X161925Y80645D02*X164465D01* +X165735Y79375D01* +G54D37*X166370Y78105D02*X167005Y78740D01* +X164465Y78105D02*X166370D01* +X164465D02*X163195Y76835D01* +X155575Y85090D02*Y81915D01* +G54D36*X157480Y81280D02*X158115Y81915D01* +X150495Y88265D02*Y85090D01* +G54D37*X148590Y81915D02*X150495Y80010D01* +G54D36*X157480Y78105D02*Y81280D01* +X158115Y81915D02*X160655D01* +X161925Y80645D01* +G54D37*X160655Y79375D02*X158115Y76835D01* +Y66675D02*Y76835D01* +X150495Y80010D02*Y78740D01* +X142875Y82550D02*X143510Y81915D01* +X148590D01* +G54D38*X140335Y72390D02*X145415Y77470D01* +Y78740D01* +X140335Y72390D02*Y71120D01* +G54D37*X150495D02*Y74930D01* +X144780Y67945D02*Y64770D01* +G54D36*X146050Y66040D02*Y67310D01* +X146685Y67945D01* +X152400D01* +G54D37*X147955Y71120D02*X144780Y67945D01* +G54D36*X152400D02*X153035Y68580D01* +Y73660D01* +X157480Y78105D01* +X128905Y96520D02*Y95250D01* +G54D37*X127000Y88265D02*X128905Y86360D01* +Y83185D01* +G54D36*X130175Y90170D02*Y93980D01* +G54D37*X135255Y89535D02*Y93980D01* +G54D36*X132080Y88265D02*X130175Y90170D01* +X132080Y88265D02*Y86360D01* +G54D37*X133985Y76200D02*Y82550D01* +X135255Y83820D02*Y83185D01* +X130175Y78740D02*Y77470D01* +X135255Y83820D02*Y81915D01* +X139065Y90805D02*Y83820D01* +X142875Y93980D02*Y88265D01* +Y83820D02*Y82550D01* +X125730Y74930D02*X121285D01* +G54D42*X94615Y63500D02*Y10160D01* +G54D36*X101600Y66040D02*Y21590D01* +X109855Y57785D02*Y15240D01* +X97790Y17780D02*Y62230D01* +G54D37*X92710Y64770D02*Y23495D01* +G54D41*X115570Y50800D02*Y28575D01* +G54D37*X100965Y75565D02*Y67945D01* +G54D42*X97155Y66040D02*X94615Y63500D01* +G54D37*X132715Y71120D02*Y74930D01* +X133985Y76200D01* +X135255Y71120D02*Y66675D01* +X131445Y74930D02*X130175Y73660D01* +X128905Y74930D02*Y68580D01* +X127635Y71120D02*Y73025D01* +X125730Y74930D01* +X130175Y73660D02*Y71120D01* +Y77470D02*X128905Y76200D01* +X131445Y80645D02*Y74930D01* +X135255Y66675D02*X135890Y66040D01* +X142875Y68580D02*X141605Y67310D01* +X138430D01* +X142875Y71120D02*Y68580D01* +X128905Y83185D02*X131445Y80645D01* +G54D36*X125095Y83185D02*Y85090D01* +X122555Y80645D02*X125095Y83185D01* +X120015Y62230D02*Y95250D01* +G54D37*X121285Y90170D02*X123190Y88265D01* +X127000D01* +X128905Y76200D02*X121920D01* +X127000Y77470D02*X121285D01* +X127635Y78740D02*Y78105D01* +X127000Y77470D01* +G54D36*X116840D02*Y78105D01* +X117475Y78740D01* +X122555D01* +Y80645D01* +G54D37*Y71120D02*Y66040D01* +X125095Y71120D02*Y59690D01* +G54D35*X19050Y8001D02*Y6985D01* +X19431Y7366D01* +X19812Y6985D01* +Y8001D02*Y6985D01* +X20498Y7493D02*X20625Y7366D01* +X20244Y7493D02*X20498D01* +X20117Y7366D02*X20244Y7493D01* +X20117Y7366D02*Y7112D01* +X20244Y6985D01* +X20625Y7493D02*Y7112D01* +X20752Y6985D01* +X20244D02*X20498D01* +X20625Y7112D01* +X21057Y8001D02*Y7112D01* +X21184Y6985D01* +X21565Y8001D02*Y7112D01* +X21692Y6985D01* +X21438Y7620D02*X21692D01* +X22073Y6985D02*X22454D01* +X21946Y7112D02*X22073Y6985D01* +X21946Y7366D02*Y7112D01* +Y7366D02*X22073Y7493D01* +X22327D01* +X22454Y7366D01* +X21946Y7239D02*X22454D01* +Y7366D02*Y7239D01* +X22885Y7366D02*Y6985D01* +Y7366D02*X23012Y7493D01* +X23266D01* +X22758D02*X22885Y7366D01* +X24028Y8001D02*Y6985D01* +Y8001D02*X24536D01* +X24028Y7493D02*X24409D01* +X24968Y6985D02*X25349D01* +X24841Y7112D02*X24968Y6985D01* +X24841Y7366D02*Y7112D01* +Y7366D02*X24968Y7493D01* +X25222D01* +X25349Y7366D01* +X24841Y7239D02*X25349D01* +Y7366D02*Y7239D01* +X25781Y8001D02*Y7112D01* +X25908Y6985D01* +X25654Y7620D02*X25908D01* +X26289Y8001D02*Y7112D01* +X26416Y6985D01* +X26162Y7620D02*X26416D01* +X26797Y6985D02*X27178D01* +X26670Y7112D02*X26797Y6985D01* +X26670Y7366D02*Y7112D01* +Y7366D02*X26797Y7493D01* +X27051D01* +X27178Y7366D01* +X26670Y7239D02*X27178D01* +Y7366D02*Y7239D01* +X27610Y7366D02*Y6985D01* +Y7366D02*X27737Y7493D01* +X27991D01* +X27483D02*X27610Y7366D01* +X28753Y8001D02*Y6985D01* +X29261D01* +X29947Y7493D02*X30074Y7366D01* +X29693Y7493D02*X29947D01* +X29566Y7366D02*X29693Y7493D01* +X29566Y7366D02*Y7112D01* +X29693Y6985D01* +X30074Y7493D02*Y7112D01* +X30201Y6985D01* +X29693D02*X29947D01* +X30074Y7112D01* +X30886Y7493D02*X31013Y7366D01* +X30632Y7493D02*X30886D01* +X30505Y7366D02*X30632Y7493D01* +X30505Y7366D02*Y7112D01* +X30632Y6985D01* +X30886D01* +X31013Y7112D01* +X30505Y6731D02*X30632Y6604D01* +X30886D01* +X31013Y6731D01* +Y7493D02*Y6731D01* +X31445Y6985D02*X31826D01* +X31318Y7112D02*X31445Y6985D01* +X31318Y7366D02*Y7112D01* +Y7366D02*X31445Y7493D01* +X31699D01* +X31826Y7366D01* +X31318Y7239D02*X31826D01* +Y7366D02*Y7239D01* +X32258Y6985D02*X32639D01* +X32766Y7112D01* +X32639Y7239D02*X32766Y7112D01* +X32258Y7239D02*X32639D01* +X32131Y7366D02*X32258Y7239D01* +X32131Y7366D02*X32258Y7493D01* +X32639D01* +X32766Y7366D01* +X32131Y7112D02*X32258Y6985D01* +X19177Y9906D02*Y8890D01* +X19558Y9906D02*X19685Y9779D01* +Y9017D01* +X19558Y8890D02*X19685Y9017D01* +X19050Y8890D02*X19558D01* +X19050Y9906D02*X19558D01* +X19990Y9652D02*Y9525D01* +Y9271D02*Y8890D01* +X20371D02*X20752D01* +X20244Y9017D02*X20371Y8890D01* +X20244Y9271D02*Y9017D01* +Y9271D02*X20371Y9398D01* +X20625D01* +X20752Y9271D01* +X20244Y9144D02*X20752D01* +Y9271D02*Y9144D01* +X21438Y9398D02*X21565Y9271D01* +X21184Y9398D02*X21438D01* +X21057Y9271D02*X21184Y9398D01* +X21057Y9271D02*Y9017D01* +X21184Y8890D01* +X21438D01* +X21565Y9017D01* +X21057Y8636D02*X21184Y8509D01* +X21438D01* +X21565Y8636D01* +Y9398D02*Y8636D01* +X21869Y9271D02*Y9017D01* +Y9271D02*X21996Y9398D01* +X22250D01* +X22377Y9271D01* +Y9017D01* +X22250Y8890D02*X22377Y9017D01* +X21996Y8890D02*X22250D01* +X21869Y9017D02*X21996Y8890D01* +X23266D02*X23647D01* +X23139Y9017D02*X23266Y8890D01* +X23139Y9779D02*Y9017D01* +Y9779D02*X23266Y9906D01* +X23647D01* +X24333Y9398D02*X24460Y9271D01* +X24079Y9398D02*X24333D01* +X23952Y9271D02*X24079Y9398D01* +X23952Y9271D02*Y9017D01* +X24079Y8890D01* +X24460Y9398D02*Y9017D01* +X24587Y8890D01* +X24079D02*X24333D01* +X24460Y9017D01* +X24892Y9906D02*Y8890D01* +Y9017D02*X25019Y8890D01* +X25273D01* +X25400Y9017D01* +Y9271D02*Y9017D01* +X25273Y9398D02*X25400Y9271D01* +X25019Y9398D02*X25273D01* +X24892Y9271D02*X25019Y9398D01* +X25832Y8890D02*X26213D01* +X25705Y9017D02*X25832Y8890D01* +X25705Y9271D02*Y9017D01* +Y9271D02*X25832Y9398D01* +X26086D01* +X26213Y9271D01* +X25705Y9144D02*X26213D01* +Y9271D02*Y9144D01* +X26645Y9271D02*Y8890D01* +Y9271D02*X26772Y9398D01* +X27026D01* +X26518D02*X26645Y9271D01* +X27330Y9906D02*Y9017D01* +X27457Y8890D01* +X27711Y9271D02*Y9017D01* +Y9271D02*X27838Y9398D01* +X28092D01* +X28219Y9271D01* +Y9017D01* +X28092Y8890D02*X28219Y9017D01* +X27838Y8890D02*X28092D01* +X27711Y9017D02*X27838Y8890D01* +X28651Y9271D02*Y8890D01* +Y9271D02*X28778Y9398D01* +X28905D01* +X29032Y9271D01* +Y8890D01* +X28524Y9398D02*X28651Y9271D01* +X30302Y9906D02*X30429Y9779D01* +X29921Y9906D02*X30302D01* +X29794Y9779D02*X29921Y9906D01* +X29794Y9779D02*Y9525D01* +X29921Y9398D01* +X30302D01* +X30429Y9271D01* +Y9017D01* +X30302Y8890D02*X30429Y9017D01* +X29921Y8890D02*X30302D01* +X29794Y9017D02*X29921Y8890D01* +X31115Y9398D02*X31242Y9271D01* +X30861Y9398D02*X31115D01* +X30734Y9271D02*X30861Y9398D01* +X30734Y9271D02*Y9017D01* +X30861Y8890D01* +X31242Y9398D02*Y9017D01* +X31369Y8890D01* +X30861D02*X31115D01* +X31242Y9017D01* +X31801Y9271D02*Y8890D01* +Y9271D02*X31928Y9398D01* +X32055D01* +X32182Y9271D01* +Y8890D01* +X31674Y9398D02*X31801Y9271D01* +X32614Y9906D02*Y9017D01* +X32741Y8890D01* +X32487Y9525D02*X32741D01* +X32995Y9652D02*Y9525D01* +Y9271D02*Y8890D01* +X33376Y9271D02*Y8890D01* +Y9271D02*X33503Y9398D01* +X33630D01* +X33757Y9271D01* +Y8890D01* +X33249Y9398D02*X33376Y9271D01* +X34061Y9652D02*Y9525D01* +Y9271D02*Y8890D01* +X19050Y11684D02*Y10795D01* +Y11684D02*X19177Y11811D01* +X19558D01* +X19685Y11684D01* +Y10795D01* +X19050Y11303D02*X19685D01* +X19990Y11811D02*X20244D01* +X20117D02*Y10795D01* +X19990D02*X20244D01* +X20676D02*X21057D01* +X20549Y10922D02*X20676Y10795D01* +X20549Y11684D02*Y10922D01* +Y11684D02*X20676Y11811D01* +X21057D01* +X21361Y11303D02*X21869D01* +X22174Y11684D02*X22301Y11811D01* +X22682D01* +X22809Y11684D01* +Y11430D01* +X22174Y10795D02*X22809Y11430D01* +X22174Y10795D02*X22809D01* +X23114D02*X23241D01* +X23546Y11684D02*X23673Y11811D01* +X24054D01* +X24181Y11684D01* +Y11430D01* +X23546Y10795D02*X24181Y11430D01* +X23546Y10795D02*X24181D01* +X24486D02*X24613D01* +X24917Y10922D02*X25044Y10795D01* +X24917Y11684D02*Y10922D01* +Y11684D02*X25044Y11811D01* +X25298D01* +X25425Y11684D01* +Y10922D01* +X25298Y10795D02*X25425Y10922D01* +X25044Y10795D02*X25298D01* +X24917Y11049D02*X25425Y11557D01* +X26187Y10922D02*X26314Y10795D01* +X26187Y11684D02*X26314Y11811D01* +X26187Y11684D02*Y10922D01* +X26746Y11303D02*X27127D01* +X26619Y11176D02*X26746Y11303D01* +X26619Y11176D02*Y10922D01* +X26746Y10795D01* +X27127D01* +X27432Y11811D02*X27559Y11684D01* +Y10922D01* +X27432Y10795D02*X27559Y10922D01* +X28321Y11684D02*X28448Y11811D01* +X28829D01* +X28956Y11684D01* +Y11430D01* +X28321Y10795D02*X28956Y11430D01* +X28321Y10795D02*X28956D01* +X29261Y10922D02*X29388Y10795D01* +X29261Y11684D02*Y10922D01* +Y11684D02*X29388Y11811D01* +X29642D01* +X29769Y11684D01* +Y10922D01* +X29642Y10795D02*X29769Y10922D01* +X29388Y10795D02*X29642D01* +X29261Y11049D02*X29769Y11557D01* +X30074Y10922D02*X30201Y10795D01* +X30074Y11684D02*Y10922D01* +Y11684D02*X30201Y11811D01* +X30455D01* +X30582Y11684D01* +Y10922D01* +X30455Y10795D02*X30582Y10922D01* +X30201Y10795D02*X30455D01* +X30074Y11049D02*X30582Y11557D01* +X30886Y10795D02*X31394Y11303D01* +Y11684D02*Y11303D01* +X31267Y11811D02*X31394Y11684D01* +X31013Y11811D02*X31267D01* +X30886Y11684D02*X31013Y11811D01* +X30886Y11684D02*Y11430D01* +X31013Y11303D01* +X31394D01* +X19050Y6096D02*X19558D01* +X19685Y5969D01* +Y5715D01* +X19558Y5588D02*X19685Y5715D01* +X19177Y5588D02*X19558D01* +X19177Y6096D02*Y5080D01* +Y5588D02*X19685Y5080D01* +X19990Y5461D02*Y5207D01* +Y5461D02*X20117Y5588D01* +X20371D01* +X20498Y5461D01* +Y5207D01* +X20371Y5080D02*X20498Y5207D01* +X20117Y5080D02*X20371D01* +X19990Y5207D02*X20117Y5080D01* +X21311Y6096D02*Y5080D01* +X21184D02*X21311Y5207D01* +X20930Y5080D02*X21184D01* +X20803Y5207D02*X20930Y5080D01* +X20803Y5461D02*Y5207D01* +Y5461D02*X20930Y5588D01* +X21184D01* +X21311Y5461D01* +X21742D02*Y5080D01* +Y5461D02*X21869Y5588D01* +X22123D01* +X21615D02*X21742Y5461D01* +X22428Y5842D02*Y5715D01* +Y5461D02*Y5080D01* +X23063Y5588D02*X23190Y5461D01* +X22809Y5588D02*X23063D01* +X22682Y5461D02*X22809Y5588D01* +X22682Y5461D02*Y5207D01* +X22809Y5080D01* +X23063D01* +X23190Y5207D01* +X22682Y4826D02*X22809Y4699D01* +X23063D01* +X23190Y4826D01* +Y5588D02*Y4826D01* +X23495Y5461D02*Y5207D01* +Y5461D02*X23622Y5588D01* +X23876D01* +X24003Y5461D01* +Y5207D01* +X23876Y5080D02*X24003Y5207D01* +X23622Y5080D02*X23876D01* +X23495Y5207D02*X23622Y5080D01* +X24892Y6096D02*Y5080D01* +X25273Y6096D02*X25400Y5969D01* +Y5207D01* +X25273Y5080D02*X25400Y5207D01* +X24765Y5080D02*X25273D01* +X24765Y6096D02*X25273D01* +X26086Y5588D02*X26213Y5461D01* +X25832Y5588D02*X26086D01* +X25705Y5461D02*X25832Y5588D01* +X25705Y5461D02*Y5207D01* +X25832Y5080D01* +X26213Y5588D02*Y5207D01* +X26340Y5080D01* +X25832D02*X26086D01* +X26213Y5207D01* +X26772Y5461D02*Y5080D01* +Y5461D02*X26899Y5588D01* +X27026D01* +X27153Y5461D01* +Y5080D01* +X26645Y5588D02*X26772Y5461D01* +X27457Y5842D02*Y5715D01* +Y5461D02*Y5080D01* +X27838D02*X28219D01* +X27711Y5207D02*X27838Y5080D01* +X27711Y5461D02*Y5207D01* +Y5461D02*X27838Y5588D01* +X28092D01* +X28219Y5461D01* +X27711Y5334D02*X28219D01* +Y5461D02*Y5334D01* +X28524Y6096D02*Y5207D01* +X28651Y5080D01* +X29362Y6096D02*X29870D01* +X29616D02*Y5080D01* +X30302Y5461D02*Y5080D01* +Y5461D02*X30429Y5588D01* +X30683D01* +X30175D02*X30302Y5461D01* +X31115Y5080D02*X31496D01* +X30988Y5207D02*X31115Y5080D01* +X30988Y5461D02*Y5207D01* +Y5461D02*X31115Y5588D01* +X31369D01* +X31496Y5461D01* +X30988Y5334D02*X31496D01* +Y5461D02*Y5334D01* +X31801Y5588D02*Y5334D01* +X32055Y5080D01* +X32309Y5334D01* +Y5588D02*Y5334D01* +X32614Y5842D02*Y5715D01* +Y5461D02*Y5080D01* +X32868Y5588D02*X33376D01* +X32868Y5080D02*X33376Y5588D01* +X32868Y5080D02*X33376D01* +X34061Y5588D02*X34188Y5461D01* +X33807Y5588D02*X34061D01* +X33680Y5461D02*X33807Y5588D01* +X33680Y5461D02*Y5207D01* +X33807Y5080D01* +X34188Y5588D02*Y5207D01* +X34315Y5080D01* +X33807D02*X34061D01* +X34188Y5207D01* +X34747Y5461D02*Y5080D01* +Y5461D02*X34874Y5588D01* +X35001D01* +X35128Y5461D01* +Y5080D01* +X34620Y5588D02*X34747Y5461D01* +G54D45*G36* +X56388Y85852D02*Y84328D01* +X57912D01* +Y85852D01* +X56388D01* +G37* +G54D43*X59690Y85090D03* +G54D45*G36* +X93853Y85852D02*Y84328D01* +X95377D01* +Y85852D01* +X93853D01* +G37* +G54D43*X97155Y85090D03* +X99695D03* +X102235D03* +X64770Y92710D03* +X62230D03* +X59690D03* +G54D45*G36* +X72898Y92202D02*Y90678D01* +X74422D01* +Y92202D01* +X72898D01* +G37* +G54D43*X71120Y91440D03* +X57150Y92710D03* +G54D45*G36* +X49403Y97282D02*Y95758D01* +X50927D01* +Y97282D01* +X49403D01* +G37* +G54D43*X45085Y96520D03* +G54D45*G36* +X49403Y91567D02*Y90043D01* +X50927D01* +Y91567D01* +X49403D01* +G37* +G54D43*X45085Y90805D03* +G54D45*G36* +X48133Y85852D02*Y84328D01* +X49657D01* +Y85852D01* +X48133D01* +G37* +G54D43*X51435Y85090D03* +G54D45*G36* +X86868Y94742D02*Y93218D01* +X88392D01* +Y94742D01* +X86868D01* +G37* +G54D43*X87630Y83820D03* +X86360Y71120D03* +X88900D03* +Y78740D03* +X86360D03* +G54D45*G36* +X93853Y71882D02*Y70358D01* +X95377D01* +Y71882D01* +X93853D01* +G37* +G54D43*X97155Y71120D03* +X99695D03* +X102235D03* +Y78740D03* +X99695D03* +X97155D03* +X94615D03* +G54D45*G36* +X79248Y93472D02*Y91948D01* +X80772D01* +Y93472D01* +X79248D01* +G37* +G54D43*X80010Y90170D03* +G54D45*G36* +X100203Y97282D02*Y95758D01* +X101727D01* +Y97282D01* +X100203D01* +G37* +G54D43*X95885Y96520D03* +X102235Y92710D03* +X99695D03* +X97155D03* +X94615D03* +G54D45*G36* +X116078Y94742D02*Y93218D01* +X117602D01* +Y94742D01* +X116078D01* +G37* +G54D43*X107950Y93980D03* +G54D45*G36* +X128143Y97282D02*Y95758D01* +X129667D01* +Y97282D01* +X128143D01* +G37* +G54D43*X123825Y96520D03* +X112395Y93980D03* +X130175Y92710D03* +G54D45*G36* +X134493Y94742D02*Y93218D01* +X136017D01* +Y94742D01* +X134493D01* +G37* +G54D43*X127635Y92710D03* +X125095D03* +X122555D03* +G54D45*G36* +X107188Y80772D02*Y79248D01* +X108712D01* +Y80772D01* +X107188D01* +G37* +G54D43*X116840Y83820D03* +G54D45*G36* +X107188Y84582D02*Y83058D01* +X108712D01* +Y84582D01* +X107188D01* +G37* +G36* +X111633Y80772D02*Y79248D01* +X113157D01* +Y80772D01* +X111633D01* +G37* +G36* +X116078Y73152D02*Y71628D01* +X117602D01* +Y73152D01* +X116078D01* +G37* +G54D43*X116840Y77470D03* +G54D45*G36* +X121793Y71882D02*Y70358D01* +X123317D01* +Y71882D01* +X121793D01* +G37* +G54D43*X125095Y71120D03* +X127635D03* +X130175D03* +X132715D03* +X135255D03* +X137795D03* +X140335D03* +X142875D03* +X145415D03* +X147955D03* +Y78740D03* +X145415D03* +X142875D03* +X140335D03* +X137795D03* +X135255D03* +X132715D03* +X130175D03* +X127635D03* +X125095D03* +X122555D03* +G54D45*G36* +X138303Y84582D02*Y83058D01* +X139827D01* +Y84582D01* +X138303D01* +G37* +G54D43*X130175Y85090D03* +X135255Y83820D03* +G54D45*G36* +X111633Y84582D02*Y83058D01* +X113157D01* +Y84582D01* +X111633D01* +G37* +G36* +X121793Y85852D02*Y84328D01* +X123317D01* +Y85852D01* +X121793D01* +G37* +G54D43*X125095Y85090D03* +X127635D03* +G54D41*X168275Y97155D03* +D03* +G54D45*G36* +X164973Y92837D02*Y91313D01* +X166497D01* +Y92837D01* +X164973D01* +G37* +G54D43*X163195Y92075D03* +X165735Y89535D03* +Y86995D03* +X163195Y89535D03* +Y86995D03* +X160655Y92075D03* +Y89535D03* +Y86995D03* +X150495Y71120D03* +Y78740D03* +X153035Y71120D03* +X155575D03* +Y78740D03* +X153035D03* +X165735Y79375D03* +Y76835D03* +Y74295D03* +X163195D03* +X160655D03* +X165735Y71755D03* +X163195D03* +X160655D03* +X163195Y79375D03* +Y76835D03* +X160655Y79375D03* +Y76835D03* +X139065Y93980D03* +X142875D03* +G54D45*G36* +X153543Y97282D02*Y95758D01* +X155067D01* +Y97282D01* +X153543D01* +G37* +G54D43*X149225Y96520D03* +X155575Y92710D03* +X153035D03* +X150495D03* +X147955D03* +G54D45*G36* +X142113Y84582D02*Y83058D01* +X143637D01* +Y84582D01* +X142113D01* +G37* +G36* +X147193Y85852D02*Y84328D01* +X148717D01* +Y85852D01* +X147193D01* +G37* +G54D43*X150495Y85090D03* +X153035D03* +X155575D03* +X165735Y84455D03* +Y81915D03* +X163195Y84455D03* +Y81915D03* +X160655Y84455D03* +Y81915D03* +G54D45*G36* +X120269Y13716D02*Y11684D01* +X122301D01* +Y13716D01* +X120269D01* +G37* +G54D46*X118745Y12700D03* +X116205D03* +G54D45*G36* +X87884Y13716D02*Y11684D01* +X89916D01* +Y13716D01* +X87884D01* +G37* +G54D46*X86360Y12700D03* +X83820D03* +G54D45*G36* +X120269Y32766D02*Y30734D01* +X122301D01* +Y32766D01* +X120269D01* +G37* +G54D46*X118745Y31750D03* +X116205D03* +G54D45*G36* +X87884Y32766D02*Y30734D01* +X89916D01* +Y32766D01* +X87884D01* +G37* +G54D46*X86360Y31750D03* +X83820D03* +G54D45*G36* +X87884Y51816D02*Y49784D01* +X89916D01* +Y51816D01* +X87884D01* +G37* +G54D46*X86360Y50800D03* +X83820D03* +G54D45*G36* +X15050Y30670D02*Y29020D01* +X16700D01* +Y30670D01* +X15050D01* +G37* +G54D38*X15875Y32385D03* +G54D45*G36* +X15050Y40196D02*Y38544D01* +X16700D01* +Y40196D01* +X15050D01* +G37* +G54D38*X15875Y41910D03* +G54D41*X14605Y8585D03* +G54D45*G36* +X13208Y23622D02*Y22098D01* +X14732D01* +Y23622D01* +X13208D01* +G37* +G54D43*X13970Y18364D03* +G54D42*X16459Y17094D03* +Y24105D03* +G54D41*X14605Y97155D03* +G54D47*X19050Y84963D03* +G54D45*G36* +X15050Y49720D02*Y48070D01* +X16700D01* +Y49720D01* +X15050D01* +G37* +G54D38*X15875Y51435D03* +G54D47*X19050Y60173D03* +G54D45*G36* +X19558Y78867D02*Y77343D01* +X21082D01* +Y78867D01* +X19558D01* +G37* +G54D43*X17780Y76733D03* +X20320Y75336D03* +X17780Y73965D03* +X20320Y72568D03* +X17780Y71196D03* +X20320Y69799D03* +Y67031D03* +X17780Y68428D03* +G54D45*G36* +X54483Y60452D02*Y58928D01* +X56007D01* +Y60452D01* +X54483D01* +G37* +G36* +X54546Y66738D02*Y65342D01* +X55944D01* +Y66738D01* +X54546D01* +G37* +G36* +Y45148D02*Y43752D01* +X55944D01* +Y45148D01* +X54546D01* +G37* +G54D43*X55245Y39370D03* +X45085Y59690D03* +G54D48*Y66040D03* +Y44450D03* +G54D45*G36* +X44323Y40132D02*Y38608D01* +X45847D01* +Y40132D01* +X44323D01* +G37* +G36* +X60833Y66802D02*Y65278D01* +X62357D01* +Y66802D01* +X60833D01* +G37* +G36* +Y60452D02*Y58928D01* +X62357D01* +Y60452D01* +X60833D01* +G37* +G54D43*X64135Y59690D03* +Y66040D03* +G54D45*G36* +X80518Y66802D02*Y65278D01* +X82042D01* +Y66802D01* +X80518D01* +G37* +G54D43*X78740Y66040D03* +G54D45*G36* +X58293Y50292D02*Y48768D01* +X59817D01* +Y50292D01* +X58293D01* +G37* +G54D48*X59055Y44450D03* +G54D45*G36* +X58293Y40132D02*Y38608D01* +X59817D01* +Y40132D01* +X58293D01* +G37* +G36* +X58356Y55308D02*Y53912D01* +X59754D01* +Y55308D01* +X58356D01* +G37* +G54D43*X69215Y49530D03* +G54D45*G36* +X68516Y45148D02*Y43752D01* +X69914D01* +Y45148D01* +X68516D01* +G37* +G54D43*X69215Y39370D03* +G54D48*Y54610D03* +G54D45*G36* +X48768Y16002D02*Y14478D01* +X50292D01* +Y16002D01* +X48768D01* +G37* +G54D43*X52070Y15240D03* +X54610D03* +X57150D03* +X59690D03* +X62230D03* +X64770D03* +Y22860D03* +X62230D03* +G54D45*G36* +X70358Y85852D02*Y84328D01* +X71882D01* +Y85852D01* +X70358D01* +G37* +G54D43*X73660Y85090D03* +X62230D03* +X64770D03* +X83820Y71120D03* +Y78740D03* +X81280D03* +X78740D03* +X76200D03* +X73660D03* +G54D45*G36* +X62738Y97282D02*Y95758D01* +X64262D01* +Y97282D01* +X62738D01* +G37* +G54D43*X58420Y96520D03* +G54D45*G36* +X77978Y85852D02*Y84328D01* +X79502D01* +Y85852D01* +X77978D01* +G37* +G54D43*X81280Y85090D03* +G54D45*G36* +X44323Y78232D02*Y76708D01* +X45847D01* +Y78232D01* +X44323D01* +G37* +G54D43*X45085Y72390D03* +G54D45*G36* +X48768Y71882D02*Y70358D01* +X50292D01* +Y71882D01* +X48768D01* +G37* +G54D43*X52070Y71120D03* +X54610D03* +X57150D03* +X59690D03* +X54610Y78740D03* +G54D45*G36* +X44386Y55308D02*Y53912D01* +X45784D01* +Y55308D01* +X44386D01* +G37* +G54D43*X52070Y78740D03* +X49530D03* +G54D48*X55245Y54610D03* +G54D45*G36* +X72263Y66802D02*Y65278D01* +X73787D01* +Y66802D01* +X72263D01* +G37* +G54D43*X70485Y66040D03* +G54D45*G36* +X70358Y71882D02*Y70358D01* +X71882D01* +Y71882D01* +X70358D01* +G37* +G54D43*X73660Y71120D03* +X76200D03* +X78740D03* +X81280D03* +X62230D03* +X64770D03* +X71120Y78740D03* +X64770D03* +X62230D03* +X59690D03* +Y22860D03* +G54D45*G36* +X60833Y35052D02*Y33528D01* +X62357D01* +Y35052D01* +X60833D01* +G37* +G54D43*X57150Y78740D03* +Y22860D03* +G54D45*G36* +X44323Y50292D02*Y48768D01* +X45847D01* +Y50292D01* +X44323D01* +G37* +G54D43*X55245Y49530D03* +X54610Y22860D03* +X52070D03* +X49530D03* +G54D45*G36* +X44323Y22352D02*Y20828D01* +X45847D01* +Y22352D01* +X44323D01* +G37* +G54D43*X45085Y16510D03* +G54D45*G36* +X54483Y28702D02*Y27178D01* +X56007D01* +Y28702D01* +X54483D01* +G37* +G36* +X60833D02*Y27178D01* +X62357D01* +Y28702D01* +X60833D01* +G37* +G54D43*X64135Y27940D03* +Y34290D03* +G54D45*G36* +X54546Y34988D02*Y33592D01* +X55944D01* +Y34988D01* +X54546D01* +G37* +G54D43*X45085Y27940D03* +G54D48*Y34290D03* +G54D43*X107950Y69850D03* +G54D45*G36* +X120269Y51816D02*Y49784D01* +X122301D01* +Y51816D01* +X120269D01* +G37* +G54D46*X118745Y50800D03* +X116205D03* +G54D43*X112395Y69850D03* +G54D45*G36* +X155448Y66802D02*Y65278D01* +X156972D01* +Y66802D01* +X155448D01* +G37* +G54D43*X160655Y66675D03* +Y64135D03* +X165735Y69215D03* +X163195D03* +X160655D03* +X165735Y66675D03* +X163195D03* +Y64135D03* +Y61595D03* +X165735Y64135D03* +Y61595D03* +X160655D03* +Y59055D03* +Y56515D03* +Y53975D03* +Y51435D03* +X146050Y66040D03* +G54D45*G36* +X140843Y66802D02*Y65278D01* +X142367D01* +Y66802D01* +X140843D01* +G37* +G54D43*X131445Y66040D03* +X127000D03* +G54D45*G36* +X86233Y66802D02*Y65278D01* +X87757D01* +Y66802D01* +X86233D01* +G37* +G54D43*X97155Y66040D03* +G54D45*G36* +X110998Y66802D02*Y65278D01* +X112522D01* +Y66802D01* +X110998D01* +G37* +G54D43*X101600Y66040D03* +G54D45*G36* +X116078Y66802D02*Y65278D01* +X117602D01* +Y66802D01* +X116078D01* +G37* +G36* +X155448Y10922D02*Y9398D01* +X156972D01* +Y10922D01* +X155448D01* +G37* +G54D43*X156210Y7620D03* +G54D45*G36* +X155448Y16002D02*Y14478D01* +X156972D01* +Y16002D01* +X155448D01* +G37* +G54D43*X156210Y17780D03* +G54D41*X168275Y8585D03* +Y8255D03* +G54D45*G36* +X149733Y8382D02*Y6858D01* +X151257D01* +Y8382D01* +X149733D01* +G37* +G54D43*X150495Y12700D03* +G54D45*G36* +X139573Y13462D02*Y11938D01* +X141097D01* +Y13462D01* +X139573D01* +G37* +G54D43*X140335Y7620D03* +G54D45*G36* +X145288Y8382D02*Y6858D01* +X146812D01* +Y8382D01* +X145288D01* +G37* +G54D43*X146050Y12700D03* +X165735Y15875D03* +Y13335D03* +X163195Y15875D03* +Y13335D03* +X160655Y15875D03* +Y13335D03* +G54D45*G36* +X139065Y29210D02*Y26670D01* +X141605D01* +Y29210D01* +X139065D01* +G37* +G54D44*X150495Y27940D03* +G54D45*G36* +X139065Y53975D02*Y51435D01* +X141605D01* +Y53975D01* +X139065D01* +G37* +G54D44*X150495Y52705D03* +G54D43*X165735Y59055D03* +Y56515D03* +Y53975D03* +X163195Y59055D03* +Y56515D03* +Y53975D03* +X165735Y51435D03* +Y48895D03* +Y46355D03* +X163195Y51435D03* +Y48895D03* +X160655D03* +X165735Y41275D03* +Y38735D03* +Y36195D03* +Y33655D03* +Y31115D03* +Y28575D03* +Y26035D03* +Y23495D03* +Y20955D03* +Y18415D03* +Y43815D03* +X163195D03* +Y46355D03* +Y41275D03* +Y38735D03* +Y36195D03* +Y33655D03* +Y31115D03* +Y28575D03* +Y26035D03* +Y23495D03* +Y20955D03* +Y18415D03* +X160655Y46355D03* +Y43815D03* +Y41275D03* +Y38735D03* +Y36195D03* +Y33655D03* +Y31115D03* +Y28575D03* +Y26035D03* +Y23495D03* +Y20955D03* +Y18415D03* +G54D41*X86360Y43815D03* +G54D49*X92710Y23495D03* +X80010Y33020D03* +X91440Y46355D03* +X89535Y74295D03* +X88900Y73025D03* +X80010Y69850D03* +X82550Y63500D03* +G54D50*X91440Y67945D03* +G54D51*X126365Y10160D03* +Y36195D03* +G54D43*X138430Y15875D03* +G54D51*X94615Y10160D03* +G54D43*X101600Y21590D03* +X97790Y17780D03* +G54D46*X99695Y19685D03* +G54D41*X140335Y43815D03* +G54D52*X156210Y31115D03* +G54D41*Y47625D03* +G54D43*X153670Y15240D03* +G54D46*X140335Y17780D03* +G54D41*X150495Y40005D03* +G54D53*X135255Y4445D03* +G54D41*Y40005D03* +G54D43*X109855Y15240D03* +G54D49*X26035Y71120D03* +G54D43*X38735Y88265D03* +X40640Y85090D03* +G54D49*X26035Y75565D03* +G54D43*X47625Y76835D03* +X40640Y72390D03* +G54D49*X22225Y69850D03* +X23495Y68580D03* +X40640Y56515D03* +G54D43*X38735Y57785D03* +X45085Y62230D03* +X40640D03* +X47625Y59690D03* +G54D49*X53340Y93980D03* +G54D43*X66675Y76835D03* +Y52705D03* +G54D49*X77470Y68580D03* +X72390Y76835D03* +G54D43*X74930Y88900D03* +G54D38*X68580Y66040D03* +G54D43*X60960Y20320D03* +X57150Y24765D03* +X64135Y31750D03* +Y24765D03* +G54D49*X39370Y10795D03* +G54D43*X49530Y7620D03* +G54D49*X52070Y13335D03* +X54610Y12065D03* +X57150Y10795D03* +X39370Y34290D03* +X41910Y13335D03* +G54D51*X48260Y24765D03* +G54D49*X40640Y12065D03* +X71755Y41910D03* +G54D43*X45085Y31750D03* +X55245Y47625D03* +X57150Y29845D03* +X61595Y31750D03* +G54D42*X48260Y34290D03* +G54D43*X52705Y39370D03* +X71120Y81915D03* +G54D49*X62865Y99695D03* +G54D51*X68580Y96520D03* +G54D49*X50800Y66040D03* +Y73025D03* +G54D43*X61595Y62230D03* +G54D49*X57150Y56515D03* +Y60960D03* +G54D43*X66675Y59690D03* +G54D42*X68580Y73025D03* +G54D49*X80010Y67945D03* +X74930Y69850D03* +X100965Y67945D03* +G54D50*X98425D03* +G54D49*X93345Y80645D03* +X91440Y66040D03* +X92710Y64770D03* +G54D51*X91440Y96520D03* +G54D49*X106045Y101600D03* +X89535Y60960D03* +X87630Y67945D03* +X84455Y59690D03* +X78740Y80645D03* +X95885Y75565D03* +G54D43*X76835Y81915D03* +G54D51*X83185Y96520D03* +G54D49*X85090Y94615D03* +X128905Y68580D03* +X125095Y59690D03* +X122555Y66040D03* +X128905Y74930D03* +X150495D03* +X121920Y76200D03* +X112395Y74930D03* +X135255Y89535D03* +X95885Y83185D03* +G54D43*X132080Y86360D03* +G54D49*X94615Y66040D03* +G54D43*X97790Y62230D03* +X131445D03* +G54D49*X139065Y90805D03* +X142875Y88265D03* +X133985Y82550D03* +X135255Y81915D03* +G54D51*X153035Y64135D03* +G54D49*X143510Y63500D03* +X138430Y67310D03* +X141605Y60325D03* +X155575Y81915D03* +G54D43*X156210Y76835D03* +G54D49*X112395Y87630D03* +X121285Y98425D03* +X112395Y99695D03* +X110490Y92710D03* +X108585Y99695D03* +X102235D03* +X106045Y93980D03* +G54D51*X104140Y86360D03* +G54D43*X120015Y62230D03* +G54D49*X107950Y74930D03* +G54D43*X101600Y62230D03* +G54D48*X109855Y57785D03* +G54D49*X121285Y74930D03* +G54D43*X120015Y81915D03* +G54D49*X121285Y77470D03* +G54D43*X116840Y86360D03* +G54D48*G54D40*G54D39*G54D48*G54D39*G54D48*G54D39*G54D40*G54D39*G54D40*G54D39*G54D40*G54D39*G54D40*G54D39*G54D40*G54D39*G54D40*G54D39*G54D40*G54D39*G54D40*G54D39*G54D40*G54D39*G54D40*G54D39*G54D40*G54D39*G54D40*G54D39*G54D40*G54D39*G54D40*G54D39*G54D40*G54D39*G54D40*G54D39*G54D40*G54D39*G54D40*G54D39*G54D40*G54D39*G54D40*G54D39*G54D40*G54D39*G54D40*G54D54*G54D39*G54D54*G54D39*G54D54*G54D39*G54D54*G54D39*G54D54*G54D39*G54D54*G54D39*G54D54*G54D39*G54D54*G54D39*G54D54*G54D39*G54D54*G54D46*G54D55*G54D54*G54D55*G54D39*G54D54*G54D39*G54D54*G54D55*G54D56*G54D57*G54D46*G54D56*G54D58*G54D46*G54D41*G54D57*G54D41*G54D39*G54D55*G54D39*G54D55*G54D39*G54D55*G54D39*G54D55*G54D39*G54D55*G54D39*G54D55*G54D54*G54D39*G54D54*G54D39*G54D54*G54D55*G54D54*G54D55*G54D39*G54D54*G54D39*G54D54*G54D39*G54D54*G54D39*G54D55*G54D39*G54D55*G54D39*G54D56*G54D39*G54D55*G54D39*G54D46*G54D54*G54D55*G54D43*G54D55*M02* diff --git a/doc/aic.topmask.gbr b/doc/aic.topmask.gbr new file mode 100644 index 0000000..7fa70cf --- /dev/null +++ b/doc/aic.topmask.gbr @@ -0,0 +1,755 @@ +G04 start of page 5 for group -4063 idx -4063 * +G04 Title: (unknown), componentmask * +G04 Creator: pcb 20140316 * +G04 CreationDate: Wed 15 Jul 2015 07:10:19 PM GMT UTC * +G04 For: fetter * +G04 Format: Gerber/RS-274X * +G04 PCB-Dimensions (mm): 180.34 104.14 * +G04 PCB-Coordinate-Origin: lower left * +%MOMM*% +%FSLAX43Y43*% +%LNTOPMASK*% +%ADD79C,2.692*% +%ADD78C,1.549*% +%ADD77C,3.708*% +%ADD76C,1.930*% +%ADD75C,1.803*% +%ADD74C,2.184*% +%ADD73C,3.200*% +%ADD72C,1.676*% +%ADD71C,0.002*% +%ADD70C,0.203*% +G54D70*X0Y104140D02*X180340D01* +X0D02*Y0D01* +X180340Y104140D02*Y0D01* +X0D02*X180340D01* +G54D71*G36* +X56312Y85928D02*Y84252D01* +X57988D01* +Y85928D01* +X56312D01* +G37* +G54D72*X59690Y85090D03* +G54D71*G36* +X93777Y85928D02*Y84252D01* +X95453D01* +Y85928D01* +X93777D01* +G37* +G54D72*X97155Y85090D03* +X99695D03* +X102235D03* +X64770Y92710D03* +X62230D03* +X59690D03* +G54D71*G36* +X72822Y92278D02*Y90602D01* +X74498D01* +Y92278D01* +X72822D01* +G37* +G54D72*X71120Y91440D03* +X57150Y92710D03* +G54D71*G36* +X49327Y97358D02*Y95682D01* +X51003D01* +Y97358D01* +X49327D01* +G37* +G54D72*X45085Y96520D03* +G54D71*G36* +X49327Y91643D02*Y89967D01* +X51003D01* +Y91643D01* +X49327D01* +G37* +G54D72*X45085Y90805D03* +G54D71*G36* +X48057Y85928D02*Y84252D01* +X49733D01* +Y85928D01* +X48057D01* +G37* +G54D72*X51435Y85090D03* +G54D71*G36* +X86792Y94818D02*Y93142D01* +X88468D01* +Y94818D01* +X86792D01* +G37* +G54D72*X87630Y83820D03* +X86360Y71120D03* +X88900D03* +Y78740D03* +X86360D03* +G54D71*G36* +X93777Y71958D02*Y70282D01* +X95453D01* +Y71958D01* +X93777D01* +G37* +G54D72*X97155Y71120D03* +X99695D03* +X102235D03* +Y78740D03* +X99695D03* +X97155D03* +X94615D03* +G54D71*G36* +X79172Y93548D02*Y91872D01* +X80848D01* +Y93548D01* +X79172D01* +G37* +G54D72*X80010Y90170D03* +G54D71*G36* +X100127Y97358D02*Y95682D01* +X101803D01* +Y97358D01* +X100127D01* +G37* +G54D72*X95885Y96520D03* +X102235Y92710D03* +X99695D03* +X97155D03* +X94615D03* +G54D71*G36* +X116002Y94818D02*Y93142D01* +X117678D01* +Y94818D01* +X116002D01* +G37* +G54D72*X107950Y93980D03* +G54D71*G36* +X128067Y97358D02*Y95682D01* +X129743D01* +Y97358D01* +X128067D01* +G37* +G54D72*X123825Y96520D03* +X112395Y93980D03* +X130175Y92710D03* +G54D71*G36* +X134417Y94818D02*Y93142D01* +X136093D01* +Y94818D01* +X134417D01* +G37* +G54D72*X127635Y92710D03* +X125095D03* +X122555D03* +G54D71*G36* +X107112Y80848D02*Y79172D01* +X108788D01* +Y80848D01* +X107112D01* +G37* +G54D72*X116840Y83820D03* +G54D71*G36* +X107112Y84658D02*Y82982D01* +X108788D01* +Y84658D01* +X107112D01* +G37* +G36* +X111557Y80848D02*Y79172D01* +X113233D01* +Y80848D01* +X111557D01* +G37* +G36* +X116002Y73228D02*Y71552D01* +X117678D01* +Y73228D01* +X116002D01* +G37* +G54D72*X116840Y77470D03* +G54D71*G36* +X121717Y71958D02*Y70282D01* +X123393D01* +Y71958D01* +X121717D01* +G37* +G54D72*X125095Y71120D03* +X127635D03* +X130175D03* +X132715D03* +X135255D03* +X137795D03* +X140335D03* +X142875D03* +X145415D03* +X147955D03* +Y78740D03* +X145415D03* +X142875D03* +X140335D03* +X137795D03* +X135255D03* +X132715D03* +X130175D03* +X127635D03* +X125095D03* +X122555D03* +G54D71*G36* +X138227Y84658D02*Y82982D01* +X139903D01* +Y84658D01* +X138227D01* +G37* +G54D72*X130175Y85090D03* +X135255Y83820D03* +G54D71*G36* +X111557Y84658D02*Y82982D01* +X113233D01* +Y84658D01* +X111557D01* +G37* +G36* +X121717Y85928D02*Y84252D01* +X123393D01* +Y85928D01* +X121717D01* +G37* +G54D72*X125095Y85090D03* +X127635D03* +G54D73*X168275Y97155D03* +D03* +G54D71*G36* +X164897Y92913D02*Y91237D01* +X166573D01* +Y92913D01* +X164897D01* +G37* +G54D72*X163195Y92075D03* +X165735Y89535D03* +Y86995D03* +X163195Y89535D03* +Y86995D03* +X160655Y92075D03* +Y89535D03* +Y86995D03* +X150495Y71120D03* +Y78740D03* +X153035Y71120D03* +X155575D03* +Y78740D03* +X153035D03* +X165735Y79375D03* +Y76835D03* +Y74295D03* +X163195D03* +X160655D03* +X165735Y71755D03* +X163195D03* +X160655D03* +X163195Y79375D03* +Y76835D03* +X160655Y79375D03* +Y76835D03* +X139065Y93980D03* +X142875D03* +G54D71*G36* +X153467Y97358D02*Y95682D01* +X155143D01* +Y97358D01* +X153467D01* +G37* +G54D72*X149225Y96520D03* +X155575Y92710D03* +X153035D03* +X150495D03* +X147955D03* +G54D71*G36* +X142037Y84658D02*Y82982D01* +X143713D01* +Y84658D01* +X142037D01* +G37* +G36* +X147117Y85928D02*Y84252D01* +X148793D01* +Y85928D01* +X147117D01* +G37* +G54D72*X150495Y85090D03* +X153035D03* +X155575D03* +X165735Y84455D03* +Y81915D03* +X163195Y84455D03* +Y81915D03* +X160655Y84455D03* +Y81915D03* +G54D71*G36* +X120193Y13792D02*Y11608D01* +X122377D01* +Y13792D01* +X120193D01* +G37* +G54D74*X118745Y12700D03* +X116205D03* +G54D71*G36* +X87808Y13792D02*Y11608D01* +X89992D01* +Y13792D01* +X87808D01* +G37* +G54D74*X86360Y12700D03* +X83820D03* +G54D71*G36* +X120193Y32842D02*Y30658D01* +X122377D01* +Y32842D01* +X120193D01* +G37* +G54D74*X118745Y31750D03* +X116205D03* +G54D71*G36* +X87808Y32842D02*Y30658D01* +X89992D01* +Y32842D01* +X87808D01* +G37* +G54D74*X86360Y31750D03* +X83820D03* +G54D71*G36* +X87808Y51892D02*Y49708D01* +X89992D01* +Y51892D01* +X87808D01* +G37* +G54D74*X86360Y50800D03* +X83820D03* +G54D71*G36* +X14973Y30747D02*Y28943D01* +X16777D01* +Y30747D01* +X14973D01* +G37* +G54D75*X15875Y32385D03* +G54D71*G36* +X14973Y40272D02*Y38468D01* +X16777D01* +Y40272D01* +X14973D01* +G37* +G54D75*X15875Y41910D03* +G54D73*X14605Y8585D03* +G54D71*G36* +X13132Y23698D02*Y22022D01* +X14808D01* +Y23698D01* +X13132D01* +G37* +G54D72*X13970Y18364D03* +G54D76*X16459Y17094D03* +Y24105D03* +G54D73*X14605Y97155D03* +G54D77*X19050Y84963D03* +G54D71*G36* +X14973Y49797D02*Y47993D01* +X16777D01* +Y49797D01* +X14973D01* +G37* +G54D75*X15875Y51435D03* +G54D77*X19050Y60173D03* +G54D71*G36* +X19482Y78943D02*Y77267D01* +X21158D01* +Y78943D01* +X19482D01* +G37* +G54D72*X17780Y76733D03* +X20320Y75336D03* +X17780Y73965D03* +X20320Y72568D03* +X17780Y71196D03* +X20320Y69799D03* +Y67031D03* +X17780Y68428D03* +G54D71*G36* +X54407Y60528D02*Y58852D01* +X56083D01* +Y60528D01* +X54407D01* +G37* +G36* +X54470Y66815D02*Y65265D01* +X56020D01* +Y66815D01* +X54470D01* +G37* +G36* +Y45225D02*Y43675D01* +X56020D01* +Y45225D01* +X54470D01* +G37* +G54D72*X55245Y39370D03* +X45085Y59690D03* +G54D78*Y66040D03* +Y44450D03* +G54D71*G36* +X44247Y40208D02*Y38532D01* +X45923D01* +Y40208D01* +X44247D01* +G37* +G36* +X60757Y66878D02*Y65202D01* +X62433D01* +Y66878D01* +X60757D01* +G37* +G36* +Y60528D02*Y58852D01* +X62433D01* +Y60528D01* +X60757D01* +G37* +G54D72*X64135Y59690D03* +Y66040D03* +G54D71*G36* +X80442Y66878D02*Y65202D01* +X82118D01* +Y66878D01* +X80442D01* +G37* +G54D72*X78740Y66040D03* +G54D71*G36* +X58217Y50368D02*Y48692D01* +X59893D01* +Y50368D01* +X58217D01* +G37* +G54D78*X59055Y44450D03* +G54D71*G36* +X58217Y40208D02*Y38532D01* +X59893D01* +Y40208D01* +X58217D01* +G37* +G36* +X58280Y55385D02*Y53835D01* +X59830D01* +Y55385D01* +X58280D01* +G37* +G54D72*X69215Y49530D03* +G54D71*G36* +X68440Y45225D02*Y43675D01* +X69990D01* +Y45225D01* +X68440D01* +G37* +G54D72*X69215Y39370D03* +G54D78*Y54610D03* +G54D71*G36* +X48692Y16078D02*Y14402D01* +X50368D01* +Y16078D01* +X48692D01* +G37* +G54D72*X52070Y15240D03* +X54610D03* +X57150D03* +X59690D03* +X62230D03* +X64770D03* +Y22860D03* +X62230D03* +G54D71*G36* +X70282Y85928D02*Y84252D01* +X71958D01* +Y85928D01* +X70282D01* +G37* +G54D72*X73660Y85090D03* +X62230D03* +X64770D03* +X83820Y71120D03* +Y78740D03* +X81280D03* +X78740D03* +X76200D03* +X73660D03* +G54D71*G36* +X62662Y97358D02*Y95682D01* +X64338D01* +Y97358D01* +X62662D01* +G37* +G54D72*X58420Y96520D03* +G54D71*G36* +X77902Y85928D02*Y84252D01* +X79578D01* +Y85928D01* +X77902D01* +G37* +G54D72*X81280Y85090D03* +G54D71*G36* +X44247Y78308D02*Y76632D01* +X45923D01* +Y78308D01* +X44247D01* +G37* +G54D72*X45085Y72390D03* +G54D71*G36* +X48692Y71958D02*Y70282D01* +X50368D01* +Y71958D01* +X48692D01* +G37* +G54D72*X52070Y71120D03* +X54610D03* +X57150D03* +X59690D03* +X54610Y78740D03* +G54D71*G36* +X44310Y55385D02*Y53835D01* +X45860D01* +Y55385D01* +X44310D01* +G37* +G54D72*X52070Y78740D03* +X49530D03* +G54D78*X55245Y54610D03* +G54D71*G36* +X72187Y66878D02*Y65202D01* +X73863D01* +Y66878D01* +X72187D01* +G37* +G54D72*X70485Y66040D03* +G54D71*G36* +X70282Y71958D02*Y70282D01* +X71958D01* +Y71958D01* +X70282D01* +G37* +G54D72*X73660Y71120D03* +X76200D03* +X78740D03* +X81280D03* +X62230D03* +X64770D03* +X71120Y78740D03* +X64770D03* +X62230D03* +X59690D03* +Y22860D03* +G54D71*G36* +X60757Y35128D02*Y33452D01* +X62433D01* +Y35128D01* +X60757D01* +G37* +G54D72*X57150Y78740D03* +Y22860D03* +G54D71*G36* +X44247Y50368D02*Y48692D01* +X45923D01* +Y50368D01* +X44247D01* +G37* +G54D72*X55245Y49530D03* +X54610Y22860D03* +X52070D03* +X49530D03* +G54D71*G36* +X44247Y22428D02*Y20752D01* +X45923D01* +Y22428D01* +X44247D01* +G37* +G54D72*X45085Y16510D03* +G54D71*G36* +X54407Y28778D02*Y27102D01* +X56083D01* +Y28778D01* +X54407D01* +G37* +G36* +X60757D02*Y27102D01* +X62433D01* +Y28778D01* +X60757D01* +G37* +G54D72*X64135Y27940D03* +Y34290D03* +G54D71*G36* +X54470Y35065D02*Y33515D01* +X56020D01* +Y35065D01* +X54470D01* +G37* +G54D72*X45085Y27940D03* +G54D78*Y34290D03* +G54D72*X107950Y69850D03* +G54D71*G36* +X120193Y51892D02*Y49708D01* +X122377D01* +Y51892D01* +X120193D01* +G37* +G54D74*X118745Y50800D03* +X116205D03* +G54D72*X112395Y69850D03* +G54D71*G36* +X155372Y66878D02*Y65202D01* +X157048D01* +Y66878D01* +X155372D01* +G37* +G54D72*X160655Y66675D03* +Y64135D03* +X165735Y69215D03* +X163195D03* +X160655D03* +X165735Y66675D03* +X163195D03* +Y64135D03* +Y61595D03* +X165735Y64135D03* +Y61595D03* +X160655D03* +Y59055D03* +Y56515D03* +Y53975D03* +Y51435D03* +X146050Y66040D03* +G54D71*G36* +X140767Y66878D02*Y65202D01* +X142443D01* +Y66878D01* +X140767D01* +G37* +G54D72*X131445Y66040D03* +X127000D03* +G54D71*G36* +X86157Y66878D02*Y65202D01* +X87833D01* +Y66878D01* +X86157D01* +G37* +G54D72*X97155Y66040D03* +G54D71*G36* +X110922Y66878D02*Y65202D01* +X112598D01* +Y66878D01* +X110922D01* +G37* +G54D72*X101600Y66040D03* +G54D71*G36* +X116002Y66878D02*Y65202D01* +X117678D01* +Y66878D01* +X116002D01* +G37* +G36* +X155372Y10998D02*Y9322D01* +X157048D01* +Y10998D01* +X155372D01* +G37* +G54D72*X156210Y7620D03* +G54D71*G36* +X155372Y16078D02*Y14402D01* +X157048D01* +Y16078D01* +X155372D01* +G37* +G54D72*X156210Y17780D03* +G54D73*X168275Y8585D03* +Y8255D03* +G54D71*G36* +X149657Y8458D02*Y6782D01* +X151333D01* +Y8458D01* +X149657D01* +G37* +G54D72*X150495Y12700D03* +G54D71*G36* +X139497Y13538D02*Y11862D01* +X141173D01* +Y13538D01* +X139497D01* +G37* +G54D72*X140335Y7620D03* +G54D71*G36* +X145212Y8458D02*Y6782D01* +X146888D01* +Y8458D01* +X145212D01* +G37* +G54D72*X146050Y12700D03* +X165735Y15875D03* +Y13335D03* +X163195Y15875D03* +Y13335D03* +X160655Y15875D03* +Y13335D03* +G54D71*G36* +X138989Y29286D02*Y26594D01* +X141681D01* +Y29286D01* +X138989D01* +G37* +G54D79*X150495Y27940D03* +G54D71*G36* +X138989Y54051D02*Y51359D01* +X141681D01* +Y54051D01* +X138989D01* +G37* +G54D79*X150495Y52705D03* +G54D72*X165735Y59055D03* +Y56515D03* +Y53975D03* +X163195Y59055D03* +Y56515D03* +Y53975D03* +X165735Y51435D03* +Y48895D03* +Y46355D03* +X163195Y51435D03* +Y48895D03* +X160655D03* +X165735Y41275D03* +Y38735D03* +Y36195D03* +Y33655D03* +Y31115D03* +Y28575D03* +Y26035D03* +Y23495D03* +Y20955D03* +Y18415D03* +Y43815D03* +X163195D03* +Y46355D03* +Y41275D03* +Y38735D03* +Y36195D03* +Y33655D03* +Y31115D03* +Y28575D03* +Y26035D03* +Y23495D03* +Y20955D03* +Y18415D03* +X160655Y46355D03* +Y43815D03* +Y41275D03* +Y38735D03* +Y36195D03* +Y33655D03* +Y31115D03* +Y28575D03* +Y26035D03* +Y23495D03* +Y20955D03* +Y18415D03* +M02* diff --git a/doc/aic.toppaste.gbr b/doc/aic.toppaste.gbr new file mode 100644 index 0000000..c5b4369 --- /dev/null +++ b/doc/aic.toppaste.gbr @@ -0,0 +1,13 @@ +G04 start of page 9 for group -4015 idx -4015 * +G04 Title: (unknown), toppaste * +G04 Creator: pcb 20140316 * +G04 CreationDate: Wed 15 Jul 2015 07:10:19 PM GMT UTC * +G04 For: fetter * +G04 Format: Gerber/RS-274X * +G04 PCB-Dimensions (mm): 180.34 104.14 * +G04 PCB-Coordinate-Origin: lower left * +%MOMM*% +%FSLAX43Y43*% +%LNTOPPASTE*% +%ADD11C,0.0100*% +M02* diff --git a/doc/aic.topsilk.gbr b/doc/aic.topsilk.gbr new file mode 100644 index 0000000..e55ae2b --- /dev/null +++ b/doc/aic.topsilk.gbr @@ -0,0 +1,1647 @@ +G04 start of page 7 for group -4079 idx -4079 * +G04 Title: (unknown), topsilk * +G04 Creator: pcb 20140316 * +G04 CreationDate: Wed 15 Jul 2015 07:10:19 PM GMT UTC * +G04 For: fetter * +G04 Format: Gerber/RS-274X * +G04 PCB-Dimensions (mm): 180.34 104.14 * +G04 PCB-Coordinate-Origin: lower left * +%MOMM*% +%FSLAX43Y43*% +%LNTOPSILK*% +%ADD93C,1.016*% +%ADD92C,0.254*% +%ADD91C,0.508*% +%ADD90C,0.203*% +G54D90*X0Y104140D02*X180340D01* +X0D02*Y0D01* +X180340Y104140D02*Y0D01* +X0D02*X180340D01* +G54D91*X113030Y22860D02*Y8890D01* +X111760Y22860D02*X113030D01* +X111760D02*Y8890D01* +X106680D02*X111760D01* +X106680Y22860D02*Y8890D01* +X105410Y22860D02*X106680D01* +X105410D02*Y6350D01* +X113030Y8890D02*X124460D01* +Y22860D02*Y8890D01* +Y22860D02*X125730D01* +Y8890D01* +X130810D01* +Y22860D02*Y8890D01* +Y22860D02*X132080D01* +Y6350D01* +X105410D02*X132080D01* +X113665Y9652D02*X123825D01* +X113665Y14224D02*Y9652D01* +Y14224D02*X123825D01* +Y9652D01* +X113665D02*X123825D01* +X113665Y11176D02*Y9652D01* +Y11176D02*X123825D01* +Y9652D01* +G54D92*X120523Y11176D02*Y9652D01* +X116967Y11176D02*Y9652D01* +G54D91*X80645Y22860D02*Y8890D01* +X79375Y22860D02*X80645D01* +X79375D02*Y8890D01* +X74295D02*X79375D01* +X74295Y22860D02*Y8890D01* +X73025Y22860D02*X74295D01* +X73025D02*Y6350D01* +X80645Y8890D02*X92075D01* +Y22860D02*Y8890D01* +Y22860D02*X93345D01* +Y8890D01* +X98425D01* +Y22860D02*Y8890D01* +Y22860D02*X99695D01* +Y6350D01* +X73025D02*X99695D01* +G54D92*X155575Y11811D02*X156845D01* +X156210Y12446D02*Y11176D01* +Y11430D02*G75*G03X156210Y11430I0J-2540D01*G01* +X151765Y12700D02*Y7620D01* +X149225Y12700D02*Y7620D01* +X151765Y12700D02*G75*G03X149225Y12700I-1270J0D01*G01* +Y7620D02*G75*G03X151765Y7620I1270J0D01*G01* +X139065Y12700D02*Y7620D01* +X141605Y12700D02*Y7620D01* +X139065D02*G75*G03X141605Y7620I1270J0D01*G01* +Y12700D02*G75*G03X139065Y12700I-1270J0D01*G01* +X155575Y13589D02*X156845D01* +X156210Y14224D02*Y12954D01* +Y13970D02*G75*G03X156210Y13970I0J2540D01*G01* +X147320Y12700D02*Y7620D01* +X144780Y12700D02*Y7620D01* +X147320Y12700D02*G75*G03X144780Y12700I-1270J0D01*G01* +Y7620D02*G75*G03X147320Y7620I1270J0D01*G01* +X55880Y83820D02*X66040D01* +Y93980D02*Y83820D01* +X55880Y93980D02*X66040D01* +X55880Y87630D02*Y83820D01* +Y93980D02*Y90170D01* +Y87630D02*G75*G03X55880Y90170I0J1270D01*G01* +X75311Y92075D02*Y90805D01* +X74676Y91440D02*X75946D01* +X74930D02*G75*G03X74930Y91440I-2540J0D01*G01* +X79375Y94361D02*X80645D01* +X80010Y94996D02*Y93726D01* +Y93980D02*G75*G03X80010Y93980I0J-2540D01*G01* +X87630D02*Y91440D01* +Y86360D02*Y83820D01* +X88468Y91440D02*Y86360D01* +X86792D02*X88468D01* +X86792Y91440D02*Y86360D01* +Y91440D02*X88468D01* +X107950Y80010D02*Y77470D01* +Y72390D02*Y69850D01* +X108788Y77470D02*Y72390D01* +X107112D02*X108788D01* +X107112Y77470D02*Y72390D01* +Y77470D02*X108788D01* +X69850Y69850D02*X90170D01* +Y80010D02*Y69850D01* +X69850Y80010D02*X90170D01* +X69850Y73660D02*Y69850D01* +Y80010D02*Y76200D01* +Y73660D02*G75*G03X69850Y76200I0J1270D01*G01* +X90373Y67716D02*Y64364D01* +X93777D02*X90373Y66040D01* +X93777Y67716D02*Y64364D01* +X90373Y66040D02*X93777Y67716D01* +Y66040D02*X97155D01* +X86995D02*X90373D01* +X93345Y69850D02*X103505D01* +Y80010D02*Y69850D01* +X93345Y80010D02*X103505D01* +X93345Y73660D02*Y69850D01* +Y80010D02*Y76200D01* +Y73660D02*G75*G03X93345Y76200I0J1270D01*G01* +X116840Y93980D02*Y91440D01* +Y86360D02*Y83820D01* +X117678Y91440D02*Y86360D01* +X116002D02*X117678D01* +X116002Y91440D02*Y86360D01* +Y91440D02*X117678D01* +X107950Y86360D02*Y83820D01* +Y93980D02*Y91440D01* +X107112D02*Y86360D01* +Y91440D02*X108788D01* +Y86360D01* +X107112D02*X108788D01* +X112395D02*Y83820D01* +Y93980D02*Y91440D01* +X111557D02*Y86360D01* +Y91440D02*X113233D01* +Y86360D01* +X111557D02*X113233D01* +X112395Y80010D02*Y77470D01* +Y72390D02*Y69850D01* +X113233Y77470D02*Y72390D01* +X111557D02*X113233D01* +X111557Y77470D02*Y72390D01* +Y77470D02*X113233D01* +X93345Y83820D02*X103505D01* +Y93980D02*Y83820D01* +X93345Y93980D02*X103505D01* +X93345Y87630D02*Y83820D01* +Y93980D02*Y90170D01* +Y87630D02*G75*G03X93345Y90170I0J1270D01*G01* +X77724Y85090D02*X76454D01* +X77089Y85725D02*Y84455D01* +X77470Y85090D02*G75*G03X77470Y85090I2540J0D01*G01* +X153670Y66040D02*X156210D01* +X146050D02*X148590D01* +Y65202D02*X153670D01* +X148590Y66878D02*Y65202D01* +Y66878D02*X153670D01* +Y65202D01* +X139065Y66040D02*X141605D01* +X131445D02*X133985D01* +Y65202D02*X139065D01* +X133985Y66878D02*Y65202D01* +Y66878D02*X139065D01* +Y65202D01* +X156083Y27940D02*X157099D01* +X134239Y28448D02*Y27432D01* +X133731Y27940D02*X134747D01* +X135255D02*G75*G03X135255Y27940I10160J0D01*G01* +G54D91*X113030Y60960D02*Y46990D01* +X111760Y60960D02*X113030D01* +X111760D02*Y46990D01* +X106680D02*X111760D01* +X106680Y60960D02*Y46990D01* +X105410Y60960D02*X106680D01* +X105410D02*Y44450D01* +X113030Y46990D02*X124460D01* +Y60960D02*Y46990D01* +Y60960D02*X125730D01* +Y46990D01* +X130810D01* +Y60960D02*Y46990D01* +Y60960D02*X132080D01* +Y44450D01* +X105410D02*X132080D01* +X113665Y47752D02*X123825D01* +X113665Y52324D02*Y47752D01* +Y52324D02*X123825D01* +Y47752D01* +X113665D02*X123825D01* +X113665Y49276D02*Y47752D01* +Y49276D02*X123825D01* +Y47752D01* +G54D92*X120523Y49276D02*Y47752D01* +X116967Y49276D02*Y47752D01* +G54D91*X113030Y41910D02*Y27940D01* +X111760Y41910D02*X113030D01* +X111760D02*Y27940D01* +X106680D02*X111760D01* +X106680Y41910D02*Y27940D01* +X105410Y41910D02*X106680D01* +X105410D02*Y25400D01* +X113030Y27940D02*X124460D01* +Y41910D02*Y27940D01* +Y41910D02*X125730D01* +Y27940D01* +X130810D01* +Y41910D02*Y27940D01* +Y41910D02*X132080D01* +Y25400D01* +X105410D02*X132080D01* +G54D92*X123825Y97790D02*X128905D01* +X123825Y95250D02*X128905D01* +X123825Y97790D02*G75*G03X123825Y95250I0J-1270D01*G01* +X128905D02*G75*G03X128905Y97790I0J1270D01*G01* +X118110Y77470D02*Y72390D01* +X115570Y77470D02*Y72390D01* +X118110Y77470D02*G75*G03X115570Y77470I-1270J0D01*G01* +Y72390D02*G75*G03X118110Y72390I1270J0D01*G01* +X156083Y52705D02*X157099D01* +X134239Y53213D02*Y52197D01* +X133731Y52705D02*X134747D01* +X135255D02*G75*G03X135255Y52705I10160J0D01*G01* +X149225Y97790D02*X154305D01* +X149225Y95250D02*X154305D01* +X149225Y97790D02*G75*G03X149225Y95250I0J-1270D01*G01* +X154305D02*G75*G03X154305Y97790I0J1270D01*G01* +X142875Y86360D02*Y83820D01* +Y93980D02*Y91440D01* +X142037D02*Y86360D01* +Y91440D02*X143713D01* +Y86360D01* +X142037D02*X143713D01* +X146685Y83820D02*X156845D01* +Y93980D02*Y83820D01* +X146685Y93980D02*X156845D01* +X146685Y87630D02*Y83820D01* +Y93980D02*Y90170D01* +Y87630D02*G75*G03X146685Y90170I0J1270D01*G01* +X116840Y66040D02*X119380D01* +X124460D02*X127000D01* +X119380Y66878D02*X124460D01* +Y65202D01* +X119380D02*X124460D01* +X119380Y66878D02*Y65202D01* +X139065Y86360D02*Y83820D01* +Y93980D02*Y91440D01* +X138227D02*Y86360D01* +Y91440D02*X139903D01* +Y86360D01* +X138227D02*X139903D01* +X121285Y69850D02*X156845D01* +Y80010D02*Y69850D01* +X121285Y80010D02*X156845D01* +X121285Y73660D02*Y69850D01* +Y80010D02*Y76200D01* +Y73660D02*G75*G03X121285Y76200I0J1270D01*G01* +Y83820D02*X131445D01* +Y93980D02*Y83820D01* +X121285Y93980D02*X131445D01* +X121285Y87630D02*Y83820D01* +Y93980D02*Y90170D01* +Y87630D02*G75*G03X121285Y90170I0J1270D01*G01* +X135255Y93980D02*Y91440D01* +Y86360D02*Y83820D01* +X136093Y91440D02*Y86360D01* +X134417D02*X136093D01* +X134417Y91440D02*Y86360D01* +Y91440D02*X136093D01* +X45085Y97790D02*X50165D01* +X45085Y95250D02*X50165D01* +X45085Y97790D02*G75*G03X45085Y95250I0J-1270D01*G01* +X50165D02*G75*G03X50165Y97790I0J1270D01*G01* +X58420D02*X63500D01* +X58420Y95250D02*X63500D01* +X58420Y97790D02*G75*G03X58420Y95250I0J-1270D01*G01* +X63500D02*G75*G03X63500Y97790I0J1270D01*G01* +X45085Y92075D02*X50165D01* +X45085Y89535D02*X50165D01* +X45085Y92075D02*G75*G03X45085Y89535I0J-1270D01*G01* +X50165D02*G75*G03X50165Y92075I0J1270D01*G01* +X68834Y85090D02*X70104D01* +X69469Y85725D02*Y84455D01* +X69850Y85090D02*G75*G03X69850Y85090I2540J0D01*G01* +X74676Y66675D02*Y65405D01* +X74041Y66040D02*X75311D01* +X74295D02*G75*G03X74295Y66040I-2540J0D01*G01* +X59309D02*X60579D01* +X59944Y66675D02*Y65405D01* +X60325Y66040D02*G75*G03X60325Y66040I2540J0D01*G01* +X59309Y59690D02*X60579D01* +X59944Y60325D02*Y59055D01* +X60325Y59690D02*G75*G03X60325Y59690I2540J0D01*G01* +X51867Y61366D02*Y58014D01* +X48463Y61366D02*X51867Y59690D01* +X48463Y61366D02*Y58014D01* +X51867Y59690D02*X48463Y58014D01* +X45085Y59690D02*X48463D01* +X51867D02*X55245D01* +X52705Y66878D02*Y65202D01* +X47625Y66878D02*X52705D01* +X47625D02*Y65202D01* +X52705D01* +X45085Y66040D02*X47625D01* +X52705D02*X55245D01* +X43815Y77470D02*Y72390D01* +X46355Y77470D02*Y72390D01* +X43815D02*G75*G03X46355Y72390I1270J0D01*G01* +Y77470D02*G75*G03X43815Y77470I-1270J0D01*G01* +X46609Y85090D02*X47879D01* +X47244Y85725D02*Y84455D01* +X47625Y85090D02*G75*G03X47625Y85090I2540J0D01*G01* +X48260Y80010D02*Y76200D01* +Y73660D02*Y69850D01* +Y80010D02*X66040D01* +Y69850D01* +X48260D02*X66040D01* +X48260Y73660D02*G75*G03X48260Y76200I0J1270D01*G01* +G54D91*X171450Y102870D02*X11430D01* +X171450Y2870D02*Y102870D01* +X11430Y2870D02*X171450D01* +X11430Y102870D02*Y2870D01* +G54D92*X109220Y66040D02*X111760D01* +X101600D02*X104140D01* +Y65202D02*X109220D01* +X104140Y66878D02*Y65202D01* +Y66878D02*X109220D01* +Y65202D01* +G54D91*X113665Y28702D02*X123825D01* +X113665Y33274D02*Y28702D01* +Y33274D02*X123825D01* +Y28702D01* +X113665D02*X123825D01* +X113665Y30226D02*Y28702D01* +Y30226D02*X123825D01* +Y28702D01* +G54D92*X120523Y30226D02*Y28702D01* +X116967Y30226D02*Y28702D01* +G54D91*X81280Y47752D02*X91440D01* +X81280Y52324D02*Y47752D01* +Y52324D02*X91440D01* +Y47752D01* +X81280D02*X91440D01* +X81280Y49276D02*Y47752D01* +Y49276D02*X91440D01* +Y47752D01* +G54D92*X88138Y49276D02*Y47752D01* +X84582Y49276D02*Y47752D01* +G54D91*X173863Y97155D02*X178435D01* +Y8255D01* +X173863D02*X178435D01* +X168148Y94107D02*Y11303D01* +X165735Y94107D02*X168148D01* +G54D92*X173863D01* +Y97155D02*Y94107D01* +G54D91*Y99695D02*Y97155D01* +X165735Y99695D02*X173863D01* +X165735D02*Y94107D01* +Y5715D02*X173863D01* +Y8255D02*Y5715D01* +G54D92*Y11303D02*Y8255D01* +X168148Y11303D02*X173863D01* +G54D91*X165735D02*X168148D01* +X165735D02*Y5715D01* +G54D93*X160655Y92075D02*X167640D01* +X160655Y89535D02*X167640D01* +X160655Y86995D02*X167640D01* +X160655Y84455D02*X167640D01* +X160655Y81915D02*X167640D01* +X160655Y79375D02*X167640D01* +X160655Y76835D02*X167640D01* +X160655Y74295D02*X167640D01* +X160655Y71755D02*X167640D01* +X160655Y69215D02*X167640D01* +X160655Y66675D02*X167640D01* +X160655Y64135D02*X167640D01* +X160655Y61595D02*X167640D01* +X160655Y59055D02*X167640D01* +X160655Y56515D02*X167640D01* +X160655Y53975D02*X167640D01* +X160655Y51435D02*X167640D01* +X160655Y48895D02*X167640D01* +X160655Y46355D02*X167640D01* +X160655Y43815D02*X167640D01* +X160655Y41275D02*X167640D01* +X160655Y38735D02*X167640D01* +X160655Y36195D02*X167640D01* +X160655Y33655D02*X167640D01* +X160655Y31115D02*X167640D01* +X160655Y28575D02*X167640D01* +X160655Y26035D02*X167640D01* +X160655Y23495D02*X167640D01* +X160655Y20955D02*X167640D01* +X160655Y18415D02*X167640D01* +X160655Y15875D02*X167640D01* +X160655Y13335D02*X167640D01* +G54D91*X81280Y28702D02*X91440D01* +X81280Y33274D02*Y28702D01* +Y33274D02*X91440D01* +Y28702D01* +X81280D02*X91440D01* +X81280Y30226D02*Y28702D01* +Y30226D02*X91440D01* +Y28702D01* +G54D92*X88138Y30226D02*Y28702D01* +X84582Y30226D02*Y28702D01* +G54D91*X81280Y9652D02*X91440D01* +X81280Y14224D02*Y9652D01* +Y14224D02*X91440D01* +Y9652D01* +X81280D02*X91440D01* +X81280Y11176D02*Y9652D01* +Y11176D02*X91440D01* +Y9652D01* +G54D92*X88138Y11176D02*Y9652D01* +X84582Y11176D02*Y9652D01* +G54D91*X80645Y41910D02*Y27940D01* +X79375Y41910D02*X80645D01* +X79375D02*Y27940D01* +X74295D02*X79375D01* +X74295Y41910D02*Y27940D01* +X73025Y41910D02*X74295D01* +X73025D02*Y25400D01* +X80645Y27940D02*X92075D01* +Y41910D02*Y27940D01* +Y41910D02*X93345D01* +Y27940D01* +X98425D01* +Y41910D02*Y27940D01* +Y41910D02*X99695D01* +Y25400D01* +X73025D02*X99695D01* +X80645Y60960D02*Y46990D01* +X79375Y60960D02*X80645D01* +X79375D02*Y46990D01* +X74295D02*X79375D01* +X74295Y60960D02*Y46990D01* +X73025Y60960D02*X74295D01* +X73025D02*Y44450D01* +X80645Y46990D02*X92075D01* +Y60960D02*Y46990D01* +Y60960D02*X93345D01* +Y46990D01* +X98425D01* +Y60960D02*Y46990D01* +Y60960D02*X99695D01* +Y44450D01* +X73025D02*X99695D01* +G54D92*X95885Y97790D02*X100965D01* +X95885Y95250D02*X100965D01* +X95885Y97790D02*G75*G03X95885Y95250I0J-1270D01*G01* +X100965D02*G75*G03X100965Y97790I0J1270D01*G01* +X48463Y51206D02*Y47854D01* +X51867D02*X48463Y49530D01* +X51867Y51206D02*Y47854D01* +X48463Y49530D02*X51867Y51206D01* +Y49530D02*X55245D01* +X45085D02*X48463D01* +X51867Y29616D02*Y26264D01* +X48463Y29616D02*X51867Y27940D01* +X48463Y29616D02*Y26264D01* +X51867Y27940D02*X48463Y26264D01* +X45085Y27940D02*X48463D01* +X51867D02*X55245D01* +X59309D02*X60579D01* +X59944Y28575D02*Y27305D01* +X60325Y27940D02*G75*G03X60325Y27940I2540J0D01*G01* +X59309Y34290D02*X60579D01* +X59944Y34925D02*Y33655D01* +X60325Y34290D02*G75*G03X60325Y34290I2540J0D01*G01* +X82931Y66675D02*Y65405D01* +X82296Y66040D02*X83566D01* +X82550D02*G75*G03X82550Y66040I-2540J0D01*G01* +X52705Y35128D02*Y33452D01* +X47625Y35128D02*X52705D01* +X47625D02*Y33452D01* +X52705D01* +X45085Y34290D02*X47625D01* +X52705D02*X55245D01* +X61595Y55448D02*Y53772D01* +X66675D01* +Y55448D02*Y53772D01* +X61595Y55448D02*X66675D01* +Y54610D02*X69215D01* +X59055D02*X61595D01* +X62433Y51206D02*Y47854D01* +X65837D02*X62433Y49530D01* +X65837Y51206D02*Y47854D01* +X62433Y49530D02*X65837Y51206D01* +Y49530D02*X69215D01* +X59055D02*X62433D01* +X52705Y45288D02*Y43612D01* +X47625Y45288D02*X52705D01* +X47625D02*Y43612D01* +X52705D01* +X45085Y44450D02*X47625D01* +X52705D02*X55245D01* +X66675Y45288D02*Y43612D01* +X61595Y45288D02*X66675D01* +X61595D02*Y43612D01* +X66675D01* +X59055Y44450D02*X61595D01* +X66675D02*X69215D01* +X62433Y41046D02*Y37694D01* +X65837D02*X62433Y39370D01* +X65837Y41046D02*Y37694D01* +X62433Y39370D02*X65837Y41046D01* +Y39370D02*X69215D01* +X59055D02*X62433D01* +X48463Y41046D02*Y37694D01* +X51867D02*X48463Y39370D01* +X51867Y41046D02*Y37694D01* +X48463Y39370D02*X51867Y41046D01* +Y39370D02*X55245D01* +X45085D02*X48463D01* +X48260Y24130D02*Y20320D01* +Y17780D02*Y13970D01* +Y24130D02*X66040D01* +Y13970D01* +X48260D02*X66040D01* +X48260Y17780D02*G75*G03X48260Y20320I0J1270D01*G01* +X43815Y21590D02*Y16510D01* +X46355Y21590D02*Y16510D01* +X43815D02*G75*G03X46355Y16510I1270J0D01*G01* +Y21590D02*G75*G03X43815Y21590I-1270J0D01*G01* +X47625Y55448D02*Y53772D01* +X52705D01* +Y55448D02*Y53772D01* +X47625Y55448D02*X52705D01* +Y54610D02*X55245D01* +X45085D02*X47625D01* +X15875Y47168D02*G75*G03X15875Y47168I0J2997D01*G01* +Y46660D02*G75*G03X15875Y46660I0J3505D01*G01* +X15875Y28118D02*G75*G03X15875Y28118I0J2997D01*G01* +Y27610D02*G75*G03X15875Y27610I0J3505D01*G01* +X15875Y37643D02*G75*G03X15875Y37643I0J2997D01*G01* +Y37135D02*G75*G03X15875Y37135I0J3505D01*G01* +G54D91*X2134Y19101D02*X11430Y18847D01* +X2134Y22098D02*Y19101D01* +X11430Y22352D02*X2134Y22098D01* +X14935Y24105D02*Y17094D01* +X11430D02*X17983D01* +X11430Y24105D02*Y17094D01* +Y24105D02*X17983D01* +X17780Y68428D02*X13208D01* +X17780Y71196D02*X13208D01* +X17780Y73965D02*X13208D01* +X17780Y76733D02*X13208D01* +X20320Y67031D02*X13208D01* +X20320Y69799D02*X13208D01* +X20320Y72568D02*X13208D01* +X20320Y75336D02*X13208D01* +X20320Y78105D02*X13208D01* +G54D92*X8128Y62967D02*Y82169D01* +G54D91*X13208Y62967D02*X8128D01* +X13208Y82169D02*Y62967D01* +X8128Y82169D02*X13208D01* +X508Y64491D02*Y80645D01* +X7366Y64491D02*X508D01* +G54D92*X7366Y80645D02*Y64491D01* +G54D91*X508Y80645D02*X7366D01* +G54D92*Y61697D02*X8128D01* +X7366Y58649D02*X8128D01* +X7366Y83439D02*X8128D01* +X7366Y86487D02*X8128D01* +X7366Y57125D02*Y88011D01* +X8128Y57125D02*X7366D01* +X8128Y88011D02*Y57125D01* +X7366Y88011D02*X8128D01* +G54D90*X18897Y34978D02*Y33962D01* +X19278Y34978D02*X19405Y34851D01* +Y34089D01* +X19278Y33962D02*X19405Y34089D01* +X18770Y33962D02*X19278D01* +X18770Y34978D02*X19278D01* +X19837Y33962D02*X20091D01* +X19964Y34978D02*Y33962D01* +X19710Y34724D02*X19964Y34978D01* +X16967Y20345D02*X17094Y20218D01* +X16586Y20345D02*X16967D01* +X16459Y20218D02*X16586Y20345D01* +X16459Y20218D02*Y19964D01* +X16586Y19837D01* +X16967D01* +X17094Y19710D01* +Y19456D01* +X16967Y19329D02*X17094Y19456D01* +X16586Y19329D02*X16967D01* +X16459Y19456D02*X16586Y19329D01* +X17526D02*X17780D01* +X17653Y20345D02*Y19329D01* +X17399Y20091D02*X17653Y20345D01* +X43767Y23495D02*X44148D01* +X43640Y23622D02*X43767Y23495D01* +X43640Y24384D02*Y23622D01* +Y24384D02*X43767Y24511D01* +X44148D01* +X44453Y24384D02*X44580Y24511D01* +X44961D01* +X45088Y24384D01* +Y24130D01* +X44453Y23495D02*X45088Y24130D01* +X44453Y23495D02*X45088D01* +X45392Y24003D02*X45900Y24511D01* +X45392Y24003D02*X46027D01* +X45900Y24511D02*Y23495D01* +X52217Y30362D02*Y29346D01* +X52598Y30362D02*X52725Y30235D01* +Y29473D01* +X52598Y29346D02*X52725Y29473D01* +X52090Y29346D02*X52598D01* +X52090Y30362D02*X52598D01* +X53410D02*X53537Y30235D01* +X53156Y30362D02*X53410D01* +X53029Y30235D02*X53156Y30362D01* +X53029Y30235D02*Y29473D01* +X53156Y29346D01* +X53410Y29854D02*X53537Y29727D01* +X53029Y29854D02*X53410D01* +X53156Y29346D02*X53410D01* +X53537Y29473D01* +Y29727D02*Y29473D01* +X64897Y29845D02*X65278D01* +X64770Y29972D02*X64897Y29845D01* +X64770Y30734D02*Y29972D01* +Y30734D02*X64897Y30861D01* +X65278D01* +X65583Y30734D02*X65710Y30861D01* +X66091D01* +X66218Y30734D01* +Y30480D01* +X65583Y29845D02*X66218Y30480D01* +X65583Y29845D02*X66218D01* +X66523Y30861D02*X67031D01* +X66523D02*Y30353D01* +X66650Y30480D01* +X66904D01* +X67031Y30353D01* +Y29972D01* +X66904Y29845D02*X67031Y29972D01* +X66650Y29845D02*X66904D01* +X66523Y29972D02*X66650Y29845D01* +X85870Y26864D02*Y26102D01* +Y26864D02*X85997Y26991D01* +X86251D01* +X86378Y26864D01* +Y26102D01* +X86251Y25975D02*X86378Y26102D01* +X85997Y25975D02*X86251D01* +X85870Y26102D02*X85997Y25975D01* +X86124Y26229D02*X86378Y25975D01* +X86683Y26483D02*X87191Y26991D01* +X86683Y26483D02*X87318D01* +X87191Y26991D02*Y25975D01* +X118485Y7914D02*Y7152D01* +Y7914D02*X118612Y8041D01* +X118866D01* +X118993Y7914D01* +Y7152D01* +X118866Y7025D02*X118993Y7152D01* +X118612Y7025D02*X118866D01* +X118485Y7152D02*X118612Y7025D01* +X118739Y7279D02*X118993Y7025D01* +X119425D02*X119679D01* +X119552Y8041D02*Y7025D01* +X119298Y7787D02*X119552Y8041D01* +X85870Y8041D02*Y7152D01* +X85997Y7025D01* +X86251D01* +X86378Y7152D01* +Y8041D02*Y7152D01* +X86810Y7025D02*X87064D01* +X86937Y8041D02*Y7025D01* +X86683Y7787D02*X86937Y8041D01* +X118350Y26864D02*Y26102D01* +Y26864D02*X118477Y26991D01* +X118731D01* +X118858Y26864D01* +Y26102D01* +X118731Y25975D02*X118858Y26102D01* +X118477Y25975D02*X118731D01* +X118350Y26102D02*X118477Y25975D01* +X118604Y26229D02*X118858Y25975D01* +X119163Y26991D02*X119671D01* +X119163D02*Y26483D01* +X119290Y26610D01* +X119544D01* +X119671Y26483D01* +Y26102D01* +X119544Y25975D02*X119671Y26102D01* +X119290Y25975D02*X119544D01* +X119163Y26102D02*X119290Y25975D01* +X158352Y11320D02*X158733D01* +X158225Y11447D02*X158352Y11320D01* +X158225Y12209D02*Y11447D01* +Y12209D02*X158352Y12336D01* +X158733D01* +X159165Y11320D02*X159419D01* +X159292Y12336D02*Y11320D01* +X159038Y12082D02*X159292Y12336D01* +X158537Y19000D02*X158918D01* +X158410Y19127D02*X158537Y19000D01* +X158410Y19889D02*Y19127D01* +Y19889D02*X158537Y20016D01* +X158918D01* +X159223Y19889D02*X159350Y20016D01* +X159604D01* +X159731Y19889D01* +Y19127D01* +X159604Y19000D02*X159731Y19127D01* +X159350Y19000D02*X159604D01* +X159223Y19127D02*X159350Y19000D01* +Y19508D02*X159731D01* +X149710Y14572D02*X150091D01* +X149583Y14699D02*X149710Y14572D01* +X149583Y15461D02*Y14699D01* +Y15461D02*X149710Y15588D01* +X150091D01* +X150396Y15461D02*X150523Y15588D01* +X150904D01* +X151031Y15461D01* +Y15207D01* +X150396Y14572D02*X151031Y15207D01* +X150396Y14572D02*X151031D01* +X145480Y14287D02*X145861D01* +X145353Y14414D02*X145480Y14287D01* +X145353Y15176D02*Y14414D01* +Y15176D02*X145480Y15303D01* +X145861D01* +X146547D02*X146674Y15176D01* +X146293Y15303D02*X146547D01* +X146166Y15176D02*X146293Y15303D01* +X146166Y15176D02*Y14414D01* +X146293Y14287D01* +X146547Y14795D02*X146674Y14668D01* +X146166Y14795D02*X146547D01* +X146293Y14287D02*X146547D01* +X146674Y14414D01* +Y14668D02*Y14414D01* +X144272Y27305D02*X144653D01* +X144145Y27432D02*X144272Y27305D01* +X144145Y28194D02*Y27432D01* +Y28194D02*X144272Y28321D01* +X144653D01* +X144958Y28194D02*X145085Y28321D01* +X145466D01* +X145593Y28194D01* +Y27940D01* +X144958Y27305D02*X145593Y27940D01* +X144958Y27305D02*X145593D01* +X145898Y28194D02*X146025Y28321D01* +X146406D01* +X146533Y28194D01* +Y27940D01* +X145898Y27305D02*X146533Y27940D01* +X145898Y27305D02*X146533D01* +X139627Y14365D02*X140008D01* +X139500Y14492D02*X139627Y14365D01* +X139500Y15254D02*Y14492D01* +Y15254D02*X139627Y15381D01* +X140008D01* +X140313Y14873D02*X140821Y15381D01* +X140313Y14873D02*X140948D01* +X140821Y15381D02*Y14365D01* +X50800Y19304D02*Y18415D01* +X50927Y18288D01* +X51181D01* +X51308Y18415D01* +Y19304D02*Y18415D01* +X51740Y18288D02*X51994D01* +X51867Y19304D02*Y18288D01* +X51613Y19050D02*X51867Y19304D01* +X52299Y18415D02*X52426Y18288D01* +X52299Y19177D02*Y18415D01* +Y19177D02*X52426Y19304D01* +X52680D01* +X52807Y19177D01* +Y18415D01* +X52680Y18288D02*X52807Y18415D01* +X52426Y18288D02*X52680D01* +X52299Y18542D02*X52807Y19050D01* +X18907Y54018D02*Y53002D01* +X19288Y54018D02*X19415Y53891D01* +Y53129D01* +X19288Y53002D02*X19415Y53129D01* +X18780Y53002D02*X19288D01* +X18780Y54018D02*X19288D01* +X19720Y53891D02*X19847Y54018D01* +X20101D01* +X20228Y53891D01* +Y53129D01* +X20101Y53002D02*X20228Y53129D01* +X19847Y53002D02*X20101D01* +X19720Y53129D02*X19847Y53002D01* +Y53510D02*X20228D01* +X19152Y44748D02*Y43732D01* +X19533Y44748D02*X19660Y44621D01* +Y43859D01* +X19533Y43732D02*X19660Y43859D01* +X19025Y43732D02*X19533D01* +X19025Y44748D02*X19533D01* +X19965Y44621D02*X20092Y44748D01* +X20473D01* +X20600Y44621D01* +Y44367D01* +X19965Y43732D02*X20600Y44367D01* +X19965Y43732D02*X20600D01* +X52502Y62352D02*Y61336D01* +X52883Y62352D02*X53010Y62225D01* +Y61463D01* +X52883Y61336D02*X53010Y61463D01* +X52375Y61336D02*X52883D01* +X52375Y62352D02*X52883D01* +X53315D02*X53823D01* +X53315D02*Y61844D01* +X53442Y61971D01* +X53696D01* +X53823Y61844D01* +Y61463D01* +X53696Y61336D02*X53823Y61463D01* +X53442Y61336D02*X53696D01* +X53315Y61463D02*X53442Y61336D01* +X52918Y68250D02*X53426D01* +X53553Y68123D01* +Y67869D01* +X53426Y67742D02*X53553Y67869D01* +X53045Y67742D02*X53426D01* +X53045Y68250D02*Y67234D01* +Y67742D02*X53553Y67234D01* +X53985D02*X54239D01* +X54112Y68250D02*Y67234D01* +X53858Y67996D02*X54112Y68250D01* +X54543Y67742D02*X55051Y68250D01* +X54543Y67742D02*X55178D01* +X55051Y68250D02*Y67234D01* +X44402Y79375D02*X44783D01* +X44275Y79502D02*X44402Y79375D01* +X44275Y80264D02*Y79502D01* +Y80264D02*X44402Y80391D01* +X44783D01* +X45088Y80264D02*X45215Y80391D01* +X45596D01* +X45723Y80264D01* +Y80010D01* +X45088Y79375D02*X45723Y80010D01* +X45088Y79375D02*X45723D01* +X46028Y79502D02*X46155Y79375D01* +X46028Y80264D02*Y79502D01* +Y80264D02*X46155Y80391D01* +X46409D01* +X46536Y80264D01* +Y79502D01* +X46409Y79375D02*X46536Y79502D01* +X46155Y79375D02*X46409D01* +X46028Y79629D02*X46536Y80137D01* +X50800Y75184D02*Y74295D01* +X50927Y74168D01* +X51181D01* +X51308Y74295D01* +Y75184D02*Y74295D01* +X51613Y74168D02*X52121Y74676D01* +Y75057D02*Y74676D01* +X51994Y75184D02*X52121Y75057D01* +X51740Y75184D02*X51994D01* +X51613Y75057D02*X51740Y75184D01* +X51613Y75057D02*Y74803D01* +X51740Y74676D01* +X52121D01* +X64982Y61660D02*X65363D01* +X64855Y61787D02*X64982Y61660D01* +X64855Y62549D02*Y61787D01* +Y62549D02*X64982Y62676D01* +X65363D01* +X65668Y62549D02*X65795Y62676D01* +X66176D01* +X66303Y62549D01* +Y62295D01* +X65668Y61660D02*X66303Y62295D01* +X65668Y61660D02*X66303D01* +X66734D02*X66988D01* +X66861Y62676D02*Y61660D01* +X66607Y62422D02*X66861Y62676D01* +X66562Y51662D02*Y50646D01* +X66943Y51662D02*X67070Y51535D01* +Y50773D01* +X66943Y50646D02*X67070Y50773D01* +X66435Y50646D02*X66943D01* +X66435Y51662D02*X66943D01* +X67375Y50773D02*X67502Y50646D01* +X67375Y51027D02*Y50773D01* +Y51027D02*X67502Y51154D01* +X67756D01* +X67883Y51027D01* +Y50773D01* +X67756Y50646D02*X67883Y50773D01* +X67502Y50646D02*X67756D01* +X67375Y51281D02*X67502Y51154D01* +X67375Y51535D02*Y51281D01* +Y51535D02*X67502Y51662D01* +X67756D01* +X67883Y51535D01* +Y51281D01* +X67756Y51154D02*X67883Y51281D01* +X14852Y79926D02*X15233D01* +Y79037D01* +X15106Y78910D02*X15233Y79037D01* +X14979Y78910D02*X15106D01* +X14852Y79037D02*X14979Y78910D01* +X15665D02*X15919D01* +X15792Y79926D02*Y78910D01* +X15538Y79672D02*X15792Y79926D01* +X52518Y46900D02*X53026D01* +X53153Y46773D01* +Y46519D01* +X53026Y46392D02*X53153Y46519D01* +X52645Y46392D02*X53026D01* +X52645Y46900D02*Y45884D01* +Y46392D02*X53153Y45884D01* +X53585D02*X53839D01* +X53712Y46900D02*Y45884D01* +X53458Y46646D02*X53712Y46900D01* +X54143Y46011D02*X54270Y45884D01* +X54143Y46265D02*Y46011D01* +Y46265D02*X54270Y46392D01* +X54524D01* +X54651Y46265D01* +Y46011D01* +X54524Y45884D02*X54651Y46011D01* +X54270Y45884D02*X54524D01* +X54143Y46519D02*X54270Y46392D01* +X54143Y46773D02*Y46519D01* +Y46773D02*X54270Y46900D01* +X54524D01* +X54651Y46773D01* +Y46519D01* +X54524Y46392D02*X54651Y46519D01* +X52457Y41423D02*Y40407D01* +X52838Y41423D02*X52965Y41296D01* +Y40534D01* +X52838Y40407D02*X52965Y40534D01* +X52330Y40407D02*X52838D01* +X52330Y41423D02*X52838D01* +X53269Y40407D02*X53777Y40915D01* +Y41296D02*Y40915D01* +X53650Y41423D02*X53777Y41296D01* +X53396Y41423D02*X53650D01* +X53269Y41296D02*X53396Y41423D01* +X53269Y41296D02*Y41042D01* +X53396Y40915D01* +X53777D01* +X52518Y57150D02*X53026D01* +X53153Y57023D01* +Y56769D01* +X53026Y56642D02*X53153Y56769D01* +X52645Y56642D02*X53026D01* +X52645Y57150D02*Y56134D01* +Y56642D02*X53153Y56134D01* +X53585D02*X53839D01* +X53712Y57150D02*Y56134D01* +X53458Y56896D02*X53712Y57150D01* +X54525D02*X54652Y57023D01* +X54271Y57150D02*X54525D01* +X54144Y57023D02*X54271Y57150D01* +X54144Y57023D02*Y56261D01* +X54271Y56134D01* +X54525Y56642D02*X54652Y56515D01* +X54144Y56642D02*X54525D01* +X54271Y56134D02*X54525D01* +X54652Y56261D01* +Y56515D02*Y56261D01* +X52592Y51673D02*Y50657D01* +X52973Y51673D02*X53100Y51546D01* +Y50784D01* +X52973Y50657D02*X53100Y50784D01* +X52465Y50657D02*X52973D01* +X52465Y51673D02*X52973D01* +X53405Y50657D02*X54040Y51292D01* +Y51673D02*Y51292D01* +X53405Y51673D02*X54040D01* +X52673Y36410D02*X53181D01* +X53308Y36283D01* +Y36029D01* +X53181Y35902D02*X53308Y36029D01* +X52800Y35902D02*X53181D01* +X52800Y36410D02*Y35394D01* +Y35902D02*X53308Y35394D01* +X53740D02*X53994D01* +X53867Y36410D02*Y35394D01* +X53613Y36156D02*X53867Y36410D01* +X54299D02*X54807D01* +X54299D02*Y35902D01* +X54426Y36029D01* +X54680D01* +X54807Y35902D01* +Y35521D01* +X54680Y35394D02*X54807Y35521D01* +X54426Y35394D02*X54680D01* +X54299Y35521D02*X54426Y35394D01* +X66697Y41482D02*Y40466D01* +X67078Y41482D02*X67205Y41355D01* +Y40593D01* +X67078Y40466D02*X67205Y40593D01* +X66570Y40466D02*X67078D01* +X66570Y41482D02*X67078D01* +X67637Y40466D02*X67891D01* +X67764Y41482D02*Y40466D01* +X67510Y41228D02*X67764Y41482D01* +X68195Y40593D02*X68322Y40466D01* +X68195Y41355D02*Y40593D01* +Y41355D02*X68322Y41482D01* +X68576D01* +X68703Y41355D01* +Y40593D01* +X68576Y40466D02*X68703Y40593D01* +X68322Y40466D02*X68576D01* +X68195Y40720D02*X68703Y41228D01* +X65047Y35980D02*X65428D01* +X64920Y36107D02*X65047Y35980D01* +X64920Y36869D02*Y36107D01* +Y36869D02*X65047Y36996D01* +X65428D01* +X65733Y36869D02*X65860Y36996D01* +X66241D01* +X66368Y36869D01* +Y36615D01* +X65733Y35980D02*X66368Y36615D01* +X65733Y35980D02*X66368D01* +X66672Y36869D02*X66799Y36996D01* +X67053D01* +X67180Y36869D01* +Y36107D01* +X67053Y35980D02*X67180Y36107D01* +X66799Y35980D02*X67053D01* +X66672Y36107D02*X66799Y35980D01* +Y36488D02*X67180D01* +X65532Y67310D02*X65913D01* +X65405Y67437D02*X65532Y67310D01* +X65405Y68199D02*Y67437D01* +Y68199D02*X65532Y68326D01* +X65913D01* +X66345Y67310D02*X66599D01* +X66472Y68326D02*Y67310D01* +X66218Y68072D02*X66472Y68326D01* +X66904Y67310D02*X67412Y67818D01* +Y68199D02*Y67818D01* +X67285Y68326D02*X67412Y68199D01* +X67031Y68326D02*X67285D01* +X66904Y68199D02*X67031Y68326D01* +X66904Y68199D02*Y67945D01* +X67031Y67818D01* +X67412D01* +X153903Y68640D02*X154411D01* +X154538Y68513D01* +Y68259D01* +X154411Y68132D02*X154538Y68259D01* +X154030Y68132D02*X154411D01* +X154030Y68640D02*Y67624D01* +Y68132D02*X154538Y67624D01* +X154843Y68132D02*X155351Y68640D01* +X154843Y68132D02*X155478D01* +X155351Y68640D02*Y67624D01* +X138873Y68640D02*X139381D01* +X139508Y68513D01* +Y68259D01* +X139381Y68132D02*X139508Y68259D01* +X139000Y68132D02*X139381D01* +X139000Y68640D02*Y67624D01* +Y68132D02*X139508Y67624D01* +X139813Y68640D02*X140321D01* +X139813D02*Y68132D01* +X139940Y68259D01* +X140194D01* +X140321Y68132D01* +Y67751D01* +X140194Y67624D02*X140321Y67751D01* +X139940Y67624D02*X140194D01* +X139813Y67751D02*X139940Y67624D01* +X109353Y68775D02*X109861D01* +X109988Y68648D01* +Y68394D01* +X109861Y68267D02*X109988Y68394D01* +X109480Y68267D02*X109861D01* +X109480Y68775D02*Y67759D01* +Y68267D02*X109988Y67759D01* +X110293Y68648D02*X110420Y68775D01* +X110674D01* +X110801Y68648D01* +Y67886D01* +X110674Y67759D02*X110801Y67886D01* +X110420Y67759D02*X110674D01* +X110293Y67886D02*X110420Y67759D01* +Y68267D02*X110801D01* +X124453Y68440D02*X124961D01* +X125088Y68313D01* +Y68059D01* +X124961Y67932D02*X125088Y68059D01* +X124580Y67932D02*X124961D01* +X124580Y68440D02*Y67424D01* +Y67932D02*X125088Y67424D01* +X125393Y68313D02*X125520Y68440D01* +X125901D01* +X126028Y68313D01* +Y68059D01* +X125393Y67424D02*X126028Y68059D01* +X125393Y67424D02*X126028D01* +X82507Y67510D02*X82888D01* +X82380Y67637D02*X82507Y67510D01* +X82380Y68399D02*Y67637D01* +Y68399D02*X82507Y68526D01* +X82888D01* +X83320Y67510D02*X83574D01* +X83447Y68526D02*Y67510D01* +X83193Y68272D02*X83447Y68526D01* +X83879Y68399D02*X84006Y68526D01* +X84387D01* +X84514Y68399D01* +Y68145D01* +X83879Y67510D02*X84514Y68145D01* +X83879Y67510D02*X84514D01* +X107258Y81990D02*X107766D01* +X107893Y81863D01* +Y81609D01* +X107766Y81482D02*X107893Y81609D01* +X107385Y81482D02*X107766D01* +X107385Y81990D02*Y80974D01* +Y81482D02*X107893Y80974D01* +X108579Y81990D02*X108706Y81863D01* +X108325Y81990D02*X108579D01* +X108198Y81863D02*X108325Y81990D01* +X108198Y81863D02*Y81101D01* +X108325Y80974D01* +X108579Y81482D02*X108706Y81355D01* +X108198Y81482D02*X108579D01* +X108325Y80974D02*X108579D01* +X108706Y81101D01* +Y81355D02*Y81101D01* +X94412Y67462D02*Y66446D01* +X94793Y67462D02*X94920Y67335D01* +Y66573D01* +X94793Y66446D02*X94920Y66573D01* +X94285Y66446D02*X94793D01* +X94285Y67462D02*X94793D01* +X95225Y66954D02*X95733Y67462D01* +X95225Y66954D02*X95860D01* +X95733Y67462D02*Y66446D01* +X115862Y78895D02*X116243D01* +X115735Y79022D02*X115862Y78895D01* +X115735Y79784D02*Y79022D01* +Y79784D02*X115862Y79911D01* +X116243D01* +X116548Y79022D02*X116675Y78895D01* +X116548Y79276D02*Y79022D01* +Y79276D02*X116675Y79403D01* +X116929D01* +X117056Y79276D01* +Y79022D01* +X116929Y78895D02*X117056Y79022D01* +X116675Y78895D02*X116929D01* +X116548Y79530D02*X116675Y79403D01* +X116548Y79784D02*Y79530D01* +Y79784D02*X116675Y79911D01* +X116929D01* +X117056Y79784D01* +Y79530D01* +X116929Y79403D02*X117056Y79530D01* +X111758Y81935D02*X112266D01* +X112393Y81808D01* +Y81554D01* +X112266Y81427D02*X112393Y81554D01* +X111885Y81427D02*X112266D01* +X111885Y81935D02*Y80919D01* +Y81427D02*X112393Y80919D01* +X112698D02*X113333Y81554D01* +Y81935D02*Y81554D01* +X112698Y81935D02*X113333D01* +X96520Y75311D02*Y74422D01* +X96647Y74295D01* +X96901D01* +X97028Y74422D01* +Y75311D02*Y74422D01* +X97333Y75184D02*X97460Y75311D01* +X97841D01* +X97968Y75184D01* +Y74930D01* +X97333Y74295D02*X97968Y74930D01* +X97333Y74295D02*X97968D01* +X85870Y45814D02*Y45052D01* +Y45814D02*X85997Y45941D01* +X86251D01* +X86378Y45814D01* +Y45052D01* +X86251Y44925D02*X86378Y45052D01* +X85997Y44925D02*X86251D01* +X85870Y45052D02*X85997Y44925D01* +X86124Y45179D02*X86378Y44925D01* +X86683Y45814D02*X86810Y45941D01* +X87191D01* +X87318Y45814D01* +Y45560D01* +X86683Y44925D02*X87318Y45560D01* +X86683Y44925D02*X87318D01* +X118485Y45949D02*Y45187D01* +Y45949D02*X118612Y46076D01* +X118866D01* +X118993Y45949D01* +Y45187D01* +X118866Y45060D02*X118993Y45187D01* +X118612Y45060D02*X118866D01* +X118485Y45187D02*X118612Y45060D01* +X118739Y45314D02*X118993Y45060D01* +X119298Y45949D02*X119425Y46076D01* +X119679D01* +X119806Y45949D01* +Y45187D01* +X119679Y45060D02*X119806Y45187D01* +X119425Y45060D02*X119679D01* +X119298Y45187D02*X119425Y45060D01* +Y45568D02*X119806D01* +X123825Y75184D02*Y74295D01* +X123952Y74168D01* +X124206D01* +X124333Y74295D01* +Y75184D02*Y74295D01* +X124638Y74168D02*X125273Y74803D01* +Y75184D02*Y74803D01* +X124638Y75184D02*X125273D01* +X66638Y47105D02*X67146D01* +X67273Y46978D01* +Y46724D01* +X67146Y46597D02*X67273Y46724D01* +X66765Y46597D02*X67146D01* +X66765Y47105D02*Y46089D01* +Y46597D02*X67273Y46089D01* +X67704D02*X67958D01* +X67831Y47105D02*Y46089D01* +X67577Y46851D02*X67831Y47105D01* +X68263Y46089D02*X68771Y46597D01* +Y46978D02*Y46597D01* +X68644Y47105D02*X68771Y46978D01* +X68390Y47105D02*X68644D01* +X68263Y46978D02*X68390Y47105D01* +X68263Y46978D02*Y46724D01* +X68390Y46597D01* +X68771D01* +X66718Y57140D02*X67226D01* +X67353Y57013D01* +Y56759D01* +X67226Y56632D02*X67353Y56759D01* +X66845Y56632D02*X67226D01* +X66845Y57140D02*Y56124D01* +Y56632D02*X67353Y56124D01* +X67785D02*X68039D01* +X67912Y57140D02*Y56124D01* +X67658Y56886D02*X67912Y57140D01* +X68344Y56124D02*X68979Y56759D01* +Y57140D02*Y56759D01* +X68344Y57140D02*X68979D01* +X144907Y52070D02*X145288D01* +X144780Y52197D02*X144907Y52070D01* +X144780Y52959D02*Y52197D01* +Y52959D02*X144907Y53086D01* +X145288D01* +X145720Y52070D02*X145974D01* +X145847Y53086D02*Y52070D01* +X145593Y52832D02*X145847Y53086D01* +X146279Y52197D02*X146406Y52070D01* +X146279Y52451D02*Y52197D01* +Y52451D02*X146406Y52578D01* +X146660D01* +X146787Y52451D01* +Y52197D01* +X146660Y52070D02*X146787Y52197D01* +X146406Y52070D02*X146660D01* +X146279Y52705D02*X146406Y52578D01* +X146279Y52959D02*Y52705D01* +Y52959D02*X146406Y53086D01* +X146660D01* +X146787Y52959D01* +Y52705D01* +X146660Y52578D02*X146787Y52705D01* +X138308Y96475D02*X138816D01* +X138943Y96348D01* +Y96094D01* +X138816Y95967D02*X138943Y96094D01* +X138435Y95967D02*X138816D01* +X138435Y96475D02*Y95459D01* +Y95967D02*X138943Y95459D01* +X139248Y95586D02*X139375Y95459D01* +X139248Y95840D02*Y95586D01* +Y95840D02*X139375Y95967D01* +X139629D01* +X139756Y95840D01* +Y95586D01* +X139629Y95459D02*X139756Y95586D01* +X139375Y95459D02*X139629D01* +X139248Y96094D02*X139375Y95967D01* +X139248Y96348D02*Y96094D01* +Y96348D02*X139375Y96475D01* +X139629D01* +X139756Y96348D01* +Y96094D01* +X139629Y95967D02*X139756Y96094D01* +X150577Y98125D02*X150958D01* +X150450Y98252D02*X150577Y98125D01* +X150450Y99014D02*Y98252D01* +Y99014D02*X150577Y99141D01* +X150958D01* +X151390Y98125D02*X151644D01* +X151517Y99141D02*Y98125D01* +X151263Y98887D02*X151517Y99141D01* +X151948D02*X152456D01* +X151948D02*Y98633D01* +X152075Y98760D01* +X152329D01* +X152456Y98633D01* +Y98252D01* +X152329Y98125D02*X152456Y98252D01* +X152075Y98125D02*X152329D01* +X151948Y98252D02*X152075Y98125D01* +X162433Y96012D02*X163195D01* +Y94234D01* +X162941Y93980D02*X163195Y94234D01* +X162687Y93980D02*X162941D01* +X162433Y94234D02*X162687Y93980D01* +X163805Y95758D02*X164059Y96012D01* +X164821D01* +X165075Y95758D01* +Y95250D01* +X163805Y93980D02*X165075Y95250D01* +X163805Y93980D02*X165075D01* +X125112Y98125D02*X125493D01* +X124985Y98252D02*X125112Y98125D01* +X124985Y99014D02*Y98252D01* +Y99014D02*X125112Y99141D01* +X125493D01* +X125925Y98125D02*X126179D01* +X126052Y99141D02*Y98125D01* +X125798Y98887D02*X126052Y99141D01* +X126484Y98633D02*X126992Y99141D01* +X126484Y98633D02*X127119D01* +X126992Y99141D02*Y98125D01* +X134288Y96295D02*X134796D01* +X134923Y96168D01* +Y95914D01* +X134796Y95787D02*X134923Y95914D01* +X134415Y95787D02*X134796D01* +X134415Y96295D02*Y95279D01* +Y95787D02*X134923Y95279D01* +X135355D02*X135609D01* +X135482Y96295D02*Y95279D01* +X135228Y96041D02*X135482Y96295D01* +X135914Y95406D02*X136041Y95279D01* +X135914Y96168D02*Y95406D01* +Y96168D02*X136041Y96295D01* +X136295D01* +X136422Y96168D01* +Y95406D01* +X136295Y95279D02*X136422Y95406D01* +X136041Y95279D02*X136295D01* +X135914Y95533D02*X136422Y96041D01* +X141808Y96164D02*X142316D01* +X142443Y96037D01* +Y95783D01* +X142316Y95656D02*X142443Y95783D01* +X141935Y95656D02*X142316D01* +X141935Y96164D02*Y95148D01* +Y95656D02*X142443Y95148D01* +X142748D02*X143256Y95656D01* +Y96037D02*Y95656D01* +X143129Y96164D02*X143256Y96037D01* +X142875Y96164D02*X143129D01* +X142748Y96037D02*X142875Y96164D01* +X142748Y96037D02*Y95783D01* +X142875Y95656D01* +X143256D01* +X123825Y89281D02*Y88392D01* +X123952Y88265D01* +X124206D01* +X124333Y88392D01* +Y89281D02*Y88392D01* +X124638Y88773D02*X125146Y89281D01* +X124638Y88773D02*X125273D01* +X125146Y89281D02*Y88265D01* +X149225Y89154D02*Y88265D01* +X149352Y88138D01* +X149606D01* +X149733Y88265D01* +Y89154D02*Y88265D01* +X150038Y89027D02*X150165Y89154D01* +X150419D01* +X150546Y89027D01* +Y88265D01* +X150419Y88138D02*X150546Y88265D01* +X150165Y88138D02*X150419D01* +X150038Y88265D02*X150165Y88138D01* +Y88646D02*X150546D01* +X115788Y96380D02*X116296D01* +X116423Y96253D01* +Y95999D01* +X116296Y95872D02*X116423Y95999D01* +X115915Y95872D02*X116296D01* +X115915Y96380D02*Y95364D01* +Y95872D02*X116423Y95364D01* +X116854D02*X117108D01* +X116981Y96380D02*Y95364D01* +X116727Y96126D02*X116981Y96380D01* +X117413Y96253D02*X117540Y96380D01* +X117794D01* +X117921Y96253D01* +Y95491D01* +X117794Y95364D02*X117921Y95491D01* +X117540Y95364D02*X117794D01* +X117413Y95491D02*X117540Y95364D01* +Y95872D02*X117921D01* +X106748Y96010D02*X107256D01* +X107383Y95883D01* +Y95629D01* +X107256Y95502D02*X107383Y95629D01* +X106875Y95502D02*X107256D01* +X106875Y96010D02*Y94994D01* +Y95502D02*X107383Y94994D01* +X107815D02*X108069D01* +X107942Y96010D02*Y94994D01* +X107688Y95756D02*X107942Y96010D01* +X108501Y94994D02*X108755D01* +X108628Y96010D02*Y94994D01* +X108374Y95756D02*X108628Y96010D01* +X111308Y96145D02*X111816D01* +X111943Y96018D01* +Y95764D01* +X111816Y95637D02*X111943Y95764D01* +X111435Y95637D02*X111816D01* +X111435Y96145D02*Y95129D01* +Y95637D02*X111943Y95129D01* +X112375D02*X112629D01* +X112502Y96145D02*Y95129D01* +X112248Y95891D02*X112502Y96145D01* +X112933Y96018D02*X113060Y96145D01* +X113441D01* +X113568Y96018D01* +Y95764D01* +X112933Y95129D02*X113568Y95764D01* +X112933Y95129D02*X113568D01* +X97552Y98125D02*X97933D01* +X97425Y98252D02*X97552Y98125D01* +X97425Y99014D02*Y98252D01* +Y99014D02*X97552Y99141D01* +X97933D01* +X98238Y98125D02*X98746Y98633D01* +Y99014D02*Y98633D01* +X98619Y99141D02*X98746Y99014D01* +X98365Y99141D02*X98619D01* +X98238Y99014D02*X98365Y99141D01* +X98238Y99014D02*Y98760D01* +X98365Y98633D01* +X98746D01* +X95885Y89154D02*Y88265D01* +X96012Y88138D01* +X96266D01* +X96393Y88265D01* +Y89154D02*Y88265D01* +X96698Y89154D02*X97206D01* +X96698D02*Y88646D01* +X96825Y88773D01* +X97079D01* +X97206Y88646D01* +Y88265D01* +X97079Y88138D02*X97206Y88265D01* +X96825Y88138D02*X97079D01* +X96698Y88265D02*X96825Y88138D01* +X86693Y96465D02*X87201D01* +X87328Y96338D01* +Y96084D01* +X87201Y95957D02*X87328Y96084D01* +X86820Y95957D02*X87201D01* +X86820Y96465D02*Y95449D01* +Y95957D02*X87328Y95449D01* +X87760D02*X88014D01* +X87887Y96465D02*Y95449D01* +X87633Y96211D02*X87887Y96465D01* +X75057Y86360D02*X75438D01* +X74930Y86487D02*X75057Y86360D01* +X74930Y87249D02*Y86487D01* +Y87249D02*X75057Y87376D01* +X75438D01* +X75743Y86360D02*X76378Y86995D01* +Y87376D02*Y86995D01* +X75743Y87376D02*X76378D01* +X74612Y67455D02*X74993D01* +X74485Y67582D02*X74612Y67455D01* +X74485Y68344D02*Y67582D01* +Y68344D02*X74612Y68471D01* +X74993D01* +X75425Y67455D02*X75679D01* +X75552Y68471D02*Y67455D01* +X75298Y68217D02*X75552Y68471D01* +X76111Y67455D02*X76365D01* +X76238Y68471D02*Y67455D01* +X75984Y68217D02*X76238Y68471D01* +X72390Y75184D02*Y74295D01* +X72517Y74168D01* +X72771D01* +X72898Y74295D01* +Y75184D02*Y74295D01* +X73584Y75184D02*X73711Y75057D01* +X73330Y75184D02*X73584D01* +X73203Y75057D02*X73330Y75184D01* +X73203Y75057D02*Y74295D01* +X73330Y74168D01* +X73584Y74676D02*X73711Y74549D01* +X73203Y74676D02*X73584D01* +X73330Y74168D02*X73584D01* +X73711Y74295D01* +Y74549D02*Y74295D01* +X58420Y89154D02*Y88265D01* +X58547Y88138D01* +X58801D01* +X58928Y88265D01* +Y89154D02*Y88265D01* +X59233D02*X59360Y88138D01* +X59233Y88519D02*Y88265D01* +Y88519D02*X59360Y88646D01* +X59614D01* +X59741Y88519D01* +Y88265D01* +X59614Y88138D02*X59741Y88265D01* +X59360Y88138D02*X59614D01* +X59233Y88773D02*X59360Y88646D01* +X59233Y89027D02*Y88773D01* +Y89027D02*X59360Y89154D01* +X59614D01* +X59741Y89027D01* +Y88773D01* +X59614Y88646D02*X59741Y88773D01* +X46712Y98290D02*X47093D01* +X46585Y98417D02*X46712Y98290D01* +X46585Y99179D02*Y98417D01* +Y99179D02*X46712Y99306D01* +X47093D01* +X47398Y99179D02*X47525Y99306D01* +X47906D01* +X48033Y99179D01* +Y98925D01* +X47398Y98290D02*X48033Y98925D01* +X47398Y98290D02*X48033D01* +X48719Y99306D02*X48846Y99179D01* +X48465Y99306D02*X48719D01* +X48338Y99179D02*X48465Y99306D01* +X48338Y99179D02*Y98417D01* +X48465Y98290D01* +X48719Y98798D02*X48846Y98671D01* +X48338Y98798D02*X48719D01* +X48465Y98290D02*X48719D01* +X48846Y98417D01* +Y98671D02*Y98417D01* +X46712Y92575D02*X47093D01* +X46585Y92702D02*X46712Y92575D01* +X46585Y93464D02*Y92702D01* +Y93464D02*X46712Y93591D01* +X47093D01* +X47398Y93464D02*X47525Y93591D01* +X47906D01* +X48033Y93464D01* +Y93210D01* +X47398Y92575D02*X48033Y93210D01* +X47398Y92575D02*X48033D01* +X48338D02*X48973Y93210D01* +Y93591D02*Y93210D01* +X48338Y93591D02*X48973D01* +X60047Y98290D02*X60428D01* +X59920Y98417D02*X60047Y98290D01* +X59920Y99179D02*Y98417D01* +Y99179D02*X60047Y99306D01* +X60428D01* +X60860Y98290D02*X61114D01* +X60987Y99306D02*Y98290D01* +X60733Y99052D02*X60987Y99306D01* +X61419Y98290D02*X62054Y98925D01* +Y99306D02*Y98925D01* +X61419Y99306D02*X62054D01* +X52182Y87415D02*X52563D01* +X52055Y87542D02*X52182Y87415D01* +X52055Y88304D02*Y87542D01* +Y88304D02*X52182Y88431D01* +X52563D01* +X52995Y87415D02*X53249D01* +X53122Y88431D02*Y87415D01* +X52868Y88177D02*X53122Y88431D01* +X53935D02*X54062Y88304D01* +X53681Y88431D02*X53935D01* +X53554Y88304D02*X53681Y88431D01* +X53554Y88304D02*Y87542D01* +X53681Y87415D01* +X53935Y87923D02*X54062Y87796D01* +X53554Y87923D02*X53935D01* +X53681Y87415D02*X53935D01* +X54062Y87542D01* +Y87796D02*Y87542D01* +X74262Y93935D02*X74643D01* +X74135Y94062D02*X74262Y93935D01* +X74135Y94824D02*Y94062D01* +Y94824D02*X74262Y94951D01* +X74643D01* +X75075Y93935D02*X75329D01* +X75202Y94951D02*Y93935D01* +X74948Y94697D02*X75202Y94951D01* +X75634Y94824D02*X75761Y94951D01* +X76015D01* +X76142Y94824D01* +Y94062D01* +X76015Y93935D02*X76142Y94062D01* +X75761Y93935D02*X76015D01* +X75634Y94062D02*X75761Y93935D01* +Y94443D02*X76142D01* +X81232Y93920D02*X81613D01* +X81105Y94047D02*X81232Y93920D01* +X81105Y94809D02*Y94047D01* +Y94809D02*X81232Y94936D01* +X81613D01* +X82045Y93920D02*X82299D01* +X82172Y94936D02*Y93920D01* +X81918Y94682D02*X82172Y94936D01* +X82604Y94047D02*X82731Y93920D01* +X82604Y94809D02*Y94047D01* +Y94809D02*X82731Y94936D01* +X82985D01* +X83112Y94809D01* +Y94047D01* +X82985Y93920D02*X83112Y94047D01* +X82731Y93920D02*X82985D01* +X82604Y94174D02*X83112Y94682D01* +X82677Y86360D02*X83058D01* +X82550Y86487D02*X82677Y86360D01* +X82550Y87249D02*Y86487D01* +Y87249D02*X82677Y87376D01* +X83058D01* +X83363D02*X83871D01* +X83363D02*Y86868D01* +X83490Y86995D01* +X83744D01* +X83871Y86868D01* +Y86487D01* +X83744Y86360D02*X83871Y86487D01* +X83490Y86360D02*X83744D01* +X83363Y86487D02*X83490Y86360D01* +M02* diff --git a/doc/aic.xy b/doc/aic.xy new file mode 100644 index 0000000..2968b2a --- /dev/null +++ b/doc/aic.xy @@ -0,0 +1,9 @@ +D3,"LED5","GREEN",625.00,1975.00,90,top +C7,"RCY100P","1uFx16V",2850.00,3350.00,0,top +R6,"ACY400","470",4250.00,2950.00,270,top +Q4,"TO220W","unknown",3400.00,1250.00,270,top +D5,"Axial diode (pin 1 is cathode)","ALF400",1975.00,2350.00,0,top +C11,"Bottom lead polar circular component (typically capacitor)","RCY100P",2825.00,2600.00,180,top +R14,"Axial non-polar component (typically resistor or capacitor),","ACY400",1975.00,2600.00,180,top +D1,"LED5","RED",625.00,1225.00,90,top +U8,"DIP8","unknown",2400.00,3500.00,90,top diff --git a/doc/aicpic.pdf b/doc/aicpic.pdf index d04b497..c17afaa 100644 Binary files a/doc/aicpic.pdf and b/doc/aicpic.pdf differ diff --git a/doc/aicpic.sch b/doc/aicpic.sch index 9204294..e6d36f1 100644 --- a/doc/aicpic.sch +++ b/doc/aicpic.sch @@ -1,4 +1,4 @@ -v 20100214 2 +v 20130925 2 C 1000 73500 0 0 0 title-A2.sym N 18300 87300 18600 87300 4 N 18300 84100 18600 84100 4 @@ -89,13 +89,13 @@ N 10200 78900 10700 78900 4 N 10700 78900 10700 78800 4 N 8500 79400 8500 78900 4 C 6400 86500 1 0 0 gnd-1.sym -C 8600 87600 1 0 0 resistor-1.sym +C 8400 87600 1 0 0 resistor-1.sym { -T 9000 87900 5 10 1 1 0 0 1 +T 8800 87900 5 10 1 1 0 0 1 refdes=R2 -T 9000 87400 5 10 1 1 0 0 1 +T 8800 87400 5 10 1 1 0 0 1 value=2k2 -T 8600 87600 5 10 0 1 0 0 1 +T 8400 87600 5 10 0 1 0 0 1 footprint=ACY400 } C 8200 87700 1 90 0 resistor-1.sym @@ -107,34 +107,34 @@ value=10k T 8200 87700 5 10 0 1 0 0 1 footprint=ACY400 } -N 7600 87700 8600 87700 4 +N 7600 87700 8400 87700 4 N 8100 87700 8100 87000 4 N 8100 87000 7600 87000 4 N 6500 87700 6600 87700 4 N 6500 86800 6500 87700 4 -C 10800 84200 1 0 0 osc-2.sym +C 10000 84200 1 0 0 osc-2.sym { -T 11300 84900 5 10 1 1 0 0 1 +T 10500 84900 5 10 1 1 0 0 1 device=OSC -T 10600 84900 5 10 1 1 0 0 1 +T 9800 84900 5 10 1 1 0 0 1 refdes=U2 -T 11000 84000 5 10 1 1 0 0 1 +T 10200 84000 5 10 1 1 0 0 1 value=6MHz } -N 12000 84500 13900 84500 4 +N 11200 84500 13900 84500 4 { -T 12100 84600 5 10 1 1 0 0 1 +T 11200 84600 5 10 1 1 0 0 1 netname=CLOCK } -N 9500 87700 13900 87700 4 -C 11000 86000 1 0 0 input-2.sym +N 9300 87700 13900 87700 4 +C 10500 86000 1 0 0 input-2.sym { -T 11500 86100 5 10 1 1 0 7 1 +T 11000 86100 5 10 1 1 0 7 1 value=REFPOS -T 11000 86000 5 10 0 1 0 0 1 +T 10500 86000 5 10 0 1 0 0 1 net=REFPOS:1 } -N 12400 86100 13900 86100 4 +N 11900 86100 13900 86100 4 C 7300 85200 1 0 0 input-2.sym { T 7800 85300 5 10 1 1 0 7 1 @@ -182,7 +182,7 @@ T 19300 74500 9 10 1 0 0 0 1 Departamento de Engenharia Eletrica N 18300 86900 22100 86900 4 N 18300 86500 22100 86500 4 -N 12400 86500 13900 86500 4 +N 11900 86500 13900 86500 4 C 20900 85400 1 90 0 resistor-1.sym { T 21400 86100 5 10 1 1 180 0 1 @@ -227,7 +227,7 @@ C 8300 79400 1 0 0 5V-plus-1.sym T 8300 79400 5 10 0 1 0 0 1 net=+5V:1 } -C 7900 88600 1 0 0 5V-plus-1.sym +C 7900 89500 1 0 0 5V-plus-1.sym C 9100 86800 1 0 0 5V-plus-1.sym N 13600 82900 13900 82900 4 C 13400 82900 1 0 0 5V-plus-1.sym @@ -241,7 +241,7 @@ Actuador Interface Card - dsPIC & RS232 & CAN Interfaces T 17300 73900 9 10 1 0 0 0 1 aicpic.sch T 21200 73900 9 10 1 0 0 0 1 -2.2.0 +2.4.0 T 22200 73600 9 6 1 0 0 0 3 Walter Fetter Lages Diego Caberlon Santini @@ -336,13 +336,13 @@ N 19200 77000 19000 77000 4 N 19000 77000 19000 77400 4 N 18300 76700 18300 78600 4 N 18300 78600 18100 78600 4 -C 23000 77400 1 180 0 resistor-1.sym +C 22200 77400 1 180 0 resistor-1.sym { -T 22400 77500 5 10 1 1 0 0 1 +T 21600 77500 5 10 1 1 0 0 1 refdes=R11 -T 22400 77000 5 10 1 1 0 0 1 +T 21600 77000 5 10 1 1 0 0 1 value=2k2 -T 23000 77400 5 10 0 1 180 6 1 +T 22200 77400 5 10 0 1 180 6 1 footprint=ACY400 } C 21600 78300 1 0 1 6n137-1.sym @@ -456,10 +456,10 @@ N 20800 86300 20800 86900 4 N 22000 86300 22000 86500 4 N 6700 87000 6500 87000 4 N 18300 83300 22700 83300 4 -N 22700 83300 22700 78900 4 +N 22700 75400 22700 83300 4 N 22700 78900 22500 78900 4 N 18300 83700 23200 83700 4 -N 23200 76700 23200 83700 4 +N 23200 75100 23200 83700 4 N 10800 83700 13900 83700 4 N 10800 83700 10800 82600 4 N 10800 82600 8200 82600 4 @@ -574,11 +574,11 @@ net=DRVB:1 T 23000 86500 5 10 1 1 0 1 1 value=DRVB } -C 12400 86600 1 180 0 output-2.sym +C 11900 86600 1 180 0 output-2.sym { -T 11500 86400 5 10 0 0 180 0 1 +T 11000 86400 5 10 0 0 180 0 1 net=BRAKE:1 -T 11500 86500 5 10 1 1 180 1 1 +T 11000 86500 5 10 1 1 180 1 1 value=BRAKE } C 7600 74700 1 90 0 capacitor-1.sym @@ -653,12 +653,12 @@ value=/SD } N 18300 85300 18900 85300 4 N 18900 85300 18900 84000 4 -N 21200 77300 22100 77300 4 +N 21200 77300 21300 77300 4 N 21200 76700 23200 76700 4 N 19300 79500 19600 79500 4 N 19600 79500 19600 79200 4 N 21200 77000 21200 77400 4 -N 23000 77300 23200 77300 4 +N 22200 77300 23200 77300 4 C 19600 85400 1 90 0 capacitor-1.sym { T 19300 86100 5 10 1 1 180 0 1 @@ -682,3 +682,27 @@ N 20200 86500 20200 86300 4 C 19300 85100 1 0 0 gnd-1.sym C 20100 85100 1 0 0 gnd-1.sym C 18500 87000 1 0 0 gnd-1.sym +C 7900 89500 1 270 0 diode-1.sym +{ +T 8500 89100 5 10 0 0 270 0 1 +device=DIODE +T 8500 89100 5 10 1 1 0 0 1 +refdes=D11 +T 8300 88700 5 10 1 1 0 0 1 +value=1N4148 +} +C 10800 74900 1 0 0 connector5-1.sym +{ +T 12600 76400 5 10 0 0 0 0 1 +device=CONNECTOR_5 +T 10900 76600 5 10 1 1 0 0 1 +refdes=J3 +T 10800 74600 5 10 1 1 0 0 1 +value=ICSP +} +N 23200 75100 12500 75100 4 +N 22700 75400 12500 75400 4 +N 12500 75700 13000 75700 4 +N 13000 75700 13000 74500 4 +C 12900 74200 1 0 0 gnd-1.sym +N 12500 76300 12500 87700 4 diff --git a/doc/attribs b/doc/attribs index bbe801d..2786dbe 100644 --- a/doc/attribs +++ b/doc/attribs @@ -1,3 +1,7 @@ device value footprint +midx +midy +rotation + diff --git a/lib/Makefile b/lib/Makefile index 1669d93..98930d4 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -46,4 +46,4 @@ clean: rm -f *.o *~ distclean:clean - rm -f libdebug.a libaicio.a libcanlib.a libwdt.a \ No newline at end of file + rm -f libdebug.a libaicio.a libcanlib.a libwdt.a diff --git a/test/README b/test/README new file mode 100644 index 0000000..1649a39 --- /dev/null +++ b/test/README @@ -0,0 +1,21 @@ +dsPICtest: blinks D2 using internal RC (7.37 MHz) as OSC. + +dsPICAICtest: blinks D2 using AICs crystal oscilator (6 MHz) as OSC. + +freertostest: blinks D2 using internal RC (7.37 MHz) as OSC and a FreeRTOS +task. + +freertosAICtest: blinks D2 and D3 using AICs crystal oscilator (6 MHz) as +OSC and FreeRTOS tasks. + +serialtest: sends test string and size of variables through the RS232 +Interface. 19200 bps. + +braketest: turns on and off the brake. + +pwmtest: + +cantest +encodertest +motortest + diff --git a/test/braketest/Makefile b/test/braketest/Makefile index 1a97440..a579c6a 100644 --- a/test/braketest/Makefile +++ b/test/braketest/Makefile @@ -14,4 +14,7 @@ clean: rm -f *.o braketest *~ distclean:clean - rm -f braketest.hex \ No newline at end of file + rm -f braketest.hex + +burn: braketest.hex + usburn -S ICSP -F 30 -w -I $^ diff --git a/test/braketest/braketest.c b/test/braketest/braketest.c index da6c2f5..6a23eff 100644 --- a/test/braketest/braketest.c +++ b/test/braketest/braketest.c @@ -40,7 +40,7 @@ #endif /*---------------------------------------------------------------------------*/ -_FOSC(EC_PLL16 & CSW_FSCM_OFF); //Config OSC to internal RC osc 7.37MHz +_FOSC(EC_PLL16 & CSW_FSCM_OFF); _FWDT(WDT_OFF); _FBORPOR(MCLR_EN & RST_IOPIN & PBOR_OFF & PWRT_64); /*---------------------------------------------------------------------------*/ diff --git a/test/dsPICAICtest/Makefile b/test/dsPICAICtest/Makefile index f46467b..e76f5ed 100644 --- a/test/dsPICAICtest/Makefile +++ b/test/dsPICAICtest/Makefile @@ -15,4 +15,7 @@ clean: rm -f *.o dspicaictest *~ distclean:clean - rm -f dspicaictest.hex \ No newline at end of file + rm -f dspicaictest.hex + +burn: dspicaictest.hex + usburn -S ICSP -F 30 -w -I $^ diff --git a/test/dsPICAICtest/dspicaictest.c b/test/dsPICAICtest/dspicaictest.c index 8401f37..e7225cd 100644 --- a/test/dsPICAICtest/dspicaictest.c +++ b/test/dsPICAICtest/dspicaictest.c @@ -30,6 +30,7 @@ /*---------------------------------------------------------------------------*/ _FOSC(EC_PLL16 & CSW_FSCM_OFF); +//_FOSC(FRC & CSW_FSCM_OFF); _FWDT(WDT_OFF); _FBORPOR(MCLR_EN & RST_IOPIN & PBOR_OFF & PWRT_64); /*---------------------------------------------------------------------------*/ diff --git a/test/dsPICtest/Makefile b/test/dsPICtest/Makefile index d025730..7cff6b6 100644 --- a/test/dsPICtest/Makefile +++ b/test/dsPICtest/Makefile @@ -15,4 +15,7 @@ clean: rm -f *.o dspictest *~ distclean:clean - rm -f dspictest.hex \ No newline at end of file + rm -f dspictest.hex + +burn: dspictest.hex + usburn -S ICSP -F 30 -w -I $^ diff --git a/test/dsPICtest/dspictest.c b/test/dsPICtest/dspictest.c index 02f922e..62a25af 100644 --- a/test/dsPICtest/dspictest.c +++ b/test/dsPICtest/dspictest.c @@ -1,8 +1,8 @@ /****************************************************************************** Actuator Interface Card - dsPIC30F4012 testM - Copyright (C) 2008 Diego Caberlon Santini M + dsPIC30F4012 test + Copyright (C) 2008 Diego Caberlon Santini This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/test/encodertest/Makefile b/test/encodertest/Makefile index 27b8715..da89e89 100644 --- a/test/encodertest/Makefile +++ b/test/encodertest/Makefile @@ -14,4 +14,7 @@ clean: rm -f *.o encodertest *~ distclean:clean - rm -f encodertest.hex \ No newline at end of file + rm -f encodertest.hex + +burn: encodertest.hex + usburn -S ICSP -F 30 -w -I $^ diff --git a/test/encodertest/encodertest.c b/test/encodertest/encodertest.c index 5a9a3b0..14fadc4 100644 --- a/test/encodertest/encodertest.c +++ b/test/encodertest/encodertest.c @@ -53,10 +53,11 @@ int main(int argc,char *argv[]) long encoder; float fencoder; + serial_init(); sprintf(buff,"Encoder Test Begin, compiled at %s %s\n",__DATE__,__TIME__); - printd(buff); + printd(buff); delay(50); encoder_initialize(0x0,2048); diff --git a/test/freertosAICtest/FreeRTOSConfig.h b/test/freertosAICtest/FreeRTOSConfig.h index 1091a26..64f4fe0 100644 --- a/test/freertosAICtest/FreeRTOSConfig.h +++ b/test/freertosAICtest/FreeRTOSConfig.h @@ -60,8 +60,8 @@ #define configUSE_PREEMPTION 1 #define configUSE_IDLE_HOOK 0 #define configUSE_TICK_HOOK 0 -#define configTICK_RATE_HZ ( ( portTickType ) 1000 ) /*1 ms*/ -#define configCPU_CLOCK_HZ ( ( unsigned portLONG ) 24000000 ) /* Fosc / 4 = 24MHz*/ +#define configTICK_RATE_HZ ( ( portTickType ) 1000 ) +#define configCPU_CLOCK_HZ ( ( unsigned portLONG ) 24000000) /* Fosc / 4 = 24MHz*/ #define configMAX_PRIORITIES ( ( unsigned portBASE_TYPE ) 4 ) #define configMINIMAL_STACK_SIZE ( 105 ) #define configTOTAL_HEAP_SIZE ( ( size_t ) 5120/4 ) diff --git a/test/freertosAICtest/Makefile b/test/freertosAICtest/Makefile index 47c47d1..80aacaf 100644 --- a/test/freertosAICtest/Makefile +++ b/test/freertosAICtest/Makefile @@ -9,13 +9,18 @@ freertosAICtest:freertosAICtest.o $(OSOBJS) $(CC) $(CPU) $^ -o $@ $(CCLIBDIR) -Wl $(CCGLD) freertosAICtest.o:freertosAICtest.c - $(CC) $(CPU) -x c -c $^ $(CCINCDIR) $(OSINCDIR) $(CCFLAGS) $(OSFLAGS) + $(CC) -MMD $(CPU) -c $^ $(CCINCDIR) $(OSINCDIR) $(CCFLAGS) $(OSFLAGS) + +-include freertosAICtest.d $(OSOBJS):$(OSFILES) - for i in $(OSFILES); do $(CC) $(CPU) -x c -c $$i $(CCINCDIR) $(OSINCDIR) $(CCFLAGS) $(OSFLAGS) ; done + for i in $(OSFILES); do $(CC) -MMD $(CPU) -c $$i $(CCINCDIR) $(OSINCDIR) $(CCFLAGS) $(OSFLAGS) ; done clean: - rm -f *.o freertosAICtest *~ + rm -f *.o freertosAICtest *~ *.d distclean:clean - rm -f freertosAICtest.hex \ No newline at end of file + rm -f freertosAICtest.hex + +burn: freertosAICtest.hex + usburn -S ICSP -F 30 -w -I $^ diff --git a/test/freertosAICtest/freertosAICtest.c b/test/freertosAICtest/freertosAICtest.c index 5897461..b60007e 100644 --- a/test/freertosAICtest/freertosAICtest.c +++ b/test/freertosAICtest/freertosAICtest.c @@ -25,6 +25,7 @@ 2008.06.12 -> Start FreeRTOS test to AIC-2.0.0 by Diego Caberlon Santini from Demos apps. ******************************************************************************* */ + #include /* Scheduler includes. */ @@ -32,97 +33,71 @@ #include "task.h" #include "queue.h" #include "croutine.h" -/*---------------------------------------------------------------------------*/ - -#define mainLED_TAKS_STACK_SIZE ( configMINIMAL_STACK_SIZE) - -#define mainLED_TASK_PRIORITY1 ( tskIDLE_PRIORITY + 3 ) -/* The execution period of the check task. */ -#define mainLED_TASK_PERIOD1 ( ( portTickType ) 1000 / portTICK_RATE_MS ) +#define TAKS_STACK_SIZE configMINIMAL_STACK_SIZE -#define mainLED_TASK_PRIORITY2 ( tskIDLE_PRIORITY + 2 ) +#define TASK_PRIORITY1 (tskIDLE_PRIORITY + 3) +#define TASK_PERIOD1 ((portTickType) 500 / portTICK_RATE_MS) -/* The execution period of the check task. */ -#define mainLED_TASK_PERIOD2 ( ( portTickType ) 2000 / portTICK_RATE_MS ) -/*---------------------------------------------------------------------------*/ +#define TASK_PRIORITY2 (tskIDLE_PRIORITY + 2) +#define TASK_PERIOD2 ((portTickType ) 1000 / portTICK_RATE_MS) _FOSC(EC_PLL16 & CSW_FSCM_OFF); _FWDT(WDT_OFF); _FBORPOR(MCLR_EN & RST_IOPIN & PBOR_OFF & PWRT_64); -/*---------------------------------------------------------------------------*/ -/** Blink port RE0 mainLED_TASK_PERIOD1 (1s) +/** Blink port RE0 TASK_PERIOD1 (1 s) */ -static void vLEDTask1( void *pvParameters ); - -/** Blink port RE0 mainLED_TASK_PERIOD2 (2s) - */ -static void vLEDTask2( void *pvParameters ); - -/*---------------------------------------------------------------------------*/ - -/* - * Create the demo tasks then start the scheduler. - */ -int main( void ) -{ - - TRISE=0x00; - - /* Create the test tasks defined within this file. */ - xTaskCreate( vLEDTask1, ( signed portCHAR * ) "LED1", mainLED_TAKS_STACK_SIZE, NULL, mainLED_TASK_PRIORITY1, NULL ); - - xTaskCreate( vLEDTask2, ( signed portCHAR * ) "LED2", mainLED_TAKS_STACK_SIZE, NULL, mainLED_TASK_PRIORITY2, NULL ); - - /* Finally start the scheduler. */ - vTaskStartScheduler(); - - /* Will only reach here if there is insufficient heap available to start - the scheduler. */ - return 0; -} -/*---------------------------------------------------------------------------*/ - -static void vLEDTask1( void *pvParameters ) +static void vLEDTask1(void *pvParameters) { -/* Used to wake the task at the correct frequency. */ -portTickType xLastExecutionTime; + /* Used to wake the task at the correct frequency. */ + portTickType xLastExecutionTime; /* Initialise xLastExecutionTime so the first call to vTaskDelayUntil() works correctly. */ - xLastExecutionTime = xTaskGetTickCount(); + xLastExecutionTime=xTaskGetTickCount(); for(;;) { /* Wait until it is time for the next cycle. */ - vTaskDelayUntil( &xLastExecutionTime, mainLED_TASK_PERIOD1 ); - PORTE = PORTE^0x01; - - /* Has an error been found in any of the standard demo tasks? */ - + vTaskDelayUntil(&xLastExecutionTime,TASK_PERIOD1); + PORTE=PORTE^0x1; } } -/*---------------------------------------------------------------------------*/ -static void vLEDTask2( void *pvParameters ) +/** Blink port RE0 TASK_PERIOD2 (2s) + */ +static void vLEDTask2(void *pvParameters) { /* Used to wake the task at the correct frequency. */ portTickType xLastExecutionTime; /* Initialise xLastExecutionTime so the first call to vTaskDelayUntil() works correctly. */ - xLastExecutionTime = xTaskGetTickCount(); + xLastExecutionTime=xTaskGetTickCount(); for(;;) { /* Wait until it is time for the next cycle. */ - vTaskDelayUntil( &xLastExecutionTime, mainLED_TASK_PERIOD2 ); - PORTE = PORTE^0x02; - - /* Has an error been found in any of the standard demo tasks? */ - + vTaskDelayUntil(&xLastExecutionTime,TASK_PERIOD2); + PORTE=PORTE^0x02; } } -/*---------------------------------------------------------------------------*/ +/* + * Create the demo tasks then start the scheduler. + */ +int main(void) +{ + TRISE=0x00; // Set port RE as output + + xTaskCreate(vLEDTask1,(signed portCHAR *) "LED1",TAKS_STACK_SIZE,NULL,TASK_PRIORITY1,NULL); + + xTaskCreate(vLEDTask2,(signed portCHAR *) "LED2",TAKS_STACK_SIZE,NULL,TASK_PRIORITY2,NULL); + + vTaskStartScheduler(); + + /* Will only reach here if there is insufficient heap available to start + the scheduler. */ + return 0; +} diff --git a/test/freertostest/Makefile b/test/freertostest/Makefile index c1f3600..5c0659c 100644 --- a/test/freertostest/Makefile +++ b/test/freertostest/Makefile @@ -9,13 +9,16 @@ freertostest:freertostest.o $(OSOBJS) $(CC) $(CPU) $^ -o $@ $(CCLIBDIR) -Wl $(CCGLD) freertostest.o:freertostest.c - $(CC) $(CPU) -x c -c $^ $(CCINCDIR) $(OSINCDIR) $(CCFLAGS) $(OSFLAGS) + $(CC) $(CPU) -c $^ $(CCINCDIR) $(OSINCDIR) $(CCFLAGS) $(OSFLAGS) $(OSOBJS):$(OSFILES) - for i in $(OSFILES); do $(CC) $(CPU) -x c -c $$i $(CCINCDIR) $(OSINCDIR) $(CCFLAGS) $(OSFLAGS) ; done + for i in $(OSFILES); do $(CC) $(CPU) -c $$i $(CCINCDIR) $(OSINCDIR) $(CCFLAGS) $(OSFLAGS) ; done clean: rm -f *.o freertostest *~ distclean:clean - rm -f freertostest.hex \ No newline at end of file + rm -f freertostest.hex + +burn: freertostest.hex + usburn -S ICSP -F 30 -w -I $^ diff --git a/test/freertostest/freertostest.c b/test/freertostest/freertostest.c index c6b9795..b4520ae 100644 --- a/test/freertostest/freertostest.c +++ b/test/freertostest/freertostest.c @@ -39,7 +39,7 @@ #define mainLED_TASK_PRIORITY ( tskIDLE_PRIORITY + 3 ) /* The execution period of the check task. */ -#define mainCHECK_TASK_PERIOD ( ( portTickType ) 5 / portTICK_RATE_MS ) +#define mainCHECK_TASK_PERIOD ( ( portTickType ) 500 / portTICK_RATE_MS ) /*---------------------------------------------------------------------------*/ // _FOSC(EC_PLL16 & CSW_FSCM_OFF); @@ -48,7 +48,7 @@ _FWDT(WDT_OFF); _FBORPOR(MCLR_EN & RST_IOPIN & PBOR_OFF & PWRT_64); /*---------------------------------------------------------------------------*/ -/** Blink port RE0 (10ms) +/** Blink port RE0 */ static void vLEDTask( void *pvParameters ); /*---------------------------------------------------------------------------*/ @@ -75,8 +75,8 @@ int main( void ) static void vLEDTask( void *pvParameters ) { -/* Used to wake the task at the correct frequency. */ -portTickType xLastExecutionTime; + /* Used to wake the task at the correct frequency. */ + portTickType xLastExecutionTime; /* Initialise xLastExecutionTime so the first call to vTaskDelayUntil() works correctly. */ @@ -87,9 +87,6 @@ portTickType xLastExecutionTime; /* Wait until it is time for the next cycle. */ vTaskDelayUntil( &xLastExecutionTime, mainCHECK_TASK_PERIOD ); PORTE = PORTE^0x01; - - /* Has an error been found in any of the standard demo tasks? */ - } } /*---------------------------------------------------------------------------*/ diff --git a/test/motortest/Makefile b/test/motortest/Makefile index a6f1b42..e40742b 100644 --- a/test/motortest/Makefile +++ b/test/motortest/Makefile @@ -14,4 +14,7 @@ clean: rm -f *.o motortest *~ distclean:clean - rm -f motortest.hex \ No newline at end of file + rm -f motortest.hex + +burn: motortest.hex + usburn -S ICSP -F 30 -w -I $^ diff --git a/test/pwmtest/Makefile b/test/pwmtest/Makefile index 3b51c71..1c6c460 100644 --- a/test/pwmtest/Makefile +++ b/test/pwmtest/Makefile @@ -14,4 +14,7 @@ clean: rm -f *.o pwmtest *~ distclean:clean - rm -f pwmtest.hex \ No newline at end of file + rm -f pwmtest.hex + +burn: pwmtest.hex + usburn -S ICSP -F 30 -w -I $^ diff --git a/test/serialtest/Makefile b/test/serialtest/Makefile index 805da96..39c3a80 100644 --- a/test/serialtest/Makefile +++ b/test/serialtest/Makefile @@ -14,4 +14,7 @@ clean: rm -f *.o serialtest *~ distclean:clean - rm -f serialtest.hex \ No newline at end of file + rm -f serialtest.hex + +burn: serialtest.hex + usburn -S ICSP -F 30 -w -I $^ diff --git a/test/serialtest/serialtest.c b/test/serialtest/serialtest.c index ff2528d..b462211 100644 --- a/test/serialtest/serialtest.c +++ b/test/serialtest/serialtest.c @@ -39,11 +39,20 @@ _FBORPOR(MCLR_EN & RST_IOPIN & PBOR_OFF & PWRT_64 & RST_PWMPIN & PWMxH_ACT_HI & int main(int argc,char *argv[]) { - char *name; + char name[]="Diego é o cara\n"; char buff[256]; - unsigned int bitorder=0x0733; + int i; + union + { + unsigned int i; + struct + { + unsigned char lsb; + unsigned char msb; + } le; + } bitorder; - name="Diego é o cara\n"; + bitorder.i=0x0123; //set PORTE just to check if the program is running TRISE=0x0; @@ -67,12 +76,20 @@ int main(int argc,char *argv[]) prints(buff); sprintf(buff,"size of double... %d\n",sizeof(double)); prints(buff); - sprintf(buff,"int 0x0733 byte[0]:%x byte[1]:%x\n",((unsigned char*)(&bitorder))[0],((unsigned char*)(&bitorder))[1]); + if((bitorder.i & 0xff) == bitorder.le.lsb) + { + sprintf(buff,"Little-endian\n"); + } + else + { + sprintf(buff,"Big-endian\n"); + } prints(buff); - - for(;;){ - + for(i=0;;i++) + { + sprintf(buff,"i=%d\n",i); + prints(buff); } }