├── 3d_models
├── ESP32 CYD Gopro mount lol.stl
├── README.md
├── bridas soporte pantalla vesc.stl
├── soporte pantalla vesc(1).stl
└── tapa pantalla vesc.stl
├── README.md
├── imgs
├── demo.jpg
└── demo.png
├── libraries
├── README.md
└── libraries.zip
└── src
└── main
├── EEPROMAnything.h
├── background_image.h
├── main.ino
└── startup_image.h
/3d_models/ESP32 CYD Gopro mount lol.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NetworkDir/SimpleVescDisplay/7c4fc8cdb1120faafb2faf9a64c125a375615a86/3d_models/ESP32 CYD Gopro mount lol.stl
--------------------------------------------------------------------------------
/3d_models/README.md:
--------------------------------------------------------------------------------
1 | Credits by : t.me/Pandalgns
2 |
--------------------------------------------------------------------------------
/3d_models/bridas soporte pantalla vesc.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NetworkDir/SimpleVescDisplay/7c4fc8cdb1120faafb2faf9a64c125a375615a86/3d_models/bridas soporte pantalla vesc.stl
--------------------------------------------------------------------------------
/3d_models/soporte pantalla vesc(1).stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NetworkDir/SimpleVescDisplay/7c4fc8cdb1120faafb2faf9a64c125a375615a86/3d_models/soporte pantalla vesc(1).stl
--------------------------------------------------------------------------------
/3d_models/tapa pantalla vesc.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NetworkDir/SimpleVescDisplay/7c4fc8cdb1120faafb2faf9a64c125a375615a86/3d_models/tapa pantalla vesc.stl
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # 🚀 Simple VESC Display for ESP32-2432S028R
2 |
3 | > **Credits:** Based on the original project by [Gh0513d/SVD](https://github.com/Gh0513d/SVD) 🔗
4 |
5 | This is a modified version of the VESC display project, optimized for the **ESP32-2432S028R** display. The goal is to enhance functionality and add new features while keeping it simple and efficient.
6 |
7 | ## 🎨 Demo
8 |
9 |
10 |
11 | ## ✨ Features
12 |
13 | ✅ Real-time speed, RPM, and power display
14 | ✅ Optimized data calculations similar to VESC Tool
15 | ✅ Trip and total distance tracking
16 | ✅ EEPROM storage for trip data
17 | ✅ Automatic brightness control using LDR sensor
18 | ✅ High-speed UART communication with VESC
19 | ✅ Overheating and battery warnings
20 | ✅ PNG image support for custom UI background and startup logo
21 |
22 | ## 📥 Installation
23 |
24 | Follow these steps to set up the project on your ESP32-2432S028:
25 |
26 | ### 1️⃣ Install Arduino IDE & ESP32 Board Support
27 | - Download and install the latest [Arduino IDE](https://www.arduino.cc/en/software).
28 | - Open **Arduino IDE** and go to **File** > **Preferences**.
29 | - In the "Additional Board Manager URLs" field, add:
30 | ```
31 | https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
32 | ```
33 | - Go to **Tools** > **Board** > **Boards Manager**, search for "ESP32," and install the latest ESP32 board package.
34 |
35 | ### 2️⃣ Install Required Libraries
36 | - Extract the `libraries.zip` file into your Arduino libraries folder (`Documents/Arduino/libraries/`).
37 | - If you prefer manual installation, ensure you have the following libraries installed:
38 | - **TFT_eSPI** (for display control)
39 | - **FlickerFreePrint** (for flicker-free text rendering)
40 | - **ComEVesc** (for VESC communication)
41 | - **PNGdec** (for PNG image decoding)
42 | - **EEPROMAnything** (for EEPROM read/write support)
43 |
44 | ### 3️⃣ Flash the Code to ESP32
45 | - Open the `vesc_display.ino` file in **Arduino IDE**.
46 | - Select the correct board: **ESP32 Dev Module**.
47 | - Set the correct **COM Port**.
48 | - Click **Upload** and wait for the process to complete.
49 |
50 | ## 🔧 Configuration
51 |
52 | Before compiling, you may need to tweak some settings (if you install tft_espi byself):
53 | - **`User_Setup.h`** in the `TFT_eSPI` library to match your display pinout.
54 | - Adjust motor and wheel parameters in the `main.ino` file.
55 |
56 | ## 🚀 Coming Soon
57 |
58 | 🔹 More UI customization options (with new library instead as tft_espi :D) 🎨
59 | 🔹 BLE and WiFi bridge 🌐
60 | 🔹 Improved data logging & visualization 📊
61 | 🔹 Add CANBUS support for better and reliable communication
62 |
63 | ## 🤝 Contributing
64 |
65 | Feel free to fork the project and submit pull requests. Suggestions and improvements are always welcome! 😊
66 |
67 | ## 📜 License
68 |
69 | This project is open-source and licensed under the **MIT License**.
70 |
71 | ---
72 |
73 | Happy coding! 🚀
74 |
--------------------------------------------------------------------------------
/imgs/demo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NetworkDir/SimpleVescDisplay/7c4fc8cdb1120faafb2faf9a64c125a375615a86/imgs/demo.jpg
--------------------------------------------------------------------------------
/imgs/demo.png:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/libraries/README.md:
--------------------------------------------------------------------------------
1 | Extract libraries.zip files to C:\Users\Username\Documents\Arduino\libraries
2 |
--------------------------------------------------------------------------------
/libraries/libraries.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NetworkDir/SimpleVescDisplay/7c4fc8cdb1120faafb2faf9a64c125a375615a86/libraries/libraries.zip
--------------------------------------------------------------------------------
/src/main/EEPROMAnything.h:
--------------------------------------------------------------------------------
1 | //EEPROMAnything is taken from here: http://www.arduino.cc/playground/Code/EEPROMWriteAnything
2 | #ifndef EEPROMAnything_h
3 | #define EEPROMAnything_h
4 |
5 | #include "EEPROM.h"
6 | #if ARDUINO < 100
7 | #include
8 | #else
9 | #include
10 | #endif
11 |
12 | template int EEPROM_writeAnything(int ee, const T& value){
13 | const byte* p = (const byte*)(const void*)&value;
14 | int i;
15 | for (i = 0; i < sizeof(value); i++)
16 | EEPROM.write(ee++, *p++);
17 | EEPROM.commit();
18 | return i;
19 | }
20 |
21 | template int EEPROM_readAnything(int ee, T& value){
22 | byte* p = (byte*)(void*)&value;
23 | int i;
24 | for (i = 0; i < sizeof(value); i++)
25 | *p++ = EEPROM.read(ee++);
26 | return i;
27 | }
28 |
29 | #endif
--------------------------------------------------------------------------------
/src/main/background_image.h:
--------------------------------------------------------------------------------
1 | // array size is 38164
2 | // For convert png to .h file you can use [https://notisrac.github.io/FileToCArray/]
3 | // array size is 9696
4 | static const unsigned char background_image[] PROGMEM = {
5 | 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
6 | 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0xf0, 0x08, 0x02, 0x00, 0x00, 0x00, 0xfe, 0x4f, 0x2a,
7 | 0x3c, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x01, 0xd9, 0xc9, 0x2c, 0x7f, 0x00, 0x00,
8 | 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00,
9 | 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x25, 0x85, 0x49, 0x44, 0x41, 0x54, 0x78, 0x9c, 0xed, 0x9d, 0x79,
10 | 0x70, 0x55, 0xc7, 0x95, 0xff, 0x2f, 0x92, 0x00, 0x49, 0x20, 0x40, 0x48, 0x02, 0x09, 0x10, 0x48,
11 | 0x42, 0x42, 0x02, 0x2d, 0x68, 0x41, 0x02, 0x09, 0xed, 0x96, 0x84, 0x84, 0x56, 0x56, 0x09, 0x10,
12 | 0x08, 0x04, 0xc6, 0xc2, 0x66, 0x33, 0x98, 0xdd, 0x22, 0xb1, 0x0d, 0xb1, 0x5d, 0xc9, 0xd8, 0x3f,
13 | 0xe7, 0x67, 0xc7, 0xf1, 0x24, 0x4e, 0x6c, 0x67, 0x12, 0xbb, 0x52, 0xe3, 0xc4, 0x1e, 0xcf, 0x24,
14 | 0x35, 0x4e, 0x3c, 0x93, 0x8c, 0x27, 0x9e, 0x49, 0xf2, 0xf3, 0x2f, 0x13, 0xa7, 0xe2, 0x85, 0xc4,
15 | 0x71, 0x12, 0x63, 0x67, 0xa6, 0x92, 0xfc, 0x91, 0x54, 0x52, 0x95, 0x3d, 0xf3, 0xd5, 0x6d, 0xbf,
16 | 0x76, 0xeb, 0x2e, 0xfd, 0xee, 0xbb, 0xab, 0xde, 0xd3, 0xf9, 0xd4, 0xab, 0x57, 0x7d, 0xfb, 0x76,
17 | 0x9f, 0x3e, 0xdd, 0x7d, 0xce, 0xed, 0xee, 0xbb, 0x2a, 0xc5, 0xd6, 0x58, 0xb3, 0x66, 0x8d, 0xc5,
18 | 0xc8, 0x88, 0x24, 0x58, 0x49, 0x29, 0xc9, 0x28, 0x97, 0xc9, 0xf6, 0x8a, 0x69, 0x78, 0x78, 0x4d,
19 | 0x84, 0xa4, 0xa4, 0xa4, 0x28, 0x8a, 0x32, 0x63, 0xc6, 0x0c, 0x25, 0x76, 0x99, 0x11, 0x0e, 0x7f,
20 | 0x74, 0xe0, 0xe1, 0xb4, 0xb4, 0x34, 0x2b, 0x5d, 0x63, 0x68, 0x30, 0x16, 0xb1, 0x62, 0x75, 0x72,
21 | 0x1b, 0xb3, 0x92, 0x40, 0xd4, 0xca, 0x4a, 0xca, 0xb0, 0xc2, 0xc5, 0x48, 0xa5, 0x48, 0x60, 0xb5,
22 | 0x4a, 0x51, 0x38, 0x34, 0xc9, 0xe4, 0x59, 0xf4, 0x29, 0xf5, 0xe9, 0xc3, 0x4a, 0xb3, 0xa2, 0x95,
23 | 0x1c, 0x4d, 0x11, 0x1c, 0xc3, 0x94, 0x9a, 0x78, 0x6c, 0x16, 0x16, 0x16, 0x26, 0x26, 0x26, 0xc6,
24 | 0xc7, 0xc7, 0xcf, 0x9c, 0x39, 0x33, 0xb6, 0xdd, 0x38, 0x40, 0xd8, 0x61, 0x22, 0x2e, 0x2e, 0x0e,
25 | 0xff, 0xf3, 0xe6, 0xcd, 0xd3, 0xf7, 0x91, 0x99, 0x19, 0x48, 0xcc, 0xc3, 0xba, 0xe5, 0x84, 0x2d,
26 | 0x4b, 0x6f, 0x15, 0xf6, 0x0a, 0x92, 0xa4, 0x37, 0x53, 0x40, 0x12, 0x56, 0x56, 0x11, 0xd6, 0xc8,
27 | 0xcb, 0xcb, 0x4b, 0x48, 0x48, 0x60, 0xe6, 0x15, 0xb4, 0xa9, 0xdb, 0xe7, 0xe3, 0x7f, 0xfb, 0xf0,
28 | 0xab, 0xaf, 0x7f, 0xff, 0xda, 0x9b, 0x6f, 0x7c, 0xea, 0xd3, 0x8f, 0x96, 0x94, 0x94, 0xcc, 0x9a,
29 | 0x35, 0x2b, 0x68, 0x8d, 0xde, 0x87, 0x79, 0x2f, 0x02, 0x38, 0x56, 0xe6, 0xe7, 0xe7, 0x07, 0xdd,
30 | 0xe1, 0xd1, 0x81, 0x92, 0x3f, 0x99, 0x82, 0x82, 0x82, 0x7c, 0x0b, 0x58, 0x4c, 0xa6, 0x49, 0x69,
31 | 0x3d, 0x97, 0xed, 0xe2, 0xac, 0x64, 0x2c, 0x50, 0xb1, 0x9e, 0x85, 0xc5, 0xe0, 0x68, 0x87, 0xa9,
32 | 0x0b, 0x06, 0xe1, 0xe8, 0x75, 0xe0, 0xe7, 0xfe, 0xe9, 0x1f, 0xde, 0xfd, 0x9f, 0x77, 0xf8, 0xef,
33 | 0x3f, 0xbf, 0xfd, 0x1f, 0xa9, 0xa9, 0xa9, 0x41, 0x2b, 0xf5, 0x3e, 0xcc, 0x7b, 0xb1, 0x5a, 0xa9,
34 | 0xac, 0xac, 0x44, 0x53, 0xb3, 0x66, 0xb7, 0xdd, 0xf5, 0x12, 0xcc, 0x64, 0xba, 0x58, 0x96, 0x3d,
35 | 0x51, 0x56, 0x14, 0xd3, 0x84, 0x95, 0x95, 0x44, 0x38, 0xd0, 0x52, 0xb0, 0xa7, 0x9a, 0x9a, 0x9a,
36 | 0x8e, 0x8e, 0x0e, 0xd8, 0x56, 0xd0, 0x76, 0x6e, 0x93, 0x23, 0xb7, 0x1c, 0x79, 0xe7, 0xbf, 0xaf,
37 | 0x8b, 0x0e, 0x8c, 0xdf, 0xcd, 0xb7, 0x1c, 0x09, 0x5a, 0xaf, 0x49, 0x60, 0x85, 0x52, 0x5f, 0x5f,
38 | 0xdf, 0xd8, 0xd8, 0x58, 0x5e, 0x5e, 0x8e, 0x65, 0x0b, 0x5a, 0x3e, 0xe8, 0xce, 0x9f, 0xea, 0x28,
39 | 0xb9, 0x6e, 0x90, 0x93, 0x93, 0xe3, 0x8a, 0x9c, 0x88, 0xc8, 0x0b, 0x61, 0x5b, 0x42, 0x8e, 0x8a,
40 | 0x95, 0x82, 0xb0, 0xde, 0xa8, 0xae, 0xae, 0xde, 0xb4, 0x69, 0x53, 0x6f, 0x6f, 0x2f, 0xc2, 0x30,
41 | 0x35, 0x0c, 0xc5, 0x71, 0x2a, 0xd1, 0x32, 0x20, 0x5f, 0xbd, 0xfb, 0xaa, 0xc6, 0x7b, 0xf1, 0x3b,
42 | 0x7d, 0xe6, 0x74, 0xd0, 0x7a, 0xbd, 0x0f, 0x1a, 0xb3, 0xae, 0xae, 0x0e, 0x47, 0x49, 0xfc, 0x63,
43 | 0x7a, 0x0f, 0xef, 0xb5, 0xdd, 0xb3, 0x3e, 0xe3, 0x9d, 0xfd, 0x87, 0x95, 0xac, 0xac, 0x58, 0xb1,
44 | 0x62, 0xb9, 0xca, 0x0a, 0x01, 0xc3, 0xcd, 0xe5, 0x93, 0x31, 0xdb, 0xa5, 0x11, 0x28, 0x17, 0x65,
45 | 0x98, 0xc0, 0x50, 0xb8, 0x44, 0x3d, 0x0d, 0x62, 0x76, 0xb1, 0x08, 0x7d, 0xbc, 0x15, 0x69, 0x00,
46 | 0x8d, 0x88, 0xb9, 0xca, 0xda, 0xb5, 0x6b, 0x9b, 0x9a, 0x9a, 0xfa, 0xfa, 0xfa, 0xfa, 0xfb, 0xfb,
47 | 0x91, 0x45, 0x51, 0x7d, 0x38, 0x5a, 0xbc, 0x17, 0xdc, 0x7a, 0xea, 0xa4, 0xde, 0x81, 0x4f, 0x9c,
48 | 0x3c, 0x1e, 0xb4, 0x5e, 0x13, 0xb0, 0xc9, 0x73, 0x55, 0x55, 0x15, 0x8e, 0x8f, 0xed, 0xed, 0xed,
49 | 0x15, 0x15, 0x15, 0x38, 0x4a, 0xc2, 0x3a, 0xad, 0x98, 0x81, 0x61, 0x57, 0x4a, 0xfa, 0x5d, 0x63,
50 | 0x60, 0x7a, 0x83, 0x94, 0x17, 0x61, 0x68, 0x30, 0x86, 0x26, 0x64, 0x3b, 0xaf, 0x99, 0x7d, 0x1a,
51 | 0xba, 0x8c, 0x92, 0xed, 0x25, 0x28, 0xc9, 0x30, 0x3c, 0x15, 0x60, 0xcd, 0x61, 0x31, 0x31, 0x5a,
52 | 0x0a, 0xf6, 0x84, 0x49, 0x5d, 0x57, 0x57, 0xd7, 0xce, 0x9d, 0x3b, 0xbb, 0xbb, 0xbb, 0xd9, 0xea,
53 | 0x91, 0x59, 0x1e, 0x88, 0x0a, 0x4f, 0xfe, 0xfa, 0xbf, 0x7f, 0x4d, 0xf4, 0xde, 0xef, 0xbd, 0xfa,
54 | 0x0a, 0x8e, 0x41, 0x41, 0x2b, 0xf5, 0x5e, 0x1b, 0x96, 0x95, 0x95, 0xe1, 0xc8, 0x38, 0x30, 0x30,
55 | 0x50, 0x5b, 0x5b, 0xcb, 0x5c, 0xd7, 0xd3, 0xde, 0xf7, 0x08, 0xff, 0x8d, 0x5c, 0x59, 0x3a, 0x5d,
56 | 0x59, 0xa6, 0x12, 0x51, 0x62, 0x80, 0x71, 0x78, 0xfb, 0xf6, 0xed, 0xf0, 0xe1, 0xb6, 0xb6, 0xb6,
57 | 0xb9, 0x73, 0xe7, 0x2a, 0x51, 0xe2, 0xba, 0x8c, 0xe4, 0xe4, 0xe4, 0x2f, 0x3f, 0xff, 0xa5, 0xeb,
58 | 0x3f, 0x7b, 0x1b, 0xde, 0xfb, 0x95, 0x7f, 0xf9, 0x4a, 0x75, 0x4d, 0x75, 0xb0, 0xfa, 0xf0, 0xd3,
59 | 0xce, 0x58, 0xa4, 0x6c, 0xdd, 0xba, 0x75, 0xc7, 0x8e, 0x1d, 0x98, 0x3f, 0x23, 0x6c, 0xb1, 0x47,
60 | 0x6c, 0xf7, 0xa6, 0xeb, 0x04, 0x58, 0xb4, 0xb2, 0xc4, 0x88, 0xac, 0xac, 0x2c, 0xf6, 0xcf, 0x03,
61 | 0xfc, 0x5f, 0x93, 0x46, 0x9f, 0xd1, 0x30, 0xde, 0x22, 0x3c, 0xaf, 0x3e, 0x60, 0x25, 0xa3, 0x24,
62 | 0xb1, 0xd9, 0x2e, 0x7d, 0xa5, 0xe4, 0x25, 0xe2, 0x98, 0x57, 0x53, 0x53, 0xb3, 0x4b, 0xa5, 0xa5,
63 | 0xa5, 0x85, 0x8d, 0x60, 0xbe, 0xdd, 0xe7, 0x10, 0x4b, 0xf0, 0xd3, 0x07, 0x8b, 0x17, 0x2f, 0xc6,
64 | 0xc0, 0x3b, 0x38, 0x38, 0x88, 0x11, 0x18, 0x33, 0x67, 0xeb, 0x7d, 0xca, 0xfb, 0x4b, 0x9f, 0x06,
65 | 0x96, 0x2d, 0xc9, 0xa5, 0xe9, 0xfa, 0xb0, 0x56, 0x67, 0x66, 0xea, 0x56, 0x62, 0xcc, 0x6a, 0x11,
66 | 0xb6, 0x08, 0x8b, 0x2e, 0xa0, 0x64, 0xea, 0x40, 0x06, 0x7d, 0xa4, 0xe1, 0x5e, 0x1e, 0x96, 0x67,
67 | 0x31, 0x4c, 0x69, 0x98, 0xc5, 0x9e, 0x1c, 0xeb, 0xb9, 0x24, 0x7b, 0xc3, 0xca, 0xe1, 0xb6, 0x82,
68 | 0xc3, 0x2d, 0x5c, 0x77, 0x64, 0x64, 0x04, 0x43, 0xf1, 0xfa, 0xf5, 0xeb, 0xd9, 0x30, 0xc2, 0xe7,
69 | 0xd2, 0x81, 0xf0, 0xc0, 0xff, 0x7d, 0xe0, 0xdf, 0xbe, 0xf1, 0x6f, 0x2f, 0x86, 0x7e, 0x62, 0x58,
70 | 0x8c, 0x7c, 0xe1, 0x5f, 0xbf, 0xfa, 0x37, 0xf7, 0x7d, 0x64, 0x2a, 0x5c, 0xfb, 0xe5, 0x2d, 0x36,
71 | 0x6f, 0xde, 0x3c, 0xac, 0x7b, 0x87, 0x86, 0x86, 0x30, 0x02, 0x97, 0x96, 0x96, 0x32, 0x7b, 0xcd,
72 | 0x34, 0x31, 0x33, 0x49, 0x9f, 0x6a, 0xec, 0x41, 0xb4, 0x7e, 0xb3, 0x94, 0xfa, 0x5c, 0x92, 0xde,
73 | 0x37, 0x53, 0xc3, 0x3a, 0x62, 0xbd, 0xac, 0x58, 0x9a, 0x3e, 0x97, 0x61, 0x46, 0x65, 0x11, 0x61,
74 | 0x19, 0x8c, 0x15, 0x68, 0x32, 0xfc, 0x63, 0xa9, 0xb3, 0x69, 0xd3, 0xa6, 0x3d, 0x7b, 0xf6, 0x6c,
75 | 0xd9, 0xb2, 0xa5, 0xa2, 0xa2, 0x22, 0x68, 0x77, 0x50, 0xbe, 0xfb, 0xbd, 0xff, 0xd2, 0x9f, 0xa0,
76 | 0x32, 0xfb, 0xfd, 0xe4, 0xfa, 0x8f, 0xcf, 0x9c, 0x3b, 0x13, 0xa0, 0xb6, 0x7c, 0xc2, 0x92, 0x94,
77 | 0x94, 0xd4, 0xda, 0xda, 0x0a, 0xef, 0x45, 0x4b, 0x96, 0x97, 0x97, 0xb3, 0xb6, 0x05, 0xae, 0x74,
78 | 0x13, 0x97, 0xe6, 0x5c, 0xe0, 0x54, 0x46, 0x49, 0xd7, 0x91, 0x91, 0x91, 0xa1, 0x09, 0xeb, 0xff,
79 | 0x59, 0xc0, 0x2c, 0x2c, 0x91, 0xc9, 0x85, 0x68, 0x02, 0x66, 0x79, 0x35, 0x31, 0xfa, 0x52, 0xcc,
80 | 0xd4, 0xd0, 0xe4, 0x32, 0x8c, 0x37, 0xd4, 0x5c, 0x9e, 0x12, 0xa0, 0xd5, 0xb0, 0x99, 0x9b, 0x9b,
81 | 0xdb, 0xdd, 0xdd, 0x3d, 0x3c, 0x3c, 0x0c, 0x1f, 0x9e, 0xb8, 0x21, 0x26, 0x50, 0x30, 0x93, 0xef,
82 | 0xed, 0xeb, 0xc5, 0xaf, 0xaf, 0xbf, 0x97, 0x05, 0xde, 0xdb, 0x14, 0xc2, 0x95, 0x55, 0x95, 0x3d,
83 | 0x3d, 0xdd, 0x9f, 0x7d, 0xea, 0xb3, 0xef, 0xfc, 0xf7, 0xf5, 0x1f, 0xfd, 0xe4, 0xcd, 0x00, 0xb5,
84 | 0x65, 0xde, 0x8b, 0xff, 0xfa, 0xfa, 0x7a, 0x78, 0x2f, 0x16, 0x23, 0x75, 0x75, 0x75, 0x98, 0xd7,
85 | 0xa0, 0x55, 0x99, 0x51, 0xb2, 0x46, 0xce, 0x98, 0x8c, 0x59, 0x77, 0xe8, 0x7b, 0x8d, 0x77, 0x93,
86 | 0x61, 0x5e, 0x89, 0xe5, 0x98, 0x59, 0x82, 0xa1, 0x61, 0x84, 0xb5, 0xd5, 0xf4, 0xc9, 0xd6, 0xae,
87 | 0x71, 0x22, 0x89, 0xb4, 0xb0, 0x8a, 0x89, 0x81, 0x89, 0x5b, 0xc6, 0x83, 0x42, 0xac, 0x40, 0x80,
88 | 0x6a, 0x44, 0x0a, 0x57, 0x38, 0x2f, 0x2f, 0x0f, 0x8b, 0x37, 0xd8, 0x5f, 0x57, 0x57, 0xd7, 0xc4,
89 | 0xe9, 0x84, 0xd0, 0x59, 0x19, 0xdf, 0xd6, 0xc3, 0x28, 0x68, 0xcb, 0xd6, 0x01, 0xfc, 0x86, 0x76,
90 | 0x0d, 0xaa, 0xbf, 0x21, 0xe1, 0x7f, 0x52, 0x4c, 0xdd, 0xc6, 0x3a, 0x9e, 0xeb, 0x1f, 0xfe, 0xf1,
91 | 0x59, 0x8c, 0xc3, 0x27, 0x6f, 0x3d, 0xe1, 0x8f, 0x92, 0x5c, 0x55, 0x4d, 0xcb, 0x54, 0x55, 0x55,
92 | 0x61, 0x0d, 0x82, 0x23, 0x60, 0x53, 0x53, 0x13, 0xe6, 0xba, 0xac, 0x49, 0x79, 0xdb, 0x8a, 0x26,
93 | 0x61, 0xcf, 0x42, 0xbc, 0x33, 0xaa, 0x29, 0x65, 0xb1, 0xca, 0xc2, 0x40, 0x81, 0x06, 0xc1, 0x2a,
94 | 0x60, 0x03, 0xd6, 0x70, 0x2c, 0x5c, 0x58, 0x58, 0xb8, 0x6d, 0xdb, 0x36, 0xf8, 0x70, 0x67, 0x67,
95 | 0x27, 0x36, 0x61, 0x97, 0xec, 0x7e, 0x69, 0x7f, 0x96, 0xc4, 0x2f, 0xff, 0xd7, 0xff, 0xb3, 0x38,
96 | 0x6d, 0x7e, 0xfb, 0xdd, 0x9f, 0x36, 0x34, 0x36, 0xb0, 0x5c, 0x9f, 0x78, 0xf4, 0x13, 0x88, 0xb9,
97 | 0x70, 0xf1, 0xbc, 0x0f, 0x1a, 0x32, 0xf8, 0x9c, 0x99, 0xb7, 0xcc, 0x9a, 0x35, 0x6b, 0x30, 0x73,
98 | 0xd9, 0xbd, 0x7b, 0x77, 0x7b, 0x7b, 0x3b, 0xc6, 0xde, 0x40, 0xfb, 0x33, 0xba, 0x51, 0x16, 0x2c,
99 | 0x58, 0x90, 0x9a, 0x9a, 0xca, 0xfe, 0x59, 0x80, 0xa1, 0x09, 0x8b, 0x9b, 0x1a, 0x78, 0x76, 0x31,
100 | 0xa5, 0x3e, 0xbb, 0xa1, 0x40, 0x1e, 0x69, 0x98, 0x5e, 0x92, 0x46, 0x42, 0xea, 0x64, 0x0c, 0x0b,
101 | 0x15, 0x77, 0x19, 0x86, 0xf5, 0x65, 0x69, 0x62, 0xd0, 0x76, 0x88, 0xc1, 0x7f, 0x59, 0x59, 0x19,
102 | 0x1c, 0x78, 0xe7, 0xce, 0x9d, 0xcd, 0xcd, 0xcd, 0xc9, 0xc9, 0xc9, 0xb0, 0x54, 0xf8, 0xb0, 0x3f,
103 | 0xe7, 0xa5, 0x1f, 0xf8, 0xe8, 0xff, 0x79, 0xfe, 0xab, 0xff, 0xfc, 0xde, 0xef, 0x85, 0xe7, 0x9f,
104 | 0x7f, 0x81, 0x05, 0x42, 0xbf, 0xaf, 0xbe, 0xbf, 0xf9, 0xdc, 0x97, 0x9e, 0xe3, 0xb9, 0xbe, 0xfc,
105 | 0xcf, 0x5f, 0x82, 0x03, 0x63, 0xdc, 0xf6, 0x5a, 0x3d, 0x0e, 0x1f, 0x7e, 0x99, 0xf7, 0xae, 0x58,
106 | 0xb1, 0x02, 0xab, 0x0f, 0x78, 0x2f, 0xfe, 0x73, 0x72, 0x72, 0xd0, 0x8c, 0x38, 0x20, 0x9a, 0xb5,
107 | 0xbc, 0xa1, 0x39, 0x85, 0x0d, 0x1b, 0x9a, 0x8d, 0x59, 0x8f, 0x1b, 0x76, 0xb4, 0xdc, 0x72, 0x24,
108 | 0x2e, 0x63, 0x68, 0xb7, 0x86, 0x7a, 0xea, 0x4d, 0xd4, 0xac, 0x2e, 0x86, 0xf2, 0x19, 0xca, 0x7c,
109 | 0xc2, 0x16, 0xac, 0xf9, 0x10, 0x80, 0xf1, 0x61, 0x36, 0x08, 0x1f, 0xde, 0xb1, 0x63, 0x47, 0x6d,
110 | 0x6d, 0x2d, 0x7b, 0xde, 0x90, 0x2f, 0xf3, 0x7c, 0x73, 0x12, 0x8b, 0xcc, 0x9b, 0x37, 0xef, 0x8d,
111 | 0x1f, 0xbe, 0xfe, 0xd6, 0x4f, 0x7f, 0xe4, 0x4f, 0x71, 0xbc, 0x05, 0x10, 0x60, 0x97, 0xdc, 0xb0,
112 | 0x78, 0xc3, 0x8a, 0x03, 0x4b, 0xdf, 0xbe, 0xbe, 0x3e, 0xac, 0x41, 0xd0, 0x80, 0xdc, 0x22, 0x83,
113 | 0xee, 0x52, 0x19, 0xdc, 0x61, 0x82, 0x56, 0x44, 0xcb, 0xc4, 0xc3, 0x1f, 0x22, 0xe8, 0x60, 0x31,
114 | 0x20, 0xfe, 0xdb, 0x40, 0x93, 0x51, 0xbf, 0xa9, 0x91, 0xcf, 0x63, 0x24, 0xb9, 0xc2, 0xea, 0xa3,
115 | 0xa9, 0x82, 0x61, 0x02, 0xdb, 0x35, 0xd2, 0xc8, 0x47, 0x0b, 0x22, 0x00, 0x1f, 0xae, 0xab, 0xab,
116 | 0xc3, 0x72, 0x0e, 0x8b, 0xba, 0x75, 0xeb, 0xd6, 0xe9, 0xcd, 0xd7, 0x07, 0xf2, 0xf3, 0xf3, 0xbf,
117 | 0xf2, 0x2f, 0xcf, 0xff, 0xfb, 0x4b, 0x2f, 0x8a, 0xbf, 0x17, 0x5f, 0x7a, 0xf1, 0xe9, 0x2f, 0xfe,
118 | 0xbd, 0x98, 0xec, 0xec, 0xb9, 0x33, 0x18, 0x7e, 0xbf, 0xf0, 0xcc, 0x17, 0x7c, 0x53, 0x8c, 0xc1,
119 | 0xbc, 0x17, 0x6d, 0xd5, 0xd2, 0xd2, 0x82, 0x83, 0x1d, 0xd6, 0x1d, 0xab, 0x56, 0xad, 0xe2, 0xbd,
120 | 0xcf, 0x5b, 0xd2, 0x4a, 0xe3, 0x8b, 0x7d, 0x17, 0x51, 0x17, 0xcb, 0x8d, 0x59, 0x62, 0x12, 0xf3,
121 | 0x26, 0x13, 0x36, 0xbd, 0x75, 0x0c, 0xeb, 0x12, 0x91, 0x64, 0x65, 0xae, 0x8f, 0xa0, 0x3c, 0x3f,
122 | 0x8b, 0xf3, 0x08, 0xb1, 0x16, 0x2c, 0x8c, 0xff, 0x45, 0x8b, 0x16, 0xb5, 0xb6, 0xb6, 0xc2, 0x87,
123 | 0x07, 0x06, 0x06, 0x26, 0xde, 0x93, 0xa0, 0xe2, 0xe7, 0xc5, 0xe1, 0x3b, 0xee, 0xfc, 0xa0, 0xfe,
124 | 0x61, 0x23, 0xf6, 0x3b, 0x76, 0xfc, 0x28, 0x4f, 0xf6, 0x85, 0x67, 0x9f, 0x46, 0xcc, 0xd9, 0xf3,
125 | 0x67, 0x7d, 0x53, 0x4c, 0x09, 0x1d, 0xc8, 0xd8, 0x93, 0x46, 0x58, 0x6b, 0x60, 0xf8, 0x2d, 0x2d,
126 | 0x2d, 0x85, 0xc7, 0xc2, 0x52, 0x79, 0x33, 0xf2, 0xb0, 0xeb, 0x9d, 0xe5, 0xa2, 0xd5, 0x4d, 0x41,
127 | 0x03, 0x56, 0xe6, 0xc4, 0x22, 0xac, 0x6e, 0xde, 0x09, 0xd7, 0x94, 0x82, 0x7e, 0xc5, 0x7f, 0x66,
128 | 0x66, 0x66, 0x67, 0x67, 0xe7, 0x9e, 0x3d, 0x7b, 0xb0, 0xb4, 0xc3, 0xe4, 0x50, 0x11, 0x6e, 0x36,
129 | 0xf2, 0x87, 0xda, 0x8d, 0xb5, 0x7d, 0xfd, 0x7d, 0x23, 0xfb, 0xf7, 0x7d, 0xfa, 0xf1, 0x4f, 0x71,
130 | 0xef, 0x85, 0x57, 0x8b, 0x69, 0x7e, 0xfc, 0xf6, 0x5b, 0xd7, 0xde, 0x7c, 0x63, 0xfe, 0x82, 0xf9,
131 | 0xbe, 0x69, 0xc5, 0x40, 0x53, 0x54, 0x57, 0x57, 0x0f, 0x0e, 0x0e, 0xe2, 0x18, 0x87, 0x15, 0x07,
132 | 0x1b, 0x6f, 0xe1, 0xb4, 0xfa, 0x56, 0xf5, 0xae, 0xbf, 0x62, 0x92, 0x89, 0xfb, 0x63, 0x63, 0x03,
133 | 0x56, 0x1f, 0x31, 0xe0, 0x43, 0x89, 0xdc, 0x81, 0x11, 0x40, 0x4c, 0x76, 0x76, 0x76, 0x4f, 0x4f,
134 | 0x0f, 0xf3, 0x61, 0x76, 0x61, 0x29, 0x28, 0x1e, 0xfb, 0xcc, 0x63, 0xcc, 0x81, 0x3f, 0xfb, 0xe4,
135 | 0xdf, 0xf1, 0xc8, 0xb1, 0x23, 0x63, 0x88, 0xf9, 0xa7, 0x2f, 0xff, 0xa3, 0xff, 0xfa, 0xac, 0x5d,
136 | 0xbb, 0x76, 0xc7, 0x8e, 0x1d, 0xfb, 0xf6, 0xed, 0xc3, 0x5a, 0x03, 0x2b, 0x5e, 0xb4, 0x15, 0x1f,
137 | 0x1b, 0x59, 0x7f, 0xb1, 0x06, 0xf4, 0xa2, 0x8f, 0xfc, 0x31, 0x86, 0xa0, 0x98, 0xb8, 0x1b, 0x26,
138 | 0x5a, 0x80, 0xba, 0x3c, 0x20, 0x86, 0x79, 0x8c, 0x18, 0x16, 0xd3, 0x7b, 0xaa, 0x92, 0x58, 0x34,
139 | 0xc0, 0xd8, 0xcb, 0x2e, 0x6f, 0x76, 0x74, 0x74, 0xa4, 0x4e, 0x7e, 0x62, 0xc9, 0x4f, 0xce, 0x9c,
140 | 0xbd, 0x0d, 0xbe, 0xfa, 0xe6, 0x8f, 0x7f, 0x28, 0x3e, 0x6f, 0xf4, 0xd4, 0xe7, 0x9f, 0x44, 0xe4,
141 | 0xf8, 0x07, 0xc6, 0xfd, 0xd1, 0x81, 0x9f, 0xcc, 0x2b, 0x28, 0x28, 0xc0, 0xca, 0x62, 0x74, 0x74,
142 | 0x14, 0xab, 0x8c, 0x85, 0x0b, 0x17, 0xea, 0xdb, 0x4d, 0x6c, 0x40, 0xaf, 0x3b, 0x28, 0xc6, 0x98,
143 | 0x78, 0xff, 0x90, 0x9f, 0xa0, 0x48, 0x9f, 0x4b, 0xf4, 0x19, 0x54, 0x70, 0xcd, 0x9a, 0x35, 0x98,
144 | 0x2b, 0xee, 0xda, 0xb5, 0xab, 0xb1, 0xb1, 0x71, 0x62, 0x92, 0x13, 0x84, 0x0f, 0x7f, 0xe1, 0x99,
145 | 0x89, 0xb5, 0x2e, 0xe6, 0xd2, 0x62, 0xe4, 0xf7, 0x5e, 0x7d, 0xe5, 0xfa, 0xbb, 0x6f, 0x2f, 0x5e,
146 | 0xbc, 0xd8, 0x07, 0x05, 0xb8, 0xf7, 0x2e, 0x5f, 0xbe, 0x1c, 0xb3, 0x12, 0x1c, 0xd1, 0x30, 0x2b,
147 | 0xc1, 0x2a, 0x23, 0xe8, 0xfe, 0x89, 0x35, 0x94, 0xd9, 0x84, 0x7b, 0xa0, 0x41, 0xf1, 0x0f, 0xa7,
148 | 0xc5, 0x8c, 0x71, 0x68, 0x68, 0x08, 0x93, 0xc6, 0x0d, 0x1b, 0x36, 0xb0, 0x87, 0x07, 0x7c, 0xbe,
149 | 0xa4, 0xf4, 0xd3, 0xeb, 0x3f, 0xd1, 0x5c, 0x2b, 0x1a, 0x3b, 0x72, 0x13, 0xd6, 0xc3, 0x2f, 0xfc,
150 | 0xeb, 0x57, 0xbd, 0x2e, 0x5a, 0x7c, 0x0d, 0xed, 0xa2, 0x45, 0x8b, 0xd8, 0x79, 0x81, 0xbe, 0xbe,
151 | 0x3e, 0xac, 0x2f, 0xd0, 0x38, 0x38, 0xc0, 0x05, 0xdd, 0x4b, 0x31, 0xc5, 0xc4, 0xb9, 0x41, 0x00,
152 | 0x23, 0x63, 0xff, 0x2c, 0xc0, 0x23, 0x35, 0x68, 0xe2, 0xcd, 0xd2, 0xe8, 0x03, 0x66, 0x61, 0x33,
153 | 0x21, 0x62, 0x4a, 0x7d, 0x32, 0x7d, 0x11, 0x66, 0x4a, 0x9a, 0x09, 0x9f, 0x65, 0x54, 0x4d, 0xbd,
154 | 0x62, 0x86, 0x6d, 0x62, 0xa8, 0x0f, 0xdf, 0x44, 0x9b, 0xe2, 0x1f, 0x2b, 0xba, 0xea, 0xea, 0x6a,
155 | 0x76, 0x71, 0xb8, 0xbc, 0xbc, 0xdc, 0x67, 0xef, 0xc5, 0x88, 0x87, 0xe1, 0xf7, 0xe1, 0x47, 0x3e,
156 | 0x26, 0x46, 0xb2, 0x55, 0xf1, 0x95, 0xab, 0x77, 0x79, 0x5d, 0x3a, 0x9f, 0x6e, 0x60, 0x89, 0xcb,
157 | 0xce, 0xcc, 0x6f, 0xd9, 0xb2, 0x65, 0xe5, 0xca, 0x95, 0xac, 0x7d, 0x70, 0x8c, 0xd3, 0xf7, 0x8b,
158 | 0xde, 0x02, 0x67, 0xe9, 0x8c, 0xcd, 0x30, 0xa5, 0xf5, 0xce, 0xd5, 0x77, 0x71, 0x58, 0xf9, 0x7a,
159 | 0xa3, 0x15, 0x15, 0xd3, 0x28, 0xa9, 0x0f, 0x98, 0x19, 0x89, 0x61, 0xf6, 0xb0, 0x95, 0x32, 0xdb,
160 | 0xab, 0xcc, 0x24, 0x5c, 0x85, 0x37, 0x37, 0xcc, 0xb7, 0xa1, 0xa1, 0x61, 0xef, 0xde, 0xbd, 0x58,
161 | 0xfe, 0xb1, 0xd7, 0x68, 0x29, 0x7e, 0x8d, 0xc3, 0x1f, 0x7d, 0xf0, 0xa3, 0xaf, 0xff, 0xe0, 0x35,
162 | 0x4d, 0xe4, 0x1b, 0x3f, 0x7c, 0x1d, 0x0e, 0x9c, 0x9f, 0x9f, 0xef, 0x5d, 0xb9, 0xfc, 0xc5, 0xce,
163 | 0x8a, 0xfa, 0x6a, 0xd8, 0xda, 0xda, 0xda, 0x21, 0x95, 0xd5, 0xab, 0x57, 0xe3, 0xb8, 0x36, 0x53,
164 | 0xe7, 0x3c, 0x84, 0x73, 0x26, 0xee, 0xdd, 0x25, 0x5c, 0x84, 0xb7, 0x2c, 0xc2, 0xe9, 0xe9, 0xe9,
165 | 0x6d, 0x6d, 0x6d, 0x6c, 0x02, 0x39, 0xf1, 0xfe, 0xb1, 0xc9, 0xd3, 0x4b, 0xef, 0xf8, 0xf6, 0xff,
166 | 0xff, 0x96, 0x66, 0xf5, 0xdb, 0xde, 0xd1, 0xce, 0xce, 0x69, 0x79, 0x5a, 0x2e, 0x5c, 0x97, 0x9d,
167 | 0x33, 0x43, 0xf5, 0xab, 0xaa, 0xaa, 0x30, 0xfb, 0xd8, 0xbd, 0x7b, 0x37, 0x26, 0x20, 0x70, 0x66,
168 | 0xb4, 0x06, 0x77, 0xdd, 0xa0, 0xbb, 0x28, 0xa6, 0x98, 0xb8, 0x45, 0x86, 0x70, 0x0b, 0x34, 0x28,
169 | 0xfb, 0xe7, 0x64, 0x66, 0x66, 0x6e, 0xde, 0xbc, 0x19, 0xe3, 0x70, 0x57, 0x57, 0x17, 0x3b, 0x7b,
170 | 0xe4, 0xb5, 0x03, 0xaf, 0x5a, 0xb5, 0x0a, 0xbe, 0x7a, 0xfb, 0xf8, 0x25, 0x31, 0xf2, 0x89, 0xbf,
171 | 0x7b, 0x1c, 0x91, 0xf7, 0x3f, 0x70, 0xbf, 0x77, 0xe5, 0x2a, 0xa1, 0xeb, 0xde, 0xa0, 0xb8, 0xb8,
172 | 0x98, 0x9d, 0x8a, 0xaf, 0xab, 0xab, 0x4b, 0x4e, 0x4e, 0x66, 0x6d, 0x02, 0x07, 0x66, 0x6d, 0x12,
173 | 0x74, 0x2f, 0xc5, 0x14, 0xef, 0x3d, 0x20, 0xa2, 0x27, 0x3e, 0xf4, 0xda, 0x54, 0xc3, 0x78, 0xcd,
174 | 0x5e, 0x7d, 0x24, 0x0f, 0x1b, 0xa6, 0xd7, 0x17, 0xa1, 0x09, 0x6b, 0xb2, 0x4b, 0xf2, 0x86, 0x4d,
175 | 0x60, 0x45, 0x7f, 0x79, 0x16, 0x4d, 0x1a, 0xc3, 0xba, 0xf3, 0x5d, 0x1c, 0x6e, 0xac, 0xd9, 0xd9,
176 | 0xd9, 0x58, 0x04, 0x62, 0x1c, 0xc6, 0x82, 0x70, 0xe2, 0xe6, 0x55, 0x8f, 0xd9, 0xb0, 0x61, 0x3d,
177 | 0x7c, 0xf5, 0x33, 0x9f, 0xfd, 0x0c, 0x8f, 0xc9, 0xcd, 0xcb, 0xc5, 0xd8, 0x8b, 0x48, 0x0c, 0x86,
178 | 0x5e, 0x97, 0x0e, 0x0a, 0x0b, 0x0b, 0x51, 0x5f, 0x1c, 0xb3, 0x58, 0x7d, 0xe3, 0x85, 0xe3, 0x9a,
179 | 0xa6, 0x89, 0x22, 0xed, 0x20, 0x2b, 0xdd, 0x61, 0x31, 0x97, 0x61, 0x58, 0xbe, 0xcb, 0x50, 0xc9,
180 | 0x88, 0xec, 0xd3, 0x2c, 0xbd, 0x59, 0xa4, 0x5e, 0x37, 0xb1, 0xe9, 0xd8, 0xff, 0xfb, 0xeb, 0x96,
181 | 0xb8, 0xd0, 0xf3, 0x22, 0x91, 0x22, 0x3e, 0x6b, 0x62, 0x23, 0x41, 0x44, 0x85, 0x4a, 0x44, 0xc9,
182 | 0x6b, 0x61, 0x98, 0x51, 0xdc, 0x0c, 0x9b, 0x40, 0x1e, 0xaf, 0x89, 0xd1, 0x34, 0x74, 0x41, 0x41,
183 | 0x01, 0xe6, 0x93, 0xec, 0xc9, 0x75, 0x76, 0x61, 0xc9, 0xd3, 0x41, 0xf8, 0xb5, 0x6b, 0xaf, 0xbd,
184 | 0xfd, 0xee, 0x4f, 0x1f, 0x7b, 0xe2, 0xd3, 0x3b, 0x76, 0x6e, 0xc7, 0x50, 0xfc, 0xa3, 0x1f, 0xbf,
185 | 0x09, 0xef, 0xd5, 0xdc, 0x14, 0xed, 0x2e, 0x71, 0xa1, 0x13, 0x57, 0x4b, 0x96, 0x2c, 0xe9, 0xef,
186 | 0xef, 0xdf, 0xb7, 0x6f, 0x5f, 0x47, 0x47, 0x07, 0x56, 0x10, 0x71, 0x82, 0x21, 0x9a, 0xd9, 0x7a,
187 | 0x58, 0x03, 0xb0, 0xd2, 0x0b, 0xa2, 0x19, 0x5b, 0x91, 0x69, 0x31, 0x8d, 0x15, 0x44, 0xcb, 0x31,
188 | 0xb3, 0x22, 0x89, 0xaa, 0x0e, 0xb5, 0x0a, 0xff, 0x4d, 0x3a, 0xc2, 0x39, 0x18, 0x7c, 0xd8, 0x85,
189 | 0xa5, 0x9d, 0x3b, 0x77, 0x56, 0x57, 0x57, 0x4f, 0x9c, 0xfd, 0x17, 0x26, 0x9c, 0x56, 0x3c, 0x44,
190 | 0x94, 0xa6, 0xef, 0x45, 0x8d, 0x6f, 0xdc, 0x78, 0xf8, 0x46, 0xcd, 0xed, 0xd0, 0xff, 0xf9, 0xed,
191 | 0xff, 0xd0, 0xa8, 0x34, 0xc9, 0x08, 0x8c, 0x4a, 0x99, 0x11, 0x7a, 0xa0, 0x4a, 0x0e, 0xab, 0x45,
192 | 0xbc, 0xba, 0xf4, 0x4d, 0x4b, 0x4b, 0xdb, 0xb4, 0x69, 0x13, 0x66, 0xce, 0x58, 0x35, 0x60, 0xbd,
193 | 0x60, 0xbf, 0xbd, 0x08, 0xcb, 0xb8, 0x7f, 0x30, 0x26, 0x0c, 0x81, 0xd3, 0x56, 0x55, 0x55, 0x61,
194 | 0x22, 0x0d, 0x1f, 0x86, 0x33, 0xc7, 0x7b, 0xfc, 0x42, 0xe6, 0x92, 0xd2, 0x92, 0x3b, 0xee, 0xfc,
195 | 0xe0, 0x23, 0x9f, 0x78, 0xe4, 0xa1, 0x87, 0x1f, 0x3a, 0x74, 0xe3, 0x21, 0x4f, 0xcb, 0x62, 0x60,
196 | 0xad, 0xdb, 0xd2, 0xd2, 0x82, 0x99, 0x33, 0xe6, 0xcf, 0xcb, 0x96, 0x2d, 0xf3, 0xa1, 0x44, 0x82,
197 | 0xf0, 0x83, 0x19, 0xc2, 0x95, 0x95, 0xa6, 0xa6, 0x26, 0x0c, 0x50, 0xec, 0x61, 0xba, 0x99, 0x33,
198 | 0x67, 0x4a, 0xe6, 0x51, 0x61, 0xd1, 0xac, 0xb4, 0x35, 0x27, 0x27, 0xc5, 0x93, 0xe1, 0x1c, 0xcd,
199 | 0x12, 0x3d, 0xde, 0x04, 0x43, 0x4d, 0xcc, 0xd4, 0x8b, 0x57, 0x3f, 0x4f, 0x91, 0x94, 0x94, 0xb4,
200 | 0x7e, 0xfd, 0xfa, 0xdd, 0xbb, 0x77, 0x63, 0xa5, 0x80, 0x35, 0xb0, 0x32, 0x25, 0x9f, 0x85, 0x26,
201 | 0x08, 0x3b, 0x70, 0xeb, 0x47, 0x78, 0xc1, 0x82, 0x05, 0x6d, 0x6d, 0x6d, 0x18, 0xa6, 0x7a, 0x7b,
202 | 0x7b, 0x4b, 0x4b, 0x4b, 0xb1, 0x36, 0x86, 0x27, 0x17, 0x0a, 0xb0, 0x4d, 0xf6, 0xe9, 0x57, 0x50,
203 | 0x5c, 0x5c, 0x5c, 0x52, 0x52, 0x52, 0xaa, 0x82, 0x71, 0xbb, 0x5c, 0xa5, 0xa2, 0xa2, 0xa2, 0xb2,
204 | 0xb2, 0x12, 0x53, 0x71, 0xf8, 0x4c, 0x6d, 0x6d, 0x2d, 0xd6, 0xd5, 0x1b, 0x37, 0x6e, 0xac, 0xaf,
205 | 0xaf, 0x6f, 0x68, 0x68, 0x68, 0x6c, 0x6c, 0x6c, 0x56, 0x69, 0x09, 0x81, 0x70, 0x93, 0x4a, 0xa3,
206 | 0x0a, 0xd2, 0x20, 0x31, 0xb2, 0x6c, 0xd8, 0xb0, 0xa1, 0xa6, 0xa6, 0x06, 0x42, 0xd6, 0xad, 0x5b,
207 | 0x57, 0xa9, 0x02, 0xb1, 0x10, 0x5e, 0x56, 0x56, 0x56, 0xa2, 0xc2, 0x3e, 0x48, 0x0d, 0x4d, 0xb8,
208 | 0x56, 0x66, 0x5f, 0xb8, 0x44, 0x2d, 0x20, 0x07, 0xde, 0x8b, 0xc9, 0x05, 0x32, 0x4e, 0x5c, 0xdb,
209 | 0x08, 0x3d, 0x00, 0x4c, 0x10, 0xb1, 0x00, 0x1f, 0x84, 0x15, 0xf5, 0xee, 0xc2, 0xae, 0xae, 0x2e,
210 | 0x36, 0x97, 0xde, 0xa6, 0xb2, 0x5d, 0x00, 0x9b, 0x18, 0xc4, 0xb0, 0x5a, 0x86, 0x3f, 0x20, 0xcd,
211 | 0xbe, 0x7d, 0xfb, 0x0e, 0x1c, 0x38, 0x30, 0x3a, 0x3a, 0x7a, 0xe8, 0xd0, 0xa1, 0xb1, 0xb1, 0xb1,
212 | 0x23, 0x47, 0x8e, 0xdc, 0x72, 0xcb, 0x2d, 0xc7, 0x8e, 0x1d, 0x3b, 0x71, 0xe2, 0xc4, 0xad, 0xb7,
213 | 0xde, 0x7a, 0xfa, 0xf4, 0xe9, 0x33, 0x67, 0xce, 0x9c, 0x55, 0x39, 0x77, 0xee, 0xdc, 0xf9, 0xf3,
214 | 0xe7, 0x2f, 0x5c, 0xb8, 0x70, 0xe9, 0xd2, 0xa5, 0xf1, 0xf1, 0xf1, 0x0f, 0x86, 0x40, 0x18, 0x31,
215 | 0x17, 0x2f, 0x5e, 0xbc, 0xa0, 0x72, 0x5e, 0x05, 0xe9, 0x6f, 0xbb, 0xed, 0x36, 0x48, 0x80, 0x1c,
216 | 0x48, 0x3b, 0x7a, 0xf4, 0x28, 0xc4, 0x42, 0xfe, 0xe1, 0xc3, 0x87, 0x51, 0x10, 0x4a, 0x1c, 0x19,
217 | 0x19, 0xc1, 0x4c, 0x01, 0x0a, 0xb0, 0x75, 0x3b, 0x54, 0x12, 0x95, 0xdc, 0x11, 0x02, 0xe1, 0x81,
218 | 0x81, 0x01, 0xe8, 0xcc, 0x12, 0xe3, 0x58, 0x30, 0x4b, 0xbd, 0x6f, 0x34, 0x2e, 0x7a, 0xbe, 0xf9,
219 | 0x46, 0x10, 0x96, 0x10, 0x6d, 0x7a, 0xe9, 0xd2, 0xa5, 0xec, 0x54, 0x2d, 0x18, 0x31, 0x82, 0x79,
220 | 0x2c, 0xdc, 0x09, 0x1e, 0x0b, 0xef, 0x3a, 0x7e, 0xfc, 0xf8, 0xc9, 0x93, 0x27, 0xe1, 0xae, 0xf0,
221 | 0x3a, 0x38, 0x2a, 0xbc, 0x11, 0x6e, 0xf9, 0x01, 0x23, 0xe0, 0xb1, 0x77, 0xde, 0x79, 0xe7, 0x95,
222 | 0x2b, 0x57, 0x3e, 0xf4, 0xa1, 0x0f, 0xdd, 0xad, 0x72, 0xf5, 0xea, 0xd5, 0xbb, 0xee, 0xba, 0x0b,
223 | 0x91, 0x86, 0xe9, 0x2f, 0x5f, 0xbe, 0x7c, 0x49, 0x85, 0x79, 0xf5, 0xa9, 0x53, 0xa7, 0x50, 0x10,
224 | 0x73, 0x69, 0x14, 0x0d, 0x05, 0x0e, 0x1e, 0x3c, 0xb8, 0x7f, 0xff, 0x7e, 0x43, 0x25, 0xa1, 0x3c,
225 | 0xa6, 0x12, 0xec, 0x28, 0xc3, 0x9e, 0x13, 0x9c, 0x78, 0xba, 0xcd, 0xf7, 0x57, 0x73, 0x12, 0x84,
226 | 0x1f, 0xc4, 0x09, 0xd7, 0x18, 0x14, 0xf5, 0x0d, 0x38, 0xb5, 0x2a, 0x6c, 0x36, 0x0b, 0xd8, 0x26,
227 | 0x0b, 0x23, 0x92, 0x4d, 0x89, 0x31, 0xf5, 0xc5, 0x34, 0xf8, 0x86, 0x1b, 0x6e, 0xc0, 0xc4, 0xbb,
228 | 0xbd, 0xbd, 0xbd, 0xa3, 0xa3, 0xa3, 0xb3, 0xb3, 0x73, 0xf3, 0xe6, 0xcd, 0xdd, 0xdd, 0xdd, 0x98,
229 | 0x84, 0xe3, 0x28, 0xb0, 0x65, 0xcb, 0x96, 0x6d, 0x21, 0x30, 0x24, 0xb2, 0xa7, 0xa0, 0x00, 0xfc,
230 | 0x6a, 0x58, 0x05, 0x01, 0x16, 0x83, 0x81, 0x74, 0xeb, 0xd6, 0xad, 0x48, 0x8f, 0x31, 0x93, 0x65,
231 | 0xc4, 0x7f, 0x5f, 0x5f, 0x5f, 0x4f, 0x4f, 0x0f, 0x04, 0x6e, 0xda, 0xb4, 0x09, 0xc2, 0x51, 0x0a,
232 | 0xca, 0x62, 0x73, 0x6f, 0x36, 0xeb, 0x86, 0x1a, 0x50, 0x86, 0xeb, 0x56, 0x2b, 0xc0, 0x36, 0x99,
233 | 0xc2, 0x18, 0x7b, 0x27, 0x5e, 0xef, 0x12, 0xba, 0x9e, 0x44, 0x0e, 0x4c, 0xc4, 0x1a, 0xe2, 0xa9,
234 | 0x20, 0x45, 0x35, 0x71, 0xcd, 0x43, 0xcb, 0x9a, 0x87, 0x9c, 0x19, 0xfc, 0x61, 0x77, 0x8e, 0xe6,
235 | 0x8d, 0x4a, 0xec, 0x6d, 0x52, 0x22, 0xfa, 0x77, 0x29, 0x1a, 0xbe, 0x8d, 0x4d, 0x7c, 0xc9, 0x13,
236 | 0x17, 0x2e, 0xbe, 0xea, 0x21, 0x59, 0xf7, 0x34, 0x7c, 0xd2, 0xe4, 0xc7, 0x6b, 0xc5, 0x78, 0x76,
237 | 0x61, 0x2c, 0x3e, 0xf4, 0xbd, 0x55, 0xba, 0xc2, 0x41, 0x10, 0xd1, 0x07, 0x39, 0x2d, 0x41, 0x10,
238 | 0x04, 0x41, 0x10, 0x04, 0x41, 0x10, 0x04, 0x41, 0x10, 0x04, 0x41, 0x10, 0x04, 0x41, 0x10, 0x04,
239 | 0x41, 0x10, 0x04, 0x41, 0x10, 0x04, 0x41, 0x58, 0x45, 0xf2, 0x2a, 0x00, 0xba, 0x81, 0x8e, 0x20,
240 | 0xa6, 0x0a, 0x72, 0x2f, 0x25, 0x07, 0x26, 0x88, 0x29, 0x4d, 0x58, 0x47, 0x8d, 0xc8, 0x87, 0xe9,
241 | 0x15, 0x3e, 0x04, 0x31, 0x55, 0x10, 0x9f, 0xaa, 0x31, 0xdb, 0xa5, 0xf7, 0x55, 0xfe, 0x30, 0x1d,
242 | 0xb9, 0x31, 0x41, 0x10, 0x04, 0x41, 0x10, 0x04, 0x41, 0x04, 0x08, 0xcd, 0xc9, 0x09, 0x22, 0xa6,
243 | 0xa0, 0x13, 0x66, 0x04, 0x11, 0x3b, 0x90, 0x33, 0x13, 0x04, 0x41, 0x10, 0x04, 0x41, 0x10, 0x04,
244 | 0x41, 0x10, 0x04, 0x41, 0x10, 0x04, 0x41, 0x10, 0x04, 0x41, 0x10, 0x04, 0x41, 0x10, 0x04, 0x41,
245 | 0x10, 0x04, 0x41, 0x10, 0x04, 0x41, 0x10, 0x04, 0x41, 0x10, 0x04, 0x41, 0x10, 0x04, 0x41, 0x10,
246 | 0xd3, 0x09, 0x7a, 0xa8, 0x8e, 0x20, 0xa2, 0x15, 0xf2, 0x5e, 0x82, 0x88, 0x4a, 0xe8, 0x05, 0x15,
247 | 0x04, 0x11, 0xc5, 0x90, 0x03, 0x13, 0x44, 0x54, 0x42, 0xae, 0x4b, 0x10, 0xd1, 0x0a, 0x7f, 0x8f,
248 | 0x7a, 0xd0, 0x8a, 0x10, 0x04, 0x11, 0x21, 0x92, 0x6f, 0x27, 0x10, 0x04, 0x31, 0xa5, 0xa1, 0x6f,
249 | 0x98, 0x10, 0x44, 0x14, 0x63, 0xf6, 0x71, 0x22, 0x82, 0x20, 0xa6, 0x3a, 0x34, 0x79, 0x26, 0x88,
250 | 0x28, 0x86, 0x86, 0x5f, 0x82, 0x88, 0x56, 0xe2, 0x42, 0x90, 0x03, 0x13, 0x44, 0x34, 0x01, 0x8f,
251 | 0x8d, 0x8f, 0x8f, 0x4f, 0x48, 0x48, 0xa0, 0xc9, 0x33, 0x41, 0x44, 0x1f, 0x6c, 0xe9, 0x0b, 0x1f,
252 | 0xa6, 0xb1, 0x97, 0x20, 0x08, 0x82, 0x20, 0x08, 0x82, 0x20, 0x08, 0x82, 0x20, 0x08, 0x82, 0x20,
253 | 0x08, 0x82, 0x20, 0x08, 0x82, 0x20, 0x08, 0x82, 0x20, 0x08, 0x82, 0x20, 0x08, 0x82, 0x20, 0x08,
254 | 0x82, 0x20, 0x08, 0x82, 0x20, 0x08, 0x82, 0x20, 0x08, 0x82, 0x20, 0x08, 0x82, 0x20, 0x08, 0x82,
255 | 0x20, 0x08, 0x82, 0x20, 0x08, 0x82, 0x20, 0x08, 0xc2, 0x6d, 0xe8, 0xf3, 0x02, 0x04, 0x11, 0xc5,
256 | 0xb0, 0x77, 0xb5, 0x05, 0xad, 0x05, 0x41, 0x10, 0xb6, 0xa0, 0xe1, 0x97, 0x20, 0x08, 0x82, 0x20,
257 | 0x08, 0x82, 0x20, 0x22, 0x25, 0x3e, 0x3e, 0x3e, 0x68, 0x15, 0x08, 0x82, 0xb0, 0x0b, 0x2d, 0x83,
258 | 0x09, 0x22, 0x2a, 0xa1, 0x53, 0xd0, 0x04, 0x11, 0xc5, 0x90, 0x03, 0x13, 0x44, 0x74, 0x43, 0x37,
259 | 0x72, 0x10, 0x44, 0x14, 0x43, 0xde, 0x4b, 0x10, 0x04, 0x41, 0x10, 0x04, 0x41, 0x10, 0x04, 0x41,
260 | 0x4c, 0x47, 0x66, 0x84, 0x08, 0x5a, 0x11, 0x82, 0x20, 0x6c, 0x41, 0x0e, 0x4c, 0x10, 0x04, 0x41,
261 | 0x10, 0x04, 0x41, 0x10, 0x04, 0x41, 0x10, 0x04, 0x41, 0x10, 0x04, 0x61, 0x06, 0x9d, 0x3e, 0x25,
262 | 0x88, 0x28, 0x26, 0x58, 0x07, 0x66, 0x4f, 0xf6, 0x78, 0xaa, 0x03, 0x2b, 0xc2, 0xeb, 0x52, 0x08,
263 | 0x22, 0x00, 0x82, 0xbd, 0x80, 0x89, 0xa2, 0x13, 0x54, 0xbc, 0x2e, 0x05, 0xde, 0x3b, 0x73, 0xe6,
264 | 0x4c, 0x7a, 0x87, 0x06, 0x11, 0x6b, 0x04, 0xe8, 0xc0, 0xcc, 0x7b, 0x13, 0x13, 0x13, 0x67, 0xcf,
265 | 0x9e, 0xed, 0xb5, 0x0e, 0x70, 0xe0, 0xa4, 0xa4, 0x24, 0x1f, 0x0a, 0x22, 0x08, 0x5f, 0x09, 0xd0,
266 | 0xa0, 0xe1, 0x54, 0x73, 0xe7, 0xce, 0x9d, 0x33, 0x67, 0x8e, 0xd7, 0x23, 0xb0, 0xa2, 0x56, 0x13,
267 | 0x0e, 0x8c, 0xb2, 0xc8, 0x87, 0x09, 0xc2, 0x1d, 0x66, 0xcd, 0x9a, 0x95, 0x96, 0x96, 0x06, 0x1f,
268 | 0xf6, 0xa7, 0x38, 0x4c, 0xa1, 0xe7, 0xcd, 0x9b, 0x37, 0x7f, 0xfe, 0x7c, 0x7a, 0x99, 0x06, 0x41,
269 | 0x38, 0x85, 0xb9, 0x53, 0x46, 0x46, 0x46, 0x72, 0x72, 0xb2, 0xf5, 0x5c, 0x0e, 0xcf, 0x78, 0xa1,
270 | 0xc4, 0xc5, 0x8b, 0x17, 0x63, 0x10, 0xb6, 0x97, 0x9d, 0x20, 0x88, 0xf7, 0xc0, 0xc0, 0x9b, 0x95,
271 | 0x95, 0x95, 0x9a, 0x9a, 0x8a, 0x71, 0xd8, 0x7a, 0x2e, 0xb8, 0x6e, 0xbc, 0x8a, 0x3d, 0x1f, 0xc6,
272 | 0x14, 0x3a, 0x33, 0x33, 0x73, 0xe1, 0xc2, 0x85, 0x11, 0x15, 0x4a, 0x10, 0x84, 0x96, 0xf4, 0xf4,
273 | 0xf4, 0x9c, 0x9c, 0x9c, 0x88, 0x86, 0x5f, 0x45, 0x75, 0x60, 0x8c, 0x9f, 0x70, 0x3f, 0x7b, 0x0e,
274 | 0x8c, 0x8c, 0xf0, 0xde, 0xec, 0xec, 0x6c, 0x0c, 0xc5, 0x36, 0xb2, 0x13, 0x04, 0x31, 0xe1, 0x84,
275 | 0x18, 0x7e, 0x97, 0x2d, 0x5b, 0x06, 0x47, 0xc2, 0x44, 0x3a, 0xa2, 0xbc, 0x98, 0x3f, 0xc3, 0xe7,
276 | 0x93, 0x92, 0x92, 0x6c, 0xcf, 0xa2, 0x91, 0x7d, 0xe5, 0xca, 0x95, 0x98, 0x48, 0xd3, 0xa9, 0x2c,
277 | 0x82, 0xb0, 0x03, 0x9c, 0x70, 0xe9, 0xd2, 0xa5, 0xb9, 0xb9, 0xb9, 0x98, 0x3f, 0x47, 0x7a, 0x61,
278 | 0x96, 0x39, 0xb0, 0x93, 0x13, 0xd7, 0x38, 0x64, 0xe4, 0xa8, 0x60, 0x10, 0x26, 0x1f, 0x26, 0x88,
279 | 0x88, 0xc1, 0x1c, 0xb8, 0xb0, 0xb0, 0x10, 0x2e, 0x04, 0x27, 0xb4, 0xe1, 0x42, 0x29, 0x29, 0x29,
280 | 0xf0, 0x7c, 0xdb, 0x0e, 0x8c, 0x43, 0x06, 0x66, 0xd1, 0xf9, 0xf9, 0xf9, 0x2b, 0x56, 0xac, 0xa0,
281 | 0xd3, 0xd1, 0x04, 0x11, 0x19, 0x58, 0x85, 0x62, 0xfa, 0x5a, 0x52, 0x52, 0xb2, 0x64, 0xc9, 0x12,
282 | 0x1b, 0xd9, 0x99, 0xfb, 0x65, 0x64, 0x64, 0x38, 0xb9, 0xa7, 0x0a, 0x79, 0xf3, 0xf2, 0xf2, 0x8a,
283 | 0x8b, 0x8b, 0x13, 0x13, 0x13, 0x6d, 0x0b, 0x21, 0x88, 0xe9, 0xc8, 0xfc, 0xf9, 0xf3, 0x57, 0xaf,
284 | 0x5e, 0x8d, 0x01, 0x10, 0x01, 0x1b, 0xd9, 0x31, 0x01, 0x4e, 0x4f, 0x4f, 0x5f, 0xb4, 0x68, 0x91,
285 | 0xc3, 0xd3, 0xc8, 0x58, 0x81, 0x97, 0x97, 0x97, 0xe3, 0x20, 0x42, 0x97, 0x94, 0x08, 0x22, 0x02,
286 | 0xb2, 0xb2, 0xb2, 0xd6, 0xaf, 0x5f, 0x9f, 0x99, 0x99, 0x69, 0x6f, 0xfa, 0x8a, 0xc1, 0x13, 0x0e,
287 | 0x8c, 0x25, 0x34, 0x56, 0xc2, 0x4e, 0x56, 0xb0, 0x38, 0x7c, 0x14, 0x14, 0x14, 0x94, 0x96, 0x96,
288 | 0x62, 0x36, 0x6e, 0x5b, 0x08, 0x41, 0x4c, 0x2f, 0xe6, 0xcc, 0x99, 0x53, 0x54, 0x54, 0x54, 0x5d,
289 | 0x5d, 0x6d, 0xfb, 0x2a, 0x0e, 0x9c, 0x16, 0xc3, 0x26, 0x96, 0xaf, 0x49, 0x49, 0x49, 0x4e, 0x34,
290 | 0x81, 0x1c, 0x1c, 0x44, 0x36, 0x6e, 0xdc, 0x98, 0x9d, 0x9d, 0xed, 0x44, 0x0e, 0x41, 0x4c, 0x23,
291 | 0xb0, 0xf2, 0xac, 0xaa, 0xaa, 0xc2, 0xfc, 0xd9, 0xf6, 0xe2, 0x13, 0x53, 0xe8, 0xe5, 0xcb, 0x97,
292 | 0xe7, 0xe4, 0xe4, 0x38, 0x5f, 0xbe, 0xa6, 0xa4, 0xa4, 0x6c, 0xd8, 0xb0, 0x01, 0x2b, 0x61, 0x04,
293 | 0x1c, 0x8a, 0x22, 0x88, 0xd8, 0x07, 0xb3, 0xdf, 0x75, 0xeb, 0xd6, 0xd5, 0xd4, 0xd4, 0x60, 0xf8,
294 | 0xb5, 0x7d, 0xfa, 0x37, 0x21, 0x21, 0x01, 0xf3, 0xe7, 0x95, 0x2b, 0x57, 0x3a, 0xbf, 0x83, 0x1a,
295 | 0x87, 0x00, 0x1c, 0x4a, 0xa0, 0x0f, 0xe6, 0xd2, 0x0e, 0x45, 0x11, 0x44, 0x8c, 0x03, 0xc7, 0x5b,
296 | 0xb4, 0x68, 0x51, 0x63, 0x63, 0x63, 0x79, 0x79, 0xb9, 0x43, 0x51, 0x98, 0xf4, 0xae, 0x59, 0xb3,
297 | 0xc6, 0xf9, 0xb0, 0xc9, 0x9e, 0x85, 0xaa, 0xad, 0xad, 0xc5, 0x38, 0xec, 0xc3, 0xe3, 0x50, 0x04,
298 | 0x11, 0xc5, 0x60, 0xd4, 0xad, 0xac, 0xac, 0x84, 0xb7, 0x60, 0xf9, 0xea, 0x44, 0x0e, 0xa6, 0xd0,
299 | 0x18, 0x36, 0x4b, 0x4a, 0x4a, 0xdc, 0x3a, 0x7b, 0x5c, 0x51, 0x51, 0xd1, 0xd2, 0xd2, 0x92, 0x95,
300 | 0x95, 0x15, 0xe9, 0x3d, 0x61, 0x04, 0x31, 0x8d, 0x80, 0x87, 0x74, 0x75, 0x75, 0x61, 0xc1, 0xe9,
301 | 0xf0, 0xe4, 0x13, 0xfc, 0x16, 0x0b, 0x60, 0x38, 0xb0, 0x5b, 0xf7, 0x51, 0x61, 0x45, 0xbd, 0x71,
302 | 0xe3, 0xc6, 0xf5, 0xeb, 0xd7, 0x2f, 0x58, 0xb0, 0xc0, 0xb9, 0x34, 0x82, 0x88, 0x41, 0xe0, 0x75,
303 | 0x70, 0xdd, 0xde, 0xde, 0x5e, 0x2c, 0x5f, 0x1d, 0x8a, 0xc2, 0xbc, 0x17, 0x63, 0x38, 0x06, 0xf3,
304 | 0xb4, 0xb4, 0x34, 0x57, 0x1c, 0x18, 0xba, 0x61, 0x42, 0xde, 0xd3, 0xd3, 0xe3, 0x5c, 0x37, 0x82,
305 | 0x88, 0x4d, 0x72, 0x73, 0x73, 0x9b, 0x9b, 0x9b, 0xeb, 0xeb, 0xeb, 0x9d, 0x5f, 0x74, 0x8d, 0x8f,
306 | 0x8f, 0x2f, 0x2a, 0x2a, 0xc2, 0xaa, 0xd5, 0xc5, 0x01, 0x73, 0xd9, 0xb2, 0x65, 0xfd, 0xfd, 0xfd,
307 | 0x65, 0x65, 0x65, 0x0e, 0x67, 0x07, 0x04, 0x11, 0x9b, 0xc0, 0xdf, 0x30, 0xc4, 0x65, 0x67, 0x67,
308 | 0x3b, 0x7f, 0x0a, 0x37, 0x31, 0x31, 0x11, 0x03, 0x66, 0x55, 0x55, 0x95, 0x8b, 0x0e, 0x8c, 0xc3,
309 | 0x0a, 0x66, 0xd1, 0x6d, 0x6d, 0x6d, 0x58, 0x5d, 0xbb, 0x25, 0x93, 0x20, 0x62, 0x01, 0xcc, 0x78,
310 | 0xe7, 0xcf, 0x9f, 0x8f, 0xd5, 0x6f, 0x67, 0x67, 0xa7, 0x2b, 0x67, 0x89, 0x12, 0x12, 0x12, 0x0a,
311 | 0x0a, 0x0a, 0x6a, 0x6a, 0x6a, 0x32, 0x33, 0x33, 0xdd, 0x7a, 0x96, 0x08, 0x8a, 0xb1, 0x41, 0xb8,
312 | 0xa1, 0xa1, 0xc1, 0x15, 0x81, 0xc4, 0x34, 0x25, 0xf6, 0x9e, 0x6e, 0x9b, 0x33, 0x67, 0x0e, 0x46,
313 | 0x4b, 0x0c, 0xbf, 0xeb, 0xd6, 0xad, 0x73, 0x4b, 0x26, 0xa6, 0xd0, 0x98, 0x90, 0x2f, 0x5a, 0xb4,
314 | 0xc8, 0x2d, 0x81, 0x8a, 0xea, 0xc3, 0x38, 0xca, 0x74, 0x77, 0x77, 0x2f, 0x5c, 0xb8, 0x90, 0x5e,
315 | 0x3d, 0x4b, 0xd8, 0x81, 0xbd, 0x79, 0x3c, 0x68, 0x2d, 0x5c, 0x26, 0x3d, 0x3d, 0x7d, 0xdb, 0xb6,
316 | 0x6d, 0x2d, 0x2d, 0x2d, 0x19, 0x19, 0x19, 0xae, 0x08, 0xc4, 0x24, 0xbc, 0xa2, 0xa2, 0x02, 0x0e,
317 | 0x6c, 0xef, 0x59, 0x08, 0x09, 0x38, 0xd0, 0xf4, 0xf5, 0xf5, 0x61, 0xb6, 0xef, 0xdb, 0x4b, 0xf6,
318 | 0x88, 0xd8, 0x81, 0xb9, 0x6e, 0x8c, 0x7d, 0x24, 0x1a, 0x95, 0x2a, 0x2c, 0x2c, 0xdc, 0xbf, 0x7f,
319 | 0xbf, 0xf3, 0x9b, 0x37, 0x38, 0x18, 0x2a, 0x4b, 0x4b, 0x4b, 0x1b, 0x1b, 0x1b, 0x31, 0x02, 0xbb,
320 | 0x7b, 0xbc, 0x4b, 0x4b, 0x4b, 0x6b, 0x6d, 0x6d, 0xdd, 0xb5, 0x6b, 0xd7, 0xe2, 0xc5, 0x8b, 0x5d,
321 | 0x14, 0x4b, 0x4c, 0x23, 0x62, 0x6c, 0x10, 0x5e, 0xba, 0x74, 0x69, 0x7b, 0x7b, 0xfb, 0xf6, 0xed,
322 | 0xdb, 0x73, 0x72, 0x72, 0xdc, 0x92, 0x89, 0x03, 0x5c, 0x7e, 0x7e, 0x3e, 0x56, 0xd4, 0x5e, 0x3c,
323 | 0x8e, 0xbf, 0x76, 0xed, 0xda, 0x83, 0x07, 0x0f, 0x16, 0x17, 0x17, 0xd3, 0x8d, 0x59, 0x04, 0xa1,
324 | 0xd4, 0xd4, 0xd4, 0x0c, 0x0f, 0x0f, 0x63, 0xf5, 0xeb, 0xee, 0x1b, 0xe4, 0xe0, 0xc3, 0x79, 0x79,
325 | 0x79, 0x18, 0x30, 0x5d, 0x94, 0xc9, 0xc0, 0x41, 0x01, 0x87, 0x1b, 0x2c, 0x86, 0x1d, 0xde, 0x2e,
326 | 0x46, 0x10, 0xd1, 0x0d, 0x7b, 0x77, 0x64, 0x6f, 0x6f, 0xef, 0x81, 0x03, 0x07, 0xbc, 0xf0, 0x34,
327 | 0x8f, 0x48, 0x49, 0x49, 0xa9, 0xac, 0xac, 0x84, 0xce, 0x75, 0x75, 0x75, 0x41, 0xeb, 0x42, 0x44,
328 | 0x09, 0x31, 0xb6, 0xee, 0x65, 0xc0, 0x7b, 0x4b, 0x4a, 0x4a, 0x76, 0xef, 0xde, 0x0d, 0x1f, 0x8e,
329 | 0xae, 0x37, 0x30, 0xa7, 0xa6, 0xa6, 0x8e, 0x8e, 0x8e, 0x0e, 0x0c, 0x0c, 0x38, 0x79, 0xf1, 0x25,
330 | 0x31, 0x5d, 0xf0, 0xe1, 0xcb, 0x9a, 0x81, 0x80, 0xa1, 0x6c, 0x50, 0xa5, 0xb0, 0xb0, 0x30, 0xba,
331 | 0xae, 0xca, 0xe0, 0x70, 0xd3, 0xd3, 0xd3, 0x83, 0x99, 0x7f, 0x45, 0x45, 0x45, 0xec, 0xbd, 0x31,
332 | 0x6b, 0x46, 0x88, 0xa0, 0x15, 0x89, 0x15, 0x62, 0xf5, 0xa3, 0xb5, 0xcb, 0x97, 0x2f, 0x3f, 0x7e,
333 | 0xfc, 0x78, 0x67, 0x67, 0xa7, 0xed, 0x4f, 0x28, 0x04, 0x05, 0x14, 0x2e, 0x28, 0x28, 0xd8, 0xb5,
334 | 0x6b, 0x17, 0x7c, 0x98, 0x5e, 0xfe, 0x4e, 0x84, 0x01, 0xe6, 0x12, 0x7b, 0x0e, 0x9c, 0x9e, 0x9e,
335 | 0xde, 0xda, 0xda, 0x7a, 0xf3, 0xcd, 0x37, 0x57, 0x55, 0x55, 0x05, 0xad, 0x4b, 0xc4, 0xb0, 0x01,
336 | 0x0a, 0x87, 0x9e, 0x53, 0xa7, 0x4e, 0xe5, 0xe5, 0xe5, 0x05, 0xad, 0x0e, 0x31, 0x85, 0x61, 0x9f,
337 | 0xf9, 0x89, 0x3d, 0x07, 0x2e, 0x2f, 0x2f, 0x1f, 0x1b, 0x1b, 0xf3, 0xe8, 0xf9, 0x1e, 0x7f, 0x16,
338 | 0x1d, 0x38, 0xf4, 0xe0, 0x00, 0xd4, 0xd1, 0xd1, 0x11, 0xf3, 0xd7, 0x84, 0x63, 0xcc, 0xf6, 0x7c,
339 | 0x25, 0x56, 0x1d, 0x18, 0xc3, 0xd7, 0xb9, 0x73, 0xe7, 0x8a, 0x8a, 0x8a, 0xbc, 0xb8, 0xa6, 0xed,
340 | 0xf0, 0xe3, 0x66, 0x16, 0xc9, 0xca, 0xca, 0xea, 0xee, 0xee, 0x3e, 0x7a, 0xf4, 0x68, 0x34, 0x4e,
341 | 0x22, 0xac, 0xc3, 0x8e, 0x86, 0x41, 0x6b, 0x41, 0x4c, 0x19, 0xd8, 0x0b, 0xd3, 0x47, 0x46, 0x46,
342 | 0x30, 0x02, 0x7b, 0xf4, 0x7c, 0xbc, 0xc3, 0x8f, 0x9b, 0x59, 0x07, 0x2b, 0xe1, 0x8b, 0x17, 0x2f,
343 | 0xf6, 0xf6, 0xf6, 0x7a, 0x5a, 0x0a, 0x41, 0x4c, 0x21, 0xe0, 0x57, 0x5b, 0xb6, 0x6c, 0xc1, 0xe4,
344 | 0xb3, 0xb9, 0xb9, 0x39, 0xd2, 0xcf, 0x0e, 0x5a, 0xc4, 0xf9, 0xc7, 0xcd, 0x2c, 0x82, 0x03, 0x10,
345 | 0x0e, 0x43, 0xa3, 0xa3, 0xa3, 0xab, 0x56, 0xad, 0x8a, 0xae, 0x13, 0xe9, 0x04, 0x61, 0x93, 0xb4,
346 | 0xb4, 0xb4, 0xdb, 0x6e, 0xbb, 0xed, 0xe0, 0xc1, 0x83, 0xa9, 0xa9, 0xa9, 0x1e, 0xcd, 0xcd, 0x9c,
347 | 0x7f, 0xdc, 0xcc, 0x22, 0x38, 0x46, 0x34, 0x34, 0x34, 0x60, 0x16, 0x3d, 0x38, 0x38, 0x48, 0x5f,
348 | 0x6f, 0x20, 0x62, 0x9f, 0x94, 0x94, 0x94, 0xda, 0xda, 0xda, 0x4b, 0x97, 0x2e, 0x79, 0x3d, 0xed,
349 | 0x74, 0xf8, 0x71, 0x33, 0x8b, 0xe0, 0x48, 0x81, 0x82, 0x0e, 0x1d, 0x3a, 0x74, 0xe1, 0xc2, 0x05,
350 | 0x77, 0x1f, 0x5d, 0x24, 0x88, 0xa9, 0x08, 0xa6, 0x9a, 0x98, 0x3c, 0x1f, 0x3e, 0x7c, 0xb8, 0xac,
351 | 0xac, 0xcc, 0xbb, 0x52, 0x5c, 0xf9, 0xb8, 0x99, 0x75, 0xba, 0xbb, 0xbb, 0xc7, 0xc7, 0xc7, 0x1b,
352 | 0x1b, 0x1b, 0x5d, 0x7f, 0x7a, 0x91, 0x20, 0xa6, 0x16, 0x4d, 0x4d, 0x4d, 0xf7, 0xde, 0x7b, 0x6f,
353 | 0x6b, 0x6b, 0xab, 0x47, 0xab, 0x5f, 0x86, 0x5b, 0x1f, 0x37, 0xb3, 0x48, 0x71, 0x71, 0xf1, 0x8d,
354 | 0x37, 0xde, 0x78, 0xfc, 0xf8, 0xf1, 0xd5, 0xab, 0x57, 0xfb, 0x50, 0x1c, 0x41, 0x04, 0x03, 0x3c,
355 | 0x6a, 0x78, 0x78, 0xf8, 0xae, 0xbb, 0xee, 0x5a, 0xb9, 0x72, 0xa5, 0xa7, 0x05, 0xb9, 0xf5, 0x71,
356 | 0x33, 0x8b, 0x24, 0x26, 0x26, 0x36, 0x37, 0x37, 0xdf, 0x77, 0xdf, 0x7d, 0x38, 0x30, 0x79, 0x5d,
357 | 0x16, 0x41, 0x04, 0x46, 0x67, 0x67, 0xe7, 0x99, 0x33, 0x67, 0xf6, 0xee, 0xdd, 0xeb, 0xd6, 0x9b,
358 | 0x37, 0xcc, 0x70, 0xeb, 0xe3, 0x66, 0xd6, 0xc9, 0xcd, 0xcd, 0xbd, 0x72, 0xe5, 0xca, 0xfe, 0xfd,
359 | 0xfb, 0xed, 0x7d, 0xd0, 0x98, 0x20, 0xa6, 0x3a, 0x98, 0xd6, 0x9e, 0x3e, 0x7d, 0x1a, 0x6b, 0xc5,
360 | 0x82, 0x82, 0x02, 0xaf, 0x67, 0xb6, 0x2e, 0x7e, 0xdc, 0xcc, 0x22, 0x18, 0xf0, 0x87, 0x86, 0x86,
361 | 0xce, 0x9f, 0x3f, 0x4f, 0xd7, 0x84, 0x89, 0xd8, 0x24, 0x2e, 0x2e, 0x0e, 0xee, 0xe4, 0xcf, 0xa2,
362 | 0xd4, 0xc5, 0x8f, 0x9b, 0x59, 0x04, 0xf5, 0xca, 0xcb, 0xcb, 0xbb, 0x7c, 0xf9, 0xf2, 0xb9, 0x73,
363 | 0xe7, 0xe8, 0x7a, 0x12, 0x11, 0x05, 0xf0, 0xb5, 0xa5, 0x93, 0x45, 0x26, 0xcb, 0x2b, 0xfe, 0xbb,
364 | 0x85, 0x5b, 0x1f, 0x37, 0x8b, 0x88, 0x9b, 0x6f, 0xbe, 0xf9, 0xde, 0x7b, 0xef, 0x5d, 0xbb, 0x76,
365 | 0x2d, 0xbd, 0xfc, 0x9d, 0x98, 0xd2, 0x88, 0xde, 0x3b, 0x05, 0x6f, 0xd2, 0x76, 0xfd, 0xe3, 0x66,
366 | 0x16, 0xb9, 0xe1, 0x86, 0x1b, 0x2e, 0x5d, 0xba, 0x74, 0xe4, 0xc8, 0x11, 0x4c, 0xe0, 0xfd, 0x2c,
367 | 0x97, 0x20, 0x22, 0xa6, 0xbc, 0xbc, 0xbc, 0xbe, 0xbe, 0xde, 0xa1, 0xf7, 0x2e, 0x59, 0xb2, 0x24,
368 | 0x35, 0x35, 0xb5, 0xac, 0xac, 0xac, 0xbf, 0xbf, 0xdf, 0xc5, 0x51, 0xcb, 0xf5, 0x8f, 0x9b, 0x59,
369 | 0x24, 0x23, 0x23, 0x63, 0x78, 0x78, 0xf8, 0xe3, 0x1f, 0xff, 0xb8, 0x8b, 0x2f, 0xb8, 0x26, 0x08,
370 | 0xf7, 0xc1, 0x10, 0x77, 0xed, 0xda, 0xb5, 0x17, 0x5f, 0x7c, 0xd1, 0x89, 0x10, 0x98, 0xfb, 0x37,
371 | 0xbf, 0xf9, 0x4d, 0x78, 0xef, 0xb3, 0xcf, 0x3e, 0xfb, 0x8b, 0x5f, 0xfc, 0xc2, 0xc5, 0x2b, 0xc3,
372 | 0xae, 0x7f, 0xdc, 0xcc, 0x3a, 0xb5, 0xb5, 0xb5, 0x8f, 0x3e, 0xfa, 0xe8, 0xe0, 0xe0, 0x20, 0xdd,
373 | 0xd4, 0xc1, 0x10, 0xe7, 0x68, 0x53, 0x73, 0xbe, 0x36, 0x1d, 0xc1, 0x14, 0xf1, 0xaf, 0x7f, 0xfd,
374 | 0xeb, 0x43, 0x0f, 0x3d, 0xe4, 0x44, 0xc8, 0x1d, 0x77, 0xdc, 0xf1, 0xb9, 0xcf, 0x7d, 0x0e, 0x81,
375 | 0x77, 0xde, 0x79, 0x07, 0x3e, 0xec, 0x92, 0x6a, 0x13, 0x78, 0xf1, 0x71, 0x33, 0x8b, 0xe4, 0xe5,
376 | 0xe5, 0x9d, 0x3d, 0x7b, 0xf6, 0xf6, 0xdb, 0x6f, 0x6f, 0x6a, 0x6a, 0xf2, 0xb9, 0xe8, 0xa9, 0x09,
377 | 0x7b, 0x12, 0x56, 0xf4, 0xe1, 0x84, 0x84, 0x04, 0x72, 0xe3, 0x80, 0x69, 0x6e, 0x6e, 0x86, 0x03,
378 | 0x9f, 0x3a, 0x75, 0x8a, 0x6d, 0x56, 0x55, 0x55, 0x1d, 0x3d, 0x7a, 0xb4, 0xb8, 0xb8, 0x18, 0xe3,
379 | 0xde, 0x81, 0x03, 0x07, 0x30, 0xbb, 0x1e, 0x1f, 0x1f, 0x87, 0x7b, 0xef, 0xdc, 0xb9, 0x13, 0x7b,
380 | 0xdb, 0xda, 0xda, 0x10, 0xbe, 0x72, 0xe5, 0x8a, 0x78, 0xa3, 0x52, 0x56, 0x56, 0xd6, 0x6b, 0xaf,
381 | 0xbd, 0x56, 0x58, 0x58, 0x98, 0x9b, 0x9b, 0x0b, 0x51, 0x17, 0x2e, 0x5c, 0xd8, 0xbc, 0x79, 0xf3,
382 | 0xc3, 0x0f, 0x3f, 0x7c, 0xcf, 0x3d, 0xf7, 0xd4, 0xd4, 0xd4, 0x38, 0x54, 0xcf, 0x8b, 0x8f, 0x9b,
383 | 0x59, 0x24, 0x25, 0x25, 0xa5, 0xa1, 0xa1, 0xe1, 0xc1, 0x07, 0x1f, 0x3c, 0x76, 0xec, 0x98, 0xcf,
384 | 0x45, 0x4f, 0x4d, 0xf4, 0xa3, 0x2e, 0x36, 0x31, 0x83, 0x8b, 0xae, 0xd7, 0x18, 0xc6, 0x1a, 0x23,
385 | 0x23, 0x23, 0xf0, 0xba, 0x9e, 0x9e, 0x1e, 0x84, 0xb7, 0x6d, 0xdb, 0xf6, 0xc7, 0x3f, 0xfe, 0xf1,
386 | 0x99, 0x67, 0x9e, 0xc1, 0x94, 0x18, 0x7e, 0x88, 0xf8, 0xef, 0x7f, 0xff, 0xfb, 0x5f, 0xfc, 0xe2,
387 | 0x17, 0xdf, 0x7d, 0xf7, 0x5d, 0x84, 0x3f, 0xf6, 0xb1, 0x8f, 0x7d, 0xeb, 0x5b, 0xdf, 0x7a, 0xee,
388 | 0xb9, 0xe7, 0x10, 0x86, 0xc7, 0x2e, 0x5c, 0xb8, 0x90, 0x49, 0xf8, 0xf0, 0x87, 0x3f, 0xfc, 0xf8,
389 | 0xe3, 0x8f, 0x23, 0x30, 0x30, 0x30, 0x80, 0x5d, 0xdf, 0xf9, 0xce, 0x77, 0xbe, 0xf1, 0x8d, 0x6f,
390 | 0x7c, 0xfe, 0xf3, 0x9f, 0xff, 0xc3, 0x1f, 0xfe, 0x80, 0xe9, 0x34, 0x1c, 0xdb, 0x89, 0x7a, 0x5e,
391 | 0x7c, 0xdc, 0xcc, 0x3a, 0x73, 0xe7, 0xce, 0x45, 0xed, 0x3e, 0xf2, 0x91, 0x8f, 0x60, 0x9e, 0x42,
392 | 0x2f, 0x7f, 0x37, 0x23, 0xf6, 0xde, 0x51, 0x11, 0x4d, 0x5c, 0xbd, 0x7a, 0xf5, 0xf7, 0xbf, 0xff,
393 | 0x3d, 0x56, 0x98, 0x37, 0xdd, 0x74, 0x13, 0xdc, 0xef, 0xbe, 0xfb, 0xee, 0x63, 0x0f, 0x06, 0xc2,
394 | 0x03, 0xb1, 0x39, 0x3a, 0x3a, 0x8a, 0x30, 0x06, 0x22, 0x84, 0x7f, 0xf6, 0xb3, 0x9f, 0xb1, 0x97,
395 | 0xe6, 0x60, 0x65, 0x88, 0x4d, 0xf6, 0x0c, 0x43, 0x76, 0x76, 0xf6, 0x1b, 0x6f, 0xbc, 0xc1, 0xbc,
396 | 0xf4, 0xe4, 0xc9, 0x93, 0x88, 0x7f, 0xfa, 0xe9, 0xa7, 0xd9, 0x49, 0xac, 0xb1, 0xb1, 0x31, 0x6c,
397 | 0x0e, 0x0f, 0x0f, 0x3b, 0xd4, 0xd0, 0x8b, 0x8f, 0x9b, 0x59, 0x07, 0xd3, 0x10, 0x38, 0xf0, 0x9e,
398 | 0x3d, 0x7b, 0xd2, 0xd3, 0xd3, 0x03, 0x51, 0x80, 0x20, 0x64, 0x7c, 0xed, 0x6b, 0x5f, 0x7b, 0xf5,
399 | 0xd5, 0x57, 0xb1, 0xd2, 0xfb, 0xed, 0x6f, 0x7f, 0x7b, 0xe2, 0xc4, 0x09, 0x16, 0x09, 0x0f, 0xbc,
400 | 0x76, 0xed, 0xda, 0xcb, 0x2f, 0xbf, 0xcc, 0x8e, 0xac, 0xcc, 0x81, 0xf9, 0x4c, 0xf2, 0x93, 0x9f,
401 | 0xfc, 0xe4, 0x2f, 0x7f, 0xf9, 0x4b, 0x36, 0x02, 0x63, 0x46, 0xfd, 0xc8, 0x23, 0x8f, 0xb0, 0x78,
402 | 0x4c, 0x9b, 0xff, 0xfc, 0xe7, 0x3f, 0x63, 0xfa, 0xcd, 0x36, 0xf7, 0xee, 0xdd, 0x8b, 0x5c, 0x0e,
403 | 0xdf, 0x99, 0xee, 0xdd, 0xc7, 0xcd, 0x2c, 0x82, 0x09, 0x3c, 0x26, 0x23, 0xa8, 0xa6, 0xd7, 0x77,
404 | 0x7d, 0x13, 0x44, 0xc4, 0x60, 0x61, 0x79, 0xfd, 0xfa, 0xf5, 0xbf, 0xfc, 0xe5, 0x2f, 0xf0, 0x34,
405 | 0x4c, 0x8f, 0x79, 0x3c, 0x8c, 0x15, 0x13, 0x60, 0xcc, 0x99, 0xd9, 0xe6, 0xc5, 0x8b, 0x17, 0x91,
406 | 0xa0, 0xb4, 0xb4, 0x54, 0x51, 0xcf, 0x5a, 0x7f, 0xf7, 0xbb, 0xdf, 0xfd, 0xfa, 0xd7, 0xbf, 0x8e,
407 | 0x70, 0x7e, 0x7e, 0x3e, 0x86, 0x5f, 0x6e, 0xd9, 0x2f, 0xab, 0xf0, 0xd9, 0x14, 0x1c, 0xfb, 0x57,
408 | 0xbf, 0xfa, 0x95, 0xc3, 0xb5, 0xab, 0x77, 0x1f, 0x37, 0xb3, 0xce, 0xd0, 0xd0, 0x10, 0x96, 0x15,
409 | 0x5d, 0x5d, 0x5d, 0x34, 0x8b, 0x36, 0x83, 0xa6, 0xd0, 0xc1, 0x80, 0xd1, 0x12, 0xf3, 0xe7, 0x17,
410 | 0x5e, 0x78, 0x81, 0xcd, 0x7e, 0xc7, 0xc7, 0xc7, 0x59, 0x7c, 0x7d, 0x7d, 0x3d, 0x36, 0x11, 0xc9,
411 | 0x36, 0x9f, 0x7c, 0xf2, 0xc9, 0x5f, 0xff, 0xfa, 0xd7, 0xec, 0xe6, 0x7e, 0xac, 0x06, 0xff, 0xf4,
412 | 0xa7, 0x3f, 0xb1, 0xb3, 0xd6, 0x98, 0x4b, 0xdf, 0x7f, 0xff, 0xfd, 0x2c, 0x0d, 0x1c, 0xec, 0x37,
413 | 0xbf, 0xf9, 0x0d, 0x1f, 0x8d, 0xe1, 0x6c, 0x58, 0x0c, 0xbf, 0xf2, 0xca, 0x2b, 0x0e, 0x8d, 0xde,
414 | 0xd3, 0x8f, 0x9b, 0x59, 0x64, 0xc3, 0x86, 0x0d, 0x0f, 0x3e, 0xf8, 0xe0, 0xf9, 0xf3, 0xe7, 0xd7,
415 | 0xae, 0x5d, 0x1b, 0x88, 0x02, 0xd3, 0x81, 0x89, 0x43, 0xc0, 0xec, 0xd9, 0xb3, 0xe9, 0xa5, 0x7b,
416 | 0x11, 0xd1, 0xd1, 0xd1, 0x01, 0x47, 0xc5, 0x32, 0x0f, 0xe1, 0xa7, 0x9e, 0x7a, 0x0a, 0xe1, 0x96,
417 | 0x96, 0x16, 0x84, 0xb1, 0xf4, 0xe5, 0x61, 0xb4, 0xec, 0x4b, 0x2f, 0xbd, 0xf4, 0x83, 0x1f, 0xfc,
418 | 0x80, 0x9d, 0x6c, 0x6c, 0x6a, 0x6a, 0xc2, 0xae, 0x23, 0x47, 0x8e, 0xe4, 0xe6, 0xe6, 0xbe, 0xfe,
419 | 0xfa, 0xeb, 0xfc, 0xb3, 0x60, 0x1b, 0x37, 0x6e, 0x44, 0x3c, 0xac, 0x9c, 0x6d, 0x62, 0x82, 0x8d,
420 | 0x69, 0xb6, 0x2b, 0x97, 0x94, 0xbc, 0xfb, 0xb8, 0x99, 0x45, 0xb2, 0xb2, 0xb2, 0xb0, 0x06, 0x7e,
421 | 0xec, 0xb1, 0xc7, 0xb0, 0x28, 0x08, 0x4a, 0x87, 0xa8, 0xc0, 0xde, 0x38, 0x1c, 0x1f, 0x1f, 0x3f,
422 | 0x67, 0xce, 0x9c, 0xd4, 0xd4, 0x54, 0xf7, 0x3f, 0x24, 0x31, 0xc3, 0x1b, 0xe2, 0x7c, 0x27, 0x7e,
423 | 0x32, 0xbc, 0x82, 0x47, 0x8f, 0x1e, 0x85, 0xd7, 0xb1, 0xcf, 0xf9, 0xc2, 0x4c, 0xdf, 0x7e, 0xfb,
424 | 0xed, 0xb7, 0xde, 0x7a, 0x0b, 0xbe, 0xf7, 0xc0, 0x03, 0x0f, 0xfc, 0xee, 0x77, 0xbf, 0x5b, 0xb6,
425 | 0x6c, 0x19, 0xe2, 0xb1, 0xf8, 0xfc, 0xf9, 0xcf, 0x7f, 0xfe, 0xf4, 0xd3, 0x4f, 0xb3, 0x2c, 0xfb,
426 | 0xf7, 0xef, 0x47, 0x16, 0x0c, 0x89, 0x4f, 0x3c, 0xf1, 0xc4, 0xdd, 0x77, 0xdf, 0xcd, 0x45, 0xed,
427 | 0xde, 0xbd, 0x1b, 0xf1, 0x5b, 0xb7, 0x6e, 0x65, 0x9b, 0x25, 0x25, 0x25, 0xd8, 0xbc, 0xe7, 0x9e,
428 | 0x7b, 0xdc, 0xea, 0x8b, 0x60, 0xc1, 0x2c, 0x00, 0x07, 0xb8, 0x3b, 0xef, 0xbc, 0x33, 0x3b, 0x3b,
429 | 0xdb, 0x95, 0x1e, 0xb1, 0x67, 0xa8, 0x1e, 0x19, 0xa4, 0x88, 0xf3, 0x72, 0x6d, 0x34, 0xaf, 0xed,
430 | 0x8c, 0xd3, 0x1a, 0x34, 0x59, 0x51, 0x51, 0x51, 0x6b, 0x6b, 0x2b, 0xd6, 0x99, 0xac, 0xf9, 0xb0,
431 | 0xd9, 0xd7, 0xd7, 0x97, 0x91, 0x91, 0x81, 0xb9, 0x62, 0x43, 0x43, 0x03, 0xbb, 0x4c, 0x9f, 0x98,
432 | 0x98, 0xd8, 0xde, 0xde, 0x8e, 0x85, 0x2e, 0x6b, 0xe5, 0x9c, 0x9c, 0x9c, 0xb6, 0xb6, 0x36, 0xfc,
433 | 0xc3, 0x39, 0xc5, 0x27, 0x66, 0x31, 0xb5, 0xde, 0xb4, 0x69, 0x13, 0x3f, 0xd5, 0x84, 0x03, 0x2a,
434 | 0x36, 0xbd, 0x78, 0xd5, 0x7b, 0x20, 0x24, 0x27, 0x27, 0xc3, 0x7b, 0xb1, 0x5e, 0xa0, 0x41, 0xd8,
435 | 0x43, 0x9c, 0x1f, 0x6c, 0x22, 0x95, 0xe0, 0x05, 0x61, 0xc7, 0x4f, 0x91, 0x04, 0x6b, 0x38, 0xcc,
436 | 0x1e, 0x29, 0xfe, 0x77, 0xbd, 0xd7, 0xe0, 0x18, 0x57, 0x5f, 0x5f, 0x0f, 0x1f, 0xc6, 0xdc, 0xc4,
437 | 0x62, 0xdb, 0x06, 0x8e, 0x2b, 0x33, 0x05, 0x3e, 0x59, 0x70, 0xd1, 0x9e, 0xcd, 0x98, 0x78, 0xcd,
438 | 0x5a, 0xa1, 0x05, 0x56, 0xa9, 0x60, 0x52, 0x84, 0x51, 0x05, 0x0b, 0x39, 0xac, 0xe2, 0x96, 0x87,
439 | 0x40, 0x18, 0x63, 0x0b, 0x56, 0x5c, 0xd8, 0x5b, 0x50, 0x50, 0xc0, 0x05, 0x16, 0x19, 0xb1, 0xda,
440 | 0x88, 0x35, 0x02, 0xc5, 0x02, 0x25, 0x93, 0x29, 0x35, 0xa2, 0x2c, 0xc4, 0x5a, 0x81, 0x72, 0x0b,
441 | 0x54, 0x08, 0x54, 0xaa, 0x54, 0xa9, 0xac, 0x53, 0xa9, 0x56, 0xa9, 0x09, 0xb1, 0x5e, 0x65, 0x43,
442 | 0x88, 0x5a, 0x81, 0xba, 0xc9, 0x6c, 0xd4, 0x51, 0x1f, 0xa2, 0x41, 0xa0, 0x51, 0xa0, 0x49, 0xa0,
443 | 0xd9, 0x88, 0x96, 0xc8, 0xe1, 0x79, 0x9b, 0x74, 0x68, 0x4a, 0x6c, 0x0c, 0x07, 0x53, 0xb8, 0x5e,
444 | 0x40, 0x53, 0x41, 0x56, 0x71, 0xd6, 0x1a, 0xac, 0x7d, 0xd6, 0x87, 0xa8, 0x99, 0x4c, 0xf5, 0x64,
445 | 0x58, 0x53, 0x57, 0x85, 0xa8, 0x34, 0xa1, 0x62, 0x32, 0x62, 0x27, 0xf2, 0x1e, 0x67, 0x36, 0xc0,
446 | 0xad, 0xa2, 0xc4, 0x08, 0x6e, 0x57, 0x6b, 0x4c, 0x80, 0x29, 0xc2, 0x44, 0x35, 0x36, 0x6f, 0xe8,
447 | 0x08, 0x61, 0x77, 0xc9, 0x29, 0x50, 0x61, 0xde, 0x04, 0xf2, 0x42, 0x20, 0xcc, 0x9d, 0xc8, 0x22,
448 | 0x13, 0x37, 0x12, 0x6d, 0xb7, 0x0c, 0x12, 0x63, 0xc1, 0xb6, 0x65, 0xcb, 0x96, 0xfe, 0xfe, 0xfe,
449 | 0xde, 0xde, 0xde, 0xee, 0xee, 0xee, 0xae, 0xae, 0xae, 0xcd, 0x2a, 0x3d, 0x3d, 0x3d, 0x98, 0x49,
450 | 0x0e, 0x0c, 0x0c, 0x20, 0x01, 0x4b, 0xbc, 0x63, 0xc7, 0x8e, 0x9d, 0x2a, 0x83, 0x83, 0x83, 0x43,
451 | 0x2a, 0xbb, 0x42, 0xec, 0x16, 0xd8, 0xa3, 0x32, 0xac, 0x82, 0xb9, 0xd6, 0x3e, 0x95, 0x91, 0x91,
452 | 0x91, 0xfd, 0x2a, 0x07, 0x54, 0x46, 0x27, 0x73, 0x30, 0xc4, 0xa1, 0x43, 0x87, 0x6e, 0x54, 0x39,
453 | 0x7c, 0xf8, 0xf0, 0x4d, 0x2a, 0x63, 0x63, 0x63, 0x47, 0x04, 0x6e, 0x16, 0xb8, 0x45, 0xe5, 0xa8,
454 | 0xca, 0x31, 0x95, 0xe3, 0x21, 0x4e, 0xa8, 0x9c, 0x0c, 0x71, 0xab, 0xca, 0xa9, 0x10, 0xa7, 0x55,
455 | 0x6e, 0x53, 0x39, 0x13, 0xe2, 0xac, 0x94, 0x73, 0x3a, 0xce, 0x1b, 0x71, 0x21, 0xc4, 0x45, 0x95,
456 | 0x4b, 0x2a, 0xb7, 0x87, 0x18, 0x57, 0xb9, 0x7c, 0xf9, 0xf2, 0x07, 0x54, 0x3e, 0x18, 0x0e, 0x96,
457 | 0xec, 0xb2, 0x0a, 0xcb, 0xcb, 0xe4, 0x5c, 0x9a, 0xcc, 0xc5, 0x10, 0x17, 0xcc, 0x81, 0x6e, 0xd0,
458 | 0x59, 0xac, 0x0b, 0x8b, 0x61, 0xff, 0x1c, 0x96, 0x80, 0xb7, 0x09, 0xda, 0x87, 0xb5, 0x15, 0x6b,
459 | 0x37, 0xb4, 0xe1, 0x49, 0x01, 0xd6, 0xc8, 0xac, 0xc1, 0x8f, 0x4d, 0xe6, 0xa8, 0x00, 0xeb, 0x26,
460 | 0xd6, 0x65, 0xac, 0x13, 0xc7, 0x54, 0x6e, 0x0a, 0x71, 0x58, 0x85, 0xf5, 0xfb, 0x21, 0x15, 0x66,
461 | 0x15, 0xcc, 0x54, 0x60, 0x33, 0x23, 0x21, 0x98, 0x2d, 0xc1, 0xa8, 0x60, 0x5a, 0xcc, 0xcc, 0x60,
462 | 0x6f, 0xdc, 0x08, 0x61, 0x90, 0x30, 0xce, 0x1d, 0x2a, 0xcc, 0xb0, 0x99, 0x6d, 0xe3, 0x9f, 0x3b,
463 | 0x05, 0xdb, 0xcb, 0x93, 0x31, 0xac, 0xfb, 0x8b, 0xde, 0x7d, 0x18, 0x5b, 0x43, 0xb0, 0x4d, 0x5e,
464 | 0x90, 0xbe, 0x14, 0x51, 0xb1, 0x01, 0x01, 0xa6, 0x27, 0x12, 0x28, 0x07, 0x23, 0x84, 0x37, 0x16,
465 | 0x6f, 0x29, 0xee, 0x72, 0xcc, 0xeb, 0x98, 0xbf, 0x31, 0xef, 0xe2, 0xdc, 0x38, 0x19, 0xee, 0x6f,
466 | 0xcc, 0xe5, 0x44, 0xaf, 0x13, 0x9d, 0x4d, 0xef, 0x72, 0xa2, 0xe3, 0x9d, 0x10, 0xd0, 0xf8, 0x5e,
467 | 0x58, 0x0f, 0x14, 0xed, 0xd2, 0xd0, 0x97, 0xb8, 0x47, 0x89, 0xae, 0xe5, 0x22, 0xb7, 0x4f, 0x66,
468 | 0x3c, 0xc4, 0xe5, 0x10, 0x1f, 0x10, 0xd0, 0xfb, 0xea, 0x1d, 0x46, 0xe8, 0x9d, 0x99, 0xfb, 0x33,
469 | 0x77, 0x69, 0x0e, 0x2f, 0x5a, 0xef, 0xde, 0x7a, 0x07, 0x66, 0xed, 0x63, 0xbb, 0x1d, 0x34, 0x87,
470 | 0x0c, 0xc3, 0x63, 0x19, 0x3f, 0x34, 0xe8, 0x0f, 0x0a, 0x0c, 0xf1, 0xb8, 0xc0, 0xe1, 0x07, 0x05,
471 | 0xf1, 0x40, 0x20, 0x1e, 0xb5, 0xb9, 0xe7, 0xc3, 0xe4, 0x44, 0x6f, 0x67, 0xc3, 0x03, 0xf3, 0x6d,
472 | 0xee, 0xd5, 0x6c, 0x8c, 0x81, 0x9f, 0xb3, 0x81, 0x04, 0x09, 0xc4, 0xd1, 0xc2, 0x5d, 0x46, 0xad,
473 | 0x71, 0x20, 0xc4, 0xfe, 0x10, 0x9a, 0x21, 0x4d, 0x61, 0xc3, 0xe0, 0x2e, 0x73, 0xcc, 0x12, 0xb0,
474 | 0xc8, 0xa1, 0x10, 0x6c, 0x98, 0xe5, 0x83, 0xad, 0x66, 0xc8, 0xd5, 0x8c, 0xba, 0x9a, 0xe1, 0x57,
475 | 0x1f, 0x30, 0x64, 0x38, 0x04, 0x6b, 0x77, 0xf6, 0xcf, 0x02, 0x1c, 0x76, 0xc4, 0xd5, 0xc4, 0x70,
476 | 0xf8, 0x51, 0x86, 0x07, 0xcc, 0xe0, 0xcd, 0x64, 0x38, 0x05, 0xb0, 0xd2, 0xaf, 0xb0, 0x15, 0x7d,
477 | 0x80, 0x1d, 0xcb, 0xc4, 0x7f, 0x7e, 0x44, 0x93, 0x70, 0x93, 0xc0, 0x98, 0x00, 0xdb, 0xbc, 0xc9,
478 | 0x04, 0x96, 0x91, 0xff, 0x9b, 0x21, 0x0e, 0x65, 0xcc, 0xb0, 0x44, 0x73, 0x91, 0x4f, 0x85, 0x0c,
479 | 0x1b, 0x84, 0x85, 0xc3, 0x5a, 0xa4, 0xde, 0x34, 0xc5, 0xc1, 0x53, 0x03, 0xeb, 0x3b, 0xb1, 0x2b,
480 | 0x79, 0xff, 0x32, 0x1b, 0x10, 0xed, 0x47, 0xb4, 0x58, 0xd1, 0x3e, 0x01, 0x1b, 0x4b, 0xd9, 0x3f,
481 | 0x1f, 0x18, 0xb7, 0x4e, 0x06, 0x31, 0xe2, 0xcc, 0x51, 0x63, 0xbd, 0xdc, 0xf2, 0x25, 0xce, 0x22,
482 | 0x2a, 0x20, 0x71, 0x1f, 0x7b, 0x7e, 0xa7, 0x41, 0xd9, 0xe4, 0x06, 0x1d, 0x26, 0xb8, 0x22, 0x5c,
483 | 0x4f, 0x67, 0x67, 0x27, 0xff, 0x37, 0xdc, 0xc5, 0x02, 0x3c, 0x99, 0x06, 0x4c, 0xfb, 0x35, 0x01,
484 | 0x33, 0x0c, 0x13, 0xb0, 0xc8, 0x2e, 0x01, 0xbe, 0xc9, 0x13, 0xd8, 0x83, 0x2d, 0x46, 0x58, 0x80,
485 | 0xc7, 0x88, 0xf1, 0x3c, 0x2c, 0x47, 0x14, 0xa8, 0xc9, 0xa2, 0x29, 0x4b, 0x8c, 0xe1, 0x15, 0x91,
486 | 0x37, 0x48, 0x58, 0xc4, 0x26, 0x92, 0xe7, 0x0a, 0xdb, 0xd4, 0x12, 0xcc, 0xec, 0xd0, 0xcc, 0x1a,
487 | 0xdb, 0xdb, 0xdb, 0xd9, 0xbf, 0x18, 0x30, 0x43, 0x6e, 0xc0, 0x66, 0xa5, 0x5b, 0x4f, 0x60, 0x05,
488 | 0xb9, 0x10, 0xbe, 0x57, 0x09, 0x7b, 0x0e, 0x43, 0x8e, 0x95, 0xb3, 0x20, 0x53, 0x81, 0x68, 0xd1,
489 | 0x33, 0x2c, 0xf6, 0x2a, 0x12, 0x33, 0xd5, 0x9f, 0x3e, 0xc8, 0xbb, 0x8c, 0xef, 0x55, 0x1a, 0x08,
490 | 0x82, 0x88, 0x5a, 0x14, 0xfd, 0x65, 0x0f, 0x82, 0x20, 0xa2, 0x05, 0xa5, 0xd6, 0x3d, 0xd8, 0x55,
491 | 0x50, 0x17, 0x05, 0x86, 0x2d, 0x2e, 0x58, 0x05, 0x3c, 0x85, 0xd5, 0x8e, 0x5d, 0xd1, 0x0d, 0x5a,
492 | 0x97, 0xda, 0x98, 0x69, 0xd5, 0x88, 0xd0, 0x18, 0xd8, 0x46, 0xf5, 0x8a, 0xb7, 0x3c, 0x0d, 0x8f,
493 | 0x34, 0x8b, 0x77, 0xbd, 0x25, 0x95, 0xf5, 0xae, 0x22, 0x5e, 0xc4, 0xf7, 0x1f, 0xcd, 0x5d, 0x04,
494 | 0x51, 0x0a, 0xaf, 0x02, 0xfa, 0x1b, 0x8b, 0x1c, 0xb6, 0x29, 0x56, 0xcd, 0x62, 0x1d, 0xdd, 0x6d,
495 | 0x8a, 0x18, 0x68, 0xd8, 0x48, 0xd1, 0x9b, 0x13, 0x8f, 0x11, 0xe3, 0xf5, 0x2d, 0x23, 0xb1, 0xc3,
496 | 0xb0, 0xcd, 0x18, 0x69, 0x3b, 0x2b, 0xd5, 0xc4, 0x54, 0x05, 0xc7, 0x57, 0xf4, 0x10, 0x0b, 0x8b,
497 | 0x77, 0x32, 0xe9, 0x6f, 0x69, 0x32, 0xc3, 0x7a, 0x4a, 0x3f, 0x45, 0x45, 0x11, 0xfa, 0x1b, 0xc8,
498 | 0xf4, 0xed, 0x60, 0x78, 0x93, 0x99, 0x6f, 0x28, 0x55, 0x84, 0x0e, 0xf1, 0xfe, 0xbe, 0x00, 0x75,
499 | 0x98, 0x0a, 0x6a, 0x10, 0x53, 0x1c, 0xc5, 0xec, 0x06, 0x54, 0x8b, 0xf0, 0x1b, 0x89, 0x3d, 0xcd,
500 | 0x42, 0x48, 0x70, 0xa5, 0x3d, 0x9d, 0x08, 0x11, 0xf3, 0x46, 0x2a, 0xc7, 0x0b, 0xe5, 0xa3, 0xc2,
501 | 0xc0, 0xdc, 0x52, 0x52, 0xb1, 0x72, 0xdf, 0xbf, 0xe1, 0x63, 0x00, 0xfc, 0x6e, 0x72, 0x1b, 0x12,
502 | 0xa6, 0x15, 0x5e, 0x37, 0x91, 0x2b, 0xf2, 0x9d, 0x08, 0x11, 0xf3, 0x46, 0x2a, 0xc7, 0x5e, 0xb9,
503 | 0xf2, 0x5c, 0xd3, 0xca, 0x26, 0x95, 0xb2, 0xc8, 0x11, 0x9f, 0xff, 0x20, 0x08, 0x46, 0x6c, 0x9b,
504 | 0x84, 0x0f, 0xb5, 0xb3, 0xe7, 0x56, 0x8a, 0xe1, 0x83, 0x57, 0x72, 0xcc, 0x1e, 0xd7, 0x22, 0x9c,
505 | 0xc0, 0x5b, 0x35, 0x4a, 0x9b, 0x37, 0x4a, 0xd5, 0xb6, 0x8e, 0xbe, 0x82, 0xee, 0x56, 0xd9, 0x9e,
506 | 0x34, 0xc5, 0xec, 0xd9, 0x48, 0x33, 0x24, 0x8f, 0x53, 0x12, 0xce, 0x91, 0x3f, 0xb0, 0xea, 0x62,
507 | 0x29, 0x5e, 0x17, 0x11, 0x7b, 0xe8, 0xbb, 0x66, 0x2a, 0x34, 0xa3, 0xc2, 0x1e, 0xb2, 0x17, 0x9f,
508 | 0xb6, 0x37, 0x7c, 0x10, 0x5f, 0xff, 0x38, 0xbe, 0x18, 0x29, 0xcf, 0xa2, 0x09, 0xeb, 0xd3, 0x87,
509 | 0x95, 0x26, 0x2f, 0xc2, 0x0a, 0x9a, 0x22, 0xf4, 0xb5, 0xd0, 0xec, 0x0d, 0x5b, 0xba, 0xbc, 0x16,
510 | 0xf2, 0x8c, 0x92, 0x76, 0x40, 0x97, 0x98, 0xed, 0x15, 0x65, 0x8a, 0x5d, 0xa6, 0x89, 0xd7, 0x54,
511 | 0x4d, 0x1f, 0xd0, 0xa8, 0x61, 0xb8, 0xab, 0xc8, 0xdc, 0x18, 0x34, 0xd6, 0x22, 0xe9, 0x1a, 0xbd,
512 | 0x6e, 0x61, 0x6b, 0x64, 0xdd, 0x96, 0xac, 0xc4, 0x87, 0x15, 0xa8, 0x49, 0xa9, 0x37, 0x12, 0x4d,
513 | 0x02, 0xe6, 0x33, 0xfa, 0x37, 0x52, 0x44, 0x54, 0x90, 0x44, 0x31, 0x33, 0x81, 0x92, 0xb0, 0xa2,
514 | 0x79, 0xc3, 0x80, 0xe4, 0xd9, 0x7f, 0xfe, 0xda, 0x01, 0xfd, 0xfb, 0x0a, 0x2c, 0xbe, 0x3d, 0x80,
515 | 0x67, 0x0f, 0x9b, 0xc6, 0xb0, 0x5c, 0x27, 0x88, 0x12, 0xc4, 0x8a, 0x18, 0xa6, 0xd4, 0xbf, 0x78,
516 | 0x41, 0x9f, 0xd8, 0x8a, 0x9e, 0x72, 0xf9, 0xfa, 0xbd, 0x45, 0xea, 0xeb, 0x20, 0x24, 0x79, 0xf5,
517 | 0xca, 0x48, 0xde, 0x11, 0xa1, 0x49, 0x60, 0x98, 0xd2, 0x6c, 0x97, 0x61, 0xd1, 0x1a, 0x05, 0xc2,
518 | 0xbe, 0x89, 0x42, 0x23, 0xdf, 0x4a, 0x8d, 0x0c, 0x5b, 0x35, 0xac, 0x62, 0x91, 0x9a, 0x87, 0x95,
519 | 0x7e, 0xd7, 0xd7, 0x8e, 0x6d, 0x32, 0xff, 0x11, 0x15, 0x66, 0x9b, 0x91, 0x62, 0xa6, 0x83, 0x59,
520 | 0xd1, 0x66, 0x61, 0xa5, 0x40, 0x80, 0xbd, 0xce, 0x23, 0x2c, 0x62, 0xb2, 0x55, 0xea, 0x7b, 0x76,
521 | 0xac, 0xe4, 0x92, 0x94, 0x22, 0xc6, 0x44, 0x2a, 0xcd, 0x49, 0xa1, 0x66, 0x65, 0xb9, 0xa5, 0x83,
522 | 0xa1, 0x1c, 0x5e, 0xae, 0xbc, 0x14, 0x1b, 0x7d, 0xc1, 0x85, 0x8b, 0x55, 0xd3, 0x07, 0xf4, 0x9b,
523 | 0x66, 0xbb, 0xc2, 0x6a, 0x28, 0x69, 0xc3, 0xb0, 0xaa, 0x6a, 0xe2, 0x9d, 0xb4, 0x89, 0x24, 0x97,
524 | 0x6d, 0xf5, 0xcc, 0xac, 0x94, 0xb9, 0x8d, 0x98, 0x60, 0x95, 0xfa, 0x8a, 0x1c, 0xe7, 0x5e, 0x10,
525 | 0x69, 0x02, 0x86, 0xc2, 0xbb, 0x81, 0xbd, 0x9e, 0x47, 0x1f, 0x96, 0x50, 0x10, 0xea, 0x45, 0x2b,
526 | 0x89, 0x25, 0x18, 0x66, 0x77, 0x28, 0x33, 0xa2, 0x42, 0xcd, 0xca, 0x72, 0xb1, 0x5e, 0xf2, 0xb6,
527 | 0x15, 0xf7, 0xda, 0x2e, 0x42, 0x1e, 0x69, 0xa3, 0x14, 0x89, 0x9e, 0xae, 0xc8, 0xb7, 0x52, 0xa2,
528 | 0x3c, 0x8d, 0x99, 0xa1, 0xea, 0x35, 0x31, 0xd3, 0xcd, 0x86, 0xaa, 0x30, 0x7b, 0xf8, 0xb0, 0x5c,
529 | 0x31, 0xdf, 0x50, 0xf2, 0x6c, 0xb1, 0x32, 0x84, 0xbd, 0xec, 0x4e, 0x08, 0xa4, 0x50, 0x82, 0x10,
530 | 0xc9, 0x57, 0xdd, 0xd8, 0xd3, 0x22, 0x2c, 0xfa, 0x97, 0x92, 0x63, 0x0b, 0xe4, 0xcc, 0xcd, 0xcd,
531 | 0xb5, 0x97, 0x97, 0x20, 0xa2, 0x1d, 0x18, 0x3f, 0x7b, 0x3d, 0xab, 0x8b, 0x02, 0xf5, 0xd2, 0xac,
532 | 0xc8, 0x57, 0xf8, 0x0b, 0x62, 0x57, 0x08, 0x18, 0x6e, 0x8a, 0xef, 0x91, 0x35, 0xdb, 0x25, 0x6e,
533 | 0x5a, 0x14, 0xa5, 0x4f, 0xa0, 0xc9, 0x2b, 0x57, 0x4f, 0xb3, 0x4b, 0x8c, 0xd1, 0x14, 0xa1, 0x8f,
534 | 0x37, 0x93, 0xa0, 0x17, 0x68, 0xa8, 0xaa, 0x0d, 0x51, 0x72, 0xf9, 0x9a, 0x18, 0x43, 0x85, 0x97,
535 | 0xeb, 0x30, 0x93, 0xb9, 0x42, 0xd7, 0x50, 0x66, 0xb9, 0x24, 0xad, 0x64, 0xd6, 0x05, 0x86, 0x8a,
536 | 0x49, 0x2a, 0x68, 0x98, 0x46, 0xde, 0x7a, 0x16, 0xcd, 0xc0, 0x50, 0x82, 0xbc, 0x46, 0x86, 0x16,
537 | 0x62, 0x58, 0x47, 0xc3, 0x7e, 0xe7, 0x9b, 0xf0, 0x1f, 0x49, 0xdd, 0xe5, 0x79, 0xe5, 0x31, 0x66,
538 | 0x95, 0xd2, 0xcb, 0x9c, 0xf8, 0x56, 0x6d, 0x44, 0x20, 0xb3, 0xbd, 0xc4, 0x11, 0x65, 0x24, 0x38,
539 | 0x51, 0xd4, 0x6e, 0x6e, 0xa9, 0x1a, 0x45, 0x55, 0xd6, 0xe0, 0x50, 0x73, 0x1b, 0xd9, 0x95, 0x65,
540 | 0x21, 0x96, 0x2e, 0x5d, 0xaa, 0x09, 0xf3, 0x18, 0xcd, 0xa6, 0x3e, 0x7d, 0x44, 0x91, 0x4b, 0x55,
541 | 0xe4, 0xe9, 0x39, 0x7a, 0x39, 0x61, 0x8b, 0xd0, 0xc8, 0xe7, 0xb9, 0xc4, 0xb0, 0xa4, 0xa6, 0x86,
542 | 0xf2, 0x0d, 0x4b, 0x91, 0xd4, 0x71, 0x99, 0xae, 0xf5, 0x0c, 0xb3, 0x84, 0x4d, 0x63, 0x45, 0xb8,
543 | 0x44, 0xfe, 0x32, 0xa3, 0x0a, 0xca, 0xc5, 0xca, 0x13, 0x98, 0x95, 0x62, 0x88, 0xbc, 0x31, 0xf5,
544 | 0x4a, 0x6a, 0x04, 0x9a, 0x75, 0xb7, 0xa6, 0xee, 0xfa, 0xee, 0x36, 0xac, 0xb8, 0x44, 0x55, 0x89,
545 | 0x40, 0x7d, 0x46, 0xbd, 0x7c, 0x49, 0xdf, 0xc9, 0x95, 0x91, 0xd4, 0xda, 0xb0, 0x05, 0x0c, 0xd3,
546 | 0x2b, 0x4b, 0x1c, 0x03, 0x59, 0xce, 0x85, 0xc4, 0x30, 0x59, 0x59, 0x59, 0x53, 0xb3, 0xdc, 0xa0,
547 | 0x14, 0x8b, 0x3a, 0x7c, 0x68, 0x28, 0xdb, 0x45, 0x4c, 0x7c, 0x5f, 0xcf, 0x22, 0x99, 0x99, 0x99,
548 | 0x92, 0x4d, 0x77, 0x71, 0x5d, 0xb8, 0x99, 0x40, 0x7d, 0xbc, 0x6f, 0x45, 0x5b, 0x2f, 0x3d, 0x22,
549 | 0x09, 0x9a, 0x5d, 0xe2, 0xbf, 0x26, 0x7d, 0xd8, 0xb2, 0xac, 0x34, 0x85, 0x5c, 0x01, 0x8b, 0x8d,
550 | 0x19, 0x69, 0xad, 0x45, 0xf9, 0xfa, 0x52, 0x0c, 0x2b, 0x1e, 0x91, 0x1a, 0xf6, 0x4c, 0x5d, 0xd2,
551 | 0x9b, 0x56, 0xea, 0x62, 0x63, 0x17, 0x50, 0x16, 0xeb, 0x40, 0x06, 0xc3, 0xb0, 0x26, 0x26, 0x73,
552 | 0x32, 0x92, 0x2c, 0x9a, 0x5c, 0x56, 0x92, 0x99, 0xc5, 0x18, 0xca, 0x91, 0xcb, 0x94, 0xc4, 0x8b,
553 | 0x7b, 0x35, 0xb5, 0x08, 0x9b, 0xde, 0x62, 0x16, 0x43, 0xfd, 0x35, 0xcd, 0xa5, 0x51, 0x40, 0x53,
554 | 0x1d, 0xc3, 0xc4, 0xfa, 0x52, 0xf4, 0x89, 0xf5, 0x9b, 0x62, 0x62, 0x1b, 0x3d, 0xa2, 0x17, 0xae,
555 | 0x57, 0xd5, 0xd0, 0x1e, 0x44, 0xdd, 0x24, 0x55, 0xb0, 0x58, 0x6e, 0xd8, 0xf4, 0x9a, 0x48, 0x89,
556 | 0x09, 0x39, 0xe9, 0xca, 0x48, 0xd1, 0x34, 0x82, 0x3c, 0xa5, 0xbe, 0xd1, 0xcc, 0x74, 0x98, 0xf8,
557 | 0x48, 0xbc, 0x3d, 0x58, 0x7e, 0xdb, 0xd9, 0x09, 0x82, 0x70, 0x8e, 0x92, 0x6e, 0x81, 0x8c, 0x8c,
558 | 0x0c, 0xfe, 0xcf, 0x63, 0x38, 0x62, 0x1a, 0x8b, 0x88, 0xb9, 0xb8, 0x70, 0x51, 0x9a, 0x6d, 0x9c,
559 | 0x4b, 0x90, 0x48, 0xd6, 0xb4, 0x80, 0x6d, 0x39, 0x1e, 0x65, 0x89, 0x54, 0xb2, 0xeb, 0x6d, 0xe5,
560 | 0xae, 0x40, 0x7b, 0x16, 0xe5, 0xa2, 0x26, 0x72, 0x21, 0xd6, 0x8b, 0x30, 0x4c, 0xe9, 0x50, 0x43,
561 | 0x9e, 0x5d, 0x49, 0xb3, 0x05, 0x72, 0xf2, 0x7f, 0x1e, 0x23, 0x6e, 0x46, 0x2a, 0xcd, 0x76, 0xde,
562 | 0x18, 0x20, 0x6c, 0xf5, 0xa7, 0x73, 0xe3, 0x44, 0x29, 0xbe, 0x99, 0xb4, 0xb2, 0xd0, 0x3d, 0x20,
563 | 0xce, 0x45, 0x69, 0x04, 0x41, 0x84, 0x45, 0x49, 0xb5, 0xcb, 0x82, 0x05, 0x0b, 0x6c, 0xe7, 0x8d,
564 | 0x01, 0x5c, 0xa9, 0xfe, 0x34, 0x6f, 0x43, 0x1b, 0xf8, 0xd3, 0x62, 0x0e, 0x4b, 0x61, 0xae, 0xe5,
565 | 0x4f, 0xd1, 0xca, 0x82, 0xc9, 0xcc, 0x9f, 0x3f, 0x5f, 0x0c, 0xe8, 0xff, 0x23, 0x42, 0x93, 0x45,
566 | 0x2f, 0x41, 0x23, 0x79, 0x7e, 0x08, 0xb9, 0x10, 0x8b, 0x9a, 0x98, 0x25, 0x0b, 0x9b, 0x3d, 0x52,
567 | 0x05, 0x2c, 0xb6, 0x8f, 0xf3, 0x06, 0xd4, 0xef, 0x35, 0x6b, 0x52, 0xdb, 0xe5, 0x5a, 0x49, 0x6c,
568 | 0x98, 0x26, 0xd2, 0xda, 0xd9, 0x68, 0x0d, 0x7d, 0x46, 0x49, 0x17, 0xeb, 0x93, 0xc9, 0xbb, 0xc9,
569 | 0x37, 0xfd, 0xcd, 0x84, 0x18, 0xba, 0x5e, 0x58, 0x94, 0x79, 0x5e, 0x02, 0x25, 0x3c, 0x95, 0x2f,
570 | 0x2f, 0xce, 0xe7, 0xd2, 0x09, 0xc2, 0x7f, 0x94, 0x94, 0x98, 0x80, 0x55, 0x26, 0x68, 0x2d, 0x08,
571 | 0xc2, 0x6f, 0x94, 0xb9, 0x51, 0x0e, 0xab, 0x86, 0x26, 0x86, 0xff, 0x4f, 0x2b, 0x78, 0xa7, 0x06,
572 | 0xad, 0x08, 0xe1, 0x1f, 0xca, 0x9c, 0x68, 0x06, 0x15, 0x30, 0x0c, 0xdb, 0x13, 0xe5, 0x50, 0x42,
573 | 0xe0, 0xf0, 0x4e, 0x0d, 0x5a, 0x11, 0xa7, 0xc4, 0x40, 0x15, 0x7c, 0x43, 0x49, 0xf6, 0x0b, 0x14,
574 | 0x36, 0x95, 0xe5, 0xb3, 0xe6, 0x70, 0x4b, 0x99, 0xa0, 0x88, 0x99, 0x5a, 0x04, 0xad, 0x42, 0xd4,
575 | 0xa0, 0x24, 0xc5, 0x2e, 0xa8, 0x5e, 0x44, 0x89, 0x23, 0x4a, 0x3f, 0x05, 0xe1, 0x9d, 0x1a, 0xb4,
576 | 0x22, 0x8e, 0x88, 0x81, 0x2a, 0xf8, 0x89, 0x92, 0xe8, 0x17, 0xac, 0x3c, 0xdf, 0x8a, 0xf3, 0x02,
577 | 0x1f, 0xaa, 0x10, 0x03, 0x45, 0x70, 0xdb, 0xf2, 0xae, 0x08, 0x82, 0xa3, 0xcc, 0xf6, 0x11, 0x94,
578 | 0xe7, 0x67, 0x71, 0xae, 0xc3, 0x9a, 0x8c, 0x8a, 0xb0, 0x22, 0x3f, 0xda, 0xfb, 0x3a, 0x5a, 0x50,
579 | 0x66, 0xa9, 0x20, 0xc4, 0xfe, 0x59, 0x80, 0x47, 0x6a, 0xd0, 0xc4, 0x9b, 0xa5, 0xd1, 0x07, 0xcc,
580 | 0xc2, 0x66, 0x42, 0xc4, 0x94, 0xfa, 0x64, 0xfa, 0x22, 0xcc, 0x94, 0x34, 0x13, 0x3e, 0xdb, 0xa8,
581 | 0x9a, 0x7a, 0xc5, 0x0c, 0xdb, 0xc4, 0x50, 0x1f, 0x7d, 0x41, 0x61, 0x8b, 0xd6, 0x88, 0x92, 0xe8,
582 | 0x6c, 0xa8, 0xa7, 0x61, 0x3b, 0x4b, 0x4a, 0xe7, 0x31, 0x1a, 0xef, 0x32, 0x2b, 0x57, 0xde, 0x08,
583 | 0x72, 0x85, 0xf5, 0x19, 0x2d, 0x96, 0x65, 0x56, 0xb4, 0x59, 0x4a, 0x33, 0xcc, 0x6c, 0x38, 0xac,
584 | 0x91, 0x9b, 0xf5, 0x88, 0x26, 0x5e, 0x8c, 0x31, 0x0b, 0xcc, 0xd6, 0xf5, 0x88, 0x24, 0xbb, 0x59,
585 | 0xa5, 0xe4, 0x7b, 0x81, 0x32, 0x53, 0x05, 0xbb, 0x67, 0x9a, 0xc3, 0x8a, 0x91, 0x24, 0x88, 0x25,
586 | 0xa6, 0x72, 0x4d, 0x45, 0xdd, 0x6c, 0xeb, 0x69, 0xd6, 0x9b, 0x6e, 0x55, 0x9c, 0x1b, 0xa8, 0x2b,
587 | 0xd2, 0x7c, 0xc0, 0x45, 0x55, 0xed, 0x89, 0x92, 0xe4, 0x0a, 0x2b, 0x50, 0xb1, 0x51, 0x1e, 0x41,
588 | 0xcc, 0xb4, 0x75, 0x58, 0x8f, 0x2e, 0xc7, 0x8e, 0x0a, 0x94, 0x04, 0x82, 0xb0, 0x05, 0x33, 0x20,
589 | 0xaf, 0xb3, 0x10, 0x72, 0x94, 0x78, 0x22, 0x4a, 0x40, 0x6f, 0x05, 0xad, 0xc2, 0x24, 0x98, 0x01,
590 | 0x79, 0x9d, 0x85, 0x90, 0xa3, 0x75, 0xe0, 0xb8, 0xb8, 0x38, 0x31, 0x2c, 0x6e, 0x5a, 0xc7, 0x7a,
591 | 0x2e, 0x2b, 0x29, 0xf5, 0x69, 0xcc, 0x72, 0x99, 0x29, 0xcc, 0x23, 0x23, 0xaa, 0x4e, 0xd8, 0xc4,
592 | 0xf6, 0x1a, 0xc7, 0x7a, 0xb9, 0x11, 0xc9, 0x17, 0x1d, 0xc3, 0xba, 0x9f, 0xb0, 0x64, 0x3c, 0x31,
593 | 0x0f, 0xb0, 0xa2, 0x35, 0x42, 0x24, 0xfa, 0xf0, 0x5d, 0x62, 0x96, 0x48, 0x3b, 0x57, 0x53, 0x71,
594 | 0x77, 0xad, 0x28, 0x52, 0x39, 0x91, 0x9a, 0x4a, 0xa4, 0x3a, 0x58, 0x4c, 0x1f, 0x56, 0xb2, 0x12,
595 | 0x47, 0x44, 0x3f, 0x86, 0x9d, 0x2d, 0x4f, 0x2f, 0x4f, 0x1c, 0x3f, 0xd9, 0x9d, 0x0c, 0x0b, 0x0a,
596 | 0x2b, 0x59, 0x13, 0xb0, 0x48, 0xa4, 0xe9, 0xa7, 0x39, 0xca, 0x0c, 0x22, 0x1a, 0x60, 0xbd, 0xc5,
597 | 0xfd, 0x4d, 0xb3, 0x10, 0x12, 0xd7, 0x96, 0x92, 0x13, 0x1e, 0xe2, 0xf9, 0xe1, 0x59, 0x26, 0x48,
598 | 0x76, 0x69, 0x92, 0x99, 0x61, 0xb8, 0x54, 0x8b, 0x74, 0x38, 0x0a, 0x6b, 0xb8, 0x41, 0x77, 0xc8,
599 | 0x54, 0xe1, 0x3d, 0x07, 0x56, 0x54, 0x78, 0x40, 0x13, 0x36, 0xe3, 0x7d, 0x29, 0xca, 0x24, 0x39,
600 | 0x9a, 0x4d, 0x9e, 0xc0, 0x50, 0xb2, 0x28, 0x44, 0x5e, 0xae, 0x58, 0x96, 0xe1, 0x5e, 0x89, 0x04,
601 | 0x33, 0x25, 0xcd, 0xea, 0x22, 0x29, 0xce, 0x30, 0x99, 0x59, 0x3b, 0x58, 0xac, 0x82, 0x59, 0xd3,
602 | 0x89, 0x31, 0x71, 0xa1, 0x69, 0xad, 0xe8, 0xa5, 0xe2, 0x85, 0xc4, 0xd9, 0xa1, 0x6b, 0xbc, 0xe2,
603 | 0xad, 0x76, 0xfc, 0xfe, 0x4a, 0x7e, 0xfb, 0x3b, 0x7b, 0xe0, 0x81, 0x3f, 0xb3, 0x25, 0xa2, 0x7f,
604 | 0xd8, 0x45, 0x7f, 0x5b, 0xb2, 0x78, 0x97, 0x95, 0xe6, 0x9a, 0x2a, 0x77, 0x6c, 0x89, 0xeb, 0xc6,
605 | 0x19, 0x8d, 0xb1, 0xbc, 0x01, 0x6d, 0x38, 0xa7, 0x59, 0xa7, 0x48, 0x2c, 0x44, 0xd2, 0x11, 0x86,
606 | 0x89, 0xe5, 0x48, 0x8c, 0x41, 0xd1, 0x99, 0xb7, 0x61, 0x8c, 0x99, 0x34, 0x43, 0x4d, 0xac, 0x2b,
607 | 0x46, 0x4c, 0x39, 0x34, 0x87, 0x09, 0x66, 0xf1, 0xa2, 0xe9, 0x8b, 0x68, 0x3c, 0x27, 0xd2, 0xe1,
608 | 0x5a, 0xef, 0x87, 0x86, 0xde, 0x18, 0xd6, 0xe5, 0x82, 0x6e, 0x33, 0x82, 0x88, 0x21, 0x44, 0xbf,
609 | 0xd2, 0x8f, 0x12, 0x86, 0xc3, 0x45, 0x30, 0x8a, 0x12, 0xd6, 0xf8, 0x5f, 0x28, 0xcf, 0x50, 0xec,
610 | 0x1e, 0xe2, 0x98, 0x71, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
611 | };
--------------------------------------------------------------------------------
/src/main/main.ino:
--------------------------------------------------------------------------------
1 | #include // Flicker-free printing to TFT
2 | #include // Communication with VESC controller
3 | #include // Hardware-specific library for TFT display
4 | #include
5 | #include "EEPROMAnything.h" // Easy access to EEPROM storage
6 |
7 | // Global variables for tracking speed, distance, and motor data
8 | float trip;
9 | float startup_total_km;
10 | float last_total_km_stored;
11 | float total_km;
12 | float tacho;
13 | float rpm;
14 | float speed;
15 | float watts;
16 | float wheel_diameter;
17 | int maxspeed;
18 | int brightness = 255;
19 | char fmt[10];
20 |
21 |
22 | // Font settings for various display elements
23 | #define SPEEDFONT &JerseyM54_82pt7b // Large font for displaying speed
24 | #define DATAFONTSMALL2 &JerseyM54_14pt7b // Small font for other data values
25 | #define DATAFONTSMALL &JerseyM54_18pt7b // Alternative small font
26 | #define DATAFONTSMALLTEXT &Blockletter8pt7b // Font for smaller text labels
27 |
28 | // Motor and wheel parameters for speed calculation
29 | #define MOTOR_POLES 30 // Number of motor poles (30 for typical E-scooters)
30 | #define WHEEL_DIAMETER_MM 246 // Diameter of the wheel in millimeters
31 | #define GEAR_RAITO 1.0 // Motor pulley teeth count (1:1 gearing)
32 | #define PI 3.141592 // Pi constant
33 | #define SCONST 0.12 // Conversion factor from RPM to speed (km/h)
34 |
35 | // Pin configs for the hardware
36 |
37 | #define RXD2 22 // DISPLAY RX 22 TO VESC TX
38 | #define TXD2 27 // DISPLAY TX 27 TO VESC RX
39 |
40 | #define LDR_PIN 34 // Light Detecting Resistor that sits on top right of the display
41 | #define LCD_BACK_LIGHT_PIN 21
42 |
43 | // User-configurable settings for warnings and thresholds
44 | int EEPROM_MAGIC_VALUE = 0; // EEPROM magic value to track saved data
45 | #define EEPROM_UPDATE_EACH_KM 0.1 // Frequency of EEPROM updates (every 0.1 km)
46 |
47 | int COLOR_WARNING_SPEED = TFT_RED; // Color for speed warning display
48 | #define HIGH_SPEED_WARNING 60 // Speed threshold for warnings (60 km/h)
49 |
50 | int COLOR_WARNING_TEMP_VESC = TFT_WHITE; // Color for VESC temperature warnings
51 | #define VESC_TEMP_WARNING1 50 // First temperature warning threshold (50°C)
52 | #define VESC_TEMP_WARNING2 80 // Second temperature warning threshold (80°C)
53 |
54 | int COLOR_WARNING_TEMP_MOTOR = TFT_WHITE; // Color for motor temperature warnings
55 | #define MOTOR_TEMP_WARNING1 80 // First motor temperature warning threshold (80°C)
56 | #define MOTOR_TEMP_WARNING2 120 // Second motor temperature warning threshold (120°C)
57 |
58 | int BATTERY_WARNING_COLOR = TFT_WHITE; // Color for battery voltage warnings
59 | #define BATTERY_WARNING_HIGH 67.2 // High voltage warning threshold (67.2V)
60 | #define BATTERY_WARNING_LOW 54.4 // Low voltage warning threshold (54.4V)
61 | #define BATTERY_WARNING_0 48.0 // Voltage Cut warning treshold(48V)
62 |
63 | int ERROR_WARNING_COLOR = TFT_WHITE; // Color for error warnings
64 |
65 | #define DO_LOGO_DRAW // Uncomment if you want enable startup logo and background logo [Currently disbaled version doesn't work so don't disable!]
66 | #define DEBUG_MODE
67 |
68 | #ifdef DO_LOGO_DRAW
69 | #include // PNG decoder library
70 | #include "startup_image.h"// PNG data for startup logo
71 | #include "background_image.h" // PNG data for background image
72 | PNG png; // PNG decoder instance
73 | int16_t xpos = 0; // X position for image drawing
74 | int16_t ypos = 0; // Y position for image drawing
75 | #define MAX_IMAGE_WDITH 320 // Maximum image width for display
76 | #endif
77 |
78 | // Other settings
79 | int Screen_refresh_delay = 50; // Delay between screen refreshes (ms)
80 | ComEVesc UART; // VESC UART instance
81 | HardwareSerial VescSerial(1);
82 |
83 |
84 | TFT_eSPI tft = TFT_eSPI();
85 | FlickerFreePrint Data1(&tft, TFT_WHITE, TFT_BLACK);
86 | FlickerFreePrint Data2(&tft, TFT_WHITE, TFT_BLACK);
87 | FlickerFreePrint Data3(&tft, TFT_WHITE, TFT_BLACK);
88 | FlickerFreePrint Data4(&tft, TFT_WHITE, TFT_BLACK);
89 | FlickerFreePrint Data5(&tft, TFT_WHITE, TFT_BLACK);
90 | FlickerFreePrint Data6(&tft, TFT_WHITE, TFT_BLACK);
91 | FlickerFreePrint Data7(&tft, TFT_WHITE, TFT_BLACK);
92 | FlickerFreePrint Data8(&tft, TFT_WHITE, TFT_BLACK);
93 | FlickerFreePrint Data9(&tft, TFT_WHITE, TFT_BLACK);
94 | FlickerFreePrint Data10(&tft, TFT_WHITE, TFT_BLACK);
95 | FlickerFreePrint Data11(&tft, TFT_WHITE, TFT_BLACK);
96 | FlickerFreePrint Data1t(&tft, TFT_WHITE, TFT_BLACK);
97 | FlickerFreePrint Data2t(&tft, TFT_WHITE, TFT_BLACK);
98 | FlickerFreePrint Data3t(&tft, TFT_WHITE, TFT_BLACK);
99 | FlickerFreePrint Data4t(&tft, TFT_WHITE, TFT_BLACK);
100 | FlickerFreePrint Data5t(&tft, TFT_WHITE, TFT_BLACK);
101 | FlickerFreePrint Data6t(&tft, TFT_WHITE, TFT_BLACK);
102 | FlickerFreePrint Data7t(&tft, TFT_WHITE, TFT_BLACK);
103 | FlickerFreePrint Data8t(&tft, TFT_WHITE, TFT_BLACK);
104 | FlickerFreePrint Data9t(&tft, TFT_WHITE, TFT_BLACK);
105 | FlickerFreePrint Data10t(&tft, TFT_WHITE, TFT_BLACK);
106 | FlickerFreePrint Data11t(&tft, TFT_WHITE, TFT_BLACK);
107 |
108 | void pngDraw(PNGDRAW * pDraw) {
109 | uint16_t lineBuffer[MAX_IMAGE_WDITH];
110 | png.getLineAsRGB565(pDraw, lineBuffer, PNG_RGB565_BIG_ENDIAN, 0xffffffff);
111 | tft.pushImage(xpos, ypos + pDraw -> y, pDraw -> iWidth, 1, lineBuffer);
112 | }
113 |
114 | void checkvalues() {
115 | total_km = startup_total_km + trip;
116 | bool traveled_enough_distance = (total_km - last_total_km_stored >= EEPROM_UPDATE_EACH_KM);
117 | if (traveled_enough_distance) {
118 | last_total_km_stored = total_km;
119 | EEPROM_writeAnything(EEPROM_MAGIC_VALUE, total_km);
120 | }
121 | }
122 |
123 | void setup(void) {
124 | VescSerial.begin(115200, SERIAL_8N1, RXD2, TXD2); // VESC RX TX
125 | // Wait for the Serial port to be ready
126 | while (!VescSerial) {
127 | delay(10);
128 | }
129 | UART.setSerialPort(&VescSerial);
130 | #ifdef DEBUG_MODE
131 | Serial.begin(115200); // Debug MicroUSB ?
132 | UART.setDebugPort(&Serial);
133 | #endif
134 | tft.begin();
135 | EEPROM.begin(100);
136 | tft.setRotation(1);
137 | tft.fillScreen(TFT_BLACK);
138 | UART.getVescValues();
139 | EEPROM_readAnything(EEPROM_MAGIC_VALUE, startup_total_km);
140 | if (isnan(startup_total_km)) {
141 | tft.setCursor(40, 160);
142 | tft.setTextFont(4);
143 | tft.setTextDatum(MC_DATUM);
144 | tft.setTextColor(TFT_RED, TFT_BLACK);
145 | tft.print("SETUP EPROM...");
146 | for (int i = 0; i <100; i++){
147 | EEPROM_writeAnything(i,0);
148 | }
149 | EEPROM_writeAnything(EEPROM_MAGIC_VALUE,0.0);
150 | delay(1500);
151 | ESP.restart();
152 | }
153 | last_total_km_stored = startup_total_km;
154 | tacho = (UART.data.tachometerAbs / (MOTOR_POLES * 3));
155 | trip = tacho / 1000;
156 | if (startup_total_km != 0) {
157 | startup_total_km = startup_total_km - trip;
158 | }
159 |
160 | #ifdef DO_LOGO_DRAW
161 | int16_t rc_bg = png.openFLASH((uint8_t * ) startup_image, sizeof(startup_image), pngDraw);
162 | if (rc_bg == PNG_SUCCESS) {
163 | tft.startWrite();
164 | rc_bg = png.decode(NULL, 0);
165 | tft.endWrite();
166 | }
167 | png.close();
168 | delay(3000);
169 | tft.fillScreen(TFT_BLACK);
170 | int16_t rc_mainbg = png.openFLASH((uint8_t * ) background_image, sizeof(background_image), pngDraw);
171 | if (rc_mainbg == PNG_SUCCESS) {
172 | tft.startWrite();
173 | rc_mainbg = png.decode(NULL, 0);
174 | tft.endWrite();
175 | }
176 | png.close();
177 | #endif
178 | }
179 | void loop() {
180 | UART.getVescValues();
181 | tacho = (UART.data.tachometerAbs / (MOTOR_POLES * 3));
182 | rpm = (UART.data.rpm / (MOTOR_POLES / 2));
183 | trip = tacho / 1000;
184 | wheel_diameter = (PI * WHEEL_DIAMETER_MM / 1000);
185 | speed = ((rpm * wheel_diameter * GEAR_RAITO) / 1000) * 60;
186 | watts = UART.data.inpVoltage*UART.data.avgInputCurrent;
187 | int sensorValue = analogRead(LDR_PIN);
188 | if(sensorValue <= 200){sensorValue = 200;}
189 | brightness = map(sensorValue, 200, 1000, 255, 25);
190 | if(brightness <= 25){brightness=25;} //stupid map function gets destroyed when input value goes over specified
191 | analogWrite(LCD_BACK_LIGHT_PIN, brightness);
192 |
193 | //Main Speed --------------------------------------------------------------------------
194 |
195 | int speedINT = _max(speed, 0);
196 | if (speedINT > HIGH_SPEED_WARNING) {
197 | COLOR_WARNING_SPEED = TFT_RED;
198 | } else {
199 | COLOR_WARNING_SPEED = TFT_WHITE;
200 | }
201 | Data1.setTextColor(TFT_BLACK, TFT_BLACK);
202 |
203 | tft.setFreeFont(SPEEDFONT);
204 | tft.setCursor(83, 162);
205 | Data1.setTextColor(COLOR_WARNING_SPEED, TFT_BLACK);
206 | Data1.print(speedINT);
207 |
208 | //Vesc Temp --------------------------------------------------------------------------
209 |
210 | if (UART.data.tempMosfet > VESC_TEMP_WARNING1) {
211 | COLOR_WARNING_TEMP_VESC = TFT_YELLOW;
212 | }
213 | if (UART.data.tempMosfet > VESC_TEMP_WARNING2) {
214 | COLOR_WARNING_TEMP_VESC = TFT_RED;
215 | } else {
216 | COLOR_WARNING_TEMP_VESC = TFT_GREEN;
217 | }
218 |
219 | tft.setCursor(5, 220);
220 | tft.setFreeFont(DATAFONTSMALL);
221 | Data2.setTextColor(COLOR_WARNING_TEMP_VESC, TFT_BLACK);
222 | dtostrf(UART.data.tempMosfet, 3, 0, fmt);
223 | Data2.print(fmt);
224 |
225 | tft.setCursor(15, 235);
226 | tft.setFreeFont(DATAFONTSMALLTEXT);
227 | Data2t.setTextColor(TFT_WHITE, TFT_BLACK);
228 | Data2t.print("VescT");
229 |
230 | //Motor Temp --------------------------------------------------------------------------
231 |
232 | if (UART.data.tempMotor > MOTOR_TEMP_WARNING1) {
233 | COLOR_WARNING_TEMP_MOTOR = TFT_YELLOW;
234 | }
235 | if (UART.data.tempMotor > MOTOR_TEMP_WARNING2) {
236 | COLOR_WARNING_TEMP_MOTOR = TFT_RED;
237 | } else {
238 | COLOR_WARNING_TEMP_MOTOR = TFT_GREEN;
239 | }
240 |
241 | tft.setCursor(65, 220);
242 | tft.setFreeFont(DATAFONTSMALL);
243 | Data11.setTextColor(COLOR_WARNING_TEMP_MOTOR, TFT_BLACK);
244 | dtostrf(UART.data.tempMotor, 3, 0, fmt);
245 | Data11.print(fmt);
246 |
247 | tft.setCursor(65, 235);
248 | tft.setFreeFont(DATAFONTSMALLTEXT);
249 | Data11t.setTextColor(TFT_WHITE, TFT_BLACK);
250 | Data11t.print("MotorT");
251 |
252 | //Battery Voltage --------------------------------------------------------------------------
253 |
254 | if (UART.data.inpVoltage > BATTERY_WARNING_HIGH) {
255 | BATTERY_WARNING_COLOR = TFT_RED;
256 | } else if (UART.data.inpVoltage < BATTERY_WARNING_0) {
257 | BATTERY_WARNING_COLOR = TFT_RED;
258 | } else if (UART.data.inpVoltage < BATTERY_WARNING_LOW) {
259 | BATTERY_WARNING_COLOR = TFT_YELLOW;
260 | } else if (BATTERY_WARNING_LOW < UART.data.inpVoltage < BATTERY_WARNING_HIGH) {
261 | BATTERY_WARNING_COLOR = TFT_GREEN;
262 | }
263 |
264 | tft.setFreeFont(DATAFONTSMALL2);
265 | Data4.setTextColor(BATTERY_WARNING_COLOR, TFT_BLACK);
266 | tft.setCursor(10, 25);
267 | dtostrf(UART.data.inpVoltage, 3, 1, fmt);
268 | Data4.print(fmt);
269 |
270 | tft.setCursor(10, 30);
271 | tft.setTextFont(1);
272 | Data4t.setTextColor(TFT_WHITE, TFT_BLACK);
273 | Data4t.print("Battery");
274 |
275 | //Watt/Error display --------------------------------------------------------------------------
276 |
277 | if (UART.data.error == 0){ // Display Watts when no error(0)
278 | tft.setFreeFont(DATAFONTSMALL2);
279 | Data10.setTextColor(TFT_WHITE, TFT_BLACK);
280 | tft.setCursor(260, 25);
281 | dtostrf(watts, 5, 0, fmt);
282 | Data10.print(fmt);
283 |
284 | tft.setCursor (270, 30);
285 | tft.setTextFont(1);
286 | Data10t.setTextColor(TFT_WHITE, TFT_BLACK);
287 | Data10t.print("Watts");
288 | }else{ // Error display when present
289 | if (UART.data.error > 0) {
290 | ERROR_WARNING_COLOR = TFT_RED;
291 | }else{
292 | ERROR_WARNING_COLOR = TFT_GREEN;
293 | }
294 | tft.setFreeFont(DATAFONTSMALL2);
295 | Data10.setTextColor(ERROR_WARNING_COLOR, TFT_BLACK);
296 | tft.setCursor(270, 25);
297 | dtostrf(UART.data.error, 2, 0, fmt);
298 | Data10.print(fmt);
299 |
300 | tft.setCursor(270, 30);
301 | tft.setTextFont(1);
302 | Data10t.setTextColor(TFT_WHITE, TFT_BLACK);
303 | Data10t.print("Error");
304 | }
305 |
306 | //Motor-Phase Current --------------------------------------------------------------------------
307 |
308 | tft.setCursor(270, 220);
309 | tft.setFreeFont(DATAFONTSMALL);
310 | Data6.setTextColor(TFT_GREEN, TFT_BLACK);
311 | dtostrf(UART.data.avgMotorCurrent, 3, 0, fmt);
312 | Data6.print(fmt);
313 |
314 | tft.setCursor(265, 235);
315 | tft.setFreeFont(DATAFONTSMALLTEXT);
316 | Data6t.setTextColor(TFT_WHITE, TFT_BLACK);
317 | Data6t.print("PHASE A");
318 |
319 | //Battery Current --------------------------------------------------------------------------
320 |
321 | tft.setCursor(220, 220);
322 | tft.setFreeFont(DATAFONTSMALL);
323 | Data7.setTextColor(TFT_GREEN, TFT_BLACK);
324 | dtostrf(UART.data.avgInputCurrent, 3, 0, fmt);
325 | Data7.print(fmt);
326 |
327 | tft.setCursor(215, 235);
328 | tft.setFreeFont(DATAFONTSMALLTEXT);
329 | Data7t.setTextColor(TFT_WHITE, TFT_BLACK);
330 | Data7t.print("BATT A");
331 |
332 | //Odometer Text (TRIP) --------------------------------------------------------------------------
333 |
334 | tft.setCursor(145, 220);
335 | tft.setFreeFont(DATAFONTSMALL);
336 |
337 | Data9.setTextColor(TFT_WHITE, TFT_BLACK);
338 | dtostrf(total_km, 4, 0, fmt);
339 | Data9.print(fmt);
340 |
341 | tft.setCursor(135, 235);
342 | tft.setFreeFont(DATAFONTSMALLTEXT);
343 | Data9t.setTextColor(TFT_WHITE, TFT_BLACK);
344 | Data9t.print("ODOMETER");
345 |
346 | delay(Screen_refresh_delay);
347 | checkvalues();
348 | }
349 |
--------------------------------------------------------------------------------