diff --git a/.gitignore b/.gitignore index 2b16c31..7b5ad43 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,12 @@ .pio +venv/ .vscode/.browse.c_cpp.db* .vscode/c_cpp_properties.json .vscode/launch.json .vscode/ipch -.DS_Store \ No newline at end of file +.DS_Store +.idea/ +CMakeLists.txt +CMakeListsPrivate.txt +cmake-build-az-delivery-devkit-v4/ +cmake-build-debug/ diff --git a/Hardware-Plaforms/ESP32-A1S-Audiokit/src/main.cpp b/Hardware-Plaforms/ESP32-A1S-Audiokit/src/main.cpp index c126e15..8b70014 100644 --- a/Hardware-Plaforms/ESP32-A1S-Audiokit/src/main.cpp +++ b/Hardware-Plaforms/ESP32-A1S-Audiokit/src/main.cpp @@ -1521,8 +1521,6 @@ void rfidScanner(void *parameter) { //static MFRC522 mfrc522(MFRC522_CS_PIN, MFRC522_RST_PIN); //static MFRC522 mfrc522(RFID_CS, RST_PIN); //SPI.begin(); - pinMode(MFRC522_CS_PIN, OUTPUT); - digitalWrite(MFRC522_CS_PIN, HIGH); mfrc522.PCD_Init(); mfrc522.PCD_DumpVersionToSerial(); // Show details of PCD - MFRC522 Card Reader detail delay(4); @@ -3054,6 +3052,11 @@ void setup() { prefsRfid.begin((char *) FPSTR(prefsRfidNamespace)); prefsSettings.begin((char *) FPSTR(prefsSettingsNamespace)); + pinMode(SD_CS, OUTPUT); + digitalWrite(SD_CS, HIGH); + pinMode(MFRC522_CS_PIN, OUTPUT); + digitalWrite(MFRC522_CS_PIN, HIGH); + SPI_MFRC.begin(SPI_SCK, SPI_MISO, SPI_MOSI); SPI_MFRC.setFrequency(1000000); @@ -3094,8 +3097,6 @@ void setup() { #endif // Init uSD-SPI - pinMode(SD_CS, OUTPUT); - digitalWrite(SD_CS, HIGH); /*SPI_MFRC.begin(SPI_SCK, SPI_MISO, SPI_MOSI); SPI_MFRC.setFrequency(1000000);*/ while (!SD.begin(SD_CS, SPI_MFRC)) { diff --git a/PCBs/ESP32_Breakout_Carrier/Readme.md b/PCBs/ESP32_Breakout_Carrier/Readme.md new file mode 100644 index 0000000..6f38c3b --- /dev/null +++ b/PCBs/ESP32_Breakout_Carrier/Readme.md @@ -0,0 +1,21 @@ +## Disclaimer +This PCB was kindly provided by a user (@mariolukas) of my Tonuino-fork and I didn't test it myself. +## ESP32 I2S Breakout Carrier PCB +This is a simple PCB which makes wiring the whole stuff much easier. It contains connections for all components which are described in the projects wiring table. An ESP32 from AZ-Delivery was used but every pin-Compatible ESP32-board will do the job. + +![Assembled Board](assembled.jpeg) +The image shows my first boards which came with a litte wiring bug. The bug is fixed in the current version. I ordered my board at aisler.net, there is already and upload available. + +[https://aisler.net/p/YTYZJZMM](https://aisler.net/p/YTYZJZMM) + +## Todos +This PCB does not provide an option for charing or power-management (including step down/up). It provides a pinout for 5V-input. + +## Antenna-improvements +It is recommended to solder an external antenna to the ESP32 for preventing connection issues. Cheap ESP32 boards come with an antenna which is laying on the PCB. The newer ones provide an ESP32-board where the antenna-part protrudes over the edge. + +You can find some useful tips for soldering an antenna to the old ones here: +[https://community.home-assistant.io/t/how-to-add-an-external-antenna-to-an-esp-board/131601](https://community.home-assistant.io/t/how-to-add-an-external-antenna-to-an-esp-board/131601) + +## Disclaimer +PCB-circuit is provided 'as is' without warranty. It was made to keep wiring much simpler. However: it runs fine without any problems in my Tonuinos. \ No newline at end of file diff --git a/PCBs/ESP32_Breakout_Carrier/Tonuino-ESP32_2-cache.lib b/PCBs/ESP32_Breakout_Carrier/Tonuino-ESP32_2-cache.lib new file mode 100644 index 0000000..199a757 --- /dev/null +++ b/PCBs/ESP32_Breakout_Carrier/Tonuino-ESP32_2-cache.lib @@ -0,0 +1,337 @@ +EESchema-LIBRARY Version 2.4 +#encoding utf-8 +# +# Connector_Conn_01x02_Male +# +DEF Connector_Conn_01x02_Male J 0 40 Y N 1 F N +F0 "J" 0 100 50 H V C CNN +F1 "Connector_Conn_01x02_Male" 0 -200 50 H V C CNN +F2 "" 0 0 50 H I C CNN +F3 "" 0 0 50 H I C CNN +$FPLIST + Connector*:*_1x??_* +$ENDFPLIST +DRAW +S 34 -95 0 -105 1 1 6 F +S 34 5 0 -5 1 1 6 F +P 2 1 1 6 50 -100 34 -100 N +P 2 1 1 6 50 0 34 0 N +X Pin_1 1 200 0 150 L 50 50 1 1 P +X Pin_2 2 200 -100 150 L 50 50 1 1 P +ENDDRAW +ENDDEF +# +# Connector_Conn_01x03_Male +# +DEF Connector_Conn_01x03_Male J 0 40 Y N 1 F N +F0 "J" 0 200 50 H V C CNN +F1 "Connector_Conn_01x03_Male" 0 -200 50 H V C CNN +F2 "" 0 0 50 H I C CNN +F3 "" 0 0 50 H I C CNN +$FPLIST + Connector*:*_1x??_* +$ENDFPLIST +DRAW +S 34 -95 0 -105 1 1 6 F +S 34 5 0 -5 1 1 6 F +S 34 105 0 95 1 1 6 F +P 2 1 1 6 50 -100 34 -100 N +P 2 1 1 6 50 0 34 0 N +P 2 1 1 6 50 100 34 100 N +X Pin_1 1 200 100 150 L 50 50 1 1 P +X Pin_2 2 200 0 150 L 50 50 1 1 P +X Pin_3 3 200 -100 150 L 50 50 1 1 P +ENDDRAW +ENDDEF +# +# Connector_Conn_01x05_Male +# +DEF Connector_Conn_01x05_Male J 0 40 Y N 1 F N +F0 "J" 0 300 50 H V C CNN +F1 "Connector_Conn_01x05_Male" 0 -300 50 H V C CNN +F2 "" 0 0 50 H I C CNN +F3 "" 0 0 50 H I C CNN +$FPLIST + Connector*:*_1x??_* +$ENDFPLIST +DRAW +S 34 -195 0 -205 1 1 6 F +S 34 -95 0 -105 1 1 6 F +S 34 5 0 -5 1 1 6 F +S 34 105 0 95 1 1 6 F +S 34 205 0 195 1 1 6 F +P 2 1 1 6 50 -200 34 -200 N +P 2 1 1 6 50 -100 34 -100 N +P 2 1 1 6 50 0 34 0 N +P 2 1 1 6 50 100 34 100 N +P 2 1 1 6 50 200 34 200 N +X Pin_1 1 200 200 150 L 50 50 1 1 P +X Pin_2 2 200 100 150 L 50 50 1 1 P +X Pin_3 3 200 0 150 L 50 50 1 1 P +X Pin_4 4 200 -100 150 L 50 50 1 1 P +X Pin_5 5 200 -200 150 L 50 50 1 1 P +ENDDRAW +ENDDEF +# +# Connector_Conn_01x06_Male +# +DEF Connector_Conn_01x06_Male J 0 40 Y N 1 F N +F0 "J" 0 300 50 H V C CNN +F1 "Connector_Conn_01x06_Male" 0 -400 50 H V C CNN +F2 "" 0 0 50 H I C CNN +F3 "" 0 0 50 H I C CNN +$FPLIST + Connector*:*_1x??_* +$ENDFPLIST +DRAW +S 34 -295 0 -305 1 1 6 F +S 34 -195 0 -205 1 1 6 F +S 34 -95 0 -105 1 1 6 F +S 34 5 0 -5 1 1 6 F +S 34 105 0 95 1 1 6 F +S 34 205 0 195 1 1 6 F +P 2 1 1 6 50 -300 34 -300 N +P 2 1 1 6 50 -200 34 -200 N +P 2 1 1 6 50 -100 34 -100 N +P 2 1 1 6 50 0 34 0 N +P 2 1 1 6 50 100 34 100 N +P 2 1 1 6 50 200 34 200 N +X Pin_1 1 200 200 150 L 50 50 1 1 P +X Pin_2 2 200 100 150 L 50 50 1 1 P +X Pin_3 3 200 0 150 L 50 50 1 1 P +X Pin_4 4 200 -100 150 L 50 50 1 1 P +X Pin_5 5 200 -200 150 L 50 50 1 1 P +X Pin_6 6 200 -300 150 L 50 50 1 1 P +ENDDRAW +ENDDEF +# +# Connector_Conn_01x07_Male +# +DEF Connector_Conn_01x07_Male J 0 40 Y N 1 F N +F0 "J" 0 400 50 H V C CNN +F1 "Connector_Conn_01x07_Male" 0 -400 50 H V C CNN +F2 "" 0 0 50 H I C CNN +F3 "" 0 0 50 H I C CNN +$FPLIST + Connector*:*_1x??_* +$ENDFPLIST +DRAW +S 34 -295 0 -305 1 1 6 F +S 34 -195 0 -205 1 1 6 F +S 34 -95 0 -105 1 1 6 F +S 34 5 0 -5 1 1 6 F +S 34 105 0 95 1 1 6 F +S 34 205 0 195 1 1 6 F +S 34 305 0 295 1 1 6 F +P 2 1 1 6 50 -300 34 -300 N +P 2 1 1 6 50 -200 34 -200 N +P 2 1 1 6 50 -100 34 -100 N +P 2 1 1 6 50 0 34 0 N +P 2 1 1 6 50 100 34 100 N +P 2 1 1 6 50 200 34 200 N +P 2 1 1 6 50 300 34 300 N +X Pin_1 1 200 300 150 L 50 50 1 1 P +X Pin_2 2 200 200 150 L 50 50 1 1 P +X Pin_3 3 200 100 150 L 50 50 1 1 P +X Pin_4 4 200 0 150 L 50 50 1 1 P +X Pin_5 5 200 -100 150 L 50 50 1 1 P +X Pin_6 6 200 -200 150 L 50 50 1 1 P +X Pin_7 7 200 -300 150 L 50 50 1 1 P +ENDDRAW +ENDDEF +# +# Connector_Conn_01x08_Male +# +DEF Connector_Conn_01x08_Male J 0 40 Y N 1 F N +F0 "J" 0 400 50 H V C CNN +F1 "Connector_Conn_01x08_Male" 0 -500 50 H V C CNN +F2 "" 0 0 50 H I C CNN +F3 "" 0 0 50 H I C CNN +$FPLIST + Connector*:*_1x??_* +$ENDFPLIST +DRAW +S 34 -395 0 -405 1 1 6 F +S 34 -295 0 -305 1 1 6 F +S 34 -195 0 -205 1 1 6 F +S 34 -95 0 -105 1 1 6 F +S 34 5 0 -5 1 1 6 F +S 34 105 0 95 1 1 6 F +S 34 205 0 195 1 1 6 F +S 34 305 0 295 1 1 6 F +P 2 1 1 6 50 -400 34 -400 N +P 2 1 1 6 50 -300 34 -300 N +P 2 1 1 6 50 -200 34 -200 N +P 2 1 1 6 50 -100 34 -100 N +P 2 1 1 6 50 0 34 0 N +P 2 1 1 6 50 100 34 100 N +P 2 1 1 6 50 200 34 200 N +P 2 1 1 6 50 300 34 300 N +X Pin_1 1 200 300 150 L 50 50 1 1 P +X Pin_2 2 200 200 150 L 50 50 1 1 P +X Pin_3 3 200 100 150 L 50 50 1 1 P +X Pin_4 4 200 0 150 L 50 50 1 1 P +X Pin_5 5 200 -100 150 L 50 50 1 1 P +X Pin_6 6 200 -200 150 L 50 50 1 1 P +X Pin_7 7 200 -300 150 L 50 50 1 1 P +X Pin_8 8 200 -400 150 L 50 50 1 1 P +ENDDRAW +ENDDEF +# +# Device_R +# +DEF Device_R R 0 0 N Y 1 F N +F0 "R" 80 0 50 V V C CNN +F1 "Device_R" 0 0 50 V V C CNN +F2 "" -70 0 50 V I C CNN +F3 "" 0 0 50 H I C CNN +$FPLIST + R_* +$ENDFPLIST +DRAW +S -40 -100 40 100 0 1 10 N +X ~ 1 0 150 50 D 50 50 1 1 P +X ~ 2 0 -150 50 U 50 50 1 1 P +ENDDRAW +ENDDEF +# +# ESP32-DEVKITC-32U_ESP32-DEVKITC-32U +# +DEF ESP32-DEVKITC-32U_ESP32-DEVKITC-32U U 0 40 Y Y 1 L N +F0 "U" -601 1026 50 H V L BNN +F1 "ESP32-DEVKITC-32U_ESP32-DEVKITC-32U" -601 -1101 50 H V L BNN +F2 "MODULE_ESP32-DEVKITC-32U" 0 0 50 H I L BNN +F3 "Manufacturer Recommendations" 0 0 50 H I L BNN +F4 "ESPRESSIF" 0 0 50 H I L BNN +F5 "N/A" 0 0 50 H I L BNN +DRAW +P 2 0 0 10 -600 -1000 -600 1000 N +P 2 0 0 10 -600 1000 600 1000 N +P 2 0 0 10 600 -1000 -600 -1000 N +P 2 0 0 10 600 1000 600 -1000 N +X 3V3 1 -800 900 200 R 40 40 0 0 W +X IO26 10 -800 0 200 R 40 40 0 0 B +X IO27 11 -800 -100 200 R 40 40 0 0 B +X IO14 12 -800 -200 200 R 40 40 0 0 B +X IO12 13 -800 -300 200 R 40 40 0 0 B +X GND1 14 -800 -400 200 R 40 40 0 0 W +X IO13 15 -800 -500 200 R 40 40 0 0 B +X SD2 16 -800 -600 200 R 40 40 0 0 B +X SD3 17 -800 -700 200 R 40 40 0 0 B +X CMD 18 -800 -800 200 R 40 40 0 0 B +X EXT_5V 19 -800 -900 200 R 40 40 0 0 W +X EN 2 -800 800 200 R 40 40 0 0 I +X CLK 20 800 -900 200 L 40 40 0 0 I C +X SD0 21 800 -800 200 L 40 40 0 0 B +X SD1 22 800 -700 200 L 40 40 0 0 B +X IO15 23 800 -600 200 L 40 40 0 0 B +X IO2 24 800 -500 200 L 40 40 0 0 B +X IO0 25 800 -400 200 L 40 40 0 0 B +X IO4 26 800 -300 200 L 40 40 0 0 B +X IO16 27 800 -200 200 L 40 40 0 0 B +X IO17 28 800 -100 200 L 40 40 0 0 B +X IO5 29 800 0 200 L 40 40 0 0 B +X SENSOR_VP 3 -800 700 200 R 40 40 0 0 I +X IO18 30 800 100 200 L 40 40 0 0 B +X IO19 31 800 200 200 L 40 40 0 0 B +X GND2 32 800 300 200 L 40 40 0 0 W +X IO21 33 800 400 200 L 40 40 0 0 B +X RXD0 34 800 500 200 L 40 40 0 0 I +X TXD0 35 800 600 200 L 40 40 0 0 O +X IO22 36 800 700 200 L 40 40 0 0 B +X IO23 37 800 800 200 L 40 40 0 0 B +X GND3 38 800 900 200 L 40 40 0 0 W +X SENSOR_VN 4 -800 600 200 R 40 40 0 0 I +X IO34 5 -800 500 200 R 40 40 0 0 B +X IO35 6 -800 400 200 R 40 40 0 0 B +X IO32 7 -800 300 200 R 40 40 0 0 B +X IO33 8 -800 200 200 R 40 40 0 0 B +X IO25 9 -800 100 200 R 40 40 0 0 B +ENDDRAW +ENDDEF +# +# Transistor_BJT_BC337 +# +DEF Transistor_BJT_BC337 Q 0 0 Y N 1 F N +F0 "Q" 200 75 50 H V L CNN +F1 "Transistor_BJT_BC337" 200 0 50 H V L CNN +F2 "Package_TO_SOT_THT:TO-92_Inline" 200 -75 50 H I L CIN +F3 "" 0 0 50 H I L CNN +ALIAS BC546 BC548 BC549 BC550 BC337 BC338 +$FPLIST + TO?92* +$ENDFPLIST +DRAW +C 50 0 111 0 1 10 N +P 2 0 1 0 0 0 25 0 N +P 2 0 1 0 25 25 100 100 N +P 3 0 1 0 25 -25 100 -100 100 -100 N +P 3 0 1 20 25 75 25 -75 25 -75 N +P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F +X C 1 100 200 100 D 50 50 1 1 P +X B 2 -200 0 200 R 50 50 1 1 I +X E 3 100 -200 100 U 50 50 1 1 P +ENDDRAW +ENDDEF +# +# Transistor_FET_IRF9540N +# +DEF Transistor_FET_IRF9540N Q 0 20 Y N 1 F N +F0 "Q" 200 75 50 H V L CNN +F1 "Transistor_FET_IRF9540N" 200 0 50 H V L CNN +F2 "Package_TO_SOT_THT:TO-220-3_Vertical" 200 -75 50 H I L CIN +F3 "" 0 0 50 H I L CNN +ALIAS IRF4905 FQP27P06 +$FPLIST + TO?220* +$ENDFPLIST +DRAW +C 65 0 110 0 1 10 N +C 100 -70 10 0 1 0 F +C 100 70 10 0 1 0 F +P 2 0 1 0 10 0 -100 0 N +P 2 0 1 10 10 75 10 -75 N +P 2 0 1 10 30 -50 30 -90 N +P 2 0 1 10 30 20 30 -20 N +P 2 0 1 10 30 90 30 50 N +P 2 0 1 0 100 100 100 70 N +P 3 0 1 0 100 -100 100 0 30 0 N +P 4 0 1 0 30 70 130 70 130 -70 30 -70 N +P 4 0 1 0 90 0 50 15 50 -15 90 0 F +P 4 0 1 0 110 -20 115 -15 145 -15 150 -10 N +P 4 0 1 0 130 -15 115 10 145 10 130 -15 N +X G 1 -200 0 100 R 50 50 1 1 I +X D 2 100 200 100 D 50 50 1 1 P +X S 3 100 -200 100 U 50 50 1 1 P +ENDDRAW +ENDDEF +# +# power_GND +# +DEF power_GND #PWR 0 0 Y Y 1 F P +F0 "#PWR" 0 -250 50 H I C CNN +F1 "power_GND" 0 -150 50 H V C CNN +F2 "" 0 0 50 H I C CNN +F3 "" 0 0 50 H I C CNN +DRAW +P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N +X GND 1 0 0 0 D 50 50 1 1 W N +ENDDRAW +ENDDEF +# +# power_VCC +# +DEF power_VCC #PWR 0 0 Y Y 1 F P +F0 "#PWR" 0 -150 50 H I C CNN +F1 "power_VCC" 0 150 50 H V C CNN +F2 "" 0 0 50 H I C CNN +F3 "" 0 0 50 H I C CNN +DRAW +P 2 0 1 0 -30 50 0 100 N +P 2 0 1 0 0 0 0 100 N +P 2 0 1 0 0 100 30 50 N +X VCC 1 0 0 0 U 50 50 1 1 W N +ENDDRAW +ENDDEF +# +#End Library diff --git a/PCBs/ESP32_Breakout_Carrier/Tonuino-ESP32_2.kicad_pcb b/PCBs/ESP32_Breakout_Carrier/Tonuino-ESP32_2.kicad_pcb new file mode 100644 index 0000000..afc0918 --- /dev/null +++ b/PCBs/ESP32_Breakout_Carrier/Tonuino-ESP32_2.kicad_pcb @@ -0,0 +1,2410 @@ +(kicad_pcb (version 20171130) (host pcbnew "(5.1.7-0-10_14)") + + (general + (thickness 1.6) + (drawings 46) + (tracks 223) + (zones 0) + (modules 17) + (nets 43) + ) + + (page A4) + (layers + (0 F.Cu signal) + (31 B.Cu signal) + (32 B.Adhes user) + (33 F.Adhes user) + (34 B.Paste user) + (35 F.Paste user) + (36 B.SilkS user) + (37 F.SilkS user) + (38 B.Mask user) + (39 F.Mask user) + (40 Dwgs.User user) + (41 Cmts.User user) + (42 Eco1.User user) + (43 Eco2.User user) + (44 Edge.Cuts user) + (45 Margin user) + (46 B.CrtYd user) + (47 F.CrtYd user) + (48 B.Fab user) + (49 F.Fab user) + ) + + (setup + (last_trace_width 0.4) + (trace_clearance 0.2) + (zone_clearance 0.508) + (zone_45_only no) + (trace_min 0.2) + (via_size 0.8) + (via_drill 0.4) + (via_min_size 0.4) + (via_min_drill 0.3) + (uvia_size 0.3) + (uvia_drill 0.1) + (uvias_allowed no) + (uvia_min_size 0.2) + (uvia_min_drill 0.1) + (edge_width 0.05) + (segment_width 0.2) + (pcb_text_width 0.3) + (pcb_text_size 1.5 1.5) + (mod_edge_width 0.12) + (mod_text_size 1 1) + (mod_text_width 0.15) + (pad_size 1.524 1.524) + (pad_drill 0.762) + (pad_to_mask_clearance 0) + (aux_axis_origin 0 0) + (visible_elements FFFFFF7F) + (pcbplotparams + (layerselection 0x010fc_ffffffff) + (usegerberextensions false) + (usegerberattributes true) + (usegerberadvancedattributes true) + (creategerberjobfile true) + (excludeedgelayer true) + (linewidth 0.100000) + (plotframeref false) + (viasonmask false) + (mode 1) + (useauxorigin false) + (hpglpennumber 1) + (hpglpenspeed 20) + (hpglpendiameter 15.000000) + (psnegative false) + (psa4output false) + (plotreference true) + (plotvalue true) + (plotinvisibletext false) + (padsonsilk false) + (subtractmaskfromsilk false) + (outputformat 1) + (mirror false) + (drillshape 1) + (scaleselection 1) + (outputdirectory "")) + ) + + (net 0 "") + (net 1 "Net-(U1-Pad35)") + (net 2 "Net-(U1-Pad34)") + (net 3 "Net-(U1-Pad25)") + (net 4 "Net-(U1-Pad24)") + (net 5 "Net-(U1-Pad22)") + (net 6 "Net-(U1-Pad21)") + (net 7 "Net-(U1-Pad20)") + (net 8 "Net-(U1-Pad18)") + (net 9 "Net-(U1-Pad17)") + (net 10 "Net-(U1-Pad16)") + (net 11 "Net-(U1-Pad4)") + (net 12 "Net-(U1-Pad3)") + (net 13 "Net-(U1-Pad2)") + (net 14 "Net-(Q1-Pad2)") + (net 15 GND) + (net 16 GPIO-17) + (net 17 "Net-(J3-Pad4)") + (net 18 "Net-(J3-Pad3)") + (net 19 SD-CARD_CS) + (net 20 SD-CARD_SCK) + (net 21 SD-CARD_MOSI) + (net 22 SD-CARD_MISO) + (net 23 SWITCHED_VCC) + (net 24 RFID_SDA) + (net 25 RFID_SCK) + (net 26 RFID_MOSI) + (net 27 RFID_MISO) + (net 28 RFID_RST) + (net 29 3.3V) + (net 30 ROTARY_CLR) + (net 31 ROTARY_DT) + (net 32 ROTARY_BUTTON) + (net 33 BUTTON_PREVIOUS_PIN) + (net 34 BUTTON_NEXT_PIN) + (net 35 BUTTON_PLAY_PAUSE_PIN) + (net 36 NEOPIXEL_DI) + (net 37 VCC) + (net 38 MAX98357_LRC) + (net 39 MAX98357_DIN) + (net 40 MAX98357_BLCK) + (net 41 "Net-(J2-Pad4)") + (net 42 "Net-(Q1-Pad1)") + + (net_class Default "This is the default net class." + (clearance 0.2) + (trace_width 0.4) + (via_dia 0.8) + (via_drill 0.4) + (uvia_dia 0.3) + (uvia_drill 0.1) + (add_net 3.3V) + (add_net BUTTON_NEXT_PIN) + (add_net BUTTON_PLAY_PAUSE_PIN) + (add_net BUTTON_PREVIOUS_PIN) + (add_net GND) + (add_net GPIO-17) + (add_net MAX98357_BLCK) + (add_net MAX98357_DIN) + (add_net MAX98357_LRC) + (add_net NEOPIXEL_DI) + (add_net "Net-(J2-Pad4)") + (add_net "Net-(J3-Pad3)") + (add_net "Net-(J3-Pad4)") + (add_net "Net-(Q1-Pad1)") + (add_net "Net-(Q1-Pad2)") + (add_net "Net-(U1-Pad16)") + (add_net "Net-(U1-Pad17)") + (add_net "Net-(U1-Pad18)") + (add_net "Net-(U1-Pad2)") + (add_net "Net-(U1-Pad20)") + (add_net "Net-(U1-Pad21)") + (add_net "Net-(U1-Pad22)") + (add_net "Net-(U1-Pad24)") + (add_net "Net-(U1-Pad25)") + (add_net "Net-(U1-Pad3)") + (add_net "Net-(U1-Pad34)") + (add_net "Net-(U1-Pad35)") + (add_net "Net-(U1-Pad4)") + (add_net RFID_MISO) + (add_net RFID_MOSI) + (add_net RFID_RST) + (add_net RFID_SCK) + (add_net RFID_SDA) + (add_net ROTARY_BUTTON) + (add_net ROTARY_CLR) + (add_net ROTARY_DT) + (add_net SD-CARD_CS) + (add_net SD-CARD_MISO) + (add_net SD-CARD_MOSI) + (add_net SD-CARD_SCK) + (add_net SWITCHED_VCC) + (add_net VCC) + ) + + (module MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad (layer F.Cu) (tedit 56D1B4CB) (tstamp 5F7CAA3F) + (at 201.55408 108.6993) + (descr "Mounting Hole 3.2mm, M3, ISO7380") + (tags "mounting hole 3.2mm m3 iso7380") + (attr virtual) + (fp_text reference REF** (at 0 -3.85) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value MountingHole_3.2mm_M3_ISO7380_Pad (at 0 3.85) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 2.85 0) (layer Cmts.User) (width 0.15)) + (fp_circle (center 0 0) (end 3.1 0) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 0.3 0) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 1 thru_hole circle (at 0 0) (size 5.7 5.7) (drill 3.2) (layers *.Cu *.Mask)) + ) + + (module MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad (layer F.Cu) (tedit 56D1B4CB) (tstamp 5F7CA9FB) + (at 137.5791 34.84118) + (descr "Mounting Hole 3.2mm, M3, ISO7380") + (tags "mounting hole 3.2mm m3 iso7380") + (attr virtual) + (fp_text reference REF** (at 0 -3.85) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value MountingHole_3.2mm_M3_ISO7380_Pad (at 0 3.85) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 2.85 0) (layer Cmts.User) (width 0.15)) + (fp_circle (center 0 0) (end 3.1 0) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 0.3 0) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 1 thru_hole circle (at 0 0) (size 5.7 5.7) (drill 3.2) (layers *.Cu *.Mask)) + ) + + (module ESP32-DEVKITC-32U:MODULE_ESP32-DEVKITC-32U (layer F.Cu) (tedit 5F7798AE) (tstamp 5F78DFB2) + (at 153.67 85.09) + (path /5F79096D) + (fp_text reference U1 (at -10.795 -31.75) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.015))) + ) + (fp_text value ESP32-DEVKITC-32U (at 0.18542 -1.59004) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.015))) + ) + (fp_line (start 4.31 24.38) (end 14.2 24.38) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.31 25.25) (end 4.31 24.38) (layer F.CrtYd) (width 0.05)) + (fp_line (start -4.32 25.25) (end 4.31 25.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -4.32 24.38) (end -4.32 25.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -14.2 24.38) (end -4.32 24.38) (layer F.CrtYd) (width 0.05)) + (fp_line (start 9.25 -30.55) (end 9.25 -24.38) (layer F.CrtYd) (width 0.05)) + (fp_line (start -9.25 -30.55) (end 9.25 -30.55) (layer F.CrtYd) (width 0.05)) + (fp_line (start -9.25 -24.38) (end -9.25 -30.55) (layer F.CrtYd) (width 0.05)) + (fp_line (start -9.25 -24.38) (end -14.2 -24.38) (layer F.CrtYd) (width 0.05)) + (fp_line (start 14.2 -24.38) (end 9.25 -24.38) (layer F.CrtYd) (width 0.05)) + (fp_line (start 14.2 24.38) (end 14.2 -24.38) (layer F.CrtYd) (width 0.05)) + (fp_line (start -14.2 -24.38) (end -14.2 24.38) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.06 24.1) (end 13.95 24.1) (layer F.SilkS) (width 0.127)) + (fp_line (start 4.06 25) (end 4.06 24.1) (layer F.SilkS) (width 0.127)) + (fp_line (start -4.07 25) (end 4.06 25) (layer F.SilkS) (width 0.127)) + (fp_line (start -4.07 24.1) (end -4.07 25) (layer F.SilkS) (width 0.127)) + (fp_line (start -13.95 24.1) (end -4.07 24.1) (layer F.SilkS) (width 0.127)) + (fp_line (start 9 -30.3) (end 9 -24.1) (layer F.SilkS) (width 0.127)) + (fp_line (start -9 -30.3) (end 9 -30.3) (layer F.SilkS) (width 0.127)) + (fp_line (start -9 -24.1) (end -9 -30.3) (layer F.SilkS) (width 0.127)) + (fp_line (start -9 -24.1) (end -13.95 -24.1) (layer F.SilkS) (width 0.127)) + (fp_line (start 13.95 -24.1) (end 9 -24.1) (layer F.SilkS) (width 0.127)) + (fp_line (start 13.95 24.1) (end 13.95 -24.1) (layer F.SilkS) (width 0.127)) + (fp_line (start -13.95 -24.1) (end -13.95 24.1) (layer F.SilkS) (width 0.127)) + (fp_line (start 4.06 24.1) (end 13.95 24.1) (layer F.Fab) (width 0.127)) + (fp_line (start 4.06 25) (end 4.06 24.1) (layer F.Fab) (width 0.127)) + (fp_line (start -4.07 25) (end 4.06 25) (layer F.Fab) (width 0.127)) + (fp_line (start -4.07 24.1) (end -4.07 25) (layer F.Fab) (width 0.127)) + (fp_line (start -13.95 24.1) (end -4.07 24.1) (layer F.Fab) (width 0.127)) + (fp_line (start 9 -30.3) (end 9 -24.1) (layer F.Fab) (width 0.127)) + (fp_line (start -9 -30.3) (end 9 -30.3) (layer F.Fab) (width 0.127)) + (fp_line (start -9 -24.1) (end -9 -30.3) (layer F.Fab) (width 0.127)) + (fp_line (start -9 -24.1) (end -13.95 -24.1) (layer F.Fab) (width 0.127)) + (fp_line (start 9 -24.1) (end -9 -24.1) (layer F.Fab) (width 0.127)) + (fp_line (start 13.95 -24.1) (end 9 -24.1) (layer F.Fab) (width 0.127)) + (fp_line (start 13.95 24.1) (end 13.95 -24.1) (layer F.Fab) (width 0.127)) + (fp_line (start -13.95 -24.1) (end -13.95 24.1) (layer F.Fab) (width 0.127)) + (fp_circle (center -14.57 -22.97) (end -14.47 -22.97) (layer F.Fab) (width 0.2)) + (fp_circle (center -14.57 -22.97) (end -14.47 -22.97) (layer F.SilkS) (width 0.2)) + (pad 38 thru_hole circle (at 12.7 -22.85) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 15 GND)) + (pad 37 thru_hole circle (at 12.7 -20.31) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 26 RFID_MOSI)) + (pad 36 thru_hole circle (at 12.7 -17.77) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 28 RFID_RST)) + (pad 35 thru_hole circle (at 12.7 -15.23) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 1 "Net-(U1-Pad35)")) + (pad 34 thru_hole circle (at 12.7 -12.69) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 2 "Net-(U1-Pad34)")) + (pad 33 thru_hole circle (at 12.7 -10.15) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 24 RFID_SDA)) + (pad 32 thru_hole circle (at 12.7 -7.61) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 15 GND)) + (pad 31 thru_hole circle (at 12.7 -5.07) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 27 RFID_MISO)) + (pad 30 thru_hole circle (at 12.7 -2.53) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 25 RFID_SCK)) + (pad 29 thru_hole circle (at 12.7 0.01) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 35 BUTTON_PLAY_PAUSE_PIN)) + (pad 28 thru_hole circle (at 12.7 2.55) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 16 GPIO-17)) + (pad 27 thru_hole circle (at 12.7 5.09) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 22 SD-CARD_MISO)) + (pad 26 thru_hole circle (at 12.7 7.63) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 34 BUTTON_NEXT_PIN)) + (pad 25 thru_hole circle (at 12.7 10.17) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 3 "Net-(U1-Pad25)")) + (pad 24 thru_hole circle (at 12.7 12.71) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 4 "Net-(U1-Pad24)")) + (pad 23 thru_hole circle (at 12.7 15.25) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 19 SD-CARD_CS)) + (pad 22 thru_hole circle (at 12.7 17.79) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 5 "Net-(U1-Pad22)")) + (pad 21 thru_hole circle (at 12.7 20.33) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 6 "Net-(U1-Pad21)")) + (pad 20 thru_hole circle (at 12.7 22.87) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 7 "Net-(U1-Pad20)")) + (pad 19 thru_hole circle (at -12.7 22.87) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 37 VCC)) + (pad 18 thru_hole circle (at -12.7 20.33) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 8 "Net-(U1-Pad18)")) + (pad 17 thru_hole circle (at -12.7 17.79) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 9 "Net-(U1-Pad17)")) + (pad 16 thru_hole circle (at -12.7 15.25) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 10 "Net-(U1-Pad16)")) + (pad 15 thru_hole circle (at -12.7 12.71) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 21 SD-CARD_MOSI)) + (pad 14 thru_hole circle (at -12.7 10.17) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 15 GND)) + (pad 13 thru_hole circle (at -12.7 7.63) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 36 NEOPIXEL_DI)) + (pad 12 thru_hole circle (at -12.7 5.09) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 20 SD-CARD_SCK)) + (pad 11 thru_hole circle (at -12.7 2.55) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 40 MAX98357_BLCK)) + (pad 10 thru_hole circle (at -12.7 0.01) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 38 MAX98357_LRC)) + (pad 9 thru_hole circle (at -12.7 -2.53) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 39 MAX98357_DIN)) + (pad 8 thru_hole circle (at -12.7 -5.07) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 33 BUTTON_PREVIOUS_PIN)) + (pad 7 thru_hole circle (at -12.7 -7.61) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 32 ROTARY_BUTTON)) + (pad 6 thru_hole circle (at -12.7 -10.15) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 31 ROTARY_DT)) + (pad 5 thru_hole circle (at -12.7 -12.69) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 30 ROTARY_CLR)) + (pad 4 thru_hole circle (at -12.7 -15.23) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 11 "Net-(U1-Pad4)")) + (pad 3 thru_hole circle (at -12.7 -17.77) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 12 "Net-(U1-Pad3)")) + (pad 2 thru_hole circle (at -12.7 -20.31) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 13 "Net-(U1-Pad2)")) + (pad 1 thru_hole rect (at -12.7 -22.85) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 29 3.3V)) + ) + + (module mod_s:PinHeader_1x06_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 5F7A4DF1) + (at 190.5 68.58 270) + (descr "Through hole straight pin header, 1x06, 2.54mm pitch, single row") + (tags "Through hole pin header THT 1x06 2.54mm single row") + (path /5F7ED32A) + (fp_text reference J1 (at 0 -2.33 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "SD-Card Reader" (at 2.47142 6.2357 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 -1.27) (end 1.27 13.97) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 13.97) (end -1.27 13.97) (layer F.Fab) (width 0.1)) + (fp_line (start -1.27 13.97) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) + (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start -1.33 14.03) (end 1.33 14.03) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end -1.33 14.03) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.33 1.27) (end 1.33 14.03) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.8 -1.8) (end -1.8 14.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 14.5) (end 1.8 14.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.8 14.5) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 0 6.35) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 6 thru_hole oval (at 0 12.7 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 19 SD-CARD_CS)) + (pad 5 thru_hole oval (at 0 10.16 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 20 SD-CARD_SCK)) + (pad 4 thru_hole oval (at 0 7.62 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 21 SD-CARD_MOSI)) + (pad 3 thru_hole oval (at 0 5.08 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 22 SD-CARD_MISO)) + (pad 2 thru_hole oval (at 0 2.54 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 23 SWITCHED_VCC)) + (pad 1 thru_hole rect (at 0 0 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 15 GND)) + (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x06_P2.54mm_Vertical.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module mod_s:PinHeader_1x02_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 5F7B36D3) + (at 175.26 35.56 90) + (descr "Through hole straight pin header, 1x02, 2.54mm pitch, single row") + (tags "Through hole pin header THT 1x02 2.54mm single row") + (path /5F945F11) + (fp_text reference J9 (at 0 -2.33 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Power (at -2.54 1.27 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.8 4.35) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 4.35) (end 1.8 4.35) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 -1.8) (end -1.8 4.35) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.33 1.27) (end 1.33 3.87) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end -1.33 3.87) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 3.87) (end 1.33 3.87) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start -1.27 3.81) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 3.81) (end -1.27 3.81) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 -1.27) (end 1.27 3.81) (layer F.Fab) (width 0.1)) + (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) + (fp_text user %R (at 0 1.27) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 2 thru_hole oval (at 0 2.54 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 37 VCC)) + (pad 1 thru_hole rect (at 0 0 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 15 GND)) + (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x02_P2.54mm_Vertical.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module mod_s:PinHeader_1x03_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 5F7B2861) + (at 199.39 40.64 180) + (descr "Through hole straight pin header, 1x03, 2.54mm pitch, single row") + (tags "Through hole pin header THT 1x03 2.54mm single row") + (path /5F936A23) + (fp_text reference J8 (at 0 -2.33) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value WS2812 (at 2.54 2.54 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.8 6.85) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 6.85) (end 1.8 6.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 -1.8) (end -1.8 6.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.33 1.27) (end 1.33 6.41) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end -1.33 6.41) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 6.41) (end 1.33 6.41) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start -1.27 6.35) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 6.35) (end -1.27 6.35) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 -1.27) (end 1.27 6.35) (layer F.Fab) (width 0.1)) + (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) + (fp_text user %R (at 0 2.54 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 3 thru_hole oval (at 0 5.08 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 23 SWITCHED_VCC)) + (pad 2 thru_hole oval (at 0 2.54 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 36 NEOPIXEL_DI)) + (pad 1 thru_hole rect (at 0 0 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 15 GND)) + (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x03_P2.54mm_Vertical.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module mod_s:PinHeader_1x02_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 5F7B1F30) + (at 186.69 40.64 90) + (descr "Through hole straight pin header, 1x02, 2.54mm pitch, single row") + (tags "Through hole pin header THT 1x02 2.54mm single row") + (path /5F90F726) + (fp_text reference J7 (at 0 -2.33 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Pause (at 2.54 1.27 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.8 4.35) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 4.35) (end 1.8 4.35) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 -1.8) (end -1.8 4.35) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.33 1.27) (end 1.33 3.87) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end -1.33 3.87) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 3.87) (end 1.33 3.87) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start -1.27 3.81) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 3.81) (end -1.27 3.81) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 -1.27) (end 1.27 3.81) (layer F.Fab) (width 0.1)) + (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) + (fp_text user %R (at 0 1.27) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 2 thru_hole oval (at 0 2.54 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 35 BUTTON_PLAY_PAUSE_PIN)) + (pad 1 thru_hole rect (at 0 0 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 15 GND)) + (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x02_P2.54mm_Vertical.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module mod_s:PinHeader_1x02_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 5F7B1F1A) + (at 186.69 35.56 90) + (descr "Through hole straight pin header, 1x02, 2.54mm pitch, single row") + (tags "Through hole pin header THT 1x02 2.54mm single row") + (path /5F90EAED) + (fp_text reference J6 (at 0 -2.33 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Prev (at 2.54 1.27 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.8 4.35) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 4.35) (end 1.8 4.35) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 -1.8) (end -1.8 4.35) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.33 1.27) (end 1.33 3.87) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end -1.33 3.87) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 3.87) (end 1.33 3.87) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start -1.27 3.81) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 3.81) (end -1.27 3.81) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 -1.27) (end 1.27 3.81) (layer F.Fab) (width 0.1)) + (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) + (fp_text user %R (at 0 1.27) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 2 thru_hole oval (at 0 2.54 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 34 BUTTON_NEXT_PIN)) + (pad 1 thru_hole rect (at 0 0 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 15 GND)) + (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x02_P2.54mm_Vertical.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module mod_s:PinHeader_1x02_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 5F7B1F04) + (at 186.69 45.72 90) + (descr "Through hole straight pin header, 1x02, 2.54mm pitch, single row") + (tags "Through hole pin header THT 1x02 2.54mm single row") + (path /5F9085EF) + (fp_text reference J5 (at 0 -2.33 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Next (at 2.54 1.27 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.8 4.35) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 4.35) (end 1.8 4.35) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 -1.8) (end -1.8 4.35) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.33 1.27) (end 1.33 3.87) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end -1.33 3.87) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 3.87) (end 1.33 3.87) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start -1.27 3.81) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 3.81) (end -1.27 3.81) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 -1.27) (end 1.27 3.81) (layer F.Fab) (width 0.1)) + (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) + (fp_text user %R (at 0 1.27) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 2 thru_hole oval (at 0 2.54 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 33 BUTTON_PREVIOUS_PIN)) + (pad 1 thru_hole rect (at 0 0 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 15 GND)) + (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x02_P2.54mm_Vertical.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module mod_s:PinHeader_1x08_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 5F7B1E8A) + (at 199.39 66.04 180) + (descr "Through hole straight pin header, 1x08, 2.54mm pitch, single row") + (tags "Through hole pin header THT 1x08 2.54mm single row") + (path /5F92011C) + (fp_text reference J2 (at 0 -2.33) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value RFID-RC522 (at 2.54 10.16 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.8 19.55) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 19.55) (end 1.8 19.55) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 -1.8) (end -1.8 19.55) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.33 1.27) (end 1.33 19.11) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end -1.33 19.11) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 19.11) (end 1.33 19.11) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start -1.27 19.05) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 19.05) (end -1.27 19.05) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 -1.27) (end 1.27 19.05) (layer F.Fab) (width 0.1)) + (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) + (fp_text user %R (at 0 8.89 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 8 thru_hole oval (at 0 17.78 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 24 RFID_SDA)) + (pad 7 thru_hole oval (at 0 15.24 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 25 RFID_SCK)) + (pad 6 thru_hole oval (at 0 12.7 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 26 RFID_MOSI)) + (pad 5 thru_hole oval (at 0 10.16 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 27 RFID_MISO)) + (pad 4 thru_hole oval (at 0 7.62 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 41 "Net-(J2-Pad4)")) + (pad 3 thru_hole oval (at 0 5.08 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 15 GND)) + (pad 2 thru_hole oval (at 0 2.54 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 28 RFID_RST)) + (pad 1 thru_hole rect (at 0 0 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 16 GPIO-17)) + (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x08_P2.54mm_Vertical.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module mod_s:PinHeader_1x07_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 5F7BA532) + (at 155.00604 50.18532 270) + (descr "Through hole straight pin header, 1x07, 2.54mm pitch, single row") + (tags "Through hole pin header THT 1x07 2.54mm single row") + (path /5F81C714) + (fp_text reference J3 (at 0 -2.33 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Adafruit MAX98357" (at -2.35204 7.6835 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 -1.27) (end 1.27 16.51) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 16.51) (end -1.27 16.51) (layer F.Fab) (width 0.1)) + (fp_line (start -1.27 16.51) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) + (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start -1.33 16.57) (end 1.33 16.57) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end -1.33 16.57) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.33 1.27) (end 1.33 16.57) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.8 -1.8) (end -1.8 17.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 17.05) (end 1.8 17.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.8 17.05) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 0 7.62) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 7 thru_hole oval (at 0 15.24 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 38 MAX98357_LRC)) + (pad 6 thru_hole oval (at 0 12.7 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 40 MAX98357_BLCK)) + (pad 5 thru_hole oval (at 0 10.16 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 39 MAX98357_DIN)) + (pad 4 thru_hole oval (at 0 7.62 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 17 "Net-(J3-Pad4)")) + (pad 3 thru_hole oval (at 0 5.08 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 18 "Net-(J3-Pad3)")) + (pad 2 thru_hole oval (at 0 2.54 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 15 GND)) + (pad 1 thru_hole rect (at 0 0 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 23 SWITCHED_VCC)) + (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x07_P2.54mm_Vertical.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module mod_s:PinHeader_1x05_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 5F7A297D) + (at 180.34 53.34 90) + (descr "Through hole straight pin header, 1x05, 2.54mm pitch, single row") + (tags "Through hole pin header THT 1x05 2.54mm single row") + (path /5F7BD0A2) + (fp_text reference J4 (at 0 -2.33 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Rotary Encode" (at 2.54 5.08 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.8 11.95) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 11.95) (end 1.8 11.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 -1.8) (end -1.8 11.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.33 1.27) (end 1.33 11.49) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end -1.33 11.49) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 11.49) (end 1.33 11.49) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start -1.27 11.43) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 11.43) (end -1.27 11.43) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 -1.27) (end 1.27 11.43) (layer F.Fab) (width 0.1)) + (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) + (fp_text user %R (at 0 5.08) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 5 thru_hole oval (at 0 10.16 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 32 ROTARY_BUTTON)) + (pad 4 thru_hole oval (at 0 7.62 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 31 ROTARY_DT)) + (pad 3 thru_hole oval (at 0 5.08 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 30 ROTARY_CLR)) + (pad 2 thru_hole oval (at 0 2.54 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 29 3.3V)) + (pad 1 thru_hole rect (at 0 0 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 15 GND)) + (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x05_P2.54mm_Vertical.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module adafruit:0207_9 (layer F.Cu) (tedit 200000) (tstamp 5F7A1AB3) + (at 176.53 46.99) + (path /5F7995ED) + (attr virtual) + (fp_text reference R5 (at 0.127 2.54) (layer F.SilkS) + (effects (font (size 1.27 1.27) (thickness 0.127))) + ) + (fp_text value 4,7k (at 0 0) (layer F.SilkS) + (effects (font (size 1.27 1.27) (thickness 0.127))) + ) + (fp_line (start 3.175 0.889) (end 3.175 -0.889) (layer F.SilkS) (width 0.1524)) + (fp_line (start 2.921 1.143) (end 2.54 1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start 2.921 -1.143) (end 2.54 -1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start 2.413 1.016) (end -2.413 1.016) (layer F.SilkS) (width 0.1524)) + (fp_line (start 2.413 1.016) (end 2.54 1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start 2.413 -1.016) (end -2.413 -1.016) (layer F.SilkS) (width 0.1524)) + (fp_line (start 2.413 -1.016) (end 2.54 -1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start -2.413 1.016) (end -2.54 1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start -2.921 1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start -2.413 -1.016) (end -2.54 -1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start -2.921 -1.143) (end -2.54 -1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start -3.175 0.889) (end -3.175 -0.889) (layer F.SilkS) (width 0.1524)) + (fp_line (start -4.0386 0.3048) (end -4.0386 -0.3048) (layer F.SilkS) (width 0.06604)) + (fp_line (start -4.0386 -0.3048) (end -3.175 -0.3048) (layer F.SilkS) (width 0.06604)) + (fp_line (start -3.175 0.3048) (end -3.175 -0.3048) (layer F.SilkS) (width 0.06604)) + (fp_line (start -4.0386 0.3048) (end -3.175 0.3048) (layer F.SilkS) (width 0.06604)) + (fp_line (start 3.175 0.3048) (end 3.175 -0.3048) (layer F.SilkS) (width 0.06604)) + (fp_line (start 3.175 -0.3048) (end 4.0386 -0.3048) (layer F.SilkS) (width 0.06604)) + (fp_line (start 4.0386 0.3048) (end 4.0386 -0.3048) (layer F.SilkS) (width 0.06604)) + (fp_line (start 3.175 0.3048) (end 4.0386 0.3048) (layer F.SilkS) (width 0.06604)) + (fp_arc (start 2.921 -0.889) (end 2.921 -1.143) (angle 90) (layer F.SilkS) (width 0.1524)) + (fp_arc (start 2.921 0.889) (end 3.175 0.889) (angle 90) (layer F.SilkS) (width 0.1524)) + (fp_arc (start -2.921 0.889) (end -2.921 1.143) (angle 90) (layer F.SilkS) (width 0.1524)) + (fp_arc (start -2.921 -0.889) (end -3.175 -0.889) (angle 90) (layer F.SilkS) (width 0.1524)) + (pad 2 thru_hole circle (at 4.572 0) (size 1.6764 3.3528) (drill 0.8128) (layers *.Cu *.Paste *.Mask) + (net 16 GPIO-17)) + (pad 1 thru_hole circle (at -4.572 0) (size 1.6764 3.3528) (drill 0.8128) (layers *.Cu *.Paste *.Mask) + (net 14 "Net-(Q1-Pad2)")) + ) + + (module adafruit:0207_9 (layer F.Cu) (tedit 200000) (tstamp 5F7A1A95) + (at 176.53 40.64) + (path /5F798E7D) + (attr virtual) + (fp_text reference R4 (at 0 2.54) (layer F.SilkS) + (effects (font (size 1.27 1.27) (thickness 0.127))) + ) + (fp_text value 10k (at 0 0) (layer F.SilkS) + (effects (font (size 1.27 1.27) (thickness 0.127))) + ) + (fp_line (start 3.175 0.889) (end 3.175 -0.889) (layer F.SilkS) (width 0.1524)) + (fp_line (start 2.921 1.143) (end 2.54 1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start 2.921 -1.143) (end 2.54 -1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start 2.413 1.016) (end -2.413 1.016) (layer F.SilkS) (width 0.1524)) + (fp_line (start 2.413 1.016) (end 2.54 1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start 2.413 -1.016) (end -2.413 -1.016) (layer F.SilkS) (width 0.1524)) + (fp_line (start 2.413 -1.016) (end 2.54 -1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start -2.413 1.016) (end -2.54 1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start -2.921 1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start -2.413 -1.016) (end -2.54 -1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start -2.921 -1.143) (end -2.54 -1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start -3.175 0.889) (end -3.175 -0.889) (layer F.SilkS) (width 0.1524)) + (fp_line (start -4.0386 0.3048) (end -4.0386 -0.3048) (layer F.SilkS) (width 0.06604)) + (fp_line (start -4.0386 -0.3048) (end -3.175 -0.3048) (layer F.SilkS) (width 0.06604)) + (fp_line (start -3.175 0.3048) (end -3.175 -0.3048) (layer F.SilkS) (width 0.06604)) + (fp_line (start -4.0386 0.3048) (end -3.175 0.3048) (layer F.SilkS) (width 0.06604)) + (fp_line (start 3.175 0.3048) (end 3.175 -0.3048) (layer F.SilkS) (width 0.06604)) + (fp_line (start 3.175 -0.3048) (end 4.0386 -0.3048) (layer F.SilkS) (width 0.06604)) + (fp_line (start 4.0386 0.3048) (end 4.0386 -0.3048) (layer F.SilkS) (width 0.06604)) + (fp_line (start 3.175 0.3048) (end 4.0386 0.3048) (layer F.SilkS) (width 0.06604)) + (fp_arc (start 2.921 -0.889) (end 2.921 -1.143) (angle 90) (layer F.SilkS) (width 0.1524)) + (fp_arc (start 2.921 0.889) (end 3.175 0.889) (angle 90) (layer F.SilkS) (width 0.1524)) + (fp_arc (start -2.921 0.889) (end -2.921 1.143) (angle 90) (layer F.SilkS) (width 0.1524)) + (fp_arc (start -2.921 -0.889) (end -3.175 -0.889) (angle 90) (layer F.SilkS) (width 0.1524)) + (pad 2 thru_hole circle (at 4.572 0) (size 1.6764 3.3528) (drill 0.8128) (layers *.Cu *.Paste *.Mask) + (net 15 GND)) + (pad 1 thru_hole circle (at -4.572 0) (size 1.6764 3.3528) (drill 0.8128) (layers *.Cu *.Paste *.Mask) + (net 14 "Net-(Q1-Pad2)")) + ) + + (module adafruit:0207_9 (layer F.Cu) (tedit 200000) (tstamp 5F7A1A77) + (at 164.592 46.99 180) + (path /5F79873B) + (attr virtual) + (fp_text reference R1 (at -0.508 -2.54) (layer F.SilkS) + (effects (font (size 1.27 1.27) (thickness 0.127))) + ) + (fp_text value 10k (at -0.508 0) (layer F.SilkS) + (effects (font (size 1.27 1.27) (thickness 0.127))) + ) + (fp_line (start 3.175 0.889) (end 3.175 -0.889) (layer F.SilkS) (width 0.1524)) + (fp_line (start 2.921 1.143) (end 2.54 1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start 2.921 -1.143) (end 2.54 -1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start 2.413 1.016) (end -2.413 1.016) (layer F.SilkS) (width 0.1524)) + (fp_line (start 2.413 1.016) (end 2.54 1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start 2.413 -1.016) (end -2.413 -1.016) (layer F.SilkS) (width 0.1524)) + (fp_line (start 2.413 -1.016) (end 2.54 -1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start -2.413 1.016) (end -2.54 1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start -2.921 1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start -2.413 -1.016) (end -2.54 -1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start -2.921 -1.143) (end -2.54 -1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start -3.175 0.889) (end -3.175 -0.889) (layer F.SilkS) (width 0.1524)) + (fp_line (start -4.0386 0.3048) (end -4.0386 -0.3048) (layer F.SilkS) (width 0.06604)) + (fp_line (start -4.0386 -0.3048) (end -3.175 -0.3048) (layer F.SilkS) (width 0.06604)) + (fp_line (start -3.175 0.3048) (end -3.175 -0.3048) (layer F.SilkS) (width 0.06604)) + (fp_line (start -4.0386 0.3048) (end -3.175 0.3048) (layer F.SilkS) (width 0.06604)) + (fp_line (start 3.175 0.3048) (end 3.175 -0.3048) (layer F.SilkS) (width 0.06604)) + (fp_line (start 3.175 -0.3048) (end 4.0386 -0.3048) (layer F.SilkS) (width 0.06604)) + (fp_line (start 4.0386 0.3048) (end 4.0386 -0.3048) (layer F.SilkS) (width 0.06604)) + (fp_line (start 3.175 0.3048) (end 4.0386 0.3048) (layer F.SilkS) (width 0.06604)) + (fp_arc (start 2.921 -0.889) (end 2.921 -1.143) (angle 90) (layer F.SilkS) (width 0.1524)) + (fp_arc (start 2.921 0.889) (end 3.175 0.889) (angle 90) (layer F.SilkS) (width 0.1524)) + (fp_arc (start -2.921 0.889) (end -2.921 1.143) (angle 90) (layer F.SilkS) (width 0.1524)) + (fp_arc (start -2.921 -0.889) (end -3.175 -0.889) (angle 90) (layer F.SilkS) (width 0.1524)) + (pad 2 thru_hole circle (at 4.572 0 180) (size 1.6764 3.3528) (drill 0.8128) (layers *.Cu *.Paste *.Mask) + (net 42 "Net-(Q1-Pad1)")) + (pad 1 thru_hole circle (at -4.572 0 180) (size 1.6764 3.3528) (drill 0.8128) (layers *.Cu *.Paste *.Mask) + (net 37 VCC)) + ) + + (module Package_TO_SOT_THT:TO-220-3_Vertical (layer F.Cu) (tedit 5AC8BA0D) (tstamp 5F78F3DE) + (at 166.37 41.91 90) + (descr "TO-220-3, Vertical, RM 2.54mm, see https://www.vishay.com/docs/66542/to-220-1.pdf") + (tags "TO-220-3 Vertical RM 2.54mm") + (path /5F78F572) + (fp_text reference Q2 (at 2.54 -4.27 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value IRF9540N (at 2.54 2.5 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -2.46 -3.15) (end -2.46 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start -2.46 1.25) (end 7.54 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 7.54 1.25) (end 7.54 -3.15) (layer F.Fab) (width 0.1)) + (fp_line (start 7.54 -3.15) (end -2.46 -3.15) (layer F.Fab) (width 0.1)) + (fp_line (start -2.46 -1.88) (end 7.54 -1.88) (layer F.Fab) (width 0.1)) + (fp_line (start 0.69 -3.15) (end 0.69 -1.88) (layer F.Fab) (width 0.1)) + (fp_line (start 4.39 -3.15) (end 4.39 -1.88) (layer F.Fab) (width 0.1)) + (fp_line (start -2.58 -3.27) (end 7.66 -3.27) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.58 1.371) (end 7.66 1.371) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.58 -3.27) (end -2.58 1.371) (layer F.SilkS) (width 0.12)) + (fp_line (start 7.66 -3.27) (end 7.66 1.371) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.58 -1.76) (end 7.66 -1.76) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.69 -3.27) (end 0.69 -1.76) (layer F.SilkS) (width 0.12)) + (fp_line (start 4.391 -3.27) (end 4.391 -1.76) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.71 -3.4) (end -2.71 1.51) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.71 1.51) (end 7.79 1.51) (layer F.CrtYd) (width 0.05)) + (fp_line (start 7.79 1.51) (end 7.79 -3.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start 7.79 -3.4) (end -2.71 -3.4) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 2.54 -4.27 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 3 thru_hole oval (at 5.08 0 90) (size 1.905 2) (drill 1.1) (layers *.Cu *.Mask) + (net 37 VCC)) + (pad 2 thru_hole oval (at 2.54 0 90) (size 1.905 2) (drill 1.1) (layers *.Cu *.Mask) + (net 23 SWITCHED_VCC)) + (pad 1 thru_hole rect (at 0 0 90) (size 1.905 2) (drill 1.1) (layers *.Cu *.Mask) + (net 42 "Net-(Q1-Pad1)")) + (model ${KISYS3DMOD}/Package_TO_SOT_THT.3dshapes/TO-220-3_Vertical.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Package_TO_SOT_THT:TO-92_Inline_Wide (layer F.Cu) (tedit 5A02FF81) (tstamp 5F78EA5C) + (at 172.72 53.34 180) + (descr "TO-92 leads in-line, wide, drill 0.75mm (see NXP sot054_po.pdf)") + (tags "to-92 sc-43 sc-43a sot54 PA33 transistor") + (path /5F78DA7C) + (fp_text reference Q1 (at 2.54 -3.56) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value BC337 (at 2.54 2.79) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 0.74 1.85) (end 4.34 1.85) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.8 1.75) (end 4.3 1.75) (layer F.Fab) (width 0.1)) + (fp_line (start -1.01 -2.73) (end 6.09 -2.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.01 -2.73) (end -1.01 2.01) (layer F.CrtYd) (width 0.05)) + (fp_line (start 6.09 2.01) (end 6.09 -2.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start 6.09 2.01) (end -1.01 2.01) (layer F.CrtYd) (width 0.05)) + (fp_arc (start 2.54 0) (end 4.34 1.85) (angle -20) (layer F.SilkS) (width 0.12)) + (fp_arc (start 2.54 0) (end 2.54 -2.48) (angle -135) (layer F.Fab) (width 0.1)) + (fp_arc (start 2.54 0) (end 2.54 -2.48) (angle 135) (layer F.Fab) (width 0.1)) + (fp_arc (start 2.54 0) (end 2.54 -2.6) (angle 65) (layer F.SilkS) (width 0.12)) + (fp_arc (start 2.54 0) (end 2.54 -2.6) (angle -65) (layer F.SilkS) (width 0.12)) + (fp_arc (start 2.54 0) (end 0.74 1.85) (angle 20) (layer F.SilkS) (width 0.12)) + (fp_text user %R (at 2.54 0) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 1 thru_hole rect (at 0 0 180) (size 1.5 1.5) (drill 0.8) (layers *.Cu *.Mask) + (net 42 "Net-(Q1-Pad1)")) + (pad 3 thru_hole circle (at 5.08 0 180) (size 1.5 1.5) (drill 0.8) (layers *.Cu *.Mask) + (net 15 GND)) + (pad 2 thru_hole circle (at 2.54 0 180) (size 1.5 1.5) (drill 0.8) (layers *.Cu *.Mask) + (net 14 "Net-(Q1-Pad2)")) + (model ${KISYS3DMOD}/Package_TO_SOT_THT.3dshapes/TO-92_Inline_Wide.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (gr_line (start 133.35 109.22) (end 133.35 34.29) (layer Edge.Cuts) (width 0.05)) + (gr_line (start 201.93 113.03) (end 137.16 113.03) (layer Edge.Cuts) (width 0.05)) + (gr_line (start 205.74 34.29) (end 205.74 109.22) (layer Edge.Cuts) (width 0.05)) + (gr_line (start 201.93 30.48) (end 137.16 30.48) (layer Edge.Cuts) (width 0.05)) + (gr_arc (start 137.16 34.29) (end 137.16 30.48) (angle -90) (layer Edge.Cuts) (width 0.05)) + (gr_arc (start 137.16 109.22) (end 133.35 109.22) (angle -90) (layer Edge.Cuts) (width 0.05)) + (gr_arc (start 201.93 109.22) (end 201.93 113.03) (angle -90) (layer Edge.Cuts) (width 0.05)) + (gr_arc (start 201.93 34.29) (end 205.74 34.29) (angle -90) (layer Edge.Cuts) (width 0.05)) + (gr_text GAIN (at 147.33524 53.00726 90) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text "Tonuino ESP-32 I2S V0.1\nCC-BY-SA mariolukas.de " (at 201.93 83.82 90) (layer F.SilkS) + (effects (font (size 1.27 1.27) (thickness 0.15))) + ) + (gr_text CS (at 177.8762 64.52616 90) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text SCK (at 180.45938 64.10452 90) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text MOSI (at 182.96382 63.92418 90) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text MISO (at 185.4073 63.96482 90) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text 5V (at 188.17082 64.68618 90) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text GND (at 190.6143 64.34582 90) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text BTN (at 190.63208 56.0578 90) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text DT (at 188.10224 55.75808 90) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text CLR (at 185.43016 56.1086 90) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text "3.3V\n" (at 182.78348 56.26608 90) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text "GND\n" (at 180.35778 56.1213 90) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text GND (at 202.16876 40.6908) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text 5V (at 201.7141 35.60064) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text DI (at 201.56678 38.3159) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text 5V (at 155.25242 52.49418 90) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text DIN (at 144.87144 52.78882 90) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text BCLK (at 142.28572 53.26888 90) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text LRC (at 139.80414 52.94376 90) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text "SD\n" (at 149.99208 52.52974 90) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text GND (at 152.54986 52.91328 90) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text 3.3V (at 202.24242 65.8495) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text "RST\n" (at 202.0189 63.54826) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text GND (at 202.06208 60.93714) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text MISO (at 202.26274 55.9435) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text MOSI (at 202.26274 53.32222) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text "SDA\n" (at 201.93 48.26) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text GND (at 175.24476 32.55518 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (gr_text "GND\n" (at 175.26 33.02) (layer F.CrtYd) + (effects (font (size 1 1) (thickness 0.15))) + ) + (gr_text 5V (at 177.8 33.02) (layer F.CrtYd) + (effects (font (size 1 1) (thickness 0.15))) + ) + (gr_text "-\n" (at 177.8 33.02) (layer F.CrtYd) + (effects (font (size 1 1) (thickness 0.15))) + ) + (gr_text - (at 175.26 33.02) (layer F.CrtYd) + (effects (font (size 1 1) (thickness 0.15))) + ) + (gr_text "5V\n" (at 177.85588 33.13176 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (gr_line (start 173.99 102.87) (end 194.31 102.87) (layer F.SilkS) (width 0.12) (tstamp 5F7B4106)) + (gr_line (start 194.31 66.04) (end 173.99 66.04) (layer F.SilkS) (width 0.12) (tstamp 5F7B4105)) + (gr_line (start 194.31 102.87) (end 194.31 66.04) (layer F.SilkS) (width 0.12)) + (gr_line (start 173.99 66.04) (end 173.99 102.87) (layer F.SilkS) (width 0.12)) + + (segment (start 160.02 46.99) (end 160.02 45.72) (width 0.4) (layer B.Cu) (net 42)) + (segment (start 163.83 41.91) (end 166.37 41.91) (width 0.4) (layer B.Cu) (net 42)) + (segment (start 160.02 45.72) (end 163.83 41.91) (width 0.4) (layer B.Cu) (net 42)) + (segment (start 171.958 40.64) (end 171.958 46.99) (width 0.4) (layer B.Cu) (net 14)) + (segment (start 170.18 53.34) (end 170.18 50.8) (width 0.4) (layer B.Cu) (net 14)) + (segment (start 171.958 49.022) (end 171.958 46.99) (width 0.4) (layer B.Cu) (net 14)) + (segment (start 170.18 50.8) (end 171.958 49.022) (width 0.4) (layer B.Cu) (net 14)) + (via (at 193.04 64.77) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 15)) + (via (at 153.67 72.39) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 15)) + (segment (start 181.102 46.99) (end 177.8 46.99) (width 0.4) (layer F.Cu) (net 16)) + (via (at 157.48 78.74) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 16)) + (segment (start 157.48 62.23) (end 157.48 78.74) (width 0.4) (layer F.Cu) (net 16)) + (segment (start 163.83 55.88) (end 157.48 62.23) (width 0.4) (layer F.Cu) (net 16)) + (via (at 162.56 85.09) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 16)) + (segment (start 157.48 80.01) (end 162.56 85.09) (width 0.4) (layer B.Cu) (net 16)) + (segment (start 157.48 78.74) (end 157.48 80.01) (width 0.4) (layer B.Cu) (net 16)) + (segment (start 165.11 87.64) (end 166.37 87.64) (width 0.4) (layer F.Cu) (net 16)) + (segment (start 162.56 85.09) (end 165.11 87.64) (width 0.4) (layer F.Cu) (net 16)) + (segment (start 163.83 55.88) (end 173.99 55.88) (width 0.4) (layer F.Cu) (net 16)) + (segment (start 173.99 55.88) (end 175.26 54.61) (width 0.4) (layer F.Cu) (net 16)) + (segment (start 175.26 54.61) (end 175.26 48.26) (width 0.4) (layer F.Cu) (net 16)) + (segment (start 175.26 48.26) (end 176.53 46.99) (width 0.4) (layer F.Cu) (net 16)) + (segment (start 176.53 46.99) (end 177.8 46.99) (width 0.4) (layer F.Cu) (net 16)) + (segment (start 181.102 46.99) (end 182.372 48.26) (width 0.4) (layer B.Cu) (net 16)) + (segment (start 182.372 48.26) (end 195.58 48.26) (width 0.4) (layer B.Cu) (net 16)) + (segment (start 195.58 48.26) (end 198.12 45.72) (width 0.4) (layer B.Cu) (net 16)) + (segment (start 198.12 45.72) (end 200.66 45.72) (width 0.4) (layer B.Cu) (net 16)) + (segment (start 200.66 45.72) (end 201.93 46.99) (width 0.4) (layer B.Cu) (net 16)) + (segment (start 201.93 46.99) (end 201.93 64.77) (width 0.4) (layer B.Cu) (net 16)) + (segment (start 201.93 64.77) (end 200.66 66.04) (width 0.4) (layer B.Cu) (net 16)) + (segment (start 199.39 66.04) (end 200.66 66.04) (width 0.4) (layer B.Cu) (net 16)) + (segment (start 177.8 68.58) (end 177.8 99.06) (width 0.4) (layer F.Cu) (net 19)) + (segment (start 176.52 100.34) (end 166.37 100.34) (width 0.4) (layer F.Cu) (net 19)) + (segment (start 177.8 99.06) (end 176.52 100.34) (width 0.4) (layer F.Cu) (net 19)) + (segment (start 179.07 86.36) (end 182.88 82.55) (width 0.4) (layer B.Cu) (net 20)) + (segment (start 153.67 86.36) (end 179.07 86.36) (width 0.4) (layer B.Cu) (net 20)) + (segment (start 149.85 90.18) (end 153.67 86.36) (width 0.4) (layer B.Cu) (net 20)) + (segment (start 140.97 90.18) (end 149.85 90.18) (width 0.4) (layer B.Cu) (net 20)) + (segment (start 182.88 71.12) (end 180.34 68.58) (width 0.4) (layer B.Cu) (net 20)) + (segment (start 182.88 82.55) (end 182.88 71.12) (width 0.4) (layer B.Cu) (net 20)) + (segment (start 177.8 88.9) (end 152.4 88.9) (width 0.4) (layer B.Cu) (net 21)) + (segment (start 143.5 97.8) (end 140.97 97.8) (width 0.4) (layer B.Cu) (net 21)) + (segment (start 152.4 88.9) (end 143.5 97.8) (width 0.4) (layer B.Cu) (net 21)) + (segment (start 182.88 68.58) (end 182.88 69.85) (width 0.4) (layer B.Cu) (net 21)) + (segment (start 182.88 69.85) (end 184.15 71.12) (width 0.4) (layer B.Cu) (net 21)) + (segment (start 184.15 82.55) (end 177.8 88.9) (width 0.4) (layer B.Cu) (net 21)) + (segment (start 184.15 71.12) (end 184.15 82.55) (width 0.4) (layer B.Cu) (net 21)) + (segment (start 166.37 90.18) (end 177.79 90.18) (width 0.4) (layer B.Cu) (net 22)) + (segment (start 177.79 90.18) (end 185.42 82.55) (width 0.4) (layer B.Cu) (net 22)) + (segment (start 185.42 82.55) (end 185.42 68.58) (width 0.4) (layer B.Cu) (net 22)) + (segment (start 199.39 36.249998) (end 199.39 35.56) (width 0.4) (layer F.Cu) (net 23)) + (segment (start 187.96 68.58) (end 187.96 66.04) (width 0.4) (layer F.Cu) (net 23)) + (segment (start 187.96 66.04) (end 195.58 58.42) (width 0.4) (layer F.Cu) (net 23)) + (segment (start 195.58 46.870002) (end 199.270002 43.18) (width 0.4) (layer F.Cu) (net 23)) + (segment (start 195.58 58.42) (end 195.58 46.870002) (width 0.4) (layer F.Cu) (net 23)) + (segment (start 199.270002 43.18) (end 200.66 43.18) (width 0.4) (layer F.Cu) (net 23)) + (segment (start 200.66 43.18) (end 201.93 41.91) (width 0.4) (layer F.Cu) (net 23)) + (segment (start 201.93 41.91) (end 201.93 36.83) (width 0.4) (layer F.Cu) (net 23)) + (segment (start 201.93 36.83) (end 200.66 35.56) (width 0.4) (layer F.Cu) (net 23)) + (segment (start 200.66 35.56) (end 199.39 35.56) (width 0.4) (layer F.Cu) (net 23)) + (segment (start 154.94 50.11928) (end 155.00604 50.18532) (width 0.4) (layer B.Cu) (net 23)) + (segment (start 155.00604 50.18532) (end 155.00604 46.9011) (width 0.4) (layer F.Cu) (net 23)) + (segment (start 162.53714 39.37) (end 166.37 39.37) (width 0.4) (layer F.Cu) (net 23)) + (segment (start 155.00604 46.9011) (end 162.53714 39.37) (width 0.4) (layer F.Cu) (net 23)) + (segment (start 199.39 35.56) (end 195.58 31.75) (width 0.4) (layer B.Cu) (net 23)) + (segment (start 195.58 31.75) (end 165.92804 31.75) (width 0.4) (layer B.Cu) (net 23)) + (segment (start 165.92804 31.75) (end 163.52012 34.15792) (width 0.4) (layer B.Cu) (net 23)) + (segment (start 163.52012 34.15792) (end 163.52012 38.34384) (width 0.4) (layer B.Cu) (net 23)) + (segment (start 164.54628 39.37) (end 166.37 39.37) (width 0.4) (layer B.Cu) (net 23)) + (segment (start 163.52012 38.34384) (end 164.54628 39.37) (width 0.4) (layer B.Cu) (net 23)) + (segment (start 199.39 48.26) (end 185.42 62.23) (width 0.4) (layer B.Cu) (net 24)) + (segment (start 185.42 62.23) (end 168.91 62.23) (width 0.4) (layer B.Cu) (net 24)) + (segment (start 168.91 62.23) (end 167.64 63.5) (width 0.4) (layer B.Cu) (net 24)) + (segment (start 167.64 63.5) (end 165.1 63.5) (width 0.4) (layer B.Cu) (net 24)) + (segment (start 165.1 63.5) (end 163.83 64.77) (width 0.4) (layer B.Cu) (net 24)) + (segment (start 163.83 64.77) (end 163.83 73.66) (width 0.4) (layer B.Cu) (net 24)) + (segment (start 165.11 74.94) (end 166.37 74.94) (width 0.4) (layer B.Cu) (net 24)) + (segment (start 163.83 73.66) (end 165.11 74.94) (width 0.4) (layer B.Cu) (net 24)) + (segment (start 199.950003 54.629999) (end 195.560001 54.629999) (width 0.4) (layer B.Cu) (net 25)) + (segment (start 200.640001 53.940001) (end 199.950003 54.629999) (width 0.4) (layer B.Cu) (net 25)) + (segment (start 200.640001 52.050001) (end 200.640001 53.940001) (width 0.4) (layer B.Cu) (net 25)) + (segment (start 199.39 50.8) (end 200.640001 52.050001) (width 0.4) (layer B.Cu) (net 25)) + (segment (start 195.560001 54.629999) (end 185.42 64.77) (width 0.4) (layer B.Cu) (net 25)) + (segment (start 185.42 64.77) (end 170.18 64.77) (width 0.4) (layer B.Cu) (net 25)) + (segment (start 170.18 64.77) (end 168.91 66.04) (width 0.4) (layer B.Cu) (net 25)) + (segment (start 168.91 66.04) (end 168.91 81.28) (width 0.4) (layer B.Cu) (net 25)) + (segment (start 167.63 82.56) (end 166.37 82.56) (width 0.4) (layer B.Cu) (net 25)) + (segment (start 168.91 81.28) (end 167.63 82.56) (width 0.4) (layer B.Cu) (net 25)) + (segment (start 199.39 53.34) (end 195.58 53.34) (width 0.4) (layer B.Cu) (net 26)) + (segment (start 195.58 53.34) (end 185.42 63.5) (width 0.4) (layer B.Cu) (net 26)) + (segment (start 185.42 63.5) (end 168.91 63.5) (width 0.4) (layer B.Cu) (net 26)) + (segment (start 167.63 64.78) (end 166.37 64.78) (width 0.4) (layer B.Cu) (net 26)) + (segment (start 168.91 63.5) (end 167.63 64.78) (width 0.4) (layer B.Cu) (net 26)) + (segment (start 199.39 55.88) (end 195.58 55.88) (width 0.4) (layer B.Cu) (net 27)) + (segment (start 195.58 55.88) (end 185.42 66.04) (width 0.4) (layer B.Cu) (net 27)) + (segment (start 185.42 66.04) (end 171.45 66.04) (width 0.4) (layer B.Cu) (net 27)) + (segment (start 171.45 66.04) (end 170.18 67.31) (width 0.4) (layer B.Cu) (net 27)) + (segment (start 170.18 67.31) (end 170.18 81.28) (width 0.4) (layer B.Cu) (net 27)) + (segment (start 170.18 81.28) (end 167.64 83.82) (width 0.4) (layer B.Cu) (net 27)) + (segment (start 167.64 83.82) (end 165.1 83.82) (width 0.4) (layer B.Cu) (net 27)) + (segment (start 165.1 83.82) (end 163.83 82.55) (width 0.4) (layer B.Cu) (net 27)) + (segment (start 163.83 82.55) (end 163.83 81.28) (width 0.4) (layer B.Cu) (net 27)) + (segment (start 165.09 80.02) (end 166.37 80.02) (width 0.4) (layer B.Cu) (net 27)) + (segment (start 163.83 81.28) (end 165.09 80.02) (width 0.4) (layer B.Cu) (net 27)) + (via (at 180.34 72.39) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 28)) + (segment (start 190.5 72.39) (end 180.34 72.39) (width 0.4) (layer F.Cu) (net 28)) + (segment (start 199.39 63.5) (end 190.5 72.39) (width 0.4) (layer F.Cu) (net 28)) + (via (at 171.45 71.12) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 28)) + (segment (start 172.72 72.39) (end 171.45 71.12) (width 0.4) (layer B.Cu) (net 28)) + (segment (start 180.34 72.39) (end 172.72 72.39) (width 0.4) (layer B.Cu) (net 28)) + (segment (start 167.65 67.32) (end 166.37 67.32) (width 0.4) (layer F.Cu) (net 28)) + (segment (start 171.45 71.12) (end 167.65 67.32) (width 0.4) (layer F.Cu) (net 28)) + (segment (start 182.88 53.34) (end 185.42 50.8) (width 0.4) (layer B.Cu) (net 29)) + (segment (start 185.42 50.8) (end 191.77 50.8) (width 0.4) (layer B.Cu) (net 29)) + (segment (start 191.77 50.8) (end 193.04 52.07) (width 0.4) (layer B.Cu) (net 29)) + (segment (start 193.04 52.07) (end 193.04 53.34) (width 0.4) (layer B.Cu) (net 29)) + (segment (start 193.04 53.34) (end 185.42 60.96) (width 0.4) (layer B.Cu) (net 29)) + (segment (start 185.42 60.96) (end 148.59 60.96) (width 0.4) (layer B.Cu) (net 29)) + (segment (start 148.59 60.96) (end 147.32 62.23) (width 0.4) (layer B.Cu) (net 29)) + (segment (start 147.32 62.23) (end 147.32 73.66) (width 0.4) (layer B.Cu) (net 29)) + (segment (start 147.32 73.66) (end 142.24 78.74) (width 0.4) (layer B.Cu) (net 29)) + (segment (start 142.24 78.74) (end 139.7 78.74) (width 0.4) (layer B.Cu) (net 29)) + (segment (start 139.7 78.74) (end 138.43 77.47) (width 0.4) (layer B.Cu) (net 29)) + (segment (start 138.43 64.78) (end 140.97 62.24) (width 0.4) (layer B.Cu) (net 29)) + (segment (start 138.43 77.47) (end 138.43 64.78) (width 0.4) (layer B.Cu) (net 29)) + (segment (start 143.51 69.86) (end 140.97 72.4) (width 0.4) (layer B.Cu) (net 30)) + (segment (start 144.78 57.15) (end 143.51 58.42) (width 0.4) (layer B.Cu) (net 30)) + (segment (start 143.51 58.42) (end 143.51 69.86) (width 0.4) (layer B.Cu) (net 30)) + (segment (start 185.42 53.34) (end 181.61 57.15) (width 0.4) (layer B.Cu) (net 30)) + (segment (start 181.61 57.15) (end 144.78 57.15) (width 0.4) (layer B.Cu) (net 30)) + (segment (start 144.78 71.13) (end 140.97 74.94) (width 0.4) (layer B.Cu) (net 31)) + (segment (start 182.88 58.42) (end 146.05 58.42) (width 0.4) (layer B.Cu) (net 31)) + (segment (start 144.78 59.69) (end 144.78 71.13) (width 0.4) (layer B.Cu) (net 31)) + (segment (start 146.05 58.42) (end 144.78 59.69) (width 0.4) (layer B.Cu) (net 31)) + (segment (start 187.96 53.34) (end 182.88 58.42) (width 0.4) (layer B.Cu) (net 31)) + (segment (start 146.05 72.4) (end 140.97 77.48) (width 0.4) (layer B.Cu) (net 32)) + (segment (start 147.32 59.69) (end 146.05 60.96) (width 0.4) (layer B.Cu) (net 32)) + (segment (start 184.15 59.69) (end 147.32 59.69) (width 0.4) (layer B.Cu) (net 32)) + (segment (start 146.05 60.96) (end 146.05 72.4) (width 0.4) (layer B.Cu) (net 32)) + (segment (start 190.5 53.34) (end 184.15 59.69) (width 0.4) (layer B.Cu) (net 32)) + (segment (start 160.01 80.02) (end 140.97 80.02) (width 0.4) (layer F.Cu) (net 33)) + (segment (start 175.26 58.42) (end 163.83 58.42) (width 0.4) (layer F.Cu) (net 33)) + (segment (start 177.8 55.88) (end 175.26 58.42) (width 0.4) (layer F.Cu) (net 33)) + (segment (start 189.23 45.72) (end 189.23 49.53) (width 0.4) (layer F.Cu) (net 33)) + (segment (start 177.8 52.07) (end 177.8 55.88) (width 0.4) (layer F.Cu) (net 33)) + (segment (start 179.07 50.8) (end 177.8 52.07) (width 0.4) (layer F.Cu) (net 33)) + (segment (start 162.56 59.69) (end 162.56 77.47) (width 0.4) (layer F.Cu) (net 33)) + (segment (start 163.83 58.42) (end 162.56 59.69) (width 0.4) (layer F.Cu) (net 33)) + (segment (start 187.96 50.8) (end 179.07 50.8) (width 0.4) (layer F.Cu) (net 33)) + (segment (start 162.56 77.47) (end 160.01 80.02) (width 0.4) (layer F.Cu) (net 33)) + (segment (start 189.23 49.53) (end 187.96 50.8) (width 0.4) (layer F.Cu) (net 33)) + (segment (start 189.23 35.56) (end 190.5 35.56) (width 0.4) (layer F.Cu) (net 34)) + (segment (start 190.5 35.56) (end 193.64001 38.70001) (width 0.4) (layer F.Cu) (net 34)) + (segment (start 193.64001 38.70001) (end 193.64001 56.54999) (width 0.4) (layer F.Cu) (net 34)) + (segment (start 193.64001 56.54999) (end 184.75001 65.43999) (width 0.4) (layer F.Cu) (net 34)) + (segment (start 174.59001 65.43999) (end 172.72 67.31) (width 0.4) (layer F.Cu) (net 34)) + (segment (start 184.75001 65.43999) (end 174.59001 65.43999) (width 0.4) (layer F.Cu) (net 34)) + (segment (start 172.72 91.44) (end 171.45 92.71) (width 0.4) (layer F.Cu) (net 34)) + (segment (start 172.72 67.31) (end 172.72 91.44) (width 0.4) (layer F.Cu) (net 34)) + (segment (start 166.38 92.71) (end 166.37 92.72) (width 0.4) (layer F.Cu) (net 34)) + (segment (start 171.45 92.71) (end 166.38 92.71) (width 0.4) (layer F.Cu) (net 34)) + (segment (start 189.23 40.64) (end 189.23 41.91) (width 0.4) (layer B.Cu) (net 35)) + (segment (start 189.23 40.64) (end 190.5 40.64) (width 0.4) (layer F.Cu) (net 35)) + (segment (start 190.5 40.64) (end 193.04 43.18) (width 0.4) (layer F.Cu) (net 35)) + (segment (start 193.04 43.18) (end 193.04 55.88) (width 0.4) (layer F.Cu) (net 35)) + (segment (start 193.04 55.88) (end 189.23 59.69) (width 0.4) (layer F.Cu) (net 35)) + (segment (start 189.23 59.69) (end 165.1 59.69) (width 0.4) (layer F.Cu) (net 35)) + (segment (start 165.1 59.69) (end 163.83 60.96) (width 0.4) (layer F.Cu) (net 35)) + (segment (start 163.83 60.96) (end 163.83 83.82) (width 0.4) (layer F.Cu) (net 35)) + (segment (start 165.11 85.1) (end 166.37 85.1) (width 0.4) (layer F.Cu) (net 35)) + (segment (start 163.83 83.82) (end 165.11 85.1) (width 0.4) (layer F.Cu) (net 35)) + (segment (start 147.434999 99.174999) (end 140.98 92.72) (width 0.4) (layer F.Cu) (net 36)) + (segment (start 171.335001 99.174999) (end 147.434999 99.174999) (width 0.4) (layer F.Cu) (net 36)) + (segment (start 194.31 43.18) (end 194.31 57.15) (width 0.4) (layer F.Cu) (net 36)) + (segment (start 175.26 66.04) (end 173.99 67.31) (width 0.4) (layer F.Cu) (net 36)) + (segment (start 185.42 66.04) (end 175.26 66.04) (width 0.4) (layer F.Cu) (net 36)) + (segment (start 140.98 92.72) (end 140.97 92.72) (width 0.4) (layer F.Cu) (net 36)) + (segment (start 194.31 57.15) (end 185.42 66.04) (width 0.4) (layer F.Cu) (net 36)) + (segment (start 173.99 96.52) (end 171.335001 99.174999) (width 0.4) (layer F.Cu) (net 36)) + (segment (start 173.99 67.31) (end 173.99 96.52) (width 0.4) (layer F.Cu) (net 36)) + (segment (start 199.39 38.1) (end 194.31 43.18) (width 0.4) (layer F.Cu) (net 36)) + (segment (start 168.91 39.37) (end 170.18 38.1) (width 0.4) (layer B.Cu) (net 37)) + (segment (start 170.18 38.1) (end 176.53 38.1) (width 0.4) (layer B.Cu) (net 37)) + (segment (start 177.8 36.83) (end 177.8 35.56) (width 0.4) (layer B.Cu) (net 37)) + (segment (start 176.53 38.1) (end 177.8 36.83) (width 0.4) (layer B.Cu) (net 37)) + (segment (start 168.91 46.736) (end 169.164 46.99) (width 0.4) (layer B.Cu) (net 37)) + (segment (start 168.91 39.37) (end 168.91 46.736) (width 0.4) (layer B.Cu) (net 37)) + (segment (start 140.97 107.96) (end 138.43 105.42) (width 0.4) (layer F.Cu) (net 37)) + (segment (start 138.43 105.42) (end 138.43 40.64) (width 0.4) (layer F.Cu) (net 37)) + (segment (start 138.43 40.64) (end 139.7 39.37) (width 0.4) (layer F.Cu) (net 37)) + (segment (start 139.7 39.37) (end 159.97428 39.37) (width 0.4) (layer F.Cu) (net 37)) + (segment (start 162.51428 36.83) (end 166.37 36.83) (width 0.4) (layer F.Cu) (net 37)) + (segment (start 159.97428 39.37) (end 162.51428 36.83) (width 0.4) (layer F.Cu) (net 37)) + (segment (start 167.64 38.1) (end 166.794271 37.254271) (width 0.4) (layer B.Cu) (net 37)) + (segment (start 170.18 38.1) (end 167.64 38.1) (width 0.4) (layer B.Cu) (net 37)) + (segment (start 138.24204 50.18532) (end 139.76604 50.18532) (width 0.4) (layer B.Cu) (net 38)) + (segment (start 137.16 82.55) (end 137.16 51.26736) (width 0.4) (layer B.Cu) (net 38)) + (segment (start 137.16 51.26736) (end 138.24204 50.18532) (width 0.4) (layer B.Cu) (net 38)) + (segment (start 139.71 85.1) (end 137.16 82.55) (width 0.4) (layer B.Cu) (net 38)) + (segment (start 140.97 85.1) (end 139.71 85.1) (width 0.4) (layer B.Cu) (net 38)) + (segment (start 144.84604 47.52594) (end 144.84604 50.18532) (width 0.4) (layer B.Cu) (net 39)) + (segment (start 144.16024 46.84014) (end 144.84604 47.52594) (width 0.4) (layer B.Cu) (net 39)) + (segment (start 140.97 82.56) (end 142.23 82.56) (width 0.4) (layer B.Cu) (net 39)) + (segment (start 134.62 48.32096) (end 136.10082 46.84014) (width 0.4) (layer B.Cu) (net 39)) + (segment (start 138.43 88.9) (end 134.62 85.09) (width 0.4) (layer B.Cu) (net 39)) + (segment (start 143.51 87.63) (end 142.24 88.9) (width 0.4) (layer B.Cu) (net 39)) + (segment (start 142.23 82.56) (end 142.24 82.55) (width 0.4) (layer B.Cu) (net 39)) + (segment (start 134.62 85.09) (end 134.62 48.32096) (width 0.4) (layer B.Cu) (net 39)) + (segment (start 142.24 82.55) (end 143.51 83.82) (width 0.4) (layer B.Cu) (net 39)) + (segment (start 136.10082 46.84014) (end 144.16024 46.84014) (width 0.4) (layer B.Cu) (net 39)) + (segment (start 142.24 88.9) (end 138.43 88.9) (width 0.4) (layer B.Cu) (net 39)) + (segment (start 143.51 83.82) (end 143.51 87.63) (width 0.4) (layer B.Cu) (net 39)) + (segment (start 142.30604 48.83912) (end 142.30604 50.18532) (width 0.4) (layer B.Cu) (net 40)) + (segment (start 141.5669 48.09998) (end 142.30604 48.83912) (width 0.4) (layer B.Cu) (net 40)) + (segment (start 140.97 87.64) (end 139.71 87.64) (width 0.4) (layer B.Cu) (net 40)) + (segment (start 136.89584 48.09998) (end 141.5669 48.09998) (width 0.4) (layer B.Cu) (net 40)) + (segment (start 135.89 83.82) (end 135.89 49.10582) (width 0.4) (layer B.Cu) (net 40)) + (segment (start 139.71 87.64) (end 135.89 83.82) (width 0.4) (layer B.Cu) (net 40)) + (segment (start 135.89 49.10582) (end 136.89584 48.09998) (width 0.4) (layer B.Cu) (net 40)) + (segment (start 172.72 53.34) (end 172.72 53.92674) (width 0.4) (layer F.Cu) (net 42)) + (segment (start 172.72 53.34) (end 172.31868 53.34) (width 0.4) (layer F.Cu) (net 42)) + (segment (start 166.37 47.39132) (end 166.37 41.91) (width 0.4) (layer F.Cu) (net 42)) + (segment (start 172.31868 53.34) (end 166.37 47.39132) (width 0.4) (layer F.Cu) (net 42)) + + (zone (net 15) (net_name GND) (layer B.Cu) (tstamp 5FC0EE87) (hatch edge 0.508) + (connect_pads (clearance 0.508)) + (min_thickness 0.254) + (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508)) + (polygon + (pts + (xy 215.9 27.94) (xy 215.9 114.3) (xy 212.09 120.65) (xy 132.08 120.65) (xy 127 114.3) + (xy 127 31.75) (xy 130.81 26.67) (xy 132.08 24.13) (xy 212.09 24.13) + ) + ) + (filled_polygon + (pts + (xy 165.334749 31.156709) (xy 165.308599 31.188573) (xy 162.958699 33.538474) (xy 162.926829 33.564629) (xy 162.822485 33.691774) + (xy 162.822484 33.691775) (xy 162.744948 33.836834) (xy 162.697202 33.994232) (xy 162.68108 34.15792) (xy 162.68512 34.198939) + (xy 162.685121 38.302812) (xy 162.68108 38.34384) (xy 162.697202 38.507528) (xy 162.744948 38.664926) (xy 162.822484 38.809985) + (xy 162.822485 38.809986) (xy 162.92683 38.937131) (xy 162.958694 38.963281) (xy 163.926838 39.931426) (xy 163.952989 39.963291) + (xy 164.080134 40.067636) (xy 164.225193 40.145172) (xy 164.382591 40.192918) (xy 164.505261 40.205) (xy 164.505271 40.205) + (xy 164.546279 40.209039) (xy 164.587287 40.205) (xy 164.968769 40.205) (xy 164.996155 40.256235) (xy 165.099446 40.382095) + (xy 165.015506 40.426963) (xy 164.918815 40.506315) (xy 164.839463 40.603006) (xy 164.780498 40.71332) (xy 164.744188 40.833018) + (xy 164.731928 40.9575) (xy 164.731928 41.075) (xy 163.871018 41.075) (xy 163.83 41.07096) (xy 163.788982 41.075) + (xy 163.788981 41.075) (xy 163.666311 41.087082) (xy 163.508913 41.134828) (xy 163.363854 41.212364) (xy 163.236709 41.316709) + (xy 163.210563 41.348568) (xy 159.458574 45.100559) (xy 159.42671 45.126709) (xy 159.400562 45.158571) (xy 159.322364 45.253855) + (xy 159.244828 45.398914) (xy 159.197082 45.556312) (xy 159.18096 45.72) (xy 159.185001 45.761028) (xy 159.185001 45.776126) + (xy 159.08089 45.845691) (xy 158.875691 46.05089) (xy 158.714467 46.292178) (xy 158.603414 46.560283) (xy 158.5468 46.844902) + (xy 158.5468 47.135098) (xy 158.603414 47.419717) (xy 158.714467 47.687822) (xy 158.875691 47.92911) (xy 159.08089 48.134309) + (xy 159.322178 48.295533) (xy 159.590283 48.406586) (xy 159.874902 48.4632) (xy 160.165098 48.4632) (xy 160.449717 48.406586) + (xy 160.717822 48.295533) (xy 160.95911 48.134309) (xy 161.164309 47.92911) (xy 161.325533 47.687822) (xy 161.436586 47.419717) + (xy 161.4932 47.135098) (xy 161.4932 46.844902) (xy 161.436586 46.560283) (xy 161.325533 46.292178) (xy 161.164309 46.05089) + (xy 161.017143 45.903724) (xy 164.175869 42.745) (xy 164.731928 42.745) (xy 164.731928 42.8625) (xy 164.744188 42.986982) + (xy 164.780498 43.10668) (xy 164.839463 43.216994) (xy 164.918815 43.313685) (xy 165.015506 43.393037) (xy 165.12582 43.452002) + (xy 165.245518 43.488312) (xy 165.37 43.500572) (xy 167.37 43.500572) (xy 167.494482 43.488312) (xy 167.61418 43.452002) + (xy 167.724494 43.393037) (xy 167.821185 43.313685) (xy 167.900537 43.216994) (xy 167.959502 43.10668) (xy 167.995812 42.986982) + (xy 168.008072 42.8625) (xy 168.008072 40.9575) (xy 167.995812 40.833018) (xy 167.959502 40.71332) (xy 167.900537 40.603006) + (xy 167.821185 40.506315) (xy 167.724494 40.426963) (xy 167.640554 40.382095) (xy 167.743845 40.256235) (xy 167.891255 39.980449) + (xy 167.98203 39.681204) (xy 168.012681 39.37) (xy 167.98203 39.058796) (xy 167.944477 38.935) (xy 168.195717 38.935) + (xy 168.134828 39.048914) (xy 168.087082 39.206312) (xy 168.07096 39.37) (xy 168.075 39.411019) (xy 168.075001 45.99558) + (xy 168.019691 46.05089) (xy 167.858467 46.292178) (xy 167.747414 46.560283) (xy 167.6908 46.844902) (xy 167.6908 47.135098) + (xy 167.747414 47.419717) (xy 167.858467 47.687822) (xy 168.019691 47.92911) (xy 168.22489 48.134309) (xy 168.466178 48.295533) + (xy 168.734283 48.406586) (xy 169.018902 48.4632) (xy 169.309098 48.4632) (xy 169.593717 48.406586) (xy 169.861822 48.295533) + (xy 170.10311 48.134309) (xy 170.308309 47.92911) (xy 170.469533 47.687822) (xy 170.561 47.467002) (xy 170.652467 47.687822) + (xy 170.813691 47.92911) (xy 171.01889 48.134309) (xy 171.123 48.203874) (xy 171.123 48.676131) (xy 169.618574 50.180559) + (xy 169.58671 50.206709) (xy 169.560562 50.238571) (xy 169.482364 50.333855) (xy 169.404828 50.478914) (xy 169.357082 50.636312) + (xy 169.34096 50.8) (xy 169.345001 50.841028) (xy 169.345 52.232204) (xy 169.297114 52.264201) (xy 169.104201 52.457114) + (xy 168.952629 52.683957) (xy 168.911489 52.783279) (xy 168.896277 52.741168) (xy 168.83586 52.628137) (xy 168.596993 52.562612) + (xy 167.819605 53.34) (xy 168.596993 54.117388) (xy 168.83586 54.051863) (xy 168.910164 53.893523) (xy 168.952629 53.996043) + (xy 169.104201 54.222886) (xy 169.297114 54.415799) (xy 169.523957 54.567371) (xy 169.776011 54.671775) (xy 170.043589 54.725) + (xy 170.316411 54.725) (xy 170.583989 54.671775) (xy 170.836043 54.567371) (xy 171.062886 54.415799) (xy 171.255799 54.222886) + (xy 171.333555 54.106517) (xy 171.344188 54.214482) (xy 171.380498 54.33418) (xy 171.439463 54.444494) (xy 171.518815 54.541185) + (xy 171.615506 54.620537) (xy 171.72582 54.679502) (xy 171.845518 54.715812) (xy 171.97 54.728072) (xy 173.47 54.728072) + (xy 173.594482 54.715812) (xy 173.71418 54.679502) (xy 173.824494 54.620537) (xy 173.921185 54.541185) (xy 174.000537 54.444494) + (xy 174.059502 54.33418) (xy 174.095812 54.214482) (xy 174.098223 54.19) (xy 178.851928 54.19) (xy 178.864188 54.314482) + (xy 178.900498 54.43418) (xy 178.959463 54.544494) (xy 179.038815 54.641185) (xy 179.135506 54.720537) (xy 179.24582 54.779502) + (xy 179.365518 54.815812) (xy 179.49 54.828072) (xy 180.05425 54.825) (xy 180.213 54.66625) (xy 180.213 53.467) + (xy 179.01375 53.467) (xy 178.855 53.62575) (xy 178.851928 54.19) (xy 174.098223 54.19) (xy 174.108072 54.09) + (xy 174.108072 52.59) (xy 174.098224 52.49) (xy 178.851928 52.49) (xy 178.855 53.05425) (xy 179.01375 53.213) + (xy 180.213 53.213) (xy 180.213 52.01375) (xy 180.05425 51.855) (xy 179.49 51.851928) (xy 179.365518 51.864188) + (xy 179.24582 51.900498) (xy 179.135506 51.959463) (xy 179.038815 52.038815) (xy 178.959463 52.135506) (xy 178.900498 52.24582) + (xy 178.864188 52.365518) (xy 178.851928 52.49) (xy 174.098224 52.49) (xy 174.095812 52.465518) (xy 174.059502 52.34582) + (xy 174.000537 52.235506) (xy 173.921185 52.138815) (xy 173.824494 52.059463) (xy 173.71418 52.000498) (xy 173.594482 51.964188) + (xy 173.47 51.951928) (xy 171.97 51.951928) (xy 171.845518 51.964188) (xy 171.72582 52.000498) (xy 171.615506 52.059463) + (xy 171.518815 52.138815) (xy 171.439463 52.235506) (xy 171.380498 52.34582) (xy 171.344188 52.465518) (xy 171.333555 52.573483) + (xy 171.255799 52.457114) (xy 171.062886 52.264201) (xy 171.015 52.232205) (xy 171.015 51.145867) (xy 172.519433 49.641436) + (xy 172.551291 49.615291) (xy 172.583545 49.57599) (xy 172.655636 49.488146) (xy 172.733172 49.343087) (xy 172.780918 49.185688) + (xy 172.79704 49.022) (xy 172.793 48.980982) (xy 172.793 48.203873) (xy 172.89711 48.134309) (xy 173.102309 47.92911) + (xy 173.263533 47.687822) (xy 173.374586 47.419717) (xy 173.4312 47.135098) (xy 173.4312 46.844902) (xy 173.374586 46.560283) + (xy 173.263533 46.292178) (xy 173.102309 46.05089) (xy 172.89711 45.845691) (xy 172.793 45.776127) (xy 172.793 44.87) + (xy 185.201928 44.87) (xy 185.205 45.43425) (xy 185.36375 45.593) (xy 186.563 45.593) (xy 186.563 44.39375) + (xy 186.817 44.39375) (xy 186.817 45.593) (xy 186.837 45.593) (xy 186.837 45.847) (xy 186.817 45.847) + (xy 186.817 47.04625) (xy 186.97575 47.205) (xy 187.54 47.208072) (xy 187.664482 47.195812) (xy 187.78418 47.159502) + (xy 187.894494 47.100537) (xy 187.991185 47.021185) (xy 188.070537 46.924494) (xy 188.129502 46.81418) (xy 188.151513 46.74162) + (xy 188.283368 46.873475) (xy 188.526589 47.03599) (xy 188.796842 47.147932) (xy 189.08374 47.205) (xy 189.37626 47.205) + (xy 189.663158 47.147932) (xy 189.933411 47.03599) (xy 190.176632 46.873475) (xy 190.383475 46.666632) (xy 190.54599 46.423411) + (xy 190.657932 46.153158) (xy 190.715 45.86626) (xy 190.715 45.57374) (xy 190.657932 45.286842) (xy 190.54599 45.016589) + (xy 190.383475 44.773368) (xy 190.176632 44.566525) (xy 189.933411 44.40401) (xy 189.663158 44.292068) (xy 189.37626 44.235) + (xy 189.08374 44.235) (xy 188.796842 44.292068) (xy 188.526589 44.40401) (xy 188.283368 44.566525) (xy 188.151513 44.69838) + (xy 188.129502 44.62582) (xy 188.070537 44.515506) (xy 187.991185 44.418815) (xy 187.894494 44.339463) (xy 187.78418 44.280498) + (xy 187.664482 44.244188) (xy 187.54 44.231928) (xy 186.97575 44.235) (xy 186.817 44.39375) (xy 186.563 44.39375) + (xy 186.40425 44.235) (xy 185.84 44.231928) (xy 185.715518 44.244188) (xy 185.59582 44.280498) (xy 185.485506 44.339463) + (xy 185.388815 44.418815) (xy 185.309463 44.515506) (xy 185.250498 44.62582) (xy 185.214188 44.745518) (xy 185.201928 44.87) + (xy 172.793 44.87) (xy 172.793 41.853873) (xy 172.89711 41.784309) (xy 173.021444 41.659975) (xy 180.26163 41.659975) + (xy 180.337838 41.907844) (xy 180.599865 42.032563) (xy 180.881189 42.103768) (xy 181.170999 42.118719) (xy 181.458157 42.076845) + (xy 181.731628 41.979754) (xy 181.866162 41.907844) (xy 181.94237 41.659975) (xy 181.772395 41.49) (xy 185.201928 41.49) + (xy 185.214188 41.614482) (xy 185.250498 41.73418) (xy 185.309463 41.844494) (xy 185.388815 41.941185) (xy 185.485506 42.020537) + (xy 185.59582 42.079502) (xy 185.715518 42.115812) (xy 185.84 42.128072) (xy 186.40425 42.125) (xy 186.563 41.96625) + (xy 186.563 40.767) (xy 185.36375 40.767) (xy 185.205 40.92575) (xy 185.201928 41.49) (xy 181.772395 41.49) + (xy 181.102 40.819605) (xy 180.26163 41.659975) (xy 173.021444 41.659975) (xy 173.102309 41.57911) (xy 173.263533 41.337822) + (xy 173.374586 41.069717) (xy 173.4312 40.785098) (xy 173.4312 40.708999) (xy 179.623281 40.708999) (xy 179.665155 40.996157) + (xy 179.762246 41.269628) (xy 179.834156 41.404162) (xy 180.082025 41.48037) (xy 180.922395 40.64) (xy 181.281605 40.64) + (xy 182.121975 41.48037) (xy 182.369844 41.404162) (xy 182.494563 41.142135) (xy 182.565768 40.860811) (xy 182.580719 40.571001) + (xy 182.538845 40.283843) (xy 182.441754 40.010372) (xy 182.369844 39.875838) (xy 182.121975 39.79963) (xy 181.281605 40.64) + (xy 180.922395 40.64) (xy 180.082025 39.79963) (xy 179.834156 39.875838) (xy 179.709437 40.137865) (xy 179.638232 40.419189) + (xy 179.623281 40.708999) (xy 173.4312 40.708999) (xy 173.4312 40.494902) (xy 173.374586 40.210283) (xy 173.263533 39.942178) + (xy 173.102309 39.70089) (xy 173.021444 39.620025) (xy 180.26163 39.620025) (xy 181.102 40.460395) (xy 181.772395 39.79) + (xy 185.201928 39.79) (xy 185.205 40.35425) (xy 185.36375 40.513) (xy 186.563 40.513) (xy 186.563 39.31375) + (xy 186.817 39.31375) (xy 186.817 40.513) (xy 186.837 40.513) (xy 186.837 40.767) (xy 186.817 40.767) + (xy 186.817 41.96625) (xy 186.97575 42.125) (xy 187.54 42.128072) (xy 187.664482 42.115812) (xy 187.78418 42.079502) + (xy 187.894494 42.020537) (xy 187.991185 41.941185) (xy 188.070537 41.844494) (xy 188.129502 41.73418) (xy 188.151513 41.66162) + (xy 188.283368 41.793475) (xy 188.395001 41.868066) (xy 188.395001 41.951019) (xy 188.407083 42.073689) (xy 188.454829 42.231087) + (xy 188.532365 42.376146) (xy 188.63671 42.503291) (xy 188.763855 42.607636) (xy 188.908914 42.685172) (xy 189.066312 42.732918) + (xy 189.23 42.74904) (xy 189.393689 42.732918) (xy 189.551087 42.685172) (xy 189.696146 42.607636) (xy 189.823291 42.503291) + (xy 189.927636 42.376146) (xy 190.005172 42.231087) (xy 190.052918 42.073689) (xy 190.065 41.951019) (xy 190.065 41.868065) + (xy 190.176632 41.793475) (xy 190.383475 41.586632) (xy 190.448042 41.49) (xy 197.901928 41.49) (xy 197.914188 41.614482) + (xy 197.950498 41.73418) (xy 198.009463 41.844494) (xy 198.088815 41.941185) (xy 198.185506 42.020537) (xy 198.29582 42.079502) + (xy 198.415518 42.115812) (xy 198.54 42.128072) (xy 199.10425 42.125) (xy 199.263 41.96625) (xy 199.263 40.767) + (xy 199.517 40.767) (xy 199.517 41.96625) (xy 199.67575 42.125) (xy 200.24 42.128072) (xy 200.364482 42.115812) + (xy 200.48418 42.079502) (xy 200.594494 42.020537) (xy 200.691185 41.941185) (xy 200.770537 41.844494) (xy 200.829502 41.73418) + (xy 200.865812 41.614482) (xy 200.878072 41.49) (xy 200.875 40.92575) (xy 200.71625 40.767) (xy 199.517 40.767) + (xy 199.263 40.767) (xy 198.06375 40.767) (xy 197.905 40.92575) (xy 197.901928 41.49) (xy 190.448042 41.49) + (xy 190.54599 41.343411) (xy 190.657932 41.073158) (xy 190.715 40.78626) (xy 190.715 40.49374) (xy 190.657932 40.206842) + (xy 190.54599 39.936589) (xy 190.383475 39.693368) (xy 190.176632 39.486525) (xy 189.933411 39.32401) (xy 189.663158 39.212068) + (xy 189.37626 39.155) (xy 189.08374 39.155) (xy 188.796842 39.212068) (xy 188.526589 39.32401) (xy 188.283368 39.486525) + (xy 188.151513 39.61838) (xy 188.129502 39.54582) (xy 188.070537 39.435506) (xy 187.991185 39.338815) (xy 187.894494 39.259463) + (xy 187.78418 39.200498) (xy 187.664482 39.164188) (xy 187.54 39.151928) (xy 186.97575 39.155) (xy 186.817 39.31375) + (xy 186.563 39.31375) (xy 186.40425 39.155) (xy 185.84 39.151928) (xy 185.715518 39.164188) (xy 185.59582 39.200498) + (xy 185.485506 39.259463) (xy 185.388815 39.338815) (xy 185.309463 39.435506) (xy 185.250498 39.54582) (xy 185.214188 39.665518) + (xy 185.201928 39.79) (xy 181.772395 39.79) (xy 181.94237 39.620025) (xy 181.866162 39.372156) (xy 181.604135 39.247437) + (xy 181.322811 39.176232) (xy 181.033001 39.161281) (xy 180.745843 39.203155) (xy 180.472372 39.300246) (xy 180.337838 39.372156) + (xy 180.26163 39.620025) (xy 173.021444 39.620025) (xy 172.89711 39.495691) (xy 172.655822 39.334467) (xy 172.387717 39.223414) + (xy 172.103098 39.1668) (xy 171.812902 39.1668) (xy 171.528283 39.223414) (xy 171.260178 39.334467) (xy 171.01889 39.495691) + (xy 170.813691 39.70089) (xy 170.652467 39.942178) (xy 170.541414 40.210283) (xy 170.4848 40.494902) (xy 170.4848 40.785098) + (xy 170.541414 41.069717) (xy 170.652467 41.337822) (xy 170.813691 41.57911) (xy 171.01889 41.784309) (xy 171.123 41.853873) + (xy 171.123001 45.776126) (xy 171.01889 45.845691) (xy 170.813691 46.05089) (xy 170.652467 46.292178) (xy 170.561 46.512998) + (xy 170.469533 46.292178) (xy 170.308309 46.05089) (xy 170.10311 45.845691) (xy 169.861822 45.684467) (xy 169.745 45.636078) + (xy 169.745 39.715867) (xy 170.525868 38.935) (xy 176.488982 38.935) (xy 176.53 38.93904) (xy 176.571018 38.935) + (xy 176.571019 38.935) (xy 176.693689 38.922918) (xy 176.851087 38.875172) (xy 176.996146 38.797636) (xy 177.123291 38.693291) + (xy 177.149446 38.661421) (xy 178.361428 37.44944) (xy 178.393291 37.423291) (xy 178.497636 37.296146) (xy 178.575172 37.151087) + (xy 178.622918 36.993689) (xy 178.635 36.871019) (xy 178.635 36.871017) (xy 178.63904 36.830001) (xy 178.635 36.788985) + (xy 178.635 36.788065) (xy 178.746632 36.713475) (xy 178.953475 36.506632) (xy 179.018042 36.41) (xy 185.201928 36.41) + (xy 185.214188 36.534482) (xy 185.250498 36.65418) (xy 185.309463 36.764494) (xy 185.388815 36.861185) (xy 185.485506 36.940537) + (xy 185.59582 36.999502) (xy 185.715518 37.035812) (xy 185.84 37.048072) (xy 186.40425 37.045) (xy 186.563 36.88625) + (xy 186.563 35.687) (xy 185.36375 35.687) (xy 185.205 35.84575) (xy 185.201928 36.41) (xy 179.018042 36.41) + (xy 179.11599 36.263411) (xy 179.227932 35.993158) (xy 179.285 35.70626) (xy 179.285 35.41374) (xy 179.227932 35.126842) + (xy 179.11599 34.856589) (xy 179.018043 34.71) (xy 185.201928 34.71) (xy 185.205 35.27425) (xy 185.36375 35.433) + (xy 186.563 35.433) (xy 186.563 34.23375) (xy 186.817 34.23375) (xy 186.817 35.433) (xy 186.837 35.433) + (xy 186.837 35.687) (xy 186.817 35.687) (xy 186.817 36.88625) (xy 186.97575 37.045) (xy 187.54 37.048072) + (xy 187.664482 37.035812) (xy 187.78418 36.999502) (xy 187.894494 36.940537) (xy 187.991185 36.861185) (xy 188.070537 36.764494) + (xy 188.129502 36.65418) (xy 188.151513 36.58162) (xy 188.283368 36.713475) (xy 188.526589 36.87599) (xy 188.796842 36.987932) + (xy 189.08374 37.045) (xy 189.37626 37.045) (xy 189.663158 36.987932) (xy 189.933411 36.87599) (xy 190.176632 36.713475) + (xy 190.383475 36.506632) (xy 190.54599 36.263411) (xy 190.657932 35.993158) (xy 190.715 35.70626) (xy 190.715 35.41374) + (xy 190.657932 35.126842) (xy 190.54599 34.856589) (xy 190.383475 34.613368) (xy 190.176632 34.406525) (xy 189.933411 34.24401) + (xy 189.663158 34.132068) (xy 189.37626 34.075) (xy 189.08374 34.075) (xy 188.796842 34.132068) (xy 188.526589 34.24401) + (xy 188.283368 34.406525) (xy 188.151513 34.53838) (xy 188.129502 34.46582) (xy 188.070537 34.355506) (xy 187.991185 34.258815) + (xy 187.894494 34.179463) (xy 187.78418 34.120498) (xy 187.664482 34.084188) (xy 187.54 34.071928) (xy 186.97575 34.075) + (xy 186.817 34.23375) (xy 186.563 34.23375) (xy 186.40425 34.075) (xy 185.84 34.071928) (xy 185.715518 34.084188) + (xy 185.59582 34.120498) (xy 185.485506 34.179463) (xy 185.388815 34.258815) (xy 185.309463 34.355506) (xy 185.250498 34.46582) + (xy 185.214188 34.585518) (xy 185.201928 34.71) (xy 179.018043 34.71) (xy 178.953475 34.613368) (xy 178.746632 34.406525) + (xy 178.503411 34.24401) (xy 178.233158 34.132068) (xy 177.94626 34.075) (xy 177.65374 34.075) (xy 177.366842 34.132068) + (xy 177.096589 34.24401) (xy 176.853368 34.406525) (xy 176.721513 34.53838) (xy 176.699502 34.46582) (xy 176.640537 34.355506) + (xy 176.561185 34.258815) (xy 176.464494 34.179463) (xy 176.35418 34.120498) (xy 176.234482 34.084188) (xy 176.11 34.071928) + (xy 175.54575 34.075) (xy 175.387 34.23375) (xy 175.387 35.433) (xy 175.407 35.433) (xy 175.407 35.687) + (xy 175.387 35.687) (xy 175.387 36.88625) (xy 175.54575 37.045) (xy 176.11 37.048072) (xy 176.234482 37.035812) + (xy 176.35418 36.999502) (xy 176.464494 36.940537) (xy 176.561185 36.861185) (xy 176.640537 36.764494) (xy 176.699502 36.65418) + (xy 176.721513 36.58162) (xy 176.794513 36.65462) (xy 176.184133 37.265) (xy 170.221015 37.265) (xy 170.179999 37.26096) + (xy 170.138983 37.265) (xy 167.985868 37.265) (xy 167.95411 37.233243) (xy 167.98203 37.141204) (xy 168.012681 36.83) + (xy 167.98203 36.518796) (xy 167.949028 36.41) (xy 173.771928 36.41) (xy 173.784188 36.534482) (xy 173.820498 36.65418) + (xy 173.879463 36.764494) (xy 173.958815 36.861185) (xy 174.055506 36.940537) (xy 174.16582 36.999502) (xy 174.285518 37.035812) + (xy 174.41 37.048072) (xy 174.97425 37.045) (xy 175.133 36.88625) (xy 175.133 35.687) (xy 173.93375 35.687) + (xy 173.775 35.84575) (xy 173.771928 36.41) (xy 167.949028 36.41) (xy 167.891255 36.219551) (xy 167.743845 35.943765) + (xy 167.545463 35.702037) (xy 167.303735 35.503655) (xy 167.027949 35.356245) (xy 166.728704 35.26547) (xy 166.495486 35.2425) + (xy 166.244514 35.2425) (xy 166.011296 35.26547) (xy 165.712051 35.356245) (xy 165.436265 35.503655) (xy 165.194537 35.702037) + (xy 164.996155 35.943765) (xy 164.848745 36.219551) (xy 164.75797 36.518796) (xy 164.727319 36.83) (xy 164.75797 37.141204) + (xy 164.848745 37.440449) (xy 164.996155 37.716235) (xy 165.194537 37.957963) (xy 165.367609 38.1) (xy 165.194537 38.242037) + (xy 164.996155 38.483765) (xy 164.968769 38.535) (xy 164.892148 38.535) (xy 164.35512 37.997973) (xy 164.35512 34.71) + (xy 173.771928 34.71) (xy 173.775 35.27425) (xy 173.93375 35.433) (xy 175.133 35.433) (xy 175.133 34.23375) + (xy 174.97425 34.075) (xy 174.41 34.071928) (xy 174.285518 34.084188) (xy 174.16582 34.120498) (xy 174.055506 34.179463) + (xy 173.958815 34.258815) (xy 173.879463 34.355506) (xy 173.820498 34.46582) (xy 173.784188 34.585518) (xy 173.771928 34.71) + (xy 164.35512 34.71) (xy 164.35512 34.503787) (xy 166.273908 32.585) (xy 195.234133 32.585) (xy 197.931193 35.282061) + (xy 197.905 35.41374) (xy 197.905 35.70626) (xy 197.962068 35.993158) (xy 198.07401 36.263411) (xy 198.236525 36.506632) + (xy 198.443368 36.713475) (xy 198.61776 36.83) (xy 198.443368 36.946525) (xy 198.236525 37.153368) (xy 198.07401 37.396589) + (xy 197.962068 37.666842) (xy 197.905 37.95374) (xy 197.905 38.24626) (xy 197.962068 38.533158) (xy 198.07401 38.803411) + (xy 198.236525 39.046632) (xy 198.36838 39.178487) (xy 198.29582 39.200498) (xy 198.185506 39.259463) (xy 198.088815 39.338815) + (xy 198.009463 39.435506) (xy 197.950498 39.54582) (xy 197.914188 39.665518) (xy 197.901928 39.79) (xy 197.905 40.35425) + (xy 198.06375 40.513) (xy 199.263 40.513) (xy 199.263 40.493) (xy 199.517 40.493) (xy 199.517 40.513) + (xy 200.71625 40.513) (xy 200.875 40.35425) (xy 200.878072 39.79) (xy 200.865812 39.665518) (xy 200.829502 39.54582) + (xy 200.770537 39.435506) (xy 200.691185 39.338815) (xy 200.594494 39.259463) (xy 200.48418 39.200498) (xy 200.41162 39.178487) + (xy 200.543475 39.046632) (xy 200.70599 38.803411) (xy 200.817932 38.533158) (xy 200.875 38.24626) (xy 200.875 37.95374) + (xy 200.817932 37.666842) (xy 200.70599 37.396589) (xy 200.543475 37.153368) (xy 200.336632 36.946525) (xy 200.16224 36.83) + (xy 200.336632 36.713475) (xy 200.543475 36.506632) (xy 200.70599 36.263411) (xy 200.817932 35.993158) (xy 200.875 35.70626) + (xy 200.875 35.41374) (xy 200.817932 35.126842) (xy 200.70599 34.856589) (xy 200.543475 34.613368) (xy 200.336632 34.406525) + (xy 200.093411 34.24401) (xy 199.823158 34.132068) (xy 199.53626 34.075) (xy 199.24374 34.075) (xy 199.112061 34.101193) + (xy 196.199446 31.188579) (xy 196.173291 31.156709) (xy 196.152931 31.14) (xy 201.897721 31.14) (xy 202.541222 31.203096) + (xy 203.129164 31.380606) (xy 203.671436 31.668937) (xy 204.147364 32.057094) (xy 204.538845 32.530314) (xy 204.830951 33.070552) + (xy 205.012563 33.657244) (xy 205.08 34.298879) (xy 205.080001 109.187711) (xy 205.016904 109.831221) (xy 204.839394 110.419164) + (xy 204.551063 110.961436) (xy 204.162906 111.437364) (xy 203.689686 111.828845) (xy 203.149449 112.12095) (xy 202.562756 112.302563) + (xy 201.92113 112.37) (xy 137.192279 112.37) (xy 136.548779 112.306904) (xy 135.960836 112.129394) (xy 135.418564 111.841063) + (xy 134.942636 111.452906) (xy 134.551155 110.979686) (xy 134.25905 110.439449) (xy 134.077437 109.852756) (xy 134.01 109.21113) + (xy 134.01 95.331899) (xy 139.565064 95.331899) (xy 139.606086 95.604607) (xy 139.699522 95.864072) (xy 139.761894 95.98076) + (xy 140.002293 96.048102) (xy 140.790395 95.26) (xy 141.149605 95.26) (xy 141.937707 96.048102) (xy 142.178106 95.98076) + (xy 142.295506 95.73122) (xy 142.361967 95.463573) (xy 142.374936 95.188101) (xy 142.333914 94.915393) (xy 142.240478 94.655928) + (xy 142.178106 94.53924) (xy 141.937707 94.471898) (xy 141.149605 95.26) (xy 140.790395 95.26) (xy 140.002293 94.471898) + (xy 139.761894 94.53924) (xy 139.644494 94.78878) (xy 139.578033 95.056427) (xy 139.565064 95.331899) (xy 134.01 95.331899) + (xy 134.01 85.662931) (xy 134.026709 85.683291) (xy 134.058579 85.709446) (xy 137.810561 89.46143) (xy 137.836709 89.493291) + (xy 137.963854 89.597636) (xy 138.108913 89.675172) (xy 138.266311 89.722918) (xy 138.388981 89.735) (xy 138.388982 89.735) + (xy 138.43 89.73904) (xy 138.471018 89.735) (xy 139.638976 89.735) (xy 139.623801 89.771635) (xy 139.57 90.042112) + (xy 139.57 90.317888) (xy 139.623801 90.588365) (xy 139.729336 90.843149) (xy 139.882549 91.072448) (xy 140.077552 91.267451) + (xy 140.306851 91.420664) (xy 140.377674 91.45) (xy 140.306851 91.479336) (xy 140.077552 91.632549) (xy 139.882549 91.827552) + (xy 139.729336 92.056851) (xy 139.623801 92.311635) (xy 139.57 92.582112) (xy 139.57 92.857888) (xy 139.623801 93.128365) + (xy 139.729336 93.383149) (xy 139.882549 93.612448) (xy 140.077552 93.807451) (xy 140.306851 93.960664) (xy 140.371594 93.987482) + (xy 140.365928 93.989522) (xy 140.24924 94.051894) (xy 140.181898 94.292293) (xy 140.97 95.080395) (xy 141.758102 94.292293) + (xy 141.69076 94.051894) (xy 141.560664 93.990688) (xy 141.633149 93.960664) (xy 141.862448 93.807451) (xy 142.057451 93.612448) + (xy 142.210664 93.383149) (xy 142.316199 93.128365) (xy 142.37 92.857888) (xy 142.37 92.582112) (xy 142.316199 92.311635) + (xy 142.210664 92.056851) (xy 142.057451 91.827552) (xy 141.862448 91.632549) (xy 141.633149 91.479336) (xy 141.562326 91.45) + (xy 141.633149 91.420664) (xy 141.862448 91.267451) (xy 142.057451 91.072448) (xy 142.095837 91.015) (xy 149.104132 91.015) + (xy 143.154133 96.965) (xy 142.095837 96.965) (xy 142.057451 96.907552) (xy 141.862448 96.712549) (xy 141.633149 96.559336) + (xy 141.568406 96.532518) (xy 141.574072 96.530478) (xy 141.69076 96.468106) (xy 141.758102 96.227707) (xy 140.97 95.439605) + (xy 140.181898 96.227707) (xy 140.24924 96.468106) (xy 140.379336 96.529312) (xy 140.306851 96.559336) (xy 140.077552 96.712549) + (xy 139.882549 96.907552) (xy 139.729336 97.136851) (xy 139.623801 97.391635) (xy 139.57 97.662112) (xy 139.57 97.937888) + (xy 139.623801 98.208365) (xy 139.729336 98.463149) (xy 139.882549 98.692448) (xy 140.077552 98.887451) (xy 140.306851 99.040664) + (xy 140.377674 99.07) (xy 140.306851 99.099336) (xy 140.077552 99.252549) (xy 139.882549 99.447552) (xy 139.729336 99.676851) + (xy 139.623801 99.931635) (xy 139.57 100.202112) (xy 139.57 100.477888) (xy 139.623801 100.748365) (xy 139.729336 101.003149) + (xy 139.882549 101.232448) (xy 140.077552 101.427451) (xy 140.306851 101.580664) (xy 140.377674 101.61) (xy 140.306851 101.639336) + (xy 140.077552 101.792549) (xy 139.882549 101.987552) (xy 139.729336 102.216851) (xy 139.623801 102.471635) (xy 139.57 102.742112) + (xy 139.57 103.017888) (xy 139.623801 103.288365) (xy 139.729336 103.543149) (xy 139.882549 103.772448) (xy 140.077552 103.967451) + (xy 140.306851 104.120664) (xy 140.377674 104.15) (xy 140.306851 104.179336) (xy 140.077552 104.332549) (xy 139.882549 104.527552) + (xy 139.729336 104.756851) (xy 139.623801 105.011635) (xy 139.57 105.282112) (xy 139.57 105.557888) (xy 139.623801 105.828365) + (xy 139.729336 106.083149) (xy 139.882549 106.312448) (xy 140.077552 106.507451) (xy 140.306851 106.660664) (xy 140.377674 106.69) + (xy 140.306851 106.719336) (xy 140.077552 106.872549) (xy 139.882549 107.067552) (xy 139.729336 107.296851) (xy 139.623801 107.551635) + (xy 139.57 107.822112) (xy 139.57 108.097888) (xy 139.623801 108.368365) (xy 139.729336 108.623149) (xy 139.882549 108.852448) + (xy 140.077552 109.047451) (xy 140.306851 109.200664) (xy 140.561635 109.306199) (xy 140.832112 109.36) (xy 141.107888 109.36) + (xy 141.378365 109.306199) (xy 141.633149 109.200664) (xy 141.862448 109.047451) (xy 142.057451 108.852448) (xy 142.210664 108.623149) + (xy 142.316199 108.368365) (xy 142.37 108.097888) (xy 142.37 107.822112) (xy 142.316199 107.551635) (xy 142.210664 107.296851) + (xy 142.057451 107.067552) (xy 141.862448 106.872549) (xy 141.633149 106.719336) (xy 141.562326 106.69) (xy 141.633149 106.660664) + (xy 141.862448 106.507451) (xy 142.057451 106.312448) (xy 142.210664 106.083149) (xy 142.316199 105.828365) (xy 142.37 105.557888) + (xy 142.37 105.282112) (xy 142.316199 105.011635) (xy 142.210664 104.756851) (xy 142.057451 104.527552) (xy 141.862448 104.332549) + (xy 141.633149 104.179336) (xy 141.562326 104.15) (xy 141.633149 104.120664) (xy 141.862448 103.967451) (xy 142.057451 103.772448) + (xy 142.210664 103.543149) (xy 142.316199 103.288365) (xy 142.37 103.017888) (xy 142.37 102.742112) (xy 142.316199 102.471635) + (xy 142.210664 102.216851) (xy 142.057451 101.987552) (xy 141.862448 101.792549) (xy 141.633149 101.639336) (xy 141.562326 101.61) + (xy 141.633149 101.580664) (xy 141.862448 101.427451) (xy 142.057451 101.232448) (xy 142.210664 101.003149) (xy 142.316199 100.748365) + (xy 142.37 100.477888) (xy 142.37 100.202112) (xy 142.316199 99.931635) (xy 142.210664 99.676851) (xy 142.057451 99.447552) + (xy 141.862448 99.252549) (xy 141.633149 99.099336) (xy 141.562326 99.07) (xy 141.633149 99.040664) (xy 141.862448 98.887451) + (xy 142.057451 98.692448) (xy 142.095837 98.635) (xy 143.458982 98.635) (xy 143.5 98.63904) (xy 143.541018 98.635) + (xy 143.541019 98.635) (xy 143.663689 98.622918) (xy 143.821087 98.575172) (xy 143.966146 98.497636) (xy 144.093291 98.393291) + (xy 144.119446 98.361421) (xy 152.745869 89.735) (xy 165.038976 89.735) (xy 165.023801 89.771635) (xy 164.97 90.042112) + (xy 164.97 90.317888) (xy 165.023801 90.588365) (xy 165.129336 90.843149) (xy 165.282549 91.072448) (xy 165.477552 91.267451) + (xy 165.706851 91.420664) (xy 165.777674 91.45) (xy 165.706851 91.479336) (xy 165.477552 91.632549) (xy 165.282549 91.827552) + (xy 165.129336 92.056851) (xy 165.023801 92.311635) (xy 164.97 92.582112) (xy 164.97 92.857888) (xy 165.023801 93.128365) + (xy 165.129336 93.383149) (xy 165.282549 93.612448) (xy 165.477552 93.807451) (xy 165.706851 93.960664) (xy 165.777674 93.99) + (xy 165.706851 94.019336) (xy 165.477552 94.172549) (xy 165.282549 94.367552) (xy 165.129336 94.596851) (xy 165.023801 94.851635) + (xy 164.97 95.122112) (xy 164.97 95.397888) (xy 165.023801 95.668365) (xy 165.129336 95.923149) (xy 165.282549 96.152448) + (xy 165.477552 96.347451) (xy 165.706851 96.500664) (xy 165.777674 96.53) (xy 165.706851 96.559336) (xy 165.477552 96.712549) + (xy 165.282549 96.907552) (xy 165.129336 97.136851) (xy 165.023801 97.391635) (xy 164.97 97.662112) (xy 164.97 97.937888) + (xy 165.023801 98.208365) (xy 165.129336 98.463149) (xy 165.282549 98.692448) (xy 165.477552 98.887451) (xy 165.706851 99.040664) + (xy 165.777674 99.07) (xy 165.706851 99.099336) (xy 165.477552 99.252549) (xy 165.282549 99.447552) (xy 165.129336 99.676851) + (xy 165.023801 99.931635) (xy 164.97 100.202112) (xy 164.97 100.477888) (xy 165.023801 100.748365) (xy 165.129336 101.003149) + (xy 165.282549 101.232448) (xy 165.477552 101.427451) (xy 165.706851 101.580664) (xy 165.777674 101.61) (xy 165.706851 101.639336) + (xy 165.477552 101.792549) (xy 165.282549 101.987552) (xy 165.129336 102.216851) (xy 165.023801 102.471635) (xy 164.97 102.742112) + (xy 164.97 103.017888) (xy 165.023801 103.288365) (xy 165.129336 103.543149) (xy 165.282549 103.772448) (xy 165.477552 103.967451) + (xy 165.706851 104.120664) (xy 165.777674 104.15) (xy 165.706851 104.179336) (xy 165.477552 104.332549) (xy 165.282549 104.527552) + (xy 165.129336 104.756851) (xy 165.023801 105.011635) (xy 164.97 105.282112) (xy 164.97 105.557888) (xy 165.023801 105.828365) + (xy 165.129336 106.083149) (xy 165.282549 106.312448) (xy 165.477552 106.507451) (xy 165.706851 106.660664) (xy 165.777674 106.69) + (xy 165.706851 106.719336) (xy 165.477552 106.872549) (xy 165.282549 107.067552) (xy 165.129336 107.296851) (xy 165.023801 107.551635) + (xy 164.97 107.822112) (xy 164.97 108.097888) (xy 165.023801 108.368365) (xy 165.129336 108.623149) (xy 165.282549 108.852448) + (xy 165.477552 109.047451) (xy 165.706851 109.200664) (xy 165.961635 109.306199) (xy 166.232112 109.36) (xy 166.507888 109.36) + (xy 166.778365 109.306199) (xy 167.033149 109.200664) (xy 167.262448 109.047451) (xy 167.457451 108.852448) (xy 167.610664 108.623149) + (xy 167.716199 108.368365) (xy 167.718647 108.356058) (xy 198.06908 108.356058) (xy 198.06908 109.042542) (xy 198.203007 109.715837) + (xy 198.465713 110.350066) (xy 198.847104 110.920858) (xy 199.332522 111.406276) (xy 199.903314 111.787667) (xy 200.537543 112.050373) + (xy 201.210838 112.1843) (xy 201.897322 112.1843) (xy 202.570617 112.050373) (xy 203.204846 111.787667) (xy 203.775638 111.406276) + (xy 204.261056 110.920858) (xy 204.642447 110.350066) (xy 204.905153 109.715837) (xy 205.03908 109.042542) (xy 205.03908 108.356058) + (xy 204.905153 107.682763) (xy 204.642447 107.048534) (xy 204.261056 106.477742) (xy 203.775638 105.992324) (xy 203.204846 105.610933) + (xy 202.570617 105.348227) (xy 201.897322 105.2143) (xy 201.210838 105.2143) (xy 200.537543 105.348227) (xy 199.903314 105.610933) + (xy 199.332522 105.992324) (xy 198.847104 106.477742) (xy 198.465713 107.048534) (xy 198.203007 107.682763) (xy 198.06908 108.356058) + (xy 167.718647 108.356058) (xy 167.77 108.097888) (xy 167.77 107.822112) (xy 167.716199 107.551635) (xy 167.610664 107.296851) + (xy 167.457451 107.067552) (xy 167.262448 106.872549) (xy 167.033149 106.719336) (xy 166.962326 106.69) (xy 167.033149 106.660664) + (xy 167.262448 106.507451) (xy 167.457451 106.312448) (xy 167.610664 106.083149) (xy 167.716199 105.828365) (xy 167.77 105.557888) + (xy 167.77 105.282112) (xy 167.716199 105.011635) (xy 167.610664 104.756851) (xy 167.457451 104.527552) (xy 167.262448 104.332549) + (xy 167.033149 104.179336) (xy 166.962326 104.15) (xy 167.033149 104.120664) (xy 167.262448 103.967451) (xy 167.457451 103.772448) + (xy 167.610664 103.543149) (xy 167.716199 103.288365) (xy 167.77 103.017888) (xy 167.77 102.742112) (xy 167.716199 102.471635) + (xy 167.610664 102.216851) (xy 167.457451 101.987552) (xy 167.262448 101.792549) (xy 167.033149 101.639336) (xy 166.962326 101.61) + (xy 167.033149 101.580664) (xy 167.262448 101.427451) (xy 167.457451 101.232448) (xy 167.610664 101.003149) (xy 167.716199 100.748365) + (xy 167.77 100.477888) (xy 167.77 100.202112) (xy 167.716199 99.931635) (xy 167.610664 99.676851) (xy 167.457451 99.447552) + (xy 167.262448 99.252549) (xy 167.033149 99.099336) (xy 166.962326 99.07) (xy 167.033149 99.040664) (xy 167.262448 98.887451) + (xy 167.457451 98.692448) (xy 167.610664 98.463149) (xy 167.716199 98.208365) (xy 167.77 97.937888) (xy 167.77 97.662112) + (xy 167.716199 97.391635) (xy 167.610664 97.136851) (xy 167.457451 96.907552) (xy 167.262448 96.712549) (xy 167.033149 96.559336) + (xy 166.962326 96.53) (xy 167.033149 96.500664) (xy 167.262448 96.347451) (xy 167.457451 96.152448) (xy 167.610664 95.923149) + (xy 167.716199 95.668365) (xy 167.77 95.397888) (xy 167.77 95.122112) (xy 167.716199 94.851635) (xy 167.610664 94.596851) + (xy 167.457451 94.367552) (xy 167.262448 94.172549) (xy 167.033149 94.019336) (xy 166.962326 93.99) (xy 167.033149 93.960664) + (xy 167.262448 93.807451) (xy 167.457451 93.612448) (xy 167.610664 93.383149) (xy 167.716199 93.128365) (xy 167.77 92.857888) + (xy 167.77 92.582112) (xy 167.716199 92.311635) (xy 167.610664 92.056851) (xy 167.457451 91.827552) (xy 167.262448 91.632549) + (xy 167.033149 91.479336) (xy 166.962326 91.45) (xy 167.033149 91.420664) (xy 167.262448 91.267451) (xy 167.457451 91.072448) + (xy 167.495837 91.015) (xy 177.748982 91.015) (xy 177.79 91.01904) (xy 177.831018 91.015) (xy 177.831019 91.015) + (xy 177.953689 91.002918) (xy 178.111087 90.955172) (xy 178.256146 90.877636) (xy 178.383291 90.773291) (xy 178.409446 90.741421) + (xy 185.981428 83.16944) (xy 186.013291 83.143291) (xy 186.117636 83.016146) (xy 186.195172 82.871087) (xy 186.242918 82.713689) + (xy 186.255 82.591019) (xy 186.255 82.591009) (xy 186.259039 82.550001) (xy 186.255 82.508993) (xy 186.255 69.808065) + (xy 186.366632 69.733475) (xy 186.573475 69.526632) (xy 186.69 69.35224) (xy 186.806525 69.526632) (xy 187.013368 69.733475) + (xy 187.256589 69.89599) (xy 187.526842 70.007932) (xy 187.81374 70.065) (xy 188.10626 70.065) (xy 188.393158 70.007932) + (xy 188.663411 69.89599) (xy 188.906632 69.733475) (xy 189.038487 69.60162) (xy 189.060498 69.67418) (xy 189.119463 69.784494) + (xy 189.198815 69.881185) (xy 189.295506 69.960537) (xy 189.40582 70.019502) (xy 189.525518 70.055812) (xy 189.65 70.068072) + (xy 190.21425 70.065) (xy 190.373 69.90625) (xy 190.373 68.707) (xy 190.627 68.707) (xy 190.627 69.90625) + (xy 190.78575 70.065) (xy 191.35 70.068072) (xy 191.474482 70.055812) (xy 191.59418 70.019502) (xy 191.704494 69.960537) + (xy 191.801185 69.881185) (xy 191.880537 69.784494) (xy 191.939502 69.67418) (xy 191.975812 69.554482) (xy 191.988072 69.43) + (xy 191.985 68.86575) (xy 191.82625 68.707) (xy 190.627 68.707) (xy 190.373 68.707) (xy 190.353 68.707) + (xy 190.353 68.453) (xy 190.373 68.453) (xy 190.373 67.25375) (xy 190.627 67.25375) (xy 190.627 68.453) + (xy 191.82625 68.453) (xy 191.985 68.29425) (xy 191.988072 67.73) (xy 191.975812 67.605518) (xy 191.939502 67.48582) + (xy 191.880537 67.375506) (xy 191.801185 67.278815) (xy 191.704494 67.199463) (xy 191.59418 67.140498) (xy 191.474482 67.104188) + (xy 191.35 67.091928) (xy 190.78575 67.095) (xy 190.627 67.25375) (xy 190.373 67.25375) (xy 190.21425 67.095) + (xy 189.65 67.091928) (xy 189.525518 67.104188) (xy 189.40582 67.140498) (xy 189.295506 67.199463) (xy 189.198815 67.278815) + (xy 189.119463 67.375506) (xy 189.060498 67.48582) (xy 189.038487 67.55838) (xy 188.906632 67.426525) (xy 188.663411 67.26401) + (xy 188.393158 67.152068) (xy 188.10626 67.095) (xy 187.81374 67.095) (xy 187.526842 67.152068) (xy 187.256589 67.26401) + (xy 187.013368 67.426525) (xy 186.806525 67.633368) (xy 186.69 67.80776) (xy 186.573475 67.633368) (xy 186.366632 67.426525) + (xy 186.123411 67.26401) (xy 185.853158 67.152068) (xy 185.56626 67.095) (xy 185.27374 67.095) (xy 184.986842 67.152068) + (xy 184.716589 67.26401) (xy 184.473368 67.426525) (xy 184.266525 67.633368) (xy 184.15 67.80776) (xy 184.033475 67.633368) + (xy 183.826632 67.426525) (xy 183.583411 67.26401) (xy 183.313158 67.152068) (xy 183.02626 67.095) (xy 182.73374 67.095) + (xy 182.446842 67.152068) (xy 182.176589 67.26401) (xy 181.933368 67.426525) (xy 181.726525 67.633368) (xy 181.61 67.80776) + (xy 181.493475 67.633368) (xy 181.286632 67.426525) (xy 181.043411 67.26401) (xy 180.773158 67.152068) (xy 180.48626 67.095) + (xy 180.19374 67.095) (xy 179.906842 67.152068) (xy 179.636589 67.26401) (xy 179.393368 67.426525) (xy 179.186525 67.633368) + (xy 179.07 67.80776) (xy 178.953475 67.633368) (xy 178.746632 67.426525) (xy 178.503411 67.26401) (xy 178.233158 67.152068) + (xy 177.94626 67.095) (xy 177.65374 67.095) (xy 177.366842 67.152068) (xy 177.096589 67.26401) (xy 176.853368 67.426525) + (xy 176.646525 67.633368) (xy 176.48401 67.876589) (xy 176.372068 68.146842) (xy 176.315 68.43374) (xy 176.315 68.72626) + (xy 176.372068 69.013158) (xy 176.48401 69.283411) (xy 176.646525 69.526632) (xy 176.853368 69.733475) (xy 177.096589 69.89599) + (xy 177.366842 70.007932) (xy 177.65374 70.065) (xy 177.94626 70.065) (xy 178.233158 70.007932) (xy 178.503411 69.89599) + (xy 178.746632 69.733475) (xy 178.953475 69.526632) (xy 179.07 69.35224) (xy 179.186525 69.526632) (xy 179.393368 69.733475) + (xy 179.636589 69.89599) (xy 179.906842 70.007932) (xy 180.19374 70.065) (xy 180.48626 70.065) (xy 180.61794 70.038807) + (xy 182.045001 71.465869) (xy 182.045 82.204131) (xy 178.724133 85.525) (xy 167.709309 85.525) (xy 167.716199 85.508365) + (xy 167.77 85.237888) (xy 167.77 84.962112) (xy 167.716199 84.691635) (xy 167.70024 84.653107) (xy 167.803689 84.642918) + (xy 167.961087 84.595172) (xy 168.106146 84.517636) (xy 168.233291 84.413291) (xy 168.259446 84.381421) (xy 170.741427 81.899441) + (xy 170.773291 81.873291) (xy 170.877636 81.746146) (xy 170.955172 81.601087) (xy 171.002918 81.443689) (xy 171.015 81.321019) + (xy 171.015 81.321009) (xy 171.019039 81.280001) (xy 171.015 81.238993) (xy 171.015 72.060093) (xy 171.148102 72.115226) + (xy 171.293225 72.144093) (xy 172.100558 72.951426) (xy 172.126709 72.983291) (xy 172.253854 73.087636) (xy 172.398913 73.165172) + (xy 172.556311 73.212918) (xy 172.678981 73.225) (xy 172.678983 73.225) (xy 172.719999 73.22904) (xy 172.761015 73.225) + (xy 179.726715 73.225) (xy 179.849744 73.307205) (xy 180.038102 73.385226) (xy 180.238061 73.425) (xy 180.441939 73.425) + (xy 180.641898 73.385226) (xy 180.830256 73.307205) (xy 180.999774 73.193937) (xy 181.143937 73.049774) (xy 181.257205 72.880256) + (xy 181.335226 72.691898) (xy 181.375 72.491939) (xy 181.375 72.288061) (xy 181.335226 72.088102) (xy 181.257205 71.899744) + (xy 181.143937 71.730226) (xy 180.999774 71.586063) (xy 180.830256 71.472795) (xy 180.641898 71.394774) (xy 180.441939 71.355) + (xy 180.238061 71.355) (xy 180.038102 71.394774) (xy 179.849744 71.472795) (xy 179.726715 71.555) (xy 173.065868 71.555) + (xy 172.474093 70.963225) (xy 172.445226 70.818102) (xy 172.367205 70.629744) (xy 172.253937 70.460226) (xy 172.109774 70.316063) + (xy 171.940256 70.202795) (xy 171.751898 70.124774) (xy 171.551939 70.085) (xy 171.348061 70.085) (xy 171.148102 70.124774) + (xy 171.015 70.179907) (xy 171.015 67.655867) (xy 171.795868 66.875) (xy 185.378982 66.875) (xy 185.42 66.87904) + (xy 185.461018 66.875) (xy 185.461019 66.875) (xy 185.583689 66.862918) (xy 185.741087 66.815172) (xy 185.886146 66.737636) + (xy 186.013291 66.633291) (xy 186.039446 66.601421) (xy 195.925869 56.715) (xy 198.161935 56.715) (xy 198.236525 56.826632) + (xy 198.443368 57.033475) (xy 198.61776 57.15) (xy 198.443368 57.266525) (xy 198.236525 57.473368) (xy 198.07401 57.716589) + (xy 197.962068 57.986842) (xy 197.905 58.27374) (xy 197.905 58.56626) (xy 197.962068 58.853158) (xy 198.07401 59.123411) + (xy 198.236525 59.366632) (xy 198.443368 59.573475) (xy 198.625534 59.695195) (xy 198.508645 59.764822) (xy 198.292412 59.959731) + (xy 198.118359 60.19308) (xy 197.993175 60.455901) (xy 197.948524 60.60311) (xy 198.069845 60.833) (xy 199.263 60.833) + (xy 199.263 60.813) (xy 199.517 60.813) (xy 199.517 60.833) (xy 200.710155 60.833) (xy 200.831476 60.60311) + (xy 200.786825 60.455901) (xy 200.661641 60.19308) (xy 200.487588 59.959731) (xy 200.271355 59.764822) (xy 200.154466 59.695195) + (xy 200.336632 59.573475) (xy 200.543475 59.366632) (xy 200.70599 59.123411) (xy 200.817932 58.853158) (xy 200.875 58.56626) + (xy 200.875 58.27374) (xy 200.817932 57.986842) (xy 200.70599 57.716589) (xy 200.543475 57.473368) (xy 200.336632 57.266525) + (xy 200.16224 57.15) (xy 200.336632 57.033475) (xy 200.543475 56.826632) (xy 200.70599 56.583411) (xy 200.817932 56.313158) + (xy 200.875 56.02626) (xy 200.875 55.73374) (xy 200.817932 55.446842) (xy 200.70599 55.176589) (xy 200.65724 55.103629) + (xy 201.095 54.66587) (xy 201.095001 64.424131) (xy 200.731362 64.787771) (xy 200.691185 64.738815) (xy 200.594494 64.659463) + (xy 200.48418 64.600498) (xy 200.41162 64.578487) (xy 200.543475 64.446632) (xy 200.70599 64.203411) (xy 200.817932 63.933158) + (xy 200.875 63.64626) (xy 200.875 63.35374) (xy 200.817932 63.066842) (xy 200.70599 62.796589) (xy 200.543475 62.553368) + (xy 200.336632 62.346525) (xy 200.154466 62.224805) (xy 200.271355 62.155178) (xy 200.487588 61.960269) (xy 200.661641 61.72692) + (xy 200.786825 61.464099) (xy 200.831476 61.31689) (xy 200.710155 61.087) (xy 199.517 61.087) (xy 199.517 61.107) + (xy 199.263 61.107) (xy 199.263 61.087) (xy 198.069845 61.087) (xy 197.948524 61.31689) (xy 197.993175 61.464099) + (xy 198.118359 61.72692) (xy 198.292412 61.960269) (xy 198.508645 62.155178) (xy 198.625534 62.224805) (xy 198.443368 62.346525) + (xy 198.236525 62.553368) (xy 198.07401 62.796589) (xy 197.962068 63.066842) (xy 197.905 63.35374) (xy 197.905 63.64626) + (xy 197.962068 63.933158) (xy 198.07401 64.203411) (xy 198.236525 64.446632) (xy 198.36838 64.578487) (xy 198.29582 64.600498) + (xy 198.185506 64.659463) (xy 198.088815 64.738815) (xy 198.009463 64.835506) (xy 197.950498 64.94582) (xy 197.914188 65.065518) + (xy 197.901928 65.19) (xy 197.901928 66.89) (xy 197.914188 67.014482) (xy 197.950498 67.13418) (xy 198.009463 67.244494) + (xy 198.088815 67.341185) (xy 198.185506 67.420537) (xy 198.29582 67.479502) (xy 198.415518 67.515812) (xy 198.54 67.528072) + (xy 200.24 67.528072) (xy 200.364482 67.515812) (xy 200.48418 67.479502) (xy 200.594494 67.420537) (xy 200.691185 67.341185) + (xy 200.770537 67.244494) (xy 200.829502 67.13418) (xy 200.865812 67.014482) (xy 200.878072 66.89) (xy 200.878072 66.846421) + (xy 200.981087 66.815172) (xy 201.126146 66.737636) (xy 201.253291 66.633291) (xy 201.279446 66.601421) (xy 202.491426 65.389442) + (xy 202.523291 65.363291) (xy 202.627636 65.236146) (xy 202.705172 65.091087) (xy 202.752918 64.933689) (xy 202.765 64.811019) + (xy 202.765 64.811017) (xy 202.76904 64.770001) (xy 202.765 64.728981) (xy 202.765 47.031015) (xy 202.76904 46.989999) + (xy 202.757563 46.873475) (xy 202.752918 46.826311) (xy 202.705172 46.668913) (xy 202.627636 46.523854) (xy 202.523291 46.396709) + (xy 202.491428 46.37056) (xy 201.279446 45.158579) (xy 201.253291 45.126709) (xy 201.126146 45.022364) (xy 200.981087 44.944828) + (xy 200.823689 44.897082) (xy 200.701019 44.885) (xy 200.701018 44.885) (xy 200.66 44.88096) (xy 200.618982 44.885) + (xy 198.161007 44.885) (xy 198.119999 44.880961) (xy 198.078991 44.885) (xy 198.078981 44.885) (xy 197.956311 44.897082) + (xy 197.798913 44.944828) (xy 197.653854 45.022364) (xy 197.526709 45.126709) (xy 197.500561 45.158571) (xy 195.234133 47.425) + (xy 182.717868 47.425) (xy 182.550772 47.257905) (xy 182.5752 47.135098) (xy 182.5752 46.844902) (xy 182.520519 46.57) + (xy 185.201928 46.57) (xy 185.214188 46.694482) (xy 185.250498 46.81418) (xy 185.309463 46.924494) (xy 185.388815 47.021185) + (xy 185.485506 47.100537) (xy 185.59582 47.159502) (xy 185.715518 47.195812) (xy 185.84 47.208072) (xy 186.40425 47.205) + (xy 186.563 47.04625) (xy 186.563 45.847) (xy 185.36375 45.847) (xy 185.205 46.00575) (xy 185.201928 46.57) + (xy 182.520519 46.57) (xy 182.518586 46.560283) (xy 182.407533 46.292178) (xy 182.246309 46.05089) (xy 182.04111 45.845691) + (xy 181.799822 45.684467) (xy 181.531717 45.573414) (xy 181.247098 45.5168) (xy 180.956902 45.5168) (xy 180.672283 45.573414) + (xy 180.404178 45.684467) (xy 180.16289 45.845691) (xy 179.957691 46.05089) (xy 179.796467 46.292178) (xy 179.685414 46.560283) + (xy 179.6288 46.844902) (xy 179.6288 47.135098) (xy 179.685414 47.419717) (xy 179.796467 47.687822) (xy 179.957691 47.92911) + (xy 180.16289 48.134309) (xy 180.404178 48.295533) (xy 180.672283 48.406586) (xy 180.956902 48.4632) (xy 181.247098 48.4632) + (xy 181.369905 48.438772) (xy 181.752558 48.821426) (xy 181.778709 48.853291) (xy 181.905854 48.957636) (xy 182.050913 49.035172) + (xy 182.208311 49.082918) (xy 182.330981 49.095) (xy 182.330983 49.095) (xy 182.371999 49.09904) (xy 182.413015 49.095) + (xy 195.538982 49.095) (xy 195.58 49.09904) (xy 195.621018 49.095) (xy 195.621019 49.095) (xy 195.743689 49.082918) + (xy 195.901087 49.035172) (xy 196.046146 48.957636) (xy 196.173291 48.853291) (xy 196.199446 48.821421) (xy 198.465868 46.555) + (xy 200.314133 46.555) (xy 201.095 47.335868) (xy 201.095 51.324132) (xy 200.848807 51.077939) (xy 200.875 50.94626) + (xy 200.875 50.65374) (xy 200.817932 50.366842) (xy 200.70599 50.096589) (xy 200.543475 49.853368) (xy 200.336632 49.646525) + (xy 200.16224 49.53) (xy 200.336632 49.413475) (xy 200.543475 49.206632) (xy 200.70599 48.963411) (xy 200.817932 48.693158) + (xy 200.875 48.40626) (xy 200.875 48.11374) (xy 200.817932 47.826842) (xy 200.70599 47.556589) (xy 200.543475 47.313368) + (xy 200.336632 47.106525) (xy 200.093411 46.94401) (xy 199.823158 46.832068) (xy 199.53626 46.775) (xy 199.24374 46.775) + (xy 198.956842 46.832068) (xy 198.686589 46.94401) (xy 198.443368 47.106525) (xy 198.236525 47.313368) (xy 198.07401 47.556589) + (xy 197.962068 47.826842) (xy 197.905 48.11374) (xy 197.905 48.40626) (xy 197.931193 48.537939) (xy 193.875 52.594132) + (xy 193.875 52.111015) (xy 193.87904 52.069999) (xy 193.87303 52.008982) (xy 193.862918 51.906311) (xy 193.815172 51.748913) + (xy 193.737636 51.603854) (xy 193.633291 51.476709) (xy 193.601428 51.45056) (xy 192.389446 50.238579) (xy 192.363291 50.206709) + (xy 192.236146 50.102364) (xy 192.091087 50.024828) (xy 191.933689 49.977082) (xy 191.811019 49.965) (xy 191.811018 49.965) + (xy 191.77 49.96096) (xy 191.728982 49.965) (xy 185.461007 49.965) (xy 185.419999 49.960961) (xy 185.378991 49.965) + (xy 185.378981 49.965) (xy 185.256311 49.977082) (xy 185.098913 50.024828) (xy 184.953854 50.102364) (xy 184.826709 50.206709) + (xy 184.800561 50.238571) (xy 183.15794 51.881193) (xy 183.02626 51.855) (xy 182.73374 51.855) (xy 182.446842 51.912068) + (xy 182.176589 52.02401) (xy 181.933368 52.186525) (xy 181.801513 52.31838) (xy 181.779502 52.24582) (xy 181.720537 52.135506) + (xy 181.641185 52.038815) (xy 181.544494 51.959463) (xy 181.43418 51.900498) (xy 181.314482 51.864188) (xy 181.19 51.851928) + (xy 180.62575 51.855) (xy 180.467 52.01375) (xy 180.467 53.213) (xy 180.487 53.213) (xy 180.487 53.467) + (xy 180.467 53.467) (xy 180.467 54.66625) (xy 180.62575 54.825) (xy 181.19 54.828072) (xy 181.314482 54.815812) + (xy 181.43418 54.779502) (xy 181.544494 54.720537) (xy 181.641185 54.641185) (xy 181.720537 54.544494) (xy 181.779502 54.43418) + (xy 181.801513 54.36162) (xy 181.933368 54.493475) (xy 182.176589 54.65599) (xy 182.446842 54.767932) (xy 182.73374 54.825) + (xy 182.754132 54.825) (xy 181.264133 56.315) (xy 144.821015 56.315) (xy 144.779999 56.31096) (xy 144.738983 56.315) + (xy 144.738981 56.315) (xy 144.616311 56.327082) (xy 144.458913 56.374828) (xy 144.313854 56.452364) (xy 144.186709 56.556709) + (xy 144.160561 56.588571) (xy 142.948579 57.800554) (xy 142.916709 57.826709) (xy 142.812365 57.953854) (xy 142.812364 57.953855) + (xy 142.734828 58.098914) (xy 142.687082 58.256312) (xy 142.67096 58.42) (xy 142.675 58.461019) (xy 142.675001 69.514131) + (xy 142.37 69.819132) (xy 142.37 69.722112) (xy 142.316199 69.451635) (xy 142.210664 69.196851) (xy 142.057451 68.967552) + (xy 141.862448 68.772549) (xy 141.633149 68.619336) (xy 141.562326 68.59) (xy 141.633149 68.560664) (xy 141.862448 68.407451) + (xy 142.057451 68.212448) (xy 142.210664 67.983149) (xy 142.316199 67.728365) (xy 142.37 67.457888) (xy 142.37 67.182112) + (xy 142.316199 66.911635) (xy 142.210664 66.656851) (xy 142.057451 66.427552) (xy 141.862448 66.232549) (xy 141.633149 66.079336) + (xy 141.562326 66.05) (xy 141.633149 66.020664) (xy 141.862448 65.867451) (xy 142.057451 65.672448) (xy 142.210664 65.443149) + (xy 142.316199 65.188365) (xy 142.37 64.917888) (xy 142.37 64.642112) (xy 142.316199 64.371635) (xy 142.210664 64.116851) + (xy 142.057451 63.887552) (xy 141.862448 63.692549) (xy 141.781541 63.638488) (xy 141.859482 63.630812) (xy 141.97918 63.594502) + (xy 142.089494 63.535537) (xy 142.186185 63.456185) (xy 142.265537 63.359494) (xy 142.324502 63.24918) (xy 142.360812 63.129482) + (xy 142.373072 63.005) (xy 142.373072 61.475) (xy 142.360812 61.350518) (xy 142.324502 61.23082) (xy 142.265537 61.120506) + (xy 142.186185 61.023815) (xy 142.089494 60.944463) (xy 141.97918 60.885498) (xy 141.859482 60.849188) (xy 141.735 60.836928) + (xy 140.205 60.836928) (xy 140.080518 60.849188) (xy 139.96082 60.885498) (xy 139.850506 60.944463) (xy 139.753815 61.023815) + (xy 139.674463 61.120506) (xy 139.615498 61.23082) (xy 139.579188 61.350518) (xy 139.566928 61.475) (xy 139.566928 62.462204) + (xy 137.995 64.034133) (xy 137.995 54.296993) (xy 166.862612 54.296993) (xy 166.928137 54.53586) (xy 167.175116 54.65176) + (xy 167.43996 54.71725) (xy 167.712492 54.729812) (xy 167.982238 54.688965) (xy 168.238832 54.596277) (xy 168.351863 54.53586) + (xy 168.417388 54.296993) (xy 167.64 53.519605) (xy 166.862612 54.296993) (xy 137.995 54.296993) (xy 137.995 53.412492) + (xy 166.250188 53.412492) (xy 166.291035 53.682238) (xy 166.383723 53.938832) (xy 166.44414 54.051863) (xy 166.683007 54.117388) + (xy 167.460395 53.34) (xy 166.683007 52.562612) (xy 166.44414 52.628137) (xy 166.32824 52.875116) (xy 166.26275 53.13996) + (xy 166.250188 53.412492) (xy 137.995 53.412492) (xy 137.995 52.383007) (xy 166.862612 52.383007) (xy 167.64 53.160395) + (xy 168.417388 52.383007) (xy 168.351863 52.14414) (xy 168.104884 52.02824) (xy 167.84004 51.96275) (xy 167.567508 51.950188) + (xy 167.297762 51.991035) (xy 167.041168 52.083723) (xy 166.928137 52.14414) (xy 166.862612 52.383007) (xy 137.995 52.383007) + (xy 137.995 51.613227) (xy 138.557975 51.050253) (xy 138.612565 51.131952) (xy 138.819408 51.338795) (xy 139.062629 51.50131) + (xy 139.332882 51.613252) (xy 139.61978 51.67032) (xy 139.9123 51.67032) (xy 140.199198 51.613252) (xy 140.469451 51.50131) + (xy 140.712672 51.338795) (xy 140.919515 51.131952) (xy 141.03604 50.95756) (xy 141.152565 51.131952) (xy 141.359408 51.338795) + (xy 141.602629 51.50131) (xy 141.872882 51.613252) (xy 142.15978 51.67032) (xy 142.4523 51.67032) (xy 142.739198 51.613252) + (xy 143.009451 51.50131) (xy 143.252672 51.338795) (xy 143.459515 51.131952) (xy 143.57604 50.95756) (xy 143.692565 51.131952) + (xy 143.899408 51.338795) (xy 144.142629 51.50131) (xy 144.412882 51.613252) (xy 144.69978 51.67032) (xy 144.9923 51.67032) + (xy 145.279198 51.613252) (xy 145.549451 51.50131) (xy 145.792672 51.338795) (xy 145.999515 51.131952) (xy 146.11604 50.95756) + (xy 146.232565 51.131952) (xy 146.439408 51.338795) (xy 146.682629 51.50131) (xy 146.952882 51.613252) (xy 147.23978 51.67032) + (xy 147.5323 51.67032) (xy 147.819198 51.613252) (xy 148.089451 51.50131) (xy 148.332672 51.338795) (xy 148.539515 51.131952) + (xy 148.65604 50.95756) (xy 148.772565 51.131952) (xy 148.979408 51.338795) (xy 149.222629 51.50131) (xy 149.492882 51.613252) + (xy 149.77978 51.67032) (xy 150.0723 51.67032) (xy 150.359198 51.613252) (xy 150.629451 51.50131) (xy 150.872672 51.338795) + (xy 151.079515 51.131952) (xy 151.201235 50.949786) (xy 151.270862 51.066675) (xy 151.465771 51.282908) (xy 151.69912 51.456961) + (xy 151.961941 51.582145) (xy 152.10915 51.626796) (xy 152.33904 51.505475) (xy 152.33904 50.31232) (xy 152.31904 50.31232) + (xy 152.31904 50.05832) (xy 152.33904 50.05832) (xy 152.33904 48.865165) (xy 152.59304 48.865165) (xy 152.59304 50.05832) + (xy 152.61304 50.05832) (xy 152.61304 50.31232) (xy 152.59304 50.31232) (xy 152.59304 51.505475) (xy 152.82293 51.626796) + (xy 152.970139 51.582145) (xy 153.23296 51.456961) (xy 153.466309 51.282908) (xy 153.542074 51.198854) (xy 153.566538 51.2795) + (xy 153.625503 51.389814) (xy 153.704855 51.486505) (xy 153.801546 51.565857) (xy 153.91186 51.624822) (xy 154.031558 51.661132) + (xy 154.15604 51.673392) (xy 155.85604 51.673392) (xy 155.980522 51.661132) (xy 156.10022 51.624822) (xy 156.210534 51.565857) + (xy 156.307225 51.486505) (xy 156.386577 51.389814) (xy 156.445542 51.2795) (xy 156.481852 51.159802) (xy 156.494112 51.03532) + (xy 156.494112 49.33532) (xy 156.481852 49.210838) (xy 156.445542 49.09114) (xy 156.386577 48.980826) (xy 156.307225 48.884135) + (xy 156.210534 48.804783) (xy 156.10022 48.745818) (xy 155.980522 48.709508) (xy 155.85604 48.697248) (xy 154.15604 48.697248) + (xy 154.031558 48.709508) (xy 153.91186 48.745818) (xy 153.801546 48.804783) (xy 153.704855 48.884135) (xy 153.625503 48.980826) + (xy 153.566538 49.09114) (xy 153.542074 49.171786) (xy 153.466309 49.087732) (xy 153.23296 48.913679) (xy 152.970139 48.788495) + (xy 152.82293 48.743844) (xy 152.59304 48.865165) (xy 152.33904 48.865165) (xy 152.10915 48.743844) (xy 151.961941 48.788495) + (xy 151.69912 48.913679) (xy 151.465771 49.087732) (xy 151.270862 49.303965) (xy 151.201235 49.420854) (xy 151.079515 49.238688) + (xy 150.872672 49.031845) (xy 150.629451 48.86933) (xy 150.359198 48.757388) (xy 150.0723 48.70032) (xy 149.77978 48.70032) + (xy 149.492882 48.757388) (xy 149.222629 48.86933) (xy 148.979408 49.031845) (xy 148.772565 49.238688) (xy 148.65604 49.41308) + (xy 148.539515 49.238688) (xy 148.332672 49.031845) (xy 148.089451 48.86933) (xy 147.819198 48.757388) (xy 147.5323 48.70032) + (xy 147.23978 48.70032) (xy 146.952882 48.757388) (xy 146.682629 48.86933) (xy 146.439408 49.031845) (xy 146.232565 49.238688) + (xy 146.11604 49.41308) (xy 145.999515 49.238688) (xy 145.792672 49.031845) (xy 145.68104 48.957255) (xy 145.68104 47.566958) + (xy 145.68508 47.52594) (xy 145.672831 47.40157) (xy 145.668958 47.362251) (xy 145.621212 47.204853) (xy 145.543676 47.059794) + (xy 145.52006 47.031018) (xy 145.465479 46.96451) (xy 145.465477 46.964508) (xy 145.439331 46.932649) (xy 145.407473 46.906504) + (xy 144.779685 46.278718) (xy 144.753531 46.246849) (xy 144.626386 46.142504) (xy 144.481327 46.064968) (xy 144.323929 46.017222) + (xy 144.201259 46.00514) (xy 144.201258 46.00514) (xy 144.16024 46.0011) (xy 144.119222 46.00514) (xy 136.141838 46.00514) + (xy 136.10082 46.0011) (xy 136.059802 46.00514) (xy 136.059801 46.00514) (xy 135.937131 46.017222) (xy 135.826142 46.05089) + (xy 135.779733 46.064968) (xy 135.634674 46.142504) (xy 135.546547 46.214828) (xy 135.507529 46.246849) (xy 135.481383 46.278708) + (xy 134.058574 47.701519) (xy 134.02671 47.727669) (xy 134.01 47.74803) (xy 134.01 34.497938) (xy 134.0941 34.497938) + (xy 134.0941 35.184422) (xy 134.228027 35.857717) (xy 134.490733 36.491946) (xy 134.872124 37.062738) (xy 135.357542 37.548156) + (xy 135.928334 37.929547) (xy 136.562563 38.192253) (xy 137.235858 38.32618) (xy 137.922342 38.32618) (xy 138.595637 38.192253) + (xy 139.229866 37.929547) (xy 139.800658 37.548156) (xy 140.286076 37.062738) (xy 140.667467 36.491946) (xy 140.930173 35.857717) + (xy 141.0641 35.184422) (xy 141.0641 34.497938) (xy 140.930173 33.824643) (xy 140.667467 33.190414) (xy 140.286076 32.619622) + (xy 139.800658 32.134204) (xy 139.229866 31.752813) (xy 138.595637 31.490107) (xy 137.922342 31.35618) (xy 137.235858 31.35618) + (xy 136.562563 31.490107) (xy 135.928334 31.752813) (xy 135.357542 32.134204) (xy 134.872124 32.619622) (xy 134.490733 33.190414) + (xy 134.228027 33.824643) (xy 134.0941 34.497938) (xy 134.01 34.497938) (xy 134.01 34.322279) (xy 134.073096 33.678778) + (xy 134.250606 33.090836) (xy 134.538937 32.548564) (xy 134.927094 32.072636) (xy 135.400314 31.681155) (xy 135.940552 31.389049) + (xy 136.527244 31.207437) (xy 137.168879 31.14) (xy 165.355109 31.14) + ) + ) + (filled_polygon + (pts + (xy 164.978033 62.036427) (xy 164.965064 62.311899) (xy 165.006086 62.584607) (xy 165.035857 62.667278) (xy 164.936311 62.677082) + (xy 164.778913 62.724828) (xy 164.633854 62.802364) (xy 164.506709 62.906709) (xy 164.480561 62.938571) (xy 163.268579 64.150554) + (xy 163.236709 64.176709) (xy 163.132365 64.303854) (xy 163.132364 64.303855) (xy 163.054828 64.448914) (xy 163.007082 64.606312) + (xy 162.99096 64.77) (xy 162.995 64.811019) (xy 162.995001 73.618971) (xy 162.99096 73.66) (xy 163.007082 73.823688) + (xy 163.054828 73.981086) (xy 163.054829 73.981087) (xy 163.132365 74.126146) (xy 163.23671 74.253291) (xy 163.268574 74.279441) + (xy 164.490558 75.501426) (xy 164.516709 75.533291) (xy 164.643854 75.637636) (xy 164.788913 75.715172) (xy 164.946311 75.762918) + (xy 165.068981 75.775) (xy 165.068991 75.775) (xy 165.109999 75.779039) (xy 165.151007 75.775) (xy 165.244163 75.775) + (xy 165.282549 75.832448) (xy 165.477552 76.027451) (xy 165.706851 76.180664) (xy 165.771594 76.207482) (xy 165.765928 76.209522) + (xy 165.64924 76.271894) (xy 165.581898 76.512293) (xy 166.37 77.300395) (xy 167.158102 76.512293) (xy 167.09076 76.271894) + (xy 166.960664 76.210688) (xy 167.033149 76.180664) (xy 167.262448 76.027451) (xy 167.457451 75.832448) (xy 167.610664 75.603149) + (xy 167.716199 75.348365) (xy 167.77 75.077888) (xy 167.77 74.802112) (xy 167.716199 74.531635) (xy 167.610664 74.276851) + (xy 167.457451 74.047552) (xy 167.262448 73.852549) (xy 167.033149 73.699336) (xy 166.962326 73.67) (xy 167.033149 73.640664) + (xy 167.262448 73.487451) (xy 167.457451 73.292448) (xy 167.610664 73.063149) (xy 167.716199 72.808365) (xy 167.77 72.537888) + (xy 167.77 72.262112) (xy 167.716199 71.991635) (xy 167.610664 71.736851) (xy 167.457451 71.507552) (xy 167.262448 71.312549) + (xy 167.033149 71.159336) (xy 166.962326 71.13) (xy 167.033149 71.100664) (xy 167.262448 70.947451) (xy 167.457451 70.752448) + (xy 167.610664 70.523149) (xy 167.716199 70.268365) (xy 167.77 69.997888) (xy 167.77 69.722112) (xy 167.716199 69.451635) + (xy 167.610664 69.196851) (xy 167.457451 68.967552) (xy 167.262448 68.772549) (xy 167.033149 68.619336) (xy 166.962326 68.59) + (xy 167.033149 68.560664) (xy 167.262448 68.407451) (xy 167.457451 68.212448) (xy 167.610664 67.983149) (xy 167.716199 67.728365) + (xy 167.77 67.457888) (xy 167.77 67.182112) (xy 167.716199 66.911635) (xy 167.610664 66.656851) (xy 167.457451 66.427552) + (xy 167.262448 66.232549) (xy 167.033149 66.079336) (xy 166.962326 66.05) (xy 167.033149 66.020664) (xy 167.262448 65.867451) + (xy 167.457451 65.672448) (xy 167.495837 65.615) (xy 167.588982 65.615) (xy 167.63 65.61904) (xy 167.671018 65.615) + (xy 167.671019 65.615) (xy 167.793689 65.602918) (xy 167.951087 65.555172) (xy 168.096146 65.477636) (xy 168.223291 65.373291) + (xy 168.249446 65.341421) (xy 169.255868 64.335) (xy 169.434132 64.335) (xy 168.348579 65.420554) (xy 168.316709 65.446709) + (xy 168.227697 65.555172) (xy 168.212364 65.573855) (xy 168.134828 65.718914) (xy 168.087082 65.876312) (xy 168.07096 66.04) + (xy 168.075 66.081019) (xy 168.075001 80.934131) (xy 167.399516 81.609617) (xy 167.262448 81.472549) (xy 167.033149 81.319336) + (xy 166.962326 81.29) (xy 167.033149 81.260664) (xy 167.262448 81.107451) (xy 167.457451 80.912448) (xy 167.610664 80.683149) + (xy 167.716199 80.428365) (xy 167.77 80.157888) (xy 167.77 79.882112) (xy 167.716199 79.611635) (xy 167.610664 79.356851) + (xy 167.457451 79.127552) (xy 167.262448 78.932549) (xy 167.033149 78.779336) (xy 166.968406 78.752518) (xy 166.974072 78.750478) + (xy 167.09076 78.688106) (xy 167.158102 78.447707) (xy 166.37 77.659605) (xy 165.581898 78.447707) (xy 165.64924 78.688106) + (xy 165.779336 78.749312) (xy 165.706851 78.779336) (xy 165.477552 78.932549) (xy 165.282549 79.127552) (xy 165.244163 79.185) + (xy 165.131018 79.185) (xy 165.089999 79.18096) (xy 165.048981 79.185) (xy 164.926311 79.197082) (xy 164.768913 79.244828) + (xy 164.623854 79.322364) (xy 164.496709 79.426709) (xy 164.470558 79.458574) (xy 163.268574 80.660559) (xy 163.23671 80.686709) + (xy 163.210562 80.718571) (xy 163.132364 80.813855) (xy 163.054828 80.958914) (xy 163.007082 81.116312) (xy 162.99096 81.28) + (xy 162.995001 81.321028) (xy 162.995 82.508981) (xy 162.99096 82.55) (xy 162.995 82.591018) (xy 163.007082 82.713688) + (xy 163.054828 82.871086) (xy 163.132364 83.016145) (xy 163.236709 83.143291) (xy 163.268579 83.169446) (xy 164.480558 84.381426) + (xy 164.506709 84.413291) (xy 164.633854 84.517636) (xy 164.778913 84.595172) (xy 164.936311 84.642918) (xy 165.03976 84.653107) + (xy 165.023801 84.691635) (xy 164.97 84.962112) (xy 164.97 85.237888) (xy 165.023801 85.508365) (xy 165.030691 85.525) + (xy 163.500093 85.525) (xy 163.555226 85.391898) (xy 163.595 85.191939) (xy 163.595 84.988061) (xy 163.555226 84.788102) + (xy 163.477205 84.599744) (xy 163.363937 84.430226) (xy 163.219774 84.286063) (xy 163.050256 84.172795) (xy 162.861898 84.094774) + (xy 162.716777 84.065908) (xy 158.315 79.664133) (xy 158.315 79.353285) (xy 158.397205 79.230256) (xy 158.475226 79.041898) + (xy 158.515 78.841939) (xy 158.515 78.638061) (xy 158.475226 78.438102) (xy 158.397205 78.249744) (xy 158.283937 78.080226) + (xy 158.139774 77.936063) (xy 157.970256 77.822795) (xy 157.781898 77.744774) (xy 157.581939 77.705) (xy 157.378061 77.705) + (xy 157.178102 77.744774) (xy 156.989744 77.822795) (xy 156.820226 77.936063) (xy 156.676063 78.080226) (xy 156.562795 78.249744) + (xy 156.484774 78.438102) (xy 156.445 78.638061) (xy 156.445 78.841939) (xy 156.484774 79.041898) (xy 156.562795 79.230256) + (xy 156.645 79.353286) (xy 156.645001 79.968972) (xy 156.64096 80.01) (xy 156.657082 80.173688) (xy 156.704828 80.331086) + (xy 156.782364 80.476145) (xy 156.782365 80.476146) (xy 156.88671 80.603291) (xy 156.918574 80.629441) (xy 161.535908 85.246777) + (xy 161.564774 85.391898) (xy 161.619907 85.525) (xy 153.711018 85.525) (xy 153.67 85.52096) (xy 153.506311 85.537082) + (xy 153.348913 85.584828) (xy 153.203854 85.662364) (xy 153.134308 85.719439) (xy 153.076709 85.766709) (xy 153.050563 85.798568) + (xy 149.504133 89.345) (xy 142.975867 89.345) (xy 144.071426 88.249442) (xy 144.103291 88.223291) (xy 144.207636 88.096146) + (xy 144.285172 87.951087) (xy 144.332918 87.793689) (xy 144.345 87.671019) (xy 144.345 87.671017) (xy 144.34904 87.630001) + (xy 144.345 87.588985) (xy 144.345 83.861015) (xy 144.34904 83.819999) (xy 144.34252 83.753801) (xy 144.332918 83.656311) + (xy 144.285172 83.498913) (xy 144.207636 83.353854) (xy 144.103291 83.226709) (xy 144.071428 83.20056) (xy 142.859437 81.98857) + (xy 142.83329 81.95671) (xy 142.763505 81.899438) (xy 142.706145 81.852364) (xy 142.561086 81.774828) (xy 142.403688 81.727082) + (xy 142.24 81.71096) (xy 142.239999 81.71096) (xy 142.097451 81.725) (xy 142.095837 81.725) (xy 142.057451 81.667552) + (xy 141.862448 81.472549) (xy 141.633149 81.319336) (xy 141.562326 81.29) (xy 141.633149 81.260664) (xy 141.862448 81.107451) + (xy 142.057451 80.912448) (xy 142.210664 80.683149) (xy 142.316199 80.428365) (xy 142.37 80.157888) (xy 142.37 79.882112) + (xy 142.316199 79.611635) (xy 142.30024 79.573107) (xy 142.403689 79.562918) (xy 142.561087 79.515172) (xy 142.706146 79.437636) + (xy 142.833291 79.333291) (xy 142.859446 79.301421) (xy 144.608968 77.551899) (xy 164.965064 77.551899) (xy 165.006086 77.824607) + (xy 165.099522 78.084072) (xy 165.161894 78.20076) (xy 165.402293 78.268102) (xy 166.190395 77.48) (xy 166.549605 77.48) + (xy 167.337707 78.268102) (xy 167.578106 78.20076) (xy 167.695506 77.95122) (xy 167.761967 77.683573) (xy 167.774936 77.408101) + (xy 167.733914 77.135393) (xy 167.640478 76.875928) (xy 167.578106 76.75924) (xy 167.337707 76.691898) (xy 166.549605 77.48) + (xy 166.190395 77.48) (xy 165.402293 76.691898) (xy 165.161894 76.75924) (xy 165.044494 77.00878) (xy 164.978033 77.276427) + (xy 164.965064 77.551899) (xy 144.608968 77.551899) (xy 147.881432 74.279437) (xy 147.913291 74.253291) (xy 147.93944 74.221429) + (xy 148.017636 74.126146) (xy 148.095172 73.981087) (xy 148.142918 73.823689) (xy 148.15904 73.66) (xy 148.155 73.618982) + (xy 148.155 62.575867) (xy 148.935868 61.795) (xy 165.037983 61.795) + ) + ) + (filled_polygon + (pts + (xy 166.563748 62.225858) (xy 166.549605 62.24) (xy 166.563748 62.254143) (xy 166.384143 62.433748) (xy 166.37 62.419605) + (xy 166.355858 62.433748) (xy 166.176253 62.254143) (xy 166.190395 62.24) (xy 166.176253 62.225858) (xy 166.355858 62.046253) + (xy 166.37 62.060395) (xy 166.384143 62.046253) + ) + ) + ) + (zone (net 15) (net_name GND) (layer F.Cu) (tstamp 0) (hatch edge 0.508) + (connect_pads (clearance 0.508)) + (min_thickness 0.254) + (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508)) + (polygon + (pts + (xy 219.71 25.4) (xy 219.71 116.84) (xy 214.63 124.46) (xy 128.27 124.46) (xy 121.92 114.3) + (xy 121.92 30.48) (xy 128.27 22.86) (xy 132.08 21.59) (xy 214.63 21.59) + ) + ) + (filled_polygon + (pts + (xy 202.541222 31.203096) (xy 203.129164 31.380606) (xy 203.671436 31.668937) (xy 204.147364 32.057094) (xy 204.538845 32.530314) + (xy 204.830951 33.070552) (xy 205.012563 33.657244) (xy 205.08 34.298879) (xy 205.080001 109.187711) (xy 205.016904 109.831221) + (xy 204.839394 110.419164) (xy 204.551063 110.961436) (xy 204.162906 111.437364) (xy 203.689686 111.828845) (xy 203.149449 112.12095) + (xy 202.562756 112.302563) (xy 201.92113 112.37) (xy 137.192279 112.37) (xy 136.548779 112.306904) (xy 135.960836 112.129394) + (xy 135.418564 111.841063) (xy 134.942636 111.452906) (xy 134.551155 110.979686) (xy 134.25905 110.439449) (xy 134.077437 109.852756) + (xy 134.01 109.21113) (xy 134.01 40.64) (xy 137.59096 40.64) (xy 137.595001 40.681029) (xy 137.595 105.378982) + (xy 137.59096 105.42) (xy 137.595 105.461018) (xy 137.607082 105.583688) (xy 137.654828 105.741086) (xy 137.732364 105.886145) + (xy 137.836709 106.013291) (xy 137.868579 106.039446) (xy 139.583479 107.754347) (xy 139.57 107.822112) (xy 139.57 108.097888) + (xy 139.623801 108.368365) (xy 139.729336 108.623149) (xy 139.882549 108.852448) (xy 140.077552 109.047451) (xy 140.306851 109.200664) + (xy 140.561635 109.306199) (xy 140.832112 109.36) (xy 141.107888 109.36) (xy 141.378365 109.306199) (xy 141.633149 109.200664) + (xy 141.862448 109.047451) (xy 142.057451 108.852448) (xy 142.210664 108.623149) (xy 142.316199 108.368365) (xy 142.37 108.097888) + (xy 142.37 107.822112) (xy 142.316199 107.551635) (xy 142.210664 107.296851) (xy 142.057451 107.067552) (xy 141.862448 106.872549) + (xy 141.633149 106.719336) (xy 141.562326 106.69) (xy 141.633149 106.660664) (xy 141.862448 106.507451) (xy 142.057451 106.312448) + (xy 142.210664 106.083149) (xy 142.316199 105.828365) (xy 142.37 105.557888) (xy 142.37 105.282112) (xy 142.316199 105.011635) + (xy 142.210664 104.756851) (xy 142.057451 104.527552) (xy 141.862448 104.332549) (xy 141.633149 104.179336) (xy 141.562326 104.15) + (xy 141.633149 104.120664) (xy 141.862448 103.967451) (xy 142.057451 103.772448) (xy 142.210664 103.543149) (xy 142.316199 103.288365) + (xy 142.37 103.017888) (xy 142.37 102.742112) (xy 142.316199 102.471635) (xy 142.210664 102.216851) (xy 142.057451 101.987552) + (xy 141.862448 101.792549) (xy 141.633149 101.639336) (xy 141.562326 101.61) (xy 141.633149 101.580664) (xy 141.862448 101.427451) + (xy 142.057451 101.232448) (xy 142.210664 101.003149) (xy 142.316199 100.748365) (xy 142.37 100.477888) (xy 142.37 100.202112) + (xy 142.316199 99.931635) (xy 142.210664 99.676851) (xy 142.057451 99.447552) (xy 141.862448 99.252549) (xy 141.633149 99.099336) + (xy 141.562326 99.07) (xy 141.633149 99.040664) (xy 141.862448 98.887451) (xy 142.057451 98.692448) (xy 142.210664 98.463149) + (xy 142.316199 98.208365) (xy 142.37 97.937888) (xy 142.37 97.662112) (xy 142.316199 97.391635) (xy 142.210664 97.136851) + (xy 142.057451 96.907552) (xy 141.862448 96.712549) (xy 141.633149 96.559336) (xy 141.568406 96.532518) (xy 141.574072 96.530478) + (xy 141.69076 96.468106) (xy 141.758102 96.227707) (xy 140.97 95.439605) (xy 140.181898 96.227707) (xy 140.24924 96.468106) + (xy 140.379336 96.529312) (xy 140.306851 96.559336) (xy 140.077552 96.712549) (xy 139.882549 96.907552) (xy 139.729336 97.136851) + (xy 139.623801 97.391635) (xy 139.57 97.662112) (xy 139.57 97.937888) (xy 139.623801 98.208365) (xy 139.729336 98.463149) + (xy 139.882549 98.692448) (xy 140.077552 98.887451) (xy 140.306851 99.040664) (xy 140.377674 99.07) (xy 140.306851 99.099336) + (xy 140.077552 99.252549) (xy 139.882549 99.447552) (xy 139.729336 99.676851) (xy 139.623801 99.931635) (xy 139.57 100.202112) + (xy 139.57 100.477888) (xy 139.623801 100.748365) (xy 139.729336 101.003149) (xy 139.882549 101.232448) (xy 140.077552 101.427451) + (xy 140.306851 101.580664) (xy 140.377674 101.61) (xy 140.306851 101.639336) (xy 140.077552 101.792549) (xy 139.882549 101.987552) + (xy 139.729336 102.216851) (xy 139.623801 102.471635) (xy 139.57 102.742112) (xy 139.57 103.017888) (xy 139.623801 103.288365) + (xy 139.729336 103.543149) (xy 139.882549 103.772448) (xy 140.077552 103.967451) (xy 140.306851 104.120664) (xy 140.377674 104.15) + (xy 140.306851 104.179336) (xy 140.077552 104.332549) (xy 139.882549 104.527552) (xy 139.729336 104.756851) (xy 139.623801 105.011635) + (xy 139.57 105.282112) (xy 139.57 105.379133) (xy 139.265 105.074133) (xy 139.265 95.331899) (xy 139.565064 95.331899) + (xy 139.606086 95.604607) (xy 139.699522 95.864072) (xy 139.761894 95.98076) (xy 140.002293 96.048102) (xy 140.790395 95.26) + (xy 140.002293 94.471898) (xy 139.761894 94.53924) (xy 139.644494 94.78878) (xy 139.578033 95.056427) (xy 139.565064 95.331899) + (xy 139.265 95.331899) (xy 139.265 61.475) (xy 139.566928 61.475) (xy 139.566928 63.005) (xy 139.579188 63.129482) + (xy 139.615498 63.24918) (xy 139.674463 63.359494) (xy 139.753815 63.456185) (xy 139.850506 63.535537) (xy 139.96082 63.594502) + (xy 140.080518 63.630812) (xy 140.158459 63.638488) (xy 140.077552 63.692549) (xy 139.882549 63.887552) (xy 139.729336 64.116851) + (xy 139.623801 64.371635) (xy 139.57 64.642112) (xy 139.57 64.917888) (xy 139.623801 65.188365) (xy 139.729336 65.443149) + (xy 139.882549 65.672448) (xy 140.077552 65.867451) (xy 140.306851 66.020664) (xy 140.377674 66.05) (xy 140.306851 66.079336) + (xy 140.077552 66.232549) (xy 139.882549 66.427552) (xy 139.729336 66.656851) (xy 139.623801 66.911635) (xy 139.57 67.182112) + (xy 139.57 67.457888) (xy 139.623801 67.728365) (xy 139.729336 67.983149) (xy 139.882549 68.212448) (xy 140.077552 68.407451) + (xy 140.306851 68.560664) (xy 140.377674 68.59) (xy 140.306851 68.619336) (xy 140.077552 68.772549) (xy 139.882549 68.967552) + (xy 139.729336 69.196851) (xy 139.623801 69.451635) (xy 139.57 69.722112) (xy 139.57 69.997888) (xy 139.623801 70.268365) + (xy 139.729336 70.523149) (xy 139.882549 70.752448) (xy 140.077552 70.947451) (xy 140.306851 71.100664) (xy 140.377674 71.13) + (xy 140.306851 71.159336) (xy 140.077552 71.312549) (xy 139.882549 71.507552) (xy 139.729336 71.736851) (xy 139.623801 71.991635) + (xy 139.57 72.262112) (xy 139.57 72.537888) (xy 139.623801 72.808365) (xy 139.729336 73.063149) (xy 139.882549 73.292448) + (xy 140.077552 73.487451) (xy 140.306851 73.640664) (xy 140.377674 73.67) (xy 140.306851 73.699336) (xy 140.077552 73.852549) + (xy 139.882549 74.047552) (xy 139.729336 74.276851) (xy 139.623801 74.531635) (xy 139.57 74.802112) (xy 139.57 75.077888) + (xy 139.623801 75.348365) (xy 139.729336 75.603149) (xy 139.882549 75.832448) (xy 140.077552 76.027451) (xy 140.306851 76.180664) + (xy 140.377674 76.21) (xy 140.306851 76.239336) (xy 140.077552 76.392549) (xy 139.882549 76.587552) (xy 139.729336 76.816851) + (xy 139.623801 77.071635) (xy 139.57 77.342112) (xy 139.57 77.617888) (xy 139.623801 77.888365) (xy 139.729336 78.143149) + (xy 139.882549 78.372448) (xy 140.077552 78.567451) (xy 140.306851 78.720664) (xy 140.377674 78.75) (xy 140.306851 78.779336) + (xy 140.077552 78.932549) (xy 139.882549 79.127552) (xy 139.729336 79.356851) (xy 139.623801 79.611635) (xy 139.57 79.882112) + (xy 139.57 80.157888) (xy 139.623801 80.428365) (xy 139.729336 80.683149) (xy 139.882549 80.912448) (xy 140.077552 81.107451) + (xy 140.306851 81.260664) (xy 140.377674 81.29) (xy 140.306851 81.319336) (xy 140.077552 81.472549) (xy 139.882549 81.667552) + (xy 139.729336 81.896851) (xy 139.623801 82.151635) (xy 139.57 82.422112) (xy 139.57 82.697888) (xy 139.623801 82.968365) + (xy 139.729336 83.223149) (xy 139.882549 83.452448) (xy 140.077552 83.647451) (xy 140.306851 83.800664) (xy 140.377674 83.83) + (xy 140.306851 83.859336) (xy 140.077552 84.012549) (xy 139.882549 84.207552) (xy 139.729336 84.436851) (xy 139.623801 84.691635) + (xy 139.57 84.962112) (xy 139.57 85.237888) (xy 139.623801 85.508365) (xy 139.729336 85.763149) (xy 139.882549 85.992448) + (xy 140.077552 86.187451) (xy 140.306851 86.340664) (xy 140.377674 86.37) (xy 140.306851 86.399336) (xy 140.077552 86.552549) + (xy 139.882549 86.747552) (xy 139.729336 86.976851) (xy 139.623801 87.231635) (xy 139.57 87.502112) (xy 139.57 87.777888) + (xy 139.623801 88.048365) (xy 139.729336 88.303149) (xy 139.882549 88.532448) (xy 140.077552 88.727451) (xy 140.306851 88.880664) + (xy 140.377674 88.91) (xy 140.306851 88.939336) (xy 140.077552 89.092549) (xy 139.882549 89.287552) (xy 139.729336 89.516851) + (xy 139.623801 89.771635) (xy 139.57 90.042112) (xy 139.57 90.317888) (xy 139.623801 90.588365) (xy 139.729336 90.843149) + (xy 139.882549 91.072448) (xy 140.077552 91.267451) (xy 140.306851 91.420664) (xy 140.377674 91.45) (xy 140.306851 91.479336) + (xy 140.077552 91.632549) (xy 139.882549 91.827552) (xy 139.729336 92.056851) (xy 139.623801 92.311635) (xy 139.57 92.582112) + (xy 139.57 92.857888) (xy 139.623801 93.128365) (xy 139.729336 93.383149) (xy 139.882549 93.612448) (xy 140.077552 93.807451) + (xy 140.306851 93.960664) (xy 140.371594 93.987482) (xy 140.365928 93.989522) (xy 140.24924 94.051894) (xy 140.181898 94.292293) + (xy 140.97 95.080395) (xy 140.984143 95.066253) (xy 141.163748 95.245858) (xy 141.149605 95.26) (xy 141.937707 96.048102) + (xy 142.178106 95.98076) (xy 142.295506 95.73122) (xy 142.361967 95.463573) (xy 142.370093 95.290961) (xy 146.815558 99.736426) + (xy 146.841708 99.76829) (xy 146.923204 99.835172) (xy 146.968853 99.872635) (xy 147.113912 99.950171) (xy 147.27131 99.997917) + (xy 147.434998 100.014039) (xy 147.476017 100.009999) (xy 165.008213 100.009999) (xy 164.97 100.202112) (xy 164.97 100.477888) + (xy 165.023801 100.748365) (xy 165.129336 101.003149) (xy 165.282549 101.232448) (xy 165.477552 101.427451) (xy 165.706851 101.580664) + (xy 165.777674 101.61) (xy 165.706851 101.639336) (xy 165.477552 101.792549) (xy 165.282549 101.987552) (xy 165.129336 102.216851) + (xy 165.023801 102.471635) (xy 164.97 102.742112) (xy 164.97 103.017888) (xy 165.023801 103.288365) (xy 165.129336 103.543149) + (xy 165.282549 103.772448) (xy 165.477552 103.967451) (xy 165.706851 104.120664) (xy 165.777674 104.15) (xy 165.706851 104.179336) + (xy 165.477552 104.332549) (xy 165.282549 104.527552) (xy 165.129336 104.756851) (xy 165.023801 105.011635) (xy 164.97 105.282112) + (xy 164.97 105.557888) (xy 165.023801 105.828365) (xy 165.129336 106.083149) (xy 165.282549 106.312448) (xy 165.477552 106.507451) + (xy 165.706851 106.660664) (xy 165.777674 106.69) (xy 165.706851 106.719336) (xy 165.477552 106.872549) (xy 165.282549 107.067552) + (xy 165.129336 107.296851) (xy 165.023801 107.551635) (xy 164.97 107.822112) (xy 164.97 108.097888) (xy 165.023801 108.368365) + (xy 165.129336 108.623149) (xy 165.282549 108.852448) (xy 165.477552 109.047451) (xy 165.706851 109.200664) (xy 165.961635 109.306199) + (xy 166.232112 109.36) (xy 166.507888 109.36) (xy 166.778365 109.306199) (xy 167.033149 109.200664) (xy 167.262448 109.047451) + (xy 167.457451 108.852448) (xy 167.610664 108.623149) (xy 167.716199 108.368365) (xy 167.718647 108.356058) (xy 198.06908 108.356058) + (xy 198.06908 109.042542) (xy 198.203007 109.715837) (xy 198.465713 110.350066) (xy 198.847104 110.920858) (xy 199.332522 111.406276) + (xy 199.903314 111.787667) (xy 200.537543 112.050373) (xy 201.210838 112.1843) (xy 201.897322 112.1843) (xy 202.570617 112.050373) + (xy 203.204846 111.787667) (xy 203.775638 111.406276) (xy 204.261056 110.920858) (xy 204.642447 110.350066) (xy 204.905153 109.715837) + (xy 205.03908 109.042542) (xy 205.03908 108.356058) (xy 204.905153 107.682763) (xy 204.642447 107.048534) (xy 204.261056 106.477742) + (xy 203.775638 105.992324) (xy 203.204846 105.610933) (xy 202.570617 105.348227) (xy 201.897322 105.2143) (xy 201.210838 105.2143) + (xy 200.537543 105.348227) (xy 199.903314 105.610933) (xy 199.332522 105.992324) (xy 198.847104 106.477742) (xy 198.465713 107.048534) + (xy 198.203007 107.682763) (xy 198.06908 108.356058) (xy 167.718647 108.356058) (xy 167.77 108.097888) (xy 167.77 107.822112) + (xy 167.716199 107.551635) (xy 167.610664 107.296851) (xy 167.457451 107.067552) (xy 167.262448 106.872549) (xy 167.033149 106.719336) + (xy 166.962326 106.69) (xy 167.033149 106.660664) (xy 167.262448 106.507451) (xy 167.457451 106.312448) (xy 167.610664 106.083149) + (xy 167.716199 105.828365) (xy 167.77 105.557888) (xy 167.77 105.282112) (xy 167.716199 105.011635) (xy 167.610664 104.756851) + (xy 167.457451 104.527552) (xy 167.262448 104.332549) (xy 167.033149 104.179336) (xy 166.962326 104.15) (xy 167.033149 104.120664) + (xy 167.262448 103.967451) (xy 167.457451 103.772448) (xy 167.610664 103.543149) (xy 167.716199 103.288365) (xy 167.77 103.017888) + (xy 167.77 102.742112) (xy 167.716199 102.471635) (xy 167.610664 102.216851) (xy 167.457451 101.987552) (xy 167.262448 101.792549) + (xy 167.033149 101.639336) (xy 166.962326 101.61) (xy 167.033149 101.580664) (xy 167.262448 101.427451) (xy 167.457451 101.232448) + (xy 167.495837 101.175) (xy 176.478982 101.175) (xy 176.52 101.17904) (xy 176.561018 101.175) (xy 176.561019 101.175) + (xy 176.683689 101.162918) (xy 176.841087 101.115172) (xy 176.986146 101.037636) (xy 177.113291 100.933291) (xy 177.139446 100.901421) + (xy 178.361426 99.679442) (xy 178.393291 99.653291) (xy 178.497636 99.526146) (xy 178.575172 99.381087) (xy 178.622918 99.223689) + (xy 178.635 99.101019) (xy 178.635 99.101009) (xy 178.639039 99.060001) (xy 178.635 99.018993) (xy 178.635 72.288061) + (xy 179.305 72.288061) (xy 179.305 72.491939) (xy 179.344774 72.691898) (xy 179.422795 72.880256) (xy 179.536063 73.049774) + (xy 179.680226 73.193937) (xy 179.849744 73.307205) (xy 180.038102 73.385226) (xy 180.238061 73.425) (xy 180.441939 73.425) + (xy 180.641898 73.385226) (xy 180.830256 73.307205) (xy 180.953285 73.225) (xy 190.458982 73.225) (xy 190.5 73.22904) + (xy 190.541018 73.225) (xy 190.541019 73.225) (xy 190.663689 73.212918) (xy 190.821087 73.165172) (xy 190.966146 73.087636) + (xy 191.093291 72.983291) (xy 191.119446 72.951421) (xy 197.901928 66.168941) (xy 197.901928 66.89) (xy 197.914188 67.014482) + (xy 197.950498 67.13418) (xy 198.009463 67.244494) (xy 198.088815 67.341185) (xy 198.185506 67.420537) (xy 198.29582 67.479502) + (xy 198.415518 67.515812) (xy 198.54 67.528072) (xy 200.24 67.528072) (xy 200.364482 67.515812) (xy 200.48418 67.479502) + (xy 200.594494 67.420537) (xy 200.691185 67.341185) (xy 200.770537 67.244494) (xy 200.829502 67.13418) (xy 200.865812 67.014482) + (xy 200.878072 66.89) (xy 200.878072 65.19) (xy 200.865812 65.065518) (xy 200.829502 64.94582) (xy 200.770537 64.835506) + (xy 200.691185 64.738815) (xy 200.594494 64.659463) (xy 200.48418 64.600498) (xy 200.41162 64.578487) (xy 200.543475 64.446632) + (xy 200.70599 64.203411) (xy 200.817932 63.933158) (xy 200.875 63.64626) (xy 200.875 63.35374) (xy 200.817932 63.066842) + (xy 200.70599 62.796589) (xy 200.543475 62.553368) (xy 200.336632 62.346525) (xy 200.154466 62.224805) (xy 200.271355 62.155178) + (xy 200.487588 61.960269) (xy 200.661641 61.72692) (xy 200.786825 61.464099) (xy 200.831476 61.31689) (xy 200.710155 61.087) + (xy 199.517 61.087) (xy 199.517 61.107) (xy 199.263 61.107) (xy 199.263 61.087) (xy 198.069845 61.087) + (xy 197.948524 61.31689) (xy 197.993175 61.464099) (xy 198.118359 61.72692) (xy 198.292412 61.960269) (xy 198.508645 62.155178) + (xy 198.625534 62.224805) (xy 198.443368 62.346525) (xy 198.236525 62.553368) (xy 198.07401 62.796589) (xy 197.962068 63.066842) + (xy 197.905 63.35374) (xy 197.905 63.64626) (xy 197.931193 63.777939) (xy 190.154133 71.555) (xy 180.953285 71.555) + (xy 180.830256 71.472795) (xy 180.641898 71.394774) (xy 180.441939 71.355) (xy 180.238061 71.355) (xy 180.038102 71.394774) + (xy 179.849744 71.472795) (xy 179.680226 71.586063) (xy 179.536063 71.730226) (xy 179.422795 71.899744) (xy 179.344774 72.088102) + (xy 179.305 72.288061) (xy 178.635 72.288061) (xy 178.635 69.808065) (xy 178.746632 69.733475) (xy 178.953475 69.526632) + (xy 179.07 69.35224) (xy 179.186525 69.526632) (xy 179.393368 69.733475) (xy 179.636589 69.89599) (xy 179.906842 70.007932) + (xy 180.19374 70.065) (xy 180.48626 70.065) (xy 180.773158 70.007932) (xy 181.043411 69.89599) (xy 181.286632 69.733475) + (xy 181.493475 69.526632) (xy 181.61 69.35224) (xy 181.726525 69.526632) (xy 181.933368 69.733475) (xy 182.176589 69.89599) + (xy 182.446842 70.007932) (xy 182.73374 70.065) (xy 183.02626 70.065) (xy 183.313158 70.007932) (xy 183.583411 69.89599) + (xy 183.826632 69.733475) (xy 184.033475 69.526632) (xy 184.15 69.35224) (xy 184.266525 69.526632) (xy 184.473368 69.733475) + (xy 184.716589 69.89599) (xy 184.986842 70.007932) (xy 185.27374 70.065) (xy 185.56626 70.065) (xy 185.853158 70.007932) + (xy 186.123411 69.89599) (xy 186.366632 69.733475) (xy 186.573475 69.526632) (xy 186.69 69.35224) (xy 186.806525 69.526632) + (xy 187.013368 69.733475) (xy 187.256589 69.89599) (xy 187.526842 70.007932) (xy 187.81374 70.065) (xy 188.10626 70.065) + (xy 188.393158 70.007932) (xy 188.663411 69.89599) (xy 188.906632 69.733475) (xy 189.038487 69.60162) (xy 189.060498 69.67418) + (xy 189.119463 69.784494) (xy 189.198815 69.881185) (xy 189.295506 69.960537) (xy 189.40582 70.019502) (xy 189.525518 70.055812) + (xy 189.65 70.068072) (xy 190.21425 70.065) (xy 190.373 69.90625) (xy 190.373 68.707) (xy 190.627 68.707) + (xy 190.627 69.90625) (xy 190.78575 70.065) (xy 191.35 70.068072) (xy 191.474482 70.055812) (xy 191.59418 70.019502) + (xy 191.704494 69.960537) (xy 191.801185 69.881185) (xy 191.880537 69.784494) (xy 191.939502 69.67418) (xy 191.975812 69.554482) + (xy 191.988072 69.43) (xy 191.985 68.86575) (xy 191.82625 68.707) (xy 190.627 68.707) (xy 190.373 68.707) + (xy 190.353 68.707) (xy 190.353 68.453) (xy 190.373 68.453) (xy 190.373 67.25375) (xy 190.627 67.25375) + (xy 190.627 68.453) (xy 191.82625 68.453) (xy 191.985 68.29425) (xy 191.988072 67.73) (xy 191.975812 67.605518) + (xy 191.939502 67.48582) (xy 191.880537 67.375506) (xy 191.801185 67.278815) (xy 191.704494 67.199463) (xy 191.59418 67.140498) + (xy 191.474482 67.104188) (xy 191.35 67.091928) (xy 190.78575 67.095) (xy 190.627 67.25375) (xy 190.373 67.25375) + (xy 190.21425 67.095) (xy 189.65 67.091928) (xy 189.525518 67.104188) (xy 189.40582 67.140498) (xy 189.295506 67.199463) + (xy 189.198815 67.278815) (xy 189.119463 67.375506) (xy 189.060498 67.48582) (xy 189.038487 67.55838) (xy 188.906632 67.426525) + (xy 188.795 67.351935) (xy 188.795 66.385867) (xy 196.14143 59.039438) (xy 196.173291 59.013291) (xy 196.277636 58.886146) + (xy 196.355172 58.741087) (xy 196.402918 58.583689) (xy 196.415 58.461019) (xy 196.415 58.461009) (xy 196.419039 58.420001) + (xy 196.415 58.378993) (xy 196.415 48.11374) (xy 197.905 48.11374) (xy 197.905 48.40626) (xy 197.962068 48.693158) + (xy 198.07401 48.963411) (xy 198.236525 49.206632) (xy 198.443368 49.413475) (xy 198.61776 49.53) (xy 198.443368 49.646525) + (xy 198.236525 49.853368) (xy 198.07401 50.096589) (xy 197.962068 50.366842) (xy 197.905 50.65374) (xy 197.905 50.94626) + (xy 197.962068 51.233158) (xy 198.07401 51.503411) (xy 198.236525 51.746632) (xy 198.443368 51.953475) (xy 198.61776 52.07) + (xy 198.443368 52.186525) (xy 198.236525 52.393368) (xy 198.07401 52.636589) (xy 197.962068 52.906842) (xy 197.905 53.19374) + (xy 197.905 53.48626) (xy 197.962068 53.773158) (xy 198.07401 54.043411) (xy 198.236525 54.286632) (xy 198.443368 54.493475) + (xy 198.61776 54.61) (xy 198.443368 54.726525) (xy 198.236525 54.933368) (xy 198.07401 55.176589) (xy 197.962068 55.446842) + (xy 197.905 55.73374) (xy 197.905 56.02626) (xy 197.962068 56.313158) (xy 198.07401 56.583411) (xy 198.236525 56.826632) + (xy 198.443368 57.033475) (xy 198.61776 57.15) (xy 198.443368 57.266525) (xy 198.236525 57.473368) (xy 198.07401 57.716589) + (xy 197.962068 57.986842) (xy 197.905 58.27374) (xy 197.905 58.56626) (xy 197.962068 58.853158) (xy 198.07401 59.123411) + (xy 198.236525 59.366632) (xy 198.443368 59.573475) (xy 198.625534 59.695195) (xy 198.508645 59.764822) (xy 198.292412 59.959731) + (xy 198.118359 60.19308) (xy 197.993175 60.455901) (xy 197.948524 60.60311) (xy 198.069845 60.833) (xy 199.263 60.833) + (xy 199.263 60.813) (xy 199.517 60.813) (xy 199.517 60.833) (xy 200.710155 60.833) (xy 200.831476 60.60311) + (xy 200.786825 60.455901) (xy 200.661641 60.19308) (xy 200.487588 59.959731) (xy 200.271355 59.764822) (xy 200.154466 59.695195) + (xy 200.336632 59.573475) (xy 200.543475 59.366632) (xy 200.70599 59.123411) (xy 200.817932 58.853158) (xy 200.875 58.56626) + (xy 200.875 58.27374) (xy 200.817932 57.986842) (xy 200.70599 57.716589) (xy 200.543475 57.473368) (xy 200.336632 57.266525) + (xy 200.16224 57.15) (xy 200.336632 57.033475) (xy 200.543475 56.826632) (xy 200.70599 56.583411) (xy 200.817932 56.313158) + (xy 200.875 56.02626) (xy 200.875 55.73374) (xy 200.817932 55.446842) (xy 200.70599 55.176589) (xy 200.543475 54.933368) + (xy 200.336632 54.726525) (xy 200.16224 54.61) (xy 200.336632 54.493475) (xy 200.543475 54.286632) (xy 200.70599 54.043411) + (xy 200.817932 53.773158) (xy 200.875 53.48626) (xy 200.875 53.19374) (xy 200.817932 52.906842) (xy 200.70599 52.636589) + (xy 200.543475 52.393368) (xy 200.336632 52.186525) (xy 200.16224 52.07) (xy 200.336632 51.953475) (xy 200.543475 51.746632) + (xy 200.70599 51.503411) (xy 200.817932 51.233158) (xy 200.875 50.94626) (xy 200.875 50.65374) (xy 200.817932 50.366842) + (xy 200.70599 50.096589) (xy 200.543475 49.853368) (xy 200.336632 49.646525) (xy 200.16224 49.53) (xy 200.336632 49.413475) + (xy 200.543475 49.206632) (xy 200.70599 48.963411) (xy 200.817932 48.693158) (xy 200.875 48.40626) (xy 200.875 48.11374) + (xy 200.817932 47.826842) (xy 200.70599 47.556589) (xy 200.543475 47.313368) (xy 200.336632 47.106525) (xy 200.093411 46.94401) + (xy 199.823158 46.832068) (xy 199.53626 46.775) (xy 199.24374 46.775) (xy 198.956842 46.832068) (xy 198.686589 46.94401) + (xy 198.443368 47.106525) (xy 198.236525 47.313368) (xy 198.07401 47.556589) (xy 197.962068 47.826842) (xy 197.905 48.11374) + (xy 196.415 48.11374) (xy 196.415 47.215869) (xy 199.615871 44.015) (xy 200.618982 44.015) (xy 200.66 44.01904) + (xy 200.701018 44.015) (xy 200.701019 44.015) (xy 200.823689 44.002918) (xy 200.981087 43.955172) (xy 201.126146 43.877636) + (xy 201.253291 43.773291) (xy 201.279446 43.741421) (xy 202.491428 42.52944) (xy 202.523291 42.503291) (xy 202.627636 42.376146) + (xy 202.705172 42.231087) (xy 202.752918 42.073689) (xy 202.765 41.951019) (xy 202.765 41.951017) (xy 202.76904 41.910001) + (xy 202.765 41.868981) (xy 202.765 36.871015) (xy 202.76904 36.829999) (xy 202.762588 36.764494) (xy 202.752918 36.666311) + (xy 202.705172 36.508913) (xy 202.627636 36.363854) (xy 202.523291 36.236709) (xy 202.491426 36.210558) (xy 201.279446 34.998579) + (xy 201.253291 34.966709) (xy 201.126146 34.862364) (xy 200.981087 34.784828) (xy 200.823689 34.737082) (xy 200.701019 34.725) + (xy 200.701018 34.725) (xy 200.66 34.72096) (xy 200.618982 34.725) (xy 200.618065 34.725) (xy 200.543475 34.613368) + (xy 200.336632 34.406525) (xy 200.093411 34.24401) (xy 199.823158 34.132068) (xy 199.53626 34.075) (xy 199.24374 34.075) + (xy 198.956842 34.132068) (xy 198.686589 34.24401) (xy 198.443368 34.406525) (xy 198.236525 34.613368) (xy 198.07401 34.856589) + (xy 197.962068 35.126842) (xy 197.905 35.41374) (xy 197.905 35.70626) (xy 197.962068 35.993158) (xy 198.07401 36.263411) + (xy 198.236525 36.506632) (xy 198.443368 36.713475) (xy 198.61776 36.83) (xy 198.443368 36.946525) (xy 198.236525 37.153368) + (xy 198.07401 37.396589) (xy 197.962068 37.666842) (xy 197.905 37.95374) (xy 197.905 38.24626) (xy 197.931193 38.377939) + (xy 194.47501 41.834123) (xy 194.47501 38.741028) (xy 194.47905 38.70001) (xy 194.46869 38.594828) (xy 194.462928 38.536321) + (xy 194.415182 38.378923) (xy 194.337646 38.233864) (xy 194.233301 38.106719) (xy 194.201443 38.080574) (xy 191.119446 34.998579) + (xy 191.093291 34.966709) (xy 190.966146 34.862364) (xy 190.821087 34.784828) (xy 190.663689 34.737082) (xy 190.541019 34.725) + (xy 190.541018 34.725) (xy 190.5 34.72096) (xy 190.458982 34.725) (xy 190.458065 34.725) (xy 190.383475 34.613368) + (xy 190.176632 34.406525) (xy 189.933411 34.24401) (xy 189.663158 34.132068) (xy 189.37626 34.075) (xy 189.08374 34.075) + (xy 188.796842 34.132068) (xy 188.526589 34.24401) (xy 188.283368 34.406525) (xy 188.151513 34.53838) (xy 188.129502 34.46582) + (xy 188.070537 34.355506) (xy 187.991185 34.258815) (xy 187.894494 34.179463) (xy 187.78418 34.120498) (xy 187.664482 34.084188) + (xy 187.54 34.071928) (xy 186.97575 34.075) (xy 186.817 34.23375) (xy 186.817 35.433) (xy 186.837 35.433) + (xy 186.837 35.687) (xy 186.817 35.687) (xy 186.817 36.88625) (xy 186.97575 37.045) (xy 187.54 37.048072) + (xy 187.664482 37.035812) (xy 187.78418 36.999502) (xy 187.894494 36.940537) (xy 187.991185 36.861185) (xy 188.070537 36.764494) + (xy 188.129502 36.65418) (xy 188.151513 36.58162) (xy 188.283368 36.713475) (xy 188.526589 36.87599) (xy 188.796842 36.987932) + (xy 189.08374 37.045) (xy 189.37626 37.045) (xy 189.663158 36.987932) (xy 189.933411 36.87599) (xy 190.176632 36.713475) + (xy 190.32462 36.565487) (xy 192.80501 39.045879) (xy 192.80501 41.764143) (xy 191.119446 40.078579) (xy 191.093291 40.046709) + (xy 190.966146 39.942364) (xy 190.821087 39.864828) (xy 190.663689 39.817082) (xy 190.541019 39.805) (xy 190.541018 39.805) + (xy 190.5 39.80096) (xy 190.458982 39.805) (xy 190.458065 39.805) (xy 190.383475 39.693368) (xy 190.176632 39.486525) + (xy 189.933411 39.32401) (xy 189.663158 39.212068) (xy 189.37626 39.155) (xy 189.08374 39.155) (xy 188.796842 39.212068) + (xy 188.526589 39.32401) (xy 188.283368 39.486525) (xy 188.151513 39.61838) (xy 188.129502 39.54582) (xy 188.070537 39.435506) + (xy 187.991185 39.338815) (xy 187.894494 39.259463) (xy 187.78418 39.200498) (xy 187.664482 39.164188) (xy 187.54 39.151928) + (xy 186.97575 39.155) (xy 186.817 39.31375) (xy 186.817 40.513) (xy 186.837 40.513) (xy 186.837 40.767) + (xy 186.817 40.767) (xy 186.817 41.96625) (xy 186.97575 42.125) (xy 187.54 42.128072) (xy 187.664482 42.115812) + (xy 187.78418 42.079502) (xy 187.894494 42.020537) (xy 187.991185 41.941185) (xy 188.070537 41.844494) (xy 188.129502 41.73418) + (xy 188.151513 41.66162) (xy 188.283368 41.793475) (xy 188.526589 41.95599) (xy 188.796842 42.067932) (xy 189.08374 42.125) + (xy 189.37626 42.125) (xy 189.663158 42.067932) (xy 189.933411 41.95599) (xy 190.176632 41.793475) (xy 190.32462 41.645487) + (xy 192.205 43.525868) (xy 192.205001 55.53413) (xy 188.884133 58.855) (xy 176.005867 58.855) (xy 178.361427 56.499441) + (xy 178.393291 56.473291) (xy 178.497636 56.346146) (xy 178.575172 56.201087) (xy 178.622918 56.043689) (xy 178.635 55.921019) + (xy 178.635 55.921009) (xy 178.639039 55.880001) (xy 178.635 55.838993) (xy 178.635 54.19) (xy 178.851928 54.19) + (xy 178.864188 54.314482) (xy 178.900498 54.43418) (xy 178.959463 54.544494) (xy 179.038815 54.641185) (xy 179.135506 54.720537) + (xy 179.24582 54.779502) (xy 179.365518 54.815812) (xy 179.49 54.828072) (xy 180.05425 54.825) (xy 180.213 54.66625) + (xy 180.213 53.467) (xy 179.01375 53.467) (xy 178.855 53.62575) (xy 178.851928 54.19) (xy 178.635 54.19) + (xy 178.635 52.49) (xy 178.851928 52.49) (xy 178.855 53.05425) (xy 179.01375 53.213) (xy 180.213 53.213) + (xy 180.213 52.01375) (xy 180.467 52.01375) (xy 180.467 53.213) (xy 180.487 53.213) (xy 180.487 53.467) + (xy 180.467 53.467) (xy 180.467 54.66625) (xy 180.62575 54.825) (xy 181.19 54.828072) (xy 181.314482 54.815812) + (xy 181.43418 54.779502) (xy 181.544494 54.720537) (xy 181.641185 54.641185) (xy 181.720537 54.544494) (xy 181.779502 54.43418) + (xy 181.801513 54.36162) (xy 181.933368 54.493475) (xy 182.176589 54.65599) (xy 182.446842 54.767932) (xy 182.73374 54.825) + (xy 183.02626 54.825) (xy 183.313158 54.767932) (xy 183.583411 54.65599) (xy 183.826632 54.493475) (xy 184.033475 54.286632) + (xy 184.15 54.11224) (xy 184.266525 54.286632) (xy 184.473368 54.493475) (xy 184.716589 54.65599) (xy 184.986842 54.767932) + (xy 185.27374 54.825) (xy 185.56626 54.825) (xy 185.853158 54.767932) (xy 186.123411 54.65599) (xy 186.366632 54.493475) + (xy 186.573475 54.286632) (xy 186.69 54.11224) (xy 186.806525 54.286632) (xy 187.013368 54.493475) (xy 187.256589 54.65599) + (xy 187.526842 54.767932) (xy 187.81374 54.825) (xy 188.10626 54.825) (xy 188.393158 54.767932) (xy 188.663411 54.65599) + (xy 188.906632 54.493475) (xy 189.113475 54.286632) (xy 189.23 54.11224) (xy 189.346525 54.286632) (xy 189.553368 54.493475) + (xy 189.796589 54.65599) (xy 190.066842 54.767932) (xy 190.35374 54.825) (xy 190.64626 54.825) (xy 190.933158 54.767932) + (xy 191.203411 54.65599) (xy 191.446632 54.493475) (xy 191.653475 54.286632) (xy 191.81599 54.043411) (xy 191.927932 53.773158) + (xy 191.985 53.48626) (xy 191.985 53.19374) (xy 191.927932 52.906842) (xy 191.81599 52.636589) (xy 191.653475 52.393368) + (xy 191.446632 52.186525) (xy 191.203411 52.02401) (xy 190.933158 51.912068) (xy 190.64626 51.855) (xy 190.35374 51.855) + (xy 190.066842 51.912068) (xy 189.796589 52.02401) (xy 189.553368 52.186525) (xy 189.346525 52.393368) (xy 189.23 52.56776) + (xy 189.113475 52.393368) (xy 188.906632 52.186525) (xy 188.663411 52.02401) (xy 188.393158 51.912068) (xy 188.10626 51.855) + (xy 187.81374 51.855) (xy 187.526842 51.912068) (xy 187.256589 52.02401) (xy 187.013368 52.186525) (xy 186.806525 52.393368) + (xy 186.69 52.56776) (xy 186.573475 52.393368) (xy 186.366632 52.186525) (xy 186.123411 52.02401) (xy 185.853158 51.912068) + (xy 185.56626 51.855) (xy 185.27374 51.855) (xy 184.986842 51.912068) (xy 184.716589 52.02401) (xy 184.473368 52.186525) + (xy 184.266525 52.393368) (xy 184.15 52.56776) (xy 184.033475 52.393368) (xy 183.826632 52.186525) (xy 183.583411 52.02401) + (xy 183.313158 51.912068) (xy 183.02626 51.855) (xy 182.73374 51.855) (xy 182.446842 51.912068) (xy 182.176589 52.02401) + (xy 181.933368 52.186525) (xy 181.801513 52.31838) (xy 181.779502 52.24582) (xy 181.720537 52.135506) (xy 181.641185 52.038815) + (xy 181.544494 51.959463) (xy 181.43418 51.900498) (xy 181.314482 51.864188) (xy 181.19 51.851928) (xy 180.62575 51.855) + (xy 180.467 52.01375) (xy 180.213 52.01375) (xy 180.05425 51.855) (xy 179.49 51.851928) (xy 179.365518 51.864188) + (xy 179.24582 51.900498) (xy 179.135506 51.959463) (xy 179.038815 52.038815) (xy 178.959463 52.135506) (xy 178.900498 52.24582) + (xy 178.864188 52.365518) (xy 178.851928 52.49) (xy 178.635 52.49) (xy 178.635 52.415867) (xy 179.415868 51.635) + (xy 187.918982 51.635) (xy 187.96 51.63904) (xy 188.001018 51.635) (xy 188.001019 51.635) (xy 188.123689 51.622918) + (xy 188.281087 51.575172) (xy 188.426146 51.497636) (xy 188.553291 51.393291) (xy 188.579446 51.361421) (xy 189.791426 50.149442) + (xy 189.823291 50.123291) (xy 189.927636 49.996146) (xy 190.005172 49.851087) (xy 190.052918 49.693689) (xy 190.065 49.571019) + (xy 190.065 49.571017) (xy 190.06904 49.530001) (xy 190.065 49.488985) (xy 190.065 46.948065) (xy 190.176632 46.873475) + (xy 190.383475 46.666632) (xy 190.54599 46.423411) (xy 190.657932 46.153158) (xy 190.715 45.86626) (xy 190.715 45.57374) + (xy 190.657932 45.286842) (xy 190.54599 45.016589) (xy 190.383475 44.773368) (xy 190.176632 44.566525) (xy 189.933411 44.40401) + (xy 189.663158 44.292068) (xy 189.37626 44.235) (xy 189.08374 44.235) (xy 188.796842 44.292068) (xy 188.526589 44.40401) + (xy 188.283368 44.566525) (xy 188.151513 44.69838) (xy 188.129502 44.62582) (xy 188.070537 44.515506) (xy 187.991185 44.418815) + (xy 187.894494 44.339463) (xy 187.78418 44.280498) (xy 187.664482 44.244188) (xy 187.54 44.231928) (xy 186.97575 44.235) + (xy 186.817 44.39375) (xy 186.817 45.593) (xy 186.837 45.593) (xy 186.837 45.847) (xy 186.817 45.847) + (xy 186.817 47.04625) (xy 186.97575 47.205) (xy 187.54 47.208072) (xy 187.664482 47.195812) (xy 187.78418 47.159502) + (xy 187.894494 47.100537) (xy 187.991185 47.021185) (xy 188.070537 46.924494) (xy 188.129502 46.81418) (xy 188.151513 46.74162) + (xy 188.283368 46.873475) (xy 188.395 46.948065) (xy 188.395001 49.184131) (xy 187.614133 49.965) (xy 179.111015 49.965) + (xy 179.069999 49.96096) (xy 179.028983 49.965) (xy 179.028981 49.965) (xy 178.906311 49.977082) (xy 178.748913 50.024828) + (xy 178.603854 50.102364) (xy 178.476709 50.206709) (xy 178.450561 50.238571) (xy 177.238579 51.450554) (xy 177.206709 51.476709) + (xy 177.120181 51.582145) (xy 177.102364 51.603855) (xy 177.024828 51.748914) (xy 176.977082 51.906312) (xy 176.96096 52.07) + (xy 176.965 52.111019) (xy 176.965001 55.534131) (xy 174.914133 57.585) (xy 163.871015 57.585) (xy 163.829999 57.58096) + (xy 163.788983 57.585) (xy 163.788981 57.585) (xy 163.666311 57.597082) (xy 163.508913 57.644828) (xy 163.363854 57.722364) + (xy 163.236709 57.826709) (xy 163.210561 57.858571) (xy 161.998579 59.070554) (xy 161.966709 59.096709) (xy 161.862365 59.223854) + (xy 161.862364 59.223855) (xy 161.784828 59.368914) (xy 161.737082 59.526312) (xy 161.72096 59.69) (xy 161.725 59.731019) + (xy 161.725001 77.12413) (xy 159.664133 79.185) (xy 158.415951 79.185) (xy 158.475226 79.041898) (xy 158.515 78.841939) + (xy 158.515 78.638061) (xy 158.475226 78.438102) (xy 158.397205 78.249744) (xy 158.315 78.126715) (xy 158.315 62.575867) + (xy 164.175868 56.715) (xy 173.948982 56.715) (xy 173.99 56.71904) (xy 174.031018 56.715) (xy 174.031019 56.715) + (xy 174.153689 56.702918) (xy 174.311087 56.655172) (xy 174.456146 56.577636) (xy 174.583291 56.473291) (xy 174.609446 56.441421) + (xy 175.821428 55.22944) (xy 175.853291 55.203291) (xy 175.957636 55.076146) (xy 176.035172 54.931087) (xy 176.082918 54.773689) + (xy 176.095 54.651019) (xy 176.095 54.651017) (xy 176.09904 54.610001) (xy 176.095 54.568985) (xy 176.095 48.605867) + (xy 176.875868 47.825) (xy 179.888127 47.825) (xy 179.957691 47.92911) (xy 180.16289 48.134309) (xy 180.404178 48.295533) + (xy 180.672283 48.406586) (xy 180.956902 48.4632) (xy 181.247098 48.4632) (xy 181.531717 48.406586) (xy 181.799822 48.295533) + (xy 182.04111 48.134309) (xy 182.246309 47.92911) (xy 182.407533 47.687822) (xy 182.518586 47.419717) (xy 182.5752 47.135098) + (xy 182.5752 46.844902) (xy 182.520519 46.57) (xy 185.201928 46.57) (xy 185.214188 46.694482) (xy 185.250498 46.81418) + (xy 185.309463 46.924494) (xy 185.388815 47.021185) (xy 185.485506 47.100537) (xy 185.59582 47.159502) (xy 185.715518 47.195812) + (xy 185.84 47.208072) (xy 186.40425 47.205) (xy 186.563 47.04625) (xy 186.563 45.847) (xy 185.36375 45.847) + (xy 185.205 46.00575) (xy 185.201928 46.57) (xy 182.520519 46.57) (xy 182.518586 46.560283) (xy 182.407533 46.292178) + (xy 182.246309 46.05089) (xy 182.04111 45.845691) (xy 181.799822 45.684467) (xy 181.531717 45.573414) (xy 181.247098 45.5168) + (xy 180.956902 45.5168) (xy 180.672283 45.573414) (xy 180.404178 45.684467) (xy 180.16289 45.845691) (xy 179.957691 46.05089) + (xy 179.888127 46.155) (xy 176.571015 46.155) (xy 176.529999 46.15096) (xy 176.488983 46.155) (xy 176.488981 46.155) + (xy 176.366311 46.167082) (xy 176.208913 46.214828) (xy 176.063854 46.292364) (xy 175.936709 46.396709) (xy 175.910558 46.428574) + (xy 174.698574 47.640559) (xy 174.66671 47.666709) (xy 174.629208 47.712406) (xy 174.562364 47.793855) (xy 174.484828 47.938914) + (xy 174.437082 48.096312) (xy 174.42096 48.26) (xy 174.425001 48.301028) (xy 174.425 54.264132) (xy 173.644133 55.045) + (xy 163.871018 55.045) (xy 163.829999 55.04096) (xy 163.788981 55.045) (xy 163.666311 55.057082) (xy 163.508913 55.104828) + (xy 163.363854 55.182364) (xy 163.236709 55.286709) (xy 163.210561 55.318571) (xy 156.918579 61.610554) (xy 156.886709 61.636709) + (xy 156.782365 61.763854) (xy 156.782364 61.763855) (xy 156.704828 61.908914) (xy 156.657082 62.066312) (xy 156.64096 62.23) + (xy 156.645 62.271019) (xy 156.645001 78.126714) (xy 156.562795 78.249744) (xy 156.484774 78.438102) (xy 156.445 78.638061) + (xy 156.445 78.841939) (xy 156.484774 79.041898) (xy 156.544049 79.185) (xy 142.095837 79.185) (xy 142.057451 79.127552) + (xy 141.862448 78.932549) (xy 141.633149 78.779336) (xy 141.562326 78.75) (xy 141.633149 78.720664) (xy 141.862448 78.567451) + (xy 142.057451 78.372448) (xy 142.210664 78.143149) (xy 142.316199 77.888365) (xy 142.37 77.617888) (xy 142.37 77.342112) + (xy 142.316199 77.071635) (xy 142.210664 76.816851) (xy 142.057451 76.587552) (xy 141.862448 76.392549) (xy 141.633149 76.239336) + (xy 141.562326 76.21) (xy 141.633149 76.180664) (xy 141.862448 76.027451) (xy 142.057451 75.832448) (xy 142.210664 75.603149) + (xy 142.316199 75.348365) (xy 142.37 75.077888) (xy 142.37 74.802112) (xy 142.316199 74.531635) (xy 142.210664 74.276851) + (xy 142.057451 74.047552) (xy 141.862448 73.852549) (xy 141.633149 73.699336) (xy 141.562326 73.67) (xy 141.633149 73.640664) + (xy 141.862448 73.487451) (xy 142.057451 73.292448) (xy 142.210664 73.063149) (xy 142.316199 72.808365) (xy 142.37 72.537888) + (xy 142.37 72.262112) (xy 142.316199 71.991635) (xy 142.210664 71.736851) (xy 142.057451 71.507552) (xy 141.862448 71.312549) + (xy 141.633149 71.159336) (xy 141.562326 71.13) (xy 141.633149 71.100664) (xy 141.862448 70.947451) (xy 142.057451 70.752448) + (xy 142.210664 70.523149) (xy 142.316199 70.268365) (xy 142.37 69.997888) (xy 142.37 69.722112) (xy 142.316199 69.451635) + (xy 142.210664 69.196851) (xy 142.057451 68.967552) (xy 141.862448 68.772549) (xy 141.633149 68.619336) (xy 141.562326 68.59) + (xy 141.633149 68.560664) (xy 141.862448 68.407451) (xy 142.057451 68.212448) (xy 142.210664 67.983149) (xy 142.316199 67.728365) + (xy 142.37 67.457888) (xy 142.37 67.182112) (xy 142.316199 66.911635) (xy 142.210664 66.656851) (xy 142.057451 66.427552) + (xy 141.862448 66.232549) (xy 141.633149 66.079336) (xy 141.562326 66.05) (xy 141.633149 66.020664) (xy 141.862448 65.867451) + (xy 142.057451 65.672448) (xy 142.210664 65.443149) (xy 142.316199 65.188365) (xy 142.37 64.917888) (xy 142.37 64.642112) + (xy 142.316199 64.371635) (xy 142.210664 64.116851) (xy 142.057451 63.887552) (xy 141.862448 63.692549) (xy 141.781541 63.638488) + (xy 141.859482 63.630812) (xy 141.97918 63.594502) (xy 142.089494 63.535537) (xy 142.186185 63.456185) (xy 142.265537 63.359494) + (xy 142.324502 63.24918) (xy 142.360812 63.129482) (xy 142.373072 63.005) (xy 142.373072 61.475) (xy 142.360812 61.350518) + (xy 142.324502 61.23082) (xy 142.265537 61.120506) (xy 142.186185 61.023815) (xy 142.089494 60.944463) (xy 141.97918 60.885498) + (xy 141.859482 60.849188) (xy 141.735 60.836928) (xy 140.205 60.836928) (xy 140.080518 60.849188) (xy 139.96082 60.885498) + (xy 139.850506 60.944463) (xy 139.753815 61.023815) (xy 139.674463 61.120506) (xy 139.615498 61.23082) (xy 139.579188 61.350518) + (xy 139.566928 61.475) (xy 139.265 61.475) (xy 139.265 54.296993) (xy 166.862612 54.296993) (xy 166.928137 54.53586) + (xy 167.175116 54.65176) (xy 167.43996 54.71725) (xy 167.712492 54.729812) (xy 167.982238 54.688965) (xy 168.238832 54.596277) + (xy 168.351863 54.53586) (xy 168.417388 54.296993) (xy 167.64 53.519605) (xy 166.862612 54.296993) (xy 139.265 54.296993) + (xy 139.265 53.412492) (xy 166.250188 53.412492) (xy 166.291035 53.682238) (xy 166.383723 53.938832) (xy 166.44414 54.051863) + (xy 166.683007 54.117388) (xy 167.460395 53.34) (xy 166.683007 52.562612) (xy 166.44414 52.628137) (xy 166.32824 52.875116) + (xy 166.26275 53.13996) (xy 166.250188 53.412492) (xy 139.265 53.412492) (xy 139.265 52.383007) (xy 166.862612 52.383007) + (xy 167.64 53.160395) (xy 168.417388 52.383007) (xy 168.351863 52.14414) (xy 168.104884 52.02824) (xy 167.84004 51.96275) + (xy 167.567508 51.950188) (xy 167.297762 51.991035) (xy 167.041168 52.083723) (xy 166.928137 52.14414) (xy 166.862612 52.383007) + (xy 139.265 52.383007) (xy 139.265 51.585134) (xy 139.332882 51.613252) (xy 139.61978 51.67032) (xy 139.9123 51.67032) + (xy 140.199198 51.613252) (xy 140.469451 51.50131) (xy 140.712672 51.338795) (xy 140.919515 51.131952) (xy 141.03604 50.95756) + (xy 141.152565 51.131952) (xy 141.359408 51.338795) (xy 141.602629 51.50131) (xy 141.872882 51.613252) (xy 142.15978 51.67032) + (xy 142.4523 51.67032) (xy 142.739198 51.613252) (xy 143.009451 51.50131) (xy 143.252672 51.338795) (xy 143.459515 51.131952) + (xy 143.57604 50.95756) (xy 143.692565 51.131952) (xy 143.899408 51.338795) (xy 144.142629 51.50131) (xy 144.412882 51.613252) + (xy 144.69978 51.67032) (xy 144.9923 51.67032) (xy 145.279198 51.613252) (xy 145.549451 51.50131) (xy 145.792672 51.338795) + (xy 145.999515 51.131952) (xy 146.11604 50.95756) (xy 146.232565 51.131952) (xy 146.439408 51.338795) (xy 146.682629 51.50131) + (xy 146.952882 51.613252) (xy 147.23978 51.67032) (xy 147.5323 51.67032) (xy 147.819198 51.613252) (xy 148.089451 51.50131) + (xy 148.332672 51.338795) (xy 148.539515 51.131952) (xy 148.65604 50.95756) (xy 148.772565 51.131952) (xy 148.979408 51.338795) + (xy 149.222629 51.50131) (xy 149.492882 51.613252) (xy 149.77978 51.67032) (xy 150.0723 51.67032) (xy 150.359198 51.613252) + (xy 150.629451 51.50131) (xy 150.872672 51.338795) (xy 151.079515 51.131952) (xy 151.201235 50.949786) (xy 151.270862 51.066675) + (xy 151.465771 51.282908) (xy 151.69912 51.456961) (xy 151.961941 51.582145) (xy 152.10915 51.626796) (xy 152.33904 51.505475) + (xy 152.33904 50.31232) (xy 152.31904 50.31232) (xy 152.31904 50.05832) (xy 152.33904 50.05832) (xy 152.33904 48.865165) + (xy 152.10915 48.743844) (xy 151.961941 48.788495) (xy 151.69912 48.913679) (xy 151.465771 49.087732) (xy 151.270862 49.303965) + (xy 151.201235 49.420854) (xy 151.079515 49.238688) (xy 150.872672 49.031845) (xy 150.629451 48.86933) (xy 150.359198 48.757388) + (xy 150.0723 48.70032) (xy 149.77978 48.70032) (xy 149.492882 48.757388) (xy 149.222629 48.86933) (xy 148.979408 49.031845) + (xy 148.772565 49.238688) (xy 148.65604 49.41308) (xy 148.539515 49.238688) (xy 148.332672 49.031845) (xy 148.089451 48.86933) + (xy 147.819198 48.757388) (xy 147.5323 48.70032) (xy 147.23978 48.70032) (xy 146.952882 48.757388) (xy 146.682629 48.86933) + (xy 146.439408 49.031845) (xy 146.232565 49.238688) (xy 146.11604 49.41308) (xy 145.999515 49.238688) (xy 145.792672 49.031845) + (xy 145.549451 48.86933) (xy 145.279198 48.757388) (xy 144.9923 48.70032) (xy 144.69978 48.70032) (xy 144.412882 48.757388) + (xy 144.142629 48.86933) (xy 143.899408 49.031845) (xy 143.692565 49.238688) (xy 143.57604 49.41308) (xy 143.459515 49.238688) + (xy 143.252672 49.031845) (xy 143.009451 48.86933) (xy 142.739198 48.757388) (xy 142.4523 48.70032) (xy 142.15978 48.70032) + (xy 141.872882 48.757388) (xy 141.602629 48.86933) (xy 141.359408 49.031845) (xy 141.152565 49.238688) (xy 141.03604 49.41308) + (xy 140.919515 49.238688) (xy 140.712672 49.031845) (xy 140.469451 48.86933) (xy 140.199198 48.757388) (xy 139.9123 48.70032) + (xy 139.61978 48.70032) (xy 139.332882 48.757388) (xy 139.265 48.785506) (xy 139.265 40.985867) (xy 140.045868 40.205) + (xy 159.933262 40.205) (xy 159.97428 40.20904) (xy 160.015298 40.205) (xy 160.015299 40.205) (xy 160.137969 40.192918) + (xy 160.295367 40.145172) (xy 160.440426 40.067636) (xy 160.567571 39.963291) (xy 160.593726 39.931421) (xy 162.860148 37.665) + (xy 164.968769 37.665) (xy 164.996155 37.716235) (xy 165.194537 37.957963) (xy 165.367609 38.1) (xy 165.194537 38.242037) + (xy 164.996155 38.483765) (xy 164.968769 38.535) (xy 162.578158 38.535) (xy 162.53714 38.53096) (xy 162.496122 38.535) + (xy 162.496121 38.535) (xy 162.373451 38.547082) (xy 162.216053 38.594828) (xy 162.070994 38.672364) (xy 161.943849 38.776709) + (xy 161.917703 38.808568) (xy 154.444614 46.281659) (xy 154.41275 46.307809) (xy 154.386602 46.339671) (xy 154.308404 46.434955) + (xy 154.230868 46.580014) (xy 154.183122 46.737412) (xy 154.167 46.9011) (xy 154.171041 46.942128) (xy 154.17104 48.697248) + (xy 154.15604 48.697248) (xy 154.031558 48.709508) (xy 153.91186 48.745818) (xy 153.801546 48.804783) (xy 153.704855 48.884135) + (xy 153.625503 48.980826) (xy 153.566538 49.09114) (xy 153.542074 49.171786) (xy 153.466309 49.087732) (xy 153.23296 48.913679) + (xy 152.970139 48.788495) (xy 152.82293 48.743844) (xy 152.59304 48.865165) (xy 152.59304 50.05832) (xy 152.61304 50.05832) + (xy 152.61304 50.31232) (xy 152.59304 50.31232) (xy 152.59304 51.505475) (xy 152.82293 51.626796) (xy 152.970139 51.582145) + (xy 153.23296 51.456961) (xy 153.466309 51.282908) (xy 153.542074 51.198854) (xy 153.566538 51.2795) (xy 153.625503 51.389814) + (xy 153.704855 51.486505) (xy 153.801546 51.565857) (xy 153.91186 51.624822) (xy 154.031558 51.661132) (xy 154.15604 51.673392) + (xy 155.85604 51.673392) (xy 155.980522 51.661132) (xy 156.10022 51.624822) (xy 156.210534 51.565857) (xy 156.307225 51.486505) + (xy 156.386577 51.389814) (xy 156.445542 51.2795) (xy 156.481852 51.159802) (xy 156.494112 51.03532) (xy 156.494112 49.33532) + (xy 156.481852 49.210838) (xy 156.445542 49.09114) (xy 156.386577 48.980826) (xy 156.307225 48.884135) (xy 156.210534 48.804783) + (xy 156.10022 48.745818) (xy 155.980522 48.709508) (xy 155.85604 48.697248) (xy 155.84104 48.697248) (xy 155.84104 47.246967) + (xy 156.243105 46.844902) (xy 158.5468 46.844902) (xy 158.5468 47.135098) (xy 158.603414 47.419717) (xy 158.714467 47.687822) + (xy 158.875691 47.92911) (xy 159.08089 48.134309) (xy 159.322178 48.295533) (xy 159.590283 48.406586) (xy 159.874902 48.4632) + (xy 160.165098 48.4632) (xy 160.449717 48.406586) (xy 160.717822 48.295533) (xy 160.95911 48.134309) (xy 161.164309 47.92911) + (xy 161.325533 47.687822) (xy 161.436586 47.419717) (xy 161.4932 47.135098) (xy 161.4932 46.844902) (xy 161.436586 46.560283) + (xy 161.325533 46.292178) (xy 161.164309 46.05089) (xy 160.95911 45.845691) (xy 160.717822 45.684467) (xy 160.449717 45.573414) + (xy 160.165098 45.5168) (xy 159.874902 45.5168) (xy 159.590283 45.573414) (xy 159.322178 45.684467) (xy 159.08089 45.845691) + (xy 158.875691 46.05089) (xy 158.714467 46.292178) (xy 158.603414 46.560283) (xy 158.5468 46.844902) (xy 156.243105 46.844902) + (xy 162.883009 40.205) (xy 164.968769 40.205) (xy 164.996155 40.256235) (xy 165.099446 40.382095) (xy 165.015506 40.426963) + (xy 164.918815 40.506315) (xy 164.839463 40.603006) (xy 164.780498 40.71332) (xy 164.744188 40.833018) (xy 164.731928 40.9575) + (xy 164.731928 42.8625) (xy 164.744188 42.986982) (xy 164.780498 43.10668) (xy 164.839463 43.216994) (xy 164.918815 43.313685) + (xy 165.015506 43.393037) (xy 165.12582 43.452002) (xy 165.245518 43.488312) (xy 165.37 43.500572) (xy 165.535001 43.500572) + (xy 165.535 47.350301) (xy 165.53096 47.39132) (xy 165.535 47.432338) (xy 165.547082 47.555008) (xy 165.594828 47.712406) + (xy 165.672364 47.857465) (xy 165.776709 47.984611) (xy 165.808579 48.010766) (xy 169.801055 52.003243) (xy 169.776011 52.008225) + (xy 169.523957 52.112629) (xy 169.297114 52.264201) (xy 169.104201 52.457114) (xy 168.952629 52.683957) (xy 168.911489 52.783279) + (xy 168.896277 52.741168) (xy 168.83586 52.628137) (xy 168.596993 52.562612) (xy 167.819605 53.34) (xy 168.596993 54.117388) + (xy 168.83586 54.051863) (xy 168.910164 53.893523) (xy 168.952629 53.996043) (xy 169.104201 54.222886) (xy 169.297114 54.415799) + (xy 169.523957 54.567371) (xy 169.776011 54.671775) (xy 170.043589 54.725) (xy 170.316411 54.725) (xy 170.583989 54.671775) + (xy 170.836043 54.567371) (xy 171.062886 54.415799) (xy 171.255799 54.222886) (xy 171.333555 54.106517) (xy 171.344188 54.214482) + (xy 171.380498 54.33418) (xy 171.439463 54.444494) (xy 171.518815 54.541185) (xy 171.615506 54.620537) (xy 171.72582 54.679502) + (xy 171.845518 54.715812) (xy 171.97 54.728072) (xy 172.485152 54.728072) (xy 172.556312 54.749658) (xy 172.72 54.76578) + (xy 172.883689 54.749658) (xy 172.954849 54.728072) (xy 173.47 54.728072) (xy 173.594482 54.715812) (xy 173.71418 54.679502) + (xy 173.824494 54.620537) (xy 173.921185 54.541185) (xy 174.000537 54.444494) (xy 174.059502 54.33418) (xy 174.095812 54.214482) + (xy 174.108072 54.09) (xy 174.108072 52.59) (xy 174.095812 52.465518) (xy 174.059502 52.34582) (xy 174.000537 52.235506) + (xy 173.921185 52.138815) (xy 173.824494 52.059463) (xy 173.71418 52.000498) (xy 173.594482 51.964188) (xy 173.47 51.951928) + (xy 172.111477 51.951928) (xy 168.432734 48.273186) (xy 168.466178 48.295533) (xy 168.734283 48.406586) (xy 169.018902 48.4632) + (xy 169.309098 48.4632) (xy 169.593717 48.406586) (xy 169.861822 48.295533) (xy 170.10311 48.134309) (xy 170.308309 47.92911) + (xy 170.469533 47.687822) (xy 170.561 47.467002) (xy 170.652467 47.687822) (xy 170.813691 47.92911) (xy 171.01889 48.134309) + (xy 171.260178 48.295533) (xy 171.528283 48.406586) (xy 171.812902 48.4632) (xy 172.103098 48.4632) (xy 172.387717 48.406586) + (xy 172.655822 48.295533) (xy 172.89711 48.134309) (xy 173.102309 47.92911) (xy 173.263533 47.687822) (xy 173.374586 47.419717) + (xy 173.4312 47.135098) (xy 173.4312 46.844902) (xy 173.374586 46.560283) (xy 173.263533 46.292178) (xy 173.102309 46.05089) + (xy 172.89711 45.845691) (xy 172.655822 45.684467) (xy 172.387717 45.573414) (xy 172.103098 45.5168) (xy 171.812902 45.5168) + (xy 171.528283 45.573414) (xy 171.260178 45.684467) (xy 171.01889 45.845691) (xy 170.813691 46.05089) (xy 170.652467 46.292178) + (xy 170.561 46.512998) (xy 170.469533 46.292178) (xy 170.308309 46.05089) (xy 170.10311 45.845691) (xy 169.861822 45.684467) + (xy 169.593717 45.573414) (xy 169.309098 45.5168) (xy 169.018902 45.5168) (xy 168.734283 45.573414) (xy 168.466178 45.684467) + (xy 168.22489 45.845691) (xy 168.019691 46.05089) (xy 167.858467 46.292178) (xy 167.747414 46.560283) (xy 167.6908 46.844902) + (xy 167.6908 47.135098) (xy 167.747414 47.419717) (xy 167.858467 47.687822) (xy 167.880814 47.721267) (xy 167.205 47.045453) + (xy 167.205 44.87) (xy 185.201928 44.87) (xy 185.205 45.43425) (xy 185.36375 45.593) (xy 186.563 45.593) + (xy 186.563 44.39375) (xy 186.40425 44.235) (xy 185.84 44.231928) (xy 185.715518 44.244188) (xy 185.59582 44.280498) + (xy 185.485506 44.339463) (xy 185.388815 44.418815) (xy 185.309463 44.515506) (xy 185.250498 44.62582) (xy 185.214188 44.745518) + (xy 185.201928 44.87) (xy 167.205 44.87) (xy 167.205 43.500572) (xy 167.37 43.500572) (xy 167.494482 43.488312) + (xy 167.61418 43.452002) (xy 167.724494 43.393037) (xy 167.821185 43.313685) (xy 167.900537 43.216994) (xy 167.959502 43.10668) + (xy 167.995812 42.986982) (xy 168.008072 42.8625) (xy 168.008072 40.9575) (xy 167.995812 40.833018) (xy 167.959502 40.71332) + (xy 167.900537 40.603006) (xy 167.821185 40.506315) (xy 167.807279 40.494902) (xy 170.4848 40.494902) (xy 170.4848 40.785098) + (xy 170.541414 41.069717) (xy 170.652467 41.337822) (xy 170.813691 41.57911) (xy 171.01889 41.784309) (xy 171.260178 41.945533) + (xy 171.528283 42.056586) (xy 171.812902 42.1132) (xy 172.103098 42.1132) (xy 172.387717 42.056586) (xy 172.655822 41.945533) + (xy 172.89711 41.784309) (xy 173.021444 41.659975) (xy 180.26163 41.659975) (xy 180.337838 41.907844) (xy 180.599865 42.032563) + (xy 180.881189 42.103768) (xy 181.170999 42.118719) (xy 181.458157 42.076845) (xy 181.731628 41.979754) (xy 181.866162 41.907844) + (xy 181.94237 41.659975) (xy 181.772395 41.49) (xy 185.201928 41.49) (xy 185.214188 41.614482) (xy 185.250498 41.73418) + (xy 185.309463 41.844494) (xy 185.388815 41.941185) (xy 185.485506 42.020537) (xy 185.59582 42.079502) (xy 185.715518 42.115812) + (xy 185.84 42.128072) (xy 186.40425 42.125) (xy 186.563 41.96625) (xy 186.563 40.767) (xy 185.36375 40.767) + (xy 185.205 40.92575) (xy 185.201928 41.49) (xy 181.772395 41.49) (xy 181.102 40.819605) (xy 180.26163 41.659975) + (xy 173.021444 41.659975) (xy 173.102309 41.57911) (xy 173.263533 41.337822) (xy 173.374586 41.069717) (xy 173.4312 40.785098) + (xy 173.4312 40.708999) (xy 179.623281 40.708999) (xy 179.665155 40.996157) (xy 179.762246 41.269628) (xy 179.834156 41.404162) + (xy 180.082025 41.48037) (xy 180.922395 40.64) (xy 181.281605 40.64) (xy 182.121975 41.48037) (xy 182.369844 41.404162) + (xy 182.494563 41.142135) (xy 182.565768 40.860811) (xy 182.580719 40.571001) (xy 182.538845 40.283843) (xy 182.441754 40.010372) + (xy 182.369844 39.875838) (xy 182.121975 39.79963) (xy 181.281605 40.64) (xy 180.922395 40.64) (xy 180.082025 39.79963) + (xy 179.834156 39.875838) (xy 179.709437 40.137865) (xy 179.638232 40.419189) (xy 179.623281 40.708999) (xy 173.4312 40.708999) + (xy 173.4312 40.494902) (xy 173.374586 40.210283) (xy 173.263533 39.942178) (xy 173.102309 39.70089) (xy 173.021444 39.620025) + (xy 180.26163 39.620025) (xy 181.102 40.460395) (xy 181.772395 39.79) (xy 185.201928 39.79) (xy 185.205 40.35425) + (xy 185.36375 40.513) (xy 186.563 40.513) (xy 186.563 39.31375) (xy 186.40425 39.155) (xy 185.84 39.151928) + (xy 185.715518 39.164188) (xy 185.59582 39.200498) (xy 185.485506 39.259463) (xy 185.388815 39.338815) (xy 185.309463 39.435506) + (xy 185.250498 39.54582) (xy 185.214188 39.665518) (xy 185.201928 39.79) (xy 181.772395 39.79) (xy 181.94237 39.620025) + (xy 181.866162 39.372156) (xy 181.604135 39.247437) (xy 181.322811 39.176232) (xy 181.033001 39.161281) (xy 180.745843 39.203155) + (xy 180.472372 39.300246) (xy 180.337838 39.372156) (xy 180.26163 39.620025) (xy 173.021444 39.620025) (xy 172.89711 39.495691) + (xy 172.655822 39.334467) (xy 172.387717 39.223414) (xy 172.103098 39.1668) (xy 171.812902 39.1668) (xy 171.528283 39.223414) + (xy 171.260178 39.334467) (xy 171.01889 39.495691) (xy 170.813691 39.70089) (xy 170.652467 39.942178) (xy 170.541414 40.210283) + (xy 170.4848 40.494902) (xy 167.807279 40.494902) (xy 167.724494 40.426963) (xy 167.640554 40.382095) (xy 167.743845 40.256235) + (xy 167.891255 39.980449) (xy 167.98203 39.681204) (xy 168.012681 39.37) (xy 167.98203 39.058796) (xy 167.891255 38.759551) + (xy 167.743845 38.483765) (xy 167.545463 38.242037) (xy 167.372391 38.1) (xy 167.545463 37.957963) (xy 167.743845 37.716235) + (xy 167.891255 37.440449) (xy 167.98203 37.141204) (xy 168.012681 36.83) (xy 167.98203 36.518796) (xy 167.949028 36.41) + (xy 173.771928 36.41) (xy 173.784188 36.534482) (xy 173.820498 36.65418) (xy 173.879463 36.764494) (xy 173.958815 36.861185) + (xy 174.055506 36.940537) (xy 174.16582 36.999502) (xy 174.285518 37.035812) (xy 174.41 37.048072) (xy 174.97425 37.045) + (xy 175.133 36.88625) (xy 175.133 35.687) (xy 173.93375 35.687) (xy 173.775 35.84575) (xy 173.771928 36.41) + (xy 167.949028 36.41) (xy 167.891255 36.219551) (xy 167.743845 35.943765) (xy 167.545463 35.702037) (xy 167.303735 35.503655) + (xy 167.027949 35.356245) (xy 166.728704 35.26547) (xy 166.495486 35.2425) (xy 166.244514 35.2425) (xy 166.011296 35.26547) + (xy 165.712051 35.356245) (xy 165.436265 35.503655) (xy 165.194537 35.702037) (xy 164.996155 35.943765) (xy 164.968769 35.995) + (xy 162.555287 35.995) (xy 162.514279 35.990961) (xy 162.473271 35.995) (xy 162.473261 35.995) (xy 162.350591 36.007082) + (xy 162.193193 36.054828) (xy 162.048134 36.132364) (xy 161.920989 36.236709) (xy 161.894839 36.268573) (xy 159.628413 38.535) + (xy 139.741015 38.535) (xy 139.699999 38.53096) (xy 139.658983 38.535) (xy 139.658981 38.535) (xy 139.536311 38.547082) + (xy 139.378913 38.594828) (xy 139.233854 38.672364) (xy 139.106709 38.776709) (xy 139.080561 38.808571) (xy 137.868574 40.020559) + (xy 137.83671 40.046709) (xy 137.810562 40.078571) (xy 137.732364 40.173855) (xy 137.654828 40.318914) (xy 137.607082 40.476312) + (xy 137.59096 40.64) (xy 134.01 40.64) (xy 134.01 34.497938) (xy 134.0941 34.497938) (xy 134.0941 35.184422) + (xy 134.228027 35.857717) (xy 134.490733 36.491946) (xy 134.872124 37.062738) (xy 135.357542 37.548156) (xy 135.928334 37.929547) + (xy 136.562563 38.192253) (xy 137.235858 38.32618) (xy 137.922342 38.32618) (xy 138.595637 38.192253) (xy 139.229866 37.929547) + (xy 139.800658 37.548156) (xy 140.286076 37.062738) (xy 140.667467 36.491946) (xy 140.930173 35.857717) (xy 141.0641 35.184422) + (xy 141.0641 34.71) (xy 173.771928 34.71) (xy 173.775 35.27425) (xy 173.93375 35.433) (xy 175.133 35.433) + (xy 175.133 34.23375) (xy 175.387 34.23375) (xy 175.387 35.433) (xy 175.407 35.433) (xy 175.407 35.687) + (xy 175.387 35.687) (xy 175.387 36.88625) (xy 175.54575 37.045) (xy 176.11 37.048072) (xy 176.234482 37.035812) + (xy 176.35418 36.999502) (xy 176.464494 36.940537) (xy 176.561185 36.861185) (xy 176.640537 36.764494) (xy 176.699502 36.65418) + (xy 176.721513 36.58162) (xy 176.853368 36.713475) (xy 177.096589 36.87599) (xy 177.366842 36.987932) (xy 177.65374 37.045) + (xy 177.94626 37.045) (xy 178.233158 36.987932) (xy 178.503411 36.87599) (xy 178.746632 36.713475) (xy 178.953475 36.506632) + (xy 179.018042 36.41) (xy 185.201928 36.41) (xy 185.214188 36.534482) (xy 185.250498 36.65418) (xy 185.309463 36.764494) + (xy 185.388815 36.861185) (xy 185.485506 36.940537) (xy 185.59582 36.999502) (xy 185.715518 37.035812) (xy 185.84 37.048072) + (xy 186.40425 37.045) (xy 186.563 36.88625) (xy 186.563 35.687) (xy 185.36375 35.687) (xy 185.205 35.84575) + (xy 185.201928 36.41) (xy 179.018042 36.41) (xy 179.11599 36.263411) (xy 179.227932 35.993158) (xy 179.285 35.70626) + (xy 179.285 35.41374) (xy 179.227932 35.126842) (xy 179.11599 34.856589) (xy 179.018043 34.71) (xy 185.201928 34.71) + (xy 185.205 35.27425) (xy 185.36375 35.433) (xy 186.563 35.433) (xy 186.563 34.23375) (xy 186.40425 34.075) + (xy 185.84 34.071928) (xy 185.715518 34.084188) (xy 185.59582 34.120498) (xy 185.485506 34.179463) (xy 185.388815 34.258815) + (xy 185.309463 34.355506) (xy 185.250498 34.46582) (xy 185.214188 34.585518) (xy 185.201928 34.71) (xy 179.018043 34.71) + (xy 178.953475 34.613368) (xy 178.746632 34.406525) (xy 178.503411 34.24401) (xy 178.233158 34.132068) (xy 177.94626 34.075) + (xy 177.65374 34.075) (xy 177.366842 34.132068) (xy 177.096589 34.24401) (xy 176.853368 34.406525) (xy 176.721513 34.53838) + (xy 176.699502 34.46582) (xy 176.640537 34.355506) (xy 176.561185 34.258815) (xy 176.464494 34.179463) (xy 176.35418 34.120498) + (xy 176.234482 34.084188) (xy 176.11 34.071928) (xy 175.54575 34.075) (xy 175.387 34.23375) (xy 175.133 34.23375) + (xy 174.97425 34.075) (xy 174.41 34.071928) (xy 174.285518 34.084188) (xy 174.16582 34.120498) (xy 174.055506 34.179463) + (xy 173.958815 34.258815) (xy 173.879463 34.355506) (xy 173.820498 34.46582) (xy 173.784188 34.585518) (xy 173.771928 34.71) + (xy 141.0641 34.71) (xy 141.0641 34.497938) (xy 140.930173 33.824643) (xy 140.667467 33.190414) (xy 140.286076 32.619622) + (xy 139.800658 32.134204) (xy 139.229866 31.752813) (xy 138.595637 31.490107) (xy 137.922342 31.35618) (xy 137.235858 31.35618) + (xy 136.562563 31.490107) (xy 135.928334 31.752813) (xy 135.357542 32.134204) (xy 134.872124 32.619622) (xy 134.490733 33.190414) + (xy 134.228027 33.824643) (xy 134.0941 34.497938) (xy 134.01 34.497938) (xy 134.01 34.322279) (xy 134.073096 33.678778) + (xy 134.250606 33.090836) (xy 134.538937 32.548564) (xy 134.927094 32.072636) (xy 135.400314 31.681155) (xy 135.940552 31.389049) + (xy 136.527244 31.207437) (xy 137.168879 31.14) (xy 201.897721 31.14) + ) + ) + (filled_polygon + (pts + (xy 184.404143 64.60499) (xy 174.631028 64.60499) (xy 174.59001 64.60095) (xy 174.548992 64.60499) (xy 174.548991 64.60499) + (xy 174.426321 64.617072) (xy 174.268923 64.664818) (xy 174.123864 64.742354) (xy 173.996719 64.846699) (xy 173.970571 64.878561) + (xy 172.158579 66.690554) (xy 172.126709 66.716709) (xy 172.022365 66.843854) (xy 172.022364 66.843855) (xy 171.944828 66.988914) + (xy 171.897082 67.146312) (xy 171.88096 67.31) (xy 171.885 67.351018) (xy 171.885 70.179907) (xy 171.751898 70.124774) + (xy 171.606777 70.095908) (xy 168.269446 66.758579) (xy 168.243291 66.726709) (xy 168.116146 66.622364) (xy 167.971087 66.544828) + (xy 167.813689 66.497082) (xy 167.691019 66.485) (xy 167.691018 66.485) (xy 167.65 66.48096) (xy 167.608982 66.485) + (xy 167.495837 66.485) (xy 167.457451 66.427552) (xy 167.262448 66.232549) (xy 167.033149 66.079336) (xy 166.962326 66.05) + (xy 167.033149 66.020664) (xy 167.262448 65.867451) (xy 167.457451 65.672448) (xy 167.610664 65.443149) (xy 167.716199 65.188365) + (xy 167.77 64.917888) (xy 167.77 64.642112) (xy 167.716199 64.371635) (xy 167.610664 64.116851) (xy 167.457451 63.887552) + (xy 167.262448 63.692549) (xy 167.033149 63.539336) (xy 166.968406 63.512518) (xy 166.974072 63.510478) (xy 167.09076 63.448106) + (xy 167.158102 63.207707) (xy 166.37 62.419605) (xy 165.581898 63.207707) (xy 165.64924 63.448106) (xy 165.779336 63.509312) + (xy 165.706851 63.539336) (xy 165.477552 63.692549) (xy 165.282549 63.887552) (xy 165.129336 64.116851) (xy 165.023801 64.371635) + (xy 164.97 64.642112) (xy 164.97 64.917888) (xy 165.023801 65.188365) (xy 165.129336 65.443149) (xy 165.282549 65.672448) + (xy 165.477552 65.867451) (xy 165.706851 66.020664) (xy 165.777674 66.05) (xy 165.706851 66.079336) (xy 165.477552 66.232549) + (xy 165.282549 66.427552) (xy 165.129336 66.656851) (xy 165.023801 66.911635) (xy 164.97 67.182112) (xy 164.97 67.457888) + (xy 165.023801 67.728365) (xy 165.129336 67.983149) (xy 165.282549 68.212448) (xy 165.477552 68.407451) (xy 165.706851 68.560664) + (xy 165.777674 68.59) (xy 165.706851 68.619336) (xy 165.477552 68.772549) (xy 165.282549 68.967552) (xy 165.129336 69.196851) + (xy 165.023801 69.451635) (xy 164.97 69.722112) (xy 164.97 69.997888) (xy 165.023801 70.268365) (xy 165.129336 70.523149) + (xy 165.282549 70.752448) (xy 165.477552 70.947451) (xy 165.706851 71.100664) (xy 165.777674 71.13) (xy 165.706851 71.159336) + (xy 165.477552 71.312549) (xy 165.282549 71.507552) (xy 165.129336 71.736851) (xy 165.023801 71.991635) (xy 164.97 72.262112) + (xy 164.97 72.537888) (xy 165.023801 72.808365) (xy 165.129336 73.063149) (xy 165.282549 73.292448) (xy 165.477552 73.487451) + (xy 165.706851 73.640664) (xy 165.777674 73.67) (xy 165.706851 73.699336) (xy 165.477552 73.852549) (xy 165.282549 74.047552) + (xy 165.129336 74.276851) (xy 165.023801 74.531635) (xy 164.97 74.802112) (xy 164.97 75.077888) (xy 165.023801 75.348365) + (xy 165.129336 75.603149) (xy 165.282549 75.832448) (xy 165.477552 76.027451) (xy 165.706851 76.180664) (xy 165.771594 76.207482) + (xy 165.765928 76.209522) (xy 165.64924 76.271894) (xy 165.581898 76.512293) (xy 166.37 77.300395) (xy 167.158102 76.512293) + (xy 167.09076 76.271894) (xy 166.960664 76.210688) (xy 167.033149 76.180664) (xy 167.262448 76.027451) (xy 167.457451 75.832448) + (xy 167.610664 75.603149) (xy 167.716199 75.348365) (xy 167.77 75.077888) (xy 167.77 74.802112) (xy 167.716199 74.531635) + (xy 167.610664 74.276851) (xy 167.457451 74.047552) (xy 167.262448 73.852549) (xy 167.033149 73.699336) (xy 166.962326 73.67) + (xy 167.033149 73.640664) (xy 167.262448 73.487451) (xy 167.457451 73.292448) (xy 167.610664 73.063149) (xy 167.716199 72.808365) + (xy 167.77 72.537888) (xy 167.77 72.262112) (xy 167.716199 71.991635) (xy 167.610664 71.736851) (xy 167.457451 71.507552) + (xy 167.262448 71.312549) (xy 167.033149 71.159336) (xy 166.962326 71.13) (xy 167.033149 71.100664) (xy 167.262448 70.947451) + (xy 167.457451 70.752448) (xy 167.610664 70.523149) (xy 167.716199 70.268365) (xy 167.77 69.997888) (xy 167.77 69.722112) + (xy 167.716199 69.451635) (xy 167.610664 69.196851) (xy 167.457451 68.967552) (xy 167.262448 68.772549) (xy 167.033149 68.619336) + (xy 166.962326 68.59) (xy 167.033149 68.560664) (xy 167.262448 68.407451) (xy 167.409516 68.260383) (xy 170.425908 71.276777) + (xy 170.454774 71.421898) (xy 170.532795 71.610256) (xy 170.646063 71.779774) (xy 170.790226 71.923937) (xy 170.959744 72.037205) + (xy 171.148102 72.115226) (xy 171.348061 72.155) (xy 171.551939 72.155) (xy 171.751898 72.115226) (xy 171.885 72.060093) + (xy 171.885001 91.094131) (xy 171.104133 91.875) (xy 167.489155 91.875) (xy 167.457451 91.827552) (xy 167.262448 91.632549) + (xy 167.033149 91.479336) (xy 166.962326 91.45) (xy 167.033149 91.420664) (xy 167.262448 91.267451) (xy 167.457451 91.072448) + (xy 167.610664 90.843149) (xy 167.716199 90.588365) (xy 167.77 90.317888) (xy 167.77 90.042112) (xy 167.716199 89.771635) + (xy 167.610664 89.516851) (xy 167.457451 89.287552) (xy 167.262448 89.092549) (xy 167.033149 88.939336) (xy 166.962326 88.91) + (xy 167.033149 88.880664) (xy 167.262448 88.727451) (xy 167.457451 88.532448) (xy 167.610664 88.303149) (xy 167.716199 88.048365) + (xy 167.77 87.777888) (xy 167.77 87.502112) (xy 167.716199 87.231635) (xy 167.610664 86.976851) (xy 167.457451 86.747552) + (xy 167.262448 86.552549) (xy 167.033149 86.399336) (xy 166.962326 86.37) (xy 167.033149 86.340664) (xy 167.262448 86.187451) + (xy 167.457451 85.992448) (xy 167.610664 85.763149) (xy 167.716199 85.508365) (xy 167.77 85.237888) (xy 167.77 84.962112) + (xy 167.716199 84.691635) (xy 167.610664 84.436851) (xy 167.457451 84.207552) (xy 167.262448 84.012549) (xy 167.033149 83.859336) + (xy 166.962326 83.83) (xy 167.033149 83.800664) (xy 167.262448 83.647451) (xy 167.457451 83.452448) (xy 167.610664 83.223149) + (xy 167.716199 82.968365) (xy 167.77 82.697888) (xy 167.77 82.422112) (xy 167.716199 82.151635) (xy 167.610664 81.896851) + (xy 167.457451 81.667552) (xy 167.262448 81.472549) (xy 167.033149 81.319336) (xy 166.962326 81.29) (xy 167.033149 81.260664) + (xy 167.262448 81.107451) (xy 167.457451 80.912448) (xy 167.610664 80.683149) (xy 167.716199 80.428365) (xy 167.77 80.157888) + (xy 167.77 79.882112) (xy 167.716199 79.611635) (xy 167.610664 79.356851) (xy 167.457451 79.127552) (xy 167.262448 78.932549) + (xy 167.033149 78.779336) (xy 166.968406 78.752518) (xy 166.974072 78.750478) (xy 167.09076 78.688106) (xy 167.158102 78.447707) + (xy 166.37 77.659605) (xy 165.581898 78.447707) (xy 165.64924 78.688106) (xy 165.779336 78.749312) (xy 165.706851 78.779336) + (xy 165.477552 78.932549) (xy 165.282549 79.127552) (xy 165.129336 79.356851) (xy 165.023801 79.611635) (xy 164.97 79.882112) + (xy 164.97 80.157888) (xy 165.023801 80.428365) (xy 165.129336 80.683149) (xy 165.282549 80.912448) (xy 165.477552 81.107451) + (xy 165.706851 81.260664) (xy 165.777674 81.29) (xy 165.706851 81.319336) (xy 165.477552 81.472549) (xy 165.282549 81.667552) + (xy 165.129336 81.896851) (xy 165.023801 82.151635) (xy 164.97 82.422112) (xy 164.97 82.697888) (xy 165.023801 82.968365) + (xy 165.129336 83.223149) (xy 165.282549 83.452448) (xy 165.477552 83.647451) (xy 165.706851 83.800664) (xy 165.777674 83.83) + (xy 165.706851 83.859336) (xy 165.477552 84.012549) (xy 165.340484 84.149617) (xy 164.665 83.474133) (xy 164.665 77.551899) + (xy 164.965064 77.551899) (xy 165.006086 77.824607) (xy 165.099522 78.084072) (xy 165.161894 78.20076) (xy 165.402293 78.268102) + (xy 166.190395 77.48) (xy 166.549605 77.48) (xy 167.337707 78.268102) (xy 167.578106 78.20076) (xy 167.695506 77.95122) + (xy 167.761967 77.683573) (xy 167.774936 77.408101) (xy 167.733914 77.135393) (xy 167.640478 76.875928) (xy 167.578106 76.75924) + (xy 167.337707 76.691898) (xy 166.549605 77.48) (xy 166.190395 77.48) (xy 165.402293 76.691898) (xy 165.161894 76.75924) + (xy 165.044494 77.00878) (xy 164.978033 77.276427) (xy 164.965064 77.551899) (xy 164.665 77.551899) (xy 164.665 62.311899) + (xy 164.965064 62.311899) (xy 165.006086 62.584607) (xy 165.099522 62.844072) (xy 165.161894 62.96076) (xy 165.402293 63.028102) + (xy 166.190395 62.24) (xy 166.549605 62.24) (xy 167.337707 63.028102) (xy 167.578106 62.96076) (xy 167.695506 62.71122) + (xy 167.761967 62.443573) (xy 167.774936 62.168101) (xy 167.733914 61.895393) (xy 167.640478 61.635928) (xy 167.578106 61.51924) + (xy 167.337707 61.451898) (xy 166.549605 62.24) (xy 166.190395 62.24) (xy 165.402293 61.451898) (xy 165.161894 61.51924) + (xy 165.044494 61.76878) (xy 164.978033 62.036427) (xy 164.965064 62.311899) (xy 164.665 62.311899) (xy 164.665 61.305867) + (xy 164.698574 61.272293) (xy 165.581898 61.272293) (xy 166.37 62.060395) (xy 167.158102 61.272293) (xy 167.09076 61.031894) + (xy 166.84122 60.914494) (xy 166.573573 60.848033) (xy 166.298101 60.835064) (xy 166.025393 60.876086) (xy 165.765928 60.969522) + (xy 165.64924 61.031894) (xy 165.581898 61.272293) (xy 164.698574 61.272293) (xy 165.445868 60.525) (xy 188.484132 60.525) + ) + ) + (filled_polygon + (pts + (xy 201.095001 37.175869) (xy 201.095 41.564132) (xy 200.314133 42.345) (xy 199.31102 42.345) (xy 199.270002 42.34096) + (xy 199.228983 42.345) (xy 199.106313 42.357082) (xy 198.948915 42.404828) (xy 198.803856 42.482364) (xy 198.676711 42.586709) + (xy 198.650565 42.618568) (xy 195.145 46.124135) (xy 195.145 43.525867) (xy 197.905 40.765868) (xy 197.905 40.767002) + (xy 198.063748 40.767002) (xy 197.905 40.92575) (xy 197.901928 41.49) (xy 197.914188 41.614482) (xy 197.950498 41.73418) + (xy 198.009463 41.844494) (xy 198.088815 41.941185) (xy 198.185506 42.020537) (xy 198.29582 42.079502) (xy 198.415518 42.115812) + (xy 198.54 42.128072) (xy 199.10425 42.125) (xy 199.263 41.96625) (xy 199.263 40.767) (xy 199.517 40.767) + (xy 199.517 41.96625) (xy 199.67575 42.125) (xy 200.24 42.128072) (xy 200.364482 42.115812) (xy 200.48418 42.079502) + (xy 200.594494 42.020537) (xy 200.691185 41.941185) (xy 200.770537 41.844494) (xy 200.829502 41.73418) (xy 200.865812 41.614482) + (xy 200.878072 41.49) (xy 200.875 40.92575) (xy 200.71625 40.767) (xy 199.517 40.767) (xy 199.263 40.767) + (xy 199.243 40.767) (xy 199.243 40.513) (xy 199.263 40.513) (xy 199.263 40.493) (xy 199.517 40.493) + (xy 199.517 40.513) (xy 200.71625 40.513) (xy 200.875 40.35425) (xy 200.878072 39.79) (xy 200.865812 39.665518) + (xy 200.829502 39.54582) (xy 200.770537 39.435506) (xy 200.691185 39.338815) (xy 200.594494 39.259463) (xy 200.48418 39.200498) + (xy 200.41162 39.178487) (xy 200.543475 39.046632) (xy 200.70599 38.803411) (xy 200.817932 38.533158) (xy 200.875 38.24626) + (xy 200.875 37.95374) (xy 200.817932 37.666842) (xy 200.70599 37.396589) (xy 200.543475 37.153368) (xy 200.336632 36.946525) + (xy 200.16224 36.83) (xy 200.336632 36.713475) (xy 200.48462 36.565487) + ) + ) + ) +) diff --git a/PCBs/ESP32_Breakout_Carrier/Tonuino-ESP32_2.kicad_pcb-bak b/PCBs/ESP32_Breakout_Carrier/Tonuino-ESP32_2.kicad_pcb-bak new file mode 100644 index 0000000..14e942d --- /dev/null +++ b/PCBs/ESP32_Breakout_Carrier/Tonuino-ESP32_2.kicad_pcb-bak @@ -0,0 +1,2383 @@ +(kicad_pcb (version 20171130) (host pcbnew "(5.1.7-0-10_14)") + + (general + (thickness 1.6) + (drawings 46) + (tracks 223) + (zones 0) + (modules 17) + (nets 43) + ) + + (page A4) + (layers + (0 F.Cu signal) + (31 B.Cu signal) + (32 B.Adhes user) + (33 F.Adhes user) + (34 B.Paste user) + (35 F.Paste user) + (36 B.SilkS user) + (37 F.SilkS user) + (38 B.Mask user) + (39 F.Mask user) + (40 Dwgs.User user) + (41 Cmts.User user) + (42 Eco1.User user) + (43 Eco2.User user) + (44 Edge.Cuts user) + (45 Margin user) + (46 B.CrtYd user) + (47 F.CrtYd user) + (48 B.Fab user) + (49 F.Fab user) + ) + + (setup + (last_trace_width 0.4) + (trace_clearance 0.2) + (zone_clearance 0.508) + (zone_45_only no) + (trace_min 0.2) + (via_size 0.8) + (via_drill 0.4) + (via_min_size 0.4) + (via_min_drill 0.3) + (uvia_size 0.3) + (uvia_drill 0.1) + (uvias_allowed no) + (uvia_min_size 0.2) + (uvia_min_drill 0.1) + (edge_width 0.05) + (segment_width 0.2) + (pcb_text_width 0.3) + (pcb_text_size 1.5 1.5) + (mod_edge_width 0.12) + (mod_text_size 1 1) + (mod_text_width 0.15) + (pad_size 1.524 1.524) + (pad_drill 0.762) + (pad_to_mask_clearance 0) + (aux_axis_origin 0 0) + (visible_elements FFFFFF7F) + (pcbplotparams + (layerselection 0x010fc_ffffffff) + (usegerberextensions false) + (usegerberattributes true) + (usegerberadvancedattributes true) + (creategerberjobfile true) + (excludeedgelayer true) + (linewidth 0.100000) + (plotframeref false) + (viasonmask false) + (mode 1) + (useauxorigin false) + (hpglpennumber 1) + (hpglpenspeed 20) + (hpglpendiameter 15.000000) + (psnegative false) + (psa4output false) + (plotreference true) + (plotvalue true) + (plotinvisibletext false) + (padsonsilk false) + (subtractmaskfromsilk false) + (outputformat 1) + (mirror false) + (drillshape 1) + (scaleselection 1) + (outputdirectory "")) + ) + + (net 0 "") + (net 1 "Net-(U1-Pad35)") + (net 2 "Net-(U1-Pad34)") + (net 3 "Net-(U1-Pad25)") + (net 4 "Net-(U1-Pad24)") + (net 5 "Net-(U1-Pad22)") + (net 6 "Net-(U1-Pad21)") + (net 7 "Net-(U1-Pad20)") + (net 8 "Net-(U1-Pad18)") + (net 9 "Net-(U1-Pad17)") + (net 10 "Net-(U1-Pad16)") + (net 11 "Net-(U1-Pad4)") + (net 12 "Net-(U1-Pad3)") + (net 13 "Net-(U1-Pad2)") + (net 14 "Net-(Q1-Pad2)") + (net 15 GND) + (net 16 GPIO-17) + (net 17 "Net-(J3-Pad4)") + (net 18 "Net-(J3-Pad3)") + (net 19 SD-CARD_CS) + (net 20 SD-CARD_SCK) + (net 21 SD-CARD_MOSI) + (net 22 SD-CARD_MISO) + (net 23 SWITCHED_VCC) + (net 24 RFID_SDA) + (net 25 RFID_SCK) + (net 26 RFID_MOSI) + (net 27 RFID_MISO) + (net 28 RFID_RST) + (net 29 3.3V) + (net 30 ROTARY_CLR) + (net 31 ROTARY_DT) + (net 32 ROTARY_BUTTON) + (net 33 BUTTON_PREVIOUS_PIN) + (net 34 BUTTON_NEXT_PIN) + (net 35 BUTTON_PLAY_PAUSE_PIN) + (net 36 NEOPIXEL_DI) + (net 37 VCC) + (net 38 MAX98357_LRC) + (net 39 MAX98357_DIN) + (net 40 MAX98357_BLCK) + (net 41 "Net-(J2-Pad4)") + (net 42 "Net-(Q1-Pad1)") + + (net_class Default "This is the default net class." + (clearance 0.2) + (trace_width 0.4) + (via_dia 0.8) + (via_drill 0.4) + (uvia_dia 0.3) + (uvia_drill 0.1) + (add_net 3.3V) + (add_net BUTTON_NEXT_PIN) + (add_net BUTTON_PLAY_PAUSE_PIN) + (add_net BUTTON_PREVIOUS_PIN) + (add_net GND) + (add_net GPIO-17) + (add_net MAX98357_BLCK) + (add_net MAX98357_DIN) + (add_net MAX98357_LRC) + (add_net NEOPIXEL_DI) + (add_net "Net-(J2-Pad4)") + (add_net "Net-(J3-Pad3)") + (add_net "Net-(J3-Pad4)") + (add_net "Net-(Q1-Pad1)") + (add_net "Net-(Q1-Pad2)") + (add_net "Net-(U1-Pad16)") + (add_net "Net-(U1-Pad17)") + (add_net "Net-(U1-Pad18)") + (add_net "Net-(U1-Pad2)") + (add_net "Net-(U1-Pad20)") + (add_net "Net-(U1-Pad21)") + (add_net "Net-(U1-Pad22)") + (add_net "Net-(U1-Pad24)") + (add_net "Net-(U1-Pad25)") + (add_net "Net-(U1-Pad3)") + (add_net "Net-(U1-Pad34)") + (add_net "Net-(U1-Pad35)") + (add_net "Net-(U1-Pad4)") + (add_net RFID_MISO) + (add_net RFID_MOSI) + (add_net RFID_RST) + (add_net RFID_SCK) + (add_net RFID_SDA) + (add_net ROTARY_BUTTON) + (add_net ROTARY_CLR) + (add_net ROTARY_DT) + (add_net SD-CARD_CS) + (add_net SD-CARD_MISO) + (add_net SD-CARD_MOSI) + (add_net SD-CARD_SCK) + (add_net SWITCHED_VCC) + (add_net VCC) + ) + + (module MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad (layer F.Cu) (tedit 56D1B4CB) (tstamp 5F7CAA3F) + (at 201.55408 108.6993) + (descr "Mounting Hole 3.2mm, M3, ISO7380") + (tags "mounting hole 3.2mm m3 iso7380") + (attr virtual) + (fp_text reference REF** (at 0 -3.85) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value MountingHole_3.2mm_M3_ISO7380_Pad (at 0 3.85) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 2.85 0) (layer Cmts.User) (width 0.15)) + (fp_circle (center 0 0) (end 3.1 0) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 0.3 0) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 1 thru_hole circle (at 0 0) (size 5.7 5.7) (drill 3.2) (layers *.Cu *.Mask)) + ) + + (module MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad (layer F.Cu) (tedit 56D1B4CB) (tstamp 5F7CA9FB) + (at 137.5791 34.84118) + (descr "Mounting Hole 3.2mm, M3, ISO7380") + (tags "mounting hole 3.2mm m3 iso7380") + (attr virtual) + (fp_text reference REF** (at 0 -3.85) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value MountingHole_3.2mm_M3_ISO7380_Pad (at 0 3.85) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 2.85 0) (layer Cmts.User) (width 0.15)) + (fp_circle (center 0 0) (end 3.1 0) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 0.3 0) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 1 thru_hole circle (at 0 0) (size 5.7 5.7) (drill 3.2) (layers *.Cu *.Mask)) + ) + + (module ESP32-DEVKITC-32U:MODULE_ESP32-DEVKITC-32U (layer F.Cu) (tedit 5F7798AE) (tstamp 5F78DFB2) + (at 153.67 85.09) + (path /5F79096D) + (fp_text reference U1 (at -10.795 -31.75) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.015))) + ) + (fp_text value ESP32-DEVKITC-32U (at 0.18542 -1.59004) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.015))) + ) + (fp_line (start 4.31 24.38) (end 14.2 24.38) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.31 25.25) (end 4.31 24.38) (layer F.CrtYd) (width 0.05)) + (fp_line (start -4.32 25.25) (end 4.31 25.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -4.32 24.38) (end -4.32 25.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -14.2 24.38) (end -4.32 24.38) (layer F.CrtYd) (width 0.05)) + (fp_line (start 9.25 -30.55) (end 9.25 -24.38) (layer F.CrtYd) (width 0.05)) + (fp_line (start -9.25 -30.55) (end 9.25 -30.55) (layer F.CrtYd) (width 0.05)) + (fp_line (start -9.25 -24.38) (end -9.25 -30.55) (layer F.CrtYd) (width 0.05)) + (fp_line (start -9.25 -24.38) (end -14.2 -24.38) (layer F.CrtYd) (width 0.05)) + (fp_line (start 14.2 -24.38) (end 9.25 -24.38) (layer F.CrtYd) (width 0.05)) + (fp_line (start 14.2 24.38) (end 14.2 -24.38) (layer F.CrtYd) (width 0.05)) + (fp_line (start -14.2 -24.38) (end -14.2 24.38) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.06 24.1) (end 13.95 24.1) (layer F.SilkS) (width 0.127)) + (fp_line (start 4.06 25) (end 4.06 24.1) (layer F.SilkS) (width 0.127)) + (fp_line (start -4.07 25) (end 4.06 25) (layer F.SilkS) (width 0.127)) + (fp_line (start -4.07 24.1) (end -4.07 25) (layer F.SilkS) (width 0.127)) + (fp_line (start -13.95 24.1) (end -4.07 24.1) (layer F.SilkS) (width 0.127)) + (fp_line (start 9 -30.3) (end 9 -24.1) (layer F.SilkS) (width 0.127)) + (fp_line (start -9 -30.3) (end 9 -30.3) (layer F.SilkS) (width 0.127)) + (fp_line (start -9 -24.1) (end -9 -30.3) (layer F.SilkS) (width 0.127)) + (fp_line (start -9 -24.1) (end -13.95 -24.1) (layer F.SilkS) (width 0.127)) + (fp_line (start 13.95 -24.1) (end 9 -24.1) (layer F.SilkS) (width 0.127)) + (fp_line (start 13.95 24.1) (end 13.95 -24.1) (layer F.SilkS) (width 0.127)) + (fp_line (start -13.95 -24.1) (end -13.95 24.1) (layer F.SilkS) (width 0.127)) + (fp_line (start 4.06 24.1) (end 13.95 24.1) (layer F.Fab) (width 0.127)) + (fp_line (start 4.06 25) (end 4.06 24.1) (layer F.Fab) (width 0.127)) + (fp_line (start -4.07 25) (end 4.06 25) (layer F.Fab) (width 0.127)) + (fp_line (start -4.07 24.1) (end -4.07 25) (layer F.Fab) (width 0.127)) + (fp_line (start -13.95 24.1) (end -4.07 24.1) (layer F.Fab) (width 0.127)) + (fp_line (start 9 -30.3) (end 9 -24.1) (layer F.Fab) (width 0.127)) + (fp_line (start -9 -30.3) (end 9 -30.3) (layer F.Fab) (width 0.127)) + (fp_line (start -9 -24.1) (end -9 -30.3) (layer F.Fab) (width 0.127)) + (fp_line (start -9 -24.1) (end -13.95 -24.1) (layer F.Fab) (width 0.127)) + (fp_line (start 9 -24.1) (end -9 -24.1) (layer F.Fab) (width 0.127)) + (fp_line (start 13.95 -24.1) (end 9 -24.1) (layer F.Fab) (width 0.127)) + (fp_line (start 13.95 24.1) (end 13.95 -24.1) (layer F.Fab) (width 0.127)) + (fp_line (start -13.95 -24.1) (end -13.95 24.1) (layer F.Fab) (width 0.127)) + (fp_circle (center -14.57 -22.97) (end -14.47 -22.97) (layer F.Fab) (width 0.2)) + (fp_circle (center -14.57 -22.97) (end -14.47 -22.97) (layer F.SilkS) (width 0.2)) + (pad 38 thru_hole circle (at 12.7 -22.85) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 15 GND)) + (pad 37 thru_hole circle (at 12.7 -20.31) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 26 RFID_MOSI)) + (pad 36 thru_hole circle (at 12.7 -17.77) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 28 RFID_RST)) + (pad 35 thru_hole circle (at 12.7 -15.23) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 1 "Net-(U1-Pad35)")) + (pad 34 thru_hole circle (at 12.7 -12.69) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 2 "Net-(U1-Pad34)")) + (pad 33 thru_hole circle (at 12.7 -10.15) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 24 RFID_SDA)) + (pad 32 thru_hole circle (at 12.7 -7.61) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 15 GND)) + (pad 31 thru_hole circle (at 12.7 -5.07) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 27 RFID_MISO)) + (pad 30 thru_hole circle (at 12.7 -2.53) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 25 RFID_SCK)) + (pad 29 thru_hole circle (at 12.7 0.01) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 35 BUTTON_PLAY_PAUSE_PIN)) + (pad 28 thru_hole circle (at 12.7 2.55) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 16 GPIO-17)) + (pad 27 thru_hole circle (at 12.7 5.09) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 22 SD-CARD_MISO)) + (pad 26 thru_hole circle (at 12.7 7.63) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 34 BUTTON_NEXT_PIN)) + (pad 25 thru_hole circle (at 12.7 10.17) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 3 "Net-(U1-Pad25)")) + (pad 24 thru_hole circle (at 12.7 12.71) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 4 "Net-(U1-Pad24)")) + (pad 23 thru_hole circle (at 12.7 15.25) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 19 SD-CARD_CS)) + (pad 22 thru_hole circle (at 12.7 17.79) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 5 "Net-(U1-Pad22)")) + (pad 21 thru_hole circle (at 12.7 20.33) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 6 "Net-(U1-Pad21)")) + (pad 20 thru_hole circle (at 12.7 22.87) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 7 "Net-(U1-Pad20)")) + (pad 19 thru_hole circle (at -12.7 22.87) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 37 VCC)) + (pad 18 thru_hole circle (at -12.7 20.33) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 8 "Net-(U1-Pad18)")) + (pad 17 thru_hole circle (at -12.7 17.79) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 9 "Net-(U1-Pad17)")) + (pad 16 thru_hole circle (at -12.7 15.25) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 10 "Net-(U1-Pad16)")) + (pad 15 thru_hole circle (at -12.7 12.71) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 21 SD-CARD_MOSI)) + (pad 14 thru_hole circle (at -12.7 10.17) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 15 GND)) + (pad 13 thru_hole circle (at -12.7 7.63) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 36 NEOPIXEL_DI)) + (pad 12 thru_hole circle (at -12.7 5.09) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 20 SD-CARD_SCK)) + (pad 11 thru_hole circle (at -12.7 2.55) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 40 MAX98357_BLCK)) + (pad 10 thru_hole circle (at -12.7 0.01) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 38 MAX98357_LRC)) + (pad 9 thru_hole circle (at -12.7 -2.53) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 39 MAX98357_DIN)) + (pad 8 thru_hole circle (at -12.7 -5.07) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 33 BUTTON_PREVIOUS_PIN)) + (pad 7 thru_hole circle (at -12.7 -7.61) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 32 ROTARY_BUTTON)) + (pad 6 thru_hole circle (at -12.7 -10.15) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 31 ROTARY_DT)) + (pad 5 thru_hole circle (at -12.7 -12.69) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 30 ROTARY_CLR)) + (pad 4 thru_hole circle (at -12.7 -15.23) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 11 "Net-(U1-Pad4)")) + (pad 3 thru_hole circle (at -12.7 -17.77) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 12 "Net-(U1-Pad3)")) + (pad 2 thru_hole circle (at -12.7 -20.31) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 13 "Net-(U1-Pad2)")) + (pad 1 thru_hole rect (at -12.7 -22.85) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) + (net 29 3.3V)) + ) + + (module mod_s:PinHeader_1x06_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 5F7A4DF1) + (at 190.5 68.58 270) + (descr "Through hole straight pin header, 1x06, 2.54mm pitch, single row") + (tags "Through hole pin header THT 1x06 2.54mm single row") + (path /5F7ED32A) + (fp_text reference J1 (at 0 -2.33 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "SD-Card Reader" (at 2.47142 6.2357 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 -1.27) (end 1.27 13.97) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 13.97) (end -1.27 13.97) (layer F.Fab) (width 0.1)) + (fp_line (start -1.27 13.97) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) + (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start -1.33 14.03) (end 1.33 14.03) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end -1.33 14.03) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.33 1.27) (end 1.33 14.03) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.8 -1.8) (end -1.8 14.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 14.5) (end 1.8 14.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.8 14.5) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 0 6.35) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 6 thru_hole oval (at 0 12.7 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 19 SD-CARD_CS)) + (pad 5 thru_hole oval (at 0 10.16 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 20 SD-CARD_SCK)) + (pad 4 thru_hole oval (at 0 7.62 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 21 SD-CARD_MOSI)) + (pad 3 thru_hole oval (at 0 5.08 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 22 SD-CARD_MISO)) + (pad 2 thru_hole oval (at 0 2.54 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 23 SWITCHED_VCC)) + (pad 1 thru_hole rect (at 0 0 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 15 GND)) + (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x06_P2.54mm_Vertical.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module mod_s:PinHeader_1x02_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 5F7B36D3) + (at 175.26 35.56 90) + (descr "Through hole straight pin header, 1x02, 2.54mm pitch, single row") + (tags "Through hole pin header THT 1x02 2.54mm single row") + (path /5F945F11) + (fp_text reference J9 (at 0 -2.33 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Power (at -2.54 1.27 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.8 4.35) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 4.35) (end 1.8 4.35) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 -1.8) (end -1.8 4.35) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.33 1.27) (end 1.33 3.87) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end -1.33 3.87) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 3.87) (end 1.33 3.87) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start -1.27 3.81) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 3.81) (end -1.27 3.81) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 -1.27) (end 1.27 3.81) (layer F.Fab) (width 0.1)) + (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) + (fp_text user %R (at 0 1.27) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 2 thru_hole oval (at 0 2.54 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 37 VCC)) + (pad 1 thru_hole rect (at 0 0 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 15 GND)) + (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x02_P2.54mm_Vertical.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module mod_s:PinHeader_1x03_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 5F7B2861) + (at 199.39 40.64 180) + (descr "Through hole straight pin header, 1x03, 2.54mm pitch, single row") + (tags "Through hole pin header THT 1x03 2.54mm single row") + (path /5F936A23) + (fp_text reference J8 (at 0 -2.33) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value WS2812 (at 2.54 2.54 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.8 6.85) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 6.85) (end 1.8 6.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 -1.8) (end -1.8 6.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.33 1.27) (end 1.33 6.41) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end -1.33 6.41) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 6.41) (end 1.33 6.41) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start -1.27 6.35) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 6.35) (end -1.27 6.35) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 -1.27) (end 1.27 6.35) (layer F.Fab) (width 0.1)) + (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) + (fp_text user %R (at 0 2.54 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 3 thru_hole oval (at 0 5.08 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 23 SWITCHED_VCC)) + (pad 2 thru_hole oval (at 0 2.54 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 36 NEOPIXEL_DI)) + (pad 1 thru_hole rect (at 0 0 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 15 GND)) + (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x03_P2.54mm_Vertical.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module mod_s:PinHeader_1x02_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 5F7B1F30) + (at 186.69 40.64 90) + (descr "Through hole straight pin header, 1x02, 2.54mm pitch, single row") + (tags "Through hole pin header THT 1x02 2.54mm single row") + (path /5F90F726) + (fp_text reference J7 (at 0 -2.33 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Pause (at 2.54 1.27 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.8 4.35) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 4.35) (end 1.8 4.35) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 -1.8) (end -1.8 4.35) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.33 1.27) (end 1.33 3.87) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end -1.33 3.87) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 3.87) (end 1.33 3.87) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start -1.27 3.81) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 3.81) (end -1.27 3.81) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 -1.27) (end 1.27 3.81) (layer F.Fab) (width 0.1)) + (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) + (fp_text user %R (at 0 1.27) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 2 thru_hole oval (at 0 2.54 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 35 BUTTON_PLAY_PAUSE_PIN)) + (pad 1 thru_hole rect (at 0 0 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 15 GND)) + (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x02_P2.54mm_Vertical.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module mod_s:PinHeader_1x02_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 5F7B1F1A) + (at 186.69 35.56 90) + (descr "Through hole straight pin header, 1x02, 2.54mm pitch, single row") + (tags "Through hole pin header THT 1x02 2.54mm single row") + (path /5F90EAED) + (fp_text reference J6 (at 0 -2.33 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Prev (at 2.54 1.27 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.8 4.35) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 4.35) (end 1.8 4.35) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 -1.8) (end -1.8 4.35) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.33 1.27) (end 1.33 3.87) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end -1.33 3.87) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 3.87) (end 1.33 3.87) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start -1.27 3.81) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 3.81) (end -1.27 3.81) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 -1.27) (end 1.27 3.81) (layer F.Fab) (width 0.1)) + (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) + (fp_text user %R (at 0 1.27) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 2 thru_hole oval (at 0 2.54 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 34 BUTTON_NEXT_PIN)) + (pad 1 thru_hole rect (at 0 0 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 15 GND)) + (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x02_P2.54mm_Vertical.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module mod_s:PinHeader_1x02_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 5F7B1F04) + (at 186.69 45.72 90) + (descr "Through hole straight pin header, 1x02, 2.54mm pitch, single row") + (tags "Through hole pin header THT 1x02 2.54mm single row") + (path /5F9085EF) + (fp_text reference J5 (at 0 -2.33 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Next (at 2.54 1.27 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.8 4.35) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 4.35) (end 1.8 4.35) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 -1.8) (end -1.8 4.35) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.33 1.27) (end 1.33 3.87) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end -1.33 3.87) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 3.87) (end 1.33 3.87) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start -1.27 3.81) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 3.81) (end -1.27 3.81) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 -1.27) (end 1.27 3.81) (layer F.Fab) (width 0.1)) + (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) + (fp_text user %R (at 0 1.27) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 2 thru_hole oval (at 0 2.54 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 33 BUTTON_PREVIOUS_PIN)) + (pad 1 thru_hole rect (at 0 0 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 15 GND)) + (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x02_P2.54mm_Vertical.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module mod_s:PinHeader_1x08_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 5F7B1E8A) + (at 199.39 66.04 180) + (descr "Through hole straight pin header, 1x08, 2.54mm pitch, single row") + (tags "Through hole pin header THT 1x08 2.54mm single row") + (path /5F92011C) + (fp_text reference J2 (at 0 -2.33) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value RFID-RC522 (at 2.54 10.16 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.8 19.55) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 19.55) (end 1.8 19.55) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 -1.8) (end -1.8 19.55) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.33 1.27) (end 1.33 19.11) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end -1.33 19.11) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 19.11) (end 1.33 19.11) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start -1.27 19.05) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 19.05) (end -1.27 19.05) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 -1.27) (end 1.27 19.05) (layer F.Fab) (width 0.1)) + (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) + (fp_text user %R (at 0 8.89 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 8 thru_hole oval (at 0 17.78 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 24 RFID_SDA)) + (pad 7 thru_hole oval (at 0 15.24 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 25 RFID_SCK)) + (pad 6 thru_hole oval (at 0 12.7 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 26 RFID_MOSI)) + (pad 5 thru_hole oval (at 0 10.16 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 27 RFID_MISO)) + (pad 4 thru_hole oval (at 0 7.62 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 41 "Net-(J2-Pad4)")) + (pad 3 thru_hole oval (at 0 5.08 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 15 GND)) + (pad 2 thru_hole oval (at 0 2.54 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 28 RFID_RST)) + (pad 1 thru_hole rect (at 0 0 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 16 GPIO-17)) + (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x08_P2.54mm_Vertical.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module mod_s:PinHeader_1x07_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 5F7BA532) + (at 155.00604 50.18532 270) + (descr "Through hole straight pin header, 1x07, 2.54mm pitch, single row") + (tags "Through hole pin header THT 1x07 2.54mm single row") + (path /5F81C714) + (fp_text reference J3 (at 0 -2.33 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Adafruit MAX98357" (at -2.35204 7.6835 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 -1.27) (end 1.27 16.51) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 16.51) (end -1.27 16.51) (layer F.Fab) (width 0.1)) + (fp_line (start -1.27 16.51) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) + (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start -1.33 16.57) (end 1.33 16.57) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end -1.33 16.57) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.33 1.27) (end 1.33 16.57) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.8 -1.8) (end -1.8 17.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 17.05) (end 1.8 17.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.8 17.05) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 0 7.62) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 7 thru_hole oval (at 0 15.24 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 38 MAX98357_LRC)) + (pad 6 thru_hole oval (at 0 12.7 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 40 MAX98357_BLCK)) + (pad 5 thru_hole oval (at 0 10.16 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 39 MAX98357_DIN)) + (pad 4 thru_hole oval (at 0 7.62 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 17 "Net-(J3-Pad4)")) + (pad 3 thru_hole oval (at 0 5.08 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 18 "Net-(J3-Pad3)")) + (pad 2 thru_hole oval (at 0 2.54 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 15 GND)) + (pad 1 thru_hole rect (at 0 0 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 23 SWITCHED_VCC)) + (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x07_P2.54mm_Vertical.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module mod_s:PinHeader_1x05_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 5F7A297D) + (at 180.34 53.34 90) + (descr "Through hole straight pin header, 1x05, 2.54mm pitch, single row") + (tags "Through hole pin header THT 1x05 2.54mm single row") + (path /5F7BD0A2) + (fp_text reference J4 (at 0 -2.33 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Rotary Encode" (at 2.54 5.08 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.8 11.95) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 11.95) (end 1.8 11.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 -1.8) (end -1.8 11.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.33 1.27) (end 1.33 11.49) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end -1.33 11.49) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 11.49) (end 1.33 11.49) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start -1.27 11.43) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 11.43) (end -1.27 11.43) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 -1.27) (end 1.27 11.43) (layer F.Fab) (width 0.1)) + (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) + (fp_text user %R (at 0 5.08) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 5 thru_hole oval (at 0 10.16 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 32 ROTARY_BUTTON)) + (pad 4 thru_hole oval (at 0 7.62 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 31 ROTARY_DT)) + (pad 3 thru_hole oval (at 0 5.08 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 30 ROTARY_CLR)) + (pad 2 thru_hole oval (at 0 2.54 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 29 3.3V)) + (pad 1 thru_hole rect (at 0 0 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 15 GND)) + (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x05_P2.54mm_Vertical.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module adafruit:0207_9 (layer F.Cu) (tedit 200000) (tstamp 5F7A1AB3) + (at 176.53 46.99) + (path /5F7995ED) + (attr virtual) + (fp_text reference R5 (at 0.127 2.54) (layer F.SilkS) + (effects (font (size 1.27 1.27) (thickness 0.127))) + ) + (fp_text value 4,7k (at 0 0) (layer F.SilkS) + (effects (font (size 1.27 1.27) (thickness 0.127))) + ) + (fp_line (start 3.175 0.889) (end 3.175 -0.889) (layer F.SilkS) (width 0.1524)) + (fp_line (start 2.921 1.143) (end 2.54 1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start 2.921 -1.143) (end 2.54 -1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start 2.413 1.016) (end -2.413 1.016) (layer F.SilkS) (width 0.1524)) + (fp_line (start 2.413 1.016) (end 2.54 1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start 2.413 -1.016) (end -2.413 -1.016) (layer F.SilkS) (width 0.1524)) + (fp_line (start 2.413 -1.016) (end 2.54 -1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start -2.413 1.016) (end -2.54 1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start -2.921 1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start -2.413 -1.016) (end -2.54 -1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start -2.921 -1.143) (end -2.54 -1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start -3.175 0.889) (end -3.175 -0.889) (layer F.SilkS) (width 0.1524)) + (fp_line (start -4.0386 0.3048) (end -4.0386 -0.3048) (layer F.SilkS) (width 0.06604)) + (fp_line (start -4.0386 -0.3048) (end -3.175 -0.3048) (layer F.SilkS) (width 0.06604)) + (fp_line (start -3.175 0.3048) (end -3.175 -0.3048) (layer F.SilkS) (width 0.06604)) + (fp_line (start -4.0386 0.3048) (end -3.175 0.3048) (layer F.SilkS) (width 0.06604)) + (fp_line (start 3.175 0.3048) (end 3.175 -0.3048) (layer F.SilkS) (width 0.06604)) + (fp_line (start 3.175 -0.3048) (end 4.0386 -0.3048) (layer F.SilkS) (width 0.06604)) + (fp_line (start 4.0386 0.3048) (end 4.0386 -0.3048) (layer F.SilkS) (width 0.06604)) + (fp_line (start 3.175 0.3048) (end 4.0386 0.3048) (layer F.SilkS) (width 0.06604)) + (fp_arc (start 2.921 -0.889) (end 2.921 -1.143) (angle 90) (layer F.SilkS) (width 0.1524)) + (fp_arc (start 2.921 0.889) (end 3.175 0.889) (angle 90) (layer F.SilkS) (width 0.1524)) + (fp_arc (start -2.921 0.889) (end -2.921 1.143) (angle 90) (layer F.SilkS) (width 0.1524)) + (fp_arc (start -2.921 -0.889) (end -3.175 -0.889) (angle 90) (layer F.SilkS) (width 0.1524)) + (pad 2 thru_hole circle (at 4.572 0) (size 1.6764 3.3528) (drill 0.8128) (layers *.Cu *.Paste *.Mask) + (net 16 GPIO-17)) + (pad 1 thru_hole circle (at -4.572 0) (size 1.6764 3.3528) (drill 0.8128) (layers *.Cu *.Paste *.Mask) + (net 14 "Net-(Q1-Pad2)")) + ) + + (module adafruit:0207_9 (layer F.Cu) (tedit 200000) (tstamp 5F7A1A95) + (at 176.53 40.64) + (path /5F798E7D) + (attr virtual) + (fp_text reference R4 (at 0 2.54) (layer F.SilkS) + (effects (font (size 1.27 1.27) (thickness 0.127))) + ) + (fp_text value 10k (at 0 0) (layer F.SilkS) + (effects (font (size 1.27 1.27) (thickness 0.127))) + ) + (fp_line (start 3.175 0.889) (end 3.175 -0.889) (layer F.SilkS) (width 0.1524)) + (fp_line (start 2.921 1.143) (end 2.54 1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start 2.921 -1.143) (end 2.54 -1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start 2.413 1.016) (end -2.413 1.016) (layer F.SilkS) (width 0.1524)) + (fp_line (start 2.413 1.016) (end 2.54 1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start 2.413 -1.016) (end -2.413 -1.016) (layer F.SilkS) (width 0.1524)) + (fp_line (start 2.413 -1.016) (end 2.54 -1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start -2.413 1.016) (end -2.54 1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start -2.921 1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start -2.413 -1.016) (end -2.54 -1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start -2.921 -1.143) (end -2.54 -1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start -3.175 0.889) (end -3.175 -0.889) (layer F.SilkS) (width 0.1524)) + (fp_line (start -4.0386 0.3048) (end -4.0386 -0.3048) (layer F.SilkS) (width 0.06604)) + (fp_line (start -4.0386 -0.3048) (end -3.175 -0.3048) (layer F.SilkS) (width 0.06604)) + (fp_line (start -3.175 0.3048) (end -3.175 -0.3048) (layer F.SilkS) (width 0.06604)) + (fp_line (start -4.0386 0.3048) (end -3.175 0.3048) (layer F.SilkS) (width 0.06604)) + (fp_line (start 3.175 0.3048) (end 3.175 -0.3048) (layer F.SilkS) (width 0.06604)) + (fp_line (start 3.175 -0.3048) (end 4.0386 -0.3048) (layer F.SilkS) (width 0.06604)) + (fp_line (start 4.0386 0.3048) (end 4.0386 -0.3048) (layer F.SilkS) (width 0.06604)) + (fp_line (start 3.175 0.3048) (end 4.0386 0.3048) (layer F.SilkS) (width 0.06604)) + (fp_arc (start 2.921 -0.889) (end 2.921 -1.143) (angle 90) (layer F.SilkS) (width 0.1524)) + (fp_arc (start 2.921 0.889) (end 3.175 0.889) (angle 90) (layer F.SilkS) (width 0.1524)) + (fp_arc (start -2.921 0.889) (end -2.921 1.143) (angle 90) (layer F.SilkS) (width 0.1524)) + (fp_arc (start -2.921 -0.889) (end -3.175 -0.889) (angle 90) (layer F.SilkS) (width 0.1524)) + (pad 2 thru_hole circle (at 4.572 0) (size 1.6764 3.3528) (drill 0.8128) (layers *.Cu *.Paste *.Mask) + (net 15 GND)) + (pad 1 thru_hole circle (at -4.572 0) (size 1.6764 3.3528) (drill 0.8128) (layers *.Cu *.Paste *.Mask) + (net 14 "Net-(Q1-Pad2)")) + ) + + (module adafruit:0207_9 (layer F.Cu) (tedit 200000) (tstamp 5F7A1A77) + (at 164.592 46.99 180) + (path /5F79873B) + (attr virtual) + (fp_text reference R1 (at -0.508 -2.54) (layer F.SilkS) + (effects (font (size 1.27 1.27) (thickness 0.127))) + ) + (fp_text value 10k (at -0.508 0) (layer F.SilkS) + (effects (font (size 1.27 1.27) (thickness 0.127))) + ) + (fp_line (start 3.175 0.889) (end 3.175 -0.889) (layer F.SilkS) (width 0.1524)) + (fp_line (start 2.921 1.143) (end 2.54 1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start 2.921 -1.143) (end 2.54 -1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start 2.413 1.016) (end -2.413 1.016) (layer F.SilkS) (width 0.1524)) + (fp_line (start 2.413 1.016) (end 2.54 1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start 2.413 -1.016) (end -2.413 -1.016) (layer F.SilkS) (width 0.1524)) + (fp_line (start 2.413 -1.016) (end 2.54 -1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start -2.413 1.016) (end -2.54 1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start -2.921 1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start -2.413 -1.016) (end -2.54 -1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start -2.921 -1.143) (end -2.54 -1.143) (layer F.SilkS) (width 0.1524)) + (fp_line (start -3.175 0.889) (end -3.175 -0.889) (layer F.SilkS) (width 0.1524)) + (fp_line (start -4.0386 0.3048) (end -4.0386 -0.3048) (layer F.SilkS) (width 0.06604)) + (fp_line (start -4.0386 -0.3048) (end -3.175 -0.3048) (layer F.SilkS) (width 0.06604)) + (fp_line (start -3.175 0.3048) (end -3.175 -0.3048) (layer F.SilkS) (width 0.06604)) + (fp_line (start -4.0386 0.3048) (end -3.175 0.3048) (layer F.SilkS) (width 0.06604)) + (fp_line (start 3.175 0.3048) (end 3.175 -0.3048) (layer F.SilkS) (width 0.06604)) + (fp_line (start 3.175 -0.3048) (end 4.0386 -0.3048) (layer F.SilkS) (width 0.06604)) + (fp_line (start 4.0386 0.3048) (end 4.0386 -0.3048) (layer F.SilkS) (width 0.06604)) + (fp_line (start 3.175 0.3048) (end 4.0386 0.3048) (layer F.SilkS) (width 0.06604)) + (fp_arc (start 2.921 -0.889) (end 2.921 -1.143) (angle 90) (layer F.SilkS) (width 0.1524)) + (fp_arc (start 2.921 0.889) (end 3.175 0.889) (angle 90) (layer F.SilkS) (width 0.1524)) + (fp_arc (start -2.921 0.889) (end -2.921 1.143) (angle 90) (layer F.SilkS) (width 0.1524)) + (fp_arc (start -2.921 -0.889) (end -3.175 -0.889) (angle 90) (layer F.SilkS) (width 0.1524)) + (pad 2 thru_hole circle (at 4.572 0 180) (size 1.6764 3.3528) (drill 0.8128) (layers *.Cu *.Paste *.Mask) + (net 42 "Net-(Q1-Pad1)")) + (pad 1 thru_hole circle (at -4.572 0 180) (size 1.6764 3.3528) (drill 0.8128) (layers *.Cu *.Paste *.Mask) + (net 37 VCC)) + ) + + (module Package_TO_SOT_THT:TO-220-3_Vertical (layer F.Cu) (tedit 5AC8BA0D) (tstamp 5F78F3DE) + (at 166.37 41.91 90) + (descr "TO-220-3, Vertical, RM 2.54mm, see https://www.vishay.com/docs/66542/to-220-1.pdf") + (tags "TO-220-3 Vertical RM 2.54mm") + (path /5F78F572) + (fp_text reference Q2 (at 2.54 -4.27 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value IRF9540N (at 2.54 2.5 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -2.46 -3.15) (end -2.46 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start -2.46 1.25) (end 7.54 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 7.54 1.25) (end 7.54 -3.15) (layer F.Fab) (width 0.1)) + (fp_line (start 7.54 -3.15) (end -2.46 -3.15) (layer F.Fab) (width 0.1)) + (fp_line (start -2.46 -1.88) (end 7.54 -1.88) (layer F.Fab) (width 0.1)) + (fp_line (start 0.69 -3.15) (end 0.69 -1.88) (layer F.Fab) (width 0.1)) + (fp_line (start 4.39 -3.15) (end 4.39 -1.88) (layer F.Fab) (width 0.1)) + (fp_line (start -2.58 -3.27) (end 7.66 -3.27) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.58 1.371) (end 7.66 1.371) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.58 -3.27) (end -2.58 1.371) (layer F.SilkS) (width 0.12)) + (fp_line (start 7.66 -3.27) (end 7.66 1.371) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.58 -1.76) (end 7.66 -1.76) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.69 -3.27) (end 0.69 -1.76) (layer F.SilkS) (width 0.12)) + (fp_line (start 4.391 -3.27) (end 4.391 -1.76) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.71 -3.4) (end -2.71 1.51) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.71 1.51) (end 7.79 1.51) (layer F.CrtYd) (width 0.05)) + (fp_line (start 7.79 1.51) (end 7.79 -3.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start 7.79 -3.4) (end -2.71 -3.4) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 2.54 -4.27 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 3 thru_hole oval (at 5.08 0 90) (size 1.905 2) (drill 1.1) (layers *.Cu *.Mask) + (net 37 VCC)) + (pad 2 thru_hole oval (at 2.54 0 90) (size 1.905 2) (drill 1.1) (layers *.Cu *.Mask) + (net 23 SWITCHED_VCC)) + (pad 1 thru_hole rect (at 0 0 90) (size 1.905 2) (drill 1.1) (layers *.Cu *.Mask) + (net 42 "Net-(Q1-Pad1)")) + (model ${KISYS3DMOD}/Package_TO_SOT_THT.3dshapes/TO-220-3_Vertical.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Package_TO_SOT_THT:TO-92_Inline_Wide (layer F.Cu) (tedit 5A02FF81) (tstamp 5F78EA5C) + (at 172.72 53.34 180) + (descr "TO-92 leads in-line, wide, drill 0.75mm (see NXP sot054_po.pdf)") + (tags "to-92 sc-43 sc-43a sot54 PA33 transistor") + (path /5F78DA7C) + (fp_text reference Q1 (at 2.54 -3.56) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value BC337 (at 2.54 2.79) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 0.74 1.85) (end 4.34 1.85) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.8 1.75) (end 4.3 1.75) (layer F.Fab) (width 0.1)) + (fp_line (start -1.01 -2.73) (end 6.09 -2.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.01 -2.73) (end -1.01 2.01) (layer F.CrtYd) (width 0.05)) + (fp_line (start 6.09 2.01) (end 6.09 -2.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start 6.09 2.01) (end -1.01 2.01) (layer F.CrtYd) (width 0.05)) + (fp_arc (start 2.54 0) (end 4.34 1.85) (angle -20) (layer F.SilkS) (width 0.12)) + (fp_arc (start 2.54 0) (end 2.54 -2.48) (angle -135) (layer F.Fab) (width 0.1)) + (fp_arc (start 2.54 0) (end 2.54 -2.48) (angle 135) (layer F.Fab) (width 0.1)) + (fp_arc (start 2.54 0) (end 2.54 -2.6) (angle 65) (layer F.SilkS) (width 0.12)) + (fp_arc (start 2.54 0) (end 2.54 -2.6) (angle -65) (layer F.SilkS) (width 0.12)) + (fp_arc (start 2.54 0) (end 0.74 1.85) (angle 20) (layer F.SilkS) (width 0.12)) + (fp_text user %R (at 2.54 0) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 1 thru_hole rect (at 0 0 180) (size 1.5 1.5) (drill 0.8) (layers *.Cu *.Mask) + (net 42 "Net-(Q1-Pad1)")) + (pad 3 thru_hole circle (at 5.08 0 180) (size 1.5 1.5) (drill 0.8) (layers *.Cu *.Mask) + (net 15 GND)) + (pad 2 thru_hole circle (at 2.54 0 180) (size 1.5 1.5) (drill 0.8) (layers *.Cu *.Mask) + (net 14 "Net-(Q1-Pad2)")) + (model ${KISYS3DMOD}/Package_TO_SOT_THT.3dshapes/TO-92_Inline_Wide.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (gr_line (start 133.35 109.22) (end 133.35 34.29) (layer Edge.Cuts) (width 0.05)) + (gr_line (start 201.93 113.03) (end 137.16 113.03) (layer Edge.Cuts) (width 0.05)) + (gr_line (start 205.74 34.29) (end 205.74 109.22) (layer Edge.Cuts) (width 0.05)) + (gr_line (start 201.93 30.48) (end 137.16 30.48) (layer Edge.Cuts) (width 0.05)) + (gr_arc (start 137.16 34.29) (end 137.16 30.48) (angle -90) (layer Edge.Cuts) (width 0.05)) + (gr_arc (start 137.16 109.22) (end 133.35 109.22) (angle -90) (layer Edge.Cuts) (width 0.05)) + (gr_arc (start 201.93 109.22) (end 201.93 113.03) (angle -90) (layer Edge.Cuts) (width 0.05)) + (gr_arc (start 201.93 34.29) (end 205.74 34.29) (angle -90) (layer Edge.Cuts) (width 0.05)) + (gr_text GAIN (at 147.33524 53.00726 90) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text "Tonuino ESP-32 I2S V0.1\nCC-BY-SA mariolukas.de " (at 201.93 83.82 90) (layer F.SilkS) + (effects (font (size 1.27 1.27) (thickness 0.15))) + ) + (gr_text CS (at 177.8762 64.52616 90) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text SCK (at 180.45938 64.10452 90) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text MOSI (at 182.96382 63.92418 90) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text MISO (at 185.4073 63.96482 90) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text 5V (at 188.17082 64.68618 90) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text GND (at 190.6143 64.34582 90) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text BTN (at 190.63208 56.0578 90) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text DT (at 188.10224 55.75808 90) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text CLR (at 185.43016 56.1086 90) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text "3.3V\n" (at 182.78348 56.26608 90) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text "GND\n" (at 180.35778 56.1213 90) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text GND (at 202.16876 40.6908) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text 5V (at 201.7141 35.60064) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text DI (at 201.56678 38.3159) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text 5V (at 155.25242 52.49418 90) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text DIN (at 144.87144 52.78882 90) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text BCLK (at 142.28572 53.26888 90) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text LRC (at 139.80414 52.94376 90) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text "SD\n" (at 149.99208 52.52974 90) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text GND (at 152.54986 52.91328 90) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text 3.3V (at 202.24242 65.8495) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text "RST\n" (at 202.0189 63.54826) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text GND (at 202.06208 60.93714) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text MISO (at 202.26274 55.9435) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text MOSI (at 202.26274 53.32222) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text "SDA\n" (at 201.93 48.26) (layer F.SilkS) + (effects (font (size 0.762 0.762) (thickness 0.0635))) + ) + (gr_text GND (at 175.24476 32.55518 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (gr_text "GND\n" (at 175.26 33.02) (layer F.CrtYd) + (effects (font (size 1 1) (thickness 0.15))) + ) + (gr_text 5V (at 177.8 33.02) (layer F.CrtYd) + (effects (font (size 1 1) (thickness 0.15))) + ) + (gr_text "-\n" (at 177.8 33.02) (layer F.CrtYd) + (effects (font (size 1 1) (thickness 0.15))) + ) + (gr_text - (at 175.26 33.02) (layer F.CrtYd) + (effects (font (size 1 1) (thickness 0.15))) + ) + (gr_text "5V\n" (at 177.85588 33.13176 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (gr_line (start 173.99 102.87) (end 194.31 102.87) (layer F.SilkS) (width 0.12) (tstamp 5F7B4106)) + (gr_line (start 194.31 66.04) (end 173.99 66.04) (layer F.SilkS) (width 0.12) (tstamp 5F7B4105)) + (gr_line (start 194.31 102.87) (end 194.31 66.04) (layer F.SilkS) (width 0.12)) + (gr_line (start 173.99 66.04) (end 173.99 102.87) (layer F.SilkS) (width 0.12)) + + (segment (start 160.02 46.99) (end 160.02 45.72) (width 0.4) (layer B.Cu) (net 42)) + (segment (start 163.83 41.91) (end 166.37 41.91) (width 0.4) (layer B.Cu) (net 42)) + (segment (start 160.02 45.72) (end 163.83 41.91) (width 0.4) (layer B.Cu) (net 42)) + (segment (start 171.958 40.64) (end 171.958 46.99) (width 0.4) (layer B.Cu) (net 14)) + (segment (start 170.18 53.34) (end 170.18 50.8) (width 0.4) (layer B.Cu) (net 14)) + (segment (start 171.958 49.022) (end 171.958 46.99) (width 0.4) (layer B.Cu) (net 14)) + (segment (start 170.18 50.8) (end 171.958 49.022) (width 0.4) (layer B.Cu) (net 14)) + (via (at 193.04 64.77) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 15)) + (via (at 153.67 72.39) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 15)) + (segment (start 181.102 46.99) (end 177.8 46.99) (width 0.4) (layer F.Cu) (net 16)) + (via (at 157.48 78.74) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 16)) + (segment (start 157.48 62.23) (end 157.48 78.74) (width 0.4) (layer F.Cu) (net 16)) + (segment (start 163.83 55.88) (end 157.48 62.23) (width 0.4) (layer F.Cu) (net 16)) + (via (at 162.56 85.09) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 16)) + (segment (start 157.48 80.01) (end 162.56 85.09) (width 0.4) (layer B.Cu) (net 16)) + (segment (start 157.48 78.74) (end 157.48 80.01) (width 0.4) (layer B.Cu) (net 16)) + (segment (start 165.11 87.64) (end 166.37 87.64) (width 0.4) (layer F.Cu) (net 16)) + (segment (start 162.56 85.09) (end 165.11 87.64) (width 0.4) (layer F.Cu) (net 16)) + (segment (start 163.83 55.88) (end 173.99 55.88) (width 0.4) (layer F.Cu) (net 16)) + (segment (start 173.99 55.88) (end 175.26 54.61) (width 0.4) (layer F.Cu) (net 16)) + (segment (start 175.26 54.61) (end 175.26 48.26) (width 0.4) (layer F.Cu) (net 16)) + (segment (start 175.26 48.26) (end 176.53 46.99) (width 0.4) (layer F.Cu) (net 16)) + (segment (start 176.53 46.99) (end 177.8 46.99) (width 0.4) (layer F.Cu) (net 16)) + (segment (start 181.102 46.99) (end 182.372 48.26) (width 0.4) (layer B.Cu) (net 16)) + (segment (start 182.372 48.26) (end 195.58 48.26) (width 0.4) (layer B.Cu) (net 16)) + (segment (start 195.58 48.26) (end 198.12 45.72) (width 0.4) (layer B.Cu) (net 16)) + (segment (start 198.12 45.72) (end 200.66 45.72) (width 0.4) (layer B.Cu) (net 16)) + (segment (start 200.66 45.72) (end 201.93 46.99) (width 0.4) (layer B.Cu) (net 16)) + (segment (start 201.93 46.99) (end 201.93 64.77) (width 0.4) (layer B.Cu) (net 16)) + (segment (start 201.93 64.77) (end 200.66 66.04) (width 0.4) (layer B.Cu) (net 16)) + (segment (start 199.39 66.04) (end 200.66 66.04) (width 0.4) (layer B.Cu) (net 16)) + (segment (start 177.8 68.58) (end 177.8 99.06) (width 0.4) (layer F.Cu) (net 19)) + (segment (start 176.52 100.34) (end 166.37 100.34) (width 0.4) (layer F.Cu) (net 19)) + (segment (start 177.8 99.06) (end 176.52 100.34) (width 0.4) (layer F.Cu) (net 19)) + (segment (start 179.07 86.36) (end 182.88 82.55) (width 0.4) (layer B.Cu) (net 20)) + (segment (start 153.67 86.36) (end 179.07 86.36) (width 0.4) (layer B.Cu) (net 20)) + (segment (start 149.85 90.18) (end 153.67 86.36) (width 0.4) (layer B.Cu) (net 20)) + (segment (start 140.97 90.18) (end 149.85 90.18) (width 0.4) (layer B.Cu) (net 20)) + (segment (start 182.88 71.12) (end 180.34 68.58) (width 0.4) (layer B.Cu) (net 20)) + (segment (start 182.88 82.55) (end 182.88 71.12) (width 0.4) (layer B.Cu) (net 20)) + (segment (start 177.8 88.9) (end 152.4 88.9) (width 0.4) (layer B.Cu) (net 21)) + (segment (start 143.5 97.8) (end 140.97 97.8) (width 0.4) (layer B.Cu) (net 21)) + (segment (start 152.4 88.9) (end 143.5 97.8) (width 0.4) (layer B.Cu) (net 21)) + (segment (start 182.88 68.58) (end 182.88 69.85) (width 0.4) (layer B.Cu) (net 21)) + (segment (start 182.88 69.85) (end 184.15 71.12) (width 0.4) (layer B.Cu) (net 21)) + (segment (start 184.15 82.55) (end 177.8 88.9) (width 0.4) (layer B.Cu) (net 21)) + (segment (start 184.15 71.12) (end 184.15 82.55) (width 0.4) (layer B.Cu) (net 21)) + (segment (start 166.37 90.18) (end 177.79 90.18) (width 0.4) (layer B.Cu) (net 22)) + (segment (start 177.79 90.18) (end 185.42 82.55) (width 0.4) (layer B.Cu) (net 22)) + (segment (start 185.42 82.55) (end 185.42 68.58) (width 0.4) (layer B.Cu) (net 22)) + (segment (start 199.39 36.249998) (end 199.39 35.56) (width 0.4) (layer F.Cu) (net 23)) + (segment (start 187.96 68.58) (end 187.96 66.04) (width 0.4) (layer F.Cu) (net 23)) + (segment (start 187.96 66.04) (end 195.58 58.42) (width 0.4) (layer F.Cu) (net 23)) + (segment (start 195.58 46.870002) (end 199.270002 43.18) (width 0.4) (layer F.Cu) (net 23)) + (segment (start 195.58 58.42) (end 195.58 46.870002) (width 0.4) (layer F.Cu) (net 23)) + (segment (start 199.270002 43.18) (end 200.66 43.18) (width 0.4) (layer F.Cu) (net 23)) + (segment (start 200.66 43.18) (end 201.93 41.91) (width 0.4) (layer F.Cu) (net 23)) + (segment (start 201.93 41.91) (end 201.93 36.83) (width 0.4) (layer F.Cu) (net 23)) + (segment (start 201.93 36.83) (end 200.66 35.56) (width 0.4) (layer F.Cu) (net 23)) + (segment (start 200.66 35.56) (end 199.39 35.56) (width 0.4) (layer F.Cu) (net 23)) + (segment (start 154.94 50.11928) (end 155.00604 50.18532) (width 0.4) (layer B.Cu) (net 23)) + (segment (start 155.00604 50.18532) (end 155.00604 46.9011) (width 0.4) (layer F.Cu) (net 23)) + (segment (start 162.53714 39.37) (end 166.37 39.37) (width 0.4) (layer F.Cu) (net 23)) + (segment (start 155.00604 46.9011) (end 162.53714 39.37) (width 0.4) (layer F.Cu) (net 23)) + (segment (start 199.39 35.56) (end 195.58 31.75) (width 0.4) (layer B.Cu) (net 23)) + (segment (start 195.58 31.75) (end 165.92804 31.75) (width 0.4) (layer B.Cu) (net 23)) + (segment (start 165.92804 31.75) (end 163.52012 34.15792) (width 0.4) (layer B.Cu) (net 23)) + (segment (start 163.52012 34.15792) (end 163.52012 38.34384) (width 0.4) (layer B.Cu) (net 23)) + (segment (start 164.54628 39.37) (end 166.37 39.37) (width 0.4) (layer B.Cu) (net 23)) + (segment (start 163.52012 38.34384) (end 164.54628 39.37) (width 0.4) (layer B.Cu) (net 23)) + (segment (start 199.39 48.26) (end 185.42 62.23) (width 0.4) (layer B.Cu) (net 24)) + (segment (start 185.42 62.23) (end 168.91 62.23) (width 0.4) (layer B.Cu) (net 24)) + (segment (start 168.91 62.23) (end 167.64 63.5) (width 0.4) (layer B.Cu) (net 24)) + (segment (start 167.64 63.5) (end 165.1 63.5) (width 0.4) (layer B.Cu) (net 24)) + (segment (start 165.1 63.5) (end 163.83 64.77) (width 0.4) (layer B.Cu) (net 24)) + (segment (start 163.83 64.77) (end 163.83 73.66) (width 0.4) (layer B.Cu) (net 24)) + (segment (start 165.11 74.94) (end 166.37 74.94) (width 0.4) (layer B.Cu) (net 24)) + (segment (start 163.83 73.66) (end 165.11 74.94) (width 0.4) (layer B.Cu) (net 24)) + (segment (start 199.950003 54.629999) (end 195.560001 54.629999) (width 0.4) (layer B.Cu) (net 25)) + (segment (start 200.640001 53.940001) (end 199.950003 54.629999) (width 0.4) (layer B.Cu) (net 25)) + (segment (start 200.640001 52.050001) (end 200.640001 53.940001) (width 0.4) (layer B.Cu) (net 25)) + (segment (start 199.39 50.8) (end 200.640001 52.050001) (width 0.4) (layer B.Cu) (net 25)) + (segment (start 195.560001 54.629999) (end 185.42 64.77) (width 0.4) (layer B.Cu) (net 25)) + (segment (start 185.42 64.77) (end 170.18 64.77) (width 0.4) (layer B.Cu) (net 25)) + (segment (start 170.18 64.77) (end 168.91 66.04) (width 0.4) (layer B.Cu) (net 25)) + (segment (start 168.91 66.04) (end 168.91 81.28) (width 0.4) (layer B.Cu) (net 25)) + (segment (start 167.63 82.56) (end 166.37 82.56) (width 0.4) (layer B.Cu) (net 25)) + (segment (start 168.91 81.28) (end 167.63 82.56) (width 0.4) (layer B.Cu) (net 25)) + (segment (start 199.39 53.34) (end 195.58 53.34) (width 0.4) (layer B.Cu) (net 26)) + (segment (start 195.58 53.34) (end 185.42 63.5) (width 0.4) (layer B.Cu) (net 26)) + (segment (start 185.42 63.5) (end 168.91 63.5) (width 0.4) (layer B.Cu) (net 26)) + (segment (start 167.63 64.78) (end 166.37 64.78) (width 0.4) (layer B.Cu) (net 26)) + (segment (start 168.91 63.5) (end 167.63 64.78) (width 0.4) (layer B.Cu) (net 26)) + (segment (start 199.39 55.88) (end 195.58 55.88) (width 0.4) (layer B.Cu) (net 27)) + (segment (start 195.58 55.88) (end 185.42 66.04) (width 0.4) (layer B.Cu) (net 27)) + (segment (start 185.42 66.04) (end 171.45 66.04) (width 0.4) (layer B.Cu) (net 27)) + (segment (start 171.45 66.04) (end 170.18 67.31) (width 0.4) (layer B.Cu) (net 27)) + (segment (start 170.18 67.31) (end 170.18 81.28) (width 0.4) (layer B.Cu) (net 27)) + (segment (start 170.18 81.28) (end 167.64 83.82) (width 0.4) (layer B.Cu) (net 27)) + (segment (start 167.64 83.82) (end 165.1 83.82) (width 0.4) (layer B.Cu) (net 27)) + (segment (start 165.1 83.82) (end 163.83 82.55) (width 0.4) (layer B.Cu) (net 27)) + (segment (start 163.83 82.55) (end 163.83 81.28) (width 0.4) (layer B.Cu) (net 27)) + (segment (start 165.09 80.02) (end 166.37 80.02) (width 0.4) (layer B.Cu) (net 27)) + (segment (start 163.83 81.28) (end 165.09 80.02) (width 0.4) (layer B.Cu) (net 27)) + (via (at 180.34 72.39) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 28)) + (segment (start 190.5 72.39) (end 180.34 72.39) (width 0.4) (layer F.Cu) (net 28)) + (segment (start 199.39 63.5) (end 190.5 72.39) (width 0.4) (layer F.Cu) (net 28)) + (via (at 171.45 71.12) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 28)) + (segment (start 172.72 72.39) (end 171.45 71.12) (width 0.4) (layer B.Cu) (net 28)) + (segment (start 180.34 72.39) (end 172.72 72.39) (width 0.4) (layer B.Cu) (net 28)) + (segment (start 167.65 67.32) (end 166.37 67.32) (width 0.4) (layer F.Cu) (net 28)) + (segment (start 171.45 71.12) (end 167.65 67.32) (width 0.4) (layer F.Cu) (net 28)) + (segment (start 182.88 53.34) (end 185.42 50.8) (width 0.4) (layer B.Cu) (net 29)) + (segment (start 185.42 50.8) (end 191.77 50.8) (width 0.4) (layer B.Cu) (net 29)) + (segment (start 191.77 50.8) (end 193.04 52.07) (width 0.4) (layer B.Cu) (net 29)) + (segment (start 193.04 52.07) (end 193.04 53.34) (width 0.4) (layer B.Cu) (net 29)) + (segment (start 193.04 53.34) (end 185.42 60.96) (width 0.4) (layer B.Cu) (net 29)) + (segment (start 185.42 60.96) (end 148.59 60.96) (width 0.4) (layer B.Cu) (net 29)) + (segment (start 148.59 60.96) (end 147.32 62.23) (width 0.4) (layer B.Cu) (net 29)) + (segment (start 147.32 62.23) (end 147.32 73.66) (width 0.4) (layer B.Cu) (net 29)) + (segment (start 147.32 73.66) (end 142.24 78.74) (width 0.4) (layer B.Cu) (net 29)) + (segment (start 142.24 78.74) (end 139.7 78.74) (width 0.4) (layer B.Cu) (net 29)) + (segment (start 139.7 78.74) (end 138.43 77.47) (width 0.4) (layer B.Cu) (net 29)) + (segment (start 138.43 64.78) (end 140.97 62.24) (width 0.4) (layer B.Cu) (net 29)) + (segment (start 138.43 77.47) (end 138.43 64.78) (width 0.4) (layer B.Cu) (net 29)) + (segment (start 143.51 69.86) (end 140.97 72.4) (width 0.4) (layer B.Cu) (net 30)) + (segment (start 144.78 57.15) (end 143.51 58.42) (width 0.4) (layer B.Cu) (net 30)) + (segment (start 143.51 58.42) (end 143.51 69.86) (width 0.4) (layer B.Cu) (net 30)) + (segment (start 185.42 53.34) (end 181.61 57.15) (width 0.4) (layer B.Cu) (net 30)) + (segment (start 181.61 57.15) (end 144.78 57.15) (width 0.4) (layer B.Cu) (net 30)) + (segment (start 144.78 71.13) (end 140.97 74.94) (width 0.4) (layer B.Cu) (net 31)) + (segment (start 182.88 58.42) (end 146.05 58.42) (width 0.4) (layer B.Cu) (net 31)) + (segment (start 144.78 59.69) (end 144.78 71.13) (width 0.4) (layer B.Cu) (net 31)) + (segment (start 146.05 58.42) (end 144.78 59.69) (width 0.4) (layer B.Cu) (net 31)) + (segment (start 187.96 53.34) (end 182.88 58.42) (width 0.4) (layer B.Cu) (net 31)) + (segment (start 146.05 72.4) (end 140.97 77.48) (width 0.4) (layer B.Cu) (net 32)) + (segment (start 147.32 59.69) (end 146.05 60.96) (width 0.4) (layer B.Cu) (net 32)) + (segment (start 184.15 59.69) (end 147.32 59.69) (width 0.4) (layer B.Cu) (net 32)) + (segment (start 146.05 60.96) (end 146.05 72.4) (width 0.4) (layer B.Cu) (net 32)) + (segment (start 190.5 53.34) (end 184.15 59.69) (width 0.4) (layer B.Cu) (net 32)) + (segment (start 160.01 80.02) (end 140.97 80.02) (width 0.4) (layer F.Cu) (net 33)) + (segment (start 175.26 58.42) (end 163.83 58.42) (width 0.4) (layer F.Cu) (net 33)) + (segment (start 177.8 55.88) (end 175.26 58.42) (width 0.4) (layer F.Cu) (net 33)) + (segment (start 189.23 45.72) (end 189.23 49.53) (width 0.4) (layer F.Cu) (net 33)) + (segment (start 177.8 52.07) (end 177.8 55.88) (width 0.4) (layer F.Cu) (net 33)) + (segment (start 179.07 50.8) (end 177.8 52.07) (width 0.4) (layer F.Cu) (net 33)) + (segment (start 162.56 59.69) (end 162.56 77.47) (width 0.4) (layer F.Cu) (net 33)) + (segment (start 163.83 58.42) (end 162.56 59.69) (width 0.4) (layer F.Cu) (net 33)) + (segment (start 187.96 50.8) (end 179.07 50.8) (width 0.4) (layer F.Cu) (net 33)) + (segment (start 162.56 77.47) (end 160.01 80.02) (width 0.4) (layer F.Cu) (net 33)) + (segment (start 189.23 49.53) (end 187.96 50.8) (width 0.4) (layer F.Cu) (net 33)) + (segment (start 189.23 35.56) (end 190.5 35.56) (width 0.4) (layer F.Cu) (net 34)) + (segment (start 190.5 35.56) (end 193.64001 38.70001) (width 0.4) (layer F.Cu) (net 34)) + (segment (start 193.64001 38.70001) (end 193.64001 56.54999) (width 0.4) (layer F.Cu) (net 34)) + (segment (start 193.64001 56.54999) (end 184.75001 65.43999) (width 0.4) (layer F.Cu) (net 34)) + (segment (start 174.59001 65.43999) (end 172.72 67.31) (width 0.4) (layer F.Cu) (net 34)) + (segment (start 184.75001 65.43999) (end 174.59001 65.43999) (width 0.4) (layer F.Cu) (net 34)) + (segment (start 172.72 91.44) (end 171.45 92.71) (width 0.4) (layer F.Cu) (net 34)) + (segment (start 172.72 67.31) (end 172.72 91.44) (width 0.4) (layer F.Cu) (net 34)) + (segment (start 166.38 92.71) (end 166.37 92.72) (width 0.4) (layer F.Cu) (net 34)) + (segment (start 171.45 92.71) (end 166.38 92.71) (width 0.4) (layer F.Cu) (net 34)) + (segment (start 189.23 40.64) (end 189.23 41.91) (width 0.4) (layer B.Cu) (net 35)) + (segment (start 189.23 40.64) (end 190.5 40.64) (width 0.4) (layer F.Cu) (net 35)) + (segment (start 190.5 40.64) (end 193.04 43.18) (width 0.4) (layer F.Cu) (net 35)) + (segment (start 193.04 43.18) (end 193.04 55.88) (width 0.4) (layer F.Cu) (net 35)) + (segment (start 193.04 55.88) (end 189.23 59.69) (width 0.4) (layer F.Cu) (net 35)) + (segment (start 189.23 59.69) (end 165.1 59.69) (width 0.4) (layer F.Cu) (net 35)) + (segment (start 165.1 59.69) (end 163.83 60.96) (width 0.4) (layer F.Cu) (net 35)) + (segment (start 163.83 60.96) (end 163.83 83.82) (width 0.4) (layer F.Cu) (net 35)) + (segment (start 165.11 85.1) (end 166.37 85.1) (width 0.4) (layer F.Cu) (net 35)) + (segment (start 163.83 83.82) (end 165.11 85.1) (width 0.4) (layer F.Cu) (net 35)) + (segment (start 147.434999 99.174999) (end 140.98 92.72) (width 0.4) (layer F.Cu) (net 36)) + (segment (start 171.335001 99.174999) (end 147.434999 99.174999) (width 0.4) (layer F.Cu) (net 36)) + (segment (start 194.31 43.18) (end 194.31 57.15) (width 0.4) (layer F.Cu) (net 36)) + (segment (start 175.26 66.04) (end 173.99 67.31) (width 0.4) (layer F.Cu) (net 36)) + (segment (start 185.42 66.04) (end 175.26 66.04) (width 0.4) (layer F.Cu) (net 36)) + (segment (start 140.98 92.72) (end 140.97 92.72) (width 0.4) (layer F.Cu) (net 36)) + (segment (start 194.31 57.15) (end 185.42 66.04) (width 0.4) (layer F.Cu) (net 36)) + (segment (start 173.99 96.52) (end 171.335001 99.174999) (width 0.4) (layer F.Cu) (net 36)) + (segment (start 173.99 67.31) (end 173.99 96.52) (width 0.4) (layer F.Cu) (net 36)) + (segment (start 199.39 38.1) (end 194.31 43.18) (width 0.4) (layer F.Cu) (net 36)) + (segment (start 168.91 39.37) (end 170.18 38.1) (width 0.4) (layer B.Cu) (net 37)) + (segment (start 170.18 38.1) (end 176.53 38.1) (width 0.4) (layer B.Cu) (net 37)) + (segment (start 177.8 36.83) (end 177.8 35.56) (width 0.4) (layer B.Cu) (net 37)) + (segment (start 176.53 38.1) (end 177.8 36.83) (width 0.4) (layer B.Cu) (net 37)) + (segment (start 168.91 46.736) (end 169.164 46.99) (width 0.4) (layer B.Cu) (net 37)) + (segment (start 168.91 39.37) (end 168.91 46.736) (width 0.4) (layer B.Cu) (net 37)) + (segment (start 140.97 107.96) (end 138.43 105.42) (width 0.4) (layer F.Cu) (net 37)) + (segment (start 138.43 105.42) (end 138.43 40.64) (width 0.4) (layer F.Cu) (net 37)) + (segment (start 138.43 40.64) (end 139.7 39.37) (width 0.4) (layer F.Cu) (net 37)) + (segment (start 139.7 39.37) (end 159.97428 39.37) (width 0.4) (layer F.Cu) (net 37)) + (segment (start 162.51428 36.83) (end 166.37 36.83) (width 0.4) (layer F.Cu) (net 37)) + (segment (start 159.97428 39.37) (end 162.51428 36.83) (width 0.4) (layer F.Cu) (net 37)) + (segment (start 167.64 38.1) (end 166.794271 37.254271) (width 0.4) (layer B.Cu) (net 37)) + (segment (start 170.18 38.1) (end 167.64 38.1) (width 0.4) (layer B.Cu) (net 37)) + (segment (start 138.24204 50.18532) (end 139.76604 50.18532) (width 0.4) (layer B.Cu) (net 38)) + (segment (start 137.16 82.55) (end 137.16 51.26736) (width 0.4) (layer B.Cu) (net 38)) + (segment (start 137.16 51.26736) (end 138.24204 50.18532) (width 0.4) (layer B.Cu) (net 38)) + (segment (start 139.71 85.1) (end 137.16 82.55) (width 0.4) (layer B.Cu) (net 38)) + (segment (start 140.97 85.1) (end 139.71 85.1) (width 0.4) (layer B.Cu) (net 38)) + (segment (start 144.84604 47.52594) (end 144.84604 50.18532) (width 0.4) (layer B.Cu) (net 39)) + (segment (start 144.16024 46.84014) (end 144.84604 47.52594) (width 0.4) (layer B.Cu) (net 39)) + (segment (start 140.97 82.56) (end 142.23 82.56) (width 0.4) (layer B.Cu) (net 39)) + (segment (start 134.62 48.32096) (end 136.10082 46.84014) (width 0.4) (layer B.Cu) (net 39)) + (segment (start 138.43 88.9) (end 134.62 85.09) (width 0.4) (layer B.Cu) (net 39)) + (segment (start 143.51 87.63) (end 142.24 88.9) (width 0.4) (layer B.Cu) (net 39)) + (segment (start 142.23 82.56) (end 142.24 82.55) (width 0.4) (layer B.Cu) (net 39)) + (segment (start 134.62 85.09) (end 134.62 48.32096) (width 0.4) (layer B.Cu) (net 39)) + (segment (start 142.24 82.55) (end 143.51 83.82) (width 0.4) (layer B.Cu) (net 39)) + (segment (start 136.10082 46.84014) (end 144.16024 46.84014) (width 0.4) (layer B.Cu) (net 39)) + (segment (start 142.24 88.9) (end 138.43 88.9) (width 0.4) (layer B.Cu) (net 39)) + (segment (start 143.51 83.82) (end 143.51 87.63) (width 0.4) (layer B.Cu) (net 39)) + (segment (start 142.30604 48.83912) (end 142.30604 50.18532) (width 0.4) (layer B.Cu) (net 40)) + (segment (start 141.5669 48.09998) (end 142.30604 48.83912) (width 0.4) (layer B.Cu) (net 40)) + (segment (start 140.97 87.64) (end 139.71 87.64) (width 0.4) (layer B.Cu) (net 40)) + (segment (start 136.89584 48.09998) (end 141.5669 48.09998) (width 0.4) (layer B.Cu) (net 40)) + (segment (start 135.89 83.82) (end 135.89 49.10582) (width 0.4) (layer B.Cu) (net 40)) + (segment (start 139.71 87.64) (end 135.89 83.82) (width 0.4) (layer B.Cu) (net 40)) + (segment (start 135.89 49.10582) (end 136.89584 48.09998) (width 0.4) (layer B.Cu) (net 40)) + (segment (start 172.72 53.34) (end 172.72 53.92674) (width 0.4) (layer F.Cu) (net 42)) + (segment (start 172.72 53.34) (end 172.31868 53.34) (width 0.4) (layer F.Cu) (net 42)) + (segment (start 166.37 47.39132) (end 166.37 41.91) (width 0.4) (layer F.Cu) (net 42)) + (segment (start 172.31868 53.34) (end 166.37 47.39132) (width 0.4) (layer F.Cu) (net 42)) + + (zone (net 15) (net_name GND) (layer B.Cu) (tstamp 0) (hatch edge 0.508) + (connect_pads (clearance 0.508)) + (min_thickness 0.254) + (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508)) + (polygon + (pts + (xy 215.9 27.94) (xy 215.9 114.3) (xy 212.09 120.65) (xy 132.08 120.65) (xy 127 114.3) + (xy 127 31.75) (xy 130.81 26.67) (xy 132.08 24.13) (xy 212.09 24.13) + ) + ) + (filled_polygon + (pts + (xy 168.316709 31.156709) (xy 168.290559 31.188573) (xy 165.808574 33.670559) (xy 165.77671 33.696709) (xy 165.740585 33.740728) + (xy 165.672364 33.823855) (xy 165.594828 33.968914) (xy 165.547082 34.126312) (xy 165.53096 34.29) (xy 165.535001 34.331028) + (xy 165.535001 35.45088) (xy 165.436265 35.503655) (xy 165.194537 35.702037) (xy 164.996155 35.943765) (xy 164.848745 36.219551) + (xy 164.75797 36.518796) (xy 164.727319 36.83) (xy 164.75797 37.141204) (xy 164.78589 37.233243) (xy 154.378579 47.640554) + (xy 154.346709 47.666709) (xy 154.254643 47.778893) (xy 154.242364 47.793855) (xy 154.164828 47.938914) (xy 154.117082 48.096312) + (xy 154.10096 48.26) (xy 154.105 48.301019) (xy 154.105 48.702275) (xy 154.031558 48.709508) (xy 153.91186 48.745818) + (xy 153.801546 48.804783) (xy 153.704855 48.884135) (xy 153.625503 48.980826) (xy 153.566538 49.09114) (xy 153.542074 49.171786) + (xy 153.466309 49.087732) (xy 153.23296 48.913679) (xy 152.970139 48.788495) (xy 152.82293 48.743844) (xy 152.59304 48.865165) + (xy 152.59304 50.05832) (xy 152.61304 50.05832) (xy 152.61304 50.31232) (xy 152.59304 50.31232) (xy 152.59304 51.505475) + (xy 152.82293 51.626796) (xy 152.970139 51.582145) (xy 153.23296 51.456961) (xy 153.466309 51.282908) (xy 153.542074 51.198854) + (xy 153.566538 51.2795) (xy 153.625503 51.389814) (xy 153.704855 51.486505) (xy 153.801546 51.565857) (xy 153.91186 51.624822) + (xy 154.031558 51.661132) (xy 154.15604 51.673392) (xy 155.85604 51.673392) (xy 155.980522 51.661132) (xy 156.10022 51.624822) + (xy 156.210534 51.565857) (xy 156.307225 51.486505) (xy 156.386577 51.389814) (xy 156.445542 51.2795) (xy 156.481852 51.159802) + (xy 156.494112 51.03532) (xy 156.494112 49.33532) (xy 156.481852 49.210838) (xy 156.445542 49.09114) (xy 156.386577 48.980826) + (xy 156.307225 48.884135) (xy 156.210534 48.804783) (xy 156.10022 48.745818) (xy 155.980522 48.709508) (xy 155.85604 48.697248) + (xy 155.775 48.697248) (xy 155.775 48.605867) (xy 164.752742 39.628126) (xy 164.75797 39.681204) (xy 164.848745 39.980449) + (xy 164.996155 40.256235) (xy 165.099446 40.382095) (xy 165.015506 40.426963) (xy 164.918815 40.506315) (xy 164.839463 40.603006) + (xy 164.780498 40.71332) (xy 164.744188 40.833018) (xy 164.731928 40.9575) (xy 164.731928 41.075) (xy 163.871018 41.075) + (xy 163.83 41.07096) (xy 163.788982 41.075) (xy 163.788981 41.075) (xy 163.666311 41.087082) (xy 163.508913 41.134828) + (xy 163.363854 41.212364) (xy 163.236709 41.316709) (xy 163.210563 41.348568) (xy 159.458574 45.100559) (xy 159.42671 45.126709) + (xy 159.400562 45.158571) (xy 159.322364 45.253855) (xy 159.244828 45.398914) (xy 159.197082 45.556312) (xy 159.18096 45.72) + (xy 159.185001 45.761028) (xy 159.185001 45.776126) (xy 159.08089 45.845691) (xy 158.875691 46.05089) (xy 158.714467 46.292178) + (xy 158.603414 46.560283) (xy 158.5468 46.844902) (xy 158.5468 47.135098) (xy 158.603414 47.419717) (xy 158.714467 47.687822) + (xy 158.875691 47.92911) (xy 159.08089 48.134309) (xy 159.322178 48.295533) (xy 159.590283 48.406586) (xy 159.874902 48.4632) + (xy 160.165098 48.4632) (xy 160.449717 48.406586) (xy 160.717822 48.295533) (xy 160.95911 48.134309) (xy 161.164309 47.92911) + (xy 161.233873 47.825) (xy 166.024133 47.825) (xy 166.805001 48.605869) (xy 166.805 52.684605) (xy 166.683007 52.562612) + (xy 166.44414 52.628137) (xy 166.32824 52.875116) (xy 166.26275 53.13996) (xy 166.250188 53.412492) (xy 166.291035 53.682238) + (xy 166.383723 53.938832) (xy 166.44414 54.051863) (xy 166.683007 54.117388) (xy 166.965752 53.834643) (xy 167.046709 53.933291) + (xy 167.145356 54.014249) (xy 166.862612 54.296993) (xy 166.928137 54.53586) (xy 167.175116 54.65176) (xy 167.43996 54.71725) + (xy 167.712492 54.729812) (xy 167.982238 54.688965) (xy 168.238832 54.596277) (xy 168.351863 54.53586) (xy 168.417388 54.296993) + (xy 168.134643 54.014248) (xy 168.233291 53.933291) (xy 168.314249 53.834644) (xy 168.596993 54.117388) (xy 168.83586 54.051863) + (xy 168.910164 53.893523) (xy 168.952629 53.996043) (xy 169.104201 54.222886) (xy 169.297114 54.415799) (xy 169.523957 54.567371) + (xy 169.776011 54.671775) (xy 170.043589 54.725) (xy 170.316411 54.725) (xy 170.583989 54.671775) (xy 170.836043 54.567371) + (xy 171.062886 54.415799) (xy 171.255799 54.222886) (xy 171.333555 54.106517) (xy 171.344188 54.214482) (xy 171.380498 54.33418) + (xy 171.439463 54.444494) (xy 171.518815 54.541185) (xy 171.615506 54.620537) (xy 171.72582 54.679502) (xy 171.845518 54.715812) + (xy 171.97 54.728072) (xy 173.47 54.728072) (xy 173.594482 54.715812) (xy 173.71418 54.679502) (xy 173.824494 54.620537) + (xy 173.921185 54.541185) (xy 174.000537 54.444494) (xy 174.059502 54.33418) (xy 174.095812 54.214482) (xy 174.098223 54.19) + (xy 178.851928 54.19) (xy 178.864188 54.314482) (xy 178.900498 54.43418) (xy 178.959463 54.544494) (xy 179.038815 54.641185) + (xy 179.135506 54.720537) (xy 179.24582 54.779502) (xy 179.365518 54.815812) (xy 179.49 54.828072) (xy 180.05425 54.825) + (xy 180.213 54.66625) (xy 180.213 53.467) (xy 179.01375 53.467) (xy 178.855 53.62575) (xy 178.851928 54.19) + (xy 174.098223 54.19) (xy 174.108072 54.09) (xy 174.108072 52.59) (xy 174.098224 52.49) (xy 178.851928 52.49) + (xy 178.855 53.05425) (xy 179.01375 53.213) (xy 180.213 53.213) (xy 180.213 52.01375) (xy 180.05425 51.855) + (xy 179.49 51.851928) (xy 179.365518 51.864188) (xy 179.24582 51.900498) (xy 179.135506 51.959463) (xy 179.038815 52.038815) + (xy 178.959463 52.135506) (xy 178.900498 52.24582) (xy 178.864188 52.365518) (xy 178.851928 52.49) (xy 174.098224 52.49) + (xy 174.095812 52.465518) (xy 174.059502 52.34582) (xy 174.000537 52.235506) (xy 173.921185 52.138815) (xy 173.824494 52.059463) + (xy 173.71418 52.000498) (xy 173.594482 51.964188) (xy 173.47 51.951928) (xy 171.97 51.951928) (xy 171.845518 51.964188) + (xy 171.72582 52.000498) (xy 171.615506 52.059463) (xy 171.518815 52.138815) (xy 171.439463 52.235506) (xy 171.380498 52.34582) + (xy 171.344188 52.465518) (xy 171.333555 52.573483) (xy 171.255799 52.457114) (xy 171.062886 52.264201) (xy 171.015 52.232205) + (xy 171.015 51.145867) (xy 172.519433 49.641436) (xy 172.551291 49.615291) (xy 172.583545 49.57599) (xy 172.655636 49.488146) + (xy 172.733172 49.343087) (xy 172.780918 49.185688) (xy 172.79704 49.022) (xy 172.793 48.980982) (xy 172.793 48.203873) + (xy 172.89711 48.134309) (xy 173.102309 47.92911) (xy 173.263533 47.687822) (xy 173.374586 47.419717) (xy 173.4312 47.135098) + (xy 173.4312 46.844902) (xy 173.374586 46.560283) (xy 173.263533 46.292178) (xy 173.102309 46.05089) (xy 172.89711 45.845691) + (xy 172.793 45.776127) (xy 172.793 44.87) (xy 185.201928 44.87) (xy 185.205 45.43425) (xy 185.36375 45.593) + (xy 186.563 45.593) (xy 186.563 44.39375) (xy 186.817 44.39375) (xy 186.817 45.593) (xy 186.837 45.593) + (xy 186.837 45.847) (xy 186.817 45.847) (xy 186.817 47.04625) (xy 186.97575 47.205) (xy 187.54 47.208072) + (xy 187.664482 47.195812) (xy 187.78418 47.159502) (xy 187.894494 47.100537) (xy 187.991185 47.021185) (xy 188.070537 46.924494) + (xy 188.129502 46.81418) (xy 188.151513 46.74162) (xy 188.283368 46.873475) (xy 188.526589 47.03599) (xy 188.796842 47.147932) + (xy 189.08374 47.205) (xy 189.37626 47.205) (xy 189.663158 47.147932) (xy 189.933411 47.03599) (xy 190.176632 46.873475) + (xy 190.383475 46.666632) (xy 190.54599 46.423411) (xy 190.657932 46.153158) (xy 190.715 45.86626) (xy 190.715 45.57374) + (xy 190.657932 45.286842) (xy 190.54599 45.016589) (xy 190.383475 44.773368) (xy 190.176632 44.566525) (xy 189.933411 44.40401) + (xy 189.663158 44.292068) (xy 189.37626 44.235) (xy 189.08374 44.235) (xy 188.796842 44.292068) (xy 188.526589 44.40401) + (xy 188.283368 44.566525) (xy 188.151513 44.69838) (xy 188.129502 44.62582) (xy 188.070537 44.515506) (xy 187.991185 44.418815) + (xy 187.894494 44.339463) (xy 187.78418 44.280498) (xy 187.664482 44.244188) (xy 187.54 44.231928) (xy 186.97575 44.235) + (xy 186.817 44.39375) (xy 186.563 44.39375) (xy 186.40425 44.235) (xy 185.84 44.231928) (xy 185.715518 44.244188) + (xy 185.59582 44.280498) (xy 185.485506 44.339463) (xy 185.388815 44.418815) (xy 185.309463 44.515506) (xy 185.250498 44.62582) + (xy 185.214188 44.745518) (xy 185.201928 44.87) (xy 172.793 44.87) (xy 172.793 41.853873) (xy 172.89711 41.784309) + (xy 173.021444 41.659975) (xy 180.26163 41.659975) (xy 180.337838 41.907844) (xy 180.599865 42.032563) (xy 180.881189 42.103768) + (xy 181.170999 42.118719) (xy 181.458157 42.076845) (xy 181.731628 41.979754) (xy 181.866162 41.907844) (xy 181.94237 41.659975) + (xy 181.772395 41.49) (xy 185.201928 41.49) (xy 185.214188 41.614482) (xy 185.250498 41.73418) (xy 185.309463 41.844494) + (xy 185.388815 41.941185) (xy 185.485506 42.020537) (xy 185.59582 42.079502) (xy 185.715518 42.115812) (xy 185.84 42.128072) + (xy 186.40425 42.125) (xy 186.563 41.96625) (xy 186.563 40.767) (xy 185.36375 40.767) (xy 185.205 40.92575) + (xy 185.201928 41.49) (xy 181.772395 41.49) (xy 181.102 40.819605) (xy 180.26163 41.659975) (xy 173.021444 41.659975) + (xy 173.102309 41.57911) (xy 173.263533 41.337822) (xy 173.374586 41.069717) (xy 173.4312 40.785098) (xy 173.4312 40.708999) + (xy 179.623281 40.708999) (xy 179.665155 40.996157) (xy 179.762246 41.269628) (xy 179.834156 41.404162) (xy 180.082025 41.48037) + (xy 180.922395 40.64) (xy 181.281605 40.64) (xy 182.121975 41.48037) (xy 182.369844 41.404162) (xy 182.494563 41.142135) + (xy 182.565768 40.860811) (xy 182.580719 40.571001) (xy 182.538845 40.283843) (xy 182.441754 40.010372) (xy 182.369844 39.875838) + (xy 182.121975 39.79963) (xy 181.281605 40.64) (xy 180.922395 40.64) (xy 180.082025 39.79963) (xy 179.834156 39.875838) + (xy 179.709437 40.137865) (xy 179.638232 40.419189) (xy 179.623281 40.708999) (xy 173.4312 40.708999) (xy 173.4312 40.494902) + (xy 173.374586 40.210283) (xy 173.263533 39.942178) (xy 173.102309 39.70089) (xy 173.021444 39.620025) (xy 180.26163 39.620025) + (xy 181.102 40.460395) (xy 181.772395 39.79) (xy 185.201928 39.79) (xy 185.205 40.35425) (xy 185.36375 40.513) + (xy 186.563 40.513) (xy 186.563 39.31375) (xy 186.817 39.31375) (xy 186.817 40.513) (xy 186.837 40.513) + (xy 186.837 40.767) (xy 186.817 40.767) (xy 186.817 41.96625) (xy 186.97575 42.125) (xy 187.54 42.128072) + (xy 187.664482 42.115812) (xy 187.78418 42.079502) (xy 187.894494 42.020537) (xy 187.991185 41.941185) (xy 188.070537 41.844494) + (xy 188.129502 41.73418) (xy 188.151513 41.66162) (xy 188.283368 41.793475) (xy 188.395001 41.868066) (xy 188.395001 41.951019) + (xy 188.407083 42.073689) (xy 188.454829 42.231087) (xy 188.532365 42.376146) (xy 188.63671 42.503291) (xy 188.763855 42.607636) + (xy 188.908914 42.685172) (xy 189.066312 42.732918) (xy 189.23 42.74904) (xy 189.393689 42.732918) (xy 189.551087 42.685172) + (xy 189.696146 42.607636) (xy 189.823291 42.503291) (xy 189.927636 42.376146) (xy 190.005172 42.231087) (xy 190.052918 42.073689) + (xy 190.065 41.951019) (xy 190.065 41.868065) (xy 190.176632 41.793475) (xy 190.383475 41.586632) (xy 190.448042 41.49) + (xy 197.901928 41.49) (xy 197.914188 41.614482) (xy 197.950498 41.73418) (xy 198.009463 41.844494) (xy 198.088815 41.941185) + (xy 198.185506 42.020537) (xy 198.29582 42.079502) (xy 198.415518 42.115812) (xy 198.54 42.128072) (xy 199.10425 42.125) + (xy 199.263 41.96625) (xy 199.263 40.767) (xy 199.517 40.767) (xy 199.517 41.96625) (xy 199.67575 42.125) + (xy 200.24 42.128072) (xy 200.364482 42.115812) (xy 200.48418 42.079502) (xy 200.594494 42.020537) (xy 200.691185 41.941185) + (xy 200.770537 41.844494) (xy 200.829502 41.73418) (xy 200.865812 41.614482) (xy 200.878072 41.49) (xy 200.875 40.92575) + (xy 200.71625 40.767) (xy 199.517 40.767) (xy 199.263 40.767) (xy 198.06375 40.767) (xy 197.905 40.92575) + (xy 197.901928 41.49) (xy 190.448042 41.49) (xy 190.54599 41.343411) (xy 190.657932 41.073158) (xy 190.715 40.78626) + (xy 190.715 40.49374) (xy 190.657932 40.206842) (xy 190.54599 39.936589) (xy 190.383475 39.693368) (xy 190.176632 39.486525) + (xy 189.933411 39.32401) (xy 189.663158 39.212068) (xy 189.37626 39.155) (xy 189.08374 39.155) (xy 188.796842 39.212068) + (xy 188.526589 39.32401) (xy 188.283368 39.486525) (xy 188.151513 39.61838) (xy 188.129502 39.54582) (xy 188.070537 39.435506) + (xy 187.991185 39.338815) (xy 187.894494 39.259463) (xy 187.78418 39.200498) (xy 187.664482 39.164188) (xy 187.54 39.151928) + (xy 186.97575 39.155) (xy 186.817 39.31375) (xy 186.563 39.31375) (xy 186.40425 39.155) (xy 185.84 39.151928) + (xy 185.715518 39.164188) (xy 185.59582 39.200498) (xy 185.485506 39.259463) (xy 185.388815 39.338815) (xy 185.309463 39.435506) + (xy 185.250498 39.54582) (xy 185.214188 39.665518) (xy 185.201928 39.79) (xy 181.772395 39.79) (xy 181.94237 39.620025) + (xy 181.866162 39.372156) (xy 181.604135 39.247437) (xy 181.322811 39.176232) (xy 181.033001 39.161281) (xy 180.745843 39.203155) + (xy 180.472372 39.300246) (xy 180.337838 39.372156) (xy 180.26163 39.620025) (xy 173.021444 39.620025) (xy 172.89711 39.495691) + (xy 172.655822 39.334467) (xy 172.387717 39.223414) (xy 172.103098 39.1668) (xy 171.812902 39.1668) (xy 171.528283 39.223414) + (xy 171.260178 39.334467) (xy 171.01889 39.495691) (xy 170.813691 39.70089) (xy 170.652467 39.942178) (xy 170.541414 40.210283) + (xy 170.4848 40.494902) (xy 170.4848 40.785098) (xy 170.541414 41.069717) (xy 170.652467 41.337822) (xy 170.813691 41.57911) + (xy 171.01889 41.784309) (xy 171.123 41.853873) (xy 171.123001 45.776126) (xy 171.01889 45.845691) (xy 170.813691 46.05089) + (xy 170.652467 46.292178) (xy 170.561 46.512998) (xy 170.469533 46.292178) (xy 170.308309 46.05089) (xy 170.10311 45.845691) + (xy 169.861822 45.684467) (xy 169.745 45.636078) (xy 169.745 39.715867) (xy 170.525868 38.935) (xy 176.488982 38.935) + (xy 176.53 38.93904) (xy 176.571018 38.935) (xy 176.571019 38.935) (xy 176.693689 38.922918) (xy 176.851087 38.875172) + (xy 176.996146 38.797636) (xy 177.123291 38.693291) (xy 177.149446 38.661421) (xy 178.361428 37.44944) (xy 178.393291 37.423291) + (xy 178.497636 37.296146) (xy 178.575172 37.151087) (xy 178.622918 36.993689) (xy 178.635 36.871019) (xy 178.635 36.871017) + (xy 178.63904 36.830001) (xy 178.635 36.788985) (xy 178.635 36.788065) (xy 178.746632 36.713475) (xy 178.953475 36.506632) + (xy 179.018042 36.41) (xy 185.201928 36.41) (xy 185.214188 36.534482) (xy 185.250498 36.65418) (xy 185.309463 36.764494) + (xy 185.388815 36.861185) (xy 185.485506 36.940537) (xy 185.59582 36.999502) (xy 185.715518 37.035812) (xy 185.84 37.048072) + (xy 186.40425 37.045) (xy 186.563 36.88625) (xy 186.563 35.687) (xy 185.36375 35.687) (xy 185.205 35.84575) + (xy 185.201928 36.41) (xy 179.018042 36.41) (xy 179.11599 36.263411) (xy 179.227932 35.993158) (xy 179.285 35.70626) + (xy 179.285 35.41374) (xy 179.227932 35.126842) (xy 179.11599 34.856589) (xy 179.018043 34.71) (xy 185.201928 34.71) + (xy 185.205 35.27425) (xy 185.36375 35.433) (xy 186.563 35.433) (xy 186.563 34.23375) (xy 186.817 34.23375) + (xy 186.817 35.433) (xy 186.837 35.433) (xy 186.837 35.687) (xy 186.817 35.687) (xy 186.817 36.88625) + (xy 186.97575 37.045) (xy 187.54 37.048072) (xy 187.664482 37.035812) (xy 187.78418 36.999502) (xy 187.894494 36.940537) + (xy 187.991185 36.861185) (xy 188.070537 36.764494) (xy 188.129502 36.65418) (xy 188.151513 36.58162) (xy 188.283368 36.713475) + (xy 188.526589 36.87599) (xy 188.796842 36.987932) (xy 189.08374 37.045) (xy 189.37626 37.045) (xy 189.663158 36.987932) + (xy 189.933411 36.87599) (xy 190.176632 36.713475) (xy 190.383475 36.506632) (xy 190.54599 36.263411) (xy 190.657932 35.993158) + (xy 190.715 35.70626) (xy 190.715 35.41374) (xy 190.657932 35.126842) (xy 190.54599 34.856589) (xy 190.383475 34.613368) + (xy 190.176632 34.406525) (xy 189.933411 34.24401) (xy 189.663158 34.132068) (xy 189.37626 34.075) (xy 189.08374 34.075) + (xy 188.796842 34.132068) (xy 188.526589 34.24401) (xy 188.283368 34.406525) (xy 188.151513 34.53838) (xy 188.129502 34.46582) + (xy 188.070537 34.355506) (xy 187.991185 34.258815) (xy 187.894494 34.179463) (xy 187.78418 34.120498) (xy 187.664482 34.084188) + (xy 187.54 34.071928) (xy 186.97575 34.075) (xy 186.817 34.23375) (xy 186.563 34.23375) (xy 186.40425 34.075) + (xy 185.84 34.071928) (xy 185.715518 34.084188) (xy 185.59582 34.120498) (xy 185.485506 34.179463) (xy 185.388815 34.258815) + (xy 185.309463 34.355506) (xy 185.250498 34.46582) (xy 185.214188 34.585518) (xy 185.201928 34.71) (xy 179.018043 34.71) + (xy 178.953475 34.613368) (xy 178.746632 34.406525) (xy 178.503411 34.24401) (xy 178.233158 34.132068) (xy 177.94626 34.075) + (xy 177.65374 34.075) (xy 177.366842 34.132068) (xy 177.096589 34.24401) (xy 176.853368 34.406525) (xy 176.721513 34.53838) + (xy 176.699502 34.46582) (xy 176.640537 34.355506) (xy 176.561185 34.258815) (xy 176.464494 34.179463) (xy 176.35418 34.120498) + (xy 176.234482 34.084188) (xy 176.11 34.071928) (xy 175.54575 34.075) (xy 175.387 34.23375) (xy 175.387 35.433) + (xy 175.407 35.433) (xy 175.407 35.687) (xy 175.387 35.687) (xy 175.387 36.88625) (xy 175.54575 37.045) + (xy 176.11 37.048072) (xy 176.234482 37.035812) (xy 176.35418 36.999502) (xy 176.464494 36.940537) (xy 176.561185 36.861185) + (xy 176.640537 36.764494) (xy 176.699502 36.65418) (xy 176.721513 36.58162) (xy 176.794513 36.65462) (xy 176.184133 37.265) + (xy 170.221015 37.265) (xy 170.179999 37.26096) (xy 170.138983 37.265) (xy 170.138981 37.265) (xy 170.016311 37.277082) + (xy 169.858913 37.324828) (xy 169.713854 37.402364) (xy 169.586709 37.506709) (xy 169.560561 37.538571) (xy 168.564133 38.535) + (xy 167.771231 38.535) (xy 167.743845 38.483765) (xy 167.545463 38.242037) (xy 167.372391 38.1) (xy 167.545463 37.957963) + (xy 167.743845 37.716235) (xy 167.891255 37.440449) (xy 167.98203 37.141204) (xy 168.012681 36.83) (xy 167.98203 36.518796) + (xy 167.949028 36.41) (xy 173.771928 36.41) (xy 173.784188 36.534482) (xy 173.820498 36.65418) (xy 173.879463 36.764494) + (xy 173.958815 36.861185) (xy 174.055506 36.940537) (xy 174.16582 36.999502) (xy 174.285518 37.035812) (xy 174.41 37.048072) + (xy 174.97425 37.045) (xy 175.133 36.88625) (xy 175.133 35.687) (xy 173.93375 35.687) (xy 173.775 35.84575) + (xy 173.771928 36.41) (xy 167.949028 36.41) (xy 167.891255 36.219551) (xy 167.743845 35.943765) (xy 167.545463 35.702037) + (xy 167.303735 35.503655) (xy 167.205 35.45088) (xy 167.205 34.71) (xy 173.771928 34.71) (xy 173.775 35.27425) + (xy 173.93375 35.433) (xy 175.133 35.433) (xy 175.133 34.23375) (xy 174.97425 34.075) (xy 174.41 34.071928) + (xy 174.285518 34.084188) (xy 174.16582 34.120498) (xy 174.055506 34.179463) (xy 173.958815 34.258815) (xy 173.879463 34.355506) + (xy 173.820498 34.46582) (xy 173.784188 34.585518) (xy 173.771928 34.71) (xy 167.205 34.71) (xy 167.205 34.635867) + (xy 169.255868 32.585) (xy 195.234133 32.585) (xy 196.28857 33.639438) (xy 196.288575 33.639442) (xy 197.931193 35.282061) + (xy 197.905 35.41374) (xy 197.905 35.70626) (xy 197.962068 35.993158) (xy 198.07401 36.263411) (xy 198.236525 36.506632) + (xy 198.443368 36.713475) (xy 198.61776 36.83) (xy 198.443368 36.946525) (xy 198.236525 37.153368) (xy 198.07401 37.396589) + (xy 197.962068 37.666842) (xy 197.905 37.95374) (xy 197.905 38.24626) (xy 197.962068 38.533158) (xy 198.07401 38.803411) + (xy 198.236525 39.046632) (xy 198.36838 39.178487) (xy 198.29582 39.200498) (xy 198.185506 39.259463) (xy 198.088815 39.338815) + (xy 198.009463 39.435506) (xy 197.950498 39.54582) (xy 197.914188 39.665518) (xy 197.901928 39.79) (xy 197.905 40.35425) + (xy 198.06375 40.513) (xy 199.263 40.513) (xy 199.263 40.493) (xy 199.517 40.493) (xy 199.517 40.513) + (xy 200.71625 40.513) (xy 200.875 40.35425) (xy 200.878072 39.79) (xy 200.865812 39.665518) (xy 200.829502 39.54582) + (xy 200.770537 39.435506) (xy 200.691185 39.338815) (xy 200.594494 39.259463) (xy 200.48418 39.200498) (xy 200.41162 39.178487) + (xy 200.543475 39.046632) (xy 200.70599 38.803411) (xy 200.817932 38.533158) (xy 200.875 38.24626) (xy 200.875 37.95374) + (xy 200.817932 37.666842) (xy 200.70599 37.396589) (xy 200.543475 37.153368) (xy 200.336632 36.946525) (xy 200.16224 36.83) + (xy 200.336632 36.713475) (xy 200.543475 36.506632) (xy 200.70599 36.263411) (xy 200.817932 35.993158) (xy 200.875 35.70626) + (xy 200.875 35.41374) (xy 200.817932 35.126842) (xy 200.70599 34.856589) (xy 200.543475 34.613368) (xy 200.336632 34.406525) + (xy 200.093411 34.24401) (xy 199.823158 34.132068) (xy 199.53626 34.075) (xy 199.24374 34.075) (xy 199.112061 34.101193) + (xy 197.469442 32.458575) (xy 197.469438 32.45857) (xy 196.199446 31.188579) (xy 196.173291 31.156709) (xy 196.152931 31.14) + (xy 201.897721 31.14) (xy 202.541222 31.203096) (xy 203.129164 31.380606) (xy 203.671436 31.668937) (xy 204.147364 32.057094) + (xy 204.538845 32.530314) (xy 204.830951 33.070552) (xy 205.012563 33.657244) (xy 205.08 34.298879) (xy 205.080001 109.187711) + (xy 205.016904 109.831221) (xy 204.839394 110.419164) (xy 204.551063 110.961436) (xy 204.162906 111.437364) (xy 203.689686 111.828845) + (xy 203.149449 112.12095) (xy 202.562756 112.302563) (xy 201.92113 112.37) (xy 137.192279 112.37) (xy 136.548779 112.306904) + (xy 135.960836 112.129394) (xy 135.418564 111.841063) (xy 134.942636 111.452906) (xy 134.551155 110.979686) (xy 134.25905 110.439449) + (xy 134.077437 109.852756) (xy 134.01 109.21113) (xy 134.01 95.331899) (xy 139.565064 95.331899) (xy 139.606086 95.604607) + (xy 139.699522 95.864072) (xy 139.761894 95.98076) (xy 140.002293 96.048102) (xy 140.790395 95.26) (xy 141.149605 95.26) + (xy 141.937707 96.048102) (xy 142.178106 95.98076) (xy 142.295506 95.73122) (xy 142.361967 95.463573) (xy 142.374936 95.188101) + (xy 142.333914 94.915393) (xy 142.240478 94.655928) (xy 142.178106 94.53924) (xy 141.937707 94.471898) (xy 141.149605 95.26) + (xy 140.790395 95.26) (xy 140.002293 94.471898) (xy 139.761894 94.53924) (xy 139.644494 94.78878) (xy 139.578033 95.056427) + (xy 139.565064 95.331899) (xy 134.01 95.331899) (xy 134.01 85.662931) (xy 134.026709 85.683291) (xy 134.058579 85.709446) + (xy 137.810561 89.46143) (xy 137.836709 89.493291) (xy 137.963854 89.597636) (xy 138.108913 89.675172) (xy 138.266311 89.722918) + (xy 138.388981 89.735) (xy 138.388982 89.735) (xy 138.43 89.73904) (xy 138.471018 89.735) (xy 139.638976 89.735) + (xy 139.623801 89.771635) (xy 139.57 90.042112) (xy 139.57 90.317888) (xy 139.623801 90.588365) (xy 139.729336 90.843149) + (xy 139.882549 91.072448) (xy 140.077552 91.267451) (xy 140.306851 91.420664) (xy 140.377674 91.45) (xy 140.306851 91.479336) + (xy 140.077552 91.632549) (xy 139.882549 91.827552) (xy 139.729336 92.056851) (xy 139.623801 92.311635) (xy 139.57 92.582112) + (xy 139.57 92.857888) (xy 139.623801 93.128365) (xy 139.729336 93.383149) (xy 139.882549 93.612448) (xy 140.077552 93.807451) + (xy 140.306851 93.960664) (xy 140.371594 93.987482) (xy 140.365928 93.989522) (xy 140.24924 94.051894) (xy 140.181898 94.292293) + (xy 140.97 95.080395) (xy 141.758102 94.292293) (xy 141.69076 94.051894) (xy 141.560664 93.990688) (xy 141.633149 93.960664) + (xy 141.862448 93.807451) (xy 142.057451 93.612448) (xy 142.210664 93.383149) (xy 142.316199 93.128365) (xy 142.37 92.857888) + (xy 142.37 92.582112) (xy 142.316199 92.311635) (xy 142.210664 92.056851) (xy 142.057451 91.827552) (xy 141.862448 91.632549) + (xy 141.633149 91.479336) (xy 141.562326 91.45) (xy 141.633149 91.420664) (xy 141.862448 91.267451) (xy 142.057451 91.072448) + (xy 142.095837 91.015) (xy 149.104132 91.015) (xy 143.154133 96.965) (xy 142.095837 96.965) (xy 142.057451 96.907552) + (xy 141.862448 96.712549) (xy 141.633149 96.559336) (xy 141.568406 96.532518) (xy 141.574072 96.530478) (xy 141.69076 96.468106) + (xy 141.758102 96.227707) (xy 140.97 95.439605) (xy 140.181898 96.227707) (xy 140.24924 96.468106) (xy 140.379336 96.529312) + (xy 140.306851 96.559336) (xy 140.077552 96.712549) (xy 139.882549 96.907552) (xy 139.729336 97.136851) (xy 139.623801 97.391635) + (xy 139.57 97.662112) (xy 139.57 97.937888) (xy 139.623801 98.208365) (xy 139.729336 98.463149) (xy 139.882549 98.692448) + (xy 140.077552 98.887451) (xy 140.306851 99.040664) (xy 140.377674 99.07) (xy 140.306851 99.099336) (xy 140.077552 99.252549) + (xy 139.882549 99.447552) (xy 139.729336 99.676851) (xy 139.623801 99.931635) (xy 139.57 100.202112) (xy 139.57 100.477888) + (xy 139.623801 100.748365) (xy 139.729336 101.003149) (xy 139.882549 101.232448) (xy 140.077552 101.427451) (xy 140.306851 101.580664) + (xy 140.377674 101.61) (xy 140.306851 101.639336) (xy 140.077552 101.792549) (xy 139.882549 101.987552) (xy 139.729336 102.216851) + (xy 139.623801 102.471635) (xy 139.57 102.742112) (xy 139.57 103.017888) (xy 139.623801 103.288365) (xy 139.729336 103.543149) + (xy 139.882549 103.772448) (xy 140.077552 103.967451) (xy 140.306851 104.120664) (xy 140.377674 104.15) (xy 140.306851 104.179336) + (xy 140.077552 104.332549) (xy 139.882549 104.527552) (xy 139.729336 104.756851) (xy 139.623801 105.011635) (xy 139.57 105.282112) + (xy 139.57 105.557888) (xy 139.623801 105.828365) (xy 139.729336 106.083149) (xy 139.882549 106.312448) (xy 140.077552 106.507451) + (xy 140.306851 106.660664) (xy 140.377674 106.69) (xy 140.306851 106.719336) (xy 140.077552 106.872549) (xy 139.882549 107.067552) + (xy 139.729336 107.296851) (xy 139.623801 107.551635) (xy 139.57 107.822112) (xy 139.57 108.097888) (xy 139.623801 108.368365) + (xy 139.729336 108.623149) (xy 139.882549 108.852448) (xy 140.077552 109.047451) (xy 140.306851 109.200664) (xy 140.561635 109.306199) + (xy 140.832112 109.36) (xy 141.107888 109.36) (xy 141.378365 109.306199) (xy 141.633149 109.200664) (xy 141.862448 109.047451) + (xy 142.057451 108.852448) (xy 142.210664 108.623149) (xy 142.316199 108.368365) (xy 142.37 108.097888) (xy 142.37 107.822112) + (xy 142.316199 107.551635) (xy 142.210664 107.296851) (xy 142.057451 107.067552) (xy 141.862448 106.872549) (xy 141.633149 106.719336) + (xy 141.562326 106.69) (xy 141.633149 106.660664) (xy 141.862448 106.507451) (xy 142.057451 106.312448) (xy 142.210664 106.083149) + (xy 142.316199 105.828365) (xy 142.37 105.557888) (xy 142.37 105.282112) (xy 142.316199 105.011635) (xy 142.210664 104.756851) + (xy 142.057451 104.527552) (xy 141.862448 104.332549) (xy 141.633149 104.179336) (xy 141.562326 104.15) (xy 141.633149 104.120664) + (xy 141.862448 103.967451) (xy 142.057451 103.772448) (xy 142.210664 103.543149) (xy 142.316199 103.288365) (xy 142.37 103.017888) + (xy 142.37 102.742112) (xy 142.316199 102.471635) (xy 142.210664 102.216851) (xy 142.057451 101.987552) (xy 141.862448 101.792549) + (xy 141.633149 101.639336) (xy 141.562326 101.61) (xy 141.633149 101.580664) (xy 141.862448 101.427451) (xy 142.057451 101.232448) + (xy 142.210664 101.003149) (xy 142.316199 100.748365) (xy 142.37 100.477888) (xy 142.37 100.202112) (xy 142.316199 99.931635) + (xy 142.210664 99.676851) (xy 142.057451 99.447552) (xy 141.862448 99.252549) (xy 141.633149 99.099336) (xy 141.562326 99.07) + (xy 141.633149 99.040664) (xy 141.862448 98.887451) (xy 142.057451 98.692448) (xy 142.095837 98.635) (xy 143.458982 98.635) + (xy 143.5 98.63904) (xy 143.541018 98.635) (xy 143.541019 98.635) (xy 143.663689 98.622918) (xy 143.821087 98.575172) + (xy 143.966146 98.497636) (xy 144.093291 98.393291) (xy 144.119446 98.361421) (xy 152.745869 89.735) (xy 165.038976 89.735) + (xy 165.023801 89.771635) (xy 164.97 90.042112) (xy 164.97 90.317888) (xy 165.023801 90.588365) (xy 165.129336 90.843149) + (xy 165.282549 91.072448) (xy 165.477552 91.267451) (xy 165.706851 91.420664) (xy 165.777674 91.45) (xy 165.706851 91.479336) + (xy 165.477552 91.632549) (xy 165.282549 91.827552) (xy 165.129336 92.056851) (xy 165.023801 92.311635) (xy 164.97 92.582112) + (xy 164.97 92.857888) (xy 165.023801 93.128365) (xy 165.129336 93.383149) (xy 165.282549 93.612448) (xy 165.477552 93.807451) + (xy 165.706851 93.960664) (xy 165.777674 93.99) (xy 165.706851 94.019336) (xy 165.477552 94.172549) (xy 165.282549 94.367552) + (xy 165.129336 94.596851) (xy 165.023801 94.851635) (xy 164.97 95.122112) (xy 164.97 95.397888) (xy 165.023801 95.668365) + (xy 165.129336 95.923149) (xy 165.282549 96.152448) (xy 165.477552 96.347451) (xy 165.706851 96.500664) (xy 165.777674 96.53) + (xy 165.706851 96.559336) (xy 165.477552 96.712549) (xy 165.282549 96.907552) (xy 165.129336 97.136851) (xy 165.023801 97.391635) + (xy 164.97 97.662112) (xy 164.97 97.937888) (xy 165.023801 98.208365) (xy 165.129336 98.463149) (xy 165.282549 98.692448) + (xy 165.477552 98.887451) (xy 165.706851 99.040664) (xy 165.777674 99.07) (xy 165.706851 99.099336) (xy 165.477552 99.252549) + (xy 165.282549 99.447552) (xy 165.129336 99.676851) (xy 165.023801 99.931635) (xy 164.97 100.202112) (xy 164.97 100.477888) + (xy 165.023801 100.748365) (xy 165.129336 101.003149) (xy 165.282549 101.232448) (xy 165.477552 101.427451) (xy 165.706851 101.580664) + (xy 165.777674 101.61) (xy 165.706851 101.639336) (xy 165.477552 101.792549) (xy 165.282549 101.987552) (xy 165.129336 102.216851) + (xy 165.023801 102.471635) (xy 164.97 102.742112) (xy 164.97 103.017888) (xy 165.023801 103.288365) (xy 165.129336 103.543149) + (xy 165.282549 103.772448) (xy 165.477552 103.967451) (xy 165.706851 104.120664) (xy 165.777674 104.15) (xy 165.706851 104.179336) + (xy 165.477552 104.332549) (xy 165.282549 104.527552) (xy 165.129336 104.756851) (xy 165.023801 105.011635) (xy 164.97 105.282112) + (xy 164.97 105.557888) (xy 165.023801 105.828365) (xy 165.129336 106.083149) (xy 165.282549 106.312448) (xy 165.477552 106.507451) + (xy 165.706851 106.660664) (xy 165.777674 106.69) (xy 165.706851 106.719336) (xy 165.477552 106.872549) (xy 165.282549 107.067552) + (xy 165.129336 107.296851) (xy 165.023801 107.551635) (xy 164.97 107.822112) (xy 164.97 108.097888) (xy 165.023801 108.368365) + (xy 165.129336 108.623149) (xy 165.282549 108.852448) (xy 165.477552 109.047451) (xy 165.706851 109.200664) (xy 165.961635 109.306199) + (xy 166.232112 109.36) (xy 166.507888 109.36) (xy 166.778365 109.306199) (xy 167.033149 109.200664) (xy 167.262448 109.047451) + (xy 167.457451 108.852448) (xy 167.610664 108.623149) (xy 167.716199 108.368365) (xy 167.718647 108.356058) (xy 198.06908 108.356058) + (xy 198.06908 109.042542) (xy 198.203007 109.715837) (xy 198.465713 110.350066) (xy 198.847104 110.920858) (xy 199.332522 111.406276) + (xy 199.903314 111.787667) (xy 200.537543 112.050373) (xy 201.210838 112.1843) (xy 201.897322 112.1843) (xy 202.570617 112.050373) + (xy 203.204846 111.787667) (xy 203.775638 111.406276) (xy 204.261056 110.920858) (xy 204.642447 110.350066) (xy 204.905153 109.715837) + (xy 205.03908 109.042542) (xy 205.03908 108.356058) (xy 204.905153 107.682763) (xy 204.642447 107.048534) (xy 204.261056 106.477742) + (xy 203.775638 105.992324) (xy 203.204846 105.610933) (xy 202.570617 105.348227) (xy 201.897322 105.2143) (xy 201.210838 105.2143) + (xy 200.537543 105.348227) (xy 199.903314 105.610933) (xy 199.332522 105.992324) (xy 198.847104 106.477742) (xy 198.465713 107.048534) + (xy 198.203007 107.682763) (xy 198.06908 108.356058) (xy 167.718647 108.356058) (xy 167.77 108.097888) (xy 167.77 107.822112) + (xy 167.716199 107.551635) (xy 167.610664 107.296851) (xy 167.457451 107.067552) (xy 167.262448 106.872549) (xy 167.033149 106.719336) + (xy 166.962326 106.69) (xy 167.033149 106.660664) (xy 167.262448 106.507451) (xy 167.457451 106.312448) (xy 167.610664 106.083149) + (xy 167.716199 105.828365) (xy 167.77 105.557888) (xy 167.77 105.282112) (xy 167.716199 105.011635) (xy 167.610664 104.756851) + (xy 167.457451 104.527552) (xy 167.262448 104.332549) (xy 167.033149 104.179336) (xy 166.962326 104.15) (xy 167.033149 104.120664) + (xy 167.262448 103.967451) (xy 167.457451 103.772448) (xy 167.610664 103.543149) (xy 167.716199 103.288365) (xy 167.77 103.017888) + (xy 167.77 102.742112) (xy 167.716199 102.471635) (xy 167.610664 102.216851) (xy 167.457451 101.987552) (xy 167.262448 101.792549) + (xy 167.033149 101.639336) (xy 166.962326 101.61) (xy 167.033149 101.580664) (xy 167.262448 101.427451) (xy 167.457451 101.232448) + (xy 167.610664 101.003149) (xy 167.716199 100.748365) (xy 167.77 100.477888) (xy 167.77 100.202112) (xy 167.716199 99.931635) + (xy 167.610664 99.676851) (xy 167.457451 99.447552) (xy 167.262448 99.252549) (xy 167.033149 99.099336) (xy 166.962326 99.07) + (xy 167.033149 99.040664) (xy 167.262448 98.887451) (xy 167.457451 98.692448) (xy 167.610664 98.463149) (xy 167.716199 98.208365) + (xy 167.77 97.937888) (xy 167.77 97.662112) (xy 167.716199 97.391635) (xy 167.610664 97.136851) (xy 167.457451 96.907552) + (xy 167.262448 96.712549) (xy 167.033149 96.559336) (xy 166.962326 96.53) (xy 167.033149 96.500664) (xy 167.262448 96.347451) + (xy 167.457451 96.152448) (xy 167.610664 95.923149) (xy 167.716199 95.668365) (xy 167.77 95.397888) (xy 167.77 95.122112) + (xy 167.716199 94.851635) (xy 167.610664 94.596851) (xy 167.457451 94.367552) (xy 167.262448 94.172549) (xy 167.033149 94.019336) + (xy 166.962326 93.99) (xy 167.033149 93.960664) (xy 167.262448 93.807451) (xy 167.457451 93.612448) (xy 167.610664 93.383149) + (xy 167.716199 93.128365) (xy 167.77 92.857888) (xy 167.77 92.582112) (xy 167.716199 92.311635) (xy 167.610664 92.056851) + (xy 167.457451 91.827552) (xy 167.262448 91.632549) (xy 167.033149 91.479336) (xy 166.962326 91.45) (xy 167.033149 91.420664) + (xy 167.262448 91.267451) (xy 167.457451 91.072448) (xy 167.495837 91.015) (xy 177.748982 91.015) (xy 177.79 91.01904) + (xy 177.831018 91.015) (xy 177.831019 91.015) (xy 177.953689 91.002918) (xy 178.111087 90.955172) (xy 178.256146 90.877636) + (xy 178.383291 90.773291) (xy 178.409446 90.741421) (xy 185.981428 83.16944) (xy 186.013291 83.143291) (xy 186.117636 83.016146) + (xy 186.195172 82.871087) (xy 186.242918 82.713689) (xy 186.255 82.591019) (xy 186.255 82.591009) (xy 186.259039 82.550001) + (xy 186.255 82.508993) (xy 186.255 69.808065) (xy 186.366632 69.733475) (xy 186.573475 69.526632) (xy 186.69 69.35224) + (xy 186.806525 69.526632) (xy 187.013368 69.733475) (xy 187.256589 69.89599) (xy 187.526842 70.007932) (xy 187.81374 70.065) + (xy 188.10626 70.065) (xy 188.393158 70.007932) (xy 188.663411 69.89599) (xy 188.906632 69.733475) (xy 189.038487 69.60162) + (xy 189.060498 69.67418) (xy 189.119463 69.784494) (xy 189.198815 69.881185) (xy 189.295506 69.960537) (xy 189.40582 70.019502) + (xy 189.525518 70.055812) (xy 189.65 70.068072) (xy 190.21425 70.065) (xy 190.373 69.90625) (xy 190.373 68.707) + (xy 190.627 68.707) (xy 190.627 69.90625) (xy 190.78575 70.065) (xy 191.35 70.068072) (xy 191.474482 70.055812) + (xy 191.59418 70.019502) (xy 191.704494 69.960537) (xy 191.801185 69.881185) (xy 191.880537 69.784494) (xy 191.939502 69.67418) + (xy 191.975812 69.554482) (xy 191.988072 69.43) (xy 191.985 68.86575) (xy 191.82625 68.707) (xy 190.627 68.707) + (xy 190.373 68.707) (xy 190.353 68.707) (xy 190.353 68.453) (xy 190.373 68.453) (xy 190.373 67.25375) + (xy 190.627 67.25375) (xy 190.627 68.453) (xy 191.82625 68.453) (xy 191.985 68.29425) (xy 191.988072 67.73) + (xy 191.975812 67.605518) (xy 191.939502 67.48582) (xy 191.880537 67.375506) (xy 191.801185 67.278815) (xy 191.704494 67.199463) + (xy 191.59418 67.140498) (xy 191.474482 67.104188) (xy 191.35 67.091928) (xy 190.78575 67.095) (xy 190.627 67.25375) + (xy 190.373 67.25375) (xy 190.21425 67.095) (xy 189.65 67.091928) (xy 189.525518 67.104188) (xy 189.40582 67.140498) + (xy 189.295506 67.199463) (xy 189.198815 67.278815) (xy 189.119463 67.375506) (xy 189.060498 67.48582) (xy 189.038487 67.55838) + (xy 188.906632 67.426525) (xy 188.663411 67.26401) (xy 188.393158 67.152068) (xy 188.10626 67.095) (xy 187.81374 67.095) + (xy 187.526842 67.152068) (xy 187.256589 67.26401) (xy 187.013368 67.426525) (xy 186.806525 67.633368) (xy 186.69 67.80776) + (xy 186.573475 67.633368) (xy 186.366632 67.426525) (xy 186.123411 67.26401) (xy 185.853158 67.152068) (xy 185.56626 67.095) + (xy 185.27374 67.095) (xy 184.986842 67.152068) (xy 184.716589 67.26401) (xy 184.473368 67.426525) (xy 184.266525 67.633368) + (xy 184.15 67.80776) (xy 184.033475 67.633368) (xy 183.826632 67.426525) (xy 183.583411 67.26401) (xy 183.313158 67.152068) + (xy 183.02626 67.095) (xy 182.73374 67.095) (xy 182.446842 67.152068) (xy 182.176589 67.26401) (xy 181.933368 67.426525) + (xy 181.726525 67.633368) (xy 181.61 67.80776) (xy 181.493475 67.633368) (xy 181.286632 67.426525) (xy 181.043411 67.26401) + (xy 180.773158 67.152068) (xy 180.48626 67.095) (xy 180.19374 67.095) (xy 179.906842 67.152068) (xy 179.636589 67.26401) + (xy 179.393368 67.426525) (xy 179.186525 67.633368) (xy 179.07 67.80776) (xy 178.953475 67.633368) (xy 178.746632 67.426525) + (xy 178.503411 67.26401) (xy 178.233158 67.152068) (xy 177.94626 67.095) (xy 177.65374 67.095) (xy 177.366842 67.152068) + (xy 177.096589 67.26401) (xy 176.853368 67.426525) (xy 176.646525 67.633368) (xy 176.48401 67.876589) (xy 176.372068 68.146842) + (xy 176.315 68.43374) (xy 176.315 68.72626) (xy 176.372068 69.013158) (xy 176.48401 69.283411) (xy 176.646525 69.526632) + (xy 176.853368 69.733475) (xy 177.096589 69.89599) (xy 177.366842 70.007932) (xy 177.65374 70.065) (xy 177.94626 70.065) + (xy 178.233158 70.007932) (xy 178.503411 69.89599) (xy 178.746632 69.733475) (xy 178.953475 69.526632) (xy 179.07 69.35224) + (xy 179.186525 69.526632) (xy 179.393368 69.733475) (xy 179.636589 69.89599) (xy 179.906842 70.007932) (xy 180.19374 70.065) + (xy 180.48626 70.065) (xy 180.61794 70.038807) (xy 182.045001 71.465869) (xy 182.045 82.204131) (xy 178.724133 85.525) + (xy 167.709309 85.525) (xy 167.716199 85.508365) (xy 167.77 85.237888) (xy 167.77 84.962112) (xy 167.716199 84.691635) + (xy 167.70024 84.653107) (xy 167.803689 84.642918) (xy 167.961087 84.595172) (xy 168.106146 84.517636) (xy 168.233291 84.413291) + (xy 168.259446 84.381421) (xy 170.741427 81.899441) (xy 170.773291 81.873291) (xy 170.877636 81.746146) (xy 170.955172 81.601087) + (xy 171.002918 81.443689) (xy 171.015 81.321019) (xy 171.015 81.321009) (xy 171.019039 81.280001) (xy 171.015 81.238993) + (xy 171.015 72.060093) (xy 171.148102 72.115226) (xy 171.293225 72.144093) (xy 172.100558 72.951426) (xy 172.126709 72.983291) + (xy 172.253854 73.087636) (xy 172.398913 73.165172) (xy 172.556311 73.212918) (xy 172.678981 73.225) (xy 172.678983 73.225) + (xy 172.719999 73.22904) (xy 172.761015 73.225) (xy 179.726715 73.225) (xy 179.849744 73.307205) (xy 180.038102 73.385226) + (xy 180.238061 73.425) (xy 180.441939 73.425) (xy 180.641898 73.385226) (xy 180.830256 73.307205) (xy 180.999774 73.193937) + (xy 181.143937 73.049774) (xy 181.257205 72.880256) (xy 181.335226 72.691898) (xy 181.375 72.491939) (xy 181.375 72.288061) + (xy 181.335226 72.088102) (xy 181.257205 71.899744) (xy 181.143937 71.730226) (xy 180.999774 71.586063) (xy 180.830256 71.472795) + (xy 180.641898 71.394774) (xy 180.441939 71.355) (xy 180.238061 71.355) (xy 180.038102 71.394774) (xy 179.849744 71.472795) + (xy 179.726715 71.555) (xy 173.065868 71.555) (xy 172.474093 70.963225) (xy 172.445226 70.818102) (xy 172.367205 70.629744) + (xy 172.253937 70.460226) (xy 172.109774 70.316063) (xy 171.940256 70.202795) (xy 171.751898 70.124774) (xy 171.551939 70.085) + (xy 171.348061 70.085) (xy 171.148102 70.124774) (xy 171.015 70.179907) (xy 171.015 67.655867) (xy 171.795868 66.875) + (xy 185.378982 66.875) (xy 185.42 66.87904) (xy 185.461018 66.875) (xy 185.461019 66.875) (xy 185.583689 66.862918) + (xy 185.741087 66.815172) (xy 185.886146 66.737636) (xy 186.013291 66.633291) (xy 186.039446 66.601421) (xy 195.925869 56.715) + (xy 198.161935 56.715) (xy 198.236525 56.826632) (xy 198.443368 57.033475) (xy 198.61776 57.15) (xy 198.443368 57.266525) + (xy 198.236525 57.473368) (xy 198.07401 57.716589) (xy 197.962068 57.986842) (xy 197.905 58.27374) (xy 197.905 58.56626) + (xy 197.962068 58.853158) (xy 198.07401 59.123411) (xy 198.236525 59.366632) (xy 198.443368 59.573475) (xy 198.625534 59.695195) + (xy 198.508645 59.764822) (xy 198.292412 59.959731) (xy 198.118359 60.19308) (xy 197.993175 60.455901) (xy 197.948524 60.60311) + (xy 198.069845 60.833) (xy 199.263 60.833) (xy 199.263 60.813) (xy 199.517 60.813) (xy 199.517 60.833) + (xy 200.710155 60.833) (xy 200.831476 60.60311) (xy 200.786825 60.455901) (xy 200.661641 60.19308) (xy 200.487588 59.959731) + (xy 200.271355 59.764822) (xy 200.154466 59.695195) (xy 200.336632 59.573475) (xy 200.543475 59.366632) (xy 200.70599 59.123411) + (xy 200.817932 58.853158) (xy 200.875 58.56626) (xy 200.875 58.27374) (xy 200.817932 57.986842) (xy 200.70599 57.716589) + (xy 200.543475 57.473368) (xy 200.336632 57.266525) (xy 200.16224 57.15) (xy 200.336632 57.033475) (xy 200.543475 56.826632) + (xy 200.70599 56.583411) (xy 200.817932 56.313158) (xy 200.875 56.02626) (xy 200.875 55.73374) (xy 200.817932 55.446842) + (xy 200.70599 55.176589) (xy 200.65724 55.103629) (xy 201.095 54.66587) (xy 201.095001 64.424131) (xy 200.731362 64.787771) + (xy 200.691185 64.738815) (xy 200.594494 64.659463) (xy 200.48418 64.600498) (xy 200.41162 64.578487) (xy 200.543475 64.446632) + (xy 200.70599 64.203411) (xy 200.817932 63.933158) (xy 200.875 63.64626) (xy 200.875 63.35374) (xy 200.817932 63.066842) + (xy 200.70599 62.796589) (xy 200.543475 62.553368) (xy 200.336632 62.346525) (xy 200.154466 62.224805) (xy 200.271355 62.155178) + (xy 200.487588 61.960269) (xy 200.661641 61.72692) (xy 200.786825 61.464099) (xy 200.831476 61.31689) (xy 200.710155 61.087) + (xy 199.517 61.087) (xy 199.517 61.107) (xy 199.263 61.107) (xy 199.263 61.087) (xy 198.069845 61.087) + (xy 197.948524 61.31689) (xy 197.993175 61.464099) (xy 198.118359 61.72692) (xy 198.292412 61.960269) (xy 198.508645 62.155178) + (xy 198.625534 62.224805) (xy 198.443368 62.346525) (xy 198.236525 62.553368) (xy 198.07401 62.796589) (xy 197.962068 63.066842) + (xy 197.905 63.35374) (xy 197.905 63.64626) (xy 197.962068 63.933158) (xy 198.07401 64.203411) (xy 198.236525 64.446632) + (xy 198.36838 64.578487) (xy 198.29582 64.600498) (xy 198.185506 64.659463) (xy 198.088815 64.738815) (xy 198.009463 64.835506) + (xy 197.950498 64.94582) (xy 197.914188 65.065518) (xy 197.901928 65.19) (xy 197.901928 66.89) (xy 197.914188 67.014482) + (xy 197.950498 67.13418) (xy 198.009463 67.244494) (xy 198.088815 67.341185) (xy 198.185506 67.420537) (xy 198.29582 67.479502) + (xy 198.415518 67.515812) (xy 198.54 67.528072) (xy 200.24 67.528072) (xy 200.364482 67.515812) (xy 200.48418 67.479502) + (xy 200.594494 67.420537) (xy 200.691185 67.341185) (xy 200.770537 67.244494) (xy 200.829502 67.13418) (xy 200.865812 67.014482) + (xy 200.878072 66.89) (xy 200.878072 66.846421) (xy 200.981087 66.815172) (xy 201.126146 66.737636) (xy 201.253291 66.633291) + (xy 201.279446 66.601421) (xy 202.491426 65.389442) (xy 202.523291 65.363291) (xy 202.627636 65.236146) (xy 202.705172 65.091087) + (xy 202.752918 64.933689) (xy 202.765 64.811019) (xy 202.765 64.811017) (xy 202.76904 64.770001) (xy 202.765 64.728981) + (xy 202.765 47.031015) (xy 202.76904 46.989999) (xy 202.757563 46.873475) (xy 202.752918 46.826311) (xy 202.705172 46.668913) + (xy 202.627636 46.523854) (xy 202.523291 46.396709) (xy 202.491428 46.37056) (xy 201.279446 45.158579) (xy 201.253291 45.126709) + (xy 201.126146 45.022364) (xy 200.981087 44.944828) (xy 200.823689 44.897082) (xy 200.701019 44.885) (xy 200.701018 44.885) + (xy 200.66 44.88096) (xy 200.618982 44.885) (xy 198.161007 44.885) (xy 198.119999 44.880961) (xy 198.078991 44.885) + (xy 198.078981 44.885) (xy 197.956311 44.897082) (xy 197.798913 44.944828) (xy 197.653854 45.022364) (xy 197.526709 45.126709) + (xy 197.500561 45.158571) (xy 195.234133 47.425) (xy 182.717868 47.425) (xy 182.550772 47.257905) (xy 182.5752 47.135098) + (xy 182.5752 46.844902) (xy 182.520519 46.57) (xy 185.201928 46.57) (xy 185.214188 46.694482) (xy 185.250498 46.81418) + (xy 185.309463 46.924494) (xy 185.388815 47.021185) (xy 185.485506 47.100537) (xy 185.59582 47.159502) (xy 185.715518 47.195812) + (xy 185.84 47.208072) (xy 186.40425 47.205) (xy 186.563 47.04625) (xy 186.563 45.847) (xy 185.36375 45.847) + (xy 185.205 46.00575) (xy 185.201928 46.57) (xy 182.520519 46.57) (xy 182.518586 46.560283) (xy 182.407533 46.292178) + (xy 182.246309 46.05089) (xy 182.04111 45.845691) (xy 181.799822 45.684467) (xy 181.531717 45.573414) (xy 181.247098 45.5168) + (xy 180.956902 45.5168) (xy 180.672283 45.573414) (xy 180.404178 45.684467) (xy 180.16289 45.845691) (xy 179.957691 46.05089) + (xy 179.796467 46.292178) (xy 179.685414 46.560283) (xy 179.6288 46.844902) (xy 179.6288 47.135098) (xy 179.685414 47.419717) + (xy 179.796467 47.687822) (xy 179.957691 47.92911) (xy 180.16289 48.134309) (xy 180.404178 48.295533) (xy 180.672283 48.406586) + (xy 180.956902 48.4632) (xy 181.247098 48.4632) (xy 181.369905 48.438772) (xy 181.752558 48.821426) (xy 181.778709 48.853291) + (xy 181.905854 48.957636) (xy 182.050913 49.035172) (xy 182.208311 49.082918) (xy 182.330981 49.095) (xy 182.330983 49.095) + (xy 182.371999 49.09904) (xy 182.413015 49.095) (xy 195.538982 49.095) (xy 195.58 49.09904) (xy 195.621018 49.095) + (xy 195.621019 49.095) (xy 195.743689 49.082918) (xy 195.901087 49.035172) (xy 196.046146 48.957636) (xy 196.173291 48.853291) + (xy 196.199446 48.821421) (xy 198.465868 46.555) (xy 200.314133 46.555) (xy 201.095 47.335868) (xy 201.095 51.324132) + (xy 200.848807 51.077939) (xy 200.875 50.94626) (xy 200.875 50.65374) (xy 200.817932 50.366842) (xy 200.70599 50.096589) + (xy 200.543475 49.853368) (xy 200.336632 49.646525) (xy 200.16224 49.53) (xy 200.336632 49.413475) (xy 200.543475 49.206632) + (xy 200.70599 48.963411) (xy 200.817932 48.693158) (xy 200.875 48.40626) (xy 200.875 48.11374) (xy 200.817932 47.826842) + (xy 200.70599 47.556589) (xy 200.543475 47.313368) (xy 200.336632 47.106525) (xy 200.093411 46.94401) (xy 199.823158 46.832068) + (xy 199.53626 46.775) (xy 199.24374 46.775) (xy 198.956842 46.832068) (xy 198.686589 46.94401) (xy 198.443368 47.106525) + (xy 198.236525 47.313368) (xy 198.07401 47.556589) (xy 197.962068 47.826842) (xy 197.905 48.11374) (xy 197.905 48.40626) + (xy 197.931193 48.537939) (xy 193.875 52.594132) (xy 193.875 52.111015) (xy 193.87904 52.069999) (xy 193.87303 52.008982) + (xy 193.862918 51.906311) (xy 193.815172 51.748913) (xy 193.737636 51.603854) (xy 193.633291 51.476709) (xy 193.601428 51.45056) + (xy 192.389446 50.238579) (xy 192.363291 50.206709) (xy 192.236146 50.102364) (xy 192.091087 50.024828) (xy 191.933689 49.977082) + (xy 191.811019 49.965) (xy 191.811018 49.965) (xy 191.77 49.96096) (xy 191.728982 49.965) (xy 185.461007 49.965) + (xy 185.419999 49.960961) (xy 185.378991 49.965) (xy 185.378981 49.965) (xy 185.256311 49.977082) (xy 185.098913 50.024828) + (xy 184.953854 50.102364) (xy 184.826709 50.206709) (xy 184.800561 50.238571) (xy 183.15794 51.881193) (xy 183.02626 51.855) + (xy 182.73374 51.855) (xy 182.446842 51.912068) (xy 182.176589 52.02401) (xy 181.933368 52.186525) (xy 181.801513 52.31838) + (xy 181.779502 52.24582) (xy 181.720537 52.135506) (xy 181.641185 52.038815) (xy 181.544494 51.959463) (xy 181.43418 51.900498) + (xy 181.314482 51.864188) (xy 181.19 51.851928) (xy 180.62575 51.855) (xy 180.467 52.01375) (xy 180.467 53.213) + (xy 180.487 53.213) (xy 180.487 53.467) (xy 180.467 53.467) (xy 180.467 54.66625) (xy 180.62575 54.825) + (xy 181.19 54.828072) (xy 181.314482 54.815812) (xy 181.43418 54.779502) (xy 181.544494 54.720537) (xy 181.641185 54.641185) + (xy 181.720537 54.544494) (xy 181.779502 54.43418) (xy 181.801513 54.36162) (xy 181.933368 54.493475) (xy 182.176589 54.65599) + (xy 182.446842 54.767932) (xy 182.73374 54.825) (xy 182.754132 54.825) (xy 181.264133 56.315) (xy 144.821015 56.315) + (xy 144.779999 56.31096) (xy 144.738983 56.315) (xy 144.738981 56.315) (xy 144.616311 56.327082) (xy 144.458913 56.374828) + (xy 144.313854 56.452364) (xy 144.186709 56.556709) (xy 144.160561 56.588571) (xy 142.948579 57.800554) (xy 142.916709 57.826709) + (xy 142.812365 57.953854) (xy 142.812364 57.953855) (xy 142.734828 58.098914) (xy 142.687082 58.256312) (xy 142.67096 58.42) + (xy 142.675 58.461019) (xy 142.675001 69.514131) (xy 142.37 69.819132) (xy 142.37 69.722112) (xy 142.316199 69.451635) + (xy 142.210664 69.196851) (xy 142.057451 68.967552) (xy 141.862448 68.772549) (xy 141.633149 68.619336) (xy 141.562326 68.59) + (xy 141.633149 68.560664) (xy 141.862448 68.407451) (xy 142.057451 68.212448) (xy 142.210664 67.983149) (xy 142.316199 67.728365) + (xy 142.37 67.457888) (xy 142.37 67.182112) (xy 142.316199 66.911635) (xy 142.210664 66.656851) (xy 142.057451 66.427552) + (xy 141.862448 66.232549) (xy 141.633149 66.079336) (xy 141.562326 66.05) (xy 141.633149 66.020664) (xy 141.862448 65.867451) + (xy 142.057451 65.672448) (xy 142.210664 65.443149) (xy 142.316199 65.188365) (xy 142.37 64.917888) (xy 142.37 64.642112) + (xy 142.316199 64.371635) (xy 142.210664 64.116851) (xy 142.057451 63.887552) (xy 141.862448 63.692549) (xy 141.781541 63.638488) + (xy 141.859482 63.630812) (xy 141.97918 63.594502) (xy 142.089494 63.535537) (xy 142.186185 63.456185) (xy 142.265537 63.359494) + (xy 142.324502 63.24918) (xy 142.360812 63.129482) (xy 142.373072 63.005) (xy 142.373072 61.475) (xy 142.360812 61.350518) + (xy 142.324502 61.23082) (xy 142.265537 61.120506) (xy 142.186185 61.023815) (xy 142.089494 60.944463) (xy 141.97918 60.885498) + (xy 141.859482 60.849188) (xy 141.735 60.836928) (xy 140.205 60.836928) (xy 140.080518 60.849188) (xy 139.96082 60.885498) + (xy 139.850506 60.944463) (xy 139.753815 61.023815) (xy 139.674463 61.120506) (xy 139.615498 61.23082) (xy 139.579188 61.350518) + (xy 139.566928 61.475) (xy 139.566928 62.462204) (xy 137.995 64.034133) (xy 137.995 51.613227) (xy 138.557975 51.050253) + (xy 138.612565 51.131952) (xy 138.819408 51.338795) (xy 139.062629 51.50131) (xy 139.332882 51.613252) (xy 139.61978 51.67032) + (xy 139.9123 51.67032) (xy 140.199198 51.613252) (xy 140.469451 51.50131) (xy 140.712672 51.338795) (xy 140.919515 51.131952) + (xy 141.03604 50.95756) (xy 141.152565 51.131952) (xy 141.359408 51.338795) (xy 141.602629 51.50131) (xy 141.872882 51.613252) + (xy 142.15978 51.67032) (xy 142.4523 51.67032) (xy 142.739198 51.613252) (xy 143.009451 51.50131) (xy 143.252672 51.338795) + (xy 143.459515 51.131952) (xy 143.57604 50.95756) (xy 143.692565 51.131952) (xy 143.899408 51.338795) (xy 144.142629 51.50131) + (xy 144.412882 51.613252) (xy 144.69978 51.67032) (xy 144.9923 51.67032) (xy 145.279198 51.613252) (xy 145.549451 51.50131) + (xy 145.792672 51.338795) (xy 145.999515 51.131952) (xy 146.11604 50.95756) (xy 146.232565 51.131952) (xy 146.439408 51.338795) + (xy 146.682629 51.50131) (xy 146.952882 51.613252) (xy 147.23978 51.67032) (xy 147.5323 51.67032) (xy 147.819198 51.613252) + (xy 148.089451 51.50131) (xy 148.332672 51.338795) (xy 148.539515 51.131952) (xy 148.65604 50.95756) (xy 148.772565 51.131952) + (xy 148.979408 51.338795) (xy 149.222629 51.50131) (xy 149.492882 51.613252) (xy 149.77978 51.67032) (xy 150.0723 51.67032) + (xy 150.359198 51.613252) (xy 150.629451 51.50131) (xy 150.872672 51.338795) (xy 151.079515 51.131952) (xy 151.201235 50.949786) + (xy 151.270862 51.066675) (xy 151.465771 51.282908) (xy 151.69912 51.456961) (xy 151.961941 51.582145) (xy 152.10915 51.626796) + (xy 152.33904 51.505475) (xy 152.33904 50.31232) (xy 152.31904 50.31232) (xy 152.31904 50.05832) (xy 152.33904 50.05832) + (xy 152.33904 48.865165) (xy 152.10915 48.743844) (xy 151.961941 48.788495) (xy 151.69912 48.913679) (xy 151.465771 49.087732) + (xy 151.270862 49.303965) (xy 151.201235 49.420854) (xy 151.079515 49.238688) (xy 150.872672 49.031845) (xy 150.629451 48.86933) + (xy 150.359198 48.757388) (xy 150.0723 48.70032) (xy 149.77978 48.70032) (xy 149.492882 48.757388) (xy 149.222629 48.86933) + (xy 148.979408 49.031845) (xy 148.772565 49.238688) (xy 148.65604 49.41308) (xy 148.539515 49.238688) (xy 148.332672 49.031845) + (xy 148.089451 48.86933) (xy 147.819198 48.757388) (xy 147.5323 48.70032) (xy 147.23978 48.70032) (xy 146.952882 48.757388) + (xy 146.682629 48.86933) (xy 146.439408 49.031845) (xy 146.232565 49.238688) (xy 146.11604 49.41308) (xy 145.999515 49.238688) + (xy 145.792672 49.031845) (xy 145.68104 48.957255) (xy 145.68104 47.566958) (xy 145.68508 47.52594) (xy 145.672831 47.40157) + (xy 145.668958 47.362251) (xy 145.621212 47.204853) (xy 145.543676 47.059794) (xy 145.52006 47.031018) (xy 145.465479 46.96451) + (xy 145.465477 46.964508) (xy 145.439331 46.932649) (xy 145.407473 46.906504) (xy 144.779685 46.278718) (xy 144.753531 46.246849) + (xy 144.626386 46.142504) (xy 144.481327 46.064968) (xy 144.323929 46.017222) (xy 144.201259 46.00514) (xy 144.201258 46.00514) + (xy 144.16024 46.0011) (xy 144.119222 46.00514) (xy 136.141838 46.00514) (xy 136.10082 46.0011) (xy 136.059802 46.00514) + (xy 136.059801 46.00514) (xy 135.937131 46.017222) (xy 135.826142 46.05089) (xy 135.779733 46.064968) (xy 135.634674 46.142504) + (xy 135.546547 46.214828) (xy 135.507529 46.246849) (xy 135.481383 46.278708) (xy 134.058574 47.701519) (xy 134.02671 47.727669) + (xy 134.01 47.74803) (xy 134.01 34.497938) (xy 134.0941 34.497938) (xy 134.0941 35.184422) (xy 134.228027 35.857717) + (xy 134.490733 36.491946) (xy 134.872124 37.062738) (xy 135.357542 37.548156) (xy 135.928334 37.929547) (xy 136.562563 38.192253) + (xy 137.235858 38.32618) (xy 137.922342 38.32618) (xy 138.595637 38.192253) (xy 139.229866 37.929547) (xy 139.800658 37.548156) + (xy 140.286076 37.062738) (xy 140.667467 36.491946) (xy 140.930173 35.857717) (xy 141.0641 35.184422) (xy 141.0641 34.497938) + (xy 140.930173 33.824643) (xy 140.667467 33.190414) (xy 140.286076 32.619622) (xy 139.800658 32.134204) (xy 139.229866 31.752813) + (xy 138.595637 31.490107) (xy 137.922342 31.35618) (xy 137.235858 31.35618) (xy 136.562563 31.490107) (xy 135.928334 31.752813) + (xy 135.357542 32.134204) (xy 134.872124 32.619622) (xy 134.490733 33.190414) (xy 134.228027 33.824643) (xy 134.0941 34.497938) + (xy 134.01 34.497938) (xy 134.01 34.322279) (xy 134.073096 33.678778) (xy 134.250606 33.090836) (xy 134.538937 32.548564) + (xy 134.927094 32.072636) (xy 135.400314 31.681155) (xy 135.940552 31.389049) (xy 136.527244 31.207437) (xy 137.168879 31.14) + (xy 168.337069 31.14) + ) + ) + (filled_polygon + (pts + (xy 164.978033 62.036427) (xy 164.965064 62.311899) (xy 165.006086 62.584607) (xy 165.035857 62.667278) (xy 164.936311 62.677082) + (xy 164.778913 62.724828) (xy 164.633854 62.802364) (xy 164.506709 62.906709) (xy 164.480561 62.938571) (xy 163.268579 64.150554) + (xy 163.236709 64.176709) (xy 163.132365 64.303854) (xy 163.132364 64.303855) (xy 163.054828 64.448914) (xy 163.007082 64.606312) + (xy 162.99096 64.77) (xy 162.995 64.811019) (xy 162.995001 73.618971) (xy 162.99096 73.66) (xy 163.007082 73.823688) + (xy 163.054828 73.981086) (xy 163.054829 73.981087) (xy 163.132365 74.126146) (xy 163.23671 74.253291) (xy 163.268574 74.279441) + (xy 164.490558 75.501426) (xy 164.516709 75.533291) (xy 164.643854 75.637636) (xy 164.788913 75.715172) (xy 164.946311 75.762918) + (xy 165.068981 75.775) (xy 165.068991 75.775) (xy 165.109999 75.779039) (xy 165.151007 75.775) (xy 165.244163 75.775) + (xy 165.282549 75.832448) (xy 165.477552 76.027451) (xy 165.706851 76.180664) (xy 165.771594 76.207482) (xy 165.765928 76.209522) + (xy 165.64924 76.271894) (xy 165.581898 76.512293) (xy 166.37 77.300395) (xy 167.158102 76.512293) (xy 167.09076 76.271894) + (xy 166.960664 76.210688) (xy 167.033149 76.180664) (xy 167.262448 76.027451) (xy 167.457451 75.832448) (xy 167.610664 75.603149) + (xy 167.716199 75.348365) (xy 167.77 75.077888) (xy 167.77 74.802112) (xy 167.716199 74.531635) (xy 167.610664 74.276851) + (xy 167.457451 74.047552) (xy 167.262448 73.852549) (xy 167.033149 73.699336) (xy 166.962326 73.67) (xy 167.033149 73.640664) + (xy 167.262448 73.487451) (xy 167.457451 73.292448) (xy 167.610664 73.063149) (xy 167.716199 72.808365) (xy 167.77 72.537888) + (xy 167.77 72.262112) (xy 167.716199 71.991635) (xy 167.610664 71.736851) (xy 167.457451 71.507552) (xy 167.262448 71.312549) + (xy 167.033149 71.159336) (xy 166.962326 71.13) (xy 167.033149 71.100664) (xy 167.262448 70.947451) (xy 167.457451 70.752448) + (xy 167.610664 70.523149) (xy 167.716199 70.268365) (xy 167.77 69.997888) (xy 167.77 69.722112) (xy 167.716199 69.451635) + (xy 167.610664 69.196851) (xy 167.457451 68.967552) (xy 167.262448 68.772549) (xy 167.033149 68.619336) (xy 166.962326 68.59) + (xy 167.033149 68.560664) (xy 167.262448 68.407451) (xy 167.457451 68.212448) (xy 167.610664 67.983149) (xy 167.716199 67.728365) + (xy 167.77 67.457888) (xy 167.77 67.182112) (xy 167.716199 66.911635) (xy 167.610664 66.656851) (xy 167.457451 66.427552) + (xy 167.262448 66.232549) (xy 167.033149 66.079336) (xy 166.962326 66.05) (xy 167.033149 66.020664) (xy 167.262448 65.867451) + (xy 167.457451 65.672448) (xy 167.495837 65.615) (xy 167.588982 65.615) (xy 167.63 65.61904) (xy 167.671018 65.615) + (xy 167.671019 65.615) (xy 167.793689 65.602918) (xy 167.951087 65.555172) (xy 168.096146 65.477636) (xy 168.223291 65.373291) + (xy 168.249446 65.341421) (xy 169.255868 64.335) (xy 169.434132 64.335) (xy 168.348579 65.420554) (xy 168.316709 65.446709) + (xy 168.227697 65.555172) (xy 168.212364 65.573855) (xy 168.134828 65.718914) (xy 168.087082 65.876312) (xy 168.07096 66.04) + (xy 168.075 66.081019) (xy 168.075001 80.934131) (xy 167.399516 81.609617) (xy 167.262448 81.472549) (xy 167.033149 81.319336) + (xy 166.962326 81.29) (xy 167.033149 81.260664) (xy 167.262448 81.107451) (xy 167.457451 80.912448) (xy 167.610664 80.683149) + (xy 167.716199 80.428365) (xy 167.77 80.157888) (xy 167.77 79.882112) (xy 167.716199 79.611635) (xy 167.610664 79.356851) + (xy 167.457451 79.127552) (xy 167.262448 78.932549) (xy 167.033149 78.779336) (xy 166.968406 78.752518) (xy 166.974072 78.750478) + (xy 167.09076 78.688106) (xy 167.158102 78.447707) (xy 166.37 77.659605) (xy 165.581898 78.447707) (xy 165.64924 78.688106) + (xy 165.779336 78.749312) (xy 165.706851 78.779336) (xy 165.477552 78.932549) (xy 165.282549 79.127552) (xy 165.244163 79.185) + (xy 165.131018 79.185) (xy 165.089999 79.18096) (xy 165.048981 79.185) (xy 164.926311 79.197082) (xy 164.768913 79.244828) + (xy 164.623854 79.322364) (xy 164.496709 79.426709) (xy 164.470558 79.458574) (xy 163.268574 80.660559) (xy 163.23671 80.686709) + (xy 163.210562 80.718571) (xy 163.132364 80.813855) (xy 163.054828 80.958914) (xy 163.007082 81.116312) (xy 162.99096 81.28) + (xy 162.995001 81.321028) (xy 162.995 82.508981) (xy 162.99096 82.55) (xy 162.995 82.591018) (xy 163.007082 82.713688) + (xy 163.054828 82.871086) (xy 163.132364 83.016145) (xy 163.236709 83.143291) (xy 163.268579 83.169446) (xy 164.480558 84.381426) + (xy 164.506709 84.413291) (xy 164.633854 84.517636) (xy 164.778913 84.595172) (xy 164.936311 84.642918) (xy 165.03976 84.653107) + (xy 165.023801 84.691635) (xy 164.97 84.962112) (xy 164.97 85.237888) (xy 165.023801 85.508365) (xy 165.030691 85.525) + (xy 163.500093 85.525) (xy 163.555226 85.391898) (xy 163.595 85.191939) (xy 163.595 84.988061) (xy 163.555226 84.788102) + (xy 163.477205 84.599744) (xy 163.363937 84.430226) (xy 163.219774 84.286063) (xy 163.050256 84.172795) (xy 162.861898 84.094774) + (xy 162.716777 84.065908) (xy 158.315 79.664133) (xy 158.315 79.353285) (xy 158.397205 79.230256) (xy 158.475226 79.041898) + (xy 158.515 78.841939) (xy 158.515 78.638061) (xy 158.475226 78.438102) (xy 158.397205 78.249744) (xy 158.283937 78.080226) + (xy 158.139774 77.936063) (xy 157.970256 77.822795) (xy 157.781898 77.744774) (xy 157.581939 77.705) (xy 157.378061 77.705) + (xy 157.178102 77.744774) (xy 156.989744 77.822795) (xy 156.820226 77.936063) (xy 156.676063 78.080226) (xy 156.562795 78.249744) + (xy 156.484774 78.438102) (xy 156.445 78.638061) (xy 156.445 78.841939) (xy 156.484774 79.041898) (xy 156.562795 79.230256) + (xy 156.645 79.353286) (xy 156.645001 79.968972) (xy 156.64096 80.01) (xy 156.657082 80.173688) (xy 156.704828 80.331086) + (xy 156.782364 80.476145) (xy 156.782365 80.476146) (xy 156.88671 80.603291) (xy 156.918574 80.629441) (xy 161.535908 85.246777) + (xy 161.564774 85.391898) (xy 161.619907 85.525) (xy 153.711018 85.525) (xy 153.67 85.52096) (xy 153.506311 85.537082) + (xy 153.348913 85.584828) (xy 153.203854 85.662364) (xy 153.134308 85.719439) (xy 153.076709 85.766709) (xy 153.050563 85.798568) + (xy 149.504133 89.345) (xy 142.975867 89.345) (xy 144.071426 88.249442) (xy 144.103291 88.223291) (xy 144.207636 88.096146) + (xy 144.285172 87.951087) (xy 144.332918 87.793689) (xy 144.345 87.671019) (xy 144.345 87.671017) (xy 144.34904 87.630001) + (xy 144.345 87.588985) (xy 144.345 83.861015) (xy 144.34904 83.819999) (xy 144.34252 83.753801) (xy 144.332918 83.656311) + (xy 144.285172 83.498913) (xy 144.207636 83.353854) (xy 144.103291 83.226709) (xy 144.071428 83.20056) (xy 142.859437 81.98857) + (xy 142.83329 81.95671) (xy 142.763505 81.899438) (xy 142.706145 81.852364) (xy 142.561086 81.774828) (xy 142.403688 81.727082) + (xy 142.24 81.71096) (xy 142.239999 81.71096) (xy 142.097451 81.725) (xy 142.095837 81.725) (xy 142.057451 81.667552) + (xy 141.862448 81.472549) (xy 141.633149 81.319336) (xy 141.562326 81.29) (xy 141.633149 81.260664) (xy 141.862448 81.107451) + (xy 142.057451 80.912448) (xy 142.210664 80.683149) (xy 142.316199 80.428365) (xy 142.37 80.157888) (xy 142.37 79.882112) + (xy 142.316199 79.611635) (xy 142.30024 79.573107) (xy 142.403689 79.562918) (xy 142.561087 79.515172) (xy 142.706146 79.437636) + (xy 142.833291 79.333291) (xy 142.859446 79.301421) (xy 144.608968 77.551899) (xy 164.965064 77.551899) (xy 165.006086 77.824607) + (xy 165.099522 78.084072) (xy 165.161894 78.20076) (xy 165.402293 78.268102) (xy 166.190395 77.48) (xy 166.549605 77.48) + (xy 167.337707 78.268102) (xy 167.578106 78.20076) (xy 167.695506 77.95122) (xy 167.761967 77.683573) (xy 167.774936 77.408101) + (xy 167.733914 77.135393) (xy 167.640478 76.875928) (xy 167.578106 76.75924) (xy 167.337707 76.691898) (xy 166.549605 77.48) + (xy 166.190395 77.48) (xy 165.402293 76.691898) (xy 165.161894 76.75924) (xy 165.044494 77.00878) (xy 164.978033 77.276427) + (xy 164.965064 77.551899) (xy 144.608968 77.551899) (xy 147.881432 74.279437) (xy 147.913291 74.253291) (xy 147.93944 74.221429) + (xy 148.017636 74.126146) (xy 148.095172 73.981087) (xy 148.142918 73.823689) (xy 148.15904 73.66) (xy 148.155 73.618982) + (xy 148.155 62.575867) (xy 148.935868 61.795) (xy 165.037983 61.795) + ) + ) + (filled_polygon + (pts + (xy 166.563748 62.225858) (xy 166.549605 62.24) (xy 166.563748 62.254143) (xy 166.384143 62.433748) (xy 166.37 62.419605) + (xy 166.355858 62.433748) (xy 166.176253 62.254143) (xy 166.190395 62.24) (xy 166.176253 62.225858) (xy 166.355858 62.046253) + (xy 166.37 62.060395) (xy 166.384143 62.046253) + ) + ) + ) + (zone (net 15) (net_name GND) (layer F.Cu) (tstamp 0) (hatch edge 0.508) + (connect_pads (clearance 0.508)) + (min_thickness 0.254) + (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508)) + (polygon + (pts + (xy 219.71 25.4) (xy 219.71 116.84) (xy 214.63 124.46) (xy 128.27 124.46) (xy 121.92 114.3) + (xy 121.92 30.48) (xy 128.27 22.86) (xy 132.08 21.59) (xy 214.63 21.59) + ) + ) + (filled_polygon + (pts + (xy 202.541222 31.203096) (xy 203.129164 31.380606) (xy 203.671436 31.668937) (xy 204.147364 32.057094) (xy 204.538845 32.530314) + (xy 204.830951 33.070552) (xy 205.012563 33.657244) (xy 205.08 34.298879) (xy 205.080001 109.187711) (xy 205.016904 109.831221) + (xy 204.839394 110.419164) (xy 204.551063 110.961436) (xy 204.162906 111.437364) (xy 203.689686 111.828845) (xy 203.149449 112.12095) + (xy 202.562756 112.302563) (xy 201.92113 112.37) (xy 137.192279 112.37) (xy 136.548779 112.306904) (xy 135.960836 112.129394) + (xy 135.418564 111.841063) (xy 134.942636 111.452906) (xy 134.551155 110.979686) (xy 134.25905 110.439449) (xy 134.077437 109.852756) + (xy 134.01 109.21113) (xy 134.01 40.64) (xy 137.59096 40.64) (xy 137.595001 40.681029) (xy 137.595 105.378982) + (xy 137.59096 105.42) (xy 137.595 105.461018) (xy 137.607082 105.583688) (xy 137.654828 105.741086) (xy 137.732364 105.886145) + (xy 137.836709 106.013291) (xy 137.868579 106.039446) (xy 139.583479 107.754347) (xy 139.57 107.822112) (xy 139.57 108.097888) + (xy 139.623801 108.368365) (xy 139.729336 108.623149) (xy 139.882549 108.852448) (xy 140.077552 109.047451) (xy 140.306851 109.200664) + (xy 140.561635 109.306199) (xy 140.832112 109.36) (xy 141.107888 109.36) (xy 141.378365 109.306199) (xy 141.633149 109.200664) + (xy 141.862448 109.047451) (xy 142.057451 108.852448) (xy 142.210664 108.623149) (xy 142.316199 108.368365) (xy 142.37 108.097888) + (xy 142.37 107.822112) (xy 142.316199 107.551635) (xy 142.210664 107.296851) (xy 142.057451 107.067552) (xy 141.862448 106.872549) + (xy 141.633149 106.719336) (xy 141.562326 106.69) (xy 141.633149 106.660664) (xy 141.862448 106.507451) (xy 142.057451 106.312448) + (xy 142.210664 106.083149) (xy 142.316199 105.828365) (xy 142.37 105.557888) (xy 142.37 105.282112) (xy 142.316199 105.011635) + (xy 142.210664 104.756851) (xy 142.057451 104.527552) (xy 141.862448 104.332549) (xy 141.633149 104.179336) (xy 141.562326 104.15) + (xy 141.633149 104.120664) (xy 141.862448 103.967451) (xy 142.057451 103.772448) (xy 142.210664 103.543149) (xy 142.316199 103.288365) + (xy 142.37 103.017888) (xy 142.37 102.742112) (xy 142.316199 102.471635) (xy 142.210664 102.216851) (xy 142.057451 101.987552) + (xy 141.862448 101.792549) (xy 141.633149 101.639336) (xy 141.562326 101.61) (xy 141.633149 101.580664) (xy 141.862448 101.427451) + (xy 142.057451 101.232448) (xy 142.210664 101.003149) (xy 142.316199 100.748365) (xy 142.37 100.477888) (xy 142.37 100.202112) + (xy 142.316199 99.931635) (xy 142.210664 99.676851) (xy 142.057451 99.447552) (xy 141.862448 99.252549) (xy 141.633149 99.099336) + (xy 141.562326 99.07) (xy 141.633149 99.040664) (xy 141.862448 98.887451) (xy 142.057451 98.692448) (xy 142.210664 98.463149) + (xy 142.316199 98.208365) (xy 142.37 97.937888) (xy 142.37 97.662112) (xy 142.316199 97.391635) (xy 142.210664 97.136851) + (xy 142.057451 96.907552) (xy 141.862448 96.712549) (xy 141.633149 96.559336) (xy 141.568406 96.532518) (xy 141.574072 96.530478) + (xy 141.69076 96.468106) (xy 141.758102 96.227707) (xy 140.97 95.439605) (xy 140.181898 96.227707) (xy 140.24924 96.468106) + (xy 140.379336 96.529312) (xy 140.306851 96.559336) (xy 140.077552 96.712549) (xy 139.882549 96.907552) (xy 139.729336 97.136851) + (xy 139.623801 97.391635) (xy 139.57 97.662112) (xy 139.57 97.937888) (xy 139.623801 98.208365) (xy 139.729336 98.463149) + (xy 139.882549 98.692448) (xy 140.077552 98.887451) (xy 140.306851 99.040664) (xy 140.377674 99.07) (xy 140.306851 99.099336) + (xy 140.077552 99.252549) (xy 139.882549 99.447552) (xy 139.729336 99.676851) (xy 139.623801 99.931635) (xy 139.57 100.202112) + (xy 139.57 100.477888) (xy 139.623801 100.748365) (xy 139.729336 101.003149) (xy 139.882549 101.232448) (xy 140.077552 101.427451) + (xy 140.306851 101.580664) (xy 140.377674 101.61) (xy 140.306851 101.639336) (xy 140.077552 101.792549) (xy 139.882549 101.987552) + (xy 139.729336 102.216851) (xy 139.623801 102.471635) (xy 139.57 102.742112) (xy 139.57 103.017888) (xy 139.623801 103.288365) + (xy 139.729336 103.543149) (xy 139.882549 103.772448) (xy 140.077552 103.967451) (xy 140.306851 104.120664) (xy 140.377674 104.15) + (xy 140.306851 104.179336) (xy 140.077552 104.332549) (xy 139.882549 104.527552) (xy 139.729336 104.756851) (xy 139.623801 105.011635) + (xy 139.57 105.282112) (xy 139.57 105.379133) (xy 139.265 105.074133) (xy 139.265 95.331899) (xy 139.565064 95.331899) + (xy 139.606086 95.604607) (xy 139.699522 95.864072) (xy 139.761894 95.98076) (xy 140.002293 96.048102) (xy 140.790395 95.26) + (xy 140.002293 94.471898) (xy 139.761894 94.53924) (xy 139.644494 94.78878) (xy 139.578033 95.056427) (xy 139.565064 95.331899) + (xy 139.265 95.331899) (xy 139.265 61.475) (xy 139.566928 61.475) (xy 139.566928 63.005) (xy 139.579188 63.129482) + (xy 139.615498 63.24918) (xy 139.674463 63.359494) (xy 139.753815 63.456185) (xy 139.850506 63.535537) (xy 139.96082 63.594502) + (xy 140.080518 63.630812) (xy 140.158459 63.638488) (xy 140.077552 63.692549) (xy 139.882549 63.887552) (xy 139.729336 64.116851) + (xy 139.623801 64.371635) (xy 139.57 64.642112) (xy 139.57 64.917888) (xy 139.623801 65.188365) (xy 139.729336 65.443149) + (xy 139.882549 65.672448) (xy 140.077552 65.867451) (xy 140.306851 66.020664) (xy 140.377674 66.05) (xy 140.306851 66.079336) + (xy 140.077552 66.232549) (xy 139.882549 66.427552) (xy 139.729336 66.656851) (xy 139.623801 66.911635) (xy 139.57 67.182112) + (xy 139.57 67.457888) (xy 139.623801 67.728365) (xy 139.729336 67.983149) (xy 139.882549 68.212448) (xy 140.077552 68.407451) + (xy 140.306851 68.560664) (xy 140.377674 68.59) (xy 140.306851 68.619336) (xy 140.077552 68.772549) (xy 139.882549 68.967552) + (xy 139.729336 69.196851) (xy 139.623801 69.451635) (xy 139.57 69.722112) (xy 139.57 69.997888) (xy 139.623801 70.268365) + (xy 139.729336 70.523149) (xy 139.882549 70.752448) (xy 140.077552 70.947451) (xy 140.306851 71.100664) (xy 140.377674 71.13) + (xy 140.306851 71.159336) (xy 140.077552 71.312549) (xy 139.882549 71.507552) (xy 139.729336 71.736851) (xy 139.623801 71.991635) + (xy 139.57 72.262112) (xy 139.57 72.537888) (xy 139.623801 72.808365) (xy 139.729336 73.063149) (xy 139.882549 73.292448) + (xy 140.077552 73.487451) (xy 140.306851 73.640664) (xy 140.377674 73.67) (xy 140.306851 73.699336) (xy 140.077552 73.852549) + (xy 139.882549 74.047552) (xy 139.729336 74.276851) (xy 139.623801 74.531635) (xy 139.57 74.802112) (xy 139.57 75.077888) + (xy 139.623801 75.348365) (xy 139.729336 75.603149) (xy 139.882549 75.832448) (xy 140.077552 76.027451) (xy 140.306851 76.180664) + (xy 140.377674 76.21) (xy 140.306851 76.239336) (xy 140.077552 76.392549) (xy 139.882549 76.587552) (xy 139.729336 76.816851) + (xy 139.623801 77.071635) (xy 139.57 77.342112) (xy 139.57 77.617888) (xy 139.623801 77.888365) (xy 139.729336 78.143149) + (xy 139.882549 78.372448) (xy 140.077552 78.567451) (xy 140.306851 78.720664) (xy 140.377674 78.75) (xy 140.306851 78.779336) + (xy 140.077552 78.932549) (xy 139.882549 79.127552) (xy 139.729336 79.356851) (xy 139.623801 79.611635) (xy 139.57 79.882112) + (xy 139.57 80.157888) (xy 139.623801 80.428365) (xy 139.729336 80.683149) (xy 139.882549 80.912448) (xy 140.077552 81.107451) + (xy 140.306851 81.260664) (xy 140.377674 81.29) (xy 140.306851 81.319336) (xy 140.077552 81.472549) (xy 139.882549 81.667552) + (xy 139.729336 81.896851) (xy 139.623801 82.151635) (xy 139.57 82.422112) (xy 139.57 82.697888) (xy 139.623801 82.968365) + (xy 139.729336 83.223149) (xy 139.882549 83.452448) (xy 140.077552 83.647451) (xy 140.306851 83.800664) (xy 140.377674 83.83) + (xy 140.306851 83.859336) (xy 140.077552 84.012549) (xy 139.882549 84.207552) (xy 139.729336 84.436851) (xy 139.623801 84.691635) + (xy 139.57 84.962112) (xy 139.57 85.237888) (xy 139.623801 85.508365) (xy 139.729336 85.763149) (xy 139.882549 85.992448) + (xy 140.077552 86.187451) (xy 140.306851 86.340664) (xy 140.377674 86.37) (xy 140.306851 86.399336) (xy 140.077552 86.552549) + (xy 139.882549 86.747552) (xy 139.729336 86.976851) (xy 139.623801 87.231635) (xy 139.57 87.502112) (xy 139.57 87.777888) + (xy 139.623801 88.048365) (xy 139.729336 88.303149) (xy 139.882549 88.532448) (xy 140.077552 88.727451) (xy 140.306851 88.880664) + (xy 140.377674 88.91) (xy 140.306851 88.939336) (xy 140.077552 89.092549) (xy 139.882549 89.287552) (xy 139.729336 89.516851) + (xy 139.623801 89.771635) (xy 139.57 90.042112) (xy 139.57 90.317888) (xy 139.623801 90.588365) (xy 139.729336 90.843149) + (xy 139.882549 91.072448) (xy 140.077552 91.267451) (xy 140.306851 91.420664) (xy 140.377674 91.45) (xy 140.306851 91.479336) + (xy 140.077552 91.632549) (xy 139.882549 91.827552) (xy 139.729336 92.056851) (xy 139.623801 92.311635) (xy 139.57 92.582112) + (xy 139.57 92.857888) (xy 139.623801 93.128365) (xy 139.729336 93.383149) (xy 139.882549 93.612448) (xy 140.077552 93.807451) + (xy 140.306851 93.960664) (xy 140.371594 93.987482) (xy 140.365928 93.989522) (xy 140.24924 94.051894) (xy 140.181898 94.292293) + (xy 140.97 95.080395) (xy 140.984143 95.066253) (xy 141.163748 95.245858) (xy 141.149605 95.26) (xy 141.937707 96.048102) + (xy 142.178106 95.98076) (xy 142.295506 95.73122) (xy 142.361967 95.463573) (xy 142.370093 95.290961) (xy 146.815558 99.736426) + (xy 146.841708 99.76829) (xy 146.923204 99.835172) (xy 146.968853 99.872635) (xy 147.113912 99.950171) (xy 147.27131 99.997917) + (xy 147.434998 100.014039) (xy 147.476017 100.009999) (xy 165.008213 100.009999) (xy 164.97 100.202112) (xy 164.97 100.477888) + (xy 165.023801 100.748365) (xy 165.129336 101.003149) (xy 165.282549 101.232448) (xy 165.477552 101.427451) (xy 165.706851 101.580664) + (xy 165.777674 101.61) (xy 165.706851 101.639336) (xy 165.477552 101.792549) (xy 165.282549 101.987552) (xy 165.129336 102.216851) + (xy 165.023801 102.471635) (xy 164.97 102.742112) (xy 164.97 103.017888) (xy 165.023801 103.288365) (xy 165.129336 103.543149) + (xy 165.282549 103.772448) (xy 165.477552 103.967451) (xy 165.706851 104.120664) (xy 165.777674 104.15) (xy 165.706851 104.179336) + (xy 165.477552 104.332549) (xy 165.282549 104.527552) (xy 165.129336 104.756851) (xy 165.023801 105.011635) (xy 164.97 105.282112) + (xy 164.97 105.557888) (xy 165.023801 105.828365) (xy 165.129336 106.083149) (xy 165.282549 106.312448) (xy 165.477552 106.507451) + (xy 165.706851 106.660664) (xy 165.777674 106.69) (xy 165.706851 106.719336) (xy 165.477552 106.872549) (xy 165.282549 107.067552) + (xy 165.129336 107.296851) (xy 165.023801 107.551635) (xy 164.97 107.822112) (xy 164.97 108.097888) (xy 165.023801 108.368365) + (xy 165.129336 108.623149) (xy 165.282549 108.852448) (xy 165.477552 109.047451) (xy 165.706851 109.200664) (xy 165.961635 109.306199) + (xy 166.232112 109.36) (xy 166.507888 109.36) (xy 166.778365 109.306199) (xy 167.033149 109.200664) (xy 167.262448 109.047451) + (xy 167.457451 108.852448) (xy 167.610664 108.623149) (xy 167.716199 108.368365) (xy 167.718647 108.356058) (xy 198.06908 108.356058) + (xy 198.06908 109.042542) (xy 198.203007 109.715837) (xy 198.465713 110.350066) (xy 198.847104 110.920858) (xy 199.332522 111.406276) + (xy 199.903314 111.787667) (xy 200.537543 112.050373) (xy 201.210838 112.1843) (xy 201.897322 112.1843) (xy 202.570617 112.050373) + (xy 203.204846 111.787667) (xy 203.775638 111.406276) (xy 204.261056 110.920858) (xy 204.642447 110.350066) (xy 204.905153 109.715837) + (xy 205.03908 109.042542) (xy 205.03908 108.356058) (xy 204.905153 107.682763) (xy 204.642447 107.048534) (xy 204.261056 106.477742) + (xy 203.775638 105.992324) (xy 203.204846 105.610933) (xy 202.570617 105.348227) (xy 201.897322 105.2143) (xy 201.210838 105.2143) + (xy 200.537543 105.348227) (xy 199.903314 105.610933) (xy 199.332522 105.992324) (xy 198.847104 106.477742) (xy 198.465713 107.048534) + (xy 198.203007 107.682763) (xy 198.06908 108.356058) (xy 167.718647 108.356058) (xy 167.77 108.097888) (xy 167.77 107.822112) + (xy 167.716199 107.551635) (xy 167.610664 107.296851) (xy 167.457451 107.067552) (xy 167.262448 106.872549) (xy 167.033149 106.719336) + (xy 166.962326 106.69) (xy 167.033149 106.660664) (xy 167.262448 106.507451) (xy 167.457451 106.312448) (xy 167.610664 106.083149) + (xy 167.716199 105.828365) (xy 167.77 105.557888) (xy 167.77 105.282112) (xy 167.716199 105.011635) (xy 167.610664 104.756851) + (xy 167.457451 104.527552) (xy 167.262448 104.332549) (xy 167.033149 104.179336) (xy 166.962326 104.15) (xy 167.033149 104.120664) + (xy 167.262448 103.967451) (xy 167.457451 103.772448) (xy 167.610664 103.543149) (xy 167.716199 103.288365) (xy 167.77 103.017888) + (xy 167.77 102.742112) (xy 167.716199 102.471635) (xy 167.610664 102.216851) (xy 167.457451 101.987552) (xy 167.262448 101.792549) + (xy 167.033149 101.639336) (xy 166.962326 101.61) (xy 167.033149 101.580664) (xy 167.262448 101.427451) (xy 167.457451 101.232448) + (xy 167.495837 101.175) (xy 176.478982 101.175) (xy 176.52 101.17904) (xy 176.561018 101.175) (xy 176.561019 101.175) + (xy 176.683689 101.162918) (xy 176.841087 101.115172) (xy 176.986146 101.037636) (xy 177.113291 100.933291) (xy 177.139446 100.901421) + (xy 178.361426 99.679442) (xy 178.393291 99.653291) (xy 178.497636 99.526146) (xy 178.575172 99.381087) (xy 178.622918 99.223689) + (xy 178.635 99.101019) (xy 178.635 99.101009) (xy 178.639039 99.060001) (xy 178.635 99.018993) (xy 178.635 72.288061) + (xy 179.305 72.288061) (xy 179.305 72.491939) (xy 179.344774 72.691898) (xy 179.422795 72.880256) (xy 179.536063 73.049774) + (xy 179.680226 73.193937) (xy 179.849744 73.307205) (xy 180.038102 73.385226) (xy 180.238061 73.425) (xy 180.441939 73.425) + (xy 180.641898 73.385226) (xy 180.830256 73.307205) (xy 180.953285 73.225) (xy 190.458982 73.225) (xy 190.5 73.22904) + (xy 190.541018 73.225) (xy 190.541019 73.225) (xy 190.663689 73.212918) (xy 190.821087 73.165172) (xy 190.966146 73.087636) + (xy 191.093291 72.983291) (xy 191.119446 72.951421) (xy 197.901928 66.168941) (xy 197.901928 66.89) (xy 197.914188 67.014482) + (xy 197.950498 67.13418) (xy 198.009463 67.244494) (xy 198.088815 67.341185) (xy 198.185506 67.420537) (xy 198.29582 67.479502) + (xy 198.415518 67.515812) (xy 198.54 67.528072) (xy 200.24 67.528072) (xy 200.364482 67.515812) (xy 200.48418 67.479502) + (xy 200.594494 67.420537) (xy 200.691185 67.341185) (xy 200.770537 67.244494) (xy 200.829502 67.13418) (xy 200.865812 67.014482) + (xy 200.878072 66.89) (xy 200.878072 65.19) (xy 200.865812 65.065518) (xy 200.829502 64.94582) (xy 200.770537 64.835506) + (xy 200.691185 64.738815) (xy 200.594494 64.659463) (xy 200.48418 64.600498) (xy 200.41162 64.578487) (xy 200.543475 64.446632) + (xy 200.70599 64.203411) (xy 200.817932 63.933158) (xy 200.875 63.64626) (xy 200.875 63.35374) (xy 200.817932 63.066842) + (xy 200.70599 62.796589) (xy 200.543475 62.553368) (xy 200.336632 62.346525) (xy 200.154466 62.224805) (xy 200.271355 62.155178) + (xy 200.487588 61.960269) (xy 200.661641 61.72692) (xy 200.786825 61.464099) (xy 200.831476 61.31689) (xy 200.710155 61.087) + (xy 199.517 61.087) (xy 199.517 61.107) (xy 199.263 61.107) (xy 199.263 61.087) (xy 198.069845 61.087) + (xy 197.948524 61.31689) (xy 197.993175 61.464099) (xy 198.118359 61.72692) (xy 198.292412 61.960269) (xy 198.508645 62.155178) + (xy 198.625534 62.224805) (xy 198.443368 62.346525) (xy 198.236525 62.553368) (xy 198.07401 62.796589) (xy 197.962068 63.066842) + (xy 197.905 63.35374) (xy 197.905 63.64626) (xy 197.931193 63.777939) (xy 190.154133 71.555) (xy 180.953285 71.555) + (xy 180.830256 71.472795) (xy 180.641898 71.394774) (xy 180.441939 71.355) (xy 180.238061 71.355) (xy 180.038102 71.394774) + (xy 179.849744 71.472795) (xy 179.680226 71.586063) (xy 179.536063 71.730226) (xy 179.422795 71.899744) (xy 179.344774 72.088102) + (xy 179.305 72.288061) (xy 178.635 72.288061) (xy 178.635 69.808065) (xy 178.746632 69.733475) (xy 178.953475 69.526632) + (xy 179.07 69.35224) (xy 179.186525 69.526632) (xy 179.393368 69.733475) (xy 179.636589 69.89599) (xy 179.906842 70.007932) + (xy 180.19374 70.065) (xy 180.48626 70.065) (xy 180.773158 70.007932) (xy 181.043411 69.89599) (xy 181.286632 69.733475) + (xy 181.493475 69.526632) (xy 181.61 69.35224) (xy 181.726525 69.526632) (xy 181.933368 69.733475) (xy 182.176589 69.89599) + (xy 182.446842 70.007932) (xy 182.73374 70.065) (xy 183.02626 70.065) (xy 183.313158 70.007932) (xy 183.583411 69.89599) + (xy 183.826632 69.733475) (xy 184.033475 69.526632) (xy 184.15 69.35224) (xy 184.266525 69.526632) (xy 184.473368 69.733475) + (xy 184.716589 69.89599) (xy 184.986842 70.007932) (xy 185.27374 70.065) (xy 185.56626 70.065) (xy 185.853158 70.007932) + (xy 186.123411 69.89599) (xy 186.366632 69.733475) (xy 186.573475 69.526632) (xy 186.69 69.35224) (xy 186.806525 69.526632) + (xy 187.013368 69.733475) (xy 187.256589 69.89599) (xy 187.526842 70.007932) (xy 187.81374 70.065) (xy 188.10626 70.065) + (xy 188.393158 70.007932) (xy 188.663411 69.89599) (xy 188.906632 69.733475) (xy 189.038487 69.60162) (xy 189.060498 69.67418) + (xy 189.119463 69.784494) (xy 189.198815 69.881185) (xy 189.295506 69.960537) (xy 189.40582 70.019502) (xy 189.525518 70.055812) + (xy 189.65 70.068072) (xy 190.21425 70.065) (xy 190.373 69.90625) (xy 190.373 68.707) (xy 190.627 68.707) + (xy 190.627 69.90625) (xy 190.78575 70.065) (xy 191.35 70.068072) (xy 191.474482 70.055812) (xy 191.59418 70.019502) + (xy 191.704494 69.960537) (xy 191.801185 69.881185) (xy 191.880537 69.784494) (xy 191.939502 69.67418) (xy 191.975812 69.554482) + (xy 191.988072 69.43) (xy 191.985 68.86575) (xy 191.82625 68.707) (xy 190.627 68.707) (xy 190.373 68.707) + (xy 190.353 68.707) (xy 190.353 68.453) (xy 190.373 68.453) (xy 190.373 67.25375) (xy 190.627 67.25375) + (xy 190.627 68.453) (xy 191.82625 68.453) (xy 191.985 68.29425) (xy 191.988072 67.73) (xy 191.975812 67.605518) + (xy 191.939502 67.48582) (xy 191.880537 67.375506) (xy 191.801185 67.278815) (xy 191.704494 67.199463) (xy 191.59418 67.140498) + (xy 191.474482 67.104188) (xy 191.35 67.091928) (xy 190.78575 67.095) (xy 190.627 67.25375) (xy 190.373 67.25375) + (xy 190.21425 67.095) (xy 189.65 67.091928) (xy 189.525518 67.104188) (xy 189.40582 67.140498) (xy 189.295506 67.199463) + (xy 189.198815 67.278815) (xy 189.119463 67.375506) (xy 189.060498 67.48582) (xy 189.038487 67.55838) (xy 188.906632 67.426525) + (xy 188.795 67.351935) (xy 188.795 66.385867) (xy 196.14143 59.039438) (xy 196.173291 59.013291) (xy 196.277636 58.886146) + (xy 196.355172 58.741087) (xy 196.402918 58.583689) (xy 196.415 58.461019) (xy 196.415 58.461009) (xy 196.419039 58.420001) + (xy 196.415 58.378993) (xy 196.415 48.11374) (xy 197.905 48.11374) (xy 197.905 48.40626) (xy 197.962068 48.693158) + (xy 198.07401 48.963411) (xy 198.236525 49.206632) (xy 198.443368 49.413475) (xy 198.61776 49.53) (xy 198.443368 49.646525) + (xy 198.236525 49.853368) (xy 198.07401 50.096589) (xy 197.962068 50.366842) (xy 197.905 50.65374) (xy 197.905 50.94626) + (xy 197.962068 51.233158) (xy 198.07401 51.503411) (xy 198.236525 51.746632) (xy 198.443368 51.953475) (xy 198.61776 52.07) + (xy 198.443368 52.186525) (xy 198.236525 52.393368) (xy 198.07401 52.636589) (xy 197.962068 52.906842) (xy 197.905 53.19374) + (xy 197.905 53.48626) (xy 197.962068 53.773158) (xy 198.07401 54.043411) (xy 198.236525 54.286632) (xy 198.443368 54.493475) + (xy 198.61776 54.61) (xy 198.443368 54.726525) (xy 198.236525 54.933368) (xy 198.07401 55.176589) (xy 197.962068 55.446842) + (xy 197.905 55.73374) (xy 197.905 56.02626) (xy 197.962068 56.313158) (xy 198.07401 56.583411) (xy 198.236525 56.826632) + (xy 198.443368 57.033475) (xy 198.61776 57.15) (xy 198.443368 57.266525) (xy 198.236525 57.473368) (xy 198.07401 57.716589) + (xy 197.962068 57.986842) (xy 197.905 58.27374) (xy 197.905 58.56626) (xy 197.962068 58.853158) (xy 198.07401 59.123411) + (xy 198.236525 59.366632) (xy 198.443368 59.573475) (xy 198.625534 59.695195) (xy 198.508645 59.764822) (xy 198.292412 59.959731) + (xy 198.118359 60.19308) (xy 197.993175 60.455901) (xy 197.948524 60.60311) (xy 198.069845 60.833) (xy 199.263 60.833) + (xy 199.263 60.813) (xy 199.517 60.813) (xy 199.517 60.833) (xy 200.710155 60.833) (xy 200.831476 60.60311) + (xy 200.786825 60.455901) (xy 200.661641 60.19308) (xy 200.487588 59.959731) (xy 200.271355 59.764822) (xy 200.154466 59.695195) + (xy 200.336632 59.573475) (xy 200.543475 59.366632) (xy 200.70599 59.123411) (xy 200.817932 58.853158) (xy 200.875 58.56626) + (xy 200.875 58.27374) (xy 200.817932 57.986842) (xy 200.70599 57.716589) (xy 200.543475 57.473368) (xy 200.336632 57.266525) + (xy 200.16224 57.15) (xy 200.336632 57.033475) (xy 200.543475 56.826632) (xy 200.70599 56.583411) (xy 200.817932 56.313158) + (xy 200.875 56.02626) (xy 200.875 55.73374) (xy 200.817932 55.446842) (xy 200.70599 55.176589) (xy 200.543475 54.933368) + (xy 200.336632 54.726525) (xy 200.16224 54.61) (xy 200.336632 54.493475) (xy 200.543475 54.286632) (xy 200.70599 54.043411) + (xy 200.817932 53.773158) (xy 200.875 53.48626) (xy 200.875 53.19374) (xy 200.817932 52.906842) (xy 200.70599 52.636589) + (xy 200.543475 52.393368) (xy 200.336632 52.186525) (xy 200.16224 52.07) (xy 200.336632 51.953475) (xy 200.543475 51.746632) + (xy 200.70599 51.503411) (xy 200.817932 51.233158) (xy 200.875 50.94626) (xy 200.875 50.65374) (xy 200.817932 50.366842) + (xy 200.70599 50.096589) (xy 200.543475 49.853368) (xy 200.336632 49.646525) (xy 200.16224 49.53) (xy 200.336632 49.413475) + (xy 200.543475 49.206632) (xy 200.70599 48.963411) (xy 200.817932 48.693158) (xy 200.875 48.40626) (xy 200.875 48.11374) + (xy 200.817932 47.826842) (xy 200.70599 47.556589) (xy 200.543475 47.313368) (xy 200.336632 47.106525) (xy 200.093411 46.94401) + (xy 199.823158 46.832068) (xy 199.53626 46.775) (xy 199.24374 46.775) (xy 198.956842 46.832068) (xy 198.686589 46.94401) + (xy 198.443368 47.106525) (xy 198.236525 47.313368) (xy 198.07401 47.556589) (xy 197.962068 47.826842) (xy 197.905 48.11374) + (xy 196.415 48.11374) (xy 196.415 47.215869) (xy 199.615871 44.015) (xy 200.618982 44.015) (xy 200.66 44.01904) + (xy 200.701018 44.015) (xy 200.701019 44.015) (xy 200.823689 44.002918) (xy 200.981087 43.955172) (xy 201.126146 43.877636) + (xy 201.253291 43.773291) (xy 201.279446 43.741421) (xy 202.491428 42.52944) (xy 202.523291 42.503291) (xy 202.627636 42.376146) + (xy 202.705172 42.231087) (xy 202.752918 42.073689) (xy 202.765 41.951019) (xy 202.765 41.951017) (xy 202.76904 41.910001) + (xy 202.765 41.868985) (xy 202.765 36.871015) (xy 202.76904 36.829999) (xy 202.762588 36.764494) (xy 202.752918 36.666311) + (xy 202.705172 36.508913) (xy 202.627636 36.363854) (xy 202.523291 36.236709) (xy 202.491426 36.210558) (xy 201.279446 34.998579) + (xy 201.253291 34.966709) (xy 201.126146 34.862364) (xy 200.981087 34.784828) (xy 200.823689 34.737082) (xy 200.701019 34.725) + (xy 200.701018 34.725) (xy 200.66 34.72096) (xy 200.618982 34.725) (xy 200.618065 34.725) (xy 200.543475 34.613368) + (xy 200.336632 34.406525) (xy 200.093411 34.24401) (xy 199.823158 34.132068) (xy 199.53626 34.075) (xy 199.24374 34.075) + (xy 198.956842 34.132068) (xy 198.686589 34.24401) (xy 198.443368 34.406525) (xy 198.236525 34.613368) (xy 198.07401 34.856589) + (xy 197.962068 35.126842) (xy 197.905 35.41374) (xy 197.905 35.70626) (xy 197.962068 35.993158) (xy 198.07401 36.263411) + (xy 198.236525 36.506632) (xy 198.443368 36.713475) (xy 198.61776 36.83) (xy 198.443368 36.946525) (xy 198.236525 37.153368) + (xy 198.07401 37.396589) (xy 197.962068 37.666842) (xy 197.905 37.95374) (xy 197.905 38.24626) (xy 197.931193 38.377939) + (xy 194.47501 41.834123) (xy 194.47501 38.741028) (xy 194.47905 38.70001) (xy 194.46869 38.594828) (xy 194.462928 38.536321) + (xy 194.415182 38.378923) (xy 194.337646 38.233864) (xy 194.233301 38.106719) (xy 194.201443 38.080574) (xy 191.119446 34.998579) + (xy 191.093291 34.966709) (xy 190.966146 34.862364) (xy 190.821087 34.784828) (xy 190.663689 34.737082) (xy 190.541019 34.725) + (xy 190.541018 34.725) (xy 190.5 34.72096) (xy 190.458982 34.725) (xy 190.458065 34.725) (xy 190.383475 34.613368) + (xy 190.176632 34.406525) (xy 189.933411 34.24401) (xy 189.663158 34.132068) (xy 189.37626 34.075) (xy 189.08374 34.075) + (xy 188.796842 34.132068) (xy 188.526589 34.24401) (xy 188.283368 34.406525) (xy 188.151513 34.53838) (xy 188.129502 34.46582) + (xy 188.070537 34.355506) (xy 187.991185 34.258815) (xy 187.894494 34.179463) (xy 187.78418 34.120498) (xy 187.664482 34.084188) + (xy 187.54 34.071928) (xy 186.97575 34.075) (xy 186.817 34.23375) (xy 186.817 35.433) (xy 186.837 35.433) + (xy 186.837 35.687) (xy 186.817 35.687) (xy 186.817 36.88625) (xy 186.97575 37.045) (xy 187.54 37.048072) + (xy 187.664482 37.035812) (xy 187.78418 36.999502) (xy 187.894494 36.940537) (xy 187.991185 36.861185) (xy 188.070537 36.764494) + (xy 188.129502 36.65418) (xy 188.151513 36.58162) (xy 188.283368 36.713475) (xy 188.526589 36.87599) (xy 188.796842 36.987932) + (xy 189.08374 37.045) (xy 189.37626 37.045) (xy 189.663158 36.987932) (xy 189.933411 36.87599) (xy 190.176632 36.713475) + (xy 190.32462 36.565487) (xy 192.80501 39.045879) (xy 192.80501 41.764143) (xy 191.119446 40.078579) (xy 191.093291 40.046709) + (xy 190.966146 39.942364) (xy 190.821087 39.864828) (xy 190.663689 39.817082) (xy 190.541019 39.805) (xy 190.541018 39.805) + (xy 190.5 39.80096) (xy 190.458982 39.805) (xy 190.458065 39.805) (xy 190.383475 39.693368) (xy 190.176632 39.486525) + (xy 189.933411 39.32401) (xy 189.663158 39.212068) (xy 189.37626 39.155) (xy 189.08374 39.155) (xy 188.796842 39.212068) + (xy 188.526589 39.32401) (xy 188.283368 39.486525) (xy 188.151513 39.61838) (xy 188.129502 39.54582) (xy 188.070537 39.435506) + (xy 187.991185 39.338815) (xy 187.894494 39.259463) (xy 187.78418 39.200498) (xy 187.664482 39.164188) (xy 187.54 39.151928) + (xy 186.97575 39.155) (xy 186.817 39.31375) (xy 186.817 40.513) (xy 186.837 40.513) (xy 186.837 40.767) + (xy 186.817 40.767) (xy 186.817 41.96625) (xy 186.97575 42.125) (xy 187.54 42.128072) (xy 187.664482 42.115812) + (xy 187.78418 42.079502) (xy 187.894494 42.020537) (xy 187.991185 41.941185) (xy 188.070537 41.844494) (xy 188.129502 41.73418) + (xy 188.151513 41.66162) (xy 188.283368 41.793475) (xy 188.526589 41.95599) (xy 188.796842 42.067932) (xy 189.08374 42.125) + (xy 189.37626 42.125) (xy 189.663158 42.067932) (xy 189.933411 41.95599) (xy 190.176632 41.793475) (xy 190.32462 41.645487) + (xy 192.205 43.525868) (xy 192.205001 55.53413) (xy 188.884133 58.855) (xy 176.005867 58.855) (xy 178.361427 56.499441) + (xy 178.393291 56.473291) (xy 178.497636 56.346146) (xy 178.575172 56.201087) (xy 178.622918 56.043689) (xy 178.635 55.921019) + (xy 178.635 55.921009) (xy 178.639039 55.880001) (xy 178.635 55.838993) (xy 178.635 54.19) (xy 178.851928 54.19) + (xy 178.864188 54.314482) (xy 178.900498 54.43418) (xy 178.959463 54.544494) (xy 179.038815 54.641185) (xy 179.135506 54.720537) + (xy 179.24582 54.779502) (xy 179.365518 54.815812) (xy 179.49 54.828072) (xy 180.05425 54.825) (xy 180.213 54.66625) + (xy 180.213 53.467) (xy 179.01375 53.467) (xy 178.855 53.62575) (xy 178.851928 54.19) (xy 178.635 54.19) + (xy 178.635 52.49) (xy 178.851928 52.49) (xy 178.855 53.05425) (xy 179.01375 53.213) (xy 180.213 53.213) + (xy 180.213 52.01375) (xy 180.467 52.01375) (xy 180.467 53.213) (xy 180.487 53.213) (xy 180.487 53.467) + (xy 180.467 53.467) (xy 180.467 54.66625) (xy 180.62575 54.825) (xy 181.19 54.828072) (xy 181.314482 54.815812) + (xy 181.43418 54.779502) (xy 181.544494 54.720537) (xy 181.641185 54.641185) (xy 181.720537 54.544494) (xy 181.779502 54.43418) + (xy 181.801513 54.36162) (xy 181.933368 54.493475) (xy 182.176589 54.65599) (xy 182.446842 54.767932) (xy 182.73374 54.825) + (xy 183.02626 54.825) (xy 183.313158 54.767932) (xy 183.583411 54.65599) (xy 183.826632 54.493475) (xy 184.033475 54.286632) + (xy 184.15 54.11224) (xy 184.266525 54.286632) (xy 184.473368 54.493475) (xy 184.716589 54.65599) (xy 184.986842 54.767932) + (xy 185.27374 54.825) (xy 185.56626 54.825) (xy 185.853158 54.767932) (xy 186.123411 54.65599) (xy 186.366632 54.493475) + (xy 186.573475 54.286632) (xy 186.69 54.11224) (xy 186.806525 54.286632) (xy 187.013368 54.493475) (xy 187.256589 54.65599) + (xy 187.526842 54.767932) (xy 187.81374 54.825) (xy 188.10626 54.825) (xy 188.393158 54.767932) (xy 188.663411 54.65599) + (xy 188.906632 54.493475) (xy 189.113475 54.286632) (xy 189.23 54.11224) (xy 189.346525 54.286632) (xy 189.553368 54.493475) + (xy 189.796589 54.65599) (xy 190.066842 54.767932) (xy 190.35374 54.825) (xy 190.64626 54.825) (xy 190.933158 54.767932) + (xy 191.203411 54.65599) (xy 191.446632 54.493475) (xy 191.653475 54.286632) (xy 191.81599 54.043411) (xy 191.927932 53.773158) + (xy 191.985 53.48626) (xy 191.985 53.19374) (xy 191.927932 52.906842) (xy 191.81599 52.636589) (xy 191.653475 52.393368) + (xy 191.446632 52.186525) (xy 191.203411 52.02401) (xy 190.933158 51.912068) (xy 190.64626 51.855) (xy 190.35374 51.855) + (xy 190.066842 51.912068) (xy 189.796589 52.02401) (xy 189.553368 52.186525) (xy 189.346525 52.393368) (xy 189.23 52.56776) + (xy 189.113475 52.393368) (xy 188.906632 52.186525) (xy 188.663411 52.02401) (xy 188.393158 51.912068) (xy 188.10626 51.855) + (xy 187.81374 51.855) (xy 187.526842 51.912068) (xy 187.256589 52.02401) (xy 187.013368 52.186525) (xy 186.806525 52.393368) + (xy 186.69 52.56776) (xy 186.573475 52.393368) (xy 186.366632 52.186525) (xy 186.123411 52.02401) (xy 185.853158 51.912068) + (xy 185.56626 51.855) (xy 185.27374 51.855) (xy 184.986842 51.912068) (xy 184.716589 52.02401) (xy 184.473368 52.186525) + (xy 184.266525 52.393368) (xy 184.15 52.56776) (xy 184.033475 52.393368) (xy 183.826632 52.186525) (xy 183.583411 52.02401) + (xy 183.313158 51.912068) (xy 183.02626 51.855) (xy 182.73374 51.855) (xy 182.446842 51.912068) (xy 182.176589 52.02401) + (xy 181.933368 52.186525) (xy 181.801513 52.31838) (xy 181.779502 52.24582) (xy 181.720537 52.135506) (xy 181.641185 52.038815) + (xy 181.544494 51.959463) (xy 181.43418 51.900498) (xy 181.314482 51.864188) (xy 181.19 51.851928) (xy 180.62575 51.855) + (xy 180.467 52.01375) (xy 180.213 52.01375) (xy 180.05425 51.855) (xy 179.49 51.851928) (xy 179.365518 51.864188) + (xy 179.24582 51.900498) (xy 179.135506 51.959463) (xy 179.038815 52.038815) (xy 178.959463 52.135506) (xy 178.900498 52.24582) + (xy 178.864188 52.365518) (xy 178.851928 52.49) (xy 178.635 52.49) (xy 178.635 52.415867) (xy 179.415868 51.635) + (xy 187.918982 51.635) (xy 187.96 51.63904) (xy 188.001018 51.635) (xy 188.001019 51.635) (xy 188.123689 51.622918) + (xy 188.281087 51.575172) (xy 188.426146 51.497636) (xy 188.553291 51.393291) (xy 188.579446 51.361421) (xy 189.791426 50.149442) + (xy 189.823291 50.123291) (xy 189.927636 49.996146) (xy 190.005172 49.851087) (xy 190.052918 49.693689) (xy 190.065 49.571019) + (xy 190.065 49.571017) (xy 190.06904 49.530001) (xy 190.065 49.488985) (xy 190.065 46.948065) (xy 190.176632 46.873475) + (xy 190.383475 46.666632) (xy 190.54599 46.423411) (xy 190.657932 46.153158) (xy 190.715 45.86626) (xy 190.715 45.57374) + (xy 190.657932 45.286842) (xy 190.54599 45.016589) (xy 190.383475 44.773368) (xy 190.176632 44.566525) (xy 189.933411 44.40401) + (xy 189.663158 44.292068) (xy 189.37626 44.235) (xy 189.08374 44.235) (xy 188.796842 44.292068) (xy 188.526589 44.40401) + (xy 188.283368 44.566525) (xy 188.151513 44.69838) (xy 188.129502 44.62582) (xy 188.070537 44.515506) (xy 187.991185 44.418815) + (xy 187.894494 44.339463) (xy 187.78418 44.280498) (xy 187.664482 44.244188) (xy 187.54 44.231928) (xy 186.97575 44.235) + (xy 186.817 44.39375) (xy 186.817 45.593) (xy 186.837 45.593) (xy 186.837 45.847) (xy 186.817 45.847) + (xy 186.817 47.04625) (xy 186.97575 47.205) (xy 187.54 47.208072) (xy 187.664482 47.195812) (xy 187.78418 47.159502) + (xy 187.894494 47.100537) (xy 187.991185 47.021185) (xy 188.070537 46.924494) (xy 188.129502 46.81418) (xy 188.151513 46.74162) + (xy 188.283368 46.873475) (xy 188.395 46.948065) (xy 188.395001 49.184131) (xy 187.614133 49.965) (xy 179.111015 49.965) + (xy 179.069999 49.96096) (xy 179.028983 49.965) (xy 179.028981 49.965) (xy 178.906311 49.977082) (xy 178.748913 50.024828) + (xy 178.603854 50.102364) (xy 178.476709 50.206709) (xy 178.450561 50.238571) (xy 177.238579 51.450554) (xy 177.206709 51.476709) + (xy 177.120181 51.582145) (xy 177.102364 51.603855) (xy 177.024828 51.748914) (xy 176.977082 51.906312) (xy 176.96096 52.07) + (xy 176.965 52.111019) (xy 176.965001 55.534131) (xy 174.914133 57.585) (xy 163.871015 57.585) (xy 163.829999 57.58096) + (xy 163.788983 57.585) (xy 163.788981 57.585) (xy 163.666311 57.597082) (xy 163.508913 57.644828) (xy 163.363854 57.722364) + (xy 163.236709 57.826709) (xy 163.210561 57.858571) (xy 161.998579 59.070554) (xy 161.966709 59.096709) (xy 161.862365 59.223854) + (xy 161.862364 59.223855) (xy 161.784828 59.368914) (xy 161.737082 59.526312) (xy 161.72096 59.69) (xy 161.725 59.731019) + (xy 161.725001 77.12413) (xy 159.664133 79.185) (xy 158.415951 79.185) (xy 158.475226 79.041898) (xy 158.515 78.841939) + (xy 158.515 78.638061) (xy 158.475226 78.438102) (xy 158.397205 78.249744) (xy 158.315 78.126715) (xy 158.315 62.575867) + (xy 164.175868 56.715) (xy 173.948982 56.715) (xy 173.99 56.71904) (xy 174.031018 56.715) (xy 174.031019 56.715) + (xy 174.153689 56.702918) (xy 174.311087 56.655172) (xy 174.456146 56.577636) (xy 174.583291 56.473291) (xy 174.609446 56.441421) + (xy 175.821428 55.22944) (xy 175.853291 55.203291) (xy 175.957636 55.076146) (xy 176.035172 54.931087) (xy 176.082918 54.773689) + (xy 176.095 54.651019) (xy 176.095 54.651017) (xy 176.09904 54.610001) (xy 176.095 54.568985) (xy 176.095 48.605867) + (xy 176.875868 47.825) (xy 179.888127 47.825) (xy 179.957691 47.92911) (xy 180.16289 48.134309) (xy 180.404178 48.295533) + (xy 180.672283 48.406586) (xy 180.956902 48.4632) (xy 181.247098 48.4632) (xy 181.531717 48.406586) (xy 181.799822 48.295533) + (xy 182.04111 48.134309) (xy 182.246309 47.92911) (xy 182.407533 47.687822) (xy 182.518586 47.419717) (xy 182.5752 47.135098) + (xy 182.5752 46.844902) (xy 182.520519 46.57) (xy 185.201928 46.57) (xy 185.214188 46.694482) (xy 185.250498 46.81418) + (xy 185.309463 46.924494) (xy 185.388815 47.021185) (xy 185.485506 47.100537) (xy 185.59582 47.159502) (xy 185.715518 47.195812) + (xy 185.84 47.208072) (xy 186.40425 47.205) (xy 186.563 47.04625) (xy 186.563 45.847) (xy 185.36375 45.847) + (xy 185.205 46.00575) (xy 185.201928 46.57) (xy 182.520519 46.57) (xy 182.518586 46.560283) (xy 182.407533 46.292178) + (xy 182.246309 46.05089) (xy 182.04111 45.845691) (xy 181.799822 45.684467) (xy 181.531717 45.573414) (xy 181.247098 45.5168) + (xy 180.956902 45.5168) (xy 180.672283 45.573414) (xy 180.404178 45.684467) (xy 180.16289 45.845691) (xy 179.957691 46.05089) + (xy 179.888127 46.155) (xy 176.571015 46.155) (xy 176.529999 46.15096) (xy 176.488983 46.155) (xy 176.488981 46.155) + (xy 176.366311 46.167082) (xy 176.208913 46.214828) (xy 176.063854 46.292364) (xy 175.936709 46.396709) (xy 175.910558 46.428574) + (xy 174.698574 47.640559) (xy 174.66671 47.666709) (xy 174.585907 47.765168) (xy 174.562364 47.793855) (xy 174.484828 47.938914) + (xy 174.437082 48.096312) (xy 174.42096 48.26) (xy 174.425001 48.301028) (xy 174.425 54.264132) (xy 173.644133 55.045) + (xy 163.871018 55.045) (xy 163.829999 55.04096) (xy 163.788981 55.045) (xy 163.666311 55.057082) (xy 163.508913 55.104828) + (xy 163.363854 55.182364) (xy 163.236709 55.286709) (xy 163.210561 55.318571) (xy 156.918579 61.610554) (xy 156.886709 61.636709) + (xy 156.782365 61.763854) (xy 156.782364 61.763855) (xy 156.704828 61.908914) (xy 156.657082 62.066312) (xy 156.64096 62.23) + (xy 156.645 62.271019) (xy 156.645001 78.126714) (xy 156.562795 78.249744) (xy 156.484774 78.438102) (xy 156.445 78.638061) + (xy 156.445 78.841939) (xy 156.484774 79.041898) (xy 156.544049 79.185) (xy 142.095837 79.185) (xy 142.057451 79.127552) + (xy 141.862448 78.932549) (xy 141.633149 78.779336) (xy 141.562326 78.75) (xy 141.633149 78.720664) (xy 141.862448 78.567451) + (xy 142.057451 78.372448) (xy 142.210664 78.143149) (xy 142.316199 77.888365) (xy 142.37 77.617888) (xy 142.37 77.342112) + (xy 142.316199 77.071635) (xy 142.210664 76.816851) (xy 142.057451 76.587552) (xy 141.862448 76.392549) (xy 141.633149 76.239336) + (xy 141.562326 76.21) (xy 141.633149 76.180664) (xy 141.862448 76.027451) (xy 142.057451 75.832448) (xy 142.210664 75.603149) + (xy 142.316199 75.348365) (xy 142.37 75.077888) (xy 142.37 74.802112) (xy 142.316199 74.531635) (xy 142.210664 74.276851) + (xy 142.057451 74.047552) (xy 141.862448 73.852549) (xy 141.633149 73.699336) (xy 141.562326 73.67) (xy 141.633149 73.640664) + (xy 141.862448 73.487451) (xy 142.057451 73.292448) (xy 142.210664 73.063149) (xy 142.316199 72.808365) (xy 142.37 72.537888) + (xy 142.37 72.262112) (xy 142.316199 71.991635) (xy 142.210664 71.736851) (xy 142.057451 71.507552) (xy 141.862448 71.312549) + (xy 141.633149 71.159336) (xy 141.562326 71.13) (xy 141.633149 71.100664) (xy 141.862448 70.947451) (xy 142.057451 70.752448) + (xy 142.210664 70.523149) (xy 142.316199 70.268365) (xy 142.37 69.997888) (xy 142.37 69.722112) (xy 142.316199 69.451635) + (xy 142.210664 69.196851) (xy 142.057451 68.967552) (xy 141.862448 68.772549) (xy 141.633149 68.619336) (xy 141.562326 68.59) + (xy 141.633149 68.560664) (xy 141.862448 68.407451) (xy 142.057451 68.212448) (xy 142.210664 67.983149) (xy 142.316199 67.728365) + (xy 142.37 67.457888) (xy 142.37 67.182112) (xy 142.316199 66.911635) (xy 142.210664 66.656851) (xy 142.057451 66.427552) + (xy 141.862448 66.232549) (xy 141.633149 66.079336) (xy 141.562326 66.05) (xy 141.633149 66.020664) (xy 141.862448 65.867451) + (xy 142.057451 65.672448) (xy 142.210664 65.443149) (xy 142.316199 65.188365) (xy 142.37 64.917888) (xy 142.37 64.642112) + (xy 142.316199 64.371635) (xy 142.210664 64.116851) (xy 142.057451 63.887552) (xy 141.862448 63.692549) (xy 141.781541 63.638488) + (xy 141.859482 63.630812) (xy 141.97918 63.594502) (xy 142.089494 63.535537) (xy 142.186185 63.456185) (xy 142.265537 63.359494) + (xy 142.324502 63.24918) (xy 142.360812 63.129482) (xy 142.373072 63.005) (xy 142.373072 61.475) (xy 142.360812 61.350518) + (xy 142.324502 61.23082) (xy 142.265537 61.120506) (xy 142.186185 61.023815) (xy 142.089494 60.944463) (xy 141.97918 60.885498) + (xy 141.859482 60.849188) (xy 141.735 60.836928) (xy 140.205 60.836928) (xy 140.080518 60.849188) (xy 139.96082 60.885498) + (xy 139.850506 60.944463) (xy 139.753815 61.023815) (xy 139.674463 61.120506) (xy 139.615498 61.23082) (xy 139.579188 61.350518) + (xy 139.566928 61.475) (xy 139.265 61.475) (xy 139.265 54.296993) (xy 166.862612 54.296993) (xy 166.928137 54.53586) + (xy 167.175116 54.65176) (xy 167.43996 54.71725) (xy 167.712492 54.729812) (xy 167.982238 54.688965) (xy 168.238832 54.596277) + (xy 168.351863 54.53586) (xy 168.417388 54.296993) (xy 167.64 53.519605) (xy 166.862612 54.296993) (xy 139.265 54.296993) + (xy 139.265 53.412492) (xy 166.250188 53.412492) (xy 166.291035 53.682238) (xy 166.383723 53.938832) (xy 166.44414 54.051863) + (xy 166.683007 54.117388) (xy 167.460395 53.34) (xy 167.819605 53.34) (xy 168.596993 54.117388) (xy 168.83586 54.051863) + (xy 168.910164 53.893523) (xy 168.952629 53.996043) (xy 169.104201 54.222886) (xy 169.297114 54.415799) (xy 169.523957 54.567371) + (xy 169.776011 54.671775) (xy 170.043589 54.725) (xy 170.316411 54.725) (xy 170.583989 54.671775) (xy 170.836043 54.567371) + (xy 171.062886 54.415799) (xy 171.255799 54.222886) (xy 171.333555 54.106517) (xy 171.344188 54.214482) (xy 171.380498 54.33418) + (xy 171.439463 54.444494) (xy 171.518815 54.541185) (xy 171.615506 54.620537) (xy 171.72582 54.679502) (xy 171.845518 54.715812) + (xy 171.97 54.728072) (xy 173.47 54.728072) (xy 173.594482 54.715812) (xy 173.71418 54.679502) (xy 173.824494 54.620537) + (xy 173.921185 54.541185) (xy 174.000537 54.444494) (xy 174.059502 54.33418) (xy 174.095812 54.214482) (xy 174.108072 54.09) + (xy 174.108072 52.59) (xy 174.095812 52.465518) (xy 174.059502 52.34582) (xy 174.000537 52.235506) (xy 173.921185 52.138815) + (xy 173.824494 52.059463) (xy 173.71418 52.000498) (xy 173.594482 51.964188) (xy 173.47 51.951928) (xy 171.97 51.951928) + (xy 171.845518 51.964188) (xy 171.72582 52.000498) (xy 171.615506 52.059463) (xy 171.518815 52.138815) (xy 171.439463 52.235506) + (xy 171.380498 52.34582) (xy 171.344188 52.465518) (xy 171.333555 52.573483) (xy 171.255799 52.457114) (xy 171.062886 52.264201) + (xy 170.836043 52.112629) (xy 170.583989 52.008225) (xy 170.316411 51.955) (xy 170.043589 51.955) (xy 169.776011 52.008225) + (xy 169.523957 52.112629) (xy 169.297114 52.264201) (xy 169.104201 52.457114) (xy 168.952629 52.683957) (xy 168.911489 52.783279) + (xy 168.896277 52.741168) (xy 168.83586 52.628137) (xy 168.596993 52.562612) (xy 167.819605 53.34) (xy 167.460395 53.34) + (xy 166.683007 52.562612) (xy 166.44414 52.628137) (xy 166.32824 52.875116) (xy 166.26275 53.13996) (xy 166.250188 53.412492) + (xy 139.265 53.412492) (xy 139.265 52.383007) (xy 166.862612 52.383007) (xy 167.64 53.160395) (xy 168.417388 52.383007) + (xy 168.351863 52.14414) (xy 168.104884 52.02824) (xy 167.84004 51.96275) (xy 167.567508 51.950188) (xy 167.297762 51.991035) + (xy 167.041168 52.083723) (xy 166.928137 52.14414) (xy 166.862612 52.383007) (xy 139.265 52.383007) (xy 139.265 51.585134) + (xy 139.332882 51.613252) (xy 139.61978 51.67032) (xy 139.9123 51.67032) (xy 140.199198 51.613252) (xy 140.469451 51.50131) + (xy 140.712672 51.338795) (xy 140.919515 51.131952) (xy 141.03604 50.95756) (xy 141.152565 51.131952) (xy 141.359408 51.338795) + (xy 141.602629 51.50131) (xy 141.872882 51.613252) (xy 142.15978 51.67032) (xy 142.4523 51.67032) (xy 142.739198 51.613252) + (xy 143.009451 51.50131) (xy 143.252672 51.338795) (xy 143.459515 51.131952) (xy 143.57604 50.95756) (xy 143.692565 51.131952) + (xy 143.899408 51.338795) (xy 144.142629 51.50131) (xy 144.412882 51.613252) (xy 144.69978 51.67032) (xy 144.9923 51.67032) + (xy 145.279198 51.613252) (xy 145.549451 51.50131) (xy 145.792672 51.338795) (xy 145.999515 51.131952) (xy 146.11604 50.95756) + (xy 146.232565 51.131952) (xy 146.439408 51.338795) (xy 146.682629 51.50131) (xy 146.952882 51.613252) (xy 147.23978 51.67032) + (xy 147.5323 51.67032) (xy 147.819198 51.613252) (xy 148.089451 51.50131) (xy 148.332672 51.338795) (xy 148.539515 51.131952) + (xy 148.65604 50.95756) (xy 148.772565 51.131952) (xy 148.979408 51.338795) (xy 149.222629 51.50131) (xy 149.492882 51.613252) + (xy 149.77978 51.67032) (xy 150.0723 51.67032) (xy 150.359198 51.613252) (xy 150.629451 51.50131) (xy 150.872672 51.338795) + (xy 151.079515 51.131952) (xy 151.201235 50.949786) (xy 151.270862 51.066675) (xy 151.465771 51.282908) (xy 151.69912 51.456961) + (xy 151.961941 51.582145) (xy 152.10915 51.626796) (xy 152.33904 51.505475) (xy 152.33904 50.31232) (xy 152.31904 50.31232) + (xy 152.31904 50.05832) (xy 152.33904 50.05832) (xy 152.33904 48.865165) (xy 152.59304 48.865165) (xy 152.59304 50.05832) + (xy 152.61304 50.05832) (xy 152.61304 50.31232) (xy 152.59304 50.31232) (xy 152.59304 51.505475) (xy 152.82293 51.626796) + (xy 152.970139 51.582145) (xy 153.23296 51.456961) (xy 153.466309 51.282908) (xy 153.542074 51.198854) (xy 153.566538 51.2795) + (xy 153.625503 51.389814) (xy 153.704855 51.486505) (xy 153.801546 51.565857) (xy 153.91186 51.624822) (xy 154.031558 51.661132) + (xy 154.15604 51.673392) (xy 155.85604 51.673392) (xy 155.980522 51.661132) (xy 156.10022 51.624822) (xy 156.210534 51.565857) + (xy 156.307225 51.486505) (xy 156.386577 51.389814) (xy 156.445542 51.2795) (xy 156.481852 51.159802) (xy 156.494112 51.03532) + (xy 156.494112 49.33532) (xy 156.481852 49.210838) (xy 156.445542 49.09114) (xy 156.386577 48.980826) (xy 156.307225 48.884135) + (xy 156.210534 48.804783) (xy 156.10022 48.745818) (xy 155.980522 48.709508) (xy 155.85604 48.697248) (xy 154.15604 48.697248) + (xy 154.031558 48.709508) (xy 153.91186 48.745818) (xy 153.801546 48.804783) (xy 153.704855 48.884135) (xy 153.625503 48.980826) + (xy 153.566538 49.09114) (xy 153.542074 49.171786) (xy 153.466309 49.087732) (xy 153.23296 48.913679) (xy 152.970139 48.788495) + (xy 152.82293 48.743844) (xy 152.59304 48.865165) (xy 152.33904 48.865165) (xy 152.10915 48.743844) (xy 151.961941 48.788495) + (xy 151.69912 48.913679) (xy 151.465771 49.087732) (xy 151.270862 49.303965) (xy 151.201235 49.420854) (xy 151.079515 49.238688) + (xy 150.872672 49.031845) (xy 150.629451 48.86933) (xy 150.359198 48.757388) (xy 150.0723 48.70032) (xy 149.77978 48.70032) + (xy 149.492882 48.757388) (xy 149.222629 48.86933) (xy 148.979408 49.031845) (xy 148.772565 49.238688) (xy 148.65604 49.41308) + (xy 148.539515 49.238688) (xy 148.332672 49.031845) (xy 148.089451 48.86933) (xy 147.819198 48.757388) (xy 147.5323 48.70032) + (xy 147.23978 48.70032) (xy 146.952882 48.757388) (xy 146.682629 48.86933) (xy 146.439408 49.031845) (xy 146.232565 49.238688) + (xy 146.11604 49.41308) (xy 145.999515 49.238688) (xy 145.792672 49.031845) (xy 145.549451 48.86933) (xy 145.279198 48.757388) + (xy 144.9923 48.70032) (xy 144.69978 48.70032) (xy 144.412882 48.757388) (xy 144.142629 48.86933) (xy 143.899408 49.031845) + (xy 143.692565 49.238688) (xy 143.57604 49.41308) (xy 143.459515 49.238688) (xy 143.252672 49.031845) (xy 143.009451 48.86933) + (xy 142.739198 48.757388) (xy 142.4523 48.70032) (xy 142.15978 48.70032) (xy 141.872882 48.757388) (xy 141.602629 48.86933) + (xy 141.359408 49.031845) (xy 141.152565 49.238688) (xy 141.03604 49.41308) (xy 140.919515 49.238688) (xy 140.712672 49.031845) + (xy 140.469451 48.86933) (xy 140.199198 48.757388) (xy 139.9123 48.70032) (xy 139.61978 48.70032) (xy 139.332882 48.757388) + (xy 139.265 48.785506) (xy 139.265 46.844902) (xy 158.5468 46.844902) (xy 158.5468 47.135098) (xy 158.603414 47.419717) + (xy 158.714467 47.687822) (xy 158.875691 47.92911) (xy 159.08089 48.134309) (xy 159.322178 48.295533) (xy 159.590283 48.406586) + (xy 159.874902 48.4632) (xy 160.165098 48.4632) (xy 160.449717 48.406586) (xy 160.717822 48.295533) (xy 160.95911 48.134309) + (xy 161.164309 47.92911) (xy 161.325533 47.687822) (xy 161.436586 47.419717) (xy 161.4932 47.135098) (xy 161.4932 46.844902) + (xy 167.6908 46.844902) (xy 167.6908 47.135098) (xy 167.747414 47.419717) (xy 167.858467 47.687822) (xy 168.019691 47.92911) + (xy 168.22489 48.134309) (xy 168.466178 48.295533) (xy 168.734283 48.406586) (xy 169.018902 48.4632) (xy 169.309098 48.4632) + (xy 169.593717 48.406586) (xy 169.861822 48.295533) (xy 170.10311 48.134309) (xy 170.308309 47.92911) (xy 170.469533 47.687822) + (xy 170.561 47.467002) (xy 170.652467 47.687822) (xy 170.813691 47.92911) (xy 171.01889 48.134309) (xy 171.260178 48.295533) + (xy 171.528283 48.406586) (xy 171.812902 48.4632) (xy 172.103098 48.4632) (xy 172.387717 48.406586) (xy 172.655822 48.295533) + (xy 172.89711 48.134309) (xy 173.102309 47.92911) (xy 173.263533 47.687822) (xy 173.374586 47.419717) (xy 173.4312 47.135098) + (xy 173.4312 46.844902) (xy 173.374586 46.560283) (xy 173.263533 46.292178) (xy 173.102309 46.05089) (xy 172.89711 45.845691) + (xy 172.655822 45.684467) (xy 172.387717 45.573414) (xy 172.103098 45.5168) (xy 171.812902 45.5168) (xy 171.528283 45.573414) + (xy 171.260178 45.684467) (xy 171.01889 45.845691) (xy 170.813691 46.05089) (xy 170.652467 46.292178) (xy 170.561 46.512998) + (xy 170.469533 46.292178) (xy 170.308309 46.05089) (xy 170.10311 45.845691) (xy 169.861822 45.684467) (xy 169.593717 45.573414) + (xy 169.309098 45.5168) (xy 169.018902 45.5168) (xy 168.734283 45.573414) (xy 168.466178 45.684467) (xy 168.22489 45.845691) + (xy 168.019691 46.05089) (xy 167.858467 46.292178) (xy 167.747414 46.560283) (xy 167.6908 46.844902) (xy 161.4932 46.844902) + (xy 161.436586 46.560283) (xy 161.325533 46.292178) (xy 161.164309 46.05089) (xy 160.95911 45.845691) (xy 160.717822 45.684467) + (xy 160.449717 45.573414) (xy 160.165098 45.5168) (xy 159.874902 45.5168) (xy 159.590283 45.573414) (xy 159.322178 45.684467) + (xy 159.08089 45.845691) (xy 158.875691 46.05089) (xy 158.714467 46.292178) (xy 158.603414 46.560283) (xy 158.5468 46.844902) + (xy 139.265 46.844902) (xy 139.265 44.87) (xy 185.201928 44.87) (xy 185.205 45.43425) (xy 185.36375 45.593) + (xy 186.563 45.593) (xy 186.563 44.39375) (xy 186.40425 44.235) (xy 185.84 44.231928) (xy 185.715518 44.244188) + (xy 185.59582 44.280498) (xy 185.485506 44.339463) (xy 185.388815 44.418815) (xy 185.309463 44.515506) (xy 185.250498 44.62582) + (xy 185.214188 44.745518) (xy 185.201928 44.87) (xy 139.265 44.87) (xy 139.265 40.985867) (xy 140.045868 40.205) + (xy 164.968769 40.205) (xy 164.996155 40.256235) (xy 165.099446 40.382095) (xy 165.015506 40.426963) (xy 164.918815 40.506315) + (xy 164.839463 40.603006) (xy 164.780498 40.71332) (xy 164.744188 40.833018) (xy 164.731928 40.9575) (xy 164.731928 42.8625) + (xy 164.744188 42.986982) (xy 164.780498 43.10668) (xy 164.839463 43.216994) (xy 164.918815 43.313685) (xy 165.015506 43.393037) + (xy 165.12582 43.452002) (xy 165.245518 43.488312) (xy 165.37 43.500572) (xy 167.37 43.500572) (xy 167.494482 43.488312) + (xy 167.61418 43.452002) (xy 167.724494 43.393037) (xy 167.821185 43.313685) (xy 167.900537 43.216994) (xy 167.959502 43.10668) + (xy 167.995812 42.986982) (xy 168.008072 42.8625) (xy 168.008072 40.9575) (xy 167.995812 40.833018) (xy 167.959502 40.71332) + (xy 167.900537 40.603006) (xy 167.821185 40.506315) (xy 167.807279 40.494902) (xy 170.4848 40.494902) (xy 170.4848 40.785098) + (xy 170.541414 41.069717) (xy 170.652467 41.337822) (xy 170.813691 41.57911) (xy 171.01889 41.784309) (xy 171.260178 41.945533) + (xy 171.528283 42.056586) (xy 171.812902 42.1132) (xy 172.103098 42.1132) (xy 172.387717 42.056586) (xy 172.655822 41.945533) + (xy 172.89711 41.784309) (xy 173.021444 41.659975) (xy 180.26163 41.659975) (xy 180.337838 41.907844) (xy 180.599865 42.032563) + (xy 180.881189 42.103768) (xy 181.170999 42.118719) (xy 181.458157 42.076845) (xy 181.731628 41.979754) (xy 181.866162 41.907844) + (xy 181.94237 41.659975) (xy 181.772395 41.49) (xy 185.201928 41.49) (xy 185.214188 41.614482) (xy 185.250498 41.73418) + (xy 185.309463 41.844494) (xy 185.388815 41.941185) (xy 185.485506 42.020537) (xy 185.59582 42.079502) (xy 185.715518 42.115812) + (xy 185.84 42.128072) (xy 186.40425 42.125) (xy 186.563 41.96625) (xy 186.563 40.767) (xy 185.36375 40.767) + (xy 185.205 40.92575) (xy 185.201928 41.49) (xy 181.772395 41.49) (xy 181.102 40.819605) (xy 180.26163 41.659975) + (xy 173.021444 41.659975) (xy 173.102309 41.57911) (xy 173.263533 41.337822) (xy 173.374586 41.069717) (xy 173.4312 40.785098) + (xy 173.4312 40.708999) (xy 179.623281 40.708999) (xy 179.665155 40.996157) (xy 179.762246 41.269628) (xy 179.834156 41.404162) + (xy 180.082025 41.48037) (xy 180.922395 40.64) (xy 181.281605 40.64) (xy 182.121975 41.48037) (xy 182.369844 41.404162) + (xy 182.494563 41.142135) (xy 182.565768 40.860811) (xy 182.580719 40.571001) (xy 182.538845 40.283843) (xy 182.441754 40.010372) + (xy 182.369844 39.875838) (xy 182.121975 39.79963) (xy 181.281605 40.64) (xy 180.922395 40.64) (xy 180.082025 39.79963) + (xy 179.834156 39.875838) (xy 179.709437 40.137865) (xy 179.638232 40.419189) (xy 179.623281 40.708999) (xy 173.4312 40.708999) + (xy 173.4312 40.494902) (xy 173.374586 40.210283) (xy 173.263533 39.942178) (xy 173.102309 39.70089) (xy 173.021444 39.620025) + (xy 180.26163 39.620025) (xy 181.102 40.460395) (xy 181.772395 39.79) (xy 185.201928 39.79) (xy 185.205 40.35425) + (xy 185.36375 40.513) (xy 186.563 40.513) (xy 186.563 39.31375) (xy 186.40425 39.155) (xy 185.84 39.151928) + (xy 185.715518 39.164188) (xy 185.59582 39.200498) (xy 185.485506 39.259463) (xy 185.388815 39.338815) (xy 185.309463 39.435506) + (xy 185.250498 39.54582) (xy 185.214188 39.665518) (xy 185.201928 39.79) (xy 181.772395 39.79) (xy 181.94237 39.620025) + (xy 181.866162 39.372156) (xy 181.604135 39.247437) (xy 181.322811 39.176232) (xy 181.033001 39.161281) (xy 180.745843 39.203155) + (xy 180.472372 39.300246) (xy 180.337838 39.372156) (xy 180.26163 39.620025) (xy 173.021444 39.620025) (xy 172.89711 39.495691) + (xy 172.655822 39.334467) (xy 172.387717 39.223414) (xy 172.103098 39.1668) (xy 171.812902 39.1668) (xy 171.528283 39.223414) + (xy 171.260178 39.334467) (xy 171.01889 39.495691) (xy 170.813691 39.70089) (xy 170.652467 39.942178) (xy 170.541414 40.210283) + (xy 170.4848 40.494902) (xy 167.807279 40.494902) (xy 167.724494 40.426963) (xy 167.640554 40.382095) (xy 167.743845 40.256235) + (xy 167.891255 39.980449) (xy 167.98203 39.681204) (xy 168.012681 39.37) (xy 167.98203 39.058796) (xy 167.891255 38.759551) + (xy 167.743845 38.483765) (xy 167.545463 38.242037) (xy 167.372391 38.1) (xy 167.545463 37.957963) (xy 167.743845 37.716235) + (xy 167.891255 37.440449) (xy 167.98203 37.141204) (xy 168.012681 36.83) (xy 167.98203 36.518796) (xy 167.949028 36.41) + (xy 173.771928 36.41) (xy 173.784188 36.534482) (xy 173.820498 36.65418) (xy 173.879463 36.764494) (xy 173.958815 36.861185) + (xy 174.055506 36.940537) (xy 174.16582 36.999502) (xy 174.285518 37.035812) (xy 174.41 37.048072) (xy 174.97425 37.045) + (xy 175.133 36.88625) (xy 175.133 35.687) (xy 173.93375 35.687) (xy 173.775 35.84575) (xy 173.771928 36.41) + (xy 167.949028 36.41) (xy 167.891255 36.219551) (xy 167.743845 35.943765) (xy 167.545463 35.702037) (xy 167.303735 35.503655) + (xy 167.027949 35.356245) (xy 166.728704 35.26547) (xy 166.495486 35.2425) (xy 166.244514 35.2425) (xy 166.011296 35.26547) + (xy 165.712051 35.356245) (xy 165.436265 35.503655) (xy 165.194537 35.702037) (xy 164.996155 35.943765) (xy 164.848745 36.219551) + (xy 164.75797 36.518796) (xy 164.727319 36.83) (xy 164.75797 37.141204) (xy 164.848745 37.440449) (xy 164.996155 37.716235) + (xy 165.194537 37.957963) (xy 165.367609 38.1) (xy 165.194537 38.242037) (xy 164.996155 38.483765) (xy 164.968769 38.535) + (xy 139.741015 38.535) (xy 139.699999 38.53096) (xy 139.658983 38.535) (xy 139.658981 38.535) (xy 139.536311 38.547082) + (xy 139.378913 38.594828) (xy 139.233854 38.672364) (xy 139.106709 38.776709) (xy 139.080558 38.808574) (xy 137.868574 40.020559) + (xy 137.83671 40.046709) (xy 137.810562 40.078571) (xy 137.732364 40.173855) (xy 137.654828 40.318914) (xy 137.607082 40.476312) + (xy 137.59096 40.64) (xy 134.01 40.64) (xy 134.01 34.497938) (xy 134.0941 34.497938) (xy 134.0941 35.184422) + (xy 134.228027 35.857717) (xy 134.490733 36.491946) (xy 134.872124 37.062738) (xy 135.357542 37.548156) (xy 135.928334 37.929547) + (xy 136.562563 38.192253) (xy 137.235858 38.32618) (xy 137.922342 38.32618) (xy 138.595637 38.192253) (xy 139.229866 37.929547) + (xy 139.800658 37.548156) (xy 140.286076 37.062738) (xy 140.667467 36.491946) (xy 140.930173 35.857717) (xy 141.0641 35.184422) + (xy 141.0641 34.71) (xy 173.771928 34.71) (xy 173.775 35.27425) (xy 173.93375 35.433) (xy 175.133 35.433) + (xy 175.133 34.23375) (xy 175.387 34.23375) (xy 175.387 35.433) (xy 175.407 35.433) (xy 175.407 35.687) + (xy 175.387 35.687) (xy 175.387 36.88625) (xy 175.54575 37.045) (xy 176.11 37.048072) (xy 176.234482 37.035812) + (xy 176.35418 36.999502) (xy 176.464494 36.940537) (xy 176.561185 36.861185) (xy 176.640537 36.764494) (xy 176.699502 36.65418) + (xy 176.721513 36.58162) (xy 176.853368 36.713475) (xy 177.096589 36.87599) (xy 177.366842 36.987932) (xy 177.65374 37.045) + (xy 177.94626 37.045) (xy 178.233158 36.987932) (xy 178.503411 36.87599) (xy 178.746632 36.713475) (xy 178.953475 36.506632) + (xy 179.018042 36.41) (xy 185.201928 36.41) (xy 185.214188 36.534482) (xy 185.250498 36.65418) (xy 185.309463 36.764494) + (xy 185.388815 36.861185) (xy 185.485506 36.940537) (xy 185.59582 36.999502) (xy 185.715518 37.035812) (xy 185.84 37.048072) + (xy 186.40425 37.045) (xy 186.563 36.88625) (xy 186.563 35.687) (xy 185.36375 35.687) (xy 185.205 35.84575) + (xy 185.201928 36.41) (xy 179.018042 36.41) (xy 179.11599 36.263411) (xy 179.227932 35.993158) (xy 179.285 35.70626) + (xy 179.285 35.41374) (xy 179.227932 35.126842) (xy 179.11599 34.856589) (xy 179.018043 34.71) (xy 185.201928 34.71) + (xy 185.205 35.27425) (xy 185.36375 35.433) (xy 186.563 35.433) (xy 186.563 34.23375) (xy 186.40425 34.075) + (xy 185.84 34.071928) (xy 185.715518 34.084188) (xy 185.59582 34.120498) (xy 185.485506 34.179463) (xy 185.388815 34.258815) + (xy 185.309463 34.355506) (xy 185.250498 34.46582) (xy 185.214188 34.585518) (xy 185.201928 34.71) (xy 179.018043 34.71) + (xy 178.953475 34.613368) (xy 178.746632 34.406525) (xy 178.503411 34.24401) (xy 178.233158 34.132068) (xy 177.94626 34.075) + (xy 177.65374 34.075) (xy 177.366842 34.132068) (xy 177.096589 34.24401) (xy 176.853368 34.406525) (xy 176.721513 34.53838) + (xy 176.699502 34.46582) (xy 176.640537 34.355506) (xy 176.561185 34.258815) (xy 176.464494 34.179463) (xy 176.35418 34.120498) + (xy 176.234482 34.084188) (xy 176.11 34.071928) (xy 175.54575 34.075) (xy 175.387 34.23375) (xy 175.133 34.23375) + (xy 174.97425 34.075) (xy 174.41 34.071928) (xy 174.285518 34.084188) (xy 174.16582 34.120498) (xy 174.055506 34.179463) + (xy 173.958815 34.258815) (xy 173.879463 34.355506) (xy 173.820498 34.46582) (xy 173.784188 34.585518) (xy 173.771928 34.71) + (xy 141.0641 34.71) (xy 141.0641 34.497938) (xy 140.930173 33.824643) (xy 140.667467 33.190414) (xy 140.286076 32.619622) + (xy 139.800658 32.134204) (xy 139.229866 31.752813) (xy 138.595637 31.490107) (xy 137.922342 31.35618) (xy 137.235858 31.35618) + (xy 136.562563 31.490107) (xy 135.928334 31.752813) (xy 135.357542 32.134204) (xy 134.872124 32.619622) (xy 134.490733 33.190414) + (xy 134.228027 33.824643) (xy 134.0941 34.497938) (xy 134.01 34.497938) (xy 134.01 34.322279) (xy 134.073096 33.678778) + (xy 134.250606 33.090836) (xy 134.538937 32.548564) (xy 134.927094 32.072636) (xy 135.400314 31.681155) (xy 135.940552 31.389049) + (xy 136.527244 31.207437) (xy 137.168879 31.14) (xy 201.897721 31.14) + ) + ) + (filled_polygon + (pts + (xy 184.404143 64.60499) (xy 174.631028 64.60499) (xy 174.59001 64.60095) (xy 174.548992 64.60499) (xy 174.548991 64.60499) + (xy 174.426321 64.617072) (xy 174.268923 64.664818) (xy 174.123864 64.742354) (xy 173.996719 64.846699) (xy 173.970571 64.878561) + (xy 172.158579 66.690554) (xy 172.126709 66.716709) (xy 172.022365 66.843854) (xy 172.022364 66.843855) (xy 171.944828 66.988914) + (xy 171.897082 67.146312) (xy 171.88096 67.31) (xy 171.885 67.351018) (xy 171.885 70.179907) (xy 171.751898 70.124774) + (xy 171.606777 70.095908) (xy 168.269446 66.758579) (xy 168.243291 66.726709) (xy 168.116146 66.622364) (xy 167.971087 66.544828) + (xy 167.813689 66.497082) (xy 167.691019 66.485) (xy 167.691018 66.485) (xy 167.65 66.48096) (xy 167.608982 66.485) + (xy 167.495837 66.485) (xy 167.457451 66.427552) (xy 167.262448 66.232549) (xy 167.033149 66.079336) (xy 166.962326 66.05) + (xy 167.033149 66.020664) (xy 167.262448 65.867451) (xy 167.457451 65.672448) (xy 167.610664 65.443149) (xy 167.716199 65.188365) + (xy 167.77 64.917888) (xy 167.77 64.642112) (xy 167.716199 64.371635) (xy 167.610664 64.116851) (xy 167.457451 63.887552) + (xy 167.262448 63.692549) (xy 167.033149 63.539336) (xy 166.968406 63.512518) (xy 166.974072 63.510478) (xy 167.09076 63.448106) + (xy 167.158102 63.207707) (xy 166.37 62.419605) (xy 165.581898 63.207707) (xy 165.64924 63.448106) (xy 165.779336 63.509312) + (xy 165.706851 63.539336) (xy 165.477552 63.692549) (xy 165.282549 63.887552) (xy 165.129336 64.116851) (xy 165.023801 64.371635) + (xy 164.97 64.642112) (xy 164.97 64.917888) (xy 165.023801 65.188365) (xy 165.129336 65.443149) (xy 165.282549 65.672448) + (xy 165.477552 65.867451) (xy 165.706851 66.020664) (xy 165.777674 66.05) (xy 165.706851 66.079336) (xy 165.477552 66.232549) + (xy 165.282549 66.427552) (xy 165.129336 66.656851) (xy 165.023801 66.911635) (xy 164.97 67.182112) (xy 164.97 67.457888) + (xy 165.023801 67.728365) (xy 165.129336 67.983149) (xy 165.282549 68.212448) (xy 165.477552 68.407451) (xy 165.706851 68.560664) + (xy 165.777674 68.59) (xy 165.706851 68.619336) (xy 165.477552 68.772549) (xy 165.282549 68.967552) (xy 165.129336 69.196851) + (xy 165.023801 69.451635) (xy 164.97 69.722112) (xy 164.97 69.997888) (xy 165.023801 70.268365) (xy 165.129336 70.523149) + (xy 165.282549 70.752448) (xy 165.477552 70.947451) (xy 165.706851 71.100664) (xy 165.777674 71.13) (xy 165.706851 71.159336) + (xy 165.477552 71.312549) (xy 165.282549 71.507552) (xy 165.129336 71.736851) (xy 165.023801 71.991635) (xy 164.97 72.262112) + (xy 164.97 72.537888) (xy 165.023801 72.808365) (xy 165.129336 73.063149) (xy 165.282549 73.292448) (xy 165.477552 73.487451) + (xy 165.706851 73.640664) (xy 165.777674 73.67) (xy 165.706851 73.699336) (xy 165.477552 73.852549) (xy 165.282549 74.047552) + (xy 165.129336 74.276851) (xy 165.023801 74.531635) (xy 164.97 74.802112) (xy 164.97 75.077888) (xy 165.023801 75.348365) + (xy 165.129336 75.603149) (xy 165.282549 75.832448) (xy 165.477552 76.027451) (xy 165.706851 76.180664) (xy 165.771594 76.207482) + (xy 165.765928 76.209522) (xy 165.64924 76.271894) (xy 165.581898 76.512293) (xy 166.37 77.300395) (xy 167.158102 76.512293) + (xy 167.09076 76.271894) (xy 166.960664 76.210688) (xy 167.033149 76.180664) (xy 167.262448 76.027451) (xy 167.457451 75.832448) + (xy 167.610664 75.603149) (xy 167.716199 75.348365) (xy 167.77 75.077888) (xy 167.77 74.802112) (xy 167.716199 74.531635) + (xy 167.610664 74.276851) (xy 167.457451 74.047552) (xy 167.262448 73.852549) (xy 167.033149 73.699336) (xy 166.962326 73.67) + (xy 167.033149 73.640664) (xy 167.262448 73.487451) (xy 167.457451 73.292448) (xy 167.610664 73.063149) (xy 167.716199 72.808365) + (xy 167.77 72.537888) (xy 167.77 72.262112) (xy 167.716199 71.991635) (xy 167.610664 71.736851) (xy 167.457451 71.507552) + (xy 167.262448 71.312549) (xy 167.033149 71.159336) (xy 166.962326 71.13) (xy 167.033149 71.100664) (xy 167.262448 70.947451) + (xy 167.457451 70.752448) (xy 167.610664 70.523149) (xy 167.716199 70.268365) (xy 167.77 69.997888) (xy 167.77 69.722112) + (xy 167.716199 69.451635) (xy 167.610664 69.196851) (xy 167.457451 68.967552) (xy 167.262448 68.772549) (xy 167.033149 68.619336) + (xy 166.962326 68.59) (xy 167.033149 68.560664) (xy 167.262448 68.407451) (xy 167.409516 68.260383) (xy 170.425908 71.276777) + (xy 170.454774 71.421898) (xy 170.532795 71.610256) (xy 170.646063 71.779774) (xy 170.790226 71.923937) (xy 170.959744 72.037205) + (xy 171.148102 72.115226) (xy 171.348061 72.155) (xy 171.551939 72.155) (xy 171.751898 72.115226) (xy 171.885 72.060093) + (xy 171.885001 91.094131) (xy 171.104133 91.875) (xy 167.489155 91.875) (xy 167.457451 91.827552) (xy 167.262448 91.632549) + (xy 167.033149 91.479336) (xy 166.962326 91.45) (xy 167.033149 91.420664) (xy 167.262448 91.267451) (xy 167.457451 91.072448) + (xy 167.610664 90.843149) (xy 167.716199 90.588365) (xy 167.77 90.317888) (xy 167.77 90.042112) (xy 167.716199 89.771635) + (xy 167.610664 89.516851) (xy 167.457451 89.287552) (xy 167.262448 89.092549) (xy 167.033149 88.939336) (xy 166.962326 88.91) + (xy 167.033149 88.880664) (xy 167.262448 88.727451) (xy 167.457451 88.532448) (xy 167.610664 88.303149) (xy 167.716199 88.048365) + (xy 167.77 87.777888) (xy 167.77 87.502112) (xy 167.716199 87.231635) (xy 167.610664 86.976851) (xy 167.457451 86.747552) + (xy 167.262448 86.552549) (xy 167.033149 86.399336) (xy 166.962326 86.37) (xy 167.033149 86.340664) (xy 167.262448 86.187451) + (xy 167.457451 85.992448) (xy 167.610664 85.763149) (xy 167.716199 85.508365) (xy 167.77 85.237888) (xy 167.77 84.962112) + (xy 167.716199 84.691635) (xy 167.610664 84.436851) (xy 167.457451 84.207552) (xy 167.262448 84.012549) (xy 167.033149 83.859336) + (xy 166.962326 83.83) (xy 167.033149 83.800664) (xy 167.262448 83.647451) (xy 167.457451 83.452448) (xy 167.610664 83.223149) + (xy 167.716199 82.968365) (xy 167.77 82.697888) (xy 167.77 82.422112) (xy 167.716199 82.151635) (xy 167.610664 81.896851) + (xy 167.457451 81.667552) (xy 167.262448 81.472549) (xy 167.033149 81.319336) (xy 166.962326 81.29) (xy 167.033149 81.260664) + (xy 167.262448 81.107451) (xy 167.457451 80.912448) (xy 167.610664 80.683149) (xy 167.716199 80.428365) (xy 167.77 80.157888) + (xy 167.77 79.882112) (xy 167.716199 79.611635) (xy 167.610664 79.356851) (xy 167.457451 79.127552) (xy 167.262448 78.932549) + (xy 167.033149 78.779336) (xy 166.968406 78.752518) (xy 166.974072 78.750478) (xy 167.09076 78.688106) (xy 167.158102 78.447707) + (xy 166.37 77.659605) (xy 165.581898 78.447707) (xy 165.64924 78.688106) (xy 165.779336 78.749312) (xy 165.706851 78.779336) + (xy 165.477552 78.932549) (xy 165.282549 79.127552) (xy 165.129336 79.356851) (xy 165.023801 79.611635) (xy 164.97 79.882112) + (xy 164.97 80.157888) (xy 165.023801 80.428365) (xy 165.129336 80.683149) (xy 165.282549 80.912448) (xy 165.477552 81.107451) + (xy 165.706851 81.260664) (xy 165.777674 81.29) (xy 165.706851 81.319336) (xy 165.477552 81.472549) (xy 165.282549 81.667552) + (xy 165.129336 81.896851) (xy 165.023801 82.151635) (xy 164.97 82.422112) (xy 164.97 82.697888) (xy 165.023801 82.968365) + (xy 165.129336 83.223149) (xy 165.282549 83.452448) (xy 165.477552 83.647451) (xy 165.706851 83.800664) (xy 165.777674 83.83) + (xy 165.706851 83.859336) (xy 165.477552 84.012549) (xy 165.340484 84.149617) (xy 164.665 83.474133) (xy 164.665 77.551899) + (xy 164.965064 77.551899) (xy 165.006086 77.824607) (xy 165.099522 78.084072) (xy 165.161894 78.20076) (xy 165.402293 78.268102) + (xy 166.190395 77.48) (xy 166.549605 77.48) (xy 167.337707 78.268102) (xy 167.578106 78.20076) (xy 167.695506 77.95122) + (xy 167.761967 77.683573) (xy 167.774936 77.408101) (xy 167.733914 77.135393) (xy 167.640478 76.875928) (xy 167.578106 76.75924) + (xy 167.337707 76.691898) (xy 166.549605 77.48) (xy 166.190395 77.48) (xy 165.402293 76.691898) (xy 165.161894 76.75924) + (xy 165.044494 77.00878) (xy 164.978033 77.276427) (xy 164.965064 77.551899) (xy 164.665 77.551899) (xy 164.665 62.311899) + (xy 164.965064 62.311899) (xy 165.006086 62.584607) (xy 165.099522 62.844072) (xy 165.161894 62.96076) (xy 165.402293 63.028102) + (xy 166.190395 62.24) (xy 166.549605 62.24) (xy 167.337707 63.028102) (xy 167.578106 62.96076) (xy 167.695506 62.71122) + (xy 167.761967 62.443573) (xy 167.774936 62.168101) (xy 167.733914 61.895393) (xy 167.640478 61.635928) (xy 167.578106 61.51924) + (xy 167.337707 61.451898) (xy 166.549605 62.24) (xy 166.190395 62.24) (xy 165.402293 61.451898) (xy 165.161894 61.51924) + (xy 165.044494 61.76878) (xy 164.978033 62.036427) (xy 164.965064 62.311899) (xy 164.665 62.311899) (xy 164.665 61.305867) + (xy 164.698574 61.272293) (xy 165.581898 61.272293) (xy 166.37 62.060395) (xy 167.158102 61.272293) (xy 167.09076 61.031894) + (xy 166.84122 60.914494) (xy 166.573573 60.848033) (xy 166.298101 60.835064) (xy 166.025393 60.876086) (xy 165.765928 60.969522) + (xy 165.64924 61.031894) (xy 165.581898 61.272293) (xy 164.698574 61.272293) (xy 165.445868 60.525) (xy 188.484132 60.525) + ) + ) + (filled_polygon + (pts + (xy 201.095001 37.175869) (xy 201.095 41.564132) (xy 200.314133 42.345) (xy 199.31102 42.345) (xy 199.270002 42.34096) + (xy 199.228983 42.345) (xy 199.106313 42.357082) (xy 198.948915 42.404828) (xy 198.803856 42.482364) (xy 198.676711 42.586709) + (xy 198.650565 42.618568) (xy 195.145 46.124135) (xy 195.145 43.525867) (xy 197.905 40.765868) (xy 197.905 40.767002) + (xy 198.063748 40.767002) (xy 197.905 40.92575) (xy 197.901928 41.49) (xy 197.914188 41.614482) (xy 197.950498 41.73418) + (xy 198.009463 41.844494) (xy 198.088815 41.941185) (xy 198.185506 42.020537) (xy 198.29582 42.079502) (xy 198.415518 42.115812) + (xy 198.54 42.128072) (xy 199.10425 42.125) (xy 199.263 41.96625) (xy 199.263 40.767) (xy 199.517 40.767) + (xy 199.517 41.96625) (xy 199.67575 42.125) (xy 200.24 42.128072) (xy 200.364482 42.115812) (xy 200.48418 42.079502) + (xy 200.594494 42.020537) (xy 200.691185 41.941185) (xy 200.770537 41.844494) (xy 200.829502 41.73418) (xy 200.865812 41.614482) + (xy 200.878072 41.49) (xy 200.875 40.92575) (xy 200.71625 40.767) (xy 199.517 40.767) (xy 199.263 40.767) + (xy 199.243 40.767) (xy 199.243 40.513) (xy 199.263 40.513) (xy 199.263 40.493) (xy 199.517 40.493) + (xy 199.517 40.513) (xy 200.71625 40.513) (xy 200.875 40.35425) (xy 200.878072 39.79) (xy 200.865812 39.665518) + (xy 200.829502 39.54582) (xy 200.770537 39.435506) (xy 200.691185 39.338815) (xy 200.594494 39.259463) (xy 200.48418 39.200498) + (xy 200.41162 39.178487) (xy 200.543475 39.046632) (xy 200.70599 38.803411) (xy 200.817932 38.533158) (xy 200.875 38.24626) + (xy 200.875 37.95374) (xy 200.817932 37.666842) (xy 200.70599 37.396589) (xy 200.543475 37.153368) (xy 200.336632 36.946525) + (xy 200.16224 36.83) (xy 200.336632 36.713475) (xy 200.48462 36.565487) + ) + ) + ) +) diff --git a/PCBs/ESP32_Breakout_Carrier/Tonuino-ESP32_2.net b/PCBs/ESP32_Breakout_Carrier/Tonuino-ESP32_2.net new file mode 100644 index 0000000..50a911c --- /dev/null +++ b/PCBs/ESP32_Breakout_Carrier/Tonuino-ESP32_2.net @@ -0,0 +1,414 @@ +(export (version D) + (design + (source /Users/mariolukas/Documents/KiCad/projects/Tonuino-ESP32_2/Tonuino-ESP32_2.sch) + (date "2020 October 11, Sunday 21:15:14") + (tool "Eeschema (5.1.7-0-10_14)") + (sheet (number 1) (name /) (tstamps /) + (title_block + (title) + (company) + (rev) + (date) + (source Tonuino-ESP32_2.sch) + (comment (number 1) (value "")) + (comment (number 2) (value "")) + (comment (number 3) (value "")) + (comment (number 4) (value ""))))) + (components + (comp (ref U1) + (value ESP32-DEVKITC-32U) + (footprint ESP32-DEVKITC-32U:MODULE_ESP32-DEVKITC-32U) + (datasheet "Manufacturer Recommendations") + (fields + (field (name Field4) ESPRESSIF) + (field (name Field5) N/A)) + (libsource (lib ESP32-DEVKITC-32U) (part ESP32-DEVKITC-32U) (description "")) + (sheetpath (names /) (tstamps /)) + (tstamp 5F79096D)) + (comp (ref J4) + (value "Rotary Encode") + (footprint mod_s:PinHeader_1x05_P2.54mm_Vertical) + (libsource (lib Connector) (part Conn_01x05_Male) (description "")) + (sheetpath (names /) (tstamps /)) + (tstamp 5F7BD0A2)) + (comp (ref J1) + (value "SD-Card Reader") + (footprint mod_s:PinHeader_1x06_P2.54mm_Vertical) + (libsource (lib Connector) (part Conn_01x06_Male) (description "")) + (sheetpath (names /) (tstamps /)) + (tstamp 5F7ED32A)) + (comp (ref J3) + (value "Adafruit MAX98357") + (footprint mod_s:PinHeader_1x07_P2.54mm_Vertical) + (libsource (lib Connector) (part Conn_01x07_Male) (description "")) + (sheetpath (names /) (tstamps /)) + (tstamp 5F81C714)) + (comp (ref J5) + (value Next) + (footprint mod_s:PinHeader_1x02_P2.54mm_Vertical) + (libsource (lib Connector) (part Conn_01x02_Male) (description "")) + (sheetpath (names /) (tstamps /)) + (tstamp 5F9085EF)) + (comp (ref J6) + (value Prev) + (footprint mod_s:PinHeader_1x02_P2.54mm_Vertical) + (libsource (lib Connector) (part Conn_01x02_Male) (description "")) + (sheetpath (names /) (tstamps /)) + (tstamp 5F90EAED)) + (comp (ref J7) + (value Pause) + (footprint mod_s:PinHeader_1x02_P2.54mm_Vertical) + (libsource (lib Connector) (part Conn_01x02_Male) (description "")) + (sheetpath (names /) (tstamps /)) + (tstamp 5F90F726)) + (comp (ref J2) + (value RFID-RC522) + (footprint mod_s:PinHeader_1x08_P2.54mm_Vertical) + (libsource (lib Connector) (part Conn_01x08_Male) (description "")) + (sheetpath (names /) (tstamps /)) + (tstamp 5F92011C)) + (comp (ref J8) + (value WS2812) + (footprint mod_s:PinHeader_1x03_P2.54mm_Vertical) + (libsource (lib Connector) (part Conn_01x03_Male) (description "")) + (sheetpath (names /) (tstamps /)) + (tstamp 5F936A23)) + (comp (ref J9) + (value Power) + (footprint mod_s:PinHeader_1x02_P2.54mm_Vertical) + (libsource (lib Connector) (part Conn_01x02_Male) (description "")) + (sheetpath (names /) (tstamps /)) + (tstamp 5F945F11)) + (comp (ref R5) + (value 4,7k) + (footprint adafruit:0207_9) + (libsource (lib Device) (part R) (description "")) + (sheetpath (names /) (tstamps /)) + (tstamp 5F7995ED)) + (comp (ref R4) + (value 10k) + (footprint adafruit:0207_9) + (libsource (lib Device) (part R) (description "")) + (sheetpath (names /) (tstamps /)) + (tstamp 5F798E7D)) + (comp (ref Q1) + (value BC337) + (footprint Package_TO_SOT_THT:TO-92_Inline_Wide) + (libsource (lib Transistor_BJT) (part BC337) (description "")) + (sheetpath (names /) (tstamps /)) + (tstamp 5F78DA7C)) + (comp (ref Q2) + (value IRF9540N) + (footprint Package_TO_SOT_THT:TO-220-3_Vertical) + (libsource (lib Transistor_FET) (part IRF9540N) (description "")) + (sheetpath (names /) (tstamps /)) + (tstamp 5F78F572)) + (comp (ref R1) + (value 10k) + (footprint adafruit:0207_9) + (libsource (lib Device) (part R) (description "")) + (sheetpath (names /) (tstamps /)) + (tstamp 5F79873B))) + (libparts + (libpart (lib Connector) (part Conn_01x02_Male) + (footprints + (fp Connector*:*_1x??_*)) + (fields + (field (name Reference) J) + (field (name Value) Conn_01x02_Male)) + (pins + (pin (num 1) (name Pin_1) (type passive)) + (pin (num 2) (name Pin_2) (type passive)))) + (libpart (lib Connector) (part Conn_01x03_Male) + (footprints + (fp Connector*:*_1x??_*)) + (fields + (field (name Reference) J) + (field (name Value) Conn_01x03_Male)) + (pins + (pin (num 1) (name Pin_1) (type passive)) + (pin (num 2) (name Pin_2) (type passive)) + (pin (num 3) (name Pin_3) (type passive)))) + (libpart (lib Connector) (part Conn_01x05_Male) + (footprints + (fp Connector*:*_1x??_*)) + (fields + (field (name Reference) J) + (field (name Value) Conn_01x05_Male)) + (pins + (pin (num 1) (name Pin_1) (type passive)) + (pin (num 2) (name Pin_2) (type passive)) + (pin (num 3) (name Pin_3) (type passive)) + (pin (num 4) (name Pin_4) (type passive)) + (pin (num 5) (name Pin_5) (type passive)))) + (libpart (lib Connector) (part Conn_01x06_Male) + (footprints + (fp Connector*:*_1x??_*)) + (fields + (field (name Reference) J) + (field (name Value) Conn_01x06_Male)) + (pins + (pin (num 1) (name Pin_1) (type passive)) + (pin (num 2) (name Pin_2) (type passive)) + (pin (num 3) (name Pin_3) (type passive)) + (pin (num 4) (name Pin_4) (type passive)) + (pin (num 5) (name Pin_5) (type passive)) + (pin (num 6) (name Pin_6) (type passive)))) + (libpart (lib Connector) (part Conn_01x07_Male) + (footprints + (fp Connector*:*_1x??_*)) + (fields + (field (name Reference) J) + (field (name Value) Conn_01x07_Male)) + (pins + (pin (num 1) (name Pin_1) (type passive)) + (pin (num 2) (name Pin_2) (type passive)) + (pin (num 3) (name Pin_3) (type passive)) + (pin (num 4) (name Pin_4) (type passive)) + (pin (num 5) (name Pin_5) (type passive)) + (pin (num 6) (name Pin_6) (type passive)) + (pin (num 7) (name Pin_7) (type passive)))) + (libpart (lib Connector) (part Conn_01x08_Male) + (footprints + (fp Connector*:*_1x??_*)) + (fields + (field (name Reference) J) + (field (name Value) Conn_01x08_Male)) + (pins + (pin (num 1) (name Pin_1) (type passive)) + (pin (num 2) (name Pin_2) (type passive)) + (pin (num 3) (name Pin_3) (type passive)) + (pin (num 4) (name Pin_4) (type passive)) + (pin (num 5) (name Pin_5) (type passive)) + (pin (num 6) (name Pin_6) (type passive)) + (pin (num 7) (name Pin_7) (type passive)) + (pin (num 8) (name Pin_8) (type passive)))) + (libpart (lib Device) (part R) + (footprints + (fp R_*)) + (fields + (field (name Reference) R) + (field (name Value) R)) + (pins + (pin (num 1) (name ~) (type passive)) + (pin (num 2) (name ~) (type passive)))) + (libpart (lib ESP32-DEVKITC-32U) (part ESP32-DEVKITC-32U) + (fields + (field (name Reference) U) + (field (name Value) ESP32-DEVKITC-32U) + (field (name Footprint) MODULE_ESP32-DEVKITC-32U) + (field (name Datasheet) "Manufacturer Recommendations") + (field (name Field4) ESPRESSIF) + (field (name Field5) N/A)) + (pins + (pin (num 1) (name 3V3) (type power_in)) + (pin (num 2) (name EN) (type input)) + (pin (num 3) (name SENSOR_VP) (type input)) + (pin (num 4) (name SENSOR_VN) (type input)) + (pin (num 5) (name IO34) (type BiDi)) + (pin (num 6) (name IO35) (type BiDi)) + (pin (num 7) (name IO32) (type BiDi)) + (pin (num 8) (name IO33) (type BiDi)) + (pin (num 9) (name IO25) (type BiDi)) + (pin (num 10) (name IO26) (type BiDi)) + (pin (num 11) (name IO27) (type BiDi)) + (pin (num 12) (name IO14) (type BiDi)) + (pin (num 13) (name IO12) (type BiDi)) + (pin (num 14) (name GND1) (type power_in)) + (pin (num 15) (name IO13) (type BiDi)) + (pin (num 16) (name SD2) (type BiDi)) + (pin (num 17) (name SD3) (type BiDi)) + (pin (num 18) (name CMD) (type BiDi)) + (pin (num 19) (name EXT_5V) (type power_in)) + (pin (num 20) (name CLK) (type input)) + (pin (num 21) (name SD0) (type BiDi)) + (pin (num 22) (name SD1) (type BiDi)) + (pin (num 23) (name IO15) (type BiDi)) + (pin (num 24) (name IO2) (type BiDi)) + (pin (num 25) (name IO0) (type BiDi)) + (pin (num 26) (name IO4) (type BiDi)) + (pin (num 27) (name IO16) (type BiDi)) + (pin (num 28) (name IO17) (type BiDi)) + (pin (num 29) (name IO5) (type BiDi)) + (pin (num 30) (name IO18) (type BiDi)) + (pin (num 31) (name IO19) (type BiDi)) + (pin (num 32) (name GND2) (type power_in)) + (pin (num 33) (name IO21) (type BiDi)) + (pin (num 34) (name RXD0) (type input)) + (pin (num 35) (name TXD0) (type output)) + (pin (num 36) (name IO22) (type BiDi)) + (pin (num 37) (name IO23) (type BiDi)) + (pin (num 38) (name GND3) (type power_in)))) + (libpart (lib Transistor_BJT) (part BC547) + (aliases + (alias BC546) + (alias BC548) + (alias BC549) + (alias BC550) + (alias BC337) + (alias BC338)) + (footprints + (fp TO?92*)) + (fields + (field (name Reference) Q) + (field (name Value) BC547) + (field (name Footprint) Package_TO_SOT_THT:TO-92_Inline)) + (pins + (pin (num 1) (name C) (type passive)) + (pin (num 2) (name B) (type input)) + (pin (num 3) (name E) (type passive)))) + (libpart (lib Transistor_FET) (part IRF9540N) + (aliases + (alias IRF4905) + (alias FQP27P06)) + (footprints + (fp TO?220*)) + (fields + (field (name Reference) Q) + (field (name Value) IRF9540N) + (field (name Footprint) Package_TO_SOT_THT:TO-220-3_Vertical)) + (pins + (pin (num 1) (name G) (type input)) + (pin (num 2) (name D) (type passive)) + (pin (num 3) (name S) (type passive))))) + (libraries + (library (logical Connector) + (uri /Users/mariolukas/Documents/KiCad/libs/Connector.lib)) + (library (logical Device) + (uri /Users/mariolukas/Documents/KiCad/libs/Device.lib)) + (library (logical ESP32-DEVKITC-32U) + (uri /Users/mariolukas/Documents/KiCad/libs/ESP32-DEVKITC-32U.lib)) + (library (logical Transistor_BJT) + (uri /Users/mariolukas/Documents/KiCad/libs/Transistor_BJT.lib)) + (library (logical Transistor_FET) + (uri /Users/mariolukas/Documents/KiCad/libs/Transistor_FET.lib))) + (nets + (net (code 1) (name "Net-(U1-Pad2)") + (node (ref U1) (pin 2))) + (net (code 2) (name "Net-(U1-Pad3)") + (node (ref U1) (pin 3))) + (net (code 3) (name "Net-(U1-Pad4)") + (node (ref U1) (pin 4))) + (net (code 4) (name "Net-(U1-Pad16)") + (node (ref U1) (pin 16))) + (net (code 5) (name "Net-(U1-Pad17)") + (node (ref U1) (pin 17))) + (net (code 6) (name "Net-(U1-Pad18)") + (node (ref U1) (pin 18))) + (net (code 7) (name "Net-(U1-Pad20)") + (node (ref U1) (pin 20))) + (net (code 8) (name "Net-(U1-Pad21)") + (node (ref U1) (pin 21))) + (net (code 9) (name "Net-(U1-Pad22)") + (node (ref U1) (pin 22))) + (net (code 10) (name "Net-(U1-Pad24)") + (node (ref U1) (pin 24))) + (net (code 11) (name "Net-(U1-Pad25)") + (node (ref U1) (pin 25))) + (net (code 12) (name "Net-(U1-Pad34)") + (node (ref U1) (pin 34))) + (net (code 13) (name "Net-(U1-Pad35)") + (node (ref U1) (pin 35))) + (net (code 14) (name "Net-(J3-Pad3)") + (node (ref J3) (pin 3))) + (net (code 15) (name "Net-(J3-Pad4)") + (node (ref J3) (pin 4))) + (net (code 16) (name GPIO-17) + (node (ref J2) (pin 1)) + (node (ref U1) (pin 28)) + (node (ref R5) (pin 2))) + (net (code 17) (name SWITCHED_VCC) + (node (ref J8) (pin 3)) + (node (ref J3) (pin 1)) + (node (ref J1) (pin 2)) + (node (ref Q2) (pin 2))) + (net (code 18) (name GND) + (node (ref U1) (pin 38)) + (node (ref J4) (pin 1)) + (node (ref Q1) (pin 3)) + (node (ref R4) (pin 2)) + (node (ref J1) (pin 1)) + (node (ref J9) (pin 1)) + (node (ref U1) (pin 32)) + (node (ref J3) (pin 2)) + (node (ref J8) (pin 1)) + (node (ref J2) (pin 3)) + (node (ref J7) (pin 1)) + (node (ref J6) (pin 1)) + (node (ref J5) (pin 1)) + (node (ref U1) (pin 14))) + (net (code 19) (name 3.3V) + (node (ref U1) (pin 1)) + (node (ref J4) (pin 2))) + (net (code 20) (name SD-CARD_MISO) + (node (ref J1) (pin 3)) + (node (ref U1) (pin 27))) + (net (code 21) (name SD-CARD_MOSI) + (node (ref U1) (pin 15)) + (node (ref J1) (pin 4))) + (net (code 22) (name SD-CARD_SCK) + (node (ref U1) (pin 12)) + (node (ref J1) (pin 5))) + (net (code 23) (name SD-CARD_CS) + (node (ref J1) (pin 6)) + (node (ref U1) (pin 23))) + (net (code 24) (name MAX98357_DIN) + (node (ref U1) (pin 9)) + (node (ref J3) (pin 5))) + (net (code 25) (name MAX98357_BLCK) + (node (ref J3) (pin 6)) + (node (ref U1) (pin 11))) + (net (code 26) (name MAX98357_LRC) + (node (ref U1) (pin 10)) + (node (ref J3) (pin 7))) + (net (code 27) (name ROTARY_CLR) + (node (ref U1) (pin 5)) + (node (ref J4) (pin 3))) + (net (code 28) (name ROTARY_DT) + (node (ref U1) (pin 6)) + (node (ref J4) (pin 4))) + (net (code 29) (name ROTARY_BUTTON) + (node (ref J4) (pin 5)) + (node (ref U1) (pin 7))) + (net (code 30) (name NEOPIXEL_DI) + (node (ref U1) (pin 13)) + (node (ref J8) (pin 2))) + (net (code 31) (name VCC) + (node (ref U1) (pin 19)) + (node (ref Q2) (pin 3)) + (node (ref R1) (pin 1)) + (node (ref J9) (pin 2))) + (net (code 32) (name BUTTON_PREVIOUS_PIN) + (node (ref J5) (pin 2)) + (node (ref U1) (pin 8))) + (net (code 33) (name BUTTON_NEXT_PIN) + (node (ref U1) (pin 26)) + (node (ref J6) (pin 2))) + (net (code 34) (name BUTTON_PLAY_PAUSE_PIN) + (node (ref U1) (pin 29)) + (node (ref J7) (pin 2))) + (net (code 35) (name RFID_RST) + (node (ref J2) (pin 2)) + (node (ref U1) (pin 36))) + (net (code 36) (name "Net-(J2-Pad4)") + (node (ref J2) (pin 4))) + (net (code 37) (name RFID_MISO) + (node (ref J2) (pin 5)) + (node (ref U1) (pin 31))) + (net (code 38) (name RFID_MOSI) + (node (ref J2) (pin 6)) + (node (ref U1) (pin 37))) + (net (code 39) (name RFID_SCK) + (node (ref J2) (pin 7)) + (node (ref U1) (pin 30))) + (net (code 40) (name RFID_SDA) + (node (ref J2) (pin 8)) + (node (ref U1) (pin 33))) + (net (code 41) (name "Net-(Q1-Pad2)") + (node (ref R4) (pin 1)) + (node (ref R5) (pin 1)) + (node (ref Q1) (pin 2))) + (net (code 42) (name "Net-(Q1-Pad1)") + (node (ref Q1) (pin 1)) + (node (ref Q2) (pin 1)) + (node (ref R1) (pin 2))))) \ No newline at end of file diff --git a/PCBs/ESP32_Breakout_Carrier/Tonuino-ESP32_2.pro b/PCBs/ESP32_Breakout_Carrier/Tonuino-ESP32_2.pro new file mode 100644 index 0000000..e21fca8 --- /dev/null +++ b/PCBs/ESP32_Breakout_Carrier/Tonuino-ESP32_2.pro @@ -0,0 +1,248 @@ +update=2020 October 04, Sunday 16:49:12 +version=1 +last_client=kicad +[general] +version=1 +RootSch= +BoardNm= +[cvpcb] +version=1 +NetIExt=net +[eeschema] +version=1 +LibDir= +[eeschema/libraries] +[schematic_editor] +version=1 +PageLayoutDescrFile= +PlotDirectoryName= +SubpartIdSeparator=0 +SubpartFirstId=65 +NetFmtName=Pcbnew +SpiceAjustPassiveValues=0 +LabSize=50 +ERC_TestSimilarLabels=1 +[pcbnew] +version=1 +PageLayoutDescrFile= +LastNetListRead= +CopperLayerCount=2 +BoardThickness=1.6 +AllowMicroVias=0 +AllowBlindVias=0 +RequireCourtyardDefinitions=0 +ProhibitOverlappingCourtyards=1 +MinTrackWidth=0.2 +MinViaDiameter=0.4 +MinViaDrill=0.3 +MinMicroViaDiameter=0.2 +MinMicroViaDrill=0.09999999999999999 +MinHoleToHole=0.25 +TrackWidth1=0.4 +ViaDiameter1=0.8 +ViaDrill1=0.4 +dPairWidth1=0.2 +dPairGap1=0.25 +dPairViaGap1=0.25 +SilkLineWidth=0.12 +SilkTextSizeV=1 +SilkTextSizeH=1 +SilkTextSizeThickness=0.15 +SilkTextItalic=0 +SilkTextUpright=1 +CopperLineWidth=0.2 +CopperTextSizeV=1.5 +CopperTextSizeH=1.5 +CopperTextThickness=0.3 +CopperTextItalic=0 +CopperTextUpright=1 +EdgeCutLineWidth=0.05 +CourtyardLineWidth=0.05 +OthersLineWidth=0.15 +OthersTextSizeV=1 +OthersTextSizeH=1 +OthersTextSizeThickness=0.15 +OthersTextItalic=0 +OthersTextUpright=1 +SolderMaskClearance=0 +SolderMaskMinWidth=0 +SolderPasteClearance=0 +SolderPasteRatio=-0 +[pcbnew/Layer.F.Cu] +Name=F.Cu +Type=0 +Enabled=1 +[pcbnew/Layer.In1.Cu] +Name=In1.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In2.Cu] +Name=In2.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In3.Cu] +Name=In3.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In4.Cu] +Name=In4.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In5.Cu] +Name=In5.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In6.Cu] +Name=In6.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In7.Cu] +Name=In7.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In8.Cu] +Name=In8.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In9.Cu] +Name=In9.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In10.Cu] +Name=In10.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In11.Cu] +Name=In11.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In12.Cu] +Name=In12.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In13.Cu] +Name=In13.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In14.Cu] +Name=In14.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In15.Cu] +Name=In15.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In16.Cu] +Name=In16.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In17.Cu] +Name=In17.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In18.Cu] +Name=In18.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In19.Cu] +Name=In19.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In20.Cu] +Name=In20.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In21.Cu] +Name=In21.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In22.Cu] +Name=In22.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In23.Cu] +Name=In23.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In24.Cu] +Name=In24.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In25.Cu] +Name=In25.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In26.Cu] +Name=In26.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In27.Cu] +Name=In27.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In28.Cu] +Name=In28.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In29.Cu] +Name=In29.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In30.Cu] +Name=In30.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.B.Cu] +Name=B.Cu +Type=0 +Enabled=1 +[pcbnew/Layer.B.Adhes] +Enabled=1 +[pcbnew/Layer.F.Adhes] +Enabled=1 +[pcbnew/Layer.B.Paste] +Enabled=1 +[pcbnew/Layer.F.Paste] +Enabled=1 +[pcbnew/Layer.B.SilkS] +Enabled=1 +[pcbnew/Layer.F.SilkS] +Enabled=1 +[pcbnew/Layer.B.Mask] +Enabled=1 +[pcbnew/Layer.F.Mask] +Enabled=1 +[pcbnew/Layer.Dwgs.User] +Enabled=1 +[pcbnew/Layer.Cmts.User] +Enabled=1 +[pcbnew/Layer.Eco1.User] +Enabled=1 +[pcbnew/Layer.Eco2.User] +Enabled=1 +[pcbnew/Layer.Edge.Cuts] +Enabled=1 +[pcbnew/Layer.Margin] +Enabled=1 +[pcbnew/Layer.B.CrtYd] +Enabled=1 +[pcbnew/Layer.F.CrtYd] +Enabled=1 +[pcbnew/Layer.B.Fab] +Enabled=1 +[pcbnew/Layer.F.Fab] +Enabled=1 +[pcbnew/Layer.Rescue] +Enabled=0 +[pcbnew/Netclasses] +[pcbnew/Netclasses/Default] +Name=Default +Clearance=0.2 +TrackWidth=0.4 +ViaDiameter=0.8 +ViaDrill=0.4 +uViaDiameter=0.3 +uViaDrill=0.1 +dPairWidth=0.2 +dPairGap=0.25 +dPairViaGap=0.25 diff --git a/PCBs/ESP32_Breakout_Carrier/Tonuino-ESP32_2.sch b/PCBs/ESP32_Breakout_Carrier/Tonuino-ESP32_2.sch new file mode 100644 index 0000000..8f138b4 --- /dev/null +++ b/PCBs/ESP32_Breakout_Carrier/Tonuino-ESP32_2.sch @@ -0,0 +1,585 @@ +EESchema Schematic File Version 4 +EELAYER 30 0 +EELAYER END +$Descr A4 11693 8268 +encoding utf-8 +Sheet 1 1 +Title "" +Date "" +Rev "" +Comp "" +Comment1 "" +Comment2 "" +Comment3 "" +Comment4 "" +$EndDescr +$Comp +L ESP32-DEVKITC-32U:ESP32-DEVKITC-32U U1 +U 1 1 5F79096D +P 8100 2650 +F 0 "U1" H 8100 3817 50 0000 C CNN +F 1 "ESP32-DEVKITC-32U" H 8100 3726 50 0000 C CNN +F 2 "ESP32-DEVKITC-32U:MODULE_ESP32-DEVKITC-32U" H 8100 2650 50 0001 L BNN +F 3 "Manufacturer Recommendations" H 8100 2650 50 0001 L BNN +F 4 "ESPRESSIF" H 8100 2650 50 0001 L BNN "Field4" +F 5 "N/A" H 8100 2650 50 0001 L BNN "Field5" + 1 8100 2650 + 1 0 0 -1 +$EndComp +$Comp +L Connector:Conn_01x05_Male J4 +U 1 1 5F7BD0A2 +P 2550 6550 +F 0 "J4" H 2658 6931 50 0000 C CNN +F 1 "Rotary Encode" H 2658 6840 50 0000 C CNN +F 2 "mod_s:PinHeader_1x05_P2.54mm_Vertical" H 2550 6550 50 0001 C CNN +F 3 "" H 2550 6550 50 0001 C CNN + 1 2550 6550 + 0 1 1 0 +$EndComp +$Comp +L Connector:Conn_01x06_Male J1 +U 1 1 5F7ED32A +P 6250 4700 +F 0 "J1" V 6312 4944 50 0000 L CNN +F 1 "SD-Card Reader" V 6403 4944 50 0000 L CNN +F 2 "mod_s:PinHeader_1x06_P2.54mm_Vertical" H 6250 4700 50 0001 C CNN +F 3 "" H 6250 4700 50 0001 C CNN + 1 6250 4700 + 0 1 1 0 +$EndComp +Text Notes 4200 4300 0 197 ~ 0 +Breakout Boards\n +Text Notes 850 4300 0 197 ~ 0 +Inputs Interfaces +Text Notes 850 1400 0 197 ~ 0 +Switched 5V (Deep Sleep)\n +Text Notes 7500 1250 0 197 ~ 0 +ESP-32\n +$Comp +L Connector:Conn_01x07_Male J3 +U 1 1 5F81C714 +P 4650 6450 +F 0 "J3" V 4485 6428 50 0000 C CNN +F 1 "Adafruit MAX98357" V 4576 6428 50 0000 C CNN +F 2 "mod_s:PinHeader_1x07_P2.54mm_Vertical" H 4650 6450 50 0001 C CNN +F 3 "" H 4650 6450 50 0001 C CNN + 1 4650 6450 + 0 1 1 0 +$EndComp +Text GLabel 9050 2750 2 50 Input ~ 0 +GPIO-17 +Wire Wire Line + 4950 6850 4950 6650 +Text GLabel 6350 5050 3 50 Input ~ 0 +SWITCHED_VCC +Wire Wire Line + 6350 5050 6350 4900 +$Comp +L power:GND #PWR0103 +U 1 1 5F829524 +P 6600 5100 +F 0 "#PWR0103" H 6600 4850 50 0001 C CNN +F 1 "GND" H 6605 4927 50 0000 C CNN +F 2 "" H 6600 5100 50 0001 C CNN +F 3 "" H 6600 5100 50 0001 C CNN + 1 6600 5100 + 1 0 0 -1 +$EndComp +Wire Wire Line + 6600 5100 6450 5100 +Wire Wire Line + 6450 5100 6450 4900 +Text GLabel 7050 1750 0 50 Input ~ 0 +3.3V +Wire Wire Line + 7300 1750 7050 1750 +Wire Wire Line + 8900 2750 9050 2750 +Text GLabel 5050 5250 3 50 Input ~ 0 +GPIO-17 +$Comp +L power:GND #PWR0104 +U 1 1 5F82B98B +P 4850 5250 +F 0 "#PWR0104" H 4850 5000 50 0001 C CNN +F 1 "GND" H 4855 5077 50 0000 C CNN +F 2 "" H 4850 5250 50 0001 C CNN +F 3 "" H 4850 5250 50 0001 C CNN + 1 4850 5250 + 1 0 0 -1 +$EndComp +Text GLabel 6250 5050 3 50 Input ~ 0 +SD-CARD_MISO +Text GLabel 6150 5050 3 50 Input ~ 0 +SD-CARD_MOSI +Wire Wire Line + 6250 5050 6250 4900 +Wire Wire Line + 6150 5050 6150 4900 +Text GLabel 6050 5050 3 50 Input ~ 0 +SD-CARD_SCK +Text GLabel 5950 5050 3 50 Input ~ 0 +SD-CARD_CS +Wire Wire Line + 6050 5050 6050 4900 +Wire Wire Line + 5950 5050 5950 4900 +Text GLabel 4950 5250 3 50 Input ~ 0 +RFID_RST +Text GLabel 4350 5250 3 50 Input ~ 0 +RFID_SDA +Text GLabel 4450 5250 3 50 Input ~ 0 +RFID_SCK +Text GLabel 4550 5250 3 50 Input ~ 0 +RFID_MOSI +Text GLabel 4650 5250 3 50 Input ~ 0 +RFID_MISO +Wire Wire Line + 4850 6750 4850 6650 +Text GLabel 4550 6850 3 50 Input ~ 0 +MAX98357_DIN +Wire Wire Line + 4550 6850 4550 6650 +Text GLabel 4450 6850 3 50 Input ~ 0 +MAX98357_BLCK +Wire Wire Line + 4450 6850 4450 6650 +Text GLabel 4350 6850 3 50 Input ~ 0 +MAX98357_LRC +Wire Wire Line + 4350 6850 4350 6650 +Text GLabel 2550 6900 3 50 Input ~ 0 +ROTARY_CLR +Text GLabel 2450 6900 3 50 Input ~ 0 +ROTARY_DT +Text GLabel 2350 6900 3 50 Input ~ 0 +ROTARY_BUTTON +Text GLabel 2650 6900 3 50 Input ~ 0 +3.3V +Wire Wire Line + 2750 6900 2750 6750 +Wire Wire Line + 2650 6900 2650 6750 +Wire Wire Line + 2450 6900 2450 6750 +Text GLabel 2500 5100 3 50 Input ~ 0 +BUTTON_PLAY_PAUSE_PIN +Text GLabel 2100 5100 3 50 Input ~ 0 +BUTTON_NEXT_PIN +Text GLabel 1600 5100 3 50 Input ~ 0 +BUTTON_PREVIOUS_PIN +$Comp +L power:GND #PWR0106 +U 1 1 5F842383 +P 1700 5100 +F 0 "#PWR0106" H 1700 4850 50 0001 C CNN +F 1 "GND" H 1705 4927 50 0000 C CNN +F 2 "" H 1700 5100 50 0001 C CNN +F 3 "" H 1700 5100 50 0001 C CNN + 1 1700 5100 + 1 0 0 -1 +$EndComp +$Comp +L power:GND #PWR0107 +U 1 1 5F8429CB +P 2200 5100 +F 0 "#PWR0107" H 2200 4850 50 0001 C CNN +F 1 "GND" H 2205 4927 50 0000 C CNN +F 2 "" H 2200 5100 50 0001 C CNN +F 3 "" H 2200 5100 50 0001 C CNN + 1 2200 5100 + 1 0 0 -1 +$EndComp +$Comp +L power:GND #PWR0108 +U 1 1 5F843BDD +P 2600 5100 +F 0 "#PWR0108" H 2600 4850 50 0001 C CNN +F 1 "GND" H 2605 4927 50 0000 C CNN +F 2 "" H 2600 5100 50 0001 C CNN +F 3 "" H 2600 5100 50 0001 C CNN + 1 2600 5100 + 1 0 0 -1 +$EndComp +Text GLabel 5750 6900 3 50 Input ~ 0 +NEOPIXEL_DI +Wire Wire Line + 5650 6900 5650 6750 +Wire Wire Line + 5750 6900 5750 6750 +Wire Wire Line + 5850 6900 5850 6750 +Text GLabel 9050 1950 2 50 Input ~ 0 +RFID_RST +Wire Wire Line + 8900 1950 9050 1950 +Text GLabel 9050 2250 2 50 Input ~ 0 +RFID_SDA +Wire Wire Line + 8900 2250 9050 2250 +Text GLabel 9050 1850 2 50 Input ~ 0 +RFID_MOSI +Wire Wire Line + 8900 1850 9050 1850 +Text GLabel 9050 2450 2 50 Input ~ 0 +RFID_MISO +Wire Wire Line + 9050 2450 8900 2450 +Text GLabel 9050 2550 2 50 Input ~ 0 +RFID_SCK +Wire Wire Line + 8900 2550 9050 2550 +$Comp +L power:GND #PWR0110 +U 1 1 5F85DB8C +P 9050 1750 +F 0 "#PWR0110" H 9050 1500 50 0001 C CNN +F 1 "GND" V 9050 1600 50 0000 R CNN +F 2 "" H 9050 1750 50 0001 C CNN +F 3 "" H 9050 1750 50 0001 C CNN + 1 9050 1750 + 0 -1 -1 0 +$EndComp +Wire Wire Line + 8900 2350 9050 2350 +Wire Wire Line + 9050 1750 8900 1750 +Text GLabel 7050 2550 0 50 Input ~ 0 +MAX98357_DIN +Text GLabel 7050 2750 0 50 Input ~ 0 +MAX98357_BLCK +Text GLabel 7050 2650 0 50 Input ~ 0 +MAX98357_LRC +Wire Wire Line + 7050 2550 7300 2550 +Wire Wire Line + 7050 2650 7300 2650 +Wire Wire Line + 7050 2750 7300 2750 +Text GLabel 9050 3250 2 50 Input ~ 0 +SD-CARD_CS +Text GLabel 7050 2850 0 50 Input ~ 0 +SD-CARD_SCK +Text GLabel 7050 3150 0 50 Input ~ 0 +SD-CARD_MOSI +Text GLabel 9050 2850 2 50 Input ~ 0 +SD-CARD_MISO +Wire Wire Line + 9050 2850 8900 2850 +Wire Wire Line + 9050 3250 8900 3250 +Wire Wire Line + 7300 3150 7050 3150 +Wire Wire Line + 7050 2850 7300 2850 +Text GLabel 7050 2450 0 50 Input ~ 0 +BUTTON_PREVIOUS_PIN +Text GLabel 9050 2950 2 50 Input ~ 0 +BUTTON_NEXT_PIN +Text GLabel 9050 2650 2 50 Input ~ 0 +BUTTON_PLAY_PAUSE_PIN +Wire Wire Line + 8900 2650 9050 2650 +Wire Wire Line + 8900 2950 9050 2950 +Wire Wire Line + 7300 2450 7050 2450 +Text GLabel 7050 2150 0 50 Input ~ 0 +ROTARY_CLR +Text GLabel 7050 2250 0 50 Input ~ 0 +ROTARY_DT +Text GLabel 7050 2350 0 50 Input ~ 0 +ROTARY_BUTTON +Wire Wire Line + 7050 2350 7300 2350 +Wire Wire Line + 7050 2250 7300 2250 +Wire Wire Line + 7050 2150 7300 2150 +Text GLabel 7050 2950 0 50 Input ~ 0 +NEOPIXEL_DI +Wire Wire Line + 7050 2950 7300 2950 +$Comp +L power:VCC #PWR0112 +U 1 1 5F87B792 +P 7000 3550 +F 0 "#PWR0112" H 7000 3400 50 0001 C CNN +F 1 "VCC" H 7015 3723 50 0000 C CNN +F 2 "" H 7000 3550 50 0001 C CNN +F 3 "" H 7000 3550 50 0001 C CNN + 1 7000 3550 + 0 -1 -1 0 +$EndComp +Wire Wire Line + 7300 3550 7000 3550 +Text GLabel 5650 6900 3 50 Input ~ 0 +SWITCHED_VCC +$Comp +L power:VCC #PWR0114 +U 1 1 5F8848E9 +P 8750 4900 +F 0 "#PWR0114" H 8750 4750 50 0001 C CNN +F 1 "VCC" H 8765 5073 50 0000 C CNN +F 2 "" H 8750 4900 50 0001 C CNN +F 3 "" H 8750 4900 50 0001 C CNN + 1 8750 4900 + -1 0 0 1 +$EndComp +$Comp +L power:GND #PWR0115 +U 1 1 5F885DD6 +P 8850 4900 +F 0 "#PWR0115" H 8850 4650 50 0001 C CNN +F 1 "GND" H 8855 4727 50 0000 C CNN +F 2 "" H 8850 4900 50 0001 C CNN +F 3 "" H 8850 4900 50 0001 C CNN + 1 8850 4900 + 1 0 0 -1 +$EndComp +Text Notes 7750 4300 0 197 ~ 0 +Power Supply\n +Wire Wire Line + 2550 6900 2550 6750 +Wire Wire Line + 2350 6900 2350 6750 +$Comp +L power:GND #PWR0105 +U 1 1 5F872A11 +P 9050 2350 +F 0 "#PWR0105" H 9050 2100 50 0001 C CNN +F 1 "GND" V 9055 2222 50 0000 R CNN +F 2 "" H 9050 2350 50 0001 C CNN +F 3 "" H 9050 2350 50 0001 C CNN + 1 9050 2350 + 0 -1 -1 0 +$EndComp +$Comp +L power:GND #PWR0109 +U 1 1 5F8787E6 +P 2750 6900 +F 0 "#PWR0109" H 2750 6650 50 0001 C CNN +F 1 "GND" V 2750 6750 50 0000 R CNN +F 2 "" H 2750 6900 50 0001 C CNN +F 3 "" H 2750 6900 50 0001 C CNN + 1 2750 6900 + 1 0 0 -1 +$EndComp +$Comp +L power:GND #PWR0111 +U 1 1 5F878CF4 +P 7300 3050 +F 0 "#PWR0111" H 7300 2800 50 0001 C CNN +F 1 "GND" V 7300 2900 50 0000 R CNN +F 2 "" H 7300 3050 50 0001 C CNN +F 3 "" H 7300 3050 50 0001 C CNN + 1 7300 3050 + 0 1 1 0 +$EndComp +$Comp +L power:GND #PWR0117 +U 1 1 5F885952 +P 4850 6750 +F 0 "#PWR0117" H 4850 6500 50 0001 C CNN +F 1 "GND" V 4850 6600 50 0000 R CNN +F 2 "" H 4850 6750 50 0001 C CNN +F 3 "" H 4850 6750 50 0001 C CNN + 1 4850 6750 + 1 0 0 -1 +$EndComp +$Comp +L power:GND #PWR0118 +U 1 1 5F8874D1 +P 5850 6900 +F 0 "#PWR0118" H 5850 6650 50 0001 C CNN +F 1 "GND" V 5850 6750 50 0000 R CNN +F 2 "" H 5850 6900 50 0001 C CNN +F 3 "" H 5850 6900 50 0001 C CNN + 1 5850 6900 + 1 0 0 -1 +$EndComp +Text GLabel 4950 6850 3 50 Input ~ 0 +SWITCHED_VCC +$Comp +L Connector:Conn_01x02_Male J5 +U 1 1 5F9085EF +P 1700 4900 +F 0 "J5" V 1762 4944 50 0000 L CNN +F 1 "Next" V 1853 4944 50 0000 L CNN +F 2 "mod_s:PinHeader_1x02_P2.54mm_Vertical" H 1700 4900 50 0001 C CNN +F 3 "" H 1700 4900 50 0001 C CNN + 1 1700 4900 + 0 1 1 0 +$EndComp +$Comp +L Connector:Conn_01x02_Male J6 +U 1 1 5F90EAED +P 2200 4900 +F 0 "J6" V 2262 4944 50 0000 L CNN +F 1 "Prev" V 2353 4944 50 0000 L CNN +F 2 "mod_s:PinHeader_1x02_P2.54mm_Vertical" H 2200 4900 50 0001 C CNN +F 3 "" H 2200 4900 50 0001 C CNN + 1 2200 4900 + 0 1 1 0 +$EndComp +$Comp +L Connector:Conn_01x02_Male J7 +U 1 1 5F90F726 +P 2600 4900 +F 0 "J7" V 2662 4944 50 0000 L CNN +F 1 "Pause" V 2753 4944 50 0000 L CNN +F 2 "mod_s:PinHeader_1x02_P2.54mm_Vertical" H 2600 4900 50 0001 C CNN +F 3 "" H 2600 4900 50 0001 C CNN + 1 2600 4900 + 0 1 1 0 +$EndComp +$Comp +L Connector:Conn_01x08_Male J2 +U 1 1 5F92011C +P 4750 5050 +F 0 "J2" V 4585 4978 50 0000 C CNN +F 1 "RFID-RC522" V 4676 4978 50 0000 C CNN +F 2 "mod_s:PinHeader_1x08_P2.54mm_Vertical" H 4750 5050 50 0001 C CNN +F 3 "" H 4750 5050 50 0001 C CNN + 1 4750 5050 + 0 1 1 0 +$EndComp +$Comp +L Connector:Conn_01x03_Male J8 +U 1 1 5F936A23 +P 5750 6550 +F 0 "J8" V 5812 6694 50 0000 L CNN +F 1 "WS2812" V 5903 6694 50 0000 L CNN +F 2 "mod_s:PinHeader_1x03_P2.54mm_Vertical" H 5750 6550 50 0001 C CNN +F 3 "" H 5750 6550 50 0001 C CNN + 1 5750 6550 + 0 1 1 0 +$EndComp +$Comp +L Connector:Conn_01x02_Male J9 +U 1 1 5F945F11 +P 8850 4700 +F 0 "J9" V 8912 4744 50 0000 L CNN +F 1 "Power" V 9003 4744 50 0000 L CNN +F 2 "mod_s:PinHeader_1x02_P2.54mm_Vertical" H 8850 4700 50 0001 C CNN +F 3 "" H 8850 4700 50 0001 C CNN + 1 8850 4700 + 0 1 1 0 +$EndComp +Wire Wire Line + 1600 2850 1850 2850 +Text GLabel 1600 2850 0 50 Input ~ 0 +GPIO-17 +Wire Wire Line + 2300 2400 2300 2550 +$Comp +L power:GND #PWR0102 +U 1 1 5F7B65C3 +P 2300 2400 +F 0 "#PWR0102" H 2300 2150 50 0001 C CNN +F 1 "GND" H 2305 2227 50 0000 C CNN +F 2 "" H 2300 2400 50 0001 C CNN +F 3 "" H 2300 2400 50 0001 C CNN + 1 2300 2400 + -1 0 0 1 +$EndComp +Connection ~ 2300 2850 +Wire Wire Line + 2300 2850 2150 2850 +Wire Wire Line + 2450 2850 2300 2850 +$Comp +L Device:R R5 +U 1 1 5F7995ED +P 2000 2850 +F 0 "R5" H 2070 2896 50 0000 L CNN +F 1 "4,7k" H 2070 2805 50 0000 L CNN +F 2 "adafruit:0207_9" V 1930 2850 50 0001 C CNN +F 3 "" H 2000 2850 50 0001 C CNN + 1 2000 2850 + 0 1 1 0 +$EndComp +$Comp +L Device:R R4 +U 1 1 5F798E7D +P 2300 2700 +F 0 "R4" H 2370 2746 50 0000 L CNN +F 1 "10k" H 2370 2655 50 0000 L CNN +F 2 "adafruit:0207_9" V 2230 2700 50 0001 C CNN +F 3 "" H 2300 2700 50 0001 C CNN + 1 2300 2700 + -1 0 0 1 +$EndComp +$Comp +L Transistor_BJT:BC337 Q1 +U 1 1 5F78DA7C +P 2650 2850 +F 0 "Q1" H 2841 2896 50 0000 L CNN +F 1 "BC337" H 2841 2805 50 0000 L CNN +F 2 "Package_TO_SOT_THT:TO-92_Inline_Wide" H 2850 2775 50 0001 L CIN +F 3 "" H 2650 2850 50 0001 L CNN + 1 2650 2850 + 1 0 0 -1 +$EndComp +$Comp +L power:GND #PWR0101 +U 1 1 5F7B5A15 +P 2750 3300 +F 0 "#PWR0101" H 2750 3050 50 0001 C CNN +F 1 "GND" H 2755 3127 50 0000 C CNN +F 2 "" H 2750 3300 50 0001 C CNN +F 3 "" H 2750 3300 50 0001 C CNN + 1 2750 3300 + 1 0 0 -1 +$EndComp +Wire Wire Line + 2750 3050 2750 3300 +$Comp +L Transistor_FET:IRF9540N Q2 +U 1 1 5F78F572 +P 2750 2100 +F 0 "Q2" H 2954 2146 50 0000 L CNN +F 1 "IRF9540N" H 2954 2055 50 0000 L CNN +F 2 "Package_TO_SOT_THT:TO-220-3_Vertical" H 2950 2025 50 0001 L CIN +F 3 "" H 2750 2100 50 0001 L CNN + 1 2750 2100 + 0 -1 -1 0 +$EndComp +$Comp +L Device:R R1 +U 1 1 5F79873B +P 3050 2150 +F 0 "R1" H 3120 2196 50 0000 L CNN +F 1 "10k" H 3120 2105 50 0000 L CNN +F 2 "adafruit:0207_9" V 2980 2150 50 0001 C CNN +F 3 "" H 3050 2150 50 0001 C CNN + 1 3050 2150 + 1 0 0 -1 +$EndComp +Wire Wire Line + 3050 2000 2950 2000 +Wire Wire Line + 2750 2300 3050 2300 +Wire Wire Line + 3300 2000 3050 2000 +$Comp +L power:VCC #PWR0113 +U 1 1 5F87F1D8 +P 3300 2000 +F 0 "#PWR0113" H 3300 1850 50 0001 C CNN +F 1 "VCC" V 3315 2127 50 0000 L CNN +F 2 "" H 3300 2000 50 0001 C CNN +F 3 "" H 3300 2000 50 0001 C CNN + 1 3300 2000 + 0 1 1 0 +$EndComp +Text GLabel 2350 2000 0 50 Input ~ 0 +SWITCHED_VCC +Wire Wire Line + 2350 2000 2550 2000 +Connection ~ 3050 2000 +Wire Wire Line + 2750 2300 2750 2650 +Connection ~ 2750 2300 +$EndSCHEMATC diff --git a/PCBs/ESP32_Breakout_Carrier/Tonuino-ESP32_2.sch-bak b/PCBs/ESP32_Breakout_Carrier/Tonuino-ESP32_2.sch-bak new file mode 100644 index 0000000..8f138b4 --- /dev/null +++ b/PCBs/ESP32_Breakout_Carrier/Tonuino-ESP32_2.sch-bak @@ -0,0 +1,585 @@ +EESchema Schematic File Version 4 +EELAYER 30 0 +EELAYER END +$Descr A4 11693 8268 +encoding utf-8 +Sheet 1 1 +Title "" +Date "" +Rev "" +Comp "" +Comment1 "" +Comment2 "" +Comment3 "" +Comment4 "" +$EndDescr +$Comp +L ESP32-DEVKITC-32U:ESP32-DEVKITC-32U U1 +U 1 1 5F79096D +P 8100 2650 +F 0 "U1" H 8100 3817 50 0000 C CNN +F 1 "ESP32-DEVKITC-32U" H 8100 3726 50 0000 C CNN +F 2 "ESP32-DEVKITC-32U:MODULE_ESP32-DEVKITC-32U" H 8100 2650 50 0001 L BNN +F 3 "Manufacturer Recommendations" H 8100 2650 50 0001 L BNN +F 4 "ESPRESSIF" H 8100 2650 50 0001 L BNN "Field4" +F 5 "N/A" H 8100 2650 50 0001 L BNN "Field5" + 1 8100 2650 + 1 0 0 -1 +$EndComp +$Comp +L Connector:Conn_01x05_Male J4 +U 1 1 5F7BD0A2 +P 2550 6550 +F 0 "J4" H 2658 6931 50 0000 C CNN +F 1 "Rotary Encode" H 2658 6840 50 0000 C CNN +F 2 "mod_s:PinHeader_1x05_P2.54mm_Vertical" H 2550 6550 50 0001 C CNN +F 3 "" H 2550 6550 50 0001 C CNN + 1 2550 6550 + 0 1 1 0 +$EndComp +$Comp +L Connector:Conn_01x06_Male J1 +U 1 1 5F7ED32A +P 6250 4700 +F 0 "J1" V 6312 4944 50 0000 L CNN +F 1 "SD-Card Reader" V 6403 4944 50 0000 L CNN +F 2 "mod_s:PinHeader_1x06_P2.54mm_Vertical" H 6250 4700 50 0001 C CNN +F 3 "" H 6250 4700 50 0001 C CNN + 1 6250 4700 + 0 1 1 0 +$EndComp +Text Notes 4200 4300 0 197 ~ 0 +Breakout Boards\n +Text Notes 850 4300 0 197 ~ 0 +Inputs Interfaces +Text Notes 850 1400 0 197 ~ 0 +Switched 5V (Deep Sleep)\n +Text Notes 7500 1250 0 197 ~ 0 +ESP-32\n +$Comp +L Connector:Conn_01x07_Male J3 +U 1 1 5F81C714 +P 4650 6450 +F 0 "J3" V 4485 6428 50 0000 C CNN +F 1 "Adafruit MAX98357" V 4576 6428 50 0000 C CNN +F 2 "mod_s:PinHeader_1x07_P2.54mm_Vertical" H 4650 6450 50 0001 C CNN +F 3 "" H 4650 6450 50 0001 C CNN + 1 4650 6450 + 0 1 1 0 +$EndComp +Text GLabel 9050 2750 2 50 Input ~ 0 +GPIO-17 +Wire Wire Line + 4950 6850 4950 6650 +Text GLabel 6350 5050 3 50 Input ~ 0 +SWITCHED_VCC +Wire Wire Line + 6350 5050 6350 4900 +$Comp +L power:GND #PWR0103 +U 1 1 5F829524 +P 6600 5100 +F 0 "#PWR0103" H 6600 4850 50 0001 C CNN +F 1 "GND" H 6605 4927 50 0000 C CNN +F 2 "" H 6600 5100 50 0001 C CNN +F 3 "" H 6600 5100 50 0001 C CNN + 1 6600 5100 + 1 0 0 -1 +$EndComp +Wire Wire Line + 6600 5100 6450 5100 +Wire Wire Line + 6450 5100 6450 4900 +Text GLabel 7050 1750 0 50 Input ~ 0 +3.3V +Wire Wire Line + 7300 1750 7050 1750 +Wire Wire Line + 8900 2750 9050 2750 +Text GLabel 5050 5250 3 50 Input ~ 0 +GPIO-17 +$Comp +L power:GND #PWR0104 +U 1 1 5F82B98B +P 4850 5250 +F 0 "#PWR0104" H 4850 5000 50 0001 C CNN +F 1 "GND" H 4855 5077 50 0000 C CNN +F 2 "" H 4850 5250 50 0001 C CNN +F 3 "" H 4850 5250 50 0001 C CNN + 1 4850 5250 + 1 0 0 -1 +$EndComp +Text GLabel 6250 5050 3 50 Input ~ 0 +SD-CARD_MISO +Text GLabel 6150 5050 3 50 Input ~ 0 +SD-CARD_MOSI +Wire Wire Line + 6250 5050 6250 4900 +Wire Wire Line + 6150 5050 6150 4900 +Text GLabel 6050 5050 3 50 Input ~ 0 +SD-CARD_SCK +Text GLabel 5950 5050 3 50 Input ~ 0 +SD-CARD_CS +Wire Wire Line + 6050 5050 6050 4900 +Wire Wire Line + 5950 5050 5950 4900 +Text GLabel 4950 5250 3 50 Input ~ 0 +RFID_RST +Text GLabel 4350 5250 3 50 Input ~ 0 +RFID_SDA +Text GLabel 4450 5250 3 50 Input ~ 0 +RFID_SCK +Text GLabel 4550 5250 3 50 Input ~ 0 +RFID_MOSI +Text GLabel 4650 5250 3 50 Input ~ 0 +RFID_MISO +Wire Wire Line + 4850 6750 4850 6650 +Text GLabel 4550 6850 3 50 Input ~ 0 +MAX98357_DIN +Wire Wire Line + 4550 6850 4550 6650 +Text GLabel 4450 6850 3 50 Input ~ 0 +MAX98357_BLCK +Wire Wire Line + 4450 6850 4450 6650 +Text GLabel 4350 6850 3 50 Input ~ 0 +MAX98357_LRC +Wire Wire Line + 4350 6850 4350 6650 +Text GLabel 2550 6900 3 50 Input ~ 0 +ROTARY_CLR +Text GLabel 2450 6900 3 50 Input ~ 0 +ROTARY_DT +Text GLabel 2350 6900 3 50 Input ~ 0 +ROTARY_BUTTON +Text GLabel 2650 6900 3 50 Input ~ 0 +3.3V +Wire Wire Line + 2750 6900 2750 6750 +Wire Wire Line + 2650 6900 2650 6750 +Wire Wire Line + 2450 6900 2450 6750 +Text GLabel 2500 5100 3 50 Input ~ 0 +BUTTON_PLAY_PAUSE_PIN +Text GLabel 2100 5100 3 50 Input ~ 0 +BUTTON_NEXT_PIN +Text GLabel 1600 5100 3 50 Input ~ 0 +BUTTON_PREVIOUS_PIN +$Comp +L power:GND #PWR0106 +U 1 1 5F842383 +P 1700 5100 +F 0 "#PWR0106" H 1700 4850 50 0001 C CNN +F 1 "GND" H 1705 4927 50 0000 C CNN +F 2 "" H 1700 5100 50 0001 C CNN +F 3 "" H 1700 5100 50 0001 C CNN + 1 1700 5100 + 1 0 0 -1 +$EndComp +$Comp +L power:GND #PWR0107 +U 1 1 5F8429CB +P 2200 5100 +F 0 "#PWR0107" H 2200 4850 50 0001 C CNN +F 1 "GND" H 2205 4927 50 0000 C CNN +F 2 "" H 2200 5100 50 0001 C CNN +F 3 "" H 2200 5100 50 0001 C CNN + 1 2200 5100 + 1 0 0 -1 +$EndComp +$Comp +L power:GND #PWR0108 +U 1 1 5F843BDD +P 2600 5100 +F 0 "#PWR0108" H 2600 4850 50 0001 C CNN +F 1 "GND" H 2605 4927 50 0000 C CNN +F 2 "" H 2600 5100 50 0001 C CNN +F 3 "" H 2600 5100 50 0001 C CNN + 1 2600 5100 + 1 0 0 -1 +$EndComp +Text GLabel 5750 6900 3 50 Input ~ 0 +NEOPIXEL_DI +Wire Wire Line + 5650 6900 5650 6750 +Wire Wire Line + 5750 6900 5750 6750 +Wire Wire Line + 5850 6900 5850 6750 +Text GLabel 9050 1950 2 50 Input ~ 0 +RFID_RST +Wire Wire Line + 8900 1950 9050 1950 +Text GLabel 9050 2250 2 50 Input ~ 0 +RFID_SDA +Wire Wire Line + 8900 2250 9050 2250 +Text GLabel 9050 1850 2 50 Input ~ 0 +RFID_MOSI +Wire Wire Line + 8900 1850 9050 1850 +Text GLabel 9050 2450 2 50 Input ~ 0 +RFID_MISO +Wire Wire Line + 9050 2450 8900 2450 +Text GLabel 9050 2550 2 50 Input ~ 0 +RFID_SCK +Wire Wire Line + 8900 2550 9050 2550 +$Comp +L power:GND #PWR0110 +U 1 1 5F85DB8C +P 9050 1750 +F 0 "#PWR0110" H 9050 1500 50 0001 C CNN +F 1 "GND" V 9050 1600 50 0000 R CNN +F 2 "" H 9050 1750 50 0001 C CNN +F 3 "" H 9050 1750 50 0001 C CNN + 1 9050 1750 + 0 -1 -1 0 +$EndComp +Wire Wire Line + 8900 2350 9050 2350 +Wire Wire Line + 9050 1750 8900 1750 +Text GLabel 7050 2550 0 50 Input ~ 0 +MAX98357_DIN +Text GLabel 7050 2750 0 50 Input ~ 0 +MAX98357_BLCK +Text GLabel 7050 2650 0 50 Input ~ 0 +MAX98357_LRC +Wire Wire Line + 7050 2550 7300 2550 +Wire Wire Line + 7050 2650 7300 2650 +Wire Wire Line + 7050 2750 7300 2750 +Text GLabel 9050 3250 2 50 Input ~ 0 +SD-CARD_CS +Text GLabel 7050 2850 0 50 Input ~ 0 +SD-CARD_SCK +Text GLabel 7050 3150 0 50 Input ~ 0 +SD-CARD_MOSI +Text GLabel 9050 2850 2 50 Input ~ 0 +SD-CARD_MISO +Wire Wire Line + 9050 2850 8900 2850 +Wire Wire Line + 9050 3250 8900 3250 +Wire Wire Line + 7300 3150 7050 3150 +Wire Wire Line + 7050 2850 7300 2850 +Text GLabel 7050 2450 0 50 Input ~ 0 +BUTTON_PREVIOUS_PIN +Text GLabel 9050 2950 2 50 Input ~ 0 +BUTTON_NEXT_PIN +Text GLabel 9050 2650 2 50 Input ~ 0 +BUTTON_PLAY_PAUSE_PIN +Wire Wire Line + 8900 2650 9050 2650 +Wire Wire Line + 8900 2950 9050 2950 +Wire Wire Line + 7300 2450 7050 2450 +Text GLabel 7050 2150 0 50 Input ~ 0 +ROTARY_CLR +Text GLabel 7050 2250 0 50 Input ~ 0 +ROTARY_DT +Text GLabel 7050 2350 0 50 Input ~ 0 +ROTARY_BUTTON +Wire Wire Line + 7050 2350 7300 2350 +Wire Wire Line + 7050 2250 7300 2250 +Wire Wire Line + 7050 2150 7300 2150 +Text GLabel 7050 2950 0 50 Input ~ 0 +NEOPIXEL_DI +Wire Wire Line + 7050 2950 7300 2950 +$Comp +L power:VCC #PWR0112 +U 1 1 5F87B792 +P 7000 3550 +F 0 "#PWR0112" H 7000 3400 50 0001 C CNN +F 1 "VCC" H 7015 3723 50 0000 C CNN +F 2 "" H 7000 3550 50 0001 C CNN +F 3 "" H 7000 3550 50 0001 C CNN + 1 7000 3550 + 0 -1 -1 0 +$EndComp +Wire Wire Line + 7300 3550 7000 3550 +Text GLabel 5650 6900 3 50 Input ~ 0 +SWITCHED_VCC +$Comp +L power:VCC #PWR0114 +U 1 1 5F8848E9 +P 8750 4900 +F 0 "#PWR0114" H 8750 4750 50 0001 C CNN +F 1 "VCC" H 8765 5073 50 0000 C CNN +F 2 "" H 8750 4900 50 0001 C CNN +F 3 "" H 8750 4900 50 0001 C CNN + 1 8750 4900 + -1 0 0 1 +$EndComp +$Comp +L power:GND #PWR0115 +U 1 1 5F885DD6 +P 8850 4900 +F 0 "#PWR0115" H 8850 4650 50 0001 C CNN +F 1 "GND" H 8855 4727 50 0000 C CNN +F 2 "" H 8850 4900 50 0001 C CNN +F 3 "" H 8850 4900 50 0001 C CNN + 1 8850 4900 + 1 0 0 -1 +$EndComp +Text Notes 7750 4300 0 197 ~ 0 +Power Supply\n +Wire Wire Line + 2550 6900 2550 6750 +Wire Wire Line + 2350 6900 2350 6750 +$Comp +L power:GND #PWR0105 +U 1 1 5F872A11 +P 9050 2350 +F 0 "#PWR0105" H 9050 2100 50 0001 C CNN +F 1 "GND" V 9055 2222 50 0000 R CNN +F 2 "" H 9050 2350 50 0001 C CNN +F 3 "" H 9050 2350 50 0001 C CNN + 1 9050 2350 + 0 -1 -1 0 +$EndComp +$Comp +L power:GND #PWR0109 +U 1 1 5F8787E6 +P 2750 6900 +F 0 "#PWR0109" H 2750 6650 50 0001 C CNN +F 1 "GND" V 2750 6750 50 0000 R CNN +F 2 "" H 2750 6900 50 0001 C CNN +F 3 "" H 2750 6900 50 0001 C CNN + 1 2750 6900 + 1 0 0 -1 +$EndComp +$Comp +L power:GND #PWR0111 +U 1 1 5F878CF4 +P 7300 3050 +F 0 "#PWR0111" H 7300 2800 50 0001 C CNN +F 1 "GND" V 7300 2900 50 0000 R CNN +F 2 "" H 7300 3050 50 0001 C CNN +F 3 "" H 7300 3050 50 0001 C CNN + 1 7300 3050 + 0 1 1 0 +$EndComp +$Comp +L power:GND #PWR0117 +U 1 1 5F885952 +P 4850 6750 +F 0 "#PWR0117" H 4850 6500 50 0001 C CNN +F 1 "GND" V 4850 6600 50 0000 R CNN +F 2 "" H 4850 6750 50 0001 C CNN +F 3 "" H 4850 6750 50 0001 C CNN + 1 4850 6750 + 1 0 0 -1 +$EndComp +$Comp +L power:GND #PWR0118 +U 1 1 5F8874D1 +P 5850 6900 +F 0 "#PWR0118" H 5850 6650 50 0001 C CNN +F 1 "GND" V 5850 6750 50 0000 R CNN +F 2 "" H 5850 6900 50 0001 C CNN +F 3 "" H 5850 6900 50 0001 C CNN + 1 5850 6900 + 1 0 0 -1 +$EndComp +Text GLabel 4950 6850 3 50 Input ~ 0 +SWITCHED_VCC +$Comp +L Connector:Conn_01x02_Male J5 +U 1 1 5F9085EF +P 1700 4900 +F 0 "J5" V 1762 4944 50 0000 L CNN +F 1 "Next" V 1853 4944 50 0000 L CNN +F 2 "mod_s:PinHeader_1x02_P2.54mm_Vertical" H 1700 4900 50 0001 C CNN +F 3 "" H 1700 4900 50 0001 C CNN + 1 1700 4900 + 0 1 1 0 +$EndComp +$Comp +L Connector:Conn_01x02_Male J6 +U 1 1 5F90EAED +P 2200 4900 +F 0 "J6" V 2262 4944 50 0000 L CNN +F 1 "Prev" V 2353 4944 50 0000 L CNN +F 2 "mod_s:PinHeader_1x02_P2.54mm_Vertical" H 2200 4900 50 0001 C CNN +F 3 "" H 2200 4900 50 0001 C CNN + 1 2200 4900 + 0 1 1 0 +$EndComp +$Comp +L Connector:Conn_01x02_Male J7 +U 1 1 5F90F726 +P 2600 4900 +F 0 "J7" V 2662 4944 50 0000 L CNN +F 1 "Pause" V 2753 4944 50 0000 L CNN +F 2 "mod_s:PinHeader_1x02_P2.54mm_Vertical" H 2600 4900 50 0001 C CNN +F 3 "" H 2600 4900 50 0001 C CNN + 1 2600 4900 + 0 1 1 0 +$EndComp +$Comp +L Connector:Conn_01x08_Male J2 +U 1 1 5F92011C +P 4750 5050 +F 0 "J2" V 4585 4978 50 0000 C CNN +F 1 "RFID-RC522" V 4676 4978 50 0000 C CNN +F 2 "mod_s:PinHeader_1x08_P2.54mm_Vertical" H 4750 5050 50 0001 C CNN +F 3 "" H 4750 5050 50 0001 C CNN + 1 4750 5050 + 0 1 1 0 +$EndComp +$Comp +L Connector:Conn_01x03_Male J8 +U 1 1 5F936A23 +P 5750 6550 +F 0 "J8" V 5812 6694 50 0000 L CNN +F 1 "WS2812" V 5903 6694 50 0000 L CNN +F 2 "mod_s:PinHeader_1x03_P2.54mm_Vertical" H 5750 6550 50 0001 C CNN +F 3 "" H 5750 6550 50 0001 C CNN + 1 5750 6550 + 0 1 1 0 +$EndComp +$Comp +L Connector:Conn_01x02_Male J9 +U 1 1 5F945F11 +P 8850 4700 +F 0 "J9" V 8912 4744 50 0000 L CNN +F 1 "Power" V 9003 4744 50 0000 L CNN +F 2 "mod_s:PinHeader_1x02_P2.54mm_Vertical" H 8850 4700 50 0001 C CNN +F 3 "" H 8850 4700 50 0001 C CNN + 1 8850 4700 + 0 1 1 0 +$EndComp +Wire Wire Line + 1600 2850 1850 2850 +Text GLabel 1600 2850 0 50 Input ~ 0 +GPIO-17 +Wire Wire Line + 2300 2400 2300 2550 +$Comp +L power:GND #PWR0102 +U 1 1 5F7B65C3 +P 2300 2400 +F 0 "#PWR0102" H 2300 2150 50 0001 C CNN +F 1 "GND" H 2305 2227 50 0000 C CNN +F 2 "" H 2300 2400 50 0001 C CNN +F 3 "" H 2300 2400 50 0001 C CNN + 1 2300 2400 + -1 0 0 1 +$EndComp +Connection ~ 2300 2850 +Wire Wire Line + 2300 2850 2150 2850 +Wire Wire Line + 2450 2850 2300 2850 +$Comp +L Device:R R5 +U 1 1 5F7995ED +P 2000 2850 +F 0 "R5" H 2070 2896 50 0000 L CNN +F 1 "4,7k" H 2070 2805 50 0000 L CNN +F 2 "adafruit:0207_9" V 1930 2850 50 0001 C CNN +F 3 "" H 2000 2850 50 0001 C CNN + 1 2000 2850 + 0 1 1 0 +$EndComp +$Comp +L Device:R R4 +U 1 1 5F798E7D +P 2300 2700 +F 0 "R4" H 2370 2746 50 0000 L CNN +F 1 "10k" H 2370 2655 50 0000 L CNN +F 2 "adafruit:0207_9" V 2230 2700 50 0001 C CNN +F 3 "" H 2300 2700 50 0001 C CNN + 1 2300 2700 + -1 0 0 1 +$EndComp +$Comp +L Transistor_BJT:BC337 Q1 +U 1 1 5F78DA7C +P 2650 2850 +F 0 "Q1" H 2841 2896 50 0000 L CNN +F 1 "BC337" H 2841 2805 50 0000 L CNN +F 2 "Package_TO_SOT_THT:TO-92_Inline_Wide" H 2850 2775 50 0001 L CIN +F 3 "" H 2650 2850 50 0001 L CNN + 1 2650 2850 + 1 0 0 -1 +$EndComp +$Comp +L power:GND #PWR0101 +U 1 1 5F7B5A15 +P 2750 3300 +F 0 "#PWR0101" H 2750 3050 50 0001 C CNN +F 1 "GND" H 2755 3127 50 0000 C CNN +F 2 "" H 2750 3300 50 0001 C CNN +F 3 "" H 2750 3300 50 0001 C CNN + 1 2750 3300 + 1 0 0 -1 +$EndComp +Wire Wire Line + 2750 3050 2750 3300 +$Comp +L Transistor_FET:IRF9540N Q2 +U 1 1 5F78F572 +P 2750 2100 +F 0 "Q2" H 2954 2146 50 0000 L CNN +F 1 "IRF9540N" H 2954 2055 50 0000 L CNN +F 2 "Package_TO_SOT_THT:TO-220-3_Vertical" H 2950 2025 50 0001 L CIN +F 3 "" H 2750 2100 50 0001 L CNN + 1 2750 2100 + 0 -1 -1 0 +$EndComp +$Comp +L Device:R R1 +U 1 1 5F79873B +P 3050 2150 +F 0 "R1" H 3120 2196 50 0000 L CNN +F 1 "10k" H 3120 2105 50 0000 L CNN +F 2 "adafruit:0207_9" V 2980 2150 50 0001 C CNN +F 3 "" H 3050 2150 50 0001 C CNN + 1 3050 2150 + 1 0 0 -1 +$EndComp +Wire Wire Line + 3050 2000 2950 2000 +Wire Wire Line + 2750 2300 3050 2300 +Wire Wire Line + 3300 2000 3050 2000 +$Comp +L power:VCC #PWR0113 +U 1 1 5F87F1D8 +P 3300 2000 +F 0 "#PWR0113" H 3300 1850 50 0001 C CNN +F 1 "VCC" V 3315 2127 50 0000 L CNN +F 2 "" H 3300 2000 50 0001 C CNN +F 3 "" H 3300 2000 50 0001 C CNN + 1 3300 2000 + 0 1 1 0 +$EndComp +Text GLabel 2350 2000 0 50 Input ~ 0 +SWITCHED_VCC +Wire Wire Line + 2350 2000 2550 2000 +Connection ~ 3050 2000 +Wire Wire Line + 2750 2300 2750 2650 +Connection ~ 2750 2300 +$EndSCHEMATC diff --git a/PCBs/ESP32_Breakout_Carrier/_autosave-Tonuino-ESP32_2.pro b/PCBs/ESP32_Breakout_Carrier/_autosave-Tonuino-ESP32_2.pro new file mode 100644 index 0000000..152769c --- /dev/null +++ b/PCBs/ESP32_Breakout_Carrier/_autosave-Tonuino-ESP32_2.pro @@ -0,0 +1,33 @@ +update=22/05/2015 07:44:53 +version=1 +last_client=kicad +[general] +version=1 +RootSch= +BoardNm= +[pcbnew] +version=1 +LastNetListRead= +UseCmpFile=1 +PadDrill=0.600000000000 +PadDrillOvalY=0.600000000000 +PadSizeH=1.500000000000 +PadSizeV=1.500000000000 +PcbTextSizeV=1.500000000000 +PcbTextSizeH=1.500000000000 +PcbTextThickness=0.300000000000 +ModuleTextSizeV=1.000000000000 +ModuleTextSizeH=1.000000000000 +ModuleTextSizeThickness=0.150000000000 +SolderMaskClearance=0.000000000000 +SolderMaskMinWidth=0.000000000000 +DrawSegmentWidth=0.200000000000 +BoardOutlineThickness=0.100000000000 +ModuleOutlineThickness=0.150000000000 +[cvpcb] +version=1 +NetIExt=net +[eeschema] +version=1 +LibDir= +[eeschema/libraries] diff --git a/PCBs/ESP32_Breakout_Carrier/assembled.jpeg b/PCBs/ESP32_Breakout_Carrier/assembled.jpeg new file mode 100644 index 0000000..258cea5 Binary files /dev/null and b/PCBs/ESP32_Breakout_Carrier/assembled.jpeg differ diff --git a/PCBs/ESP32_Breakout_Carrier/fp-info-cache b/PCBs/ESP32_Breakout_Carrier/fp-info-cache new file mode 100644 index 0000000..573541a --- /dev/null +++ b/PCBs/ESP32_Breakout_Carrier/fp-info-cache @@ -0,0 +1 @@ +0 diff --git a/PCBs/Headphone with PCM5102a and TMD1308/Kicad.zip b/PCBs/Headphone with PCM5102a and TDA1308/KiCad/Kicad-Files.zip similarity index 100% rename from PCBs/Headphone with PCM5102a and TMD1308/Kicad.zip rename to PCBs/Headphone with PCM5102a and TDA1308/KiCad/Kicad-Files.zip diff --git a/PCBs/Headphone with PCM5102a and TMD1308/3D-model_downside.jpeg b/PCBs/Headphone with PCM5102a and TDA1308/Pictures/3D-model_downside.jpeg similarity index 100% rename from PCBs/Headphone with PCM5102a and TMD1308/3D-model_downside.jpeg rename to PCBs/Headphone with PCM5102a and TDA1308/Pictures/3D-model_downside.jpeg diff --git a/PCBs/Headphone with PCM5102a and TMD1308/3D-model_upside.jpeg b/PCBs/Headphone with PCM5102a and TDA1308/Pictures/3D-model_upside.jpeg similarity index 100% rename from PCBs/Headphone with PCM5102a and TMD1308/3D-model_upside.jpeg rename to PCBs/Headphone with PCM5102a and TDA1308/Pictures/3D-model_upside.jpeg diff --git a/PCBs/Headphone with PCM5102a and TMD1308/Headphone-pcb.pdf b/PCBs/Headphone with PCM5102a and TDA1308/Pictures/Headphone-pcb.pdf similarity index 100% rename from PCBs/Headphone with PCM5102a and TMD1308/Headphone-pcb.pdf rename to PCBs/Headphone with PCM5102a and TDA1308/Pictures/Headphone-pcb.pdf diff --git a/PCBs/Headphone with PCM5102a and TMD1308/Headphone-pcb_downside.jpg b/PCBs/Headphone with PCM5102a and TDA1308/Pictures/Headphone-pcb_downside.jpg similarity index 100% rename from PCBs/Headphone with PCM5102a and TMD1308/Headphone-pcb_downside.jpg rename to PCBs/Headphone with PCM5102a and TDA1308/Pictures/Headphone-pcb_downside.jpg diff --git a/PCBs/Headphone with PCM5102a and TMD1308/Headphone-pcb_upside.jpg b/PCBs/Headphone with PCM5102a and TDA1308/Pictures/Headphone-pcb_upside.jpg similarity index 100% rename from PCBs/Headphone with PCM5102a and TMD1308/Headphone-pcb_upside.jpg rename to PCBs/Headphone with PCM5102a and TDA1308/Pictures/Headphone-pcb_upside.jpg diff --git a/PCBs/Headphone with PCM5102a and TMD1308/README.md b/PCBs/Headphone with PCM5102a and TDA1308/README.md similarity index 60% rename from PCBs/Headphone with PCM5102a and TMD1308/README.md rename to PCBs/Headphone with PCM5102a and TDA1308/README.md index 0206dfc..e86ed20 100644 --- a/PCBs/Headphone with PCM5102a and TMD1308/README.md +++ b/PCBs/Headphone with PCM5102a and TDA1308/README.md @@ -1,6 +1,6 @@ # Headphone-PCB This is a pcb, that was kindly provided by a user of my Tonuino-fork. It makes use of a DAC named 'PCM5102A' with a TDA1308 as amp. PCM5102A supports I2S, so it can connected in parallel to MAX98357a to the I2S-pins BCLK, LRC and DIN. Of course, it needs 3.3V and GND, too. Please note that SMD-technique is used.
-The 6th pin of connector J1 is used to indicate whether there's a plug or not. That means if there is a plug, this pin is pulled to GND and therefore can be used to connect to MAX98357.SD. Doing so will mute MAX's amp and vice versa. Off course you need a special [headphone jack](https://www.conrad.de/de/p/cliff-fcr1295-klinken-steckverbinder-3-5-mm-buchse-einbau-horizontal-polzahl-3-stereo-schwarz-1-st-705830.html) to use this feature. Additionaly this 6th pin can be connected to the ESP32 in order to make use of the feature `HEADPHONE_ADJUST_ENABLE`. Doing so can optionally limit the headphone's maximum volume (configureable via GUI).
+The 6th pin of connector J1 is used to indicate whether there's a plug or not. That means if there is a plug, this pin is pulled to GND and therefore can be used to connect to MAX98357.SD. Doing so will mute MAX's amp and vice versa. Of course you need a special [headphone jack](https://www.conrad.de/de/p/cliff-fcr1295-klinken-steckverbinder-3-5-mm-buchse-einbau-horizontal-polzahl-3-stereo-schwarz-1-st-705830.html) to use this feature. Additionaly this 6th pin can be connected to the ESP32 in order to make use of the feature `HEADPHONE_ADJUST_ENABLE`. Doing so can optionally limit the headphone's maximum volume (configureable via GUI).
## Disclaimer PCB-circuit is provided 'as is' without warranty. As previously stated it was kindly provided by a user and I only can give limited support to it. However: it runs fine without any problems in my Tonuinos. \ No newline at end of file diff --git a/PCBs/Headphone with PCM5102a and TDA1308/gerber/gerber.zip b/PCBs/Headphone with PCM5102a and TDA1308/gerber/gerber.zip new file mode 100644 index 0000000..9a47d30 Binary files /dev/null and b/PCBs/Headphone with PCM5102a and TDA1308/gerber/gerber.zip differ diff --git a/PCBs/Wemos Lolin D32/Gerber/gerber.zip b/PCBs/Wemos Lolin D32/Gerber/gerber.zip new file mode 100644 index 0000000..240f804 Binary files /dev/null and b/PCBs/Wemos Lolin D32/Gerber/gerber.zip differ diff --git a/PCBs/Wemos Lolin D32/KiCad/KICad-Files.zip b/PCBs/Wemos Lolin D32/KiCad/KICad-Files.zip new file mode 100644 index 0000000..32ffeb0 Binary files /dev/null and b/PCBs/Wemos Lolin D32/KiCad/KICad-Files.zip differ diff --git a/PCBs/Wemos Lolin D32/Pictures/Schematics_D32.pdf b/PCBs/Wemos Lolin D32/Pictures/Schematics_D32.pdf new file mode 100644 index 0000000..5309858 Binary files /dev/null and b/PCBs/Wemos Lolin D32/Pictures/Schematics_D32.pdf differ diff --git a/PCBs/Wemos Lolin D32/Pictures/Tonuino D32_downside.jpg b/PCBs/Wemos Lolin D32/Pictures/Tonuino D32_downside.jpg new file mode 100644 index 0000000..4fe4279 Binary files /dev/null and b/PCBs/Wemos Lolin D32/Pictures/Tonuino D32_downside.jpg differ diff --git a/PCBs/Wemos Lolin D32/Pictures/Tonuino D32_upside.jpg b/PCBs/Wemos Lolin D32/Pictures/Tonuino D32_upside.jpg new file mode 100644 index 0000000..2c77ae6 Binary files /dev/null and b/PCBs/Wemos Lolin D32/Pictures/Tonuino D32_upside.jpg differ diff --git a/PCBs/Wemos Lolin D32/README.md b/PCBs/Wemos Lolin D32/README.md new file mode 100644 index 0000000..2587c28 --- /dev/null +++ b/PCBs/Wemos Lolin D32/README.md @@ -0,0 +1,63 @@ +# Tonuino-PCB based on Wemos' Lolin D32 + +## Attention +* In rev1 I made a mistake that leads to a short circuit. Hopefully nobody ordered it :-( Current revision is 1.1 +* This PCB is not yet tested! + +## Features +* Fits Wemos Lolin D32 (not Lolin32, Lolin D32 pro or Lolin 32 lite!) +* Outer diameter: 53 x 81mm +* JST-PH 2.0-connectors for buttons, rotary encoder, Neopixel, RFID and reset (not 2.54mm pitch!) +* 2.54mm-connectors for MAX98357a and uSD-card-reader +* Mosfet-circuit that switches off MAX98357a, Neopixel, headphone-pcb and uSD-card-reader automatically when deepsleep is active +* All peripherals are solely driven at 3.3V! Keep this especially in mind when choosing uSD-reader. If in doubts use one without voltage-regulator (link below). +* If [headphone-pcb](https://github.com/biologist79/Tonuino-ESP32-I2S/tree/master/PCBs/Headphone%20with%20PCM5102a%20and%20TDA1308) is used, MAX98357a is automatically muted when there's a headphone plugged in and vice versa. +* If `HEADPHONE_ADJUST_ENABLE` is set and a headphone is plugged in, an alternative maximum volume is activated. I added this feature because [headphone-pcb](https://github.com/biologist79/Tonuino-ESP32-I2S/tree/master/PCBs/Headphone%20with%20PCM5102a%20and%20TDA1308) makes use of an amp that (probably) "allows" children to damage ears. This maximum volume can be set and re-adjusted via webgui. +* Reset-button + +## Prerequisites +* If no [headphone-pcb](https://github.com/biologist79/Tonuino-ESP32-I2S/tree/master/PCBs/Headphone%20with%20PCM5102a%20and%20TDA1308) is connected, make sure `HEADPHONE_ADJUST_ENABLE` is not active. +* Make sure to change values of voltage divider's restors. They can be configured in `settings.h` as `rdiv1` and `rdiv2` and need to be set to 100k/100k. +* Change `VOLTAGE_READ_PIN` to 35. + +## Things to mention +* Better don't solder Lolin D32 directly to the PCB. I recommend to make use of female connectors instead (link below). +* When ordering a LiPo-battery, make sure to use [one](https://www.eremit.de/p/eremit-3-7v-2500mah-lipo-104050-jst-ph-2-0mm) with deep discharge protection! This is really really really important!!! +* Doesn't (currently) support SD-MMC and RFID-reader PN5180 + +## Hardware-setup +The heart of my project is an ESP32 on a [Wemos Lolin D32 development-board](https://de.aliexpress.com/item/32808551116.html). Make sure to install the drivers for the USB/Serial-chip (CP2102 e.g.). +* [MAX98357A (like Adafruit's)](https://de.aliexpress.com/item/32999952454.html) +* [uSD-card-reader 3.3V only](https://www.ebay.de/itm/Micro-SPI-Kartenleser-Card-Reader-2GB-SD-8GB-SDHC-Card-3-3V-ESP8266-Arduino-NEU/333796577968) +* [RFID-reader](https://www.amazon.de/AZDelivery-Reader-Arduino-Raspberry-gratis/dp/B074S8MRQ7) +* [RFID-tags](https://www.amazon.de/AZDelivery-Keycard-56MHz-Schlüsselkarte-Karte/dp/B07TVJPTM7) +* [Neopixel-ring](https://de.aliexpress.com/item/32673883645.html) +* [Rotary Encoder](https://de.aliexpress.com/item/33041814942.html) +* [Buttons](https://de.aliexpress.com/item/32896285438.html) +* [Speaker](https://www.visaton.de/de/produkte/chassiszubehoer/breitband-systeme/fr-7-4-ohm) +* uSD-card: doesn't have to be a super-fast one; uC is limiting the throughput. Tested 32GB without any problems. +* [JSP PH-2.0-connectors](https://de.aliexpress.com/item/32968344273.html) +* [Female connector](https://de.aliexpress.com/item/32724478308.html) +* [(optional) IDC-connector female 6pin for headphone-pcb](https://de.aliexpress.com/item/33029492417.html) +* [(optional) IDC-connector male 6pin for headphone-pcb](https://de.aliexpress.com/item/1005001400147026.html) +* [LiPo-battery (2500 mAh) with connector JST PH 2.0mm](https://www.eremit.de/p/eremit-3-7v-2500mah-lipo-104050-jst-ph-2-0mm) + +## Parts +* 1x IRF530NPbF (N-channel MOSFET) +* 1x NDP6020P (P-channel MOSFET) +* 1x 1k resistor +* 1x 10k resistor +* 2x 100k resistor +* 4x JST-PH2.0-connector (2 Pins) +* 3x JST-PH2.0-connector (3 Pins) +* 1x JST-PH2.0-connector (5 Pins) +* Female connector as socket for Lolin32, uSD-reader and MAX98357a +* (optional for headphone-PCB) 1x IDC-connecor female (6pin) +* (optional for headphone-PCB) 1x IDC-connecor male (6pin) + +## Where to order? +* I ordered my PCBs at [jlcpcb](https://jlcpcb.com/). You have to order at least 5 pcs, which is only at 2$ + shipping. It took two weeks to arrive. If you want to have a look at the PCBs first (without having KiCad installed), visit [Gerberlook](https://www.gerblook.org/) and upload `gerber.zip` from the Gerberfiles-folder. +* Enter 31 x 31mm as dimensions in JLCPCB's order-form. + +## Do I need to install KiCad? +Unless you don't want to change anything: no! All you need to provide are the gerberfiles (`gerber.zip`) to your manufactur (e.g. [jlcpcb](https://jlcpcb.com/)). However, all Kicad-files used are provided as well. diff --git a/PCBs/Wemos Lolin32/Gerber/gerber.zip b/PCBs/Wemos Lolin32/Gerber/gerber.zip new file mode 100644 index 0000000..b4b3697 Binary files /dev/null and b/PCBs/Wemos Lolin32/Gerber/gerber.zip differ diff --git a/PCBs/Wemos Lolin32/KiCad/Kicad-files.zip b/PCBs/Wemos Lolin32/KiCad/Kicad-files.zip new file mode 100644 index 0000000..97f9f08 Binary files /dev/null and b/PCBs/Wemos Lolin32/KiCad/Kicad-files.zip differ diff --git a/PCBs/Wemos Lolin32/Pictures/Soldered with peripherals1_rev1.jpg b/PCBs/Wemos Lolin32/Pictures/Soldered with peripherals1_rev1.jpg new file mode 100644 index 0000000..f433afe Binary files /dev/null and b/PCBs/Wemos Lolin32/Pictures/Soldered with peripherals1_rev1.jpg differ diff --git a/PCBs/Wemos Lolin32/Pictures/Soldered with peripherals2_rev1.jpg b/PCBs/Wemos Lolin32/Pictures/Soldered with peripherals2_rev1.jpg new file mode 100644 index 0000000..b994fa7 Binary files /dev/null and b/PCBs/Wemos Lolin32/Pictures/Soldered with peripherals2_rev1.jpg differ diff --git a/PCBs/Wemos Lolin32/Pictures/Soldered1_rev1.jpg b/PCBs/Wemos Lolin32/Pictures/Soldered1_rev1.jpg new file mode 100644 index 0000000..1d42b42 Binary files /dev/null and b/PCBs/Wemos Lolin32/Pictures/Soldered1_rev1.jpg differ diff --git a/PCBs/Wemos Lolin32/Pictures/Soldered2_rev1.jpg b/PCBs/Wemos Lolin32/Pictures/Soldered2_rev1.jpg new file mode 100644 index 0000000..31f0fc7 Binary files /dev/null and b/PCBs/Wemos Lolin32/Pictures/Soldered2_rev1.jpg differ diff --git a/PCBs/Wemos Lolin32/Pictures/Tonuino V2-Schematics.pdf b/PCBs/Wemos Lolin32/Pictures/Tonuino V2-Schematics.pdf new file mode 100644 index 0000000..d4dc8c6 Binary files /dev/null and b/PCBs/Wemos Lolin32/Pictures/Tonuino V2-Schematics.pdf differ diff --git a/PCBs/Wemos Lolin32/Pictures/Tonuino V2_down.jpg b/PCBs/Wemos Lolin32/Pictures/Tonuino V2_down.jpg new file mode 100644 index 0000000..1e30a0c Binary files /dev/null and b/PCBs/Wemos Lolin32/Pictures/Tonuino V2_down.jpg differ diff --git a/PCBs/Wemos Lolin32/Pictures/Tonuino V2_up.jpg b/PCBs/Wemos Lolin32/Pictures/Tonuino V2_up.jpg new file mode 100644 index 0000000..0f254c0 Binary files /dev/null and b/PCBs/Wemos Lolin32/Pictures/Tonuino V2_up.jpg differ diff --git a/PCBs/Wemos Lolin32/README.md b/PCBs/Wemos Lolin32/README.md new file mode 100644 index 0000000..79e56e4 --- /dev/null +++ b/PCBs/Wemos Lolin32/README.md @@ -0,0 +1,66 @@ +# Tonuino-PCB based on Wemos' Lolin32 + +## Introduction +After I've been asked many times to provide a PCB, I finally did so :-) It makes use of Wemos' Lolin32 which is the predecessor of Lolin D32. D32's advantage over Lolin32 is especially, that a voltage-divider for measuring battery's voltage is already integrated (fixed-wired to GPIO 35). However, as I wasn't aware of that when buying Lolin32 and because of now, that multiple Lolin32 are here on my desk, my reasonable intention was to use them. So things would have been a bit easier with D32 but in the end it works the same way with Lolin32. As per rev2 of the PCB, I added a 10 uF-capacitor to smoothen the battery-measurement. Ii's optional but be advised values measured are a bit more volatile without capacitor-stabilization. + +## Features +* Fits Wemos Lolin32 (not Lolin D32, Lolin D32 pro or Lolin 32 lite!) +* Outer diameter: 56 x 93mm +* JST-PH 2.0-connectors for buttons, rotary encoder, Neopixel, RFID, reset and battery (not 2.54mm pitch!) +* 2.54mm-connectors for MAX98357a and uSD-card-reader +* Mosfet-circuit that switches off MAX98357a, Neopixel, headphone-pcb and uSD-card-reader automatically when deepsleep is active +* All peripherals are solely driven at 3.3V! Keep this especially in mind when choosing uSD-reader. If in doubts use one without voltage-regulator (link below). +* If [headphone-pcb](https://github.com/biologist79/Tonuino-ESP32-I2S/tree/master/PCBs/Headphone%20with%20PCM5102a%20and%20TDA1308) is used, MAX98357a is automatically muted when there's a headphone plugged in and vice versa. +* If `HEADPHONE_ADJUST_ENABLE` is enabled and a headphone is plugged in, an alternative maximum volume is activated. I added this feature because [headphone-pcb](https://github.com/biologist79/Tonuino-ESP32-I2S/tree/master/PCBs/Headphone%20with%20PCM5102a%20and%20TDA1308) makes use of an amp that (probably) "allows" children to damage ears. This maximum volume can be set and re-adjusted via webgui. +* rev2: Reset-pinheader added. Can be used to connect e.g. a [micro switch](https://www.ebay.de/itm/10x-Mini-Taster-Drucktaster-klein-Mikroschalter-6x6x5mm-Arduino-Raspberry-Pi/333273061003) to it, so you can reset Tonuino even in battery-mode from the outside of the enclosure. Micro switch can be placed somewhat hidden at the enclosure. + +## Prerequisites +* If no [headphone-pcb](https://github.com/biologist79/Tonuino-ESP32-I2S/tree/master/PCBs/Headphone%20with%20PCM5102a%20and%20TDA1308) is connected, make sure `HEADPHONE_ADJUST_ENABLE` is not active. +* I used 390/130 kOhms-resistors as voltage-divider. However, make sure to use a multimeter to determine their exact values in order to achieve a better battery-measurement. They can be configured in `settings.h` as `rdiv1` and `rdiv2`. Hint: for Lolin D32's battery-measurement 100k+100k were used. However, I decided to change the ratio from 50/50% to 25/75% to have a "better" signal. 100/100 might be work as well; didn't test it. + +## Things to mention +* RFID: In order to avoid buying a 6pin-JST-PH-connector I used 2x3pin instead. This is because I already had ten of them (see link below). +* In contrast to Lolin D32, Lolin32 doesn't feature an integrated voltage-divider. That's why on the lower left there's a JST-PH2.0-connector to connect the LiPo-battery. Make sure to connect (+) to the left und GND to the right. From there you need to solder two short wires (5cm or so) onto the pcb with a JST-PH2.0-connector attached on the other side. This one needs to be plugged into Lolin32 (see pictures-folder). Please note: Lolin's JST-PH2.0-connector needs (+) left side and GND right side. Don't be confused if black/red-colouring of the JST-wires used seems "weird" because is reversed (black => (+); red => GND). +* Better don't solder Lolin32 directly to the PCB. I recommend to make use of female connectors instead (link below). +* When ordering a LiPo-battery, make sure to use [one](https://www.eremit.de/p/eremit-3-7v-2500mah-lipo-104050-jst-ph-2-0mm) with deep discharge protection! This is really really really important!!! +* Doesn't (currently) support SD-MMC and RFID-reader PN5180 + +## Hardware-setup +The heart of my project is an ESP32 on a [Wemos Lolin32 development-board](https://www.ebay.de/itm/4MB-Flash-WEMOS-Lolin32-V1-0-0-WIFI-Bluetooth-Card-Based-ESP-32-ESP-WROOM-32/162716855489). Make sure to install the drivers for the USB/Serial-chip (CP2102 e.g.). +* [MAX98357A (like Adafruit's)](https://de.aliexpress.com/item/32999952454.html) +* [uSD-card-reader 3.3V only](https://www.ebay.de/itm/Micro-SPI-Kartenleser-Card-Reader-2GB-SD-8GB-SDHC-Card-3-3V-ESP8266-Arduino-NEU/333796577968) +* [RFID-reader](https://www.amazon.de/AZDelivery-Reader-Arduino-Raspberry-gratis/dp/B074S8MRQ7) +* [RFID-tags](https://www.amazon.de/AZDelivery-Keycard-56MHz-Schlüsselkarte-Karte/dp/B07TVJPTM7) +* [Neopixel-ring](https://de.aliexpress.com/item/32673883645.html) +* [Rotary Encoder](https://de.aliexpress.com/item/33041814942.html) +* [Buttons](https://de.aliexpress.com/item/32896285438.html) +* [Speaker](https://www.visaton.de/de/produkte/chassiszubehoer/breitband-systeme/fr-7-4-ohm) +* uSD-card: doesn't have to be a super-fast one; uC is limiting the throughput. Tested 32GB without any problems. +* [JSP PH-2.0-connectors](https://de.aliexpress.com/item/32968344273.html) +* [Female connector](https://de.aliexpress.com/item/32724478308.html) +* [(optional) IDC-connector female 6pin for headphone-pcb](https://de.aliexpress.com/item/33029492417.html) +* [(optional) IDC-connector male 6pin for headphone-pcb](https://de.aliexpress.com/item/1005001400147026.html) +* [(optional) Mikro switch](https://www.ebay.de/itm/10x-Mini-Taster-Drucktaster-klein-Mikroschalter-6x6x5mm-Arduino-Raspberry-Pi/333273061003) +* [LiPo-battery (2500 mAh) with connector JST PH 2.0mm](https://www.eremit.de/p/eremit-3-7v-2500mah-lipo-104050-jst-ph-2-0mm) + +## Parts +* 1x IRF530NPbF (N-channel MOSFET) +* 1x NDP6020P (P-channel MOSFET) +* 1x 1k resistor +* 1x 10k resistor +* 2x 100k resistor +* 1x 130k resistor (can be replaced by 100k) +* 1x 390k resistor (can be replaced by 100k) +* 5x JST-PH2.0-connector (2 Pins) +* 3x JST-PH2.0-connector (3 Pins) +* 1x JST-PH2.0-connector (5 Pins) +* Female connector as socket for Lolin32, uSD-reader and MAX98357a +* (optional for headphone-PCB) 1x IDC-connecor female (6pin) +* (optional for headphone-PCB) 1x IDC-connecor male (6pin) +* rev2: (optional) 1x 10 uF capacitor (2.0mm-pitch) + +## Where to order? +I ordered my PCBs at [jlcpcb](https://jlcpcb.com/). You have to order at least 5 pcs, which is only at 2$ + shipping. It took two weeks to arrive. If you want to have a look at the PCBs first (without having KiCad installed), visit [Gerberlook](https://www.gerblook.org/) and upload `gerber.zip` from the Gerberfiles-folder. + +## Do I need to install KiCad? +Unless you don't want to change anything: no! All you need to provide are the gerberfiles (`gerber.zip`) to your manufactur (e.g. [jlcpcb](https://jlcpcb.com/)). However, all Kicad-files used are provided as well. \ No newline at end of file diff --git a/PCBs/Wemos Lolin32/_Archiv/rev1/Gerber/gerber.zip b/PCBs/Wemos Lolin32/_Archiv/rev1/Gerber/gerber.zip new file mode 100644 index 0000000..66b7de8 Binary files /dev/null and b/PCBs/Wemos Lolin32/_Archiv/rev1/Gerber/gerber.zip differ diff --git a/PCBs/Wemos Lolin32/_Archiv/rev1/KiCad/Kicad-files.zip b/PCBs/Wemos Lolin32/_Archiv/rev1/KiCad/Kicad-files.zip new file mode 100644 index 0000000..9bec5f1 Binary files /dev/null and b/PCBs/Wemos Lolin32/_Archiv/rev1/KiCad/Kicad-files.zip differ diff --git a/PCBs/Wemos Lolin32/_Archiv/rev1/Pictures/3d-Model downside.jpg b/PCBs/Wemos Lolin32/_Archiv/rev1/Pictures/3d-Model downside.jpg new file mode 100644 index 0000000..7181ccd Binary files /dev/null and b/PCBs/Wemos Lolin32/_Archiv/rev1/Pictures/3d-Model downside.jpg differ diff --git a/PCBs/Wemos Lolin32/_Archiv/rev1/Pictures/3d-Model upside.jpg b/PCBs/Wemos Lolin32/_Archiv/rev1/Pictures/3d-Model upside.jpg new file mode 100644 index 0000000..bce0208 Binary files /dev/null and b/PCBs/Wemos Lolin32/_Archiv/rev1/Pictures/3d-Model upside.jpg differ diff --git a/PCBs/Wemos Lolin32/_Archiv/rev1/Pictures/Soldered with peripherals1.jpg b/PCBs/Wemos Lolin32/_Archiv/rev1/Pictures/Soldered with peripherals1.jpg new file mode 100644 index 0000000..f433afe Binary files /dev/null and b/PCBs/Wemos Lolin32/_Archiv/rev1/Pictures/Soldered with peripherals1.jpg differ diff --git a/PCBs/Wemos Lolin32/_Archiv/rev1/Pictures/Soldered with peripherals2.jpg b/PCBs/Wemos Lolin32/_Archiv/rev1/Pictures/Soldered with peripherals2.jpg new file mode 100644 index 0000000..b994fa7 Binary files /dev/null and b/PCBs/Wemos Lolin32/_Archiv/rev1/Pictures/Soldered with peripherals2.jpg differ diff --git a/PCBs/Wemos Lolin32/_Archiv/rev1/Pictures/Soldered1.jpg b/PCBs/Wemos Lolin32/_Archiv/rev1/Pictures/Soldered1.jpg new file mode 100644 index 0000000..1d42b42 Binary files /dev/null and b/PCBs/Wemos Lolin32/_Archiv/rev1/Pictures/Soldered1.jpg differ diff --git a/PCBs/Wemos Lolin32/_Archiv/rev1/Pictures/Soldered2.jpg b/PCBs/Wemos Lolin32/_Archiv/rev1/Pictures/Soldered2.jpg new file mode 100644 index 0000000..31f0fc7 Binary files /dev/null and b/PCBs/Wemos Lolin32/_Archiv/rev1/Pictures/Soldered2.jpg differ diff --git a/PCBs/Wemos Lolin32/_Archiv/rev1/Pictures/Tonuino-Lolin32-Schematics.pdf b/PCBs/Wemos Lolin32/_Archiv/rev1/Pictures/Tonuino-Lolin32-Schematics.pdf new file mode 100644 index 0000000..5c1001d Binary files /dev/null and b/PCBs/Wemos Lolin32/_Archiv/rev1/Pictures/Tonuino-Lolin32-Schematics.pdf differ diff --git a/README.md b/README.md index df72725..ff6becb 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,33 @@ # Tonuino based on ESP32 with I2S-DAC-support ## NEWS -Currently I'm working on a new Tonuino that is completely based on 3.3V and makes use of an (optional) [headphone-pcb](https://github.com/biologist79/Tonuino-ESP32-I2S/tree/master/PCBs/Headphone%20with%20PCM5102a%20and%20TMD1308). As uC-develboard a Lolin32 is used and it's (optionally) battery-powered. So stay tuned... - +Finally, the long announced Tonuino-PCB for Wemos' Lolin32 is [there](https://github.com/biologist79/Tonuino-ESP32-I2S/tree/master/PCBs/Wemos%20Lolin32). It can (optionally) be used alongside with a [headphone-pcb](https://github.com/biologist79/Tonuino-ESP32-I2S/tree/master/PCBs/Headphone%20with%20PCM5102a%20and%20TDA1308). As uC-develboard a Lolin32 is used and it's (optionally) battery-powered. Peripherals (Neopixel, RFID, headphone-pcb and MAX98357a) are driven at 3.3V solely. + +## History +[...] +* 11.07.2020: Added support for reversed Neopixel addressing. +* 09.10.2020: mqttUser / mqttPassword can now be configured via webgui. +* 16.10.2020: Added English as supported lanuage. +* 01.11.2020: Added directive `SD_NOT_MANDATORY_ENABLE`: for debugging puposes SD can be bypassed at boot. +* 17.11.2020: Introduced a distinct volume for headphone for optional headphone-PCB. +* 20.11.2020: Added directive `MEASURE_BATTERY_VOLTAGE`: monitoring battery's voltage is now supported. +* 25.11.2020: WiFi can now be enabled/disabled instantly by pressing two buttons. +* 28.11.2020: Battery's voltage can now be visualized by Neopixel by short-press of rotary encoder's burtton. +* 28.11.2020: Added directive `PLAY_LAST_RFID_AFTER_REBOOT`: Tonuino will recall the last RFID played after reboot. +* 05.12.2020: Added filebrowser to webgui (thanks @mariolukas for contribution!) +* 05.12.2020: Moved all user-relevant settings to src/settings.h +* 06.12.2020: Added PCB for Wemos Lolin32 +* 08.12.2020: Reworked MQTT-timeout-Management +* 09.12.2020: mDNS-feature added. If tonuino's name is "tonuino", you can use `tonuino.local` instead it's of IP-address. +* 11.12.2020: Revised GUI-design (thanks @mariolukas for contribution!) + (untested) PCB added for Wemos Lolin D32 + gerberfiles for headphone-PCB +* 18.12.2020: Added SD-MMC 1 Bit-mode (`SD_MMC_1BIT_MODE`). This mode needs one GPIO less and provides almost doubled speed (compared to SPI) for FTP-transfers (thanks @tueddy for contribution!) +* 18.12.2020: Added support for RFID-reader PN5180 (`RFID_READER_TYPE_PN5180`). PN5180 has better RFID-range/sensitivity and can read ISO-15693 / iCode SLIX2-tags aka 'Tonies' (thanks @tueddy for contribution!) +* 20.12.2020: Due to memory-issues with webstreams, FTP needs to be activated by pressing pause+next-button now +
More to come... + +## Known bugs +* Some webstreams don't run. Guess it's a combination of saturated connection-pool and lack of heap-memory. Works probably better if ESP32-WROVER is used, as this chip has PSRAM. Advice: Don't enable modules (e.g. MQTT) if you don't need them as this could save memory. +* English translation for webgui is currently outdated. This will be fixed soon when i18n-support will be integrated. ## Disclaimer This is a **fork** of the popular [Tonuino-project](https://github.com/xfjx/TonUINO) which means, that it only shares the basic concept of controlling a music-player by RFID-tags and buttons. **Said this I want to rule out, that the code-basis is completely different and developed by myself**. So there might be features, that are supported by my fork whereas others are missing or implemented differently. For sure both share that it's non-profit, DIY and developed on [Arduino](https://www.arduino.cc/). @@ -10,56 +35,107 @@ This is a **fork** of the popular [Tonuino-project](https://github.com/xfjx/TonU ## What's different (basically)? The original project makes use of microcontrollers (uC) like Arduino nano (which is the [Microchip AVR-platform](https://de.wikipedia.org/wiki/Microchip_AVR) behind the scenes). Music-decoding is done in hardware using [DFPlayer mini](https://wiki.dfrobot.com/DFPlayer_Mini_SKU_DFR0299) which offers a uSD-card-slot and an integrated amp as well. Control of this unit is done by a serial-interconnect with a uC using the API provided. -The core of my implementation is based on the popular [ESP32 by Espressif](https://www.espressif.com/en/products/hardware/esp32/overview). Having WiFi-support out-of-the-box makes it possible to provide further features like an integrated FTP-server (to feed the player with music), smarthome-integration via MQTT and webradio. However, my primary focus was to port the project to a modular base. Said this mp3-decoding is done in software with a dedicated uSD-card-slot and music-output is done via I2S-protocol. I did all my tests on [Adafruit's MAX98357A](https://learn.adafruit.com/adafruit-max98357-i2s-class-d-mono-amp/pinouts). Hopefully, not only in theory, other DACs that support I2S can be used as well. +The core of my implementation is based on the popular [ESP32 by Espressif](https://www.espressif.com/en/products/hardware/esp32/overview). Having WiFi-support out-of-the-box makes it possible to provide further features like an integrated FTP-server (to feed the player with music), smarthome-integration via MQTT, webradio and administration via webgui. However, my primary focus was to port the project to a modular base. Said this mp3-decoding is done in software with a dedicated uSD-card-slot and music-output is done via I2S-protocol. I did all my tests on [Adafruit's MAX98357A](https://learn.adafruit.com/adafruit-max98357-i2s-class-d-mono-amp/pinouts), [UDA1334](https://www.adafruit.com/product/3678) and [headphone-pcb](https://github.com/biologist79/Tonuino-ESP32-I2S/tree/master/PCBs/Headphone%20with%20PCM5102a%20and%20TDA1308). Hopefully, not only in theory, other DACs that support I2S can be used as well. -## Basic concept/handling -The basic idea of Tonuino (and my fork, respectively) is to provide a way, to use the Arduino-platform for a music-control-concept that supports locally stored music-files instead of being fully cloud-dependend. This basically means that RFID-tags are used to direct a music-player. Even for kids this concept is simple: place an RFID-object (card, character) on top of a box and the music starts to play. Place another RFID-object on it and anything else is played. Simple as that. +## Basic concept/handling of Tonuino +The basic idea of Tonuino is to provide a way, to use the Arduino-platform for a music-control-concept that supports locally stored music-files without DRM-restrictions. This basically means that RFID-tags are used to direct a music-player. Even for kids this concept is simple: place an RFID-object (card, character) on top of a box and the music starts to play. Place another RFID-object on it and anything else is played. Simple as that. ## Hardware-setup -The heart of my project is an ESP32 on a [Wemos Lolin32 development-board](https://www.ebay.de/itm/4MB-Flash-WEMOS-Lolin32-V1-0-0-WIFI-Bluetooth-Card-Based-ESP-32-ESP-WROOM-32/162716855489). If ordered in China (Aliexpress, eBay e.g.) it's pretty cheap (around 4€) but even in Europe it's only around 8€. Make sure to install the drivers for the USB/Serial-chip (CP2102 e.g.). If unsure have a look at eBay or Aliexpress for "Lolin 32". -* [MAX98357A (like Adafruit's)](https://www.ebay.de/itm/MAX98357-Amplifier-Breakout-Interface-I2S-Class-D-Module-For-ESP32-Raspberry-Pi/174319322988) -* [uSD-card-reader 3.3V + 5V](https://www.amazon.de/AZDelivery-Reader-Speicher-Memory-Arduino/dp/B077MB17JB) -* [uSD-card-reader 3.3V only](https://www.ebay.de/itm/Micro-SPI-Kartenleser-Card-Reader-2GB-SD-8GB-SDHC-Card-3-3V-ESP8266-Arduino-NEU/333796577968) +The heart of my project is an ESP32 on a [Wemos Lolin32 development-board](https://www.ebay.de/itm/4MB-Flash-WEMOS-Lolin32-V1-0-0-WIFI-Bluetooth-Card-Based-ESP-32-ESP-WROOM-32/162716855489). If ordered in China (Aliexpress, eBay e.g.) it's pretty cheap (around 4€) but even in Europe it's only around 8€. Make sure to install the drivers for the USB/Serial-chip (CP2102 e.g.). +* [MAX98357A (like Adafruit's)](https://de.aliexpress.com/item/32999952454.html) +* [uSD-card-reader; 3.3V only; supports SPI + SD-MMC](https://www.ebay.de/itm/Micro-SPI-Kartenleser-Card-Reader-2GB-SD-8GB-SDHC-Card-3-3V-ESP8266-Arduino-NEU/333796577968) * [RFID-reader](https://www.amazon.de/AZDelivery-Reader-Arduino-Raspberry-gratis/dp/B074S8MRQ7) * [RFID-tags](https://www.amazon.de/AZDelivery-Keycard-56MHz-Schlüsselkarte-Karte/dp/B07TVJPTM7) -* [Neopixel-ring](https://www.ebay.de/itm/LED-Ring-24-x-5050-RGB-LEDs-WS2812-integrierter-Treiber-NeoPixel-kompatibel/282280571841) -* [Rotary Encoder](https://www.amazon.de/gp/product/B07T3672VK) +* [Neopixel-ring](https://de.aliexpress.com/item/32673883645.html) +* [Rotary Encoder](https://de.aliexpress.com/item/33041814942.html) * [Buttons](https://de.aliexpress.com/item/32896285438.html) * [Speaker](https://www.visaton.de/de/produkte/chassiszubehoer/breitband-systeme/fr-7-4-ohm) * uSD-card: doesn't have to be a super-fast one; uC is limiting the throughput. Tested 32GB without any problems. - +* uSD in SD-MMC (1 Bit) mode: Several devkits with onboard SD slot have support for this mode, e.g.: (https://de.aliexpress.com/item/4001229463219.html) +* optional replace the RFID-reader with a the better one: PN5180 comes with better RFID range, less power consumption and support for ISO-15693 / iCode SLIX2 tags (https://www.bing.com/shop?q=pn5180&FORM=SHOPTB) Most of them can be ordered cheaper directly in China. It's just a give an short impression of the hardware; feel free to order where ever you want to. These are not affiliate-links. -## Getting Started -I recommend Microsoft's [Visual Studio Code](https://code.visualstudio.com/) alongside with [Platformio Plugin](https://platformio.org/install/ide?install=vscode). Since my project on Github contains [platformio.ini](platformio.ini), libraries used should be fetched automatically. Please note: if you use another ESP32-develboard (Lolin32 e.g.) you might have to change "env:" in platformio.ini to the corresponding value. Documentation can be found [here](https://docs.platformio.org/en/latest/projectconf.html). After that it might be necessary to adjust the names of the GPIO-pins in the upper #define-section of my code. -In the upper section of main.cpp you can specify the modules that should be compiled into the code. -Please note: if MQTT is enabled it's still possible to deactivate it via webgui. -## Wiring (2 SPI-instances) -A lot of wiring is necessary to get ESP32-Tonuino working. After my first experiments I soldered the stuff on a board in order to avoid wild-west-cabling. Especially for the interconnect between uC and uSD-card-reader make sure to use short wires (like 10cm or so)! Important: you can easily connect another I2S-DACs by just connecting them in parallel to the I2S-pins (DIN, BCLK, LRC). This is true for example if you plan to integrate a [line/headphone-pcb](https://www.adafruit.com/product/3678). In general, this runs fine. But unfortunately especially this board lacks of a headphone jack, that takes note if a plug is inserted or not. Best way is to use a [headphone jack](https://www.conrad.de/de/p/cliff-fcr1295-klinken-steckverbinder-3-5-mm-buchse-einbau-horizontal-polzahl-3-stereo-schwarz-1-st-705830.html) that has a pin that is pulled to GND, if there's no plug and vice versa. Using for example a MOSFET-circuit, this GND-signal can be inverted in a way, that MAX98357.SD is pulled down to GND if there's a plug. Doing that will turn off the speaker immediately if there's a plug and vice versa. Have a look at the PCB-folder in order to view the detailed solution. Here's an example for such a [headphone-pcb](https://github.com/biologist79/Tonuino-ESP32-I2S/tree/master/PCBs/Headphone%20with%20PCM5102a%20and%20TMD1308) that makes use of GND. +## Getting Started +* Arduino-IDE can be used but you need to satisfy dependencies for all the libraries listed in `platformio.ini` manually. +* Instead I recommend to install Microsoft's [Visual Studio Code](https://code.visualstudio.com/). This is a popular and powerful IDE that gives you the ability to install tons of (well-supported) plugins. +* Install [Platformio Plugin](https://platformio.org/install/ide?install=vscode) into [Visual Studio Code](https://code.visualstudio.com/) and make sure to have a look at the [documentation](https://docs.platformio.org/en/latest/integration/ide/pioide.html). +* Install [Git](https://git-scm.com/downloads) and make a copy ("clone") my repository to your local computer using `git clone https://github.com/biologist79/Tonuino-ESP32-I2S.git`. Using git you can keep your local repository easily up to date without doing copy'n'paste. +* (Optional) Install [Gitlens](https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens) as plugin (to have advanced Git-support). +* Now, that the git-repository is saved locally, import this folder into Platformio as a project. +* There's a file called `platformio.ini`, that contains the configuration for different develboards (e.g. env:lolin32). Platformio supports hundrets of boards out of the box. So probably you need to change/extend that configuration. Guess Lolin32 is described in platformio.ini but you need Lolin D32, then lookup Platformio's [documentation](https://docs.platformio.org/en/latest/boards/espressif32/lolin_d32.html) to know what to change. +* Depending on your operating system (Windows, Mac OS, Linux), you probably need to change `upload_port`and `monitor_port` as well. +* Edit `src/settings.h` according your needs. Especially GPIO-configuration is really important. +* Connect your develboard via USB, click the alien-head to the left and run `Upload and Monitor`. All libraries necessary should be fetched in background now followed by code-compilation. After that, your ESP32 is flashed with the firmware. +* Now have a look at the serial-output at the bottom of Visual Studio Code's windows. +* If everything ran fine, at the first run, Tonuino should open an access-point with the name "Tonuino". Connect to this WiFi with your computer (or mobile) and enter `192.168.4.1` to your webbrowser. Enter WiFi-credentials and the hostname. After saving the configuraton, restart Tonuino. +* Now Tonuino tries to join your WiFi. If that was successful, an IP is shown in the serial-console of Visual Studio Code. You can call Tonuino's GUI via this IP. If mDNS-feature is active in `src/settings.h`, you can use the hostname configured extended by .local. So if you configured `tonuino` as hostname, you can use `tonuino.local` for webgui and FTP. +* Via FTP you can upload data (don't expect it to be super fast). It's round about 185 kb/s if SD is in SPI-mode and 300 kB/s if SD is in MMC-mode. +* Via webbrowser you can configure various settings and pair RFID-tags with actions. +## Prerequisites / tipps +* Open settings.h +* choose if optional modules (e.g. MQTT, FTP, Neopixel) should be compiled/enabled +* For debugging-purposes serialDebug can be set to ERROR, NOTICE, INFO or DEBUG. +* If MQTT=yes, set the IP or hostname of the MQTT-server accordingly and check the MQTT-topics (states and commands) +* If Neopixel enabled: set NUM_LEDS to the LED-number of your Neopixel-ring and define the Neopixel-type using `#define CHIPSET` +* If you're using Arduino-IDE please make sure to change ESP32's partition-layout to `No OTA (2MB APP/2MB Spiffs)` as otherwise the sketch won't fit into the flash-memory. +* If you want to monitor battery's voltage, make sure to enable `MEASURE_BATTERY_VOLTAGE`. Use a voltage-divider as voltage of a LiPo is way too high for ESP32 (only 3.3V supported!). For my tests I connected VBat with a serial connection of 130k + 390k resistors (VBat(+)--130k--X--390k--VBat(-)). X is the measure-point where to connect the GPIO to. If using Lolin D32 or Lolin D32 pro, make sure to adjust both values to 100k each and change GPIO to 35 as this is already integrated and wired fixed. +Please note: via GUI upper and lower voltage cut-offs for visualisation of battery-voltage (Neopixel) is available. Additional GUI-configurable values are interval (in minutes) for checking battery voltage and the cut off-voltage below whose a warning is shown via Neopixel. +* If you're using a headphone-pcb with a [headphone jack](https://www.conrad.de/de/p/cliff-fcr1295-klinken-steckverbinder-3-5-mm-buchse-einbau-horizontal-polzahl-3-stereo-schwarz-1-st-705830.html) that has a pin to indicate if there's a plug, you can use this signal along with the feature `HEADPHONE_ADJUST_ENABLE` to limit the maximum headphone-voltage automatically. As per default you have to invert this signal (with a P-channel MOSFET) and connect it to GPIO22. +* Enabling `SHUTDOWN_IF_SD_BOOT_FAILS` is really recommended if you run your Tonuino in battery-mode without having a restart-button exposed to the outside of Tonuino's enclosure. Because otherwise there's no way to restart your Tonuino and the error-state will remain until battery is empty (or you open the enclosure, hehe). +* Enabling `PLAY_LAST_RFID_AFTER_REBOOT` will tell Tonuino to remember the last RFID-tag played after next reboot. So rebooting Tonuino will end up in autoplay. +* If `MDNS_ENABLE` is enabled, your Tonuino is reachable via hostname.local. So if your Tonuino's hostname is 'tonuino', the address is `tonuino.local`. + +## SD-card: SPI or SD-MMC (1 bit)-mode? +Having SD working is mandatory. So there are two modes available to access SD-cards: SPI and SD-MMC (1 bit).
+Advantages SD-MMC (1 bit) over SPI: +* Needs only three GPIOs (instead of four) +* It is almost twice as fast in FTP-transfer +So why using SPI if SD-MMC is better? The primary problem of SD-MMC is: you cannot choose different GPIOs. That doesn't sound bad but this can (depends on the ESP-develboard) be a problem because GPIO2 is pulled HIGH in SD-MMC-mode. And if that's the case, you'll probably not able to flash the firmware as the ESP32 doesn't enter flash-mode. Tested it with Lolin32 and had to remove SD's wire to GPIO2 until flash-mode was entered. As soon as flash-mode was entered, it's safe to re-connect it. So be advised: SD-MMC is nice and fast, but if you want to update the firmware and ESP32 is deeply burried in Tonuino's enclosure, this can be problem. + +## RFID: RC522 or PN5180? +RC522 is so to say the Tonuino-standard. It's cheap and works, but RFID-tag has to be placed near the reader. PN5180 instead has better RFID range/sensitivity and can read ISO-15693 / iCode SLIX2-tags aka 'Tonies'. Disadvantages: is a bit more expensive and needs more GPIOs (6 instead of 4). Refer PN5180's wire-section below for further informations. + +## 3.3 or 5V? +* MAX98357a: provides more power at 5 V but also runs at 3.3 V +* Neopixel: specification says it needs 5 V but also runs at 3.3 V +* RC522: needs 3.3 V (don't power with 5 V!) +* SD: needs 3.3 V but if voltage-regulator is onboard, it can be connected to 5 V as well +* Rotary encoder: 3.3 V (don't power with 5 V! Encoder doens't care if connected to 3.3 or 5 V, but GPIOs of ESP32 do!) +So why choosing 3.3 V over 5 V? +* It's not necessary to mix up 3.3 and 5 V. Natively ESP32 operates at 3.3 V. +* If you plan to use battery-mode with a LiPo, there's no 5 V available (unless USB is connected). +That's why my design's focus is 3.3 V. If you want to use 5 V - do so. The Mosfet-circuit for saving power in deepsleep (see [Lolin32-schematics](https://github.com/biologist79/Tonuino-ESP32-I2S/blob/master/PCBs/Wemos%20Lolin32/Pictures/Tonuino%20V2-Schematics.pdf) as reference) works as well for 5 V. +## Wiring (general) +Depending on the develboard you're using and the needs you have, there are different options available. +A lot of wiring is necessary to get ESP32-Tonuino working. After my first experiments on a breadboard I soldered all the stuff onto a board in order to avoid wild-west-cabling. Especially for the interconnect between uC and uSD-card-reader make sure to use short wires (like 10cm or so)! As of my experience with a breadbord, male/male-connectors are better than female/female-connectors. Important: you can easily connect another I2S-DACs by just connecting them in parallel to the I2S-pins (DIN, BCLK, LRC). This is true for example if you plan to integrate a [line/headphone-pcb](https://www.adafruit.com/product/3678). In general, this runs fine. But unfortunately especially this board lacks of a headphone jack, that takes note if a plug is inserted or not. Best way is to use a [headphone jack](https://www.conrad.de/de/p/cliff-fcr1295-klinken-steckverbinder-3-5-mm-buchse-einbau-horizontal-polzahl-3-stereo-schwarz-1-st-705830.html) that has a pin that is pulled to GND, if there's no plug and vice versa. Using for example a MOSFET-circuit, this GND-signal can be inverted in a way, that MAX98357.SD is pulled down to GND if there's a plug. Doing that will turn off the speaker immediately if there's a plug and vice versa. Have a look at the PCB-folder in order to view the detailed solution. Here's an example for such a [headphone-pcb](https://github.com/biologist79/Tonuino-ESP32-I2S/tree/master/PCBs/Headphone%20with%20PCM5102a%20and%20TDA1308) that makes use of GND.
+Have a look at my PCB in the subfolder Hardware-Platforms/Wemos Lolin32. Probably this makes things easier for you. + +## Wiring (2 SPI-instances: RC522 + SD) +Uses two SPI-instances. The first one for the RFID-reader and the second for SD-card-reader. This is also the [setup, I personally use](https://github.com/biologist79/Tonuino-ESP32-I2S/tree/master/PCBs/Wemos%20Lolin32).
| ESP32 (GPIO) | Hardware | Pin | Comment | | ------------- | --------------------- | ------ | ------------------------------------------------------------ | -| 5 V | SD-reader | VCC | Connect to p-channel MOSFET for power-saving when uC is off | +| 3.3 (5) V | SD-reader | VCC | Connect to p-channel MOSFET for power-saving when uC is off | | GND | SD-reader | GND | | | 15 | SD-reader | CS | | | 13 | SD-reader | MOSI | | | 16 | SD-reader | MISO | | | 14 | SD-reader | SCK | | -| 17 | RFID-reader | 3.3V | Connect directly to GPIO 17 for power-saving when uC is off | +| 3.3 V | RFID-reader | 3.3V | Connect directly to GPIO 17 for power-saving when uC is off | | GND | RFID-reader | GND | | | 21 | RFID-reader | CS/SDA | | | 23 | RFID-reader | MOSI | | | 19 | RFID-reader | MISO | | | 18 | RFID-reader | SCK | | -| 5 V | MAX98357 | VIN | Connect to p-channel MOSFET for power-saving when uC is off | +| 5 / 3.3 V | MAX98357 | VIN | Connect to p-channel MOSFET for power-saving when uC is off | | GND | MAX98357 | GND | | | 25 | MAX98357 | DIN | | | 27 | MAX98357 | BCLK | | | 26 | MAX98357 | LRC | | | --- | MAX98357 | SD | Info: if pulled down to GND amp will turn off | -| 34 | Rotary encoder | CLR | Invert CLR with DT if you want to change the direction of RE | -| 35 | Rotary encoder | DT | Invert CLR with DT if you want to change the direction of RE | +| 34 | Rotary encoder | CLR | Change CLR with DT if you want to change the direction of RE | +| 35 | Rotary encoder | DT | Change CLR with DT if you want to change the direction of RE | | 32 | Rotary encoder | BUTTON | | | 3.3 V | Rotary encoder | + | | | GND | Rotary encoder | GND | | @@ -69,40 +145,51 @@ A lot of wiring is necessary to get ESP32-Tonuino working. After my first experi | GND | Button (previous) | | | | 5 | Button (pause/play) | | | | GND | Button (pause/play) | | | -| 5 V | Neopixel | 5 V | Connect to p-channel MOSFET for power-saving when uC is off | +| 3.3 V | Neopixel | 5 V | Connect to p-channel MOSFET for power-saving when uC is off | | GND | Neopixel | GND | | -| 12 | Neopixel | DI | Might be necessary to use a logic-converter 3.3 => 5V | -| 17 | (e.g.) BC337 (via R5) | Base | Don't forget R5! | -| 33 | Voltage-divider / BAT | | Optional: Voltage-divider to monitor battery-voltage | +| 12 | Neopixel | DI | | +| 17 | N-channel Mosfet | Gate | | +| 33 | Voltage-divider / BAT | | Optional: voltage-divider to monitor battery-voltage | +| 22 | Headphone jack | | Optional: if pulled to ground, headphone-volume is set | + + +Optionally, GPIO 17 can be used to drive a Mosfet-circuit in order to switch off peripherals (SD, Neopixel, RFID and MAX98357a) if ESP32 is in deepsleep. lease refer the schematics for my [Lolin32-PCB](https://github.com/biologist79/Tonuino-ESP32-I2S/blob/master/PCBs/Wemos%20Lolin32/Pictures/Tonuino-Lolin32-Schematics.pdf) for further informations. If you need further informations on transistor-circuits visit this [website](https://dl6gl.de/schalten-mit-transistoren.html).
+In general I recommend using a [uSD-card-reader](https://www.ebay.de/itm/Micro-SPI-Kartenleser-Card-Reader-2GB-SD-8GB-SDHC-Card-3-3V-ESP8266-Arduino-NEU/333796577968) that can be run solely with 3.3V (doesn't have a voltage-regulator). This is because if 3.3V go through the voltage regulator a small voltage-drop will be introduced, which may lead to SD-malfunction as the resulting voltage is a bit too low. Vice versa if you want to connect your reader solely to 5V, make sure to have one WITH a voltage regulator :-). And by the way: when LiPo-battery is connected, there's no 5V. That's why I designed my [Lolin32-PCB](https://github.com/biologist79/Tonuino-ESP32-I2S/tree/master/PCBs/Wemos%20Lolin32) with 3.3V only. +## Wiring (SD-card in 1 Bit SD-MMC mode) different to above +| ESP32 (GPIO) | Hardware | Pin | Comment | +| ------------- | --------------------- | ------ | ------------------------------------------------------------ | +| -- | SD-reader | CS | no CS required | +| 15 | SD-reader | MOSI | | +| 2 | SD-reader | MISO | 10K hardware pullup may be required | +| 14 | SD-reader | SCK | | -Optionally, GPIO 17 can be used to drive a NPN-transistor (BC337-40) that pulls a p-channel MOSFET (IRF9520) to GND in order to switch on/off 5V-current. Transistor-circuit is described [here](https://dl6gl.de/schalten-mit-transistoren.html): Just have a look at Abb. 4. Values of the resistors I used: R1: 10k, R2: omitted(!), R4: 10k, R5: 4,7k.
-Also tested this successfully for a 3.3V-setup with IRF530NPBF (N-channel MOSFET) and NDP6020P (P-channel MOSFET). Resistor-values: R1: 100k, R2: omitted(!), R4: 100k, R5: 4,7k. A 3.3V-setup is helpful if you want to battery-power your Tonuino and 5V is not available in battery-mode. For example this is the case when using Wemos Lolin32 with only having LiPo connected.
-Advice: When powering a SD-card-reader solely with 3.3V, make sure to use one WITHOUT a voltage regulator. Or at least one with a pin dedicated for 3.3V (bypassing voltage regulator). This is because if 3.3V go through the voltage regulator a small voltage-drop will be introduced, which may lead to SD-malfunction as the resulting voltage is a bit too low. Vice versa if you want to connect your reader solely to 5V, make sure to have one WITH a voltage regulator :-). +Make sure to enable `SD_MMC_1BIT_MODE` if you want to use this feature. SD-MMC-mode requires these fixed PINs listed above. You can find a good comparison of different SD-card-modes here: (https://www.instructables.com/Select-SD-Interface-for-ESP32/). +Advice: Double check that above PINs are not used elsewhere (e.g. GPIO2 is used as PREVIOUS_BUTTON as per default in settings.h). -## Wiring (1 SPI-instance) [EXPERIMENTAL!] +## Wiring (1 SPI-instance: RC522 + SD) [EXPERIMENTAL, maybe not working!] Basically the same as using 2 SPI-instances but... -In this case RFID-reader + SD-reader share SPI's SCK, MISO and MOSI. But make sure to use different CS-pins. +In this case RFID-reader + SD-reader share SPI's SCK, MISO and MOSI. But make sure to use different CS-pins. Have to admit I had some problems to get this running. Seems to be connected properly, but nothing happens when an RFID-tag is applied. Maybe anybody else wants to point out :-) | ESP32 (GPIO) | Hardware | Pin | Comment | | ------------- | --------------------- | ------ | ------------------------------------------------------------ | -| 5 V | SD-reader | VCC | Connect to p-channel MOSFET for power-saving when uC is off | +| 3.3 (5) V | SD-reader | VCC | Connect to p-channel MOSFET for power-saving when uC is off | | GND | SD-reader | GND | | | 15 | SD-reader | CS | Don't share with RFID! | -| 17 | RFID-reader | 3.3V | Connect directly to GPIO 17 for power-saving when uC is off | +| 3.3 V | RFID-reader | 3.3V | Connect directly to GPIO 17 for power-saving when uC is off | | GND | RFID-reader | GND | | | 21 | RFID-reader | CS/SDA | Don't share with SD! | | 23 | RFID+SD-reader | MOSI | | | 19 | RFID+SD-reader | MISO | | | 18 | RFID+SD-reader | SCK | | -| 5 V | MAX98357 | VIN | Connect to p-channel MOSFET for power-saving when uC is off | +| 5 / 3.3 V | MAX98357 | VIN | Connect to p-channel MOSFET for power-saving when uC is off | | GND | MAX98357 | GND | | | 25 | MAX98357 | DIN | | | 27 | MAX98357 | BCLK | | | 26 | MAX98357 | LRC | | | --- | MAX98357 | SD | Info: if pulled down to GND amp will turn off | -| 34 | Rotary encoder | CLR | Invert CLR with DT if you want to change the direction of RE | -| 35 | Rotary encoder | DT | Invert CLR with DT if you want to change the direction of RE | +| 34 | Rotary encoder | CLR | Change CLR with DT if you want to change the direction of RE | +| 35 | Rotary encoder | DT | Change CLR with DT if you want to change the direction of RE | | 32 | Rotary encoder | BUTTON | | | 3.3 V | Rotary encoder | + | | | GND | Rotary encoder | GND | | @@ -112,39 +199,40 @@ In this case RFID-reader + SD-reader share SPI's SCK, MISO and MOSI. But make su | GND | Button (previous) | | | | 5 | Button (pause/play) | | | | GND | Button (pause/play) | | | -| 5 V | Neopixel | 5 V | Connect to p-channel MOSFET for power-saving when uC is off | +| 5 / 3.3 V | Neopixel | 5 V | Connect to p-channel MOSFET for power-saving when uC is off | | GND | Neopixel | GND | | -| 12 | Neopixel | DI | Might be necessary to use a logic-converter 3.3 => 5V | -| 17 | (e.g.) BC337 (via R5) | Base | Don't forget R5! | -| 33 | Voltage-divider / BAT | | Optional: Voltage-divider to monitor battery-voltage | +| 12 | Neopixel | DI | | +| 17 | N-channel Mosfet | Gate | | +| 33 | Voltage-divider / BAT | | Optional: voltage-divider to monitor battery-voltage | +| 22 | Headphone jack | | Optional: if pulled to ground, headphone-volume is set | -## Wiring (custom) / different pinout -When using a develboard with for example SD-card-reader already integrated (Lolin D32 Pro), the pinouts described above my not fit; feel free to change them according your needs. Additionaly some boards may use one or some of the GPIOs I used for their internal purposes and that reason for are maybe not exposed via pin-headers. However, having them exposed doesn't mean they can be used without limits. This is because some GPIOs have to be logical LOW or HIGH at start for example and this is probably not the case when connecting stuff to it. Feel free to adjust the GPIOs proposed by me (but be adviced it could take a while to get it running). If you encounter problems please refer the board's manual first.
-Keep in mind the RFID-lib I used is intended for default-SPI-pins only (SCK, MISO, MOSI). [Here](https://github.com/biologist79/Tonuino-ESP32-I2S/tree/master/Hardware-Plaforms/ESP32-A1S-Audiokit) I described a solution for a board with many GPIOs used internally and a very limited number of GPIOs exposed. That's why I had to use different SPI-GPIOs for RFID as well. Please note I used a slightly modified [RFID-lib](https://github.com/biologist79/Tonuino-ESP32-I2S/tree/master/Hardware-Plaforms/ESP32-A1S-Audiokit/lib/MFRC522) there. -## Prerequisites / tipps -* choose if optional modules (MQTT, FTP, Neopixel) should be compiled/enabled -* for debugging-purposes serialDebug can be set to ERROR, NOTICE, INFO or DEBUG. -* if MQTT=yes, set the IP of the MQTT-server accordingly and check the MQTT-topics (states and commands) -* if Neopixel enabled: set NUM_LEDS to the LED-number of your Neopixel-ring and define the Neopixel-type using `#define CHIPSET` -* If you're using Arduino-IDE please make sure to change ESP32's partition-layout to `No OTA (2MB APP/2MB Spiffs)` as otherwise the sketch won't fit into the flash-memory. -* Please keep in mind that working SD is mandatory. Unless `SD_NOT_MANDATORY_ENABLE` is not set, Tonuino will never fully start up if SD is not working. Only use `SD_NOT_MANDATORY_ENABLE` for debugging as for normal operational mode, not having SD working doesn't make sense. -* If you want to monitor the battery-voltage, make sure to enable `MEASURE_BATTERY_VOLTAGE`. Use a voltage-divider as voltage of a LiPo is way too high for ESP32 (only 3.3V supported!). For my tests I connected VBat with a serial connection of 130k + 390k resistors (VBat--130k--X--390k--GND). X is the measure-point where to connect the GPIO to. -* If you're using a headphone-pcb with a [headphone jack](https://www.conrad.de/de/p/cliff-fcr1295-klinken-steckverbinder-3-5-mm-buchse-einbau-horizontal-polzahl-3-stereo-schwarz-1-st-705830.html) that has a pin to indicate if there's a plug, you can use this signal along with the feature `HEADPHONE_ADJUST_ENABLE` to limit the maximum headphone-voltage automatically. As per default you have to invert this signal and connect it to GPIO22. -* Enabling `SHUTDOWN_IF_SD_BOOT_FAILS` is really recommended if you run your Tonuino in battery-mode without having a restart-button exposed to the outside of the Tonuino's enclosure. Because otherwise there's no way to restart your Tonuino and the error-state will remain until battery is empty (or you open the enclosure, hehe). -* compile and upload the sketch +## Wiring (PN5180 instead of MFRC522) different to above +PN5180 reader needs two more PIN's, RESET and BUSY. Double check PIN conflicts! `RFID_READER_TYPE_PN5180` needs to be enabled to use this feature. Make sure to disable `RFID_READER_TYPE_MFRC522`! + +| ESP32 (GPIO) | Hardware | Pin | Comment | +| ------------- | --------------------- | ------ | ------------------------------------------------------------ | +| 3.3 V | PN5180 RFID-reader | 3.3V | Connect directly to GPIO 17 for power-saving when uC is off | +| 5 / 3.3 V | PN5180 RFID-reader | 5V | Don't forget to connect this pin the same way as 3.3V | +| GND | PN5180 RFID-reader | GND | | +| 21 | PN5180 RFID-reader | CS/SDA | Same as MFRC522. Don't share with SD! | +| 23 | PN5180 RFID-reader | MOSI | Same as MFRC522 | +| 19 | PN5180 RFID-reader | MISO | Same as MFRC522 | +| 18 | PN5180 RFID-reader | SCK | Same as MFRC522 | +| 16 | PN5180 RFID-reader | BUSY | be aware of SD MISO if running in SPI mode | +| 22 | PN5180 RFID-reader | RST | be aware of Headphone jack PIN | -## Starting Tonuino-ESP32 first time -After plugging in it takes a few seconds until neopixel indicates that Tonuino is ready (by four (slow) rotating LEDs; white if Wifi enabled and blue if disabled). If uC was not able to connect to WiFi, an access-point (named Tonuino) is opened and after connecting this WiFi, a [configuration-Interface](http://192.168.4.1) is available via webbrowser. Enter WiFI-credentials + the hostname (Tonuio's name), save them and restart the uC. Then reconnect to your "regular" WiFi. Now you're ready to go: start learning RFID-tags via GUI. To reach the GUI enter the IP stated in the serial console or use the hostname. For example if you're using a Fritzbox as router and entered tonuino as hostname in the previous configuration-step, in your webbrowser tonuino.fritz.box should work. After doing rfid-learnings, place your RFID-tag next to the RFID-reader and the music (or whatever else you choosed) should start to play. While the playlist is generated/processed, fast-rotating LEDs are shown to indicate that Tonuino is busy. The more tracks a playlist/directory contains the longer this step will take.
-Please note: hostname can be used to call webgui or FTP-server. I tested it with a Fritzbox 7490 and worked fine. Make sure you don't use a name that already exists in you local network (LAN). +## Wiring (custom) / different pinout +When using a develboard with SD-card-reader already integrated (Lolin D32 Pro, several TTGO-boards), the pinouts described above my not fit. Feel free to change them according your needs. Additionaly some boards may use one or some of the GPIOs I used for their internal purposes and that reason for are maybe not exposed via pin-headers. However, having them exposed doesn't mean they can be used without limits. This is because some GPIOs have to be logical LOW or HIGH at start/boot for example and this is probably not the case when connecting stuff to it. Feel free to adjust the GPIOs proposed by me (but be adviced it could take a while to get it running). If you encounter problems please refer the board's manual first.
+[Here](https://github.com/biologist79/Tonuino-ESP32-I2S/tree/master/Hardware-Plaforms/ESP32-A1S-Audiokit) I described a solution for a board with many GPIOs used internally and a very limited number of GPIOs exposed. That's why I had to use different SPI-GPIOs for RFID as well. Please note I used a slightly modified [RFID-lib](https://github.com/biologist79/Tonuino-ESP32-I2S/tree/master/Hardware-Plaforms/ESP32-A1S-Audiokit/lib/MFRC522) there. Please note: the code-basis is outdated. Will need to re-integrate it into my master-branch... ## WiFi WiFi is mandatory for webgui, FTP and MQTT. However, WiFi can be temporarily or permanently disabled. There are two ways to do that: * Use a special modification-card that can be configured via webgui -* Press previous-key (and keep pressed!) + press next-button in parallel shortly. Now release both. -This toggles the current WiFi-status which means: if it's currently enabled, it will be disabled instantly and vice versa. Please note: This WiFi-status will remain until you change it again. Having Wifi enabled is indicated in idle-mode (no playlist active) with four white slow rotating LEDs whereas disabled WiFi is represented by those ones colored blue. +* Press previous-key (and keep it pressed) + press next-button in parallel shortly. Now release both. +This toggles the current WiFi-status: if it's currently enabled, it will be disabled instantly and vice versa. Please note: this WiFi-status will remain until you change it again, which means, that Tonuino will remember this state after the next reboot. Having Wifi enabled is indicated in idle-mode (no playlist active) with four *white* slow rotating LEDs whereas disabled WiFi is represented by those ones coloured *blue*. ## After Tonuino-ESP32 is connected to your WiFi -After getting Tonuino part of your LAN/WiFi, the 'regular' webgui is available at the IP assigned by your router (or the configured hostname). Using this GUI, you can configure: +After bringing Tonuino part of your LAN/WiFi, the 'regular' webgui is available at the IP assigned by your router (or the configured hostname). Using this GUI, you can configure: * WiFi * Binding between RFID-tag, file/directory/URL and playMode * Binding between RFID-tag and a modification-type @@ -167,20 +255,27 @@ Webgui #4: Webgui #5: +Webgui #6: + + +Webgui #7: + + Webgui: websocket broken: Webgui: action ok: -Please note: as you apply a RFID-tag to the RFID-reader, the corresponding ID is pushed to the GUI (and flashes a few times; so you can't miss it). So there's no need to enter such IDs manually (unless you want to). +Please note: as you apply a RFID-tag to the RFID-reader, the corresponding ID is pushed to the GUI. So there's no need to enter such IDs manually (unless you want to). Filepath can be filled out by selecting a file/directory in the tree. +IMPORTANT: Every time you add, delete or rename stuff on the SD-card, it's necessary to re-index the json-indexfile. Simply click on the refresh-button below the filetree and wait until it's done. This is because all operations of the filebrowser rely on this file in order to provide a fast way to access all the files and directories. ## Interacting with Tonuino ### Playmodes It's not just simply playing music; different playmodes are supported: * single track * single track (loop) -* audiobook (single file or playlist; last play-position (file and playlist) is saved and re-used next time) +* audiobook (single file or playlist/folder; last play-position (file and playlist) is saved and re-used next time) * audiobook (loop) * folder/playlist (alph. sorted) * folder/playlist (random order) @@ -189,7 +284,7 @@ It's not just simply playing music; different playmodes are supported: * webradio (always only one "track") ### Modification RFID-tags -There are special RFID-tags, that don't start music by themself but can modify things. If applied a second time, it's previous action will be reversed. Please note: all sleep-modes do dimming automatically because it's supposed to be used in the evening when going to bed. Well, at least that's my children's indication :-) So first make sure to start the music then use a modification-card in order to apply your desired modification: +There are special RFID-tags, that don't start music by themself but can modify things. If applied a second time, it's previous action/modification will be reversed. Please note: all sleep-modes do dimming (Neopixel) automatically because it's supposed to be used in the evening when going to bed. Well, at least that's my children's indication :-) So first make sure to start the music then use a modification-card in order to apply your desired modification: * lock/unlock all buttons * sleep after 5/30/60/120 minutes * sleep after end of current track @@ -204,19 +299,21 @@ There are special RFID-tags, that don't start music by themself but can modify t ### Neopixel-ring (optional) Indicates different things. Don't forget configuration of number of LEDs via #define NUM_LEDS * While booting: 1/2 LEDs rotating orange -* Unable to mount SD: LEDs flashing red (will remain forever unless SD-card is available) +* Unable to mount SD: LEDs flashing red (will remain forever unless SD-card is available or `SHUTDOWN_IF_SD_BOOT_FAILS` is active) * IDLE: four LEDs slow rotating (white if WiFi enabled; blue if WiFi disabled) -* ERROR: all LEDs flashing red (1x) -* OK: all LEDs flashing green (1x) -* BUSY: violet; four fast rotating LEDs +* ERROR: all LEDs flashing red (1x) if an action was not accepted +* OK: all LEDs flashing green (1x) if an action was accepted +* BUSY: violet; four fast rotating LEDs when generating a playlist * track-progress: rainbow; number of LEDs relative to play-progress * playlist-progress: blue; appears only shortly in playlist-mode with every new track; number of LEDs relative to progress -* volume: green => red-gradient; number of LEDs relative from actual to max volume +* webstream: two slow rotating LEDs that change their colours as the stream proceeds +* volume: green => red-gradient; number of LEDs relative from current to max volume * switching off: red; circle that grows until long-press-time is reached * buttons locked: track-progress-LEDs coloured red * paused: track-progress-LEDs coloured orange * rewind: if single-track-loop is activated a LED-rewind is performed when restarting the given track -* (Optional) Undervoltage: flashes three times red if battery-voltage is too low +* (Optional) Undervoltage: flashes three times red if battery-voltage is too low. This voltage-level can be configured via GUI. +* (Optional) Short press of rotary encoder's button provides battery-voltage visualisation via Neopixel. Upper und lower voltage cut-offs can be adjusted via GUI. Please note: some Neopixels use a reversed addressing which leads to the 'problem', that all effects are shown counter clockwise. If you want to change that behaviour, just enable `NEOPIXEL_REVERSE_ROTATION`. @@ -230,11 +327,13 @@ Some buttons have different actions if pressed long or short. Minimum duration f * pause/play (short/long): pause/play * rotary encoder (turning): vol +/- * rotary encoder (button long): switch off (only when on) -* rotary encoder (button short): switch on (only when off) -* previous (long; keep pressed) + next (short): toggle WiFi enabled/disabled +* rotary encoder (button short): switch on (when switched off) +* rotary encoder (button short): show battery-voltage via Neopixel (when switched on and `MEASURE_BATTERY_VOLTAGE` is active) +* previous (long; keep pressed) + next (short) + release (both): toggle WiFi enabled/disabled ### Music-play * music starts to play right after valid RFID-tag was applied +* if `PLAY_LAST_RFID_AFTER_REBOOT` is active, Tonuino will remember the last RFID applied => music-autoplay * if a folder should be played that contains many mp3s, the playlist generation can take a few seconds. Please note that a file's name including path cannot exceed 255 characters. * while playlist is generated Neopixel indicates BUSY-mode * after last track was played, Neopixel indicates IDLE-mode @@ -257,10 +356,16 @@ After having Tonuino running on your ESP32 in your local WiFi, the webinterface- * General-configuration (volume (speaker + headphone), neopixel-brightness (night-mode + initial), sleep after inactivity) ### FTP (optional) -In order to avoid exposing uSD-card or disassembling the Tonuino all the time for adding new music, it's possible to transfer music onto the uSD-card using FTP. Please make sure to set the max. number of parallel connections to ONE in your FTP-client. My recommendation is [Filezilla](https://filezilla-project.org/). But don't expect fast data-transfer. Initially it was around 145 kB/s but after modifying ftp-server-lib (changing from 4 kB static-buffer to 16 kB heap-buffer) I saw rates improving a bit. Please note: if music is played in parallel, this rate decrases dramatically! So better stop playback then doing a FTP-transfer. However, playback sounds normal if a FTP-upload is performed in parallel. Default-user and password are set via `ftpUser` and `ftpPassword` but can be changed later via GUI. +* In order to avoid exposing uSD-card or disassembling Tonuino all the time for adding new music, it's possible to transfer music to the uSD-card using FTP. +* Default-user and password are set to `esp32` / `esp32` but can be changed later via GUI. +* FTP needs to be activated after boot by pressing `PAUSE` + `NEXT`-buttons (in parallel) first! Neopixel flashes green (1x) if enabling was successful. +* Make sure to set the max. number of parallel connections to ONE in your FTP-client. +* Software: my recommendation is [Filezilla](https://filezilla-project.org/). +* Don't expect a super fast data-transfer; it's around 180 kB/s (SPI-mode) and >=300 kB/s (MMC-mode). +* Please note: if music is played in parallel, this rate decrases dramatically! So better stop playback when doing a FTP-transfer. ### Files / ID3-tags (IMPORTANT!) -Make sure to not use filenames that contain German 'Umlaute'. I've been told this is also true for mp3's ID3-tags. +Make sure to not use filenames that contain German 'Umlaute'. I've been told this is also true for mp3's ID3-tags. Also better remove coverarts from the files. ### Energy saving As already described in the modify-section, there are different sleepmodes available. Additionaly uC will be put into deepsleep after 10 minutes of inactivity (configurable my maxInactivityTime) unless Tonuino doesn't play music, has a FTP-client connected and any input via buttons. Every button-interaction resets the counter to the initial value. @@ -286,7 +391,8 @@ Feel free to use your own smarthome-environments (instead of openHAB). The MQTT- | topicSleepCmnd | 0 or OFF | Power off Tonuino immediately | | topicSleepState | ON or OFF | Sends Tonuino's current/last state | | topicTrackCmnd | 12 digits | Set number of RFID-tag which 'emulates' an RFID-tag (e.g. `123789456089`) | -| topicTrackState | 12 digits | Sends number of last RFID-tag applied | +| topicTrackState | String | Sends current track number, total number of tracks and full path of current | +| | | track. E.g. "(2/10) /mp3/kinderlieder/Ri ra rutsch.mp3" | topicTrackControlCmnd | 1 -> 7 | `1`=stop; `2`=unused!; `3`=play/pause; `4`=next; `5`=prev; `6`=first; `7`=last | | topicLoudnessCmnd | 0 -> 21 | Set loudness (depends on minVolume / maxVolume) | | topicLoudnessState | 0 -> 21 | Sends loudness (depends on minVolume / maxVolume | @@ -305,4 +411,4 @@ Feel free to use your own smarthome-environments (instead of openHAB). The MQTT- | topicRepeatModeState | 0 - 3 | Sends repeat-mode | | topicLedBrightnessCmnd | 0 - 255 | Set brightness of Neopixel | | topicLedBrightnessState | 0 - 255 | Sends brightness of Neopixel | -| topicBatteryVoltage | float | Voltage (e.g. 3.81) | \ No newline at end of file +| topicBatteryVoltage | float | Voltage (e.g. 3.81) | diff --git a/html/accesspoint.html b/html/accesspoint.html new file mode 100644 index 0000000..c844224 --- /dev/null +++ b/html/accesspoint.html @@ -0,0 +1,64 @@ + + + + WLAN-Einrichtung + + + +
+

WLAN-Einrichtung

+
+
+
+
+
+

+ +
+
+

Fertig?

+ +
+ + \ No newline at end of file diff --git a/html/accesspoint_EN.html b/html/accesspoint_EN.html new file mode 100644 index 0000000..3f00262 --- /dev/null +++ b/html/accesspoint_EN.html @@ -0,0 +1,64 @@ + + + + WiFi-configuration + + + +
+

WiFi-configuration

+
+
+
+
+
+

+ +
+
+

Ready to go?

+ +
+ + \ No newline at end of file diff --git a/html/management.html b/html/management.html new file mode 100644 index 0000000..851b0ee --- /dev/null +++ b/html/management.html @@ -0,0 +1,727 @@ + + + + ESPuino-Konfiguration + + + + + + + + + + + + + + + + + + +
+ +
+ + + + diff --git a/html/management_EN.html b/html/management_EN.html new file mode 100644 index 0000000..a4c9d28 --- /dev/null +++ b/html/management_EN.html @@ -0,0 +1,727 @@ + + + + ESPuino-configuration + + + + + + + + + + + + + + + + + + +
+ +
+ + + + diff --git a/html/website.html b/html/website.html deleted file mode 100644 index a006ca5..0000000 --- a/html/website.html +++ /dev/null @@ -1,359 +0,0 @@ - - - - ESPuino-Konfiguration - - - - - - - - - -
-
-

WLAN-Konfiguration

-
-
- - -
- Bitte SSID des WLANs eintragen. -
- - - - -
- - -
-
-
-
-

RFID-Zuweisungen

-
-
- - - - - - -
- - -
-
-
-
-

RFID-Modifkationen

-
-
- - -
- Bitte eine 12-stellige Zahl eingeben. -
- - -
- - -
-
-
-
-

MQTT-Konfiguration

-
-
- - -
-
- - - - - - -
- - -
-
-
-
-

FTP-Konfiguration

-
-
- - - - -
- - -
-
-
-
-

Allgemeine Konfiguration

-
-
- - - - - - -
-
- - - - -
-
- - -
- - -
-
-
-
-

NVS-Importer

-
-
- - -
- -
-
-
- - - diff --git a/html/websiteBasic.html b/html/websiteBasic.html deleted file mode 100644 index 15c3302..0000000 --- a/html/websiteBasic.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - WLAN-Einrichtung - - -
-
- Initiale WLAN-Einrichtung -
-
-
-
-
-

- -
-
-
- -
- - diff --git a/html/websiteBasic_EN.html b/html/websiteBasic_EN.html deleted file mode 100644 index c04c20a..0000000 --- a/html/websiteBasic_EN.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - Wifi-configuration - - -
-
- Basic wifi-setup -
-
-
-
-
-

- -
-
-
- -
- - diff --git a/html/websiteMgmt.h b/html/websiteMgmt.h deleted file mode 100644 index f5bc9e7..0000000 --- a/html/websiteMgmt.h +++ /dev/null @@ -1,263 +0,0 @@ -static const char mgtWebsite[] PROGMEM = "\ -\ - \ - ESPuino-Konfiguration\ - \ - \ - \ - \ - \ - \ - \ - \ - \ -
\ -
\ -

WLAN-Konfiguration

\ -
\ -
\ - \ - \ -
\ - Bitte SSID des WLANs eintragen.\ -
\ - \ - \ -
\ - \ - \ -
\ -
\ -
\ -

RFID-Zuweisungen

\ -
\ -
\ - \ - \ - \ - \ - \ - \ -
\ - \ - \ -
\ -
\ -
\ -

RFID-Modifkationen

\ -
\ -
\ - \ - \ -
\ - Bitte eine 12-stellige Zahl eingeben.\ -
\ - \ - \ -
\ - \ - \ -
\ -
\ -
\ -

MQTT-Konfiguration

\ -
\ -
\ - \ - \ -
\ -
\ - \ - \ -
\ - Bitte eine gültige IPv4-Adresse eingeben, z.B. 192.168.2.89.\ -
\ -
\ - \ - \ -
\ -
\ -
\ -

FTP-Konfiguration

\ -
\ -
\ - \ - \ - \ - \ -
\ - \ - \ -
\ -
\ -
\ -

Allgemeine Konfiguration

\ -
\ -
\ - \ - \ - \ - \ -
\ -
\ - \ - \ - \ - \ -
\ -
\ - \ - \ -
\ - \ - \ -
\ - \ -
\ - \ -\ -"; \ No newline at end of file diff --git a/html/website_EN.html b/html/website_EN.html deleted file mode 100644 index 299ae3b..0000000 --- a/html/website_EN.html +++ /dev/null @@ -1,359 +0,0 @@ - - - - ESPuino-configuration - - - - - - - - - -
-
-

Wifi-configuration

-
-
- - -
- Please enter name of wifi (SSID). -
- - - - -
- - -
-
-
-
-

RFID-assignments

-
-
- - - - - - -
- - -
-
-
-
-

RFID-modifications

-
-
- - -
- Please enter a number with 12 digits. -
- - -
- - -
-
-
-
-

MQTT-configuration

-
-
- - -
-
- - - - - - -
- - -
-
-
-
-

FTP-configuration

-
-
- - - - -
- - -
-
-
-
-

General configuration

-
-
- - - - - - -
-
- - - - -
-
- - -
- - -
-
-
-
-

NVS-importer

-
-
- - -
- -
-
-
- - - diff --git a/pictures/Mgmt-GUI1.jpg b/pictures/Mgmt-GUI1.jpg index 5f87a3f..86e1f2c 100644 Binary files a/pictures/Mgmt-GUI1.jpg and b/pictures/Mgmt-GUI1.jpg differ diff --git a/pictures/Mgmt-GUI2.jpg b/pictures/Mgmt-GUI2.jpg index 50a8da3..0deb8d8 100644 Binary files a/pictures/Mgmt-GUI2.jpg and b/pictures/Mgmt-GUI2.jpg differ diff --git a/pictures/Mgmt-GUI3.jpg b/pictures/Mgmt-GUI3.jpg index b365774..c3a3b14 100644 Binary files a/pictures/Mgmt-GUI3.jpg and b/pictures/Mgmt-GUI3.jpg differ diff --git a/pictures/Mgmt-GUI4.jpg b/pictures/Mgmt-GUI4.jpg index bdb2732..5fcfdeb 100644 Binary files a/pictures/Mgmt-GUI4.jpg and b/pictures/Mgmt-GUI4.jpg differ diff --git a/pictures/Mgmt-GUI5.jpg b/pictures/Mgmt-GUI5.jpg index 40c2b2d..6f3b4ea 100644 Binary files a/pictures/Mgmt-GUI5.jpg and b/pictures/Mgmt-GUI5.jpg differ diff --git a/pictures/Mgmt-GUI6.jpg b/pictures/Mgmt-GUI6.jpg new file mode 100644 index 0000000..f4f54f7 Binary files /dev/null and b/pictures/Mgmt-GUI6.jpg differ diff --git a/pictures/Mgmt-GUI7.jpg b/pictures/Mgmt-GUI7.jpg new file mode 100644 index 0000000..e5e7824 Binary files /dev/null and b/pictures/Mgmt-GUI7.jpg differ diff --git a/pictures/Mgmt-GUI_connection_broken.jpg b/pictures/Mgmt-GUI_connection_broken.jpg index bd26541..98e5ad1 100644 Binary files a/pictures/Mgmt-GUI_connection_broken.jpg and b/pictures/Mgmt-GUI_connection_broken.jpg differ diff --git a/pictures/Mgmt_GUI_action_ok.jpg b/pictures/Mgmt_GUI_action_ok.jpg index 3b5cc21..e4e3e0c 100644 Binary files a/pictures/Mgmt_GUI_action_ok.jpg and b/pictures/Mgmt_GUI_action_ok.jpg differ diff --git a/platformio.ini b/platformio.ini index 44b9484..c64cc30 100644 --- a/platformio.ini +++ b/platformio.ini @@ -21,7 +21,6 @@ lib_deps_external = ESP Async WebServer https://github.com/me-no-dev/AsyncTCP https://github.com/bblanchon/ArduinoJson.git - olikraus/U8g2 @ ^2.28.8 ; https://github.com/pschatzmann/ESP32-A2DP.git [env:esp32-a12] @@ -33,9 +32,9 @@ board_build.partitions = no_ota.csv build_flags = -DHAL=2 lib_deps = https://github.com/kkloesener/MFRC522_I2C_Library.git + https://github.com/kkloesener/AC101.git ${common.lib_deps_builtin} ${common.lib_deps_external} - yveaux/AC101@^0.0.1 [env:lolin32] platform = espressif32 @@ -47,8 +46,54 @@ build_flags = -DHAL=1 lib_deps = ${common.lib_deps_builtin} ${common.lib_deps_external} + https://github.com/biologist79/rfid.git + https://github.com/tueddy/PN5180-Library.git +upload_port = /dev/cu.SLAB_USBtoUART +monitor_port = /dev/cu.SLAB_USBtoUART + +[env:lolin_d32] +platform = espressif32 +board = lolin_d32 +framework = arduino +monitor_speed = 115200 +board_build.partitions = no_ota.csv +upload_port = /dev/cu.SLAB_USBtoUART +monitor_port = /dev/cu.SLAB_USBtoUART + +[env:lolin_d32_pro] +platform = espressif32 +board = lolin_d32_pro +framework = arduino +monitor_speed = 115200 +board_build.partitions = no_ota.csv +upload_port = /dev/cu.SLAB_USBtoUART +monitor_port = /dev/cu.SLAB_USBtoUART + +[env:nodemcu-32s] +platform = espressif32 +board = nodemcu-32s +framework = arduino +monitor_speed = 115200 +board_build.partitions = no_ota.csv +upload_port = /dev/cu.SLAB_USBtoUART +monitor_port = /dev/cu.SLAB_USBtoUART + +[env:az-delivery-devkit-v4] +platform = espressif32 +board = az-delivery-devkit-v4 +framework = arduino +monitor_speed = 115200 +board_build.partitions = no_ota.csv +upload_port = /dev/cu.SLAB_USBtoUART +monitor_port = /dev/cu.SLAB_USBtoUART + + +;;; Change upload/monitor-port of your board regarding your operating-system! +;MAC: /dev/cu.SLAB_USBtoUART +;WINDOWS: COM3 +;LINUX: /dev/ttyUSB0 (if it's the first USB-device attached, otherwise increase number) + ; Don't forget to run this script if you changed the html-files provided in any way -;extra_scripts = -; pre:processHtml.py - \ No newline at end of file +extra_scripts = + pre:processHtml.py diff --git a/processHtml.py b/processHtml.py index 1e9dd5f..74e2749 100644 --- a/processHtml.py +++ b/processHtml.py @@ -1,57 +1,74 @@ +# -*- coding: utf-8 -*- #!/usr/bin/python +### +# Use this script for creating PROGMEM header files from html files. +# needs pip install requests +## +# html file base names +import requests +import argparse -content = '' -content2 = '' -contentEN = '' -content2EN = '' - -with open('html/website.html', 'r') as r: - data = r.read().replace('\n', '\\\n') - data = data.replace('\"', '\\"') - data = data.replace('\\d', '\\\d') - data = data.replace('\\.', '\\\.') - data = data.replace('\\^', '\\\\^') - content += data - -with open('src/websiteMgmt.h', 'w') as w: - w.write("static const char mgtWebsite[] PROGMEM = \"") - w.write(content) - w.write("\";") - -with open('html/website_EN.html', 'r') as ren: - data = ren.read().replace('\n', '\\\n') - data = data.replace('\"', '\\"') - data = data.replace('\\d', '\\\d') - data = data.replace('\\.', '\\\.') - data = data.replace('\\^', '\\\\^') - contentEN += data - -with open('src/websiteMgmt_EN.h', 'w') as wen: - wen.write("static const char mgtWebsite[] PROGMEM = \"") - wen.write(contentEN) - wen.write("\";") - -with open('html/websiteBasic.html', 'r') as r2: - data = r2.read().replace('\n', '\\\n') - data = data.replace('\"', '\\"') - content2 += data - -with open('src/websiteBasic.h', 'w') as w2: - w2.write("static const char basicWebsite[] PROGMEM = \"") - w2.write(content2) - w2.write("\";") - -with open('html/websiteBasic_EN.html', 'r') as r2en: - data = r2en.read().replace('\n', '\\\n') - data = data.replace('\"', '\\"') - content2EN += data - -with open('src/websiteBasic_EN.h', 'w') as w2en: - w2en.write("static const char basicWebsite[] PROGMEM = \"") - w2en.write(content2EN) - w2en.write("\";") - -r.close() -w.close() -r2.close() -w2.close() \ No newline at end of file +def str2bool(v): + if isinstance(v, bool): + return v + if v.lower() in ('yes', 'true', 't', 'y', '1'): + return True + elif v.lower() in ('no', 'false', 'f', 'n', '0'): + return False + else: + raise argparse.ArgumentTypeError('Boolean value expected.') + +HTML_FILES = ["management","management_EN", "accesspoint", "accesspoint_EN"] + +class htmlHeaderProcessor(object): + + """ + Returns a minified HTML string, uses html-minifier.com api. + """ + def minifyHTML(self, filename): + with open('html/' + filename + '.html', 'r') as r: + data = r.read() + return requests.post('https://html-minifier.com/raw', data=dict(input=data)).text.encode('utf8') + + def escape_html(self, data): + data = data.replace('\n', '\\\n') + data = data.replace('\"', '\\"') + data = data.replace('\\d', '\\\d') + data = data.replace('\\.', '\\\.') + data = data.replace('\\^', '\\\\^') + data = data.replace('%;', '%%;') + return data + + def html_to_c_header(self, filename): + content = "" + with open('html/' + filename + '.html', 'r') as r: + data = r.read() + content += self.escape_html(data) + return content + + + def write_header_file(self, filename, content): + with open('src/HTML' + filename + '.h', 'w') as w: + varname = filename.split('_')[0] + w.write("static const char " + varname + "_HTML[] PROGMEM = \"") + w.write(content) + w.write("\";") + + def main(self): + parser = argparse.ArgumentParser(description='Create c code PROGMEM header files from HTML files.') + parser.add_argument("--minify", type=str2bool, nargs='?', + const=True, default=False, + help="Minify HTML Code") + args = parser.parse_args() + + for file in HTML_FILES: + if args.minify: + + self.header_file_content = self.minifyHTML(file) + self.header_file_content = self.escape_html(self.header_file_content) + else: + self.header_file_content = self.html_to_c_header(file) + self.write_header_file(file, self.header_file_content) + +if __name__ == '__main__': + htmlHeaderProcessor().main() \ No newline at end of file diff --git a/src/HTMLaccesspoint.h b/src/HTMLaccesspoint.h new file mode 100644 index 0000000..8fe5b4a --- /dev/null +++ b/src/HTMLaccesspoint.h @@ -0,0 +1,65 @@ +static const char accesspoint_HTML[] PROGMEM = "\ +\ +\ + WLAN-Einrichtung\ + \ +\ +\ +
\ +

WiFi Configuration

\ +
\ +
\ +
\ +
\ +
\ +

\ + \ +
\ +
\ +

Ready to go?

\ + \ +
\ +\ +\ +"; \ No newline at end of file diff --git a/src/websiteBasic_EN.h b/src/HTMLaccesspoint_EN.h similarity index 93% rename from src/websiteBasic_EN.h rename to src/HTMLaccesspoint_EN.h index 4d4921e..5bab70e 100644 --- a/src/websiteBasic_EN.h +++ b/src/HTMLaccesspoint_EN.h @@ -1,4 +1,4 @@ -static const char basicWebsite[] PROGMEM = "\ +static const char accesspoint_HTML[] PROGMEM = "\ \ \ Wifi-configuration\ diff --git a/src/HTMLmanagement.h b/src/HTMLmanagement.h new file mode 100644 index 0000000..b1e06ff --- /dev/null +++ b/src/HTMLmanagement.h @@ -0,0 +1,728 @@ +static const char management_HTML[] PROGMEM = "\ +\ +\ + ESPuino-Konfiguration\ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ +\ +\ +\ +
\ + \ +
\ +
\ +
\ +
\ +
\ +
\ + \ + \ +
\ + Bitte SSID des WLANs eintragen.\ +
\ + \ + \ + \ + \ +
\ +
\ +
\ + \ + \ +
\ +
\ +
\ +
\ +
\ +
\ +
\ + RFID-Zuweisungen\ +
\ +
\ + \ + \ + \ + \ +
\ +
\ +
\ +
\ + Dateiliste aktualisieren\ +
\ +
\ +
\ +
\ +


Der Prozess kann mehrere Minuten dauern...
\ +
\ +
\ +
\ +
\ + \ + \ +
\ +
\ +
\ + \ + \ +
\ +
\ +
\ +
\ +\ +
\ +
\ +
\ +
\ + RFID-Modifkationen\ +
\ +
\ + \ + \ +
\ + Bitte eine 12-stellige Zahl eingeben.\ +
\ + \ + \ +
\ +
\ +
\ + \ + \ +
\ +
\ +
\ +
\ +
\ +
\ +
\ +\ +
\ +
\ + \ + \ +
\ +
\ + \ + \ + \ + \ + \ + \ +
\ +
\ +
\ + \ + \ +
\ +
\ +
\ +
\ +
\ +
\ +\ +
\ +
\ + \ + \ + \ + \ +
\ +
\ +
\ + \ + \ +
\ +
\ +
\ +
\ +\ +
\ +
\ +\ +
\ +
\ +
\ + Lautstärke\ + \ +
\ +
\ +
\ + \ +
\ + \ +
\ +
\ + \ +
\ + \ +
\ +
\ +
\ +
\ +
\ +
\ + Neopixel (Helligkeit)\ + \ +
\ + \ + \ +
\ +\ + \ +
\ + \ +
\ +
\ +
\ +
\ +
\ +
\ + Deep Sleep\ +\ + \ +
\ +
\ +
\ +
\ +\ +
\ +
\ + Batterie\ +
Status über Neopixel anzeigen
\ +
\ + \ +
\ + \ +
\ +
\ + \ +
\ + \ +
\ +
\ + \ +\ +
\ + \ +
\ +\ +
\ + \ +
\ + \ +
\ +\ +
\ +
\ +
\ +
\ + \ + \ +
\ +
\ +
\ +
\ +
\ +
\ +

NVS-Importer

\ +
\ +
\ + \ + \ +
\ +
\ +
\ + \ +
\ +
\ +
\ +
\ +
\ +\ +\ +\ +"; \ No newline at end of file diff --git a/src/websiteMgmt_EN.h b/src/HTMLmanagement_EN.h similarity index 90% rename from src/websiteMgmt_EN.h rename to src/HTMLmanagement_EN.h index c814ec7..469e09a 100644 --- a/src/websiteMgmt_EN.h +++ b/src/HTMLmanagement_EN.h @@ -1,4 +1,4 @@ -static const char mgtWebsite[] PROGMEM = "\ +static const char management_HTML[] PROGMEM = "\ \ \ ESPuino-configuration\ @@ -180,6 +180,22 @@ static const char mgtWebsite[] PROGMEM = "\ \ \ \ +
\ + \ + \ +
\ +
\ + \ + \ +
\ +
\ + \ + \ +
\ +
\ + \ + \ +
\ \ \ \ @@ -271,7 +287,11 @@ static const char mgtWebsite[] PROGMEM = "\ mVolHeadphone: document.getElementById('maxVolumeHeadphone').value,\ iBright: document.getElementById('initBrightness').value,\ nBright: document.getElementById('nightBrightness').value,\ - iTime: document.getElementById('inactivityTime').value\ + iTime: document.getElementById('inactivityTime').value,\ + vWarning: document.getElementById('warningLowVoltage').value,\ + vIndLow: document.getElementById('voltageIndicatorLow').value,\ + vIndHi: document.getElementById('voltageIndicatorHigh').value,\ + vInt: document.getElementById('voltageCheckInterval').value\ }\ };\ var myJSON = JSON.stringify(myObj);\ diff --git a/src/logmessages.h b/src/logmessages.h index c76fec0..7728bf6 100644 --- a/src/logmessages.h +++ b/src/logmessages.h @@ -18,7 +18,7 @@ static const char freeMemory[] PROGMEM = "Freier Speicher"; static const char writeEntryToNvs[] PROGMEM = "Schreibe Eintrag in NVS"; static const char freeMemoryAfterFree[] PROGMEM = "Freier Speicher nach Aufräumen"; static const char releaseMemoryOfOldPlaylist[] PROGMEM = "Gebe Speicher der alten Playlist frei."; -static const char dirOrFileDoesNotExist[] PROGMEM = "Datei oder Verzeichnis existiert nicht!"; +static const char dirOrFileDoesNotExist[] PROGMEM = "Datei oder Verzeichnis existiert nicht "; static const char unableToAllocateMemForPlaylist[] PROGMEM = "Speicher für Playlist konnte nicht allokiert werden!"; static const char unableToAllocateMem[] PROGMEM = "Speicher konnte nicht allokiert werden!"; static const char fileModeDetected[] PROGMEM = "Dateimodus erkannt."; @@ -47,6 +47,7 @@ static const char endOfPlaylistReached[] PROGMEM = "Ende der Playlist erreicht." static const char trackStartatPos[] PROGMEM = "Titel wird abgespielt ab Position"; static const char rfidScannerReady[] PROGMEM = "RFID-Tags koennen jetzt gescannt werden..."; static const char rfidTagDetected[] PROGMEM = "RFID-Karte erkannt: "; +static const char rfid15693TagDetected[] PROGMEM = "RFID-Karte (ISO-15693) erkannt: "; static const char rfidTagReceived[] PROGMEM = "RFID-Karte empfangen"; static const char rfidTagUnknownInNvs[] PROGMEM = "RFID-Karte ist im NVS nicht hinterlegt."; static const char goToSleepDueToIdle[] PROGMEM = "Gehe in Deep Sleep wegen Inaktivität..."; @@ -138,10 +139,33 @@ static const char ssidNotFoundInNvs[] PROGMEM = "SSID wurde im NVS nicht gefunde static const char wifiPwdNotFoundInNvs[] PROGMEM = "WLAN-Passwort wurde im NVS nicht gefunden."; static const char wifiStaticIpConfigNotFoundInNvs[] PROGMEM = "Statische WLAN-IP-Konfiguration wurde im NVS nicht gefunden."; static const char wifiHostnameNotSet[] PROGMEM = "Keine Hostname-Konfiguration im NVS gefunden."; -static const char mqttConnFailed[] PROGMEM = "Verbindung fehlgeschlagen, versuche erneut in Kürze erneut"; +static const char mqttConnFailed[] PROGMEM = "Verbindung fehlgeschlagen, versuche in Kürze erneut"; static const char restoredHostnameFromNvs[] PROGMEM = "Hostname aus NVS geladen"; static const char currentVoltageMsg[] PROGMEM = "Aktuelle Batteriespannung"; static const char voltageTooLow[] PROGMEM = "Batteriespannung niedrig"; static const char sdBootFailedDeepsleep[] PROGMEM = "Bootgang wegen SD fehlgeschlagen. Gehe in Deepsleep..."; static const char wifiEnabledAfterRestart[] PROGMEM = "WLAN wird aktiviert."; -static const char wifiDisabledAfterRestart[] PROGMEM = "WLAN wird deaktiviert."; \ No newline at end of file +static const char wifiDisabledAfterRestart[] PROGMEM = "WLAN wird deaktiviert."; +static const char voltageIndicatorLowFromNVS[] PROGMEM = "Unterer Spannungslevel (Batterie) fuer Neopixel-Anzeige aus NVS geladen"; +static const char voltageIndicatorHighFromNVS[] PROGMEM = "Oberer Spannungslevel (Batterie) fuer Neopixel-Anzeige aus NVS geladen"; +static const char voltageCheckIntervalFromNVS[] PROGMEM = "Zyklus für Spannungsmessung (Batterie) fuer Neopixel-Anzeige aus NVS geladen"; +static const char warningLowVoltageFromNVS[] PROGMEM = "Spannungslevel (Batterie) fuer Warnung via Neopixel aus NVS geladen"; +static const char unableToRestoreLastRfidFromNVS[] PROGMEM = "Letzte RFID konnte nicht aus NVS geladen werden"; +static const char restoredLastRfidFromNVS[] PROGMEM = "Letzte RFID wurde aus NVS geladen"; +static const char failedOpenFileForWrite[] PROGMEM = "Öffnen der Datei für den Schreibvorgang fehlgeschlagen"; +static const char fileWritten[] PROGMEM = "Schreibe Datei"; +static const char writeFailed[] PROGMEM = "Schreibvorgang fehlgeschlagen"; +static const char writingFile[] PROGMEM = "Schreibe Datei"; +static const char failedToOpenFileForAppending[] PROGMEM = "Öffnen der Datei zum Schreiben der JSON-Datei fehlgeschlagen"; +static const char listingDirectory[] PROGMEM = "Verzeichnisinhalt anzeigen"; +static const char failedToOpenDirectory[] PROGMEM = "Öffnen des Verzeichnisses fehlgeschlagen"; +static const char notADirectory[] PROGMEM = "Kein Verzeichnis"; +static const char sdMountedMmc1BitMode[] PROGMEM = "Versuche SD-Karte wird im SD_MMC-Modus (1 Bit) zu mounten..."; +static const char sdMountedSpiMode[] PROGMEM = "Versuche SD-Karte wird im SPI-Modus zu mounten..."; +static const char backupRecoveryWebsite[] PROGMEM = "

Das Backup-File wird eingespielt...
Zur letzten Seite zurückkehren.

"; +static const char restartWebsite[] PROGMEM = "

Der Tonuino wird neu gestartet...
Zur letzten Seite zurückkehren.

"; +static const char mqttMsgReceived[] PROGMEM = "MQTT-Nachricht empfangen"; +static const char trackPausedAtPos[] PROGMEM = "Titel pausiert bei Position"; +static const char freeHeapWithoutFtp[] PROGMEM = "Freier Heap-Speicher vor FTP-Instanzierung"; +static const char freeHeapWithFtp[] PROGMEM = "Freier Heap-Speicher nach FTP-Instanzierung"; +static const char freeHeapAfterSetup[] PROGMEM = "Freier Heap-Speicher nach Setup-Routine"; \ No newline at end of file diff --git a/src/logmessages_EN.h b/src/logmessages_EN.h index 84bd1a5..5233a90 100644 --- a/src/logmessages_EN.h +++ b/src/logmessages_EN.h @@ -18,7 +18,7 @@ static const char freeMemory[] PROGMEM = "Free memory"; static const char writeEntryToNvs[] PROGMEM = "Storing data to NVS"; static const char freeMemoryAfterFree[] PROGMEM = "Free memory after cleaning"; static const char releaseMemoryOfOldPlaylist[] PROGMEM = "Releasing memory of old playlist."; -static const char dirOrFileDoesNotExist[] PROGMEM = "File of directory does not exist!"; +static const char dirOrFileDoesNotExist[] PROGMEM = "File of directory does not exist"; static const char unableToAllocateMemForPlaylist[] PROGMEM = "Unable to allocate memory for playlist!"; static const char unableToAllocateMem[] PROGMEM = "Unable to allocate memory!"; static const char fileModeDetected[] PROGMEM = "File-mode detected."; @@ -47,6 +47,7 @@ static const char endOfPlaylistReached[] PROGMEM = "Reached end of playlist."; static const char trackStartatPos[] PROGMEM = "Starting track at position"; static const char rfidScannerReady[] PROGMEM = "RFID-tags can now be applied..."; static const char rfidTagDetected[] PROGMEM = "RFID-tag detected: "; +static const char rfid15693TagDetected[] PROGMEM = "RFID-ta (ISO-15693) detected: "; static const char rfidTagReceived[] PROGMEM = "RFID-tag received"; static const char rfidTagUnknownInNvs[] PROGMEM = "RFID-tag is unkown to NVS."; static const char goToSleepDueToIdle[] PROGMEM = "Going to deepsleep due to inactivity-timer..."; @@ -144,4 +145,27 @@ static const char currentVoltageMsg[] PROGMEM = "Current battery-voltage"; static const char voltageTooLow[] PROGMEM = "Low battery-voltage"; static const char sdBootFailedDeepsleep[] PROGMEM = "Failed to boot due to SD. Will go to deepsleep..."; static const char wifiEnabledAfterRestart[] PROGMEM = "WiFi will be enabled."; -static const char wifiDisabledAfterRestart[] PROGMEM = "WiFi will be disabled ."; \ No newline at end of file +static const char wifiDisabledAfterRestart[] PROGMEM = "WiFi will be disabled ."; +static const char voltageIndicatorLowFromNVS[] PROGMEM = "Restored lower voltage-level for Neopixel-display from NVS"; +static const char voltageIndicatorHighFromNVS[] PROGMEM = "Restored upper voltage-level for Neopixel-display from NVS"; +static const char voltageCheckIntervalFromNVS[] PROGMEM = "Restored interval of battery-measurement or Neopixel-display from NVS"; +static const char warningLowVoltageFromNVS[] PROGMEM = "Restored battery-voltage-level for warning via Neopixel from NVS"; +static const char unableToRestoreLastRfidFromNVS[] PROGMEM = "Unable to restore last RFID from NVS"; +static const char restoredLastRfidFromNVS[] PROGMEM = "Restored last RFID from NVS"; +static const char failedOpenFileForWrite[] PROGMEM = "Failed to open file for writing"; +static const char fileWritten[] PROGMEM = "File written"; +static const char writeFailed[] PROGMEM = "Write failed"; +static const char writingFile[] PROGMEM = "Writing file"; +static const char failedToOpenFileForAppending[] PROGMEM = "Failed to open file for appending"; +static const char listingDirectory[] PROGMEM = "Listing directory"; +static const char failedToOpenDirectory[] PROGMEM = "Failed to open directory"; +static const char notADirectory[] PROGMEM = "Not a directory"; +static const char sdMountedMmc1Bit[] PROGMEM = "SD-card in SD_MMC 1 Bit-mode configured..."; +static const char sdMountedSpiMode[] PROGMEM = "SD card mounted in SPI-mode configured..."; +static const char backupRecoveryWebsite[] PROGMEM = "

Backup-file is being applied...
Back to last page.

"; +static const char restartWebsite[] PROGMEM = "

Tonuino is being restarted...
Back to last page.

"; +static const char mqttMsgReceived[] PROGMEM = "MQTT-message received"; +static const char trackPausedAtPos[] PROGMEM = "Track paused at position"; +static const char freeHeapWithoutFtp[] PROGMEM = "Free heap before FTP-allocation"; +static const char freeHeapWithFtp[] PROGMEM = "Free heap after FTP-allocation"; +static const char freeHeapAfterSetup[] PROGMEM = "Free heap after setup"; \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 6c66d35..e2353ef 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,23 +1,20 @@ -// Define modules to compile: -//#define MQTT_ENABLE // Make sure to configure mqtt-server and (optionally) username+pwd -//#define FTP_ENABLE // Enables FTP-server -//#define NEOPIXEL_ENABLE // Don't forget configuration of NUM_LEDS if enabled -//#define NEOPIXEL_REVERSE_ROTATION // Some Neopixels are adressed/soldered counter-clockwise. This can be configured here. -#define LANGUAGE 1 // 1 = deutsch; 2 = english -// #define HAL 2 // HAL 1 = LoLin32, 2 = AI AudioKit - no need to define when using platformIO -#define MFRC522_BUS 2 // If MFRC522 should be connected to I2C-Port(2) or SPI(1) -//#define DISPLAY_I2C // If external Display via I2C connected - tested with SH1106_128X64_NONAME -#define HEADPHONE_ADJUST_ENABLE // Used to adjust (lower) volume for optional headphone-pcb (refer maxVolumeSpeaker / maxVolumeHeadphone) -//#define SINGLE_SPI_ENABLE // If only one SPI-instance should be used instead of two (not yet working!) -//#define SHUTDOWN_IF_SD_BOOT_FAILS // Will put ESP to deepsleep if boot fails due to SD. Really recommend this if there's in battery-mode no other way to restart ESP! Interval adjustable via deepsleepTimeAfterBootFails. - -//#define MEASURE_BATTERY_VOLTAGE // Enables battery-measurement via GPIO (ADC) and voltage-divider -//#define SD_NOT_MANDATORY_ENABLE // Only for debugging-purposes: Tonuino will also start without mounted SD-card anyway (will only try once to mount it). Will overwrite SHUTDOWN_IF_SD_BOOT_FAILS! -//#define BLUETOOTH_ENABLE // Doesn't work currently (so don't enable) as there's not enough DRAM available +// !!! MAKE SURE TO EDIT settings.h !!! + +#include "settings.h" // Contains all user-relevant settings + +// !!! MAKE SURE TO EDIT PLATFORM SPECIFIC settings-****.h !!! +#if (HAL == 1) +#include "settings-lolin32.h" // Contains all user-relevant settings +#elif (HAL == 2) +#include "settings-espa1s.h" // Contains all user-relevant settings +#endif #include #include "Arduino.h" #include +#ifdef MDNS_ENABLE + #include +#endif #ifdef FTP_ENABLE #include "ESP32FtpServer.h" #endif @@ -25,13 +22,26 @@ #include "BluetoothA2DPSink.h" #endif #include "Audio.h" -#ifdef DISPLAY_I2C - #include -#endif #include "SPI.h" -#include "SD.h" #include "FS.h" +#ifdef SD_MMC_1BIT_MODE + #include "SD_MMC.h" +#else + #include "SD.h" +#endif #include "esp_task_wdt.h" +#ifdef RFID_READER_TYPE_MFRC522_SPI + #include +#endif +#ifdef RFID_READER_TYPE_MFRC522_I2C + #include "Wire.h" + #include +#endif +#ifdef RFID_READER_TYPE_PN5180 + #include + #include + #include +#endif #include #ifdef MQTT_ENABLE #include @@ -43,12 +53,13 @@ #if (LANGUAGE == 1) #include "logmessages.h" - #include "websiteMgmt.h" - #include "websiteBasic.h" -#elif (LANGUAGE == 2) + #include "HTMLmanagement.h" + #include "HTMLaccesspoint.h" +#endif +#if (LANGUAGE == 2) #include "logmessages_EN.h" - #include "websiteMgmt_EN.h" - #include "websiteBasic_EN.h" + #include "HTMLmanagement_EN.h" + #include "HTMLaccesspoint_EN.h" #endif #include @@ -57,71 +68,24 @@ #include - // Info-docs: // https://docs.aws.amazon.com/de_de/freertos-kernel/latest/dg/queue-management.html // https://arduino-esp8266.readthedocs.io/en/latest/PROGMEM.html#how-do-i-declare-a-global-flash-string-and-use-it -// Loglevels -#define LOGLEVEL_ERROR 1 // only errors -#define LOGLEVEL_NOTICE 2 // errors + important messages -#define LOGLEVEL_INFO 3 // infos + errors + important messages -#define LOGLEVEL_DEBUG 4 // almost everything - -// Serial-logging-configuration -const uint8_t serialDebug = LOGLEVEL_INFO; // Current loglevel for serial console - // Serial-logging buffer uint8_t serialLoglength = 200; char *logBuf = (char*) calloc(serialLoglength, sizeof(char)); // Buffer for all log-messages -#if (HAL == 1) -#include - -// GPIOs (uSD card-reader) -#define SPISD_CS 15 -#ifndef SINGLE_SPI_ENABLE - #define SPISD_MOSI 13 - #define SPISD_MISO 16 // 12 doesn't work with some devel-boards - #define SPISD_SCK 14 +#ifdef HEADPHONE_ADJUST_ENABLE + bool headphoneLastDetectionState; + uint32_t headphoneLastDetectionTimestamp = 0; #endif -// GPIOs (RFID-readercurrentRfidTagId) -#define RST_PIN 99 // Not necessary but has to be set anyway; so let's use a dummy-number -#define RFID_CS 21 -#define RFID_MOSI 23 -#define RFID_MISO 19 -#define RFID_SCK 18 - -// GPIOs (DAC) -#define I2S_DOUT 25 -#define I2S_BCLK 27 -#define I2S_LRC 26 - -// GPIO used to trigger transistor-circuit / RFID-reader -#define POWER 17 - -// GPIOs (Rotary encoder) -#define DREHENCODER_CLK 34 // If you want to reverse encoder's direction, just switch GPIOs of CLK with DT -#define DREHENCODER_DT 35 // If you want to reverse encoder's direction, just switch GPIOs of CLK with DT -#define DREHENCODER_BUTTON 32 // Button is used to switch Tonuino on and off - -// GPIOs (Control-buttons) -#define PAUSEPLAY_BUTTON 5 -#define NEXT_BUTTON 4 -#define PREVIOUS_BUTTON 2 // Please note: as of 19.11.2020 changed from 33 to 2 - -// GPIOs (LEDs) -#define LED_PIN 12 // Pin where Neopixel is connected to +#ifdef BLUETOOTH_ENABLE + BluetoothA2DPSink a2dp_sink; +#endif #ifdef MEASURE_BATTERY_VOLTAGE - #define VOLTAGE_READ_PIN 33 // Pin to monitor battery-voltage. Change to 35 if you're using Lolin D32 or Lolin D32 pro - uint16_t r1 = 391; // First resistor of voltage-divider (kOhms) (measure exact value with multimeter!) - uint8_t r2 = 128; // Second resistor of voltage-divider (kOhms) (measure exact value with multimeter!) - float warningLowVoltage = 3.22; // If battery-voltage is >= this value, a cyclic warning will be indicated by Neopixel - uint8_t voltageCheckInterval = 5; // How of battery-voltage is measured (in minutes) - - // Internal values float refVoltage = 3.3; // Operation-voltage of ESP32; don't change! uint16_t maxAnalogValue = 4095; // Highest value given by analogRead(); don't change! uint32_t lastVoltageCheckTimestamp = 0; @@ -130,96 +94,8 @@ char *logBuf = (char*) calloc(serialLoglength, sizeof(char)); // Buffer for all #endif #endif -// HeadPhoneDetect -#define HP_DETECT 22 // Detects if there's a plug in the headphone jack or not - -// END HAL 1 -#elif (HAL == 2) - -// GPIOs (uSD card-reader) -#define SPISD_CS 13 // internal -#define SPISD_MOSI 15 // JT_MTDO -#define SPISD_MISO 2 -#define SPISD_SCK 14 // JT_MTMS - -// GPIO used to trigger transistor-circuit / RFID-reader -#define POWER 19 - -#include "AC101.h" -static TwoWire i2cBusOne = TwoWire(0); -static AC101 ac(i2cBusOne); - -#if (MFRC522_BUS == 1) -// GPIOs (RFID-readercurrentRfidTagId) -#include // Custom Lib needed -#define MFRC522_RST_PIN 35 // 14-pin-header -#define MFRC522_CS_PIN 12 // JT_MTDI -extern SPIClass SPI_MFRC; -MFRC522 mfrc522(RFID_CS, RST_PIN); -#elif (MFRC522_BUS == 2) -#include -#include -#define MFRC522_RST_PIN 12 // needed for i2c-comm MTDI on JTAG -#define MFRC522_ADDR 0x28 // default Address of MFRC522 -// second I2C GPIOs -#define ext_IIC_CLK 23 // 14-pin-header -#define ext_IIC_DATA 18 // 14-pin-header -static TwoWire i2cBusTwo = TwoWire(1); -static MFRC522 mfrc522(MFRC522_ADDR, MFRC522_RST_PIN, i2cBusTwo); -#endif - -// DAC (internal) -// #define I2S_DSIN 25 // internal - not used -// #define I2S_MCLK 0 // internal - not used -#define I2S_BCLK 27 // internal -#define I2S_LRC 26 // internal -#define I2S_DOUT 25 // internal - -// I2C GPIOs -#define IIC_CLK 32 // internal -#define IIC_DATA 33 // internal - -// Amp enable -#define GPIO_PA_EN GPIO_NUM_21 // internal -#define GPIO_SEL_PA_EN GPIO_SEL_21 - -// GPIOs (Rotary encoder) -#define DREHENCODER_CLK 5 -#define DREHENCODER_DT 18 -#define DREHENCODER_BUTTON 4 // Solder to pin8 of SD - -// GPIOs (Control-buttons) // Currently deactivated; please read README.md -#define PAUSEPLAY_BUTTON 36 -#define NEXT_BUTTON 199 -#define PREVIOUS_BUTTON 198 - -// GPIOs (LEDs) -#define LED_PIN 23 - -// HeadPhoneDetect -#define HP_DETECT 39 // Detects if there's a plug in the headphone jack or not - -// END HAL 2 -#endif - -// GPIO to detect if headphone was plugged in (pulled to GND) -#ifdef HEADPHONE_ADJUST_ENABLE - uint16_t headphoneLastDetectionDebounce = 1000; // Debounce-interval in ms when plugging in headphone - - // Internal values - bool headphoneLastDetectionState; - uint32_t headphoneLastDetectionTimestamp = 0; -#endif - -#ifdef BLUETOOTH_ENABLE - BluetoothA2DPSink a2dp_sink; -#endif - -// Neopixel-configuration -#ifdef NEOPIXEL_ENABLE - #define NUM_LEDS 24 // number of LEDs - #define CHIPSET WS2812B // type of Neopixel - #define COLOR_ORDER GRB +#ifdef PLAY_LAST_RFID_AFTER_REBOOT + bool recoverLastRfid = true; #endif // Track-Control @@ -256,7 +132,7 @@ static MFRC522 mfrc522(MFRC522_ADDR, MFRC522_RST_PIN, i2cBusTwo); #define REPEAT_PLAYLIST 110 // Changes active playmode to endless-loop (for a playlist) #define REPEAT_TRACK 111 // Changes active playmode to endless-loop (for a single track) #define DIMM_LEDS_NIGHTMODE 120 // Changes LED-brightness -#define TOGGLE_WIFI_STATUS 130 // Toggles WiFi-status; effective after next reboot +#define TOGGLE_WIFI_STATUS 130 // Toggles WiFi-status // Repeat-Modes #define NO_REPEAT 0 // No repeat @@ -296,18 +172,13 @@ uint8_t initialLedBrightness = 16; // Initial brightness of uint8_t ledBrightness = initialLedBrightness; uint8_t nightLedBrightness = 2; // Brightness of Neopixel in nightmode -// Automatic restart -#ifdef SHUTDOWN_IF_SD_BOOT_FAILS - uint32_t deepsleepTimeAfterBootFails = 20; // Automatic restart takes place if boot was not successful after this period (in seconds) -#endif // MQTT bool enableMqtt = true; #ifdef MQTT_ENABLE - uint8_t mqttFailCount = 3; // Number of times mqtt-reconnect is allowed to fail. If >= mqttFailCount to further reconnects take place uint8_t const stillOnlineInterval = 60; // Interval 'I'm still alive' is sent via MQTT (in seconds) + uint32_t mqttLastRetryTimestamp = 0; #endif -// RFID -#define RFID_SCAN_INTERVAL 300 // in ms + uint8_t const cardIdSize = 4; // RFID // Volume uint8_t maxVolume = 21; // Current maximum volume that can be adjusted @@ -318,7 +189,7 @@ uint8_t initVolume = 3; // 0...21 (If not found uint8_t maxVolumeHeadphone = 11; // Maximum volume that can be adjusted in headphone-mode (default; can be changed later via GUI) #endif // Sleep -uint8_t maxInactivityTime = 10; // Time in minutes, after uC is put to deep sleep because of inactivity +uint8_t maxInactivityTime = 10; // Time in minutes, after uC is put to deep sleep because of inactivity (and modified later via GUI) uint8_t sleepTimer = 30; // Sleep timer in minutes that can be optionally used (and modified later via MQTT or RFID) // FTP uint8_t ftpUserLength = 10; // Length will be published n-1 as maxlength to GUI @@ -326,12 +197,6 @@ uint8_t ftpPasswordLength = 15; // Length will be publis char *ftpUser = strndup((char*) "esp32", ftpUserLength); // FTP-user (default; can be changed later via GUI) char *ftpPassword = strndup((char*) "esp32", ftpPasswordLength); // FTP-password (default; can be changed later via GUI) -// Button-configuration (change according your needs) -uint8_t buttonDebounceInterval = 50; // Interval in ms to software-debounce buttons -uint16_t intervalToLongPress = 700; // Interval in ms to distinguish between short and long press of previous/next-button - -// Where to store the backup-file -static const char backupFile[] PROGMEM = "/backup.txt"; // File is written every time a (new) RFID-assignment via GUI is done // Don't change anything here unless you know what you're doing // HELPER // @@ -347,6 +212,8 @@ bool wifiNeedsRestart = false; bool showLedOk = false; bool showPlaylistProgress = false; bool showRewind = false; + bool showLedVoltage = false; + bool pauseNeopixel = false; // Used to pause Neopixel-signalisation (while NVS-writes as this leads to exceptions; don't know why) #endif // MQTT #ifdef MQTT_ENABLE @@ -369,7 +236,6 @@ uint8_t currentVolume = initVolume; //////////// // AP-WiFi -static const char accessPointNetworkSSID[] PROGMEM = "Tonuino"; // Access-point's SSID IPAddress apIP(192, 168, 4, 1); // Access-point's static IP IPAddress apNetmask(255, 255, 255, 0); // Access-point's netmask bool accessPointStarted = false; @@ -386,28 +252,6 @@ char *mqtt_server = strndup((char*) "192.168.2.43", mqttServerLength); // I char *mqttUser = strndup((char*) "mqtt-user", mqttUserLength); // MQTT-user char *mqttPassword = strndup((char*) "mqtt-password", mqttPasswordLength); // MQTT-password*/ -#ifdef MQTT_ENABLE - #define DEVICE_HOSTNAME "ESP32-Tonuino" // Name that that is used for MQTT - static const char topicSleepCmnd[] PROGMEM = "Cmnd/Tonuino/Sleep"; - static const char topicSleepState[] PROGMEM = "State/Tonuino/Sleep"; - static const char topicTrackCmnd[] PROGMEM = "Cmnd/Tonuino/Track"; - static const char topicTrackState[] PROGMEM = "State/Tonuino/Track"; - static const char topicTrackControlCmnd[] PROGMEM = "Cmnd/Tonuino/TrackControl"; - static const char topicLoudnessCmnd[] PROGMEM = "Cmnd/Tonuino/Loudness"; - static const char topicLoudnessState[] PROGMEM = "State/Tonuino/Loudness"; - static const char topicSleepTimerCmnd[] PROGMEM = "Cmnd/Tonuino/SleepTimer"; - static const char topicSleepTimerState[] PROGMEM = "State/Tonuino/SleepTimer"; - static const char topicState[] PROGMEM = "State/Tonuino/State"; - static const char topicCurrentIPv4IP[] PROGMEM = "State/Tonuino/IPv4"; - static const char topicLockControlsCmnd[] PROGMEM ="Cmnd/Tonuino/LockControls"; - static const char topicLockControlsState[] PROGMEM ="State/Tonuino/LockControls"; - static const char topicPlaymodeState[] PROGMEM = "State/Tonuino/Playmode"; - static const char topicRepeatModeCmnd[] PROGMEM = "Cmnd/Tonuino/RepeatMode"; - static const char topicRepeatModeState[] PROGMEM = "State/Tonuino/RepeatMode"; - static const char topicLedBrightnessCmnd[] PROGMEM = "Cmnd/Tonuino/LedBrightness"; - static const char topicLedBrightnessState[] PROGMEM = "State/Tonuino/LedBrightness"; - static const char topicBatteryVoltage[] PROGMEM = "State/Tonuino/Voltage"; -#endif char stringDelimiter[] = "#"; // Character used to encapsulate data in linear NVS-strings (don't change) char stringOuterDelimiter[] = "^"; // Character used to encapsulate encapsulated data along with RFID-ID in backup-file @@ -420,21 +264,40 @@ AsyncWebServer wServer(80); AsyncWebSocket ws("/ws"); AsyncEventSource events("/events"); -static const char backupRecoveryWebsite[] PROGMEM = "

Das Backup-File wird eingespielt...
Zur letzten Seite zurückkehren.

"; -static const char restartWebsite[] PROGMEM = "

Der Tonuino wird neu gestartet...
Zur letzten Seite zurückkehren.

"; - // Audio/mp3 +#ifndef SD_MMC_1BIT_MODE SPIClass spiSD(HSPI); +fs::FS FSystem = (fs::FS)SD; +#else +fs::FS FSystem = (fs::FS)SD_MMC; +#endif + TaskHandle_t mp3Play; TaskHandle_t rfid; + #ifdef NEOPIXEL_ENABLE TaskHandle_t LED; #endif +#if (HAL == 2) +#include "AC101.h" + static TwoWire i2cBusOne = TwoWire(0); + static AC101 ac(i2cBusOne); +#endif +#ifdef RFID_READER_TYPE_MFRC522_SPI + static MFRC522 mfrc522(RFID_CS, RST_PIN); +#endif +#ifdef RFID_READER_TYPE_MFRC522_I2C + static TwoWire i2cBusTwo = TwoWire(1); + static MFRC522 mfrc522(MFRC522_ADDR, MFRC522_RST_PIN, i2cBusTwo); +#endif + // FTP #ifdef FTP_ENABLE - FtpServer ftpSrv; + FtpServer *ftpSrv; // Heap-alloction takes place later (when needed) + bool ftpEnableLastStatus = false; + bool ftpEnableCurrentStatus = false; #endif // Info: SSID / password are stored in NVS @@ -497,6 +360,7 @@ void headphoneVolumeManager(void); bool isNumber(const char *str); void loggerNl(const char *str, const uint8_t logLevel); void logger(const char *str, const uint8_t logLevel); +float measureBatteryVoltage(void); #ifdef MQTT_ENABLE bool publishMqtt(const char *topic, const char *payload, bool retained); #endif @@ -560,13 +424,206 @@ void IRAM_ATTR onTimer() { } +#ifdef PLAY_LAST_RFID_AFTER_REBOOT + // Store last RFID-tag to NVS + void storeLastRfidPlayed(char *_rfid) { + prefsSettings.putString("lastRfid", (String) _rfid); + } + + // Get last RFID-tag applied from NVS + void recoverLastRfidPlayed(void) { + if (recoverLastRfid) { + recoverLastRfid = false; + String lastRfidPlayed = prefsSettings.getString("lastRfid", "-1"); + if (!lastRfidPlayed.compareTo("-1")) { + loggerNl((char *) FPSTR(unableToRestoreLastRfidFromNVS), LOGLEVEL_INFO); + } else { + char *lastRfid = strdup(lastRfidPlayed.c_str()); + xQueueSend(rfidCardQueue, &lastRfid, 0); + snprintf(logBuf, serialLoglength, "%s: %s", (char *) FPSTR(restoredLastRfidFromNVS), lastRfidPlayed.c_str()); + loggerNl(logBuf, LOGLEVEL_INFO); + } + } + } +#endif + +// Creates a new file on the SD-card. +void createFile(fs::FS &fs, const char * path, const char * message) { + snprintf(logBuf, serialLoglength, "%s: %s", (char *) FPSTR(writingFile), path); + loggerNl(logBuf, LOGLEVEL_DEBUG); + File file = fs.open(path, FILE_WRITE); + if (!file) { + snprintf(logBuf, serialLoglength, "%s", (char *) FPSTR(failedOpenFileForWrite)); + loggerNl(logBuf, LOGLEVEL_ERROR); + return; + } + if (file.print(message)) { + snprintf(logBuf, serialLoglength, "%s", (char *) FPSTR(fileWritten)); + loggerNl(logBuf, LOGLEVEL_DEBUG); + } else { + snprintf(logBuf, serialLoglength, "%s", (char *) FPSTR(writeFailed)); + loggerNl(logBuf, LOGLEVEL_ERROR); + } + file.close(); +} + + +bool fileExists(fs::FS &fs, const char *file) { + return fs.exists(file); +} + +// Appends raw input to a file +void appendToFile(fs::FS &fs, const char *path, const char *text) { + File file = fs.open(path, FILE_APPEND); + esp_task_wdt_reset(); + file.print(text); + file.close(); +} + +// indicates if the given node is first node of file +bool isFirstJSONtNode = true; + +// Helper-function for writing file-index to json-file. +// This function appends a new json-node for files/directories to a given file +void appendNodeToJSONFile(fs::FS &fs, const char * path, const char *filename, const char *parent, const char *type ) { + // Serial.printf("Appending to file: %s\n", path); + snprintf(logBuf, serialLoglength, "%s: %s\n", (char *) FPSTR(listingDirectory), filename); + loggerNl(logBuf, LOGLEVEL_DEBUG); + File file = fs.open(path, FILE_APPEND); + // i/o is timing critical keep all stuff running + esp_task_wdt_reset(); + if (!file) { + snprintf(logBuf, serialLoglength, (char *) FPSTR(failedToOpenFileForAppending)); + loggerNl(logBuf, LOGLEVEL_DEBUG); + return; + } + + if (!isFirstJSONtNode) { + file.print(","); + } + + //TODO: write a minified json, without all those whitespaces + // it is just easier to debug when json is in a nice format + // anyway ugly but works and is stable + file.print(F("{\"id\":\"")); + file.print(filename); + file.print(F("\",\"parent\":\"")); + file.print(parent); + file.print(F("\",\"type\":\"")); + file.print(type); + file.print(F("\",\"text\":\"")); + file.print(filename); + file.print(F("\"}")); + // i/o is timing critical keep all stuff running + esp_task_wdt_reset(); + yield(); + file.close(); + + if (isFirstJSONtNode) { + isFirstJSONtNode = false; + } +} + +// Checks if a path is valid. (e.g. hidden path is not valid) +bool pathValid(const char *_fileItem) { + const char ch = '/'; + char *subst; + subst = strrchr(_fileItem, ch); // Don't use files that start with . + return (!startsWith(subst, (char *) "/.")); +} + +// SD-Card index-parser. Parses the SD-card directories by a given filepath-depth recursively and appends the +// found files and directories to files.json-file. +char *fileNameBuf = (char *) calloc(255, sizeof(char)); // In heap to save static memory + +void parseSDFileList(fs::FS &fs, const char * dirname, const char * parent, uint8_t levels) { + esp_task_wdt_reset(); + + yield(); + File root = fs.open(dirname); + + if (!root) { + snprintf(logBuf, serialLoglength, (char *) FPSTR(failedToOpenDirectory)); + loggerNl(logBuf, LOGLEVEL_DEBUG); + return; + } + + if (!root.isDirectory()) { + snprintf(logBuf, serialLoglength, (char *) FPSTR(notADirectory)); + loggerNl(logBuf, LOGLEVEL_DEBUG); + return; + } + File file = root.openNextFile(); + + while(file) { + esp_task_wdt_reset(); + const char *parent; + + if (strcmp(root.name(), "/") == 0 || root.name() == 0) { + parent = "#\0"; + } else { + parent = root.name(); + } + if (file.name() == 0 ) { + continue; + } + + strncpy(fileNameBuf, (char *) file.name(), 255); + + // we have a folder + if(file.isDirectory()) { + + esp_task_wdt_reset(); + if (pathValid(fileNameBuf)) { + sendWebsocketData(0, 31); + appendNodeToJSONFile(FSystem, DIRECTORY_INDEX_FILE, fileNameBuf, parent, "folder" ); + // check for next subfolder + if(levels){ + parseSDFileList(fs, fileNameBuf, root.name(), levels -1); + } + } + // we have a file + } else { + + if (fileValid(fileNameBuf)) { + appendNodeToJSONFile(fs, DIRECTORY_INDEX_FILE, fileNameBuf, parent, "file" ); + } + } + vTaskDelay(portTICK_PERIOD_MS*50); + file = root.openNextFile(); + // i/o is timing critical keep all stuff running + esp_task_wdt_reset(); + } + +} + +// Public function for creating file-index json on SD-card. It notifies the user-client +// via websockets when the indexing is done. +void createJSONFileList() { + createFile(FSystem, DIRECTORY_INDEX_FILE, "["); + parseSDFileList(FSystem, "/", NULL, FS_DEPTH); + appendToFile(FSystem, DIRECTORY_INDEX_FILE, "]"); + isFirstJSONtNode = true; + sendWebsocketData(0,30); +} + + +void fileHandlingTask(void *arguments) { + createJSONFileList(); + esp_task_wdt_reset(); + vTaskDelete( NULL ); +} + // Measures voltage of a battery as per interval or after bootup (after allowing a few seconds to settle down) #ifdef MEASURE_BATTERY_VOLTAGE + float measureBatteryVoltage(void) { + float factor = 1 / ((float) rdiv2/(rdiv2+rdiv1)); + return ((float) analogRead(VOLTAGE_READ_PIN) / maxAnalogValue) * refVoltage * factor; + } + void batteryVoltageTester(void) { if ((millis() - lastVoltageCheckTimestamp >= voltageCheckInterval*60000) || (!lastVoltageCheckTimestamp && millis()>=10000)) { - float factor = 1 / ((float) r1/(r1+r2)); - float voltage = ((float) analogRead(VOLTAGE_READ_PIN) / maxAnalogValue) * refVoltage * factor; - + float voltage = measureBatteryVoltage(); #ifdef NEOPIXEL_ENABLE if (voltage <= warningLowVoltage) { snprintf(logBuf, serialLoglength, "%s: (%.2f V)", (char *) FPSTR(voltageTooLow), voltage); @@ -642,6 +699,21 @@ void doButtonActions(void) { return; } + // FTP-enable + #ifdef FTP_ENABLE + if (!ftpEnableLastStatus && !ftpEnableCurrentStatus) { + if (buttons[0].isPressed && buttons[2].isPressed) { + buttons[0].isPressed = false; + buttons[2].isPressed = false; + ftpEnableLastStatus = true; + #ifdef NEOPIXEL_ENABLE + showLedOk = true; + #endif + return; + } + } + #endif + for (uint8_t i=0; i < sizeof(buttons) / sizeof(buttons[0]); i++) { if (buttons[i].isPressed) { if (buttons[i].lastReleasedTimestamp > buttons[i].lastPressedTimestamp) { @@ -686,8 +758,20 @@ void doButtonActions(void) { break; case 3: - //gotoSleep = true; - break; + buttons[i].isPressed = false; + #ifdef MEASURE_BATTERY_VOLTAGE + float voltage = measureBatteryVoltage(); + snprintf(logBuf, serialLoglength, "%s: %.2f V", (char *) FPSTR(currentVoltageMsg), voltage); + loggerNl(logBuf, LOGLEVEL_INFO); + #ifdef NEOPIXEL_ENABLE + showLedVoltage = true; + #endif + #ifdef MQTT_ENABLE + char vstr[6]; + snprintf(vstr, 6, "%.2f", voltage); + publishMqtt((char *) FPSTR(topicBatteryVoltage), vstr, false); + #endif + #endif } } } @@ -744,10 +828,17 @@ void postHeartbeatViaMqtt(void) { Manages MQTT-subscriptions. */ bool reconnect() { - uint8_t maxRetries = 10; uint8_t connect = false; + uint8_t i = 0; + + if (!mqttLastRetryTimestamp || millis() - mqttLastRetryTimestamp >= mqttRetryInterval * 1000) { + mqttLastRetryTimestamp = millis(); + } else { + return false; + } - while (!MQTTclient.connected() && mqttFailCount < maxRetries) { + while (!MQTTclient.connected() && i < mqttMaxRetriesPerInterval) { + i++; snprintf(logBuf, serialLoglength, "%s %s", (char *) FPSTR(tryConnectMqttS), mqtt_server); loggerNl(logBuf, LOGLEVEL_NOTICE); @@ -806,10 +897,8 @@ bool reconnect() { return MQTTclient.connected(); } else { - snprintf(logBuf, serialLoglength, "%s: rc=%i (%d / %d)", (char *) FPSTR(mqttConnFailed), MQTTclient.state(), mqttFailCount+1, maxRetries); + snprintf(logBuf, serialLoglength, "%s: rc=%i (%d / %d)", (char *) FPSTR(mqttConnFailed), MQTTclient.state(), i, mqttMaxRetriesPerInterval); loggerNl(logBuf, LOGLEVEL_ERROR); - mqttFailCount++; - delay(500); } } return false; @@ -821,7 +910,7 @@ void callback(const char *topic, const byte *payload, uint32_t length) { char *receivedString = strndup((char*)payload, length); char *mqttTopic = strdup(topic); - snprintf(logBuf, serialLoglength, "MQTT-Nachricht empfangen: [Topic: %s] [Kommando: %s]", mqttTopic, receivedString); + snprintf(logBuf, serialLoglength, "%s: [Topic: %s] [Command: %s]", (char *) FPSTR(mqttMsgReceived), mqttTopic, receivedString); loggerNl(logBuf, LOGLEVEL_INFO); // Go to sleep? @@ -835,7 +924,7 @@ void callback(const char *topic, const byte *payload, uint32_t length) { else if (strcmp_P(topic, topicTrackCmnd) == 0) { char *_rfidId = strdup(receivedString); xQueueSend(rfidCardQueue, &_rfidId, 0); - free(_rfidId); + //free(_rfidId); } // Loudness to change? else if (strcmp_P(topic, topicLoudnessCmnd) == 0) { @@ -1261,13 +1350,16 @@ char ** returnPlaylistFromSD(File _fileOrDirectory) { snprintf(logBuf, serialLoglength, "%s: %d", (char *) FPSTR(numberOfValidFiles), cnt); loggerNl(logBuf, LOGLEVEL_NOTICE); - return ++files; // return ptr+1 (starting at 1st payload-item) + return ++files; // return ptr+1 (starting at 1st payload-item); ptr+0 contains number of items } /* Wraps putString for writing settings into NVS for RFID-cards. Returns number of characters written. */ size_t nvsRfidWriteWrapper (const char *_rfidCardId, const char *_track, const uint32_t _playPosition, const uint8_t _playMode, const uint16_t _trackLastPlayed, const uint16_t _numberOfTracks) { + #ifdef NEOPIXEL_ENABLE + pauseNeopixel = true; // Workaround to prevent exceptions due to Neopixel-signalisation while NVS-write + #endif char prefBuf[275]; char trackBuf[255]; snprintf(trackBuf, sizeof(trackBuf) / sizeof(trackBuf[0]), _track); @@ -1286,9 +1378,16 @@ size_t nvsRfidWriteWrapper (const char *_rfidCardId, const char *_track, const u } snprintf(prefBuf, sizeof(prefBuf) / sizeof(prefBuf[0]), "%s%s%s%u%s%d%s%u", stringDelimiter, trackBuf, stringDelimiter, _playPosition, stringDelimiter, _playMode, stringDelimiter, _trackLastPlayed); - snprintf(logBuf, serialLoglength, "Schreibe '%s' in NVS für RFID-Card-ID %s mit playmode %d und letzter Track %u\n", prefBuf, _rfidCardId, _playMode, _trackLastPlayed); + #if (LANGUAGE == 1) + snprintf(logBuf, serialLoglength, "Schreibe '%s' in NVS für RFID-Card-ID %s mit playmode %d und letzter Track %u\n", prefBuf, _rfidCardId, _playMode, _trackLastPlayed); + #else + snprintf(logBuf, serialLoglength, "Write '%s' to NVS for RFID-Card-ID %s with playmode %d and last track %u\n", prefBuf, _rfidCardId, _playMode, _trackLastPlayed); + #endif logger(logBuf, LOGLEVEL_INFO); loggerNl(prefBuf, LOGLEVEL_INFO); + #ifdef NEOPIXEL_ENABLE + pauseNeopixel = false; + #endif return prefsRfid.putString(_rfidCardId, prefBuf); } @@ -1326,7 +1425,11 @@ void playAudio(void *parameter) { playProperties.pausePlay = !playProperties.pausePlay; } audio.stopSong(); - snprintf(logBuf, serialLoglength, "%s mit %d Titel(n)", (char *) FPSTR(newPlaylistReceived), playProperties.numberOfTracks); + #if (LANGUAGE == 1) + snprintf(logBuf, serialLoglength, "%s mit %d Titel(n)", (char *) FPSTR(newPlaylistReceived), playProperties.numberOfTracks); + #else + snprintf(logBuf, serialLoglength, "%s with %d track(s)", (char *) FPSTR(newPlaylistReceived), playProperties.numberOfTracks); + #endif loggerNl(logBuf, LOGLEVEL_NOTICE); Serial.print(F("Free heap: ")); Serial.println(ESP.getFreeHeap()); @@ -1386,7 +1489,7 @@ void playAudio(void *parameter) { trackCommand = 0; loggerNl((char *) FPSTR(cmndPause), LOGLEVEL_INFO); if (playProperties.saveLastPlayPosition && !playProperties.pausePlay) { - snprintf(logBuf, serialLoglength, "Titel wurde bei Position %u pausiert.", audio.getFilePos()); + snprintf(logBuf, serialLoglength, "%s: %u", FPSTR(trackPausedAtPos), audio.getFilePos()); loggerNl(logBuf, LOGLEVEL_INFO); nvsRfidWriteWrapper(playProperties.playRfidTag, *(playProperties.playlist + playProperties.currentTrackNumber), audio.getFilePos(), playProperties.playMode, playProperties.currentTrackNumber, playProperties.numberOfTracks); } @@ -1467,7 +1570,7 @@ void playAudio(void *parameter) { #ifdef NEOPIXEL_ENABLE showRewind = true; #endif - audio.connecttoSD(*(playProperties.playlist + playProperties.currentTrackNumber)); + audio.connecttoFS(FSystem, *(playProperties.playlist + playProperties.currentTrackNumber)); loggerNl((char *) FPSTR(trackStart), LOGLEVEL_INFO); trackCommand = 0; continue; @@ -1557,7 +1660,11 @@ void playAudio(void *parameter) { nvsRfidWriteWrapper(playProperties.playRfidTag, *(playProperties.playlist + 0), 0, playProperties.playMode, 0, playProperties.numberOfTracks); } #ifdef MQTT_ENABLE - publishMqtt((char *) FPSTR(topicTrackState), "", false); + #if (LANGUAGE == 1) + publishMqtt((char *) FPSTR(topicTrackState), "", false); + #else + publishMqtt((char *) FPSTR(topicTrackState), "", false); + #endif #endif playProperties.playlistFinished = true; playProperties.playMode = NO_PLAYLIST; @@ -1590,13 +1697,13 @@ void playAudio(void *parameter) { playProperties.playlistFinished = false; } else { // Files from SD - if (!SD.exists(*(playProperties.playlist + playProperties.currentTrackNumber))) { // Check first if file/folder exists - snprintf(logBuf, serialLoglength, "Datei/Ordner '%s' existiert nicht", *(playProperties.playlist + playProperties.currentTrackNumber)); + if (!FSystem.exists(*(playProperties.playlist + playProperties.currentTrackNumber))) { // Check first if file/folder exists + snprintf(logBuf, serialLoglength, "%s: %s", (char *) FPSTR(dirOrFileDoesNotExist), *(playProperties.playlist + playProperties.currentTrackNumber)); loggerNl(logBuf, LOGLEVEL_ERROR); playProperties.trackFinished = true; continue; } else { - audio.connecttoSD(*(playProperties.playlist + playProperties.currentTrackNumber)); + audio.connecttoFS(FSystem, *(playProperties.playlist + playProperties.currentTrackNumber)); #ifdef NEOPIXEL_ENABLE showPlaylistProgress = true; #endif @@ -1610,7 +1717,11 @@ void playAudio(void *parameter) { #ifdef MQTT_ENABLE publishMqtt((char *) FPSTR(topicTrackState), buf, false); #endif - snprintf(logBuf, serialLoglength, "'%s' wird abgespielt (%d von %d)", *(playProperties.playlist + playProperties.currentTrackNumber), (playProperties.currentTrackNumber+1) , playProperties.numberOfTracks); + #if (LANGUAGE == 1) + snprintf(logBuf, serialLoglength, "'%s' wird abgespielt (%d von %d)", *(playProperties.playlist + playProperties.currentTrackNumber), (playProperties.currentTrackNumber+1) , playProperties.numberOfTracks); + #else + snprintf(logBuf, serialLoglength, "'%s' is being played (%d of %d)", *(playProperties.playlist + playProperties.currentTrackNumber), (playProperties.currentTrackNumber+1) , playProperties.numberOfTracks); + #endif loggerNl(logBuf, LOGLEVEL_NOTICE); playProperties.playlistFinished = false; } @@ -1642,6 +1753,7 @@ void playAudio(void *parameter) { } +#if defined RFID_READER_TYPE_MFRC522_SPI || defined RFID_READER_TYPE_MFRC522_I2C // Instructs RFID-scanner to scan for new RFID-tags void rfidScanner(void *parameter) { byte cardId[cardIdSize]; @@ -1697,6 +1809,122 @@ void rfidScanner(void *parameter) { } vTaskDelete(NULL); } +#endif + + + +#ifdef RFID_READER_TYPE_PN5180 +// Instructs RFID-scanner to scan for new RFID-tags using PN5180 +void rfidScanner(void *parameter) { + static PN5180ISO14443 nfc14443(RFID_CS, RFID_BUSY, RFID_RST); + static PN5180ISO15693 nfc15693(RFID_CS, RFID_BUSY, RFID_RST); + nfc14443.begin(); + nfc14443.reset(); + // show PN5180 reader version + uint8_t firmwareVersion[2]; + nfc14443.readEEprom(FIRMWARE_VERSION, firmwareVersion, sizeof(firmwareVersion)); + Serial.print(F("Firmware version=")); + Serial.print(firmwareVersion[1]); + Serial.print("."); + Serial.println(firmwareVersion[0]); + + // activate RF field + delay(4); + loggerNl((char *) FPSTR(rfidScannerReady), LOGLEVEL_DEBUG); + byte cardId[cardIdSize], lastCardId[cardIdSize]; + char *cardIdString; + uint8_t lastUID[10]; + + for (;;) { + esp_task_wdt_reset(); + vTaskDelay(10); + if ((millis() - lastRfidCheckTimestamp) >= RFID_SCAN_INTERVAL) { + // Reset the loop if no new card is present on the sensor/reader. This saves the entire process when idle. + lastRfidCheckTimestamp = millis(); + // 1. check for an ISO-14443 card + nfc14443.reset(); + nfc14443.setupRF(); + uint8_t uid[10]; + if (nfc14443.isCardPresent() && nfc14443.readCardSerial(uid)) { + cardIdString = (char *) malloc(cardIdSize*3 +1); + if (cardIdString == NULL) { + logger((char *) FPSTR(unableToAllocateMem), LOGLEVEL_ERROR); + #ifdef NEOPIXEL_ENABLE + showLedError = true; + #endif + continue; + } + for (uint8_t i=0; i= 0.6) { + leds[ledAddress(led)] = CRGB::Green; + } else if (((float) numLedsToLight / NUM_LEDS) <= 0.6 && ((float) numLedsToLight / NUM_LEDS) >= 0.3) { + leds[ledAddress(led)] = CRGB::Orange; + } else { + leds[ledAddress(led)] = CRGB::Red; + } + FastLED.show(); + vTaskDelay(portTICK_RATE_MS*20); + } + + for (uint8_t i=0; i<=100; i++) { + if (hlastVolume != currentVolume || showLedError || showLedOk || !buttons[3].currentState) { + break; + } + + vTaskDelay(portTICK_RATE_MS*20); + } + } + } #endif if (hlastVolume != currentVolume) { // If volume has been changed @@ -1874,7 +2141,7 @@ void showLed(void *parameter) { leds[ledAddress(i)] = CRGB::Blue; FastLED.show(); #ifdef MEASURE_BATTERY_VOLTAGE - if (hlastVolume != currentVolume || lastLedBrightness != ledBrightness || showLedError || showLedOk || showVoltageWarning || !buttons[3].currentState) { + if (hlastVolume != currentVolume || lastLedBrightness != ledBrightness || showLedError || showLedOk || showVoltageWarning || showLedVoltage || !buttons[3].currentState) { #else if (hlastVolume != currentVolume || lastLedBrightness != ledBrightness || showLedError || showLedOk || !buttons[3].currentState) { #endif @@ -1886,7 +2153,7 @@ void showLed(void *parameter) { for (uint8_t i=0; i<=100; i++) { #ifdef MEASURE_BATTERY_VOLTAGE - if (hlastVolume != currentVolume || lastLedBrightness != ledBrightness || showLedError || showLedOk || showVoltageWarning || !buttons[3].currentState) { + if (hlastVolume != currentVolume || lastLedBrightness != ledBrightness || showLedError || showLedOk || showVoltageWarning || showLedVoltage || !buttons[3].currentState) { #else if (hlastVolume != currentVolume || lastLedBrightness != ledBrightness || showLedError || showLedOk || !buttons[3].currentState) { #endif @@ -1900,7 +2167,7 @@ void showLed(void *parameter) { leds[ledAddress(i)-1] = CRGB::Black; FastLED.show(); #ifdef MEASURE_BATTERY_VOLTAGE - if (hlastVolume != currentVolume || lastLedBrightness != ledBrightness || showLedError || showLedOk || showVoltageWarning || !buttons[3].currentState) { + if (hlastVolume != currentVolume || lastLedBrightness != ledBrightness || showLedError || showLedOk || showVoltageWarning || showLedVoltage || !buttons[3].currentState) { #else if (hlastVolume != currentVolume || lastLedBrightness != ledBrightness || showLedError || showLedOk || !buttons[3].currentState) { #endif @@ -1931,7 +2198,7 @@ void showLed(void *parameter) { FastLED.show(); for (uint8_t i=0; i<=50; i++) { #ifdef MEASURE_BATTERY_VOLTAGE - if (hlastVolume != currentVolume || lastLedBrightness != ledBrightness || showLedError || showLedOk || showVoltageWarning || playProperties.playMode != NO_PLAYLIST || !buttons[3].currentState) { + if (hlastVolume != currentVolume || lastLedBrightness != ledBrightness || showLedError || showLedOk || showVoltageWarning || showLedVoltage || playProperties.playMode != NO_PLAYLIST || !buttons[3].currentState) { #else if (hlastVolume != currentVolume || lastLedBrightness != ledBrightness || showLedError || showLedOk || playProperties.playMode != NO_PLAYLIST || !buttons[3].currentState) { #endif @@ -1970,7 +2237,7 @@ void showLed(void *parameter) { default: // If playlist is active (doesn't matter which type) if (!playProperties.playlistFinished) { #ifdef MEASURE_BATTERY_VOLTAGE - if (playProperties.pausePlay != lastPlayState || lockControls != lastLockState || notificationShown || ledBusyShown || volumeChangeShown || showVoltageWarning || !buttons[3].currentState) { + if (playProperties.pausePlay != lastPlayState || lockControls != lastLockState || notificationShown || ledBusyShown || volumeChangeShown || showVoltageWarning || showLedVoltage || !buttons[3].currentState) { #else if (playProperties.pausePlay != lastPlayState || lockControls != lastLockState || notificationShown || ledBusyShown || volumeChangeShown || !buttons[3].currentState) { #endif @@ -2033,6 +2300,7 @@ void showLed(void *parameter) { vTaskDelay(portTICK_RATE_MS * 5); } } + //vTaskDelay(portTICK_RATE_MS * 10); esp_task_wdt_reset(); } vTaskDelete(NULL); @@ -2146,7 +2414,7 @@ void trackQueueDispatcher(const char *_itemToPlay, const uint32_t _lastPlayPos, publishMqtt((char *) FPSTR(topicPlaymodeState), playProperties.playMode, false); #endif if (_playMode != WEBSTREAM) { - musicFiles = returnPlaylistFromSD(SD.open(filename)); + musicFiles = returnPlaylistFromSD(FSystem.open(filename)); } else { musicFiles = returnPlaylistFromWebstream(filename); } @@ -2181,6 +2449,10 @@ void trackQueueDispatcher(const char *_itemToPlay, const uint32_t _lastPlayPos, playProperties.saveLastPlayPosition = false; playProperties.playUntilTrackNumber = 0; + #ifdef PLAY_LAST_RFID_AFTER_REBOOT + storeLastRfidPlayed(currentRfidTagId); + #endif + switch(playProperties.playMode) { case SINGLE_TRACK: { loggerNl((char *) FPSTR(modeSingleTrack), LOGLEVEL_NOTICE); @@ -2307,6 +2579,14 @@ void trackQueueDispatcher(const char *_itemToPlay, const uint32_t _lastPlayPos, // Modification-cards can change some settings (e.g. introducing track-looping or sleep after track/playlist). // This function handles them. void doRfidCardModifications(const uint32_t mod) { + #ifdef PLAY_LAST_RFID_AFTER_REBOOT + if (recoverLastRfid) { + recoverLastRfid = false; + // We don't want to remember modification-cards + return; + } + #endif + switch (mod) { case LOCK_BUTTONS_MOD: // Locks/unlocks all buttons lockControls = !lockControls; @@ -2329,8 +2609,8 @@ void doRfidCardModifications(const uint32_t mod) { } break; - case SLEEP_TIMER_MOD_15: // Puts/undo uC to sleep after 15 minutes - if (sleepTimer == 15) { + case SLEEP_TIMER_MOD_15: // Enables/disables sleep after 15 minutes + if (sleepTimerStartTimestamp && sleepTimer == 15) { sleepTimerStartTimestamp = 0; #ifdef NEOPIXEL_ENABLE ledBrightness = initialLedBrightness; @@ -2362,8 +2642,8 @@ void doRfidCardModifications(const uint32_t mod) { #endif break; - case SLEEP_TIMER_MOD_30: // Puts/undo uC to sleep after 30 minutes - if (sleepTimer == 30) { + case SLEEP_TIMER_MOD_30: // Enables/disables sleep after 30 minutes + if (sleepTimerStartTimestamp && sleepTimer == 30) { sleepTimerStartTimestamp = 0; #ifdef NEOPIXEL_ENABLE ledBrightness = initialLedBrightness; @@ -2395,8 +2675,8 @@ void doRfidCardModifications(const uint32_t mod) { #endif break; - case SLEEP_TIMER_MOD_60: // Puts/undo uC to sleep after 60 minutes - if (sleepTimer == 60) { + case SLEEP_TIMER_MOD_60: // Enables/disables sleep after 60 minutes + if (sleepTimerStartTimestamp && sleepTimer == 60) { sleepTimerStartTimestamp = 0; #ifdef NEOPIXEL_ENABLE ledBrightness = initialLedBrightness; @@ -2428,8 +2708,8 @@ void doRfidCardModifications(const uint32_t mod) { #endif break; - case SLEEP_TIMER_MOD_120: // Puts/undo uC to sleep after 2 hrs - if (sleepTimer == 120) { + case SLEEP_TIMER_MOD_120: // Enables/disables sleep after 2 hrs + if (sleepTimerStartTimestamp && sleepTimer == 120) { sleepTimerStartTimestamp = 0; #ifdef NEOPIXEL_ENABLE ledBrightness = initialLedBrightness; @@ -2743,7 +3023,7 @@ void accessPointStart(const char *SSID, IPAddress ip, IPAddress netmask) { loggerNl(logBuf, LOGLEVEL_NOTICE); wServer.on("/", HTTP_GET, [](AsyncWebServerRequest *request){ - request->send_P(200, "text/html", basicWebsite); + request->send_P(200, "text/html", accesspoint_HTML); }); wServer.on("/init", HTTP_POST, [] (AsyncWebServerRequest *request) { @@ -2755,15 +3035,21 @@ void accessPointStart(const char *SSID, IPAddress ip, IPAddress netmask) { prefsSettings.putString("Password", request->getParam("pwd", true)->value()); prefsSettings.putString("Hostname", request->getParam("hostname", true)->value()); } - request->send_P(200, "text/html", basicWebsite); + request->send_P(200, "text/html", accesspoint_HTML); }); wServer.on("/restart", HTTP_GET, [] (AsyncWebServerRequest *request) { - request->send(200, "text/html", "ESP wird neu gestartet..."); + #if (LANGUAGE == 1) + request->send(200, "text/html", "ESP wird neu gestartet..."); + #else + request->send(200, "text/html", "ESP is being restarted..."); + #endif Serial.flush(); ESP.restart(); }); + // allow cors for local debug + DefaultHeaders::Instance().addHeader("Access-Control-Allow-Origin", "*"); wServer.begin(); loggerNl((char *) FPSTR(httpReady), LOGLEVEL_NOTICE); accessPointStarted = true; @@ -2782,7 +3068,8 @@ bool getWifiEnableStatusFromNVS(void) { return wifiStatus; } -// Writes to NVS whether WiFi should be activated (not effective until next reboot!) + +// Writes to NVS whether WiFi should be activated bool writeWifiStatusToNVS(bool wifiStatus) { if (!wifiStatus) { if (prefsSettings.putUInt("enableWifi", 0)) { // disable @@ -2808,6 +3095,27 @@ bool writeWifiStatusToNVS(bool wifiStatus) { } +// Creates FTP-instance only when requested +#ifdef FTP_ENABLE + void ftpManager(void) { + if (ftpEnableLastStatus && !ftpEnableCurrentStatus) { + snprintf(logBuf, serialLoglength, "%s: %u", (char *) FPSTR(freeHeapWithoutFtp), ESP.getFreeHeap()); + loggerNl(logBuf, LOGLEVEL_DEBUG); + ftpEnableCurrentStatus = true; + ftpSrv = new FtpServer(); + ftpSrv->begin(FSystem, ftpUser, ftpPassword); + snprintf(logBuf, serialLoglength, "%s: %u", (char *) FPSTR(freeHeapWithFtp), ESP.getFreeHeap()); + loggerNl(logBuf, LOGLEVEL_DEBUG); + #if (LANGUAGE == 1) + Serial.println(F("FTP-Server gestartet")); + #else + Serial.println(F("FTP-server started")); + #endif + } + } +#endif + + // Provides management for WiFi wl_status_t wifiManager(void) { // If wifi whould not be activated, return instantly @@ -2831,7 +3139,7 @@ wl_status_t wifiManager(void) { // Get (optional) hostname-configration from NVS String hostname = prefsSettings.getString("Hostname", "-1"); if (hostname.compareTo("-1")) { - WiFi.config(INADDR_NONE, INADDR_NONE, INADDR_NONE); + //WiFi.config(INADDR_NONE, INADDR_NONE, INADDR_NONE); WiFi.setHostname(hostname.c_str()); snprintf(logBuf, serialLoglength, "%s: %s", (char *) FPSTR(restoredHostnameFromNvs), hostname.c_str()); loggerNl(logBuf, LOGLEVEL_INFO); @@ -2854,14 +3162,23 @@ wl_status_t wifiManager(void) { if (WiFi.status() == WL_CONNECTED) { myIP = WiFi.localIP(); - snprintf(logBuf, serialLoglength, "Aktuelle IP: %d.%d.%d.%d", myIP[0], myIP[1], myIP[2], myIP[3]); - loggerNl(logBuf, LOGLEVEL_NOTICE); - #ifdef FTP_ENABLE - ftpSrv.begin(ftpUser, ftpPassword); + #if (LANGUAGE == 1) + snprintf(logBuf, serialLoglength, "Aktuelle IP: %d.%d.%d.%d", myIP[0], myIP[1], myIP[2], myIP[3]); + #else + snprintf(logBuf, serialLoglength, "Current IP: %d.%d.%d.%d", myIP[0], myIP[1], myIP[2], myIP[3]); #endif + loggerNl(logBuf, LOGLEVEL_NOTICE); } else { // Starts AP if WiFi-connect wasn't successful accessPointStart((char *) FPSTR(accessPointNetworkSSID), apIP, apNetmask); } + + #ifdef MDNS_ENABLE + // zero conf, make device available as .local + if (MDNS.begin(hostname.c_str())) { + MDNS.addService("http", "tcp", 80); + } + #endif + wifiNeedsRestart = false; } @@ -2891,6 +3208,14 @@ String templateProcessor(const String& templ) { return String(prefsSettings.getUInt("maxVolumeSp", 0)); } else if (templ == "MAX_VOLUME_HEADPHONE") { return String(prefsSettings.getUInt("maxVolumeHp", 0)); + } else if (templ == "WARNING_LOW_VOLTAGE") { + return String(prefsSettings.getFloat("wLowVoltage", warningLowVoltage)); + } else if (templ == "VOLTAGE_INDICATOR_LOW") { + return String(prefsSettings.getFloat("vIndicatorLow", voltageIndicatorLow)); + } else if (templ == "VOLTAGE_INDICATOR_HIGH") { + return String(prefsSettings.getFloat("vIndicatorHigh", voltageIndicatorHigh)); + } else if (templ == "VOLTAGE_CHECK_INTERVAL") { + return String(prefsSettings.getUInt("vCheckIntv", voltageCheckInterval)); } else if (templ == "MQTT_SERVER") { return prefsSettings.getString("mqttServer", "-1"); } else if (templ == "MQTT_ENABLE") { @@ -2931,7 +3256,11 @@ bool processJsonRequest(char *_serialJson) { JsonObject object = doc.as(); if (error) { - Serial.print(F("deserializeJson() failed: ")); + #if (LANGUAGE == 1) + Serial.print(F("deserializeJson() fehlgeschlagen: ")); + #else + Serial.print(F("deserializeJson() failed: ")); + #endif Serial.println(error.c_str()); return false; } @@ -2943,6 +3272,10 @@ bool processJsonRequest(char *_serialJson) { uint8_t iBright = doc["general"]["iBright"].as(); uint8_t nBright = doc["general"]["nBright"].as(); uint8_t iTime = doc["general"]["iTime"].as(); + float vWarning = doc["general"]["vWarning"].as(); + float vIndLow = doc["general"]["vIndLow"].as(); + float vIndHi = doc["general"]["vIndHi"].as(); + uint8_t vInt = doc["general"]["vInt"].as(); prefsSettings.putUInt("initVolume", iVol); prefsSettings.putUInt("maxVolumeSp", mVolSpeaker); @@ -2950,6 +3283,10 @@ bool processJsonRequest(char *_serialJson) { prefsSettings.putUChar("iLedBrightness", iBright); prefsSettings.putUChar("nLedBrightness", nBright); prefsSettings.putUInt("mInactiviyT", iTime); + prefsSettings.putFloat("wLowVoltage", vWarning); + prefsSettings.putFloat("vIndicatorLow", vIndLow); + prefsSettings.putFloat("vIndicatorHigh", vIndHi); + prefsSettings.putUInt("vCheckIntv", vInt); // Check if settings were written successfully if (prefsSettings.getUInt("initVolume", 0) != iVol || @@ -2957,7 +3294,11 @@ bool processJsonRequest(char *_serialJson) { prefsSettings.getUInt("maxVolumeHp", 0) != mVolHeadphone || prefsSettings.getUChar("iLedBrightness", 0) != iBright || prefsSettings.getUChar("nLedBrightness", 0) != nBright || - prefsSettings.getUInt("mInactiviyT", 0) != iTime) { + prefsSettings.getUInt("mInactiviyT", 0) != iTime || + prefsSettings.getFloat("wLowVoltage", 999.99) != vWarning || + prefsSettings.getFloat("vIndicatorLow", 999.99) != vIndLow || + prefsSettings.getFloat("vIndicatorHigh", 999.99) != vIndHi || + prefsSettings.getUInt("vCheckIntv", 17777) != vInt) { return false; } @@ -3040,12 +3381,25 @@ bool processJsonRequest(char *_serialJson) { } } else if (doc.containsKey("ping")) { sendWebsocketData(0, 20); + return false; + } else if (doc.containsKey("refreshFileList")) { + + //TODO: we need a semaphore or mutex here to prevent + // a call when the task is still running + xTaskCreate( + fileHandlingTask, /* Task function. */ + "TaskTwo", /* String with name of task. */ + 10000, /* Stack size in bytes. */ + NULL, /* Parameter passed as input of the task */ + 1, /* Priority of the task. */ + NULL); /* Task handle. */ + } return true; } - +char *jBuf = (char *) calloc(255, sizeof(char)); // In heap to save static memory // Sends JSON-answers via websocket void sendWebsocketData(uint32_t client, uint8_t code) { const size_t CAPACITY = JSON_OBJECT_SIZE(1) + 20; @@ -3060,9 +3414,15 @@ void sendWebsocketData(uint32_t client, uint8_t code) { object["rfidId"] = currentRfidTagId; } else if (code == 20) { object["pong"] = "pong"; + } else if (code == 30) { + object["refreshFileList"] = "ready"; + } else if (code == 31) { + object["indexingState"] = fileNameBuf; } - char jBuf[50]; - serializeJson(doc, jBuf, sizeof(jBuf) / sizeof(jBuf[0])); + + //char jBuf[255]; + + serializeJson(doc, jBuf, 255); if (client == 0) { ws.printfAll(jBuf); @@ -3081,7 +3441,7 @@ void onWebsocketEvent(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsE client->ping(); } else if (type == WS_EVT_DISCONNECT) { //client disconnected - Serial.printf("ws[%s][%u] disconnect\n", server->url(), client->id()); + Serial.printf("ws[%s][%u] disconnect: %u\n", server->url(), uint(client->id())); } else if (type == WS_EVT_ERROR) { //error was received from the other end Serial.printf("ws[%s][%u] error(%u): %s\n", server->url(), client->id(), *((uint16_t*)arg), (char*)data); @@ -3094,16 +3454,11 @@ void onWebsocketEvent(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsE if (info->final && info->index == 0 && info->len == len) { //the whole message is in a single frame and we got all of it's data Serial.printf("ws[%s][%u] %s-message[%llu]: ", server->url(), client->id(), (info->opcode == WS_TEXT)?"text":"binary", info->len); - uint8_t returnCode; if (processJsonRequest((char*)data)) { - returnCode = 1; - } else { - returnCode = 0; + sendWebsocketData(client->id(), 1); } - sendWebsocketData(client->id(), 1); - if (info->opcode == WS_TEXT) { data[len] = 0; Serial.printf("%s\n", (char*)data); @@ -3185,7 +3540,7 @@ void webserverStart(void) { wServer.addHandler(&events); wServer.on("/", HTTP_GET, [](AsyncWebServerRequest *request) { - request->send_P(200, "text/html", mgtWebsite, templateProcessor); + request->send_P(200, "text/html", management_HTML, templateProcessor); }); wServer.on("/upload", HTTP_POST, [](AsyncWebServerRequest *request){ @@ -3198,80 +3553,96 @@ void webserverStart(void) { ESP.restart(); }); + wServer.on("/files", HTTP_GET, [](AsyncWebServerRequest *request) { + request->send(FSystem, DIRECTORY_INDEX_FILE, "application/json"); + }); + wServer.onNotFound(notFound); + + // allow cors for local debug + DefaultHeaders::Instance().addHeader("Access-Control-Allow-Origin", "*"); wServer.begin(); webserverStarted = true; } } // Dumps all RFID-entries from NVS into a file on SD-card -bool dumpNvsToSd(char *_namespace, char *_destFile) { - esp_partition_iterator_t pi; // Iterator for find - const esp_partition_t* nvs; // Pointer to partition struct - esp_err_t result = ESP_OK; - const char* partname = "nvs"; - uint8_t pagenr = 0; // Page number in NVS - uint8_t i; // Index in Entry 0..125 - uint8_t bm; // Bitmap for an entry - uint32_t offset = 0; // Offset in nvs partition - uint8_t namespace_ID; // Namespace ID found - - pi = esp_partition_find ( ESP_PARTITION_TYPE_DATA, // Get partition iterator for - ESP_PARTITION_SUBTYPE_ANY, // this partition - partname ) ; - if (pi) { - nvs = esp_partition_get(pi); // Get partition struct - esp_partition_iterator_release(pi); // Release the iterator - dbgprint ( "Partition %s found, %d bytes", - partname, - nvs->size ) ; - } else { - Serial.printf("Partition %s not found!", partname) ; - return NULL; - } - namespace_ID = FindNsID (nvs, _namespace) ; // Find ID of our namespace in NVS - - File backupFile = SD.open(_destFile, FILE_WRITE); - if (!backupFile) { - return false; - } - while (offset < nvs->size) { - result = esp_partition_read (nvs, offset, // Read 1 page in nvs partition - &buf, - sizeof(nvs_page)); - if (result != ESP_OK) { - Serial.println(F("Error reading NVS!")); + bool dumpNvsToSd(char *_namespace, char *_destFile) { + #ifdef NEOPIXEL_ENABLE + pauseNeopixel = true; // Workaround to prevent exceptions due to Neopixel-signalisation while NVS-write + #endif + esp_partition_iterator_t pi; // Iterator for find + const esp_partition_t* nvs; // Pointer to partition struct + esp_err_t result = ESP_OK; + const char* partname = "nvs"; + uint8_t pagenr = 0; // Page number in NVS + uint8_t i; // Index in Entry 0..125 + uint8_t bm; // Bitmap for an entry + uint32_t offset = 0; // Offset in nvs partition + uint8_t namespace_ID; // Namespace ID found + + pi = esp_partition_find ( ESP_PARTITION_TYPE_DATA, // Get partition iterator for + ESP_PARTITION_SUBTYPE_ANY, // this partition + partname ) ; + if (pi) { + nvs = esp_partition_get(pi); // Get partition struct + esp_partition_iterator_release(pi); // Release the iterator + dbgprint ( "Partition %s found, %d bytes", + partname, + nvs->size ) ; + } else { + Serial.printf("Partition %s not found!", partname) ; + return NULL; + } + namespace_ID = FindNsID (nvs, _namespace) ; // Find ID of our namespace in NVS + File backupFile = FSystem.open(_destFile, FILE_WRITE); + if (!backupFile) { return false; } + while (offset < nvs->size) { + result = esp_partition_read (nvs, offset, // Read 1 page in nvs partition + &buf, + sizeof(nvs_page)); + if (result != ESP_OK) { + Serial.println(F("Error reading NVS!")); + return false; + } - i = 0; + i = 0; - while (i < 126) { - bm = (buf.Bitmap[i/4] >> ((i % 4) * 2 )) & 0x03; // Get bitmap for this entry - if (bm == 2) { - if ((namespace_ID == 0xFF) || // Show all if ID = 0xFF - (buf.Entry[i].Ns == namespace_ID)) { // otherwise just my namespace - if (isNumber(buf.Entry[i].Key)) { - String s = prefsRfid.getString((const char *)buf.Entry[i].Key); - backupFile.printf("%s%s%s%s\n", stringOuterDelimiter, buf.Entry[i].Key, stringOuterDelimiter, s.c_str()); + while (i < 126) { + bm = (buf.Bitmap[i/4] >> ((i % 4) * 2 )) & 0x03; // Get bitmap for this entry + if (bm == 2) { + if ((namespace_ID == 0xFF) || // Show all if ID = 0xFF + (buf.Entry[i].Ns == namespace_ID)) { // otherwise just my namespace + if (isNumber(buf.Entry[i].Key)) { + String s = prefsRfid.getString((const char *)buf.Entry[i].Key); + backupFile.printf("%s%s%s%s\n", stringOuterDelimiter, buf.Entry[i].Key, stringOuterDelimiter, s.c_str()); + } } + i += buf.Entry[i].Span; // Next entry + } else { + i++; } - i += buf.Entry[i].Span; // Next entry - } else { - i++; } + offset += sizeof(nvs_page); // Prepare to read next page in nvs + pagenr++; } - offset += sizeof(nvs_page); // Prepare to read next page in nvs - pagenr++; - } - backupFile.close(); - return true; -} + backupFile.close(); + #ifdef NEOPIXEL_ENABLE + pauseNeopixel = false; + #endif + + return true; + } // Handles uploaded backup-file and writes valid entries into NVS void handleUpload(AsyncWebServerRequest *request, String filename, size_t index, uint8_t *data, size_t len, bool final) { + #ifdef NEOPIXEL_ENABLE + pauseNeopixel = true; // Workaround to prevent exceptions due to Neopixel-signalisation while NVS-write + #endif char ebuf[290]; uint16_t j=0; char *token; @@ -3304,6 +3675,9 @@ void handleUpload(AsyncWebServerRequest *request, String filename, size_t index, } } } + #ifdef NEOPIXEL_ENABLE + pauseNeopixel = false; + #endif } @@ -3369,42 +3743,42 @@ void setup() { Serial.printf("Built-In Amplifier enabled\n"); #endif -#if (MFRC522_BUS == 1) - #ifndef SINGLE_SPI_ENABLE - SPI.begin(); + #if not defined SINGLE_SPI_ENABLE + #ifdef SD_MMC_1BIT_MODE + pinMode(2, INPUT_PULLUP); + #else + // Init uSD-SPI + pinMode(SPISD_CS, OUTPUT); + digitalWrite(SPISD_CS, HIGH); + spiSD.begin(SPISD_SCK, SPISD_MISO, SPISD_MOSI, SPISD_CS); + spiSD.setFrequency(1000000); + #endif + #else + #ifdef RFID_READER_TYPE_MFRC522_SPI + //SPI.begin(RFID_SCK, RFID_MISO, RFID_MOSI); + SPI.begin(); + SPI.setFrequency(1000000); + #endif + #ifdef RFID_READER_TYPE_MFRC522_I2C + i2cBusTwo.begin(ext_IIC_DATA, ext_IIC_CLK, 40000); + #endif #endif -#elif (MFRC522_BUS == 2) - i2cBusTwo.begin(ext_IIC_DATA, ext_IIC_CLK, 40000); -#endif mfrc522.PCD_Init(); delay(50); - mfrc522.PCD_DumpVersionToSerial(); // Show details of PCD - MFRC522 Card Reader detail loggerNl((char *) FPSTR(rfidScannerReady), LOGLEVEL_DEBUG); - // Init uSD-SPI - pinMode(SPISD_CS, OUTPUT); - digitalWrite(SPISD_CS, HIGH); - #ifndef SINGLE_SPI_ENABLE - spiSD.begin(SPISD_SCK, SPISD_MISO, SPISD_MOSI, SPISD_CS); - spiSD.setFrequency(1000000); - #else - //SPI.begin(RFID_SCK, RFID_MISO, RFID_MOSI); - SPI.begin(); - SPI.setFrequency(1000000); - #endif - - #ifndef SINGLE_SPI_ENABLE - while (!SD.begin(SPISD_CS, spiSD)) { + #ifdef SD_MMC_1BIT_MODE + while (!SD_MMC.begin("/sdcard", true)) { + #else + while (!SD.begin(SPISD_CS, spiSD)) { + #endif #else while (!SD.begin(SPISD_CS)) { #endif loggerNl((char *) FPSTR(unableToMountSd), LOGLEVEL_ERROR); delay(500); - #ifdef SD_NOT_MANDATORY_ENABLE - break; - #endif #ifdef SHUTDOWN_IF_SD_BOOT_FAILS if (millis() >= deepsleepTimeAfterBootFails*1000) { loggerNl((char *) FPSTR(sdBootFailedDeepsleep), LOGLEVEL_ERROR); @@ -3414,6 +3788,34 @@ void setup() { } + // welcome message + Serial.println(F("")); + Serial.println(F("_____ _____ _____ _____ _____ ")); + Serial.println(F("|_ _|___ ___| | | | | | | ")); + Serial.println(F(" | | | . | | | |- -| | | | | | ")); + Serial.println(F(" |_| |___|_|_|_____|_____|_|___|_____| ")); + Serial.println(F(" ESP32-version")); + Serial.println(F("")); + + // show SD card type + #ifdef SD_MMC_1BIT_MODE + loggerNl((char *) FPSTR(sdMountedMmc1BitMode), LOGLEVEL_NOTICE); + uint8_t cardType = SD_MMC.cardType(); + #else + loggerNl((char *) FPSTR(sdMountedSpiMode), LOGLEVEL_NOTICE); + uint8_t cardType = SD.cardType(); + #endif + Serial.print(F("SD card type: ")); + if (cardType == CARD_MMC) { + Serial.println(F("MMC")); + } else if(cardType == CARD_SD){ + Serial.println(F("SDSC")); + } else if(cardType == CARD_SDHC){ + Serial.println(F("SDHC")); + } else { + Serial.println(F("UNKNOWN")); + } + #ifdef HEADPHONE_ADJUST_ENABLE pinMode(HP_DETECT, INPUT); headphoneLastDetectionState = digitalRead(HP_DETECT); @@ -3615,6 +4017,45 @@ void setup() { loggerNl(logBuf, LOGLEVEL_INFO); } + #ifdef MEASURE_BATTERY_VOLTAGE + // Get voltages from NVS for Neopixel + float vLowIndicator = prefsSettings.getFloat("vIndicatorLow", 999.99); + if (vLowIndicator <= 999) { + voltageIndicatorLow = vLowIndicator; + snprintf(logBuf, serialLoglength, "%s: %.2f V", (char *) FPSTR(voltageIndicatorLowFromNVS), vLowIndicator); + loggerNl(logBuf, LOGLEVEL_INFO); + } else { // preseed if not set + prefsSettings.putFloat("vIndicatorLow", voltageIndicatorLow); + } + + float vHighIndicator = prefsSettings.getFloat("vIndicatorHigh", 999.99); + if (vHighIndicator <= 999) { + voltageIndicatorHigh = vHighIndicator; + snprintf(logBuf, serialLoglength, "%s: %.2f V", (char *) FPSTR(voltageIndicatorHighFromNVS), vHighIndicator); + loggerNl(logBuf, LOGLEVEL_INFO); + } else { + prefsSettings.putFloat("vIndicatorHigh", voltageIndicatorHigh); + } + + float vLowWarning = prefsSettings.getFloat("wLowVoltage", 999.99); + if (vLowWarning <= 999) { + warningLowVoltage = vLowWarning; + snprintf(logBuf, serialLoglength, "%s: %.2f V", (char *) FPSTR(warningLowVoltageFromNVS), vLowWarning); + loggerNl(logBuf, LOGLEVEL_INFO); + } else { + prefsSettings.putFloat("wLowVoltage", warningLowVoltage); + } + + uint32_t vInterval = prefsSettings.getUInt("vCheckIntv", 17777); + if (vInterval != 17777) { + voltageCheckInterval = vInterval; + snprintf(logBuf, serialLoglength, "%s: %u Minuten", (char *) FPSTR(voltageCheckIntervalFromNVS), vInterval); + loggerNl(logBuf, LOGLEVEL_INFO); + } else { + prefsSettings.putUInt("vCheckIntv", voltageCheckInterval); + } + #endif + // Create 1000Hz-HW-Timer (currently only used for buttons) timerSemaphore = xSemaphoreCreateBinary(); timer = timerBegin(0, 240, true); // Prescaler: CPU-clock in MHz @@ -3644,8 +4085,6 @@ void setup() { ); - //esp_sleep_enable_ext0_wakeup((gpio_num_t) DREHENCODER_BUTTON, 0); - // Activate internal pullups for all buttons pinMode(DREHENCODER_BUTTON, INPUT_PULLUP); pinMode(PAUSEPLAY_BUTTON, INPUT_PULLUP); @@ -3670,40 +4109,23 @@ void setup() { lastTimeActiveTimestamp = millis(); // initial set after boot - /*if (wifiManager() == WL_CONNECTED) { - // attach AsyncWebSocket for Mgmt-Interface - ws.onEvent(onWebsocketEvent); - wServer.addHandler(&ws); - - // attach AsyncEventSource - wServer.addHandler(&events); - - wServer.on("/", HTTP_GET, [](AsyncWebServerRequest *request) { - request->send_P(200, "text/html", mgtWebsite, templateProcessor); - }); - - wServer.on("/upload", HTTP_POST, [](AsyncWebServerRequest *request){ - request->send_P(200, "text/html", backupRecoveryWebsite); - }, handleUpload); - - wServer.on("/restart", HTTP_GET, [] (AsyncWebServerRequest *request) { - request->send_P(200, "text/html", restartWebsite); - Serial.flush(); - ESP.restart(); - }); - - wServer.onNotFound(notFound); - wServer.begin(); - }*/ + // Create empty index json-file when no file exists. + if (!fileExists(FSystem,DIRECTORY_INDEX_FILE)) { + createFile(FSystem,DIRECTORY_INDEX_FILE,"[]"); + ESP.restart(); + } bootComplete = true; - Serial.print(F("Free heap: ")); - Serial.println(ESP.getFreeHeap()); + snprintf(logBuf, serialLoglength, "%s: %u", (char *) FPSTR(freeHeapAfterSetup), ESP.getFreeHeap()); + loggerNl(logBuf, LOGLEVEL_DEBUG); } void loop() { webserverStart(); + #ifdef FTP_ENABLE + ftpManager(); + #endif #ifdef HEADPHONE_ADJUST_ENABLE headphoneVolumeManager(); #endif @@ -3725,14 +4147,22 @@ void loop() { } #endif #ifdef FTP_ENABLE - ftpSrv.handleFTP(); + if (ftpEnableLastStatus && ftpEnableCurrentStatus) { + ftpSrv->handleFTP(); + } #endif } #ifdef FTP_ENABLE - if (ftpSrv.isConnected()) { - lastTimeActiveTimestamp = millis(); // Re-adjust timer while client is connected to avoid ESP falling asleep + if (ftpEnableLastStatus && ftpEnableCurrentStatus) { + if (ftpSrv->isConnected()) { + lastTimeActiveTimestamp = millis(); // Re-adjust timer while client is connected to avoid ESP falling asleep + } } #endif + #ifdef PLAY_LAST_RFID_AFTER_REBOOT + recoverLastRfidPlayed(); + #endif + ws.cleanupClients(); } diff --git a/src/settings-espa1s.h b/src/settings-espa1s.h new file mode 100644 index 0000000..3d23d38 --- /dev/null +++ b/src/settings-espa1s.h @@ -0,0 +1,66 @@ +#include "Arduino.h" + +//################## GPIO-configuration ############################## +#ifdef SD_MMC_1BIT_MODE + #define SPISD_CS 15 // GPIO for chip select (SD) + // uSD-card-reader (via SD-MMC 1Bit) + // + // SD_MMC uses fixed pins + // MOSI 15 + // SCKK 14 + // MISO 2 // hardware pullup may required +#else + // uSD-card-reader (via SPI) + #define SPISD_CS 15 // GPIO for chip select (SD) + #ifndef SINGLE_SPI_ENABLE + #define SPISD_MOSI 13 // GPIO for master out slave in (SD) => not necessary for single-SPI + #define SPISD_MISO 16 // GPIO for master in slave ou (SD) => not necessary for single-SPI + #define SPISD_SCK 14 // GPIO for clock-signal (SD) => not necessary for single-SPI + #endif +#endif + + +#define MFRC522_RST_PIN 12 // needed for i2c-comm MTDI on JTAG +#define MFRC522_ADDR 0x28 // default Address of MFRC522 +#define ext_IIC_CLK 23 // 14-pin-header +#define ext_IIC_DATA 18 // 14-pin-header + +// I2S (DAC) +#define I2S_DOUT 25 // Digital out (I2S) +#define I2S_BCLK 27 // BCLK (I2S) +#define I2S_LRC 26 // LRC (I2S) + +// I2C (AC101) +#define IIC_CLK 32 // internal +#define IIC_DATA 33 // internal + +// Amp enable +#define GPIO_PA_EN GPIO_NUM_21 // internal +#define GPIO_SEL_PA_EN GPIO_SEL_21 + +// Rotary encoder +#define DREHENCODER_CLK 5 // If you want to reverse encoder's direction, just switch GPIOs of CLK with DT (in software or hardware) +#define DREHENCODER_DT 18 // Info: Lolin D32 / Lolin D32 pro 35 are using 35 for battery-voltage-monitoring! +#define DREHENCODER_BUTTON 4 // Button is used to switch Tonuino on and off + +// Control-buttons +#define PAUSEPLAY_BUTTON 36 // GPIO to detect pause/play +#define NEXT_BUTTON 199 // GPIO to detect next +#define PREVIOUS_BUTTON 198 // GPIO to detect previous (Important: as of 19.11.2020 changed from 33 to 2) + +// Power-control +#define POWER 19 // GPIO used to drive transistor-circuit, that switches off peripheral devices while ESP32-deepsleep + +// (optional) Neopixel +#define LED_PIN 23 // GPIO for Neopixel-signaling + +// (optinal) Headphone-detection +#ifdef HEADPHONE_ADJUST_ENABLE + #define HP_DETECT 39 // GPIO that detects, if there's a plug in the headphone jack or not +#endif + +// (optional) Monitoring of battery-voltage via ADC +#ifdef MEASURE_BATTERY_VOLTAGE + #define VOLTAGE_READ_PIN 33 // GPIO used to monitor battery-voltage. Change to 35 if you're using Lolin D32 or Lolin D32 pro as it's hard-wired there! +#endif + diff --git a/src/settings-lolin32.h b/src/settings-lolin32.h new file mode 100644 index 0000000..18883a1 --- /dev/null +++ b/src/settings-lolin32.h @@ -0,0 +1,61 @@ +#include "Arduino.h" + +//################## GPIO-configuration ############################## +#ifdef SD_MMC_1BIT_MODE + // uSD-card-reader (via SD-MMC 1Bit) + // + // SD_MMC uses fixed pins + // MOSI 15 + // SCKK 14 + // MISO 2 // hardware pullup may required +#else + // uSD-card-reader (via SPI) + #define SPISD_CS 15 // GPIO for chip select (SD) + #ifndef SINGLE_SPI_ENABLE + #define SPISD_MOSI 13 // GPIO for master out slave in (SD) => not necessary for single-SPI + #define SPISD_MISO 16 // GPIO for master in slave ou (SD) => not necessary for single-SPI + #define SPISD_SCK 14 // GPIO for clock-signal (SD) => not necessary for single-SPI + #endif +#endif + +// RFID (via SPI) +#define RST_PIN 99 // Not necessary but has to be set anyway; so let's use a dummy-number +#define RFID_CS 21 // GPIO for chip select (RFID) +#define RFID_MOSI 23 // GPIO for master out slave in (RFID) +#define RFID_MISO 19 // GPIO for master in slave out (RFID) +#define RFID_SCK 18 // GPIO for clock-signal (RFID) + +#ifdef RFID_READER_TYPE_PN5180 + #define RFID_BUSY 16 // PN5180 BUSY PIN + #define RFID_RST 22 // PN5180 RESET PIN +#endif +// I2S (DAC) +#define I2S_DOUT 25 // Digital out (I2S) +#define I2S_BCLK 27 // BCLK (I2S) +#define I2S_LRC 26 // LRC (I2S) + +// Rotary encoder +#define DREHENCODER_CLK 34 // If you want to reverse encoder's direction, just switch GPIOs of CLK with DT (in software or hardware) +#define DREHENCODER_DT 35 // Info: Lolin D32 / Lolin D32 pro 35 are using 35 for battery-voltage-monitoring! +#define DREHENCODER_BUTTON 32 // Button is used to switch Tonuino on and off + +// Control-buttons +#define PAUSEPLAY_BUTTON 5 // GPIO to detect pause/play +#define NEXT_BUTTON 4 // GPIO to detect next +#define PREVIOUS_BUTTON 2 // GPIO to detect previous (Important: as of 19.11.2020 changed from 33 to 2) + +// (optional) Power-control +#define POWER 17 // GPIO used to drive transistor-circuit, that switches off peripheral devices while ESP32-deepsleep + +// (optional) Neopixel +#define LED_PIN 12 // GPIO for Neopixel-signaling + +// (optinal) Headphone-detection +#ifdef HEADPHONE_ADJUST_ENABLE + #define HP_DETECT 22 // GPIO that detects, if there's a plug in the headphone jack or not +#endif + +// (optional) Monitoring of battery-voltage via ADC +#ifdef MEASURE_BATTERY_VOLTAGE + #define VOLTAGE_READ_PIN 33 // GPIO used to monitor battery-voltage. Change to 35 if you're using Lolin D32 or Lolin D32 pro as it's hard-wired there! +#endif diff --git a/src/settings.h b/src/settings.h new file mode 100644 index 0000000..de1744c --- /dev/null +++ b/src/settings.h @@ -0,0 +1,117 @@ +#include "Arduino.h" + +//########################## MODULES ################################# +//#define MDNS_ENABLE // When enabled, you don't have to handle with Tonuino's IP-address. If hostname is set to "tonuino", you can reach it via tonuino.local +//#define MQTT_ENABLE // Make sure to configure mqtt-server and (optionally) username+pwd +//#define FTP_ENABLE // Enables FTP-server; DON'T FORGET TO ACTIVATE AFTER BOOT BY PRESSING PAUSE + NEXT-BUTTONS (IN PARALLEL)! +//#define NEOPIXEL_ENABLE // Don't forget configuration of NUM_LEDS if enabled +#define NEOPIXEL_REVERSE_ROTATION // Some Neopixels are adressed/soldered counter-clockwise. This can be configured here. +#define LANGUAGE 1 // 1 = deutsch; 2 = english +//#define HEADPHONE_ADJUST_ENABLE // Used to adjust (lower) volume for optional headphone-pcb (refer maxVolumeSpeaker / maxVolumeHeadphone) +#define SHUTDOWN_IF_SD_BOOT_FAILS // Will put ESP to deepsleep if boot fails due to SD. Really recommend this if there's in battery-mode no other way to restart ESP! Interval adjustable via deepsleepTimeAfterBootFails. +//#define MEASURE_BATTERY_VOLTAGE // Enables battery-measurement via GPIO (ADC) and voltage-divider +//#define PLAY_LAST_RFID_AFTER_REBOOT // When restarting Tonuino, the last RFID that was active before, is recalled and played + +//#define BLUETOOTH_ENABLE // Doesn't work currently (so don't enable) as there's not enough DRAM available + +//################## select SD card mode ############################# +#define SD_MMC_1BIT_MODE // run SD card in SD-MMC 1Bit mode +#define SINGLE_SPI_ENABLE // If only one SPI-instance should be used instead of two (not yet working!) (Works on ESP32-A1S with RFID via I2C) + +//################## select RFID reader ############################## +//#define RFID_READER_TYPE_MFRC522_SPI // use MFRC522 via SPI +#define RFID_READER_TYPE_MFRC522_I2C // use MFRC522 via I2C +//#define RFID_READER_TYPE_PN5180 + +//################## select Hardware Platform ############################## +// #define HAL 2 // HAL 1 = LoLin32, 2 = AI AudioKit - no need to define when using platformIO BuildProcess + + +//#################### Various settings ############################## +// Loglevels available (don't change!) +#define LOGLEVEL_ERROR 1 // only errors +#define LOGLEVEL_NOTICE 2 // errors + important messages +#define LOGLEVEL_INFO 3 // infos + errors + important messages +#define LOGLEVEL_DEBUG 4 // almost everything + +// Serial-logging-configuration +const uint8_t serialDebug = LOGLEVEL_DEBUG; // Current loglevel for serial console + +// Buttons (better leave unchanged if in doubts :-)) +uint8_t buttonDebounceInterval = 50; // Interval in ms to software-debounce buttons +uint16_t intervalToLongPress = 700; // Interval in ms to distinguish between short and long press of previous/next-button + +// RFID +#define RFID_SCAN_INTERVAL 300 // Interval-time in ms (how often is RFID read?) + +// Automatic restart +#ifdef SHUTDOWN_IF_SD_BOOT_FAILS + uint32_t deepsleepTimeAfterBootFails = 20; // Automatic restart takes place if boot was not successful after this period (in seconds) +#endif + +// FTP +// Nothing to be configured here... +// Default user/password is esp32/esp32 but can be changed via webgui + +// Tonuino will create a WiFi if joing existing WiFi was not possible. Name can be configured here. +static const char accessPointNetworkSSID[] PROGMEM = "Tonuino"; // Access-point's SSID + +// Where to store the backup-file for NVS-records +static const char backupFile[] PROGMEM = "/backup.txt"; // File is written every time a (new) RFID-assignment via GUI is done + +// (webgui) File Browser +uint8_t FS_DEPTH = 5; // Max. recursion-depth of file tree +const char *DIRECTORY_INDEX_FILE = "/files.json"; // Filename of files.json index file + +//#################### Settings for optional Modules############################## +// (optinal) Neopixel +#ifdef NEOPIXEL_ENABLE + #define NUM_LEDS 24 // number of LEDs + #define CHIPSET WS2812B // type of Neopixel + #define COLOR_ORDER GRB +#endif + +// (optional) Default-voltages for battery-monitoring via Neopixel +float warningLowVoltage = 3.4; // If battery-voltage is >= this value, a cyclic warning will be indicated by Neopixel (can be changed via GUI!) +uint8_t voltageCheckInterval = 10; // How of battery-voltage is measured (in minutes) (can be changed via GUI!) +float voltageIndicatorLow = 3.0; // Lower range for Neopixel-voltage-indication (0 leds) (can be changed via GUI!) +float voltageIndicatorHigh = 4.2; // Upper range for Neopixel-voltage-indication (all leds) (can be changed via GUI!) + +// (optinal) For measuring battery-voltage a voltage-divider is necessary. Their values need to be configured here. +#ifdef MEASURE_BATTERY_VOLTAGE + uint8_t rdiv1 = 129; // Rdiv1 of voltage-divider (kOhms) (measure exact value with multimeter!) + uint16_t rdiv2 = 389; // Rdiv2 of voltage-divider (kOhms) (measure exact value with multimeter!) => used to measure voltage via ADC! +#endif + +// (optinal) Headphone-detection (leave unchanged if in doubts...) +#ifdef HEADPHONE_ADJUST_ENABLE + uint16_t headphoneLastDetectionDebounce = 1000; // Debounce-interval in ms when plugging in headphone +#endif + +// (optional) Topics for MQTT +#ifdef MQTT_ENABLE + uint16_t mqttRetryInterval = 15; // Try to reconnect to MQTT-server every (n) seconds if connection is broken + uint8_t mqttMaxRetriesPerInterval = 1; // Number of retries per time-interval (mqttRetryInterval). mqttRetryInterval 15 / mqttMaxRetriesPerInterval 1 => once every 15s + #define DEVICE_HOSTNAME "ESP32-Tonuino" // Name that that is used for MQTT + static const char topicSleepCmnd[] PROGMEM = "Cmnd/Tonuino/Sleep"; + static const char topicSleepState[] PROGMEM = "State/Tonuino/Sleep"; + static const char topicTrackCmnd[] PROGMEM = "Cmnd/Tonuino/Track"; + static const char topicTrackState[] PROGMEM = "State/Tonuino/Track"; + static const char topicTrackControlCmnd[] PROGMEM = "Cmnd/Tonuino/TrackControl"; + static const char topicLoudnessCmnd[] PROGMEM = "Cmnd/Tonuino/Loudness"; + static const char topicLoudnessState[] PROGMEM = "State/Tonuino/Loudness"; + static const char topicSleepTimerCmnd[] PROGMEM = "Cmnd/Tonuino/SleepTimer"; + static const char topicSleepTimerState[] PROGMEM = "State/Tonuino/SleepTimer"; + static const char topicState[] PROGMEM = "State/Tonuino/State"; + static const char topicCurrentIPv4IP[] PROGMEM = "State/Tonuino/IPv4"; + static const char topicLockControlsCmnd[] PROGMEM ="Cmnd/Tonuino/LockControls"; + static const char topicLockControlsState[] PROGMEM ="State/Tonuino/LockControls"; + static const char topicPlaymodeState[] PROGMEM = "State/Tonuino/Playmode"; + static const char topicRepeatModeCmnd[] PROGMEM = "Cmnd/Tonuino/RepeatMode"; + static const char topicRepeatModeState[] PROGMEM = "State/Tonuino/RepeatMode"; + static const char topicLedBrightnessCmnd[] PROGMEM = "Cmnd/Tonuino/LedBrightness"; + static const char topicLedBrightnessState[] PROGMEM = "State/Tonuino/LedBrightness"; + #ifdef MEASURE_BATTERY_VOLTAGE + static const char topicBatteryVoltage[] PROGMEM = "State/Tonuino/Voltage"; + #endif +#endif diff --git a/src/websiteBasic.h b/src/websiteBasic.h deleted file mode 100644 index 8bb02a7..0000000 --- a/src/websiteBasic.h +++ /dev/null @@ -1,24 +0,0 @@ -static const char basicWebsite[] PROGMEM = "\ -\ - \ - WLAN-Einrichtung\ - \ - \ -
\ -
\ - Initiale WLAN-Einrichtung\ -
\ -
\ -
\ -
\ -
\ -

\ - \ -
\ -
\ -
\ - \ -
\ - \ -\ -"; \ No newline at end of file diff --git a/src/websiteMgmt.h b/src/websiteMgmt.h deleted file mode 100644 index faafef7..0000000 --- a/src/websiteMgmt.h +++ /dev/null @@ -1,360 +0,0 @@ -static const char mgtWebsite[] PROGMEM = "\ -\ - \ - ESPuino-Konfiguration\ - \ - \ - \ - \ - \ - \ - \ - \ - \ -
\ -
\ -

WLAN-Konfiguration

\ -
\ -
\ - \ - \ -
\ - Bitte SSID des WLANs eintragen.\ -
\ - \ - \ - \ - \ -
\ - \ - \ -
\ -
\ -
\ -
\ -

RFID-Zuweisungen

\ -
\ -
\ - \ - \ - \ - \ - \ - \ -
\ - \ - \ -
\ -
\ -
\ -
\ -

RFID-Modifkationen

\ -
\ -
\ - \ - \ -
\ - Bitte eine 12-stellige Zahl eingeben.\ -
\ - \ - \ -
\ - \ - \ -
\ -
\ -
\ -
\ -

MQTT-Konfiguration

\ -
\ -
\ - \ - \ -
\ -
\ - \ - \ - \ - \ - \ - \ -
\ - \ - \ -
\ -
\ -
\ -
\ -

FTP-Konfiguration

\ -
\ -
\ - \ - \ - \ - \ -
\ - \ - \ -
\ -
\ -
\ -
\ -

Allgemeine Konfiguration

\ -
\ -
\ - \ - \ - \ - \ - \ - \ -
\ -
\ - \ - \ - \ - \ -
\ -
\ - \ - \ -
\ - \ - \ -
\ -
\ -
\ -
\ -

NVS-Importer

\ -
\ -
\ - \ - \ -
\ - \ -
\ -
\ -
\ - \ - \ -\ -"; \ No newline at end of file