diff --git a/ConnectingHardware.md b/ConnectingHardware.md index 09e71397..dd5e7910 100644 --- a/ConnectingHardware.md +++ b/ConnectingHardware.md @@ -19,32 +19,75 @@ #### mapping suggestion from Waveshare SPI e-Paper to Wemos D1 mini - BUSY -> D2, RST -> D4, DC -> D3, CS -> D8, CLK -> D5, DIN -> D7, GND -> GND, 3.3V -> 3.3V - -#### mapping suggestion from Waveshare SPI e-Paper to ESP8266 NodeMCU: -- BUSY -> D2, RST -> D4, DC -> D3, CS -> D8, CLK -> D5, DIN -> D7, GND -> GND, 3.3V -> 3.3V +- NOTE: connect 3.3k pull-down from D8 to GND if your board or shield has level converters +- NOTE for ESP8266: using SS (GPIO15) for CS may cause boot mode problems, use different pin in case, or 3.3k pull-down +- NOTE: connect 1k pull-up from D4 (RST) to 3.3V if your board or shield has the "clever" reset circuit, or use a different pin #### mapping suggestion from Waveshare SPI e-Paper to generic ESP8266 - BUSY -> GPIO4, RST -> GPIO2, DC -> GPIO0, CS -> GPIO15, CLK -> GPIO14, DIN -> GPIO13, GND -> GND, 3.3V -> 3.3V +- NOTE: connect 3.3k pull-down from GPIO15 to GND if your board or shield has level converters +- NOTE for ESP8266: using SS (GPIO15) for CS may cause boot mode problems, use different pin in case, or 3.3k pull-down +- NOTE: connect 1k pull-up from GPIO2 (RST) to 3.3V if your board or shield has the "clever" reset circuit, or use a different pin -#### mapping suggestion (by G6EJD) from Waveshare SPI e-Paper to ESP8266 Huzzah: -- BUSY -> 03, RST -> 15, DC -> 02, CS -> 00, CLK -> 14, DIN -> 13, GND -> GND, 3.3V -> 3.3V +#### mapping of Waveshare e-Paper ESP8266 Driver Board, new version +- BUSY -> GPIO5, RST -> GPIO2, DC -> GPIO4, CS -> GPIO15, CLK -> GPIO14, DIN -> GPIO13, GND -> GND, 3.3V -> 3.3V +- NOTE for ESP8266: using SS (GPIO15) for CS may cause boot mode problems, add a 3.3k pull-down in case +- the e-Paper ESP8266 Driver Board should have no boot mode issue, as it doesn't use level converters + +#### mapping of Waveshare e-Paper ESP8266 Driver Board, old version +- BUSY -> GPIO16, RST -> GPIO5, DC -> GPIO4, CS -> GPIO15, CLK -> GPIO14, DIN -> GPIO13, GND -> GND, 3.3V -> 3.3V +- NOTE for ESP8266: using SS (GPIO15) for CS may cause boot mode problems, add a 3.3k pull-down in case +- the e-Paper ESP8266 Driver Board should have no boot mode issue, as it doesn't use level converters #### mapping suggestion for ESP32, e.g. LOLIN32, see .../variants/.../pins_arduino.h for your board - NOTE: there are variants with different pins for SPI ! CHECK SPI PINS OF YOUR BOARD - BUSY -> 4, RST -> 16, DC -> 17, CS -> SS(5), CLK -> SCK(18), DIN -> MOSI(23), GND -> GND, 3.3V -> 3.3V -#### mapping suggestion for STM32F1, e.g. STM32F103C8T6 "BluePill" +#### mapping of Waveshare ESP32 Driver Board +- BUSY -> 25, RST -> 26, DC -> 27, CS-> 15, CLK -> 13, DIN -> 14 +- NOTE: this board uses "unusual" SPI pins and requires re-mapping of HW SPI to these pins in SPIClass +- see example GxEPD2_WS_ESP32_Driver.ino, it shows how this can be done easily + +#### mapping suggestion for ESP32, e.g. LOLIN32 D32 PRO +- BUSY -> 15, RST -> 2, DC -> 0, CS -> 5, CLK -> SCK(18), DIN -> MOSI(23), GND -> GND, 3.3V -> 3.3V +- note: use explicit value for CS, as SS is re-defined to TF_CS(4) in pins_arduino.h for Board: "LOLIN D32 PRO" + +#### mapping suggestion for ESP32, e.g. TTGO T8 ESP32-WROVER +- BUSY -> 4, RST -> 0, DC -> 2, CS -> SS(5), CLK -> SCK(18), DIN -> MOSI(23), GND -> GND, 3.3V -> 3.3V +- for use with Board: "ESP32 Dev Module": + +#### new mapping suggestion for STM32F1, e.g. STM32F103C8T6 "BluePill" - BUSY -> A1, RST -> A2, DC -> A3, CS-> A4, CLK -> A5, DIN -> A7 #### mapping suggestion for AVR, UNO, NANO etc. - BUSY -> 7, RST -> 9, DC -> 8, CS-> 10, CLK -> 13, DIN -> 11 +#### mapping suggestion for AVR, Arduino Micro, Leonardo +- note: on Leonardo board HW SPI pins are on 6-pin ICSP header +- BUSY -> 7, RST -> 9, DC -> 8, CS-> 10, CLK -> 15, DIN -> 16 + +#### mapping of Waveshare Universal e-Paper Raw Panel Driver Shield for Arduino / NUCLEO +- BUSY -> 7, RST -> 8, DC -> 9, CS-> 10, CLK -> 13, DIN -> 11 + #### mapping suggestion for Arduino MEGA - BUSY -> 7, RST -> 9, DC -> 8, CS-> 53, CLK -> 52, DIN -> 51 -#### mapping suggestion for Arduino DUE -- BUSY -> 7, RST -> 9, DC -> 8, CS-> 77, CLK -> 76, DIN -> 75 -- SPI pins are on 6 pin 2x3 SPI header +#### mapping suggestion for Arduino DUE, note: pin 77 is on board pin 10, SS is 10 +- BUSY -> 7, RST -> 9, DC -> 8, CS-> 10, CLK -> 76, DIN -> 75 +- SPI pins are on 6 pin 2x3 SPI header, no SS on SPI header! + +#### mapping suggestion for Arduino MKR1000 or MKRZERO +- note: can't use SS on MKR1000: is defined as 24, should be 4 +- BUSY -> 5, RST -> 6, DC -> 7, CS-> 4, CLK -> 9, DIN -> 8 + +#### mapping suggestion for Arduino Nano RP2040 Connect (Arduino MBED OS Nano Boards) +- BUSY -> 7, RST -> 9, DC -> 8, CS-> 10, CLK -> 13, DIN -> 11 + +#### mapping suggestion for Raspberry Pi Pico RP2040 (Arduino MBED OS RP2040 Boards) +- BUSY -> 7, RST -> 9, DC -> 8, CS-> 5, CLK -> 18, DIN -> 19 + +#### mapping of my proto board for Raspberry Pi Pico RP2040 (previous default SPI pins) +- BUSY -> 7, RST -> 9, DC -> 8, CS-> 5, CLK -> 2, DIN -> 3 ## connection scheme for (discontinued) DESTM32-S2 connection board for e-paper panels: diff --git a/README.md b/README.md index 6ec486a1..758d8af1 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,8 @@ - Waveshare e-paper displays with SPI: http://forum.arduino.cc/index.php?topic=487007.0 - Good Display ePaper for Arduino : https://forum.arduino.cc/index.php?topic=436411.0 +- Note that these topics are closed. Use only for reference. +- create a new topic for each question or issue in https://forum.arduino.cc/c/using-arduino/displays/23 ### Note on documentation - GxEPD2 uses Adafruit_GFX for Graphics and Text support, which is well documented there @@ -78,6 +80,7 @@ - GDEW026M01 2.6" b/w 152x296, UC8151 (IL0373), DES - DEPG0266BN 2.66" b/w 152x296, SSD1680, e.g. LILYGO® TTGO T5 2.66 inch - GDEY0266Z90 2.66" b/w/r 152x296, SSD1680 +- GDEY0266F51H 2.66" 4-color 184x460, JD79667 - GDEW027C44 2.7" b/w/r 176x264, IL91874 - GDEW027W3 2.7" b/w 176x264, EK79652 (IL91874) - GDEY027T91 2.7" b/w 176x264, SSD1680 @@ -92,13 +95,17 @@ - GDEM029C90 2.9" b/w/y 128x296, SSD1680 - DEPG0290BS 2.9" b/w 128x296, SSD1680, e.g. LILYGO® TTGO T5 V2.4.1 2.9" - GDEY029T94 2.9" b/w 128x296, SSD1680 +- GDEY029F51H 2.9" 4-color 168x384, JD79667 +- Waveshare3inch4color 3.0" 4-color 168x400 - ED037TC1 3.7" b/w 280x480, SSD1677, Waveshare 3.7" - GDEW0371W7 3.7" b/w 240x416, UC8171 (IL0324) - GDEW042T2 4.2" b/w 400x300, UC8176 (IL0398) - GDEW042M01 4.2" b/w 400x300, UC8176 (IL0398), DES - GDEW042Z15 4.2" b/w/r 400x300, UC8176 (IL0398) - GDEQ042Z21 4.2" b/w/r 400x300, UC8276, (Waveshare V2) -- GDEY042T91 4.2" b/w 400x300, SSD1683 +- GDEY042T81 4.2" b/w 400x300, SSD1683 +- GDEY0420F51 4.2" 4-color 400x300, HX8717 +- GDEQ0426T82 4.26" b/w 800x480, SSD1677 - Waveshare437inch4color Waveshare 4.37" 4-color e-paper display 512x368 - ACeP565 5.65" Waveshare 5.65" 7-color e-paper display 600x448 - GDEW0583T7 5.83" b/w 600x448, UC8159c (IL0371) @@ -126,7 +133,16 @@ - promotion panels from suppliers are welcome, to add support to GxEPD2 - donation panels from users are welcome, to add support to GxEPD2 -### Version 1.5.2 +### Version 1.5.3 +- added support for GDEQ0426T82 4.26" b/w 800x480 +- added support for GDEY0266F51H 2.66" 4-color 184x460 +- added support for GDEY029F51H 2.9" 4-color 168x384 +- added support for GDEY0420F51 4.2" 4-color 400x300 +- added support for Waveshare 3.00" 4-color e-paper display 168x400 +- updated support for Waveshare 4.37" 4-color e-paper display 512x368 +- the 4-color displays have partial window addressing and refresh +- renamed GDEY042T91 to its new official name GDEY042T81 +#### Version 1.5.2 - added support for Waveshare 4.37" 4-color e-paper display 512x368 - fixed __has_include test (for packages that don't support __has_include) - added WIDTH_VISIBLE for correct graphics width for 2.13" b/w 122x250 diff --git a/examples/GxEPD2_Example/GxEPD2_Example.ino b/examples/GxEPD2_Example/GxEPD2_Example.ino index db707321..db014667 100644 --- a/examples/GxEPD2_Example/GxEPD2_Example.ino +++ b/examples/GxEPD2_Example/GxEPD2_Example.ino @@ -81,7 +81,13 @@ #include "bitmaps/Bitmaps3c800x480.h" // 7.5" b/w/r #include "bitmaps/Bitmaps3c880x528.h" // 7.5" b/w/r #include "bitmaps/WS_Bitmaps800x600.h" // 6.0" grey +// 4-color +#include "bitmaps/Bitmaps4c184x360.h" // 2.66" 4-color +#include "bitmaps/Bitmaps4c168x384.h" // 2.9" 4-color #include "bitmaps/WS_Bitmaps4c168x168.h" // 4.37" 4-color +#include "bitmaps/WS_Bitmaps4c168x400.h" // 3.00" 4-color +#include "bitmaps/Bitmaps4c400x300.h" // 4.2"" 4-color +// 7-color #include "bitmaps/WS_Bitmaps7c192x143.h" // 5.65" 7-color //#include "bitmaps/WS_Bitmaps7c300x180.h" // 7.3" 7-color #endif @@ -142,6 +148,12 @@ void setup() //display.init(115200); // default 10ms reset pulse, e.g. for bare panels with DESPI-C02 display.init(115200, true, 2, false); // USE THIS for Waveshare boards with "clever" reset circuit, 2ms reset pulse //display.init(115200, true, 10, false, SPI0, SPISettings(4000000, MSBFIRST, SPI_MODE0)); // extended init method with SPI channel and/or settings selection + if (display.pages() > 1) + { + delay(100); + Serial.print("pages = "); Serial.print(display.pages()); Serial.print(" page height = "); Serial.println(display.pageHeight()); + delay(1000); + } // first update should be full refresh helloWorld(); delay(1000); @@ -163,6 +175,7 @@ void setup() showFont("glcdfont", 0); delay(1000); } + //drawGrid(); return; drawBitmaps(); drawGraphics(); //return; @@ -190,6 +203,7 @@ void setup() display.powerOff(); #endif Serial.println("setup done"); + display.end(); } void loop() @@ -701,6 +715,43 @@ void showPartialUpdate() } } +void drawGrid() +{ + uint16_t x, y; + display.firstPage(); + do + { + x = 0; + do + { + display.drawLine(x, 0, x, display.height() - 1, GxEPD_BLACK); + x += 10; + } + while (x < display.width()); + y = 0; + do + { + display.drawLine(0, y, display.width() - 1, y, GxEPD_BLACK); + y += 10; + } + while (y < display.height()); + x = 0; + do + { + display.fillCircle(x, display.height() / 2, 3, GxEPD_BLACK); + x += 50; + } + while (x <= display.width()); + y = 0; + do + { + display.fillCircle(display.width() / 2, y, 3, GxEPD_BLACK); + y += 50; + } + while (y <= display.height()); + } + while (display.nextPage()); +} void drawBitmaps() { @@ -778,6 +829,18 @@ void drawBitmaps() #if defined(_WS_Bitmaps4c168x168_H_) drawBitmaps4c168x168(); #endif +#if defined(_WS_Bitmaps4c168x168_H_) + drawBitmaps4c168x168(); +#endif +#if defined(_GxBitmaps4c168x384_H_) + drawBitmaps4c168x384(); +#endif +#if defined(_GxBitmaps4c184x360_H_) + drawBitmaps4c184x360(); +#endif +#if defined(_GxBitmaps4c400x300_H_) + drawBitmaps4c400x300(); +#endif #if defined(_WS_Bitmaps7c192x143_H_) drawBitmaps7c192x143(); #endif @@ -1693,7 +1756,7 @@ void drawBitmaps3c1304x984() #if defined(_WS_Bitmaps4c168x168_H_) void drawBitmaps4c168x168() { - if (display.epd2.panel == GxEPD2::Waveshare437inch4color) + if ((display.epd2.panel == GxEPD2::Waveshare437inch4color) || (display.epd2.panel == GxEPD2::Waveshare3inch4color)) { display.drawNative(WS_Bitmap4c168x168, 0, (display.epd2.WIDTH - 168) / 2, (display.epd2.HEIGHT - 168) / 2, 168, 168, false, false, true); delay(5000); @@ -1701,6 +1764,50 @@ void drawBitmaps4c168x168() } #endif +#if defined(_WS_Bitmaps4c168x400_H_) +void drawBitmaps4c168x400() +{ + if (display.epd2.panel == GxEPD2::Waveshare3inch4color) + { + display.drawNative(WS_Bitmap4c168x400, 0, (display.epd2.WIDTH - 168) / 2, (display.epd2.HEIGHT - 400) / 2, 168, 400, false, false, true); + delay(5000); + } +} +#endif + +#if defined(_GxBitmaps4c168x384_H_) +void drawBitmaps4c168x384() +{ + if (display.epd2.panel == GxEPD2::GDEY029F51H) + { + display.drawNative(Bitmap4c168x384, 0, (display.epd2.WIDTH - 168) / 2, (display.epd2.HEIGHT - 384) / 2, 168, 384, false, false, true); + delay(5000); + } +} +#endif + +#if defined(_GxBitmaps4c184x360_H_) +void drawBitmaps4c184x360() +{ + if (display.epd2.panel == GxEPD2::GDEY0266F51H) + { + display.drawNative(Bitmap4c184x360, 0, (display.epd2.WIDTH - 184) / 2, (display.epd2.HEIGHT - 360) / 2, 184, 360, false, false, true); + delay(5000); + } +} +#endif + +#if defined(_GxBitmaps4c400x300_H_) +void drawBitmaps4c400x300() +{ + if (display.epd2.panel == GxEPD2::GDEY0420F51) + { + display.drawNative(Bitmap4c400x300, 0, (display.epd2.WIDTH - 400) / 2, (display.epd2.HEIGHT - 300) / 2, 400, 300, false, false, true); + delay(5000); + } +} +#endif + #if defined(_WS_Bitmaps7c192x143_H_) void drawBitmaps7c192x143() { @@ -1794,7 +1901,7 @@ void drawGraphics() { display.drawRect(display.width() / 8, display.height() / 8, display.width() * 3 / 4, display.height() * 3 / 4, GxEPD_BLACK); display.drawLine(display.width() / 8, display.height() / 8, display.width() * 7 / 8, display.height() * 7 / 8, GxEPD_BLACK); - display.drawLine(display.width() / 8, display.height() * 7 / 8, display.width() *7 / 8, display.height() / 8, GxEPD_BLACK); + display.drawLine(display.width() / 8, display.height() * 7 / 8, display.width() * 7 / 8, display.height() / 8, GxEPD_BLACK); display.drawCircle(display.width() / 2, display.height() / 2, display.height() / 4, GxEPD_BLACK); display.drawPixel(display.width() / 4, display.height() / 2 , GxEPD_BLACK); display.drawPixel(display.width() * 3 / 4, display.height() / 2 , GxEPD_BLACK); diff --git a/examples/GxEPD2_Example/GxEPD2_display_selection.h b/examples/GxEPD2_Example/GxEPD2_display_selection.h index 35a76de1..2f471c8a 100644 --- a/examples/GxEPD2_Example/GxEPD2_display_selection.h +++ b/examples/GxEPD2_Example/GxEPD2_display_selection.h @@ -50,7 +50,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) // can use only half buffer size //GxEPD2_BW < GxEPD2_583, GxEPD2_583::HEIGHT / 2 > display(GxEPD2_583(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW < GxEPD2_583_T8, GxEPD2_583_T8::HEIGHT / 2 > display(GxEPD2_583_T8(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEW0583T8 648x480, EK79655 (GD7965) @@ -80,6 +81,10 @@ //GxEPD2_3C < GxEPD2_750c_Z08, GxEPD2_750c_Z08::HEIGHT / 4 > display(GxEPD2_750c_Z08(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C < GxEPD2_750c_Z90, GxEPD2_750c_Z90::HEIGHT / 4 > display(GxEPD2_750c_Z90(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEY0420F51 400x300, HX8717 (no inking) //GxEPD2_4C < GxEPD2_437c, GxEPD2_437c::HEIGHT / 4 > display(GxEPD2_437c(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // Waveshare 4.37" 4-color // 7-color e-paper //GxEPD2_3C < GxEPD2_565c, GxEPD2_565c::HEIGHT / 4 > display(GxEPD2_565c(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // Waveshare 5.65" 7-color (3C graphics) @@ -129,7 +134,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) // can use only half buffer size //GxEPD2_BW < GxEPD2_583, GxEPD2_583::HEIGHT / 2 > display(GxEPD2_583(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW < GxEPD2_583_T8, GxEPD2_583_T8::HEIGHT / 2 > display(GxEPD2_583_T8(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // GDEW0583T8 648x480, EK79655 (GD7965) @@ -159,6 +165,10 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // GDEY0420F51 400x300, HX8717 (no inking) //GxEPD2_4C < GxEPD2_437c, GxEPD2_437c::HEIGHT / 4 > display(GxEPD2_437c(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // Waveshare 4.37" 4-color // 7-color e-paper //GxEPD2_7C < GxEPD2_565c, GxEPD2_565c::HEIGHT / 4 > display(GxEPD2_565c(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // Waveshare 5.65" 7-color @@ -202,7 +212,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //GxEPD2_BW display(GxEPD2_583(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW display(GxEPD2_583_T8(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEW0583T8 648x480, EK79655 (GD7965) //GxEPD2_BW display(GxEPD2_583_GDEQ0583T31(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -229,7 +240,11 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper -//GxEPD2_4C < GxEPD2_437c, GxEPD2_437c::HEIGHT / 4 > display(GxEPD2_437c(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // Waveshare 4.37" 4-color +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEY0420F51 400x300, HX8717 (no inking) +//GxEPD2_4C display(GxEPD2_437c(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // Waveshare 4.37" 4-color // 7-color e-paper //GxEPD2_3C < GxEPD2_565c, GxEPD2_565c::HEIGHT / 2 > display(GxEPD2_565c(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // Waveshare 5.65" 7-color (3C graphics) //GxEPD2_7C < GxEPD2_565c, GxEPD2_565c::HEIGHT / 2 > display(GxEPD2_565c(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // Waveshare 5.65" 7-color @@ -294,7 +309,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //GxEPD2_BW display(GxEPD2_583(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW display(GxEPD2_583_T8(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // GDEW0583T8 648x480, EK79655 (GD7965) //GxEPD2_BW display(GxEPD2_583_GDEQ0583T31(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -321,6 +337,10 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // GDEY0420F51 400x300, HX8717 (no inking) //GxEPD2_4C < GxEPD2_437c, GxEPD2_437c::HEIGHT / 4 > display(GxEPD2_437c(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // Waveshare 4.37" 4-color // 7-color e-paper //GxEPD2_3C < GxEPD2_565c, GxEPD2_565c::HEIGHT / 2 > display(GxEPD2_565c(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // Waveshare 5.65" 7-color (3C graphics) @@ -368,7 +388,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //GxEPD2_BW display(GxEPD2_583(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW display(GxEPD2_583_T8(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // GDEW0583T8 648x480, EK79655 (GD7965) //GxEPD2_BW display(GxEPD2_583_GDEQ0583T31(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -396,6 +417,10 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // GDEY0420F51 400x300, HX8717 (no inking) //GxEPD2_4C display(GxEPD2_437c(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // Waveshare 4.37" 4-color // 7-color e-paper #define MAX_HEIGHT_7C(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2)) // 2 pixel per byte @@ -450,7 +475,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //GxEPD2_BW display(GxEPD2_583(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW display(GxEPD2_583_T8(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0583T8 648x480, EK79655 (GD7965) //GxEPD2_BW display(GxEPD2_583_GDEQ0583T31(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -478,6 +504,10 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEY0420F51 400x300, HX8717 (no inking) //GxEPD2_4C display(GxEPD2_437c(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // Waveshare 4.37" 4-color // 7-color e-paper #define MAX_HEIGHT_7C(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2)) // 2 pixel per byte @@ -524,7 +554,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //GxEPD2_BW display(GxEPD2_583(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW display(GxEPD2_583_T8(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // GDEW0583T8 648x480, EK79655 (GD7965) //GxEPD2_BW display(GxEPD2_583_GDEQ0583T31(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -551,6 +582,10 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); //GDEH075Z90 880x528, SSD1677 // 4-color e-paper +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // GDEY0420F51 400x300, HX8717 (no inking) //GxEPD2_4C display(GxEPD2_437c(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // Waveshare 4.37" 4-color // 7-color e-paper //GxEPD2_7C display(GxEPD2_565c(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // Waveshare 5.65" 7-color diff --git a/examples/GxEPD2_Example/GxEPD2_display_selection_added.h b/examples/GxEPD2_Example/GxEPD2_display_selection_added.h index 301477b2..d3a14598 100644 --- a/examples/GxEPD2_Example/GxEPD2_display_selection_added.h +++ b/examples/GxEPD2_Example/GxEPD2_display_selection_added.h @@ -26,7 +26,7 @@ //GxEPD2_BW display(GxEPD2_150_BN(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // DEPG0150BN 200x200, SSD1681, TTGO T5 V2.4.1 //GxEPD2_BW display(GxEPD2_154(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEP015OC1 200x200, IL3829, no longer available //GxEPD2_BW display(GxEPD2_154_D67(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEH0154D67 200x200, SSD1681 -//GxEPD2_BW display(GxEPD2_154_T8(//*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0154T8 152x152, UC8151 (IL0373) +//GxEPD2_BW display(GxEPD2_154_T8(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0154T8 152x152, UC8151 (IL0373) //GxEPD2_BW display(GxEPD2_154_M09(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0154M09 200x200, JD79653A //GxEPD2_BW display(GxEPD2_154_M10(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0154M10 152x152, UC8151D //GxEPD2_BW display(GxEPD2_154_GDEY0154D67(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEY0154D67 200x200, SSD1681, (FPC-B001 20.05.21) @@ -57,7 +57,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //GxEPD2_BW display(GxEPD2_583(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW display(GxEPD2_583_T8(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0583T8 648x480, EK79655 (GD7965) //GxEPD2_BW display(GxEPD2_583_GDEQ0583T31(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -85,6 +86,10 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEY0420F51 400x300, HX8717 (no inking) //GxEPD2_4C display(GxEPD2_437c(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // Waveshare 4.37" 4-color // 7-color e-paper #define MAX_HEIGHT_7C(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2)) // 2 pixel per byte @@ -147,7 +152,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //GxEPD2_BW display(GxEPD2_583(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW display(GxEPD2_583_T8(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEW0583T8 648x480, EK79655 (GD7965) //GxEPD2_BW display(GxEPD2_583_GDEQ0583T31(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -175,7 +181,11 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper -//GxEPD2_4C display(GxEPD2_437c(//*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // Waveshare 4.37" 4-color +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEY0420F51 400x300, HX8717 (no inking) +//GxEPD2_4C display(GxEPD2_437c(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // Waveshare 4.37" 4-color // 7-color e-paper #define MAX_HEIGHT_7C(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2)) // 2 pixel per byte //GxEPD2_7C display(GxEPD2_565c(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // Waveshare 5.65" 7-color @@ -233,7 +243,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //GxEPD2_BW display(GxEPD2_583(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW display(GxEPD2_583_T8(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEW0583T8 648x480, EK79655 (GD7965) //GxEPD2_BW display(GxEPD2_583_GDEQ0583T31(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -260,6 +271,10 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEY0420F51 400x300, HX8717 (no inking) //GxEPD2_4C < GxEPD2_437c, GxEPD2_437c::HEIGHT / 4 > display(GxEPD2_437c(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // Waveshare 4.37" 4-color // 7-color e-paper //GxEPD2_7C < GxEPD2_565c, GxEPD2_565c::HEIGHT / 2 > display(GxEPD2_565c(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // Waveshare 5.65" 7-color @@ -313,7 +328,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //GxEPD2_BW display(GxEPD2_583(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW display(GxEPD2_583_T8(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEW0583T8 648x480, EK79655 (GD7965) //GxEPD2_BW display(GxEPD2_583_GDEQ0583T31(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -340,6 +356,10 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEY0420F51 400x300, HX8717 (no inking) //GxEPD2_4C < GxEPD2_437c, GxEPD2_437c::HEIGHT / 4 > display(GxEPD2_437c(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // Waveshare 4.37" 4-color // 7-color e-paper //GxEPD2_7C < GxEPD2_565c, GxEPD2_565c::HEIGHT / 2 > display(GxEPD2_565c(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // Waveshare 5.65" 7-color @@ -393,7 +413,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) // can use only half buffer size //GxEPD2_BW < GxEPD2_583, GxEPD2_583::HEIGHT / 2 > display(GxEPD2_583(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW < GxEPD2_583_T8, GxEPD2_583_T8::HEIGHT / 2 > display(GxEPD2_583_T8(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // GDEW0583T8 648x480, EK79655 (GD7965) @@ -423,6 +444,10 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // GDEY0420F51 400x300, HX8717 (no inking) //GxEPD2_4C < GxEPD2_437c, GxEPD2_437c::HEIGHT / 4 > display(GxEPD2_437c(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // Waveshare 4.37" 4-color // 7-color e-paper //GxEPD2_7C < GxEPD2_565c, GxEPD2_565c::HEIGHT / 4 > display(GxEPD2_565c(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // Waveshare 5.65" 7-color @@ -468,7 +493,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //GxEPD2_BW display(GxEPD2_583(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW display(GxEPD2_583_T8(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0583T8 648x480, EK79655 (GD7965) //GxEPD2_BW display(GxEPD2_583_GDEQ0583T31(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -496,6 +522,10 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEY0420F51 400x300, HX8717 (no inking) //GxEPD2_4C display(GxEPD2_437c(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // Waveshare 4.37" 4-color // 7-color e-paper #define MAX_HEIGHT_7C(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2)) // 2 pixel per byte diff --git a/examples/GxEPD2_Example/GxEPD2_display_selection_new_style.h b/examples/GxEPD2_Example/GxEPD2_display_selection_new_style.h index f4f73778..764ef7a7 100644 --- a/examples/GxEPD2_Example/GxEPD2_display_selection_new_style.h +++ b/examples/GxEPD2_Example/GxEPD2_display_selection_new_style.h @@ -58,7 +58,8 @@ //#define GxEPD2_DRIVER_CLASS GxEPD2_370_TC1 // ED037TC1 280x480, SSD1677, (ICA-FU-20 ichia 2029), Waveshare 3.7" //#define GxEPD2_DRIVER_CLASS GxEPD2_420 // GDEW042T2 400x300, UC8176 (IL0398), (WFT042CZ15) //#define GxEPD2_DRIVER_CLASS GxEPD2_420_M01 // GDEW042M01 400x300, UC8176 (IL0398), (WFT042CZ15) -//#define GxEPD2_DRIVER_CLASS GxEPD2_420_GDEY042T91 // GDEY042T91 400x300, SSD1683 (no inking) +//#define GxEPD2_DRIVER_CLASS GxEPD2_420_GDEY042T81 // GDEY042T81 400x300, SSD1683 (no inking) +//#define GxEPD2_DRIVER_CLASS GxEPD2_426_GDEQ0426T82 // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //#define GxEPD2_DRIVER_CLASS GxEPD2_583 // GDEW0583T7 600x448, UC8159c (IL0371), (missing) //#define GxEPD2_DRIVER_CLASS GxEPD2_583_T8 // GDEW0583T8 648x480, EK79655 (GD7965), (WFT0583CZ61) //#define GxEPD2_DRIVER_CLASS GxEPD2_583_GDEQ0583T31 // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -87,6 +88,10 @@ //#define GxEPD2_DRIVER_CLASS GxEPD2_750c_Z90 // GDEH075Z90 880x528, SSD1677, (HINK-E075A07-A0) //#define GxEPD2_DRIVER_CLASS GxEPD2_1248c // GDEY1248Z51 1304x984, UC8179, (WFT1248BZ23,WFT1248BZ24) // 4-color e-paper +//#define GxEPD2_DRIVER_CLASS GxEPD2_266c_GDEY0266F51H // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//#define GxEPD2_DRIVER_CLASS GxEPD2_290c_GDEY029F51H // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//#define GxEPD2_DRIVER_CLASS GxEPD2_300c // Waveshare 3.00" 4-color +//#define GxEPD2_DRIVER_CLASS GxEPD2_420c_GDEY0420F51 // GDEY0420F51 400x300, HX8717 (no inking) //#define GxEPD2_DRIVER_CLASS GxEPD2_437c // Waveshare 4.37" 4-color // 7-color e-paper //#define GxEPD2_DRIVER_CLASS GxEPD2_565c // Waveshare 5.65" 7-color @@ -207,6 +212,19 @@ GxEPD2_DISPLAY_CLASS displ //GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ 10, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); #endif +#if defined(ARDUINO_UNOR4_MINIMA) || defined(ARDUINO_UNOR4_WIFI) +#define MAX_DISPLAY_BUFFER_SIZE 16384ul // e.g. half of available RAM +#if IS_GxEPD2_BW(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8) ? EPD::HEIGHT : MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8)) +#elif IS_GxEPD2_3C(GxEPD2_DISPLAY_CLASS) || IS_GxEPD2_4C(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8)) +#elif IS_GxEPD2_7C(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2)) +#endif +// adapt the constructor parameters to your wiring +GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ EPD_CS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); +#endif + #if defined(ARDUINO_ARCH_SAM) #define MAX_DISPLAY_BUFFER_SIZE 32768ul // e.g., up to 96k #if IS_GxEPD2_BW(GxEPD2_DISPLAY_CLASS) @@ -259,6 +277,10 @@ GxEPD2_DISPLAY_CLASS displ GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ 3, /*DC=*/ 2, /*RST=*/ 1, /*BUSY=*/ 0)); // DESPI-PICO //GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ 3, /*DC=*/ 2, /*RST=*/ 11, /*BUSY=*/ 10)); // DESPI-PICO modified #endif +#if defined(ARDUINO_ADAFRUIT_FEATHER_RP2040_THINKINK) +// Adafruit Feather RP2040 ThinkInk used with package https://github.com/earlephilhower/arduino-pico +GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ PIN_EPD_CS, /*DC=*/ PIN_EPD_DC, /*RST=*/ PIN_EPD_RESET, /*BUSY=*/ PIN_EPD_BUSY)); +#endif #undef MAX_DISPLAY_BUFFER_SIZE #undef MAX_HEIGHT #endif diff --git a/examples/GxEPD2_Example/GxEPD2_selection_check.h b/examples/GxEPD2_Example/GxEPD2_selection_check.h index df552f0a..dba0e51c 100644 --- a/examples/GxEPD2_Example/GxEPD2_selection_check.h +++ b/examples/GxEPD2_Example/GxEPD2_selection_check.h @@ -49,7 +49,8 @@ #define GxEPD2_370_TC1_IS_BW true #define GxEPD2_420_IS_BW true #define GxEPD2_420_M01_IS_BW true -#define GxEPD2_420_GDEY042T91_IS_BW true +#define GxEPD2_420_GDEY042T81_IS_BW true +#define GxEPD2_426_GDEQ0426T82_IS_BW true #define GxEPD2_583_IS_BW true #define GxEPD2_583_T8_IS_BW true #define GxEPD2_583_GDEQ0583T31_IS_BW true @@ -82,6 +83,10 @@ #define GxEPD2_750c_Z90_IS_3C true #define GxEPD2_1248c_IS_3C true // 4-color e-paper +#define GxEPD2_266c_GDEY0266F51H_IS_4C true +#define GxEPD2_290c_GDEY029F51H_IS_4C true +#define GxEPD2_300c_IS_4C true +#define GxEPD2_420c_GDEY0420F51_IS_4C true #define GxEPD2_437c_IS_4C true // 7-color e-paper #define GxEPD2_565c_IS_7C true diff --git a/examples/GxEPD2_Example/GxEPD2_wiring_examples.h b/examples/GxEPD2_Example/GxEPD2_wiring_examples.h index 97ab8963..e91ce735 100644 --- a/examples/GxEPD2_Example/GxEPD2_wiring_examples.h +++ b/examples/GxEPD2_Example/GxEPD2_wiring_examples.h @@ -16,7 +16,7 @@ // mapping suggestion from Waveshare SPI e-Paper to Wemos D1 mini // BUSY -> D2, RST -> D4, DC -> D3, CS -> D8, CLK -> D5, DIN -> D7, GND -> GND, 3.3V -> 3.3V // NOTE: connect 3.3k pull-down from D8 to GND if your board or shield has level converters -// NOTE for ESP8266: using SS (GPIO15) for CS may cause boot mode problems, use different pin in case, or 4k7 pull-down +// NOTE for ESP8266: using SS (GPIO15) for CS may cause boot mode problems, use different pin in case, or 3.3k pull-down // NOTE: connect 1k pull-up from D4 (RST) to 3.3V if your board or shield has the "clever" reset circuit, or use a different pin // mapping suggestion from Waveshare SPI e-Paper to generic ESP8266 @@ -76,8 +76,11 @@ // note: can't use SS on MKR1000: is defined as 24, should be 4 // BUSY -> 5, RST -> 6, DC -> 7, CS-> 4, CLK -> 9, DIN -> 8 -// mapping suggestion for Arduino Nano RP2040 Connect +// mapping suggestion for Arduino Nano RP2040 Connect (Arduino MBED OS Nano Boards) // BUSY -> 7, RST -> 9, DC -> 8, CS-> 10, CLK -> 13, DIN -> 11 -// mapping suggestion for Raspberry Pi Pico RP2040 +// mapping suggestion for Raspberry Pi Pico RP2040 (Arduino MBED OS RP2040 Boards) +// BUSY -> 7, RST -> 9, DC -> 8, CS-> 5, CLK -> 18, DIN -> 19 + +// mapping of my proto board for Raspberry Pi Pico RP2040 (previous default SPI pins) // BUSY -> 7, RST -> 9, DC -> 8, CS-> 5, CLK -> 2, DIN -> 3 diff --git a/examples/GxEPD2_GFX_Example/GxEPD2_display_selection.h b/examples/GxEPD2_GFX_Example/GxEPD2_display_selection.h index 35a76de1..2f471c8a 100644 --- a/examples/GxEPD2_GFX_Example/GxEPD2_display_selection.h +++ b/examples/GxEPD2_GFX_Example/GxEPD2_display_selection.h @@ -50,7 +50,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) // can use only half buffer size //GxEPD2_BW < GxEPD2_583, GxEPD2_583::HEIGHT / 2 > display(GxEPD2_583(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW < GxEPD2_583_T8, GxEPD2_583_T8::HEIGHT / 2 > display(GxEPD2_583_T8(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEW0583T8 648x480, EK79655 (GD7965) @@ -80,6 +81,10 @@ //GxEPD2_3C < GxEPD2_750c_Z08, GxEPD2_750c_Z08::HEIGHT / 4 > display(GxEPD2_750c_Z08(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C < GxEPD2_750c_Z90, GxEPD2_750c_Z90::HEIGHT / 4 > display(GxEPD2_750c_Z90(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEY0420F51 400x300, HX8717 (no inking) //GxEPD2_4C < GxEPD2_437c, GxEPD2_437c::HEIGHT / 4 > display(GxEPD2_437c(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // Waveshare 4.37" 4-color // 7-color e-paper //GxEPD2_3C < GxEPD2_565c, GxEPD2_565c::HEIGHT / 4 > display(GxEPD2_565c(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // Waveshare 5.65" 7-color (3C graphics) @@ -129,7 +134,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) // can use only half buffer size //GxEPD2_BW < GxEPD2_583, GxEPD2_583::HEIGHT / 2 > display(GxEPD2_583(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW < GxEPD2_583_T8, GxEPD2_583_T8::HEIGHT / 2 > display(GxEPD2_583_T8(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // GDEW0583T8 648x480, EK79655 (GD7965) @@ -159,6 +165,10 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // GDEY0420F51 400x300, HX8717 (no inking) //GxEPD2_4C < GxEPD2_437c, GxEPD2_437c::HEIGHT / 4 > display(GxEPD2_437c(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // Waveshare 4.37" 4-color // 7-color e-paper //GxEPD2_7C < GxEPD2_565c, GxEPD2_565c::HEIGHT / 4 > display(GxEPD2_565c(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // Waveshare 5.65" 7-color @@ -202,7 +212,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //GxEPD2_BW display(GxEPD2_583(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW display(GxEPD2_583_T8(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEW0583T8 648x480, EK79655 (GD7965) //GxEPD2_BW display(GxEPD2_583_GDEQ0583T31(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -229,7 +240,11 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper -//GxEPD2_4C < GxEPD2_437c, GxEPD2_437c::HEIGHT / 4 > display(GxEPD2_437c(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // Waveshare 4.37" 4-color +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEY0420F51 400x300, HX8717 (no inking) +//GxEPD2_4C display(GxEPD2_437c(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // Waveshare 4.37" 4-color // 7-color e-paper //GxEPD2_3C < GxEPD2_565c, GxEPD2_565c::HEIGHT / 2 > display(GxEPD2_565c(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // Waveshare 5.65" 7-color (3C graphics) //GxEPD2_7C < GxEPD2_565c, GxEPD2_565c::HEIGHT / 2 > display(GxEPD2_565c(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // Waveshare 5.65" 7-color @@ -294,7 +309,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //GxEPD2_BW display(GxEPD2_583(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW display(GxEPD2_583_T8(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // GDEW0583T8 648x480, EK79655 (GD7965) //GxEPD2_BW display(GxEPD2_583_GDEQ0583T31(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -321,6 +337,10 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // GDEY0420F51 400x300, HX8717 (no inking) //GxEPD2_4C < GxEPD2_437c, GxEPD2_437c::HEIGHT / 4 > display(GxEPD2_437c(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // Waveshare 4.37" 4-color // 7-color e-paper //GxEPD2_3C < GxEPD2_565c, GxEPD2_565c::HEIGHT / 2 > display(GxEPD2_565c(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // Waveshare 5.65" 7-color (3C graphics) @@ -368,7 +388,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //GxEPD2_BW display(GxEPD2_583(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW display(GxEPD2_583_T8(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // GDEW0583T8 648x480, EK79655 (GD7965) //GxEPD2_BW display(GxEPD2_583_GDEQ0583T31(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -396,6 +417,10 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // GDEY0420F51 400x300, HX8717 (no inking) //GxEPD2_4C display(GxEPD2_437c(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // Waveshare 4.37" 4-color // 7-color e-paper #define MAX_HEIGHT_7C(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2)) // 2 pixel per byte @@ -450,7 +475,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //GxEPD2_BW display(GxEPD2_583(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW display(GxEPD2_583_T8(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0583T8 648x480, EK79655 (GD7965) //GxEPD2_BW display(GxEPD2_583_GDEQ0583T31(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -478,6 +504,10 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEY0420F51 400x300, HX8717 (no inking) //GxEPD2_4C display(GxEPD2_437c(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // Waveshare 4.37" 4-color // 7-color e-paper #define MAX_HEIGHT_7C(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2)) // 2 pixel per byte @@ -524,7 +554,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //GxEPD2_BW display(GxEPD2_583(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW display(GxEPD2_583_T8(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // GDEW0583T8 648x480, EK79655 (GD7965) //GxEPD2_BW display(GxEPD2_583_GDEQ0583T31(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -551,6 +582,10 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); //GDEH075Z90 880x528, SSD1677 // 4-color e-paper +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // GDEY0420F51 400x300, HX8717 (no inking) //GxEPD2_4C display(GxEPD2_437c(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // Waveshare 4.37" 4-color // 7-color e-paper //GxEPD2_7C display(GxEPD2_565c(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // Waveshare 5.65" 7-color diff --git a/examples/GxEPD2_GFX_Example/GxEPD2_display_selection_added.h b/examples/GxEPD2_GFX_Example/GxEPD2_display_selection_added.h index 301477b2..d3a14598 100644 --- a/examples/GxEPD2_GFX_Example/GxEPD2_display_selection_added.h +++ b/examples/GxEPD2_GFX_Example/GxEPD2_display_selection_added.h @@ -26,7 +26,7 @@ //GxEPD2_BW display(GxEPD2_150_BN(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // DEPG0150BN 200x200, SSD1681, TTGO T5 V2.4.1 //GxEPD2_BW display(GxEPD2_154(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEP015OC1 200x200, IL3829, no longer available //GxEPD2_BW display(GxEPD2_154_D67(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEH0154D67 200x200, SSD1681 -//GxEPD2_BW display(GxEPD2_154_T8(//*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0154T8 152x152, UC8151 (IL0373) +//GxEPD2_BW display(GxEPD2_154_T8(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0154T8 152x152, UC8151 (IL0373) //GxEPD2_BW display(GxEPD2_154_M09(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0154M09 200x200, JD79653A //GxEPD2_BW display(GxEPD2_154_M10(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0154M10 152x152, UC8151D //GxEPD2_BW display(GxEPD2_154_GDEY0154D67(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEY0154D67 200x200, SSD1681, (FPC-B001 20.05.21) @@ -57,7 +57,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //GxEPD2_BW display(GxEPD2_583(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW display(GxEPD2_583_T8(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0583T8 648x480, EK79655 (GD7965) //GxEPD2_BW display(GxEPD2_583_GDEQ0583T31(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -85,6 +86,10 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEY0420F51 400x300, HX8717 (no inking) //GxEPD2_4C display(GxEPD2_437c(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // Waveshare 4.37" 4-color // 7-color e-paper #define MAX_HEIGHT_7C(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2)) // 2 pixel per byte @@ -147,7 +152,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //GxEPD2_BW display(GxEPD2_583(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW display(GxEPD2_583_T8(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEW0583T8 648x480, EK79655 (GD7965) //GxEPD2_BW display(GxEPD2_583_GDEQ0583T31(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -175,7 +181,11 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper -//GxEPD2_4C display(GxEPD2_437c(//*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // Waveshare 4.37" 4-color +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEY0420F51 400x300, HX8717 (no inking) +//GxEPD2_4C display(GxEPD2_437c(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // Waveshare 4.37" 4-color // 7-color e-paper #define MAX_HEIGHT_7C(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2)) // 2 pixel per byte //GxEPD2_7C display(GxEPD2_565c(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // Waveshare 5.65" 7-color @@ -233,7 +243,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //GxEPD2_BW display(GxEPD2_583(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW display(GxEPD2_583_T8(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEW0583T8 648x480, EK79655 (GD7965) //GxEPD2_BW display(GxEPD2_583_GDEQ0583T31(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -260,6 +271,10 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEY0420F51 400x300, HX8717 (no inking) //GxEPD2_4C < GxEPD2_437c, GxEPD2_437c::HEIGHT / 4 > display(GxEPD2_437c(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // Waveshare 4.37" 4-color // 7-color e-paper //GxEPD2_7C < GxEPD2_565c, GxEPD2_565c::HEIGHT / 2 > display(GxEPD2_565c(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // Waveshare 5.65" 7-color @@ -313,7 +328,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //GxEPD2_BW display(GxEPD2_583(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW display(GxEPD2_583_T8(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEW0583T8 648x480, EK79655 (GD7965) //GxEPD2_BW display(GxEPD2_583_GDEQ0583T31(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -340,6 +356,10 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEY0420F51 400x300, HX8717 (no inking) //GxEPD2_4C < GxEPD2_437c, GxEPD2_437c::HEIGHT / 4 > display(GxEPD2_437c(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // Waveshare 4.37" 4-color // 7-color e-paper //GxEPD2_7C < GxEPD2_565c, GxEPD2_565c::HEIGHT / 2 > display(GxEPD2_565c(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // Waveshare 5.65" 7-color @@ -393,7 +413,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) // can use only half buffer size //GxEPD2_BW < GxEPD2_583, GxEPD2_583::HEIGHT / 2 > display(GxEPD2_583(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW < GxEPD2_583_T8, GxEPD2_583_T8::HEIGHT / 2 > display(GxEPD2_583_T8(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // GDEW0583T8 648x480, EK79655 (GD7965) @@ -423,6 +444,10 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // GDEY0420F51 400x300, HX8717 (no inking) //GxEPD2_4C < GxEPD2_437c, GxEPD2_437c::HEIGHT / 4 > display(GxEPD2_437c(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // Waveshare 4.37" 4-color // 7-color e-paper //GxEPD2_7C < GxEPD2_565c, GxEPD2_565c::HEIGHT / 4 > display(GxEPD2_565c(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // Waveshare 5.65" 7-color @@ -468,7 +493,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //GxEPD2_BW display(GxEPD2_583(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW display(GxEPD2_583_T8(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0583T8 648x480, EK79655 (GD7965) //GxEPD2_BW display(GxEPD2_583_GDEQ0583T31(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -496,6 +522,10 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEY0420F51 400x300, HX8717 (no inking) //GxEPD2_4C display(GxEPD2_437c(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // Waveshare 4.37" 4-color // 7-color e-paper #define MAX_HEIGHT_7C(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2)) // 2 pixel per byte diff --git a/examples/GxEPD2_GFX_Example/GxEPD2_display_selection_new_style.h b/examples/GxEPD2_GFX_Example/GxEPD2_display_selection_new_style.h index f4f73778..764ef7a7 100644 --- a/examples/GxEPD2_GFX_Example/GxEPD2_display_selection_new_style.h +++ b/examples/GxEPD2_GFX_Example/GxEPD2_display_selection_new_style.h @@ -58,7 +58,8 @@ //#define GxEPD2_DRIVER_CLASS GxEPD2_370_TC1 // ED037TC1 280x480, SSD1677, (ICA-FU-20 ichia 2029), Waveshare 3.7" //#define GxEPD2_DRIVER_CLASS GxEPD2_420 // GDEW042T2 400x300, UC8176 (IL0398), (WFT042CZ15) //#define GxEPD2_DRIVER_CLASS GxEPD2_420_M01 // GDEW042M01 400x300, UC8176 (IL0398), (WFT042CZ15) -//#define GxEPD2_DRIVER_CLASS GxEPD2_420_GDEY042T91 // GDEY042T91 400x300, SSD1683 (no inking) +//#define GxEPD2_DRIVER_CLASS GxEPD2_420_GDEY042T81 // GDEY042T81 400x300, SSD1683 (no inking) +//#define GxEPD2_DRIVER_CLASS GxEPD2_426_GDEQ0426T82 // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //#define GxEPD2_DRIVER_CLASS GxEPD2_583 // GDEW0583T7 600x448, UC8159c (IL0371), (missing) //#define GxEPD2_DRIVER_CLASS GxEPD2_583_T8 // GDEW0583T8 648x480, EK79655 (GD7965), (WFT0583CZ61) //#define GxEPD2_DRIVER_CLASS GxEPD2_583_GDEQ0583T31 // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -87,6 +88,10 @@ //#define GxEPD2_DRIVER_CLASS GxEPD2_750c_Z90 // GDEH075Z90 880x528, SSD1677, (HINK-E075A07-A0) //#define GxEPD2_DRIVER_CLASS GxEPD2_1248c // GDEY1248Z51 1304x984, UC8179, (WFT1248BZ23,WFT1248BZ24) // 4-color e-paper +//#define GxEPD2_DRIVER_CLASS GxEPD2_266c_GDEY0266F51H // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//#define GxEPD2_DRIVER_CLASS GxEPD2_290c_GDEY029F51H // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//#define GxEPD2_DRIVER_CLASS GxEPD2_300c // Waveshare 3.00" 4-color +//#define GxEPD2_DRIVER_CLASS GxEPD2_420c_GDEY0420F51 // GDEY0420F51 400x300, HX8717 (no inking) //#define GxEPD2_DRIVER_CLASS GxEPD2_437c // Waveshare 4.37" 4-color // 7-color e-paper //#define GxEPD2_DRIVER_CLASS GxEPD2_565c // Waveshare 5.65" 7-color @@ -207,6 +212,19 @@ GxEPD2_DISPLAY_CLASS displ //GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ 10, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); #endif +#if defined(ARDUINO_UNOR4_MINIMA) || defined(ARDUINO_UNOR4_WIFI) +#define MAX_DISPLAY_BUFFER_SIZE 16384ul // e.g. half of available RAM +#if IS_GxEPD2_BW(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8) ? EPD::HEIGHT : MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8)) +#elif IS_GxEPD2_3C(GxEPD2_DISPLAY_CLASS) || IS_GxEPD2_4C(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8)) +#elif IS_GxEPD2_7C(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2)) +#endif +// adapt the constructor parameters to your wiring +GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ EPD_CS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); +#endif + #if defined(ARDUINO_ARCH_SAM) #define MAX_DISPLAY_BUFFER_SIZE 32768ul // e.g., up to 96k #if IS_GxEPD2_BW(GxEPD2_DISPLAY_CLASS) @@ -259,6 +277,10 @@ GxEPD2_DISPLAY_CLASS displ GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ 3, /*DC=*/ 2, /*RST=*/ 1, /*BUSY=*/ 0)); // DESPI-PICO //GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ 3, /*DC=*/ 2, /*RST=*/ 11, /*BUSY=*/ 10)); // DESPI-PICO modified #endif +#if defined(ARDUINO_ADAFRUIT_FEATHER_RP2040_THINKINK) +// Adafruit Feather RP2040 ThinkInk used with package https://github.com/earlephilhower/arduino-pico +GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ PIN_EPD_CS, /*DC=*/ PIN_EPD_DC, /*RST=*/ PIN_EPD_RESET, /*BUSY=*/ PIN_EPD_BUSY)); +#endif #undef MAX_DISPLAY_BUFFER_SIZE #undef MAX_HEIGHT #endif diff --git a/examples/GxEPD2_GFX_Example/GxEPD2_selection_check.h b/examples/GxEPD2_GFX_Example/GxEPD2_selection_check.h index df552f0a..dba0e51c 100644 --- a/examples/GxEPD2_GFX_Example/GxEPD2_selection_check.h +++ b/examples/GxEPD2_GFX_Example/GxEPD2_selection_check.h @@ -49,7 +49,8 @@ #define GxEPD2_370_TC1_IS_BW true #define GxEPD2_420_IS_BW true #define GxEPD2_420_M01_IS_BW true -#define GxEPD2_420_GDEY042T91_IS_BW true +#define GxEPD2_420_GDEY042T81_IS_BW true +#define GxEPD2_426_GDEQ0426T82_IS_BW true #define GxEPD2_583_IS_BW true #define GxEPD2_583_T8_IS_BW true #define GxEPD2_583_GDEQ0583T31_IS_BW true @@ -82,6 +83,10 @@ #define GxEPD2_750c_Z90_IS_3C true #define GxEPD2_1248c_IS_3C true // 4-color e-paper +#define GxEPD2_266c_GDEY0266F51H_IS_4C true +#define GxEPD2_290c_GDEY029F51H_IS_4C true +#define GxEPD2_300c_IS_4C true +#define GxEPD2_420c_GDEY0420F51_IS_4C true #define GxEPD2_437c_IS_4C true // 7-color e-paper #define GxEPD2_565c_IS_7C true diff --git a/examples/GxEPD2_GFX_Example/GxEPD2_wiring_examples.h b/examples/GxEPD2_GFX_Example/GxEPD2_wiring_examples.h index 97ab8963..e91ce735 100644 --- a/examples/GxEPD2_GFX_Example/GxEPD2_wiring_examples.h +++ b/examples/GxEPD2_GFX_Example/GxEPD2_wiring_examples.h @@ -16,7 +16,7 @@ // mapping suggestion from Waveshare SPI e-Paper to Wemos D1 mini // BUSY -> D2, RST -> D4, DC -> D3, CS -> D8, CLK -> D5, DIN -> D7, GND -> GND, 3.3V -> 3.3V // NOTE: connect 3.3k pull-down from D8 to GND if your board or shield has level converters -// NOTE for ESP8266: using SS (GPIO15) for CS may cause boot mode problems, use different pin in case, or 4k7 pull-down +// NOTE for ESP8266: using SS (GPIO15) for CS may cause boot mode problems, use different pin in case, or 3.3k pull-down // NOTE: connect 1k pull-up from D4 (RST) to 3.3V if your board or shield has the "clever" reset circuit, or use a different pin // mapping suggestion from Waveshare SPI e-Paper to generic ESP8266 @@ -76,8 +76,11 @@ // note: can't use SS on MKR1000: is defined as 24, should be 4 // BUSY -> 5, RST -> 6, DC -> 7, CS-> 4, CLK -> 9, DIN -> 8 -// mapping suggestion for Arduino Nano RP2040 Connect +// mapping suggestion for Arduino Nano RP2040 Connect (Arduino MBED OS Nano Boards) // BUSY -> 7, RST -> 9, DC -> 8, CS-> 10, CLK -> 13, DIN -> 11 -// mapping suggestion for Raspberry Pi Pico RP2040 +// mapping suggestion for Raspberry Pi Pico RP2040 (Arduino MBED OS RP2040 Boards) +// BUSY -> 7, RST -> 9, DC -> 8, CS-> 5, CLK -> 18, DIN -> 19 + +// mapping of my proto board for Raspberry Pi Pico RP2040 (previous default SPI pins) // BUSY -> 7, RST -> 9, DC -> 8, CS-> 5, CLK -> 2, DIN -> 3 diff --git a/examples/GxEPD2_HelloWorld/GxEPD2_display_selection.h b/examples/GxEPD2_HelloWorld/GxEPD2_display_selection.h index 35a76de1..2f471c8a 100644 --- a/examples/GxEPD2_HelloWorld/GxEPD2_display_selection.h +++ b/examples/GxEPD2_HelloWorld/GxEPD2_display_selection.h @@ -50,7 +50,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) // can use only half buffer size //GxEPD2_BW < GxEPD2_583, GxEPD2_583::HEIGHT / 2 > display(GxEPD2_583(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW < GxEPD2_583_T8, GxEPD2_583_T8::HEIGHT / 2 > display(GxEPD2_583_T8(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEW0583T8 648x480, EK79655 (GD7965) @@ -80,6 +81,10 @@ //GxEPD2_3C < GxEPD2_750c_Z08, GxEPD2_750c_Z08::HEIGHT / 4 > display(GxEPD2_750c_Z08(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C < GxEPD2_750c_Z90, GxEPD2_750c_Z90::HEIGHT / 4 > display(GxEPD2_750c_Z90(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEY0420F51 400x300, HX8717 (no inking) //GxEPD2_4C < GxEPD2_437c, GxEPD2_437c::HEIGHT / 4 > display(GxEPD2_437c(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // Waveshare 4.37" 4-color // 7-color e-paper //GxEPD2_3C < GxEPD2_565c, GxEPD2_565c::HEIGHT / 4 > display(GxEPD2_565c(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // Waveshare 5.65" 7-color (3C graphics) @@ -129,7 +134,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) // can use only half buffer size //GxEPD2_BW < GxEPD2_583, GxEPD2_583::HEIGHT / 2 > display(GxEPD2_583(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW < GxEPD2_583_T8, GxEPD2_583_T8::HEIGHT / 2 > display(GxEPD2_583_T8(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // GDEW0583T8 648x480, EK79655 (GD7965) @@ -159,6 +165,10 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // GDEY0420F51 400x300, HX8717 (no inking) //GxEPD2_4C < GxEPD2_437c, GxEPD2_437c::HEIGHT / 4 > display(GxEPD2_437c(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // Waveshare 4.37" 4-color // 7-color e-paper //GxEPD2_7C < GxEPD2_565c, GxEPD2_565c::HEIGHT / 4 > display(GxEPD2_565c(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // Waveshare 5.65" 7-color @@ -202,7 +212,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //GxEPD2_BW display(GxEPD2_583(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW display(GxEPD2_583_T8(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEW0583T8 648x480, EK79655 (GD7965) //GxEPD2_BW display(GxEPD2_583_GDEQ0583T31(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -229,7 +240,11 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper -//GxEPD2_4C < GxEPD2_437c, GxEPD2_437c::HEIGHT / 4 > display(GxEPD2_437c(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // Waveshare 4.37" 4-color +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEY0420F51 400x300, HX8717 (no inking) +//GxEPD2_4C display(GxEPD2_437c(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // Waveshare 4.37" 4-color // 7-color e-paper //GxEPD2_3C < GxEPD2_565c, GxEPD2_565c::HEIGHT / 2 > display(GxEPD2_565c(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // Waveshare 5.65" 7-color (3C graphics) //GxEPD2_7C < GxEPD2_565c, GxEPD2_565c::HEIGHT / 2 > display(GxEPD2_565c(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // Waveshare 5.65" 7-color @@ -294,7 +309,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //GxEPD2_BW display(GxEPD2_583(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW display(GxEPD2_583_T8(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // GDEW0583T8 648x480, EK79655 (GD7965) //GxEPD2_BW display(GxEPD2_583_GDEQ0583T31(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -321,6 +337,10 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // GDEY0420F51 400x300, HX8717 (no inking) //GxEPD2_4C < GxEPD2_437c, GxEPD2_437c::HEIGHT / 4 > display(GxEPD2_437c(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // Waveshare 4.37" 4-color // 7-color e-paper //GxEPD2_3C < GxEPD2_565c, GxEPD2_565c::HEIGHT / 2 > display(GxEPD2_565c(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // Waveshare 5.65" 7-color (3C graphics) @@ -368,7 +388,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //GxEPD2_BW display(GxEPD2_583(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW display(GxEPD2_583_T8(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // GDEW0583T8 648x480, EK79655 (GD7965) //GxEPD2_BW display(GxEPD2_583_GDEQ0583T31(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -396,6 +417,10 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // GDEY0420F51 400x300, HX8717 (no inking) //GxEPD2_4C display(GxEPD2_437c(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // Waveshare 4.37" 4-color // 7-color e-paper #define MAX_HEIGHT_7C(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2)) // 2 pixel per byte @@ -450,7 +475,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //GxEPD2_BW display(GxEPD2_583(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW display(GxEPD2_583_T8(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0583T8 648x480, EK79655 (GD7965) //GxEPD2_BW display(GxEPD2_583_GDEQ0583T31(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -478,6 +504,10 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEY0420F51 400x300, HX8717 (no inking) //GxEPD2_4C display(GxEPD2_437c(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // Waveshare 4.37" 4-color // 7-color e-paper #define MAX_HEIGHT_7C(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2)) // 2 pixel per byte @@ -524,7 +554,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //GxEPD2_BW display(GxEPD2_583(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW display(GxEPD2_583_T8(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // GDEW0583T8 648x480, EK79655 (GD7965) //GxEPD2_BW display(GxEPD2_583_GDEQ0583T31(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -551,6 +582,10 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); //GDEH075Z90 880x528, SSD1677 // 4-color e-paper +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // GDEY0420F51 400x300, HX8717 (no inking) //GxEPD2_4C display(GxEPD2_437c(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // Waveshare 4.37" 4-color // 7-color e-paper //GxEPD2_7C display(GxEPD2_565c(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // Waveshare 5.65" 7-color diff --git a/examples/GxEPD2_HelloWorld/GxEPD2_display_selection_added.h b/examples/GxEPD2_HelloWorld/GxEPD2_display_selection_added.h index 301477b2..d3a14598 100644 --- a/examples/GxEPD2_HelloWorld/GxEPD2_display_selection_added.h +++ b/examples/GxEPD2_HelloWorld/GxEPD2_display_selection_added.h @@ -26,7 +26,7 @@ //GxEPD2_BW display(GxEPD2_150_BN(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // DEPG0150BN 200x200, SSD1681, TTGO T5 V2.4.1 //GxEPD2_BW display(GxEPD2_154(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEP015OC1 200x200, IL3829, no longer available //GxEPD2_BW display(GxEPD2_154_D67(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEH0154D67 200x200, SSD1681 -//GxEPD2_BW display(GxEPD2_154_T8(//*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0154T8 152x152, UC8151 (IL0373) +//GxEPD2_BW display(GxEPD2_154_T8(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0154T8 152x152, UC8151 (IL0373) //GxEPD2_BW display(GxEPD2_154_M09(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0154M09 200x200, JD79653A //GxEPD2_BW display(GxEPD2_154_M10(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0154M10 152x152, UC8151D //GxEPD2_BW display(GxEPD2_154_GDEY0154D67(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEY0154D67 200x200, SSD1681, (FPC-B001 20.05.21) @@ -57,7 +57,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //GxEPD2_BW display(GxEPD2_583(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW display(GxEPD2_583_T8(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0583T8 648x480, EK79655 (GD7965) //GxEPD2_BW display(GxEPD2_583_GDEQ0583T31(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -85,6 +86,10 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEY0420F51 400x300, HX8717 (no inking) //GxEPD2_4C display(GxEPD2_437c(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // Waveshare 4.37" 4-color // 7-color e-paper #define MAX_HEIGHT_7C(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2)) // 2 pixel per byte @@ -147,7 +152,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //GxEPD2_BW display(GxEPD2_583(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW display(GxEPD2_583_T8(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEW0583T8 648x480, EK79655 (GD7965) //GxEPD2_BW display(GxEPD2_583_GDEQ0583T31(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -175,7 +181,11 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper -//GxEPD2_4C display(GxEPD2_437c(//*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // Waveshare 4.37" 4-color +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEY0420F51 400x300, HX8717 (no inking) +//GxEPD2_4C display(GxEPD2_437c(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // Waveshare 4.37" 4-color // 7-color e-paper #define MAX_HEIGHT_7C(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2)) // 2 pixel per byte //GxEPD2_7C display(GxEPD2_565c(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // Waveshare 5.65" 7-color @@ -233,7 +243,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //GxEPD2_BW display(GxEPD2_583(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW display(GxEPD2_583_T8(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEW0583T8 648x480, EK79655 (GD7965) //GxEPD2_BW display(GxEPD2_583_GDEQ0583T31(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -260,6 +271,10 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEY0420F51 400x300, HX8717 (no inking) //GxEPD2_4C < GxEPD2_437c, GxEPD2_437c::HEIGHT / 4 > display(GxEPD2_437c(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // Waveshare 4.37" 4-color // 7-color e-paper //GxEPD2_7C < GxEPD2_565c, GxEPD2_565c::HEIGHT / 2 > display(GxEPD2_565c(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // Waveshare 5.65" 7-color @@ -313,7 +328,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //GxEPD2_BW display(GxEPD2_583(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW display(GxEPD2_583_T8(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEW0583T8 648x480, EK79655 (GD7965) //GxEPD2_BW display(GxEPD2_583_GDEQ0583T31(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -340,6 +356,10 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEY0420F51 400x300, HX8717 (no inking) //GxEPD2_4C < GxEPD2_437c, GxEPD2_437c::HEIGHT / 4 > display(GxEPD2_437c(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // Waveshare 4.37" 4-color // 7-color e-paper //GxEPD2_7C < GxEPD2_565c, GxEPD2_565c::HEIGHT / 2 > display(GxEPD2_565c(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // Waveshare 5.65" 7-color @@ -393,7 +413,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) // can use only half buffer size //GxEPD2_BW < GxEPD2_583, GxEPD2_583::HEIGHT / 2 > display(GxEPD2_583(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW < GxEPD2_583_T8, GxEPD2_583_T8::HEIGHT / 2 > display(GxEPD2_583_T8(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // GDEW0583T8 648x480, EK79655 (GD7965) @@ -423,6 +444,10 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // GDEY0420F51 400x300, HX8717 (no inking) //GxEPD2_4C < GxEPD2_437c, GxEPD2_437c::HEIGHT / 4 > display(GxEPD2_437c(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // Waveshare 4.37" 4-color // 7-color e-paper //GxEPD2_7C < GxEPD2_565c, GxEPD2_565c::HEIGHT / 4 > display(GxEPD2_565c(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // Waveshare 5.65" 7-color @@ -468,7 +493,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //GxEPD2_BW display(GxEPD2_583(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW display(GxEPD2_583_T8(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0583T8 648x480, EK79655 (GD7965) //GxEPD2_BW display(GxEPD2_583_GDEQ0583T31(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -496,6 +522,10 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEY0420F51 400x300, HX8717 (no inking) //GxEPD2_4C display(GxEPD2_437c(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // Waveshare 4.37" 4-color // 7-color e-paper #define MAX_HEIGHT_7C(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2)) // 2 pixel per byte diff --git a/examples/GxEPD2_HelloWorld/GxEPD2_display_selection_new_style.h b/examples/GxEPD2_HelloWorld/GxEPD2_display_selection_new_style.h index f4f73778..764ef7a7 100644 --- a/examples/GxEPD2_HelloWorld/GxEPD2_display_selection_new_style.h +++ b/examples/GxEPD2_HelloWorld/GxEPD2_display_selection_new_style.h @@ -58,7 +58,8 @@ //#define GxEPD2_DRIVER_CLASS GxEPD2_370_TC1 // ED037TC1 280x480, SSD1677, (ICA-FU-20 ichia 2029), Waveshare 3.7" //#define GxEPD2_DRIVER_CLASS GxEPD2_420 // GDEW042T2 400x300, UC8176 (IL0398), (WFT042CZ15) //#define GxEPD2_DRIVER_CLASS GxEPD2_420_M01 // GDEW042M01 400x300, UC8176 (IL0398), (WFT042CZ15) -//#define GxEPD2_DRIVER_CLASS GxEPD2_420_GDEY042T91 // GDEY042T91 400x300, SSD1683 (no inking) +//#define GxEPD2_DRIVER_CLASS GxEPD2_420_GDEY042T81 // GDEY042T81 400x300, SSD1683 (no inking) +//#define GxEPD2_DRIVER_CLASS GxEPD2_426_GDEQ0426T82 // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //#define GxEPD2_DRIVER_CLASS GxEPD2_583 // GDEW0583T7 600x448, UC8159c (IL0371), (missing) //#define GxEPD2_DRIVER_CLASS GxEPD2_583_T8 // GDEW0583T8 648x480, EK79655 (GD7965), (WFT0583CZ61) //#define GxEPD2_DRIVER_CLASS GxEPD2_583_GDEQ0583T31 // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -87,6 +88,10 @@ //#define GxEPD2_DRIVER_CLASS GxEPD2_750c_Z90 // GDEH075Z90 880x528, SSD1677, (HINK-E075A07-A0) //#define GxEPD2_DRIVER_CLASS GxEPD2_1248c // GDEY1248Z51 1304x984, UC8179, (WFT1248BZ23,WFT1248BZ24) // 4-color e-paper +//#define GxEPD2_DRIVER_CLASS GxEPD2_266c_GDEY0266F51H // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//#define GxEPD2_DRIVER_CLASS GxEPD2_290c_GDEY029F51H // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//#define GxEPD2_DRIVER_CLASS GxEPD2_300c // Waveshare 3.00" 4-color +//#define GxEPD2_DRIVER_CLASS GxEPD2_420c_GDEY0420F51 // GDEY0420F51 400x300, HX8717 (no inking) //#define GxEPD2_DRIVER_CLASS GxEPD2_437c // Waveshare 4.37" 4-color // 7-color e-paper //#define GxEPD2_DRIVER_CLASS GxEPD2_565c // Waveshare 5.65" 7-color @@ -207,6 +212,19 @@ GxEPD2_DISPLAY_CLASS displ //GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ 10, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); #endif +#if defined(ARDUINO_UNOR4_MINIMA) || defined(ARDUINO_UNOR4_WIFI) +#define MAX_DISPLAY_BUFFER_SIZE 16384ul // e.g. half of available RAM +#if IS_GxEPD2_BW(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8) ? EPD::HEIGHT : MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8)) +#elif IS_GxEPD2_3C(GxEPD2_DISPLAY_CLASS) || IS_GxEPD2_4C(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8)) +#elif IS_GxEPD2_7C(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2)) +#endif +// adapt the constructor parameters to your wiring +GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ EPD_CS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); +#endif + #if defined(ARDUINO_ARCH_SAM) #define MAX_DISPLAY_BUFFER_SIZE 32768ul // e.g., up to 96k #if IS_GxEPD2_BW(GxEPD2_DISPLAY_CLASS) @@ -259,6 +277,10 @@ GxEPD2_DISPLAY_CLASS displ GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ 3, /*DC=*/ 2, /*RST=*/ 1, /*BUSY=*/ 0)); // DESPI-PICO //GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ 3, /*DC=*/ 2, /*RST=*/ 11, /*BUSY=*/ 10)); // DESPI-PICO modified #endif +#if defined(ARDUINO_ADAFRUIT_FEATHER_RP2040_THINKINK) +// Adafruit Feather RP2040 ThinkInk used with package https://github.com/earlephilhower/arduino-pico +GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ PIN_EPD_CS, /*DC=*/ PIN_EPD_DC, /*RST=*/ PIN_EPD_RESET, /*BUSY=*/ PIN_EPD_BUSY)); +#endif #undef MAX_DISPLAY_BUFFER_SIZE #undef MAX_HEIGHT #endif diff --git a/examples/GxEPD2_HelloWorld/GxEPD2_selection_check.h b/examples/GxEPD2_HelloWorld/GxEPD2_selection_check.h index df552f0a..dba0e51c 100644 --- a/examples/GxEPD2_HelloWorld/GxEPD2_selection_check.h +++ b/examples/GxEPD2_HelloWorld/GxEPD2_selection_check.h @@ -49,7 +49,8 @@ #define GxEPD2_370_TC1_IS_BW true #define GxEPD2_420_IS_BW true #define GxEPD2_420_M01_IS_BW true -#define GxEPD2_420_GDEY042T91_IS_BW true +#define GxEPD2_420_GDEY042T81_IS_BW true +#define GxEPD2_426_GDEQ0426T82_IS_BW true #define GxEPD2_583_IS_BW true #define GxEPD2_583_T8_IS_BW true #define GxEPD2_583_GDEQ0583T31_IS_BW true @@ -82,6 +83,10 @@ #define GxEPD2_750c_Z90_IS_3C true #define GxEPD2_1248c_IS_3C true // 4-color e-paper +#define GxEPD2_266c_GDEY0266F51H_IS_4C true +#define GxEPD2_290c_GDEY029F51H_IS_4C true +#define GxEPD2_300c_IS_4C true +#define GxEPD2_420c_GDEY0420F51_IS_4C true #define GxEPD2_437c_IS_4C true // 7-color e-paper #define GxEPD2_565c_IS_7C true diff --git a/examples/GxEPD2_HelloWorld/GxEPD2_wiring_examples.h b/examples/GxEPD2_HelloWorld/GxEPD2_wiring_examples.h index 97ab8963..e91ce735 100644 --- a/examples/GxEPD2_HelloWorld/GxEPD2_wiring_examples.h +++ b/examples/GxEPD2_HelloWorld/GxEPD2_wiring_examples.h @@ -16,7 +16,7 @@ // mapping suggestion from Waveshare SPI e-Paper to Wemos D1 mini // BUSY -> D2, RST -> D4, DC -> D3, CS -> D8, CLK -> D5, DIN -> D7, GND -> GND, 3.3V -> 3.3V // NOTE: connect 3.3k pull-down from D8 to GND if your board or shield has level converters -// NOTE for ESP8266: using SS (GPIO15) for CS may cause boot mode problems, use different pin in case, or 4k7 pull-down +// NOTE for ESP8266: using SS (GPIO15) for CS may cause boot mode problems, use different pin in case, or 3.3k pull-down // NOTE: connect 1k pull-up from D4 (RST) to 3.3V if your board or shield has the "clever" reset circuit, or use a different pin // mapping suggestion from Waveshare SPI e-Paper to generic ESP8266 @@ -76,8 +76,11 @@ // note: can't use SS on MKR1000: is defined as 24, should be 4 // BUSY -> 5, RST -> 6, DC -> 7, CS-> 4, CLK -> 9, DIN -> 8 -// mapping suggestion for Arduino Nano RP2040 Connect +// mapping suggestion for Arduino Nano RP2040 Connect (Arduino MBED OS Nano Boards) // BUSY -> 7, RST -> 9, DC -> 8, CS-> 10, CLK -> 13, DIN -> 11 -// mapping suggestion for Raspberry Pi Pico RP2040 +// mapping suggestion for Raspberry Pi Pico RP2040 (Arduino MBED OS RP2040 Boards) +// BUSY -> 7, RST -> 9, DC -> 8, CS-> 5, CLK -> 18, DIN -> 19 + +// mapping of my proto board for Raspberry Pi Pico RP2040 (previous default SPI pins) // BUSY -> 7, RST -> 9, DC -> 8, CS-> 5, CLK -> 2, DIN -> 3 diff --git a/examples/GxEPD2_NotPagedExample/GxEPD2_display_selection_new_style.h b/examples/GxEPD2_NotPagedExample/GxEPD2_display_selection_new_style.h index f4f73778..764ef7a7 100644 --- a/examples/GxEPD2_NotPagedExample/GxEPD2_display_selection_new_style.h +++ b/examples/GxEPD2_NotPagedExample/GxEPD2_display_selection_new_style.h @@ -58,7 +58,8 @@ //#define GxEPD2_DRIVER_CLASS GxEPD2_370_TC1 // ED037TC1 280x480, SSD1677, (ICA-FU-20 ichia 2029), Waveshare 3.7" //#define GxEPD2_DRIVER_CLASS GxEPD2_420 // GDEW042T2 400x300, UC8176 (IL0398), (WFT042CZ15) //#define GxEPD2_DRIVER_CLASS GxEPD2_420_M01 // GDEW042M01 400x300, UC8176 (IL0398), (WFT042CZ15) -//#define GxEPD2_DRIVER_CLASS GxEPD2_420_GDEY042T91 // GDEY042T91 400x300, SSD1683 (no inking) +//#define GxEPD2_DRIVER_CLASS GxEPD2_420_GDEY042T81 // GDEY042T81 400x300, SSD1683 (no inking) +//#define GxEPD2_DRIVER_CLASS GxEPD2_426_GDEQ0426T82 // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //#define GxEPD2_DRIVER_CLASS GxEPD2_583 // GDEW0583T7 600x448, UC8159c (IL0371), (missing) //#define GxEPD2_DRIVER_CLASS GxEPD2_583_T8 // GDEW0583T8 648x480, EK79655 (GD7965), (WFT0583CZ61) //#define GxEPD2_DRIVER_CLASS GxEPD2_583_GDEQ0583T31 // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -87,6 +88,10 @@ //#define GxEPD2_DRIVER_CLASS GxEPD2_750c_Z90 // GDEH075Z90 880x528, SSD1677, (HINK-E075A07-A0) //#define GxEPD2_DRIVER_CLASS GxEPD2_1248c // GDEY1248Z51 1304x984, UC8179, (WFT1248BZ23,WFT1248BZ24) // 4-color e-paper +//#define GxEPD2_DRIVER_CLASS GxEPD2_266c_GDEY0266F51H // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//#define GxEPD2_DRIVER_CLASS GxEPD2_290c_GDEY029F51H // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//#define GxEPD2_DRIVER_CLASS GxEPD2_300c // Waveshare 3.00" 4-color +//#define GxEPD2_DRIVER_CLASS GxEPD2_420c_GDEY0420F51 // GDEY0420F51 400x300, HX8717 (no inking) //#define GxEPD2_DRIVER_CLASS GxEPD2_437c // Waveshare 4.37" 4-color // 7-color e-paper //#define GxEPD2_DRIVER_CLASS GxEPD2_565c // Waveshare 5.65" 7-color @@ -207,6 +212,19 @@ GxEPD2_DISPLAY_CLASS displ //GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ 10, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); #endif +#if defined(ARDUINO_UNOR4_MINIMA) || defined(ARDUINO_UNOR4_WIFI) +#define MAX_DISPLAY_BUFFER_SIZE 16384ul // e.g. half of available RAM +#if IS_GxEPD2_BW(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8) ? EPD::HEIGHT : MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8)) +#elif IS_GxEPD2_3C(GxEPD2_DISPLAY_CLASS) || IS_GxEPD2_4C(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8)) +#elif IS_GxEPD2_7C(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2)) +#endif +// adapt the constructor parameters to your wiring +GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ EPD_CS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); +#endif + #if defined(ARDUINO_ARCH_SAM) #define MAX_DISPLAY_BUFFER_SIZE 32768ul // e.g., up to 96k #if IS_GxEPD2_BW(GxEPD2_DISPLAY_CLASS) @@ -259,6 +277,10 @@ GxEPD2_DISPLAY_CLASS displ GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ 3, /*DC=*/ 2, /*RST=*/ 1, /*BUSY=*/ 0)); // DESPI-PICO //GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ 3, /*DC=*/ 2, /*RST=*/ 11, /*BUSY=*/ 10)); // DESPI-PICO modified #endif +#if defined(ARDUINO_ADAFRUIT_FEATHER_RP2040_THINKINK) +// Adafruit Feather RP2040 ThinkInk used with package https://github.com/earlephilhower/arduino-pico +GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ PIN_EPD_CS, /*DC=*/ PIN_EPD_DC, /*RST=*/ PIN_EPD_RESET, /*BUSY=*/ PIN_EPD_BUSY)); +#endif #undef MAX_DISPLAY_BUFFER_SIZE #undef MAX_HEIGHT #endif diff --git a/examples/GxEPD2_NotPagedExample/GxEPD2_selection_check.h b/examples/GxEPD2_NotPagedExample/GxEPD2_selection_check.h index df552f0a..dba0e51c 100644 --- a/examples/GxEPD2_NotPagedExample/GxEPD2_selection_check.h +++ b/examples/GxEPD2_NotPagedExample/GxEPD2_selection_check.h @@ -49,7 +49,8 @@ #define GxEPD2_370_TC1_IS_BW true #define GxEPD2_420_IS_BW true #define GxEPD2_420_M01_IS_BW true -#define GxEPD2_420_GDEY042T91_IS_BW true +#define GxEPD2_420_GDEY042T81_IS_BW true +#define GxEPD2_426_GDEQ0426T82_IS_BW true #define GxEPD2_583_IS_BW true #define GxEPD2_583_T8_IS_BW true #define GxEPD2_583_GDEQ0583T31_IS_BW true @@ -82,6 +83,10 @@ #define GxEPD2_750c_Z90_IS_3C true #define GxEPD2_1248c_IS_3C true // 4-color e-paper +#define GxEPD2_266c_GDEY0266F51H_IS_4C true +#define GxEPD2_290c_GDEY029F51H_IS_4C true +#define GxEPD2_300c_IS_4C true +#define GxEPD2_420c_GDEY0420F51_IS_4C true #define GxEPD2_437c_IS_4C true // 7-color e-paper #define GxEPD2_565c_IS_7C true diff --git a/examples/GxEPD2_NotPagedExample/GxEPD2_wiring_examples.h b/examples/GxEPD2_NotPagedExample/GxEPD2_wiring_examples.h index 97ab8963..e91ce735 100644 --- a/examples/GxEPD2_NotPagedExample/GxEPD2_wiring_examples.h +++ b/examples/GxEPD2_NotPagedExample/GxEPD2_wiring_examples.h @@ -16,7 +16,7 @@ // mapping suggestion from Waveshare SPI e-Paper to Wemos D1 mini // BUSY -> D2, RST -> D4, DC -> D3, CS -> D8, CLK -> D5, DIN -> D7, GND -> GND, 3.3V -> 3.3V // NOTE: connect 3.3k pull-down from D8 to GND if your board or shield has level converters -// NOTE for ESP8266: using SS (GPIO15) for CS may cause boot mode problems, use different pin in case, or 4k7 pull-down +// NOTE for ESP8266: using SS (GPIO15) for CS may cause boot mode problems, use different pin in case, or 3.3k pull-down // NOTE: connect 1k pull-up from D4 (RST) to 3.3V if your board or shield has the "clever" reset circuit, or use a different pin // mapping suggestion from Waveshare SPI e-Paper to generic ESP8266 @@ -76,8 +76,11 @@ // note: can't use SS on MKR1000: is defined as 24, should be 4 // BUSY -> 5, RST -> 6, DC -> 7, CS-> 4, CLK -> 9, DIN -> 8 -// mapping suggestion for Arduino Nano RP2040 Connect +// mapping suggestion for Arduino Nano RP2040 Connect (Arduino MBED OS Nano Boards) // BUSY -> 7, RST -> 9, DC -> 8, CS-> 10, CLK -> 13, DIN -> 11 -// mapping suggestion for Raspberry Pi Pico RP2040 +// mapping suggestion for Raspberry Pi Pico RP2040 (Arduino MBED OS RP2040 Boards) +// BUSY -> 7, RST -> 9, DC -> 8, CS-> 5, CLK -> 18, DIN -> 19 + +// mapping of my proto board for Raspberry Pi Pico RP2040 (previous default SPI pins) // BUSY -> 7, RST -> 9, DC -> 8, CS-> 5, CLK -> 2, DIN -> 3 diff --git a/examples/GxEPD2_PagedDisplayUsingCallback/GxEPD2_display_selection_new_style.h b/examples/GxEPD2_PagedDisplayUsingCallback/GxEPD2_display_selection_new_style.h index f4f73778..764ef7a7 100644 --- a/examples/GxEPD2_PagedDisplayUsingCallback/GxEPD2_display_selection_new_style.h +++ b/examples/GxEPD2_PagedDisplayUsingCallback/GxEPD2_display_selection_new_style.h @@ -58,7 +58,8 @@ //#define GxEPD2_DRIVER_CLASS GxEPD2_370_TC1 // ED037TC1 280x480, SSD1677, (ICA-FU-20 ichia 2029), Waveshare 3.7" //#define GxEPD2_DRIVER_CLASS GxEPD2_420 // GDEW042T2 400x300, UC8176 (IL0398), (WFT042CZ15) //#define GxEPD2_DRIVER_CLASS GxEPD2_420_M01 // GDEW042M01 400x300, UC8176 (IL0398), (WFT042CZ15) -//#define GxEPD2_DRIVER_CLASS GxEPD2_420_GDEY042T91 // GDEY042T91 400x300, SSD1683 (no inking) +//#define GxEPD2_DRIVER_CLASS GxEPD2_420_GDEY042T81 // GDEY042T81 400x300, SSD1683 (no inking) +//#define GxEPD2_DRIVER_CLASS GxEPD2_426_GDEQ0426T82 // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //#define GxEPD2_DRIVER_CLASS GxEPD2_583 // GDEW0583T7 600x448, UC8159c (IL0371), (missing) //#define GxEPD2_DRIVER_CLASS GxEPD2_583_T8 // GDEW0583T8 648x480, EK79655 (GD7965), (WFT0583CZ61) //#define GxEPD2_DRIVER_CLASS GxEPD2_583_GDEQ0583T31 // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -87,6 +88,10 @@ //#define GxEPD2_DRIVER_CLASS GxEPD2_750c_Z90 // GDEH075Z90 880x528, SSD1677, (HINK-E075A07-A0) //#define GxEPD2_DRIVER_CLASS GxEPD2_1248c // GDEY1248Z51 1304x984, UC8179, (WFT1248BZ23,WFT1248BZ24) // 4-color e-paper +//#define GxEPD2_DRIVER_CLASS GxEPD2_266c_GDEY0266F51H // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//#define GxEPD2_DRIVER_CLASS GxEPD2_290c_GDEY029F51H // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//#define GxEPD2_DRIVER_CLASS GxEPD2_300c // Waveshare 3.00" 4-color +//#define GxEPD2_DRIVER_CLASS GxEPD2_420c_GDEY0420F51 // GDEY0420F51 400x300, HX8717 (no inking) //#define GxEPD2_DRIVER_CLASS GxEPD2_437c // Waveshare 4.37" 4-color // 7-color e-paper //#define GxEPD2_DRIVER_CLASS GxEPD2_565c // Waveshare 5.65" 7-color @@ -207,6 +212,19 @@ GxEPD2_DISPLAY_CLASS displ //GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ 10, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); #endif +#if defined(ARDUINO_UNOR4_MINIMA) || defined(ARDUINO_UNOR4_WIFI) +#define MAX_DISPLAY_BUFFER_SIZE 16384ul // e.g. half of available RAM +#if IS_GxEPD2_BW(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8) ? EPD::HEIGHT : MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8)) +#elif IS_GxEPD2_3C(GxEPD2_DISPLAY_CLASS) || IS_GxEPD2_4C(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8)) +#elif IS_GxEPD2_7C(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2)) +#endif +// adapt the constructor parameters to your wiring +GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ EPD_CS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); +#endif + #if defined(ARDUINO_ARCH_SAM) #define MAX_DISPLAY_BUFFER_SIZE 32768ul // e.g., up to 96k #if IS_GxEPD2_BW(GxEPD2_DISPLAY_CLASS) @@ -259,6 +277,10 @@ GxEPD2_DISPLAY_CLASS displ GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ 3, /*DC=*/ 2, /*RST=*/ 1, /*BUSY=*/ 0)); // DESPI-PICO //GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ 3, /*DC=*/ 2, /*RST=*/ 11, /*BUSY=*/ 10)); // DESPI-PICO modified #endif +#if defined(ARDUINO_ADAFRUIT_FEATHER_RP2040_THINKINK) +// Adafruit Feather RP2040 ThinkInk used with package https://github.com/earlephilhower/arduino-pico +GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ PIN_EPD_CS, /*DC=*/ PIN_EPD_DC, /*RST=*/ PIN_EPD_RESET, /*BUSY=*/ PIN_EPD_BUSY)); +#endif #undef MAX_DISPLAY_BUFFER_SIZE #undef MAX_HEIGHT #endif diff --git a/examples/GxEPD2_PagedDisplayUsingCallback/GxEPD2_selection_check.h b/examples/GxEPD2_PagedDisplayUsingCallback/GxEPD2_selection_check.h index df552f0a..dba0e51c 100644 --- a/examples/GxEPD2_PagedDisplayUsingCallback/GxEPD2_selection_check.h +++ b/examples/GxEPD2_PagedDisplayUsingCallback/GxEPD2_selection_check.h @@ -49,7 +49,8 @@ #define GxEPD2_370_TC1_IS_BW true #define GxEPD2_420_IS_BW true #define GxEPD2_420_M01_IS_BW true -#define GxEPD2_420_GDEY042T91_IS_BW true +#define GxEPD2_420_GDEY042T81_IS_BW true +#define GxEPD2_426_GDEQ0426T82_IS_BW true #define GxEPD2_583_IS_BW true #define GxEPD2_583_T8_IS_BW true #define GxEPD2_583_GDEQ0583T31_IS_BW true @@ -82,6 +83,10 @@ #define GxEPD2_750c_Z90_IS_3C true #define GxEPD2_1248c_IS_3C true // 4-color e-paper +#define GxEPD2_266c_GDEY0266F51H_IS_4C true +#define GxEPD2_290c_GDEY029F51H_IS_4C true +#define GxEPD2_300c_IS_4C true +#define GxEPD2_420c_GDEY0420F51_IS_4C true #define GxEPD2_437c_IS_4C true // 7-color e-paper #define GxEPD2_565c_IS_7C true diff --git a/examples/GxEPD2_PagedDisplayUsingCallback/GxEPD2_wiring_examples.h b/examples/GxEPD2_PagedDisplayUsingCallback/GxEPD2_wiring_examples.h index 97ab8963..e91ce735 100644 --- a/examples/GxEPD2_PagedDisplayUsingCallback/GxEPD2_wiring_examples.h +++ b/examples/GxEPD2_PagedDisplayUsingCallback/GxEPD2_wiring_examples.h @@ -16,7 +16,7 @@ // mapping suggestion from Waveshare SPI e-Paper to Wemos D1 mini // BUSY -> D2, RST -> D4, DC -> D3, CS -> D8, CLK -> D5, DIN -> D7, GND -> GND, 3.3V -> 3.3V // NOTE: connect 3.3k pull-down from D8 to GND if your board or shield has level converters -// NOTE for ESP8266: using SS (GPIO15) for CS may cause boot mode problems, use different pin in case, or 4k7 pull-down +// NOTE for ESP8266: using SS (GPIO15) for CS may cause boot mode problems, use different pin in case, or 3.3k pull-down // NOTE: connect 1k pull-up from D4 (RST) to 3.3V if your board or shield has the "clever" reset circuit, or use a different pin // mapping suggestion from Waveshare SPI e-Paper to generic ESP8266 @@ -76,8 +76,11 @@ // note: can't use SS on MKR1000: is defined as 24, should be 4 // BUSY -> 5, RST -> 6, DC -> 7, CS-> 4, CLK -> 9, DIN -> 8 -// mapping suggestion for Arduino Nano RP2040 Connect +// mapping suggestion for Arduino Nano RP2040 Connect (Arduino MBED OS Nano Boards) // BUSY -> 7, RST -> 9, DC -> 8, CS-> 10, CLK -> 13, DIN -> 11 -// mapping suggestion for Raspberry Pi Pico RP2040 +// mapping suggestion for Raspberry Pi Pico RP2040 (Arduino MBED OS RP2040 Boards) +// BUSY -> 7, RST -> 9, DC -> 8, CS-> 5, CLK -> 18, DIN -> 19 + +// mapping of my proto board for Raspberry Pi Pico RP2040 (previous default SPI pins) // BUSY -> 7, RST -> 9, DC -> 8, CS-> 5, CLK -> 2, DIN -> 3 diff --git a/examples/GxEPD2_RotaryUsingBusyCallback/GxEPD2_display_selection_new_style.h b/examples/GxEPD2_RotaryUsingBusyCallback/GxEPD2_display_selection_new_style.h index f4f73778..764ef7a7 100644 --- a/examples/GxEPD2_RotaryUsingBusyCallback/GxEPD2_display_selection_new_style.h +++ b/examples/GxEPD2_RotaryUsingBusyCallback/GxEPD2_display_selection_new_style.h @@ -58,7 +58,8 @@ //#define GxEPD2_DRIVER_CLASS GxEPD2_370_TC1 // ED037TC1 280x480, SSD1677, (ICA-FU-20 ichia 2029), Waveshare 3.7" //#define GxEPD2_DRIVER_CLASS GxEPD2_420 // GDEW042T2 400x300, UC8176 (IL0398), (WFT042CZ15) //#define GxEPD2_DRIVER_CLASS GxEPD2_420_M01 // GDEW042M01 400x300, UC8176 (IL0398), (WFT042CZ15) -//#define GxEPD2_DRIVER_CLASS GxEPD2_420_GDEY042T91 // GDEY042T91 400x300, SSD1683 (no inking) +//#define GxEPD2_DRIVER_CLASS GxEPD2_420_GDEY042T81 // GDEY042T81 400x300, SSD1683 (no inking) +//#define GxEPD2_DRIVER_CLASS GxEPD2_426_GDEQ0426T82 // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //#define GxEPD2_DRIVER_CLASS GxEPD2_583 // GDEW0583T7 600x448, UC8159c (IL0371), (missing) //#define GxEPD2_DRIVER_CLASS GxEPD2_583_T8 // GDEW0583T8 648x480, EK79655 (GD7965), (WFT0583CZ61) //#define GxEPD2_DRIVER_CLASS GxEPD2_583_GDEQ0583T31 // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -87,6 +88,10 @@ //#define GxEPD2_DRIVER_CLASS GxEPD2_750c_Z90 // GDEH075Z90 880x528, SSD1677, (HINK-E075A07-A0) //#define GxEPD2_DRIVER_CLASS GxEPD2_1248c // GDEY1248Z51 1304x984, UC8179, (WFT1248BZ23,WFT1248BZ24) // 4-color e-paper +//#define GxEPD2_DRIVER_CLASS GxEPD2_266c_GDEY0266F51H // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//#define GxEPD2_DRIVER_CLASS GxEPD2_290c_GDEY029F51H // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//#define GxEPD2_DRIVER_CLASS GxEPD2_300c // Waveshare 3.00" 4-color +//#define GxEPD2_DRIVER_CLASS GxEPD2_420c_GDEY0420F51 // GDEY0420F51 400x300, HX8717 (no inking) //#define GxEPD2_DRIVER_CLASS GxEPD2_437c // Waveshare 4.37" 4-color // 7-color e-paper //#define GxEPD2_DRIVER_CLASS GxEPD2_565c // Waveshare 5.65" 7-color @@ -207,6 +212,19 @@ GxEPD2_DISPLAY_CLASS displ //GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ 10, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); #endif +#if defined(ARDUINO_UNOR4_MINIMA) || defined(ARDUINO_UNOR4_WIFI) +#define MAX_DISPLAY_BUFFER_SIZE 16384ul // e.g. half of available RAM +#if IS_GxEPD2_BW(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8) ? EPD::HEIGHT : MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8)) +#elif IS_GxEPD2_3C(GxEPD2_DISPLAY_CLASS) || IS_GxEPD2_4C(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8)) +#elif IS_GxEPD2_7C(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2)) +#endif +// adapt the constructor parameters to your wiring +GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ EPD_CS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); +#endif + #if defined(ARDUINO_ARCH_SAM) #define MAX_DISPLAY_BUFFER_SIZE 32768ul // e.g., up to 96k #if IS_GxEPD2_BW(GxEPD2_DISPLAY_CLASS) @@ -259,6 +277,10 @@ GxEPD2_DISPLAY_CLASS displ GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ 3, /*DC=*/ 2, /*RST=*/ 1, /*BUSY=*/ 0)); // DESPI-PICO //GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ 3, /*DC=*/ 2, /*RST=*/ 11, /*BUSY=*/ 10)); // DESPI-PICO modified #endif +#if defined(ARDUINO_ADAFRUIT_FEATHER_RP2040_THINKINK) +// Adafruit Feather RP2040 ThinkInk used with package https://github.com/earlephilhower/arduino-pico +GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ PIN_EPD_CS, /*DC=*/ PIN_EPD_DC, /*RST=*/ PIN_EPD_RESET, /*BUSY=*/ PIN_EPD_BUSY)); +#endif #undef MAX_DISPLAY_BUFFER_SIZE #undef MAX_HEIGHT #endif diff --git a/examples/GxEPD2_RotaryUsingBusyCallback/GxEPD2_selection_check.h b/examples/GxEPD2_RotaryUsingBusyCallback/GxEPD2_selection_check.h index df552f0a..dba0e51c 100644 --- a/examples/GxEPD2_RotaryUsingBusyCallback/GxEPD2_selection_check.h +++ b/examples/GxEPD2_RotaryUsingBusyCallback/GxEPD2_selection_check.h @@ -49,7 +49,8 @@ #define GxEPD2_370_TC1_IS_BW true #define GxEPD2_420_IS_BW true #define GxEPD2_420_M01_IS_BW true -#define GxEPD2_420_GDEY042T91_IS_BW true +#define GxEPD2_420_GDEY042T81_IS_BW true +#define GxEPD2_426_GDEQ0426T82_IS_BW true #define GxEPD2_583_IS_BW true #define GxEPD2_583_T8_IS_BW true #define GxEPD2_583_GDEQ0583T31_IS_BW true @@ -82,6 +83,10 @@ #define GxEPD2_750c_Z90_IS_3C true #define GxEPD2_1248c_IS_3C true // 4-color e-paper +#define GxEPD2_266c_GDEY0266F51H_IS_4C true +#define GxEPD2_290c_GDEY029F51H_IS_4C true +#define GxEPD2_300c_IS_4C true +#define GxEPD2_420c_GDEY0420F51_IS_4C true #define GxEPD2_437c_IS_4C true // 7-color e-paper #define GxEPD2_565c_IS_7C true diff --git a/examples/GxEPD2_RotaryUsingBusyCallback/GxEPD2_wiring_examples.h b/examples/GxEPD2_RotaryUsingBusyCallback/GxEPD2_wiring_examples.h index 97ab8963..e91ce735 100644 --- a/examples/GxEPD2_RotaryUsingBusyCallback/GxEPD2_wiring_examples.h +++ b/examples/GxEPD2_RotaryUsingBusyCallback/GxEPD2_wiring_examples.h @@ -16,7 +16,7 @@ // mapping suggestion from Waveshare SPI e-Paper to Wemos D1 mini // BUSY -> D2, RST -> D4, DC -> D3, CS -> D8, CLK -> D5, DIN -> D7, GND -> GND, 3.3V -> 3.3V // NOTE: connect 3.3k pull-down from D8 to GND if your board or shield has level converters -// NOTE for ESP8266: using SS (GPIO15) for CS may cause boot mode problems, use different pin in case, or 4k7 pull-down +// NOTE for ESP8266: using SS (GPIO15) for CS may cause boot mode problems, use different pin in case, or 3.3k pull-down // NOTE: connect 1k pull-up from D4 (RST) to 3.3V if your board or shield has the "clever" reset circuit, or use a different pin // mapping suggestion from Waveshare SPI e-Paper to generic ESP8266 @@ -76,8 +76,11 @@ // note: can't use SS on MKR1000: is defined as 24, should be 4 // BUSY -> 5, RST -> 6, DC -> 7, CS-> 4, CLK -> 9, DIN -> 8 -// mapping suggestion for Arduino Nano RP2040 Connect +// mapping suggestion for Arduino Nano RP2040 Connect (Arduino MBED OS Nano Boards) // BUSY -> 7, RST -> 9, DC -> 8, CS-> 10, CLK -> 13, DIN -> 11 -// mapping suggestion for Raspberry Pi Pico RP2040 +// mapping suggestion for Raspberry Pi Pico RP2040 (Arduino MBED OS RP2040 Boards) +// BUSY -> 7, RST -> 9, DC -> 8, CS-> 5, CLK -> 18, DIN -> 19 + +// mapping of my proto board for Raspberry Pi Pico RP2040 (previous default SPI pins) // BUSY -> 7, RST -> 9, DC -> 8, CS-> 5, CLK -> 2, DIN -> 3 diff --git a/examples/GxEPD2_SD_AVR_Example/GxEPD2_wiring_examples.h b/examples/GxEPD2_SD_AVR_Example/GxEPD2_wiring_examples.h index f13806bf..e91ce735 100644 --- a/examples/GxEPD2_SD_AVR_Example/GxEPD2_wiring_examples.h +++ b/examples/GxEPD2_SD_AVR_Example/GxEPD2_wiring_examples.h @@ -16,12 +16,14 @@ // mapping suggestion from Waveshare SPI e-Paper to Wemos D1 mini // BUSY -> D2, RST -> D4, DC -> D3, CS -> D8, CLK -> D5, DIN -> D7, GND -> GND, 3.3V -> 3.3V // NOTE: connect 3.3k pull-down from D8 to GND if your board or shield has level converters -// NOTE for ESP8266: using SS (GPIO15) for CS may cause boot mode problems, use different pin in case, or 4k7 pull-down +// NOTE for ESP8266: using SS (GPIO15) for CS may cause boot mode problems, use different pin in case, or 3.3k pull-down +// NOTE: connect 1k pull-up from D4 (RST) to 3.3V if your board or shield has the "clever" reset circuit, or use a different pin // mapping suggestion from Waveshare SPI e-Paper to generic ESP8266 // BUSY -> GPIO4, RST -> GPIO2, DC -> GPIO0, CS -> GPIO15, CLK -> GPIO14, DIN -> GPIO13, GND -> GND, 3.3V -> 3.3V // NOTE: connect 3.3k pull-down from GPIO15 to GND if your board or shield has level converters // NOTE for ESP8266: using SS (GPIO15) for CS may cause boot mode problems, use different pin in case, or 3.3k pull-down +// NOTE: connect 1k pull-up from GPIO2 (RST) to 3.3V if your board or shield has the "clever" reset circuit, or use a different pin // mapping of Waveshare e-Paper ESP8266 Driver Board, new version // BUSY -> GPIO5, RST -> GPIO2, DC -> GPIO4, CS -> GPIO15, CLK -> GPIO14, DIN -> GPIO13, GND -> GND, 3.3V -> 3.3V @@ -56,16 +58,29 @@ // mapping suggestion for AVR, UNO, NANO etc. // BUSY -> 7, RST -> 9, DC -> 8, CS-> 10, CLK -> 13, DIN -> 11 +// mapping suggestion for AVR, Arduino Micro, Leonardo +// note: on Leonardo board HW SPI pins are on 6-pin ICSP header +// BUSY -> 7, RST -> 9, DC -> 8, CS-> 10, CLK -> 15, DIN -> 16 + // mapping of Waveshare Universal e-Paper Raw Panel Driver Shield for Arduino / NUCLEO // BUSY -> 7, RST -> 8, DC -> 9, CS-> 10, CLK -> 13, DIN -> 11 // mapping suggestion for Arduino MEGA // BUSY -> 7, RST -> 9, DC -> 8, CS-> 53, CLK -> 52, DIN -> 51 -// mapping suggestion for Arduino DUE -// BUSY -> 7, RST -> 9, DC -> 8, CS-> 77, CLK -> 76, DIN -> 75 -// SPI pins are on 6 pin 2x3 SPI header +// mapping suggestion for Arduino DUE, note: pin 77 is on board pin 10, SS is 10 +// BUSY -> 7, RST -> 9, DC -> 8, CS-> 10, CLK -> 76, DIN -> 75 +// SPI pins are on 6 pin 2x3 SPI header, no SS on SPI header! // mapping suggestion for Arduino MKR1000 or MKRZERO // note: can't use SS on MKR1000: is defined as 24, should be 4 // BUSY -> 5, RST -> 6, DC -> 7, CS-> 4, CLK -> 9, DIN -> 8 + +// mapping suggestion for Arduino Nano RP2040 Connect (Arduino MBED OS Nano Boards) +// BUSY -> 7, RST -> 9, DC -> 8, CS-> 10, CLK -> 13, DIN -> 11 + +// mapping suggestion for Raspberry Pi Pico RP2040 (Arduino MBED OS RP2040 Boards) +// BUSY -> 7, RST -> 9, DC -> 8, CS-> 5, CLK -> 18, DIN -> 19 + +// mapping of my proto board for Raspberry Pi Pico RP2040 (previous default SPI pins) +// BUSY -> 7, RST -> 9, DC -> 8, CS-> 5, CLK -> 2, DIN -> 3 diff --git a/examples/GxEPD2_SD_Example/GxEPD2_display_selection_new_style.h b/examples/GxEPD2_SD_Example/GxEPD2_display_selection_new_style.h index f4f73778..764ef7a7 100644 --- a/examples/GxEPD2_SD_Example/GxEPD2_display_selection_new_style.h +++ b/examples/GxEPD2_SD_Example/GxEPD2_display_selection_new_style.h @@ -58,7 +58,8 @@ //#define GxEPD2_DRIVER_CLASS GxEPD2_370_TC1 // ED037TC1 280x480, SSD1677, (ICA-FU-20 ichia 2029), Waveshare 3.7" //#define GxEPD2_DRIVER_CLASS GxEPD2_420 // GDEW042T2 400x300, UC8176 (IL0398), (WFT042CZ15) //#define GxEPD2_DRIVER_CLASS GxEPD2_420_M01 // GDEW042M01 400x300, UC8176 (IL0398), (WFT042CZ15) -//#define GxEPD2_DRIVER_CLASS GxEPD2_420_GDEY042T91 // GDEY042T91 400x300, SSD1683 (no inking) +//#define GxEPD2_DRIVER_CLASS GxEPD2_420_GDEY042T81 // GDEY042T81 400x300, SSD1683 (no inking) +//#define GxEPD2_DRIVER_CLASS GxEPD2_426_GDEQ0426T82 // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //#define GxEPD2_DRIVER_CLASS GxEPD2_583 // GDEW0583T7 600x448, UC8159c (IL0371), (missing) //#define GxEPD2_DRIVER_CLASS GxEPD2_583_T8 // GDEW0583T8 648x480, EK79655 (GD7965), (WFT0583CZ61) //#define GxEPD2_DRIVER_CLASS GxEPD2_583_GDEQ0583T31 // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -87,6 +88,10 @@ //#define GxEPD2_DRIVER_CLASS GxEPD2_750c_Z90 // GDEH075Z90 880x528, SSD1677, (HINK-E075A07-A0) //#define GxEPD2_DRIVER_CLASS GxEPD2_1248c // GDEY1248Z51 1304x984, UC8179, (WFT1248BZ23,WFT1248BZ24) // 4-color e-paper +//#define GxEPD2_DRIVER_CLASS GxEPD2_266c_GDEY0266F51H // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//#define GxEPD2_DRIVER_CLASS GxEPD2_290c_GDEY029F51H // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//#define GxEPD2_DRIVER_CLASS GxEPD2_300c // Waveshare 3.00" 4-color +//#define GxEPD2_DRIVER_CLASS GxEPD2_420c_GDEY0420F51 // GDEY0420F51 400x300, HX8717 (no inking) //#define GxEPD2_DRIVER_CLASS GxEPD2_437c // Waveshare 4.37" 4-color // 7-color e-paper //#define GxEPD2_DRIVER_CLASS GxEPD2_565c // Waveshare 5.65" 7-color @@ -207,6 +212,19 @@ GxEPD2_DISPLAY_CLASS displ //GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ 10, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); #endif +#if defined(ARDUINO_UNOR4_MINIMA) || defined(ARDUINO_UNOR4_WIFI) +#define MAX_DISPLAY_BUFFER_SIZE 16384ul // e.g. half of available RAM +#if IS_GxEPD2_BW(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8) ? EPD::HEIGHT : MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8)) +#elif IS_GxEPD2_3C(GxEPD2_DISPLAY_CLASS) || IS_GxEPD2_4C(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8)) +#elif IS_GxEPD2_7C(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2)) +#endif +// adapt the constructor parameters to your wiring +GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ EPD_CS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); +#endif + #if defined(ARDUINO_ARCH_SAM) #define MAX_DISPLAY_BUFFER_SIZE 32768ul // e.g., up to 96k #if IS_GxEPD2_BW(GxEPD2_DISPLAY_CLASS) @@ -259,6 +277,10 @@ GxEPD2_DISPLAY_CLASS displ GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ 3, /*DC=*/ 2, /*RST=*/ 1, /*BUSY=*/ 0)); // DESPI-PICO //GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ 3, /*DC=*/ 2, /*RST=*/ 11, /*BUSY=*/ 10)); // DESPI-PICO modified #endif +#if defined(ARDUINO_ADAFRUIT_FEATHER_RP2040_THINKINK) +// Adafruit Feather RP2040 ThinkInk used with package https://github.com/earlephilhower/arduino-pico +GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ PIN_EPD_CS, /*DC=*/ PIN_EPD_DC, /*RST=*/ PIN_EPD_RESET, /*BUSY=*/ PIN_EPD_BUSY)); +#endif #undef MAX_DISPLAY_BUFFER_SIZE #undef MAX_HEIGHT #endif diff --git a/examples/GxEPD2_SD_Example/GxEPD2_selection_check.h b/examples/GxEPD2_SD_Example/GxEPD2_selection_check.h index df552f0a..dba0e51c 100644 --- a/examples/GxEPD2_SD_Example/GxEPD2_selection_check.h +++ b/examples/GxEPD2_SD_Example/GxEPD2_selection_check.h @@ -49,7 +49,8 @@ #define GxEPD2_370_TC1_IS_BW true #define GxEPD2_420_IS_BW true #define GxEPD2_420_M01_IS_BW true -#define GxEPD2_420_GDEY042T91_IS_BW true +#define GxEPD2_420_GDEY042T81_IS_BW true +#define GxEPD2_426_GDEQ0426T82_IS_BW true #define GxEPD2_583_IS_BW true #define GxEPD2_583_T8_IS_BW true #define GxEPD2_583_GDEQ0583T31_IS_BW true @@ -82,6 +83,10 @@ #define GxEPD2_750c_Z90_IS_3C true #define GxEPD2_1248c_IS_3C true // 4-color e-paper +#define GxEPD2_266c_GDEY0266F51H_IS_4C true +#define GxEPD2_290c_GDEY029F51H_IS_4C true +#define GxEPD2_300c_IS_4C true +#define GxEPD2_420c_GDEY0420F51_IS_4C true #define GxEPD2_437c_IS_4C true // 7-color e-paper #define GxEPD2_565c_IS_7C true diff --git a/examples/GxEPD2_SD_Example/GxEPD2_wiring_examples.h b/examples/GxEPD2_SD_Example/GxEPD2_wiring_examples.h index 97ab8963..e91ce735 100644 --- a/examples/GxEPD2_SD_Example/GxEPD2_wiring_examples.h +++ b/examples/GxEPD2_SD_Example/GxEPD2_wiring_examples.h @@ -16,7 +16,7 @@ // mapping suggestion from Waveshare SPI e-Paper to Wemos D1 mini // BUSY -> D2, RST -> D4, DC -> D3, CS -> D8, CLK -> D5, DIN -> D7, GND -> GND, 3.3V -> 3.3V // NOTE: connect 3.3k pull-down from D8 to GND if your board or shield has level converters -// NOTE for ESP8266: using SS (GPIO15) for CS may cause boot mode problems, use different pin in case, or 4k7 pull-down +// NOTE for ESP8266: using SS (GPIO15) for CS may cause boot mode problems, use different pin in case, or 3.3k pull-down // NOTE: connect 1k pull-up from D4 (RST) to 3.3V if your board or shield has the "clever" reset circuit, or use a different pin // mapping suggestion from Waveshare SPI e-Paper to generic ESP8266 @@ -76,8 +76,11 @@ // note: can't use SS on MKR1000: is defined as 24, should be 4 // BUSY -> 5, RST -> 6, DC -> 7, CS-> 4, CLK -> 9, DIN -> 8 -// mapping suggestion for Arduino Nano RP2040 Connect +// mapping suggestion for Arduino Nano RP2040 Connect (Arduino MBED OS Nano Boards) // BUSY -> 7, RST -> 9, DC -> 8, CS-> 10, CLK -> 13, DIN -> 11 -// mapping suggestion for Raspberry Pi Pico RP2040 +// mapping suggestion for Raspberry Pi Pico RP2040 (Arduino MBED OS RP2040 Boards) +// BUSY -> 7, RST -> 9, DC -> 8, CS-> 5, CLK -> 18, DIN -> 19 + +// mapping of my proto board for Raspberry Pi Pico RP2040 (previous default SPI pins) // BUSY -> 7, RST -> 9, DC -> 8, CS-> 5, CLK -> 2, DIN -> 3 diff --git a/examples/GxEPD2_SerialFlash_Example/GxEPD2_display_selection_new_style.h b/examples/GxEPD2_SerialFlash_Example/GxEPD2_display_selection_new_style.h index f4f73778..764ef7a7 100644 --- a/examples/GxEPD2_SerialFlash_Example/GxEPD2_display_selection_new_style.h +++ b/examples/GxEPD2_SerialFlash_Example/GxEPD2_display_selection_new_style.h @@ -58,7 +58,8 @@ //#define GxEPD2_DRIVER_CLASS GxEPD2_370_TC1 // ED037TC1 280x480, SSD1677, (ICA-FU-20 ichia 2029), Waveshare 3.7" //#define GxEPD2_DRIVER_CLASS GxEPD2_420 // GDEW042T2 400x300, UC8176 (IL0398), (WFT042CZ15) //#define GxEPD2_DRIVER_CLASS GxEPD2_420_M01 // GDEW042M01 400x300, UC8176 (IL0398), (WFT042CZ15) -//#define GxEPD2_DRIVER_CLASS GxEPD2_420_GDEY042T91 // GDEY042T91 400x300, SSD1683 (no inking) +//#define GxEPD2_DRIVER_CLASS GxEPD2_420_GDEY042T81 // GDEY042T81 400x300, SSD1683 (no inking) +//#define GxEPD2_DRIVER_CLASS GxEPD2_426_GDEQ0426T82 // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //#define GxEPD2_DRIVER_CLASS GxEPD2_583 // GDEW0583T7 600x448, UC8159c (IL0371), (missing) //#define GxEPD2_DRIVER_CLASS GxEPD2_583_T8 // GDEW0583T8 648x480, EK79655 (GD7965), (WFT0583CZ61) //#define GxEPD2_DRIVER_CLASS GxEPD2_583_GDEQ0583T31 // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -87,6 +88,10 @@ //#define GxEPD2_DRIVER_CLASS GxEPD2_750c_Z90 // GDEH075Z90 880x528, SSD1677, (HINK-E075A07-A0) //#define GxEPD2_DRIVER_CLASS GxEPD2_1248c // GDEY1248Z51 1304x984, UC8179, (WFT1248BZ23,WFT1248BZ24) // 4-color e-paper +//#define GxEPD2_DRIVER_CLASS GxEPD2_266c_GDEY0266F51H // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//#define GxEPD2_DRIVER_CLASS GxEPD2_290c_GDEY029F51H // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//#define GxEPD2_DRIVER_CLASS GxEPD2_300c // Waveshare 3.00" 4-color +//#define GxEPD2_DRIVER_CLASS GxEPD2_420c_GDEY0420F51 // GDEY0420F51 400x300, HX8717 (no inking) //#define GxEPD2_DRIVER_CLASS GxEPD2_437c // Waveshare 4.37" 4-color // 7-color e-paper //#define GxEPD2_DRIVER_CLASS GxEPD2_565c // Waveshare 5.65" 7-color @@ -207,6 +212,19 @@ GxEPD2_DISPLAY_CLASS displ //GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ 10, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); #endif +#if defined(ARDUINO_UNOR4_MINIMA) || defined(ARDUINO_UNOR4_WIFI) +#define MAX_DISPLAY_BUFFER_SIZE 16384ul // e.g. half of available RAM +#if IS_GxEPD2_BW(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8) ? EPD::HEIGHT : MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8)) +#elif IS_GxEPD2_3C(GxEPD2_DISPLAY_CLASS) || IS_GxEPD2_4C(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8)) +#elif IS_GxEPD2_7C(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2)) +#endif +// adapt the constructor parameters to your wiring +GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ EPD_CS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); +#endif + #if defined(ARDUINO_ARCH_SAM) #define MAX_DISPLAY_BUFFER_SIZE 32768ul // e.g., up to 96k #if IS_GxEPD2_BW(GxEPD2_DISPLAY_CLASS) @@ -259,6 +277,10 @@ GxEPD2_DISPLAY_CLASS displ GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ 3, /*DC=*/ 2, /*RST=*/ 1, /*BUSY=*/ 0)); // DESPI-PICO //GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ 3, /*DC=*/ 2, /*RST=*/ 11, /*BUSY=*/ 10)); // DESPI-PICO modified #endif +#if defined(ARDUINO_ADAFRUIT_FEATHER_RP2040_THINKINK) +// Adafruit Feather RP2040 ThinkInk used with package https://github.com/earlephilhower/arduino-pico +GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ PIN_EPD_CS, /*DC=*/ PIN_EPD_DC, /*RST=*/ PIN_EPD_RESET, /*BUSY=*/ PIN_EPD_BUSY)); +#endif #undef MAX_DISPLAY_BUFFER_SIZE #undef MAX_HEIGHT #endif diff --git a/examples/GxEPD2_SerialFlash_Example/GxEPD2_selection_check.h b/examples/GxEPD2_SerialFlash_Example/GxEPD2_selection_check.h index df552f0a..dba0e51c 100644 --- a/examples/GxEPD2_SerialFlash_Example/GxEPD2_selection_check.h +++ b/examples/GxEPD2_SerialFlash_Example/GxEPD2_selection_check.h @@ -49,7 +49,8 @@ #define GxEPD2_370_TC1_IS_BW true #define GxEPD2_420_IS_BW true #define GxEPD2_420_M01_IS_BW true -#define GxEPD2_420_GDEY042T91_IS_BW true +#define GxEPD2_420_GDEY042T81_IS_BW true +#define GxEPD2_426_GDEQ0426T82_IS_BW true #define GxEPD2_583_IS_BW true #define GxEPD2_583_T8_IS_BW true #define GxEPD2_583_GDEQ0583T31_IS_BW true @@ -82,6 +83,10 @@ #define GxEPD2_750c_Z90_IS_3C true #define GxEPD2_1248c_IS_3C true // 4-color e-paper +#define GxEPD2_266c_GDEY0266F51H_IS_4C true +#define GxEPD2_290c_GDEY029F51H_IS_4C true +#define GxEPD2_300c_IS_4C true +#define GxEPD2_420c_GDEY0420F51_IS_4C true #define GxEPD2_437c_IS_4C true // 7-color e-paper #define GxEPD2_565c_IS_7C true diff --git a/examples/GxEPD2_SerialFlash_Example/GxEPD2_wiring_examples.h b/examples/GxEPD2_SerialFlash_Example/GxEPD2_wiring_examples.h index 97ab8963..e91ce735 100644 --- a/examples/GxEPD2_SerialFlash_Example/GxEPD2_wiring_examples.h +++ b/examples/GxEPD2_SerialFlash_Example/GxEPD2_wiring_examples.h @@ -16,7 +16,7 @@ // mapping suggestion from Waveshare SPI e-Paper to Wemos D1 mini // BUSY -> D2, RST -> D4, DC -> D3, CS -> D8, CLK -> D5, DIN -> D7, GND -> GND, 3.3V -> 3.3V // NOTE: connect 3.3k pull-down from D8 to GND if your board or shield has level converters -// NOTE for ESP8266: using SS (GPIO15) for CS may cause boot mode problems, use different pin in case, or 4k7 pull-down +// NOTE for ESP8266: using SS (GPIO15) for CS may cause boot mode problems, use different pin in case, or 3.3k pull-down // NOTE: connect 1k pull-up from D4 (RST) to 3.3V if your board or shield has the "clever" reset circuit, or use a different pin // mapping suggestion from Waveshare SPI e-Paper to generic ESP8266 @@ -76,8 +76,11 @@ // note: can't use SS on MKR1000: is defined as 24, should be 4 // BUSY -> 5, RST -> 6, DC -> 7, CS-> 4, CLK -> 9, DIN -> 8 -// mapping suggestion for Arduino Nano RP2040 Connect +// mapping suggestion for Arduino Nano RP2040 Connect (Arduino MBED OS Nano Boards) // BUSY -> 7, RST -> 9, DC -> 8, CS-> 10, CLK -> 13, DIN -> 11 -// mapping suggestion for Raspberry Pi Pico RP2040 +// mapping suggestion for Raspberry Pi Pico RP2040 (Arduino MBED OS RP2040 Boards) +// BUSY -> 7, RST -> 9, DC -> 8, CS-> 5, CLK -> 18, DIN -> 19 + +// mapping of my proto board for Raspberry Pi Pico RP2040 (previous default SPI pins) // BUSY -> 7, RST -> 9, DC -> 8, CS-> 5, CLK -> 2, DIN -> 3 diff --git a/examples/GxEPD2_Spiffs_Example/GxEPD2_display_selection_new_style.h b/examples/GxEPD2_Spiffs_Example/GxEPD2_display_selection_new_style.h index f4f73778..764ef7a7 100644 --- a/examples/GxEPD2_Spiffs_Example/GxEPD2_display_selection_new_style.h +++ b/examples/GxEPD2_Spiffs_Example/GxEPD2_display_selection_new_style.h @@ -58,7 +58,8 @@ //#define GxEPD2_DRIVER_CLASS GxEPD2_370_TC1 // ED037TC1 280x480, SSD1677, (ICA-FU-20 ichia 2029), Waveshare 3.7" //#define GxEPD2_DRIVER_CLASS GxEPD2_420 // GDEW042T2 400x300, UC8176 (IL0398), (WFT042CZ15) //#define GxEPD2_DRIVER_CLASS GxEPD2_420_M01 // GDEW042M01 400x300, UC8176 (IL0398), (WFT042CZ15) -//#define GxEPD2_DRIVER_CLASS GxEPD2_420_GDEY042T91 // GDEY042T91 400x300, SSD1683 (no inking) +//#define GxEPD2_DRIVER_CLASS GxEPD2_420_GDEY042T81 // GDEY042T81 400x300, SSD1683 (no inking) +//#define GxEPD2_DRIVER_CLASS GxEPD2_426_GDEQ0426T82 // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //#define GxEPD2_DRIVER_CLASS GxEPD2_583 // GDEW0583T7 600x448, UC8159c (IL0371), (missing) //#define GxEPD2_DRIVER_CLASS GxEPD2_583_T8 // GDEW0583T8 648x480, EK79655 (GD7965), (WFT0583CZ61) //#define GxEPD2_DRIVER_CLASS GxEPD2_583_GDEQ0583T31 // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -87,6 +88,10 @@ //#define GxEPD2_DRIVER_CLASS GxEPD2_750c_Z90 // GDEH075Z90 880x528, SSD1677, (HINK-E075A07-A0) //#define GxEPD2_DRIVER_CLASS GxEPD2_1248c // GDEY1248Z51 1304x984, UC8179, (WFT1248BZ23,WFT1248BZ24) // 4-color e-paper +//#define GxEPD2_DRIVER_CLASS GxEPD2_266c_GDEY0266F51H // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//#define GxEPD2_DRIVER_CLASS GxEPD2_290c_GDEY029F51H // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//#define GxEPD2_DRIVER_CLASS GxEPD2_300c // Waveshare 3.00" 4-color +//#define GxEPD2_DRIVER_CLASS GxEPD2_420c_GDEY0420F51 // GDEY0420F51 400x300, HX8717 (no inking) //#define GxEPD2_DRIVER_CLASS GxEPD2_437c // Waveshare 4.37" 4-color // 7-color e-paper //#define GxEPD2_DRIVER_CLASS GxEPD2_565c // Waveshare 5.65" 7-color @@ -207,6 +212,19 @@ GxEPD2_DISPLAY_CLASS displ //GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ 10, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); #endif +#if defined(ARDUINO_UNOR4_MINIMA) || defined(ARDUINO_UNOR4_WIFI) +#define MAX_DISPLAY_BUFFER_SIZE 16384ul // e.g. half of available RAM +#if IS_GxEPD2_BW(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8) ? EPD::HEIGHT : MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8)) +#elif IS_GxEPD2_3C(GxEPD2_DISPLAY_CLASS) || IS_GxEPD2_4C(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8)) +#elif IS_GxEPD2_7C(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2)) +#endif +// adapt the constructor parameters to your wiring +GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ EPD_CS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); +#endif + #if defined(ARDUINO_ARCH_SAM) #define MAX_DISPLAY_BUFFER_SIZE 32768ul // e.g., up to 96k #if IS_GxEPD2_BW(GxEPD2_DISPLAY_CLASS) @@ -259,6 +277,10 @@ GxEPD2_DISPLAY_CLASS displ GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ 3, /*DC=*/ 2, /*RST=*/ 1, /*BUSY=*/ 0)); // DESPI-PICO //GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ 3, /*DC=*/ 2, /*RST=*/ 11, /*BUSY=*/ 10)); // DESPI-PICO modified #endif +#if defined(ARDUINO_ADAFRUIT_FEATHER_RP2040_THINKINK) +// Adafruit Feather RP2040 ThinkInk used with package https://github.com/earlephilhower/arduino-pico +GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ PIN_EPD_CS, /*DC=*/ PIN_EPD_DC, /*RST=*/ PIN_EPD_RESET, /*BUSY=*/ PIN_EPD_BUSY)); +#endif #undef MAX_DISPLAY_BUFFER_SIZE #undef MAX_HEIGHT #endif diff --git a/examples/GxEPD2_Spiffs_Example/GxEPD2_selection_check.h b/examples/GxEPD2_Spiffs_Example/GxEPD2_selection_check.h index df552f0a..dba0e51c 100644 --- a/examples/GxEPD2_Spiffs_Example/GxEPD2_selection_check.h +++ b/examples/GxEPD2_Spiffs_Example/GxEPD2_selection_check.h @@ -49,7 +49,8 @@ #define GxEPD2_370_TC1_IS_BW true #define GxEPD2_420_IS_BW true #define GxEPD2_420_M01_IS_BW true -#define GxEPD2_420_GDEY042T91_IS_BW true +#define GxEPD2_420_GDEY042T81_IS_BW true +#define GxEPD2_426_GDEQ0426T82_IS_BW true #define GxEPD2_583_IS_BW true #define GxEPD2_583_T8_IS_BW true #define GxEPD2_583_GDEQ0583T31_IS_BW true @@ -82,6 +83,10 @@ #define GxEPD2_750c_Z90_IS_3C true #define GxEPD2_1248c_IS_3C true // 4-color e-paper +#define GxEPD2_266c_GDEY0266F51H_IS_4C true +#define GxEPD2_290c_GDEY029F51H_IS_4C true +#define GxEPD2_300c_IS_4C true +#define GxEPD2_420c_GDEY0420F51_IS_4C true #define GxEPD2_437c_IS_4C true // 7-color e-paper #define GxEPD2_565c_IS_7C true diff --git a/examples/GxEPD2_Spiffs_Example/GxEPD2_wiring_examples.h b/examples/GxEPD2_Spiffs_Example/GxEPD2_wiring_examples.h index 97ab8963..e91ce735 100644 --- a/examples/GxEPD2_Spiffs_Example/GxEPD2_wiring_examples.h +++ b/examples/GxEPD2_Spiffs_Example/GxEPD2_wiring_examples.h @@ -16,7 +16,7 @@ // mapping suggestion from Waveshare SPI e-Paper to Wemos D1 mini // BUSY -> D2, RST -> D4, DC -> D3, CS -> D8, CLK -> D5, DIN -> D7, GND -> GND, 3.3V -> 3.3V // NOTE: connect 3.3k pull-down from D8 to GND if your board or shield has level converters -// NOTE for ESP8266: using SS (GPIO15) for CS may cause boot mode problems, use different pin in case, or 4k7 pull-down +// NOTE for ESP8266: using SS (GPIO15) for CS may cause boot mode problems, use different pin in case, or 3.3k pull-down // NOTE: connect 1k pull-up from D4 (RST) to 3.3V if your board or shield has the "clever" reset circuit, or use a different pin // mapping suggestion from Waveshare SPI e-Paper to generic ESP8266 @@ -76,8 +76,11 @@ // note: can't use SS on MKR1000: is defined as 24, should be 4 // BUSY -> 5, RST -> 6, DC -> 7, CS-> 4, CLK -> 9, DIN -> 8 -// mapping suggestion for Arduino Nano RP2040 Connect +// mapping suggestion for Arduino Nano RP2040 Connect (Arduino MBED OS Nano Boards) // BUSY -> 7, RST -> 9, DC -> 8, CS-> 10, CLK -> 13, DIN -> 11 -// mapping suggestion for Raspberry Pi Pico RP2040 +// mapping suggestion for Raspberry Pi Pico RP2040 (Arduino MBED OS RP2040 Boards) +// BUSY -> 7, RST -> 9, DC -> 8, CS-> 5, CLK -> 18, DIN -> 19 + +// mapping of my proto board for Raspberry Pi Pico RP2040 (previous default SPI pins) // BUSY -> 7, RST -> 9, DC -> 8, CS-> 5, CLK -> 2, DIN -> 3 diff --git a/examples/GxEPD2_U8G2_Fonts_Example/GxEPD2_display_selection_new_style.h b/examples/GxEPD2_U8G2_Fonts_Example/GxEPD2_display_selection_new_style.h index f4f73778..764ef7a7 100644 --- a/examples/GxEPD2_U8G2_Fonts_Example/GxEPD2_display_selection_new_style.h +++ b/examples/GxEPD2_U8G2_Fonts_Example/GxEPD2_display_selection_new_style.h @@ -58,7 +58,8 @@ //#define GxEPD2_DRIVER_CLASS GxEPD2_370_TC1 // ED037TC1 280x480, SSD1677, (ICA-FU-20 ichia 2029), Waveshare 3.7" //#define GxEPD2_DRIVER_CLASS GxEPD2_420 // GDEW042T2 400x300, UC8176 (IL0398), (WFT042CZ15) //#define GxEPD2_DRIVER_CLASS GxEPD2_420_M01 // GDEW042M01 400x300, UC8176 (IL0398), (WFT042CZ15) -//#define GxEPD2_DRIVER_CLASS GxEPD2_420_GDEY042T91 // GDEY042T91 400x300, SSD1683 (no inking) +//#define GxEPD2_DRIVER_CLASS GxEPD2_420_GDEY042T81 // GDEY042T81 400x300, SSD1683 (no inking) +//#define GxEPD2_DRIVER_CLASS GxEPD2_426_GDEQ0426T82 // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //#define GxEPD2_DRIVER_CLASS GxEPD2_583 // GDEW0583T7 600x448, UC8159c (IL0371), (missing) //#define GxEPD2_DRIVER_CLASS GxEPD2_583_T8 // GDEW0583T8 648x480, EK79655 (GD7965), (WFT0583CZ61) //#define GxEPD2_DRIVER_CLASS GxEPD2_583_GDEQ0583T31 // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -87,6 +88,10 @@ //#define GxEPD2_DRIVER_CLASS GxEPD2_750c_Z90 // GDEH075Z90 880x528, SSD1677, (HINK-E075A07-A0) //#define GxEPD2_DRIVER_CLASS GxEPD2_1248c // GDEY1248Z51 1304x984, UC8179, (WFT1248BZ23,WFT1248BZ24) // 4-color e-paper +//#define GxEPD2_DRIVER_CLASS GxEPD2_266c_GDEY0266F51H // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//#define GxEPD2_DRIVER_CLASS GxEPD2_290c_GDEY029F51H // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//#define GxEPD2_DRIVER_CLASS GxEPD2_300c // Waveshare 3.00" 4-color +//#define GxEPD2_DRIVER_CLASS GxEPD2_420c_GDEY0420F51 // GDEY0420F51 400x300, HX8717 (no inking) //#define GxEPD2_DRIVER_CLASS GxEPD2_437c // Waveshare 4.37" 4-color // 7-color e-paper //#define GxEPD2_DRIVER_CLASS GxEPD2_565c // Waveshare 5.65" 7-color @@ -207,6 +212,19 @@ GxEPD2_DISPLAY_CLASS displ //GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ 10, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); #endif +#if defined(ARDUINO_UNOR4_MINIMA) || defined(ARDUINO_UNOR4_WIFI) +#define MAX_DISPLAY_BUFFER_SIZE 16384ul // e.g. half of available RAM +#if IS_GxEPD2_BW(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8) ? EPD::HEIGHT : MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8)) +#elif IS_GxEPD2_3C(GxEPD2_DISPLAY_CLASS) || IS_GxEPD2_4C(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8)) +#elif IS_GxEPD2_7C(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2)) +#endif +// adapt the constructor parameters to your wiring +GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ EPD_CS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); +#endif + #if defined(ARDUINO_ARCH_SAM) #define MAX_DISPLAY_BUFFER_SIZE 32768ul // e.g., up to 96k #if IS_GxEPD2_BW(GxEPD2_DISPLAY_CLASS) @@ -259,6 +277,10 @@ GxEPD2_DISPLAY_CLASS displ GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ 3, /*DC=*/ 2, /*RST=*/ 1, /*BUSY=*/ 0)); // DESPI-PICO //GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ 3, /*DC=*/ 2, /*RST=*/ 11, /*BUSY=*/ 10)); // DESPI-PICO modified #endif +#if defined(ARDUINO_ADAFRUIT_FEATHER_RP2040_THINKINK) +// Adafruit Feather RP2040 ThinkInk used with package https://github.com/earlephilhower/arduino-pico +GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ PIN_EPD_CS, /*DC=*/ PIN_EPD_DC, /*RST=*/ PIN_EPD_RESET, /*BUSY=*/ PIN_EPD_BUSY)); +#endif #undef MAX_DISPLAY_BUFFER_SIZE #undef MAX_HEIGHT #endif diff --git a/examples/GxEPD2_U8G2_Fonts_Example/GxEPD2_selection_check.h b/examples/GxEPD2_U8G2_Fonts_Example/GxEPD2_selection_check.h index df552f0a..dba0e51c 100644 --- a/examples/GxEPD2_U8G2_Fonts_Example/GxEPD2_selection_check.h +++ b/examples/GxEPD2_U8G2_Fonts_Example/GxEPD2_selection_check.h @@ -49,7 +49,8 @@ #define GxEPD2_370_TC1_IS_BW true #define GxEPD2_420_IS_BW true #define GxEPD2_420_M01_IS_BW true -#define GxEPD2_420_GDEY042T91_IS_BW true +#define GxEPD2_420_GDEY042T81_IS_BW true +#define GxEPD2_426_GDEQ0426T82_IS_BW true #define GxEPD2_583_IS_BW true #define GxEPD2_583_T8_IS_BW true #define GxEPD2_583_GDEQ0583T31_IS_BW true @@ -82,6 +83,10 @@ #define GxEPD2_750c_Z90_IS_3C true #define GxEPD2_1248c_IS_3C true // 4-color e-paper +#define GxEPD2_266c_GDEY0266F51H_IS_4C true +#define GxEPD2_290c_GDEY029F51H_IS_4C true +#define GxEPD2_300c_IS_4C true +#define GxEPD2_420c_GDEY0420F51_IS_4C true #define GxEPD2_437c_IS_4C true // 7-color e-paper #define GxEPD2_565c_IS_7C true diff --git a/examples/GxEPD2_U8G2_Fonts_Example/GxEPD2_wiring_examples.h b/examples/GxEPD2_U8G2_Fonts_Example/GxEPD2_wiring_examples.h index 97ab8963..e91ce735 100644 --- a/examples/GxEPD2_U8G2_Fonts_Example/GxEPD2_wiring_examples.h +++ b/examples/GxEPD2_U8G2_Fonts_Example/GxEPD2_wiring_examples.h @@ -16,7 +16,7 @@ // mapping suggestion from Waveshare SPI e-Paper to Wemos D1 mini // BUSY -> D2, RST -> D4, DC -> D3, CS -> D8, CLK -> D5, DIN -> D7, GND -> GND, 3.3V -> 3.3V // NOTE: connect 3.3k pull-down from D8 to GND if your board or shield has level converters -// NOTE for ESP8266: using SS (GPIO15) for CS may cause boot mode problems, use different pin in case, or 4k7 pull-down +// NOTE for ESP8266: using SS (GPIO15) for CS may cause boot mode problems, use different pin in case, or 3.3k pull-down // NOTE: connect 1k pull-up from D4 (RST) to 3.3V if your board or shield has the "clever" reset circuit, or use a different pin // mapping suggestion from Waveshare SPI e-Paper to generic ESP8266 @@ -76,8 +76,11 @@ // note: can't use SS on MKR1000: is defined as 24, should be 4 // BUSY -> 5, RST -> 6, DC -> 7, CS-> 4, CLK -> 9, DIN -> 8 -// mapping suggestion for Arduino Nano RP2040 Connect +// mapping suggestion for Arduino Nano RP2040 Connect (Arduino MBED OS Nano Boards) // BUSY -> 7, RST -> 9, DC -> 8, CS-> 10, CLK -> 13, DIN -> 11 -// mapping suggestion for Raspberry Pi Pico RP2040 +// mapping suggestion for Raspberry Pi Pico RP2040 (Arduino MBED OS RP2040 Boards) +// BUSY -> 7, RST -> 9, DC -> 8, CS-> 5, CLK -> 18, DIN -> 19 + +// mapping of my proto board for Raspberry Pi Pico RP2040 (previous default SPI pins) // BUSY -> 7, RST -> 9, DC -> 8, CS-> 5, CLK -> 2, DIN -> 3 diff --git a/examples/GxEPD2_WiFi_Example/GxEPD2_display_selection_new_style.h b/examples/GxEPD2_WiFi_Example/GxEPD2_display_selection_new_style.h new file mode 100644 index 00000000..764ef7a7 --- /dev/null +++ b/examples/GxEPD2_WiFi_Example/GxEPD2_display_selection_new_style.h @@ -0,0 +1,288 @@ +// Display Library example for SPI e-paper panels from Dalian Good Display and boards from Waveshare. +// Requires HW SPI and Adafruit_GFX. Caution: the e-paper panels require 3.3V supply AND data lines! +// +// Display Library based on Demo Example from Good Display: http://www.e-paper-display.com/download_list/downloadcategoryid=34&isMode=false.html +// +// Author: Jean-Marc Zingg +// +// Version: see library.properties +// +// Library: https://github.com/ZinggJM/GxEPD2 + +// Supporting Arduino Forum Topics: +// Waveshare e-paper displays with SPI: http://forum.arduino.cc/index.php?topic=487007.0 +// Good Display ePaper for Arduino: https://forum.arduino.cc/index.php?topic=436411.0 + +// NOTE: you may need to adapt or select for your wiring in the processor specific conditional compile sections below + +// select the display class (only one), matching the kind of display panel +#define GxEPD2_DISPLAY_CLASS GxEPD2_BW +//#define GxEPD2_DISPLAY_CLASS GxEPD2_3C +//#define GxEPD2_DISPLAY_CLASS GxEPD2_4C +//#define GxEPD2_DISPLAY_CLASS GxEPD2_7C + +// select the display driver class (only one) for your panel +//#define GxEPD2_DRIVER_CLASS GxEPD2_102 // GDEW0102T4 80x128, UC8175, (WFT0102CZA2) +//#define GxEPD2_DRIVER_CLASS GxEPD2_150_BN // DEPG0150BN 200x200, SSD1681, (FPC8101), TTGO T5 V2.4.1 +//#define GxEPD2_DRIVER_CLASS GxEPD2_154 // GDEP015OC1 200x200, IL3829, (WFC0000CZ07), no longer available +//#define GxEPD2_DRIVER_CLASS GxEPD2_154_D67 // GDEH0154D67 200x200, SSD1681, (HINK-E154A07-A1) +//#define GxEPD2_DRIVER_CLASS GxEPD2_154_T8 // GDEW0154T8 152x152, UC8151 (IL0373), (WFT0154CZ17) +//#define GxEPD2_DRIVER_CLASS GxEPD2_154_M09 // GDEW0154M09 200x200, JD79653A, (WFT0154CZB3) +//#define GxEPD2_DRIVER_CLASS GxEPD2_154_M10 // GDEW0154M10 152x152, UC8151D, (WFT0154CZ17) +//#define GxEPD2_DRIVER_CLASS GxEPD2_154_GDEY0154D67 // GDEY0154D67 200x200, SSD1681, (FPC-B001 20.05.21) +//#define GxEPD2_DRIVER_CLASS GxEPD2_213 // GDE0213B1 122x250, IL3895, (HINK-E0213-G01), phased out +//#define GxEPD2_DRIVER_CLASS GxEPD2_213_B72 // GDEH0213B72 122x250, SSD1675A (IL3897), (HINK-E0213A22-A0 SLH1852) +//#define GxEPD2_DRIVER_CLASS GxEPD2_213_B73 // GDEH0213B73 122x250, SSD1675B, (HINK-E0213A22-A0 SLH1914) +//#define GxEPD2_DRIVER_CLASS GxEPD2_213_B74 // GDEM0213B74 122x250, SSD1680, FPC-7528B) +//#define GxEPD2_DRIVER_CLASS GxEPD2_213_flex // GDEW0213I5F 104x212, UC8151 (IL0373), (WFT0213CZ16) +//#define GxEPD2_DRIVER_CLASS GxEPD2_213_M21 // GDEW0213M21 104x212, UC8151 (IL0373), (WFT0213CZ16) +//#define GxEPD2_DRIVER_CLASS GxEPD2_213_T5D // GDEW0213T5D 104x212, UC8151D, (WFT0213CZ16) +//#define GxEPD2_DRIVER_CLASS GxEPD2_213_BN // DEPG0213BN 122x250, SSD1680, (FPC-7528B), TTGO T5 V2.4.1, V2.3.1 +//#define GxEPD2_DRIVER_CLASS GxEPD2_213_GDEY0213B74 // GDEY0213B74 122x250, SSD1680, (FPC-A002 20.04.08) +//#define GxEPD2_DRIVER_CLASS GxEPD2_260 // GDEW026T0 152x296, UC8151 (IL0373), (WFT0154CZ17) +//#define GxEPD2_DRIVER_CLASS GxEPD2_260_M01 // GDEW026M01 152x296, UC8151 (IL0373), (WFT0260CZB2) +//#define GxEPD2_DRIVER_CLASS GxEPD2_266_BN // DEPG0266BN 152x296, SSD1680, (FPC7510), TTGO T5 V2.66, TTGO T5 V2.4.1 +//#define GxEPD2_DRIVER_CLASS GxEPD2_266_GDEY0266T90 // GDEY0266T90 152x296, SSD1680, (FPC-A003 HB) +//#define GxEPD2_DRIVER_CLASS GxEPD2_270 // GDEW027W3 176x264, EK79652 (IL91874), (WFI0190CZ22) +//#define GxEPD2_DRIVER_CLASS GxEPD2_270_GDEY027T91 // GDEY027T91 176x264, SSD1680, (FB) +//#define GxEPD2_DRIVER_CLASS GxEPD2_290 // GDEH029A1 128x296, SSD1608 (IL3820), (E029A01-FPC-A1 SYX1553) +//#define GxEPD2_DRIVER_CLASS GxEPD2_290_T5 // GDEW029T5 128x296, UC8151 (IL0373), (WFT0290CZ10) +//#define GxEPD2_DRIVER_CLASS GxEPD2_290_T5D // GDEW029T5D 128x296, UC8151D, (WFT0290CZ10) +//#define GxEPD2_DRIVER_CLASS GxEPD2_290_I6FD // GDEW029I6FD 128x296, UC8151D, (WFT0290CZ10) +//#define GxEPD2_DRIVER_CLASS GxEPD2_290_T94 // GDEM029T94 128x296, SSD1680, (FPC-7519 rev.b) +//#define GxEPD2_DRIVER_CLASS GxEPD2_290_T94_V2 // GDEM029T94 128x296, SSD1680, (FPC-7519 rev.b), Waveshare 2.9" V2 variant +//#define GxEPD2_DRIVER_CLASS GxEPD2_290_BS // DEPG0290BS 128x296, SSD1680, (FPC-7519 rev.b) +//#define GxEPD2_DRIVER_CLASS GxEPD2_290_M06 // GDEW029M06 128x296, UC8151D, (WFT0290CZ10) +//#define GxEPD2_DRIVER_CLASS GxEPD2_290_GDEY029T94 // GDEY029T94 128x296, SSD1680, (FPC-A005 20.06.15) +//#define GxEPD2_DRIVER_CLASS GxEPD2_371 // GDEW0371W7 240x416, UC8171 (IL0324), (missing) +//#define GxEPD2_DRIVER_CLASS GxEPD2_370_TC1 // ED037TC1 280x480, SSD1677, (ICA-FU-20 ichia 2029), Waveshare 3.7" +//#define GxEPD2_DRIVER_CLASS GxEPD2_420 // GDEW042T2 400x300, UC8176 (IL0398), (WFT042CZ15) +//#define GxEPD2_DRIVER_CLASS GxEPD2_420_M01 // GDEW042M01 400x300, UC8176 (IL0398), (WFT042CZ15) +//#define GxEPD2_DRIVER_CLASS GxEPD2_420_GDEY042T81 // GDEY042T81 400x300, SSD1683 (no inking) +//#define GxEPD2_DRIVER_CLASS GxEPD2_426_GDEQ0426T82 // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) +//#define GxEPD2_DRIVER_CLASS GxEPD2_583 // GDEW0583T7 600x448, UC8159c (IL0371), (missing) +//#define GxEPD2_DRIVER_CLASS GxEPD2_583_T8 // GDEW0583T8 648x480, EK79655 (GD7965), (WFT0583CZ61) +//#define GxEPD2_DRIVER_CLASS GxEPD2_583_GDEQ0583T31 // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) +//#define GxEPD2_DRIVER_CLASS GxEPD2_750 // GDEW075T8 640x384, UC8159c (IL0371), (WF0583CZ09) +//#define GxEPD2_DRIVER_CLASS GxEPD2_750_T7 // GDEW075T7 800x480, EK79655 (GD7965), (WFT0583CZ61) +//#define GxEPD2_DRIVER_CLASS GxEPD2_750_YT7 // GDEY075T7 800x480, UC8179 (GD7965), (FPC-C001 20.8.20) +//#define GxEPD2_DRIVER_CLASS GxEPD2_1160_T91 // GDEH116T91 960x640, SSD1677, (none or hidden) +//#define GxEPD2_DRIVER_CLASS GxEPD2_1248 // GDEW1248T3 1304x984, UC8179, (WFT1248BZ23,WFT1248BZ24) +// 3-color e-papers +//#define GxEPD2_DRIVER_CLASS GxEPD2_154c // GDEW0154Z04 200x200, IL0376F, (WFT0000CZ04), no longer available +//#define GxEPD2_DRIVER_CLASS GxEPD2_154_Z90c // GDEH0154Z90 200x200, SSD1681, (HINK-E154A07-A1) +//#define GxEPD2_DRIVER_CLASS GxEPD2_213c // GDEW0213Z16 104x212, UC8151 (IL0373), (WFT0213CZ16) +//#define GxEPD2_DRIVER_CLASS GxEPD2_213_Z19c // GDEH0213Z19 104x212, UC8151D, (HINK-E0213A20-A2 2020-11-19) +//#define GxEPD2_DRIVER_CLASS GxEPD2_213_Z98c // GDEY0213Z98 122x250, SSD1680, (FPC-A002 20.04.08) +//#define GxEPD2_DRIVER_CLASS GxEPD2_266c // GDEY0266Z90 152x296, SSD1680, (FPC-7510) +//#define GxEPD2_DRIVER_CLASS GxEPD2_270c // GDEW027C44 176x264, IL91874, (WFI0190CZ22) +//#define GxEPD2_DRIVER_CLASS GxEPD2_290c // GDEW029Z10 128x296, UC8151 (IL0373), (WFT0290CZ10) +//#define GxEPD2_DRIVER_CLASS GxEPD2_290_Z13c // GDEH029Z13 128x296, UC8151D, (HINK-E029A10-A3 20160809) +//#define GxEPD2_DRIVER_CLASS GxEPD2_290_C90c // GDEM029C90 128x296, SSD1680, (FPC-7519 rev.b) +//#define GxEPD2_DRIVER_CLASS GxEPD2_420c // GDEW042Z15 400x300, UC8176 (IL0398), (WFT0420CZ15) +//#define GxEPD2_DRIVER_CLASS GxEPD2_420c_Z21 // GDEQ042Z21 400x300, UC8276, (hidden) +//#define GxEPD2_DRIVER_CLASS GxEPD2_583c // GDEW0583Z21 600x448, UC8159c (IL0371), (missing) +//#define GxEPD2_DRIVER_CLASS GxEPD2_583c_Z83 // GDEW0583Z83 648x480, EK79655 (GD7965), (WFT0583CZ61) +//#define GxEPD2_DRIVER_CLASS GxEPD2_750c // GDEW075Z09 640x384, UC8159c (IL0371), (WF0583CZ09) +//#define GxEPD2_DRIVER_CLASS GxEPD2_750c_Z08 // GDEW075Z08 800x480, EK79655 (GD7965), (WFT0583CZ61) +//#define GxEPD2_DRIVER_CLASS GxEPD2_750c_Z90 // GDEH075Z90 880x528, SSD1677, (HINK-E075A07-A0) +//#define GxEPD2_DRIVER_CLASS GxEPD2_1248c // GDEY1248Z51 1304x984, UC8179, (WFT1248BZ23,WFT1248BZ24) +// 4-color e-paper +//#define GxEPD2_DRIVER_CLASS GxEPD2_266c_GDEY0266F51H // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//#define GxEPD2_DRIVER_CLASS GxEPD2_290c_GDEY029F51H // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//#define GxEPD2_DRIVER_CLASS GxEPD2_300c // Waveshare 3.00" 4-color +//#define GxEPD2_DRIVER_CLASS GxEPD2_420c_GDEY0420F51 // GDEY0420F51 400x300, HX8717 (no inking) +//#define GxEPD2_DRIVER_CLASS GxEPD2_437c // Waveshare 4.37" 4-color +// 7-color e-paper +//#define GxEPD2_DRIVER_CLASS GxEPD2_565c // Waveshare 5.65" 7-color +//#define GxEPD2_DRIVER_CLASS GxEPD2_730c_GDEY073D46 // GDEY073D46 800x480 7-color, (N-FPC-001 2021.11.26) +// grey levels parallel IF e-papers on Waveshare e-Paper IT8951 Driver HAT +//#define GxEPD2_DRIVER_CLASS GxEPD2_it60 // ED060SCT 800x600 +//#define GxEPD2_DRIVER_CLASS GxEPD2_it60_1448x1072 // ED060KC1 1448x1072 +//#define GxEPD2_DRIVER_CLASS GxEPD2_it78_1872x1404 // ED078KC2 1872x1404 +//#define GxEPD2_DRIVER_CLASS GxEPD2_it103_1872x1404 // ES103TC1 1872x1404 + +// SS is usually used for CS. define here for easy change +#ifndef EPD_CS +#define EPD_CS SS +#endif + +#if defined(GxEPD2_DISPLAY_CLASS) && defined(GxEPD2_DRIVER_CLASS) + +// somehow there should be an easier way to do this +#define GxEPD2_BW_IS_GxEPD2_BW true +#define GxEPD2_3C_IS_GxEPD2_3C true +#define GxEPD2_4C_IS_GxEPD2_4C true +#define GxEPD2_7C_IS_GxEPD2_7C true +#define GxEPD2_1248_IS_GxEPD2_1248 true +#define GxEPD2_1248c_IS_GxEPD2_1248c true +#define IS_GxEPD(c, x) (c##x) +#define IS_GxEPD2_BW(x) IS_GxEPD(GxEPD2_BW_IS_, x) +#define IS_GxEPD2_3C(x) IS_GxEPD(GxEPD2_3C_IS_, x) +#define IS_GxEPD2_4C(x) IS_GxEPD(GxEPD2_4C_IS_, x) +#define IS_GxEPD2_7C(x) IS_GxEPD(GxEPD2_7C_IS_, x) +#define IS_GxEPD2_1248(x) IS_GxEPD(GxEPD2_1248_IS_, x) +#define IS_GxEPD2_1248c(x) IS_GxEPD(GxEPD2_1248c_IS_, x) + +#include "GxEPD2_selection_check.h" + +#if defined (ESP8266) +#define MAX_DISPLAY_BUFFER_SIZE (81920ul-34000ul-5000ul) // ~34000 base use, change 5000 to your application use +#if IS_GxEPD2_BW(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8) ? EPD::HEIGHT : MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8)) +#elif IS_GxEPD2_3C(GxEPD2_DISPLAY_CLASS) || IS_GxEPD2_4C(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8)) +#elif IS_GxEPD2_7C(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2)) +#endif +// adapt the constructor parameters to your wiring +GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=D8*/ EPD_CS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); +// mapping of Waveshare e-Paper ESP8266 Driver Board, new version +//GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=15*/ EPD_CS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); +// mapping of Waveshare e-Paper ESP8266 Driver Board, old version +//GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=15*/ EPD_CS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); +#undef MAX_DISPLAY_BUFFER_SIZE +#undef MAX_HEIGHT +#endif + +#if defined(ESP32) +#define MAX_DISPLAY_BUFFER_SIZE 65536ul // e.g. +#if IS_GxEPD2_BW(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8) ? EPD::HEIGHT : MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8)) +#elif IS_GxEPD2_3C(GxEPD2_DISPLAY_CLASS) || IS_GxEPD2_4C(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8)) +#elif IS_GxEPD2_7C(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2)) +#endif +// adapt the constructor parameters to your wiring +#if !IS_GxEPD2_1248(GxEPD2_DRIVER_CLASS) && !IS_GxEPD2_1248c(GxEPD2_DRIVER_CLASS) +#if defined(ARDUINO_LOLIN_D32_PRO) +GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=5*/ EPD_CS, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // my LOLIN_D32_PRO proto board +#else +GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=5*/ EPD_CS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // my suggested wiring and proto board +//GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=5*/ 5, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // LILYGO_T5_V2.4.1 +//GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=5*/ EPD_CS, /*DC=*/ 19, /*RST=*/ 4, /*BUSY=*/ 34)); // LILYGO® TTGO T5 2.66 +//GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=5*/ EPD_CS, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // e.g. TTGO T8 ESP32-WROVER +//GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // Waveshare ESP32 Driver Board +#endif +#else // GxEPD2_1248 or GxEPD2_1248c +// Waveshare 12.48 b/w or b/w/r SPI display board and frame or Good Display 12.48 b/w panel GDEW1248T3 or b/w/r panel GDEY1248Z51 +// general constructor for use with all parameters, e.g. for Waveshare ESP32 driver board mounted on connection board +GxEPD2_DISPLAY_CLASS < GxEPD2_DRIVER_CLASS, MAX_HEIGHT(GxEPD2_DRIVER_CLASS) > display(GxEPD2_DRIVER_CLASS(/*sck=*/ 13, /*miso=*/ 12, /*mosi=*/ 14, + /*cs_m1=*/ 23, /*cs_s1=*/ 22, /*cs_m2=*/ 16, /*cs_s2=*/ 19, + /*dc1=*/ 25, /*dc2=*/ 17, /*rst1=*/ 33, /*rst2=*/ 5, + /*busy_m1=*/ 32, /*busy_s1=*/ 26, /*busy_m2=*/ 18, /*busy_s2=*/ 4)); +#endif +#undef MAX_DISPLAY_BUFFER_SIZE +#undef MAX_HEIGHT +#endif + +// can't use package "STMF1 Boards (STM32Duino.com)" (Roger Clark) anymore with Adafruit_GFX, use "STM32 Boards (selected from submenu)" (STMicroelectronics) +#if defined(ARDUINO_ARCH_STM32) +#define MAX_DISPLAY_BUFFER_SIZE 15000ul // ~15k is a good compromise +#if IS_GxEPD2_BW(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8) ? EPD::HEIGHT : MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8)) +#elif IS_GxEPD2_3C(GxEPD2_DISPLAY_CLASS) || IS_GxEPD2_4C(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8)) +#elif IS_GxEPD2_7C(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2)) +#endif +// adapt the constructor parameters to your wiring +GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=PA4*/ EPD_CS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); +#undef MAX_DISPLAY_BUFFER_SIZE +#undef MAX_HEIGHT +#endif + +#if defined(__AVR) +#if defined (ARDUINO_AVR_MEGA2560) // Note: SS is on 53 on MEGA +#define MAX_DISPLAY_BUFFER_SIZE 5000 // e.g. full height for 200x200 +#else // Note: SS is on 10 on UNO, NANO +#define MAX_DISPLAY_BUFFER_SIZE 800 // +#endif +#if IS_GxEPD2_BW(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8) ? EPD::HEIGHT : MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8)) +#elif IS_GxEPD2_3C(GxEPD2_DISPLAY_CLASS) || IS_GxEPD2_4C(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8)) +#elif IS_GxEPD2_7C(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2)) +#endif +// adapt the constructor parameters to your wiring +GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ EPD_CS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); +// for Arduino Micro or Arduino Leonardo with CS on 10 on my proto boards (SS would be 17) uncomment instead: +//GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ 10, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); +#endif + +#if defined(ARDUINO_UNOR4_MINIMA) || defined(ARDUINO_UNOR4_WIFI) +#define MAX_DISPLAY_BUFFER_SIZE 16384ul // e.g. half of available RAM +#if IS_GxEPD2_BW(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8) ? EPD::HEIGHT : MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8)) +#elif IS_GxEPD2_3C(GxEPD2_DISPLAY_CLASS) || IS_GxEPD2_4C(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8)) +#elif IS_GxEPD2_7C(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2)) +#endif +// adapt the constructor parameters to your wiring +GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ EPD_CS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); +#endif + +#if defined(ARDUINO_ARCH_SAM) +#define MAX_DISPLAY_BUFFER_SIZE 32768ul // e.g., up to 96k +#if IS_GxEPD2_BW(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8) ? EPD::HEIGHT : MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8)) +#elif IS_GxEPD2_3C(GxEPD2_DISPLAY_CLASS) || IS_GxEPD2_4C(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8)) +#elif IS_GxEPD2_7C(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2)) +#endif +// adapt the constructor parameters to your wiring +GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=10*/ EPD_CS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); +#undef MAX_DISPLAY_BUFFER_SIZE +#undef MAX_HEIGHT +#endif + +#if defined(ARDUINO_ARCH_SAMD) +#define MAX_DISPLAY_BUFFER_SIZE 15000ul // ~15k is a good compromise +#if IS_GxEPD2_BW(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8) ? EPD::HEIGHT : MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8)) +#elif IS_GxEPD2_3C(GxEPD2_DISPLAY_CLASS) || IS_GxEPD2_4C(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8)) +#elif IS_GxEPD2_7C(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2)) +#endif +// adapt the constructor parameters to your wiring +GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); +//GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=4*/ 4, /*DC=*/ 3, /*RST=*/ 2, /*BUSY=*/ 1)); // my Seed XIOA0 +//GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=4*/ 3, /*DC=*/ 2, /*RST=*/ 1, /*BUSY=*/ 0)); // my other Seed XIOA0 +#undef MAX_DISPLAY_BUFFER_SIZE +#undef MAX_HEIGHT +#endif + +#if defined(ARDUINO_ARCH_RP2040) +#define MAX_DISPLAY_BUFFER_SIZE 131072ul // e.g. half of available ram +#if IS_GxEPD2_BW(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8) ? EPD::HEIGHT : MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8)) +#elif IS_GxEPD2_3C(GxEPD2_DISPLAY_CLASS) || IS_GxEPD2_4C(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8)) +#elif IS_GxEPD2_7C(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2)) +#endif +#if defined(ARDUINO_NANO_RP2040_CONNECT) +// adapt the constructor parameters to your wiring +GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ EPD_CS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); +#endif +#if defined(ARDUINO_RASPBERRY_PI_PICO) +// adapt the constructor parameters to your wiring +//GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ EPD_CS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // my proto board +// mapping of GoodDisplay DESPI-PICO. NOTE: uses alternate HW SPI pins! +GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ 3, /*DC=*/ 2, /*RST=*/ 1, /*BUSY=*/ 0)); // DESPI-PICO +//GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ 3, /*DC=*/ 2, /*RST=*/ 11, /*BUSY=*/ 10)); // DESPI-PICO modified +#endif +#if defined(ARDUINO_ADAFRUIT_FEATHER_RP2040_THINKINK) +// Adafruit Feather RP2040 ThinkInk used with package https://github.com/earlephilhower/arduino-pico +GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ PIN_EPD_CS, /*DC=*/ PIN_EPD_DC, /*RST=*/ PIN_EPD_RESET, /*BUSY=*/ PIN_EPD_BUSY)); +#endif +#undef MAX_DISPLAY_BUFFER_SIZE +#undef MAX_HEIGHT +#endif + +#endif diff --git a/examples/GxEPD2_WiFi_Example/GxEPD2_selection_check.h b/examples/GxEPD2_WiFi_Example/GxEPD2_selection_check.h new file mode 100644 index 00000000..dba0e51c --- /dev/null +++ b/examples/GxEPD2_WiFi_Example/GxEPD2_selection_check.h @@ -0,0 +1,111 @@ +// Display Library example for SPI e-paper panels from Dalian Good Display and boards from Waveshare. +// Requires HW SPI and Adafruit_GFX. Caution: the e-paper panels require 3.3V supply AND data lines! +// +// Display Library based on Demo Example from Good Display: http://www.e-paper-display.com/download_list/downloadcategoryid=34&isMode=false.html +// +// Author: Jean-Marc Zingg +// +// Version: see library.properties +// +// Library: https://github.com/ZinggJM/GxEPD2 + +// Supporting Arduino Forum Topics: +// Waveshare e-paper displays with SPI: http://forum.arduino.cc/index.php?topic=487007.0 +// Good Display ePaper for Arduino: https://forum.arduino.cc/index.php?topic=436411.0 + +#define GxEPD2_102_IS_BW true +#define GxEPD2_150_BN_IS_BW true +#define GxEPD2_154_IS_BW true +#define GxEPD2_154_D67_IS_BW true +#define GxEPD2_154_T8_IS_BW true +#define GxEPD2_154_M09_IS_BW true +#define GxEPD2_154_M10_IS_BW true +#define GxEPD2_154_GDEY0154D67_IS_BW true +#define GxEPD2_213_IS_BW true +#define GxEPD2_213_B72_IS_BW true +#define GxEPD2_213_B73_IS_BW true +#define GxEPD2_213_B74_IS_BW true +#define GxEPD2_213_flex_IS_BW true +#define GxEPD2_213_M21_IS_BW true +#define GxEPD2_213_T5D_IS_BW true +#define GxEPD2_213_BN_IS_BW true +#define GxEPD2_213_GDEY0213B74_IS_BW true +#define GxEPD2_260_IS_BW true +#define GxEPD2_260_M01_IS_BW true +#define GxEPD2_266_BN_IS_BW true +#define GxEPD2_266_GDEY0266T90_IS_BW true +#define GxEPD2_270_IS_BW true +#define GxEPD2_270_GDEY027T91_IS_BW true +#define GxEPD2_290_IS_BW true +#define GxEPD2_290_T5_IS_BW true +#define GxEPD2_290_T5D_IS_BW true +#define GxEPD2_290_I6FD_IS_BW true +#define GxEPD2_290_T94_IS_BW true +#define GxEPD2_290_T94_V2_IS_BW true +#define GxEPD2_290_BS_IS_BW true +#define GxEPD2_290_M06_IS_BW true +#define GxEPD2_290_GDEY029T94_IS_BW true +#define GxEPD2_371_IS_BW true +#define GxEPD2_370_TC1_IS_BW true +#define GxEPD2_420_IS_BW true +#define GxEPD2_420_M01_IS_BW true +#define GxEPD2_420_GDEY042T81_IS_BW true +#define GxEPD2_426_GDEQ0426T82_IS_BW true +#define GxEPD2_583_IS_BW true +#define GxEPD2_583_T8_IS_BW true +#define GxEPD2_583_GDEQ0583T31_IS_BW true +#define GxEPD2_750_IS_BW true +#define GxEPD2_750_T7_IS_BW true +#define GxEPD2_750_YT7_IS_BW true +#define GxEPD2_1160_T91_IS_BW true +#define GxEPD2_1248_IS_BW true +#define GxEPD2_it60_IS_BW true +#define GxEPD2_it60_1448x1072_IS_BW true +#define GxEPD2_it78_1872x1404_IS_BW true +#define GxEPD2_it103_1872x1404_IS_BW true +// 3-color e-papers +#define GxEPD2_154c_IS_3C true +#define GxEPD2_154_Z90c_IS_3C true +#define GxEPD2_213c_IS_3C true +#define GxEPD2_213_Z19c_IS_3C true +#define GxEPD2_213_Z98c_IS_3C true +#define GxEPD2_266c_IS_3C true +#define GxEPD2_270c_IS_3C true +#define GxEPD2_290c_IS_3C true +#define GxEPD2_290_Z13c_IS_3C true +#define GxEPD2_290_C90c_IS_3C true +#define GxEPD2_420c_IS_3C true +#define GxEPD2_420c_Z21_IS_3C true +#define GxEPD2_583c_IS_3C true +#define GxEPD2_583c_Z83_IS_3C true +#define GxEPD2_750c_IS_3C true +#define GxEPD2_750c_Z08_IS_3C true +#define GxEPD2_750c_Z90_IS_3C true +#define GxEPD2_1248c_IS_3C true +// 4-color e-paper +#define GxEPD2_266c_GDEY0266F51H_IS_4C true +#define GxEPD2_290c_GDEY029F51H_IS_4C true +#define GxEPD2_300c_IS_4C true +#define GxEPD2_420c_GDEY0420F51_IS_4C true +#define GxEPD2_437c_IS_4C true +// 7-color e-paper +#define GxEPD2_565c_IS_7C true +#define GxEPD2_730c_GDEY073D46_IS_7C true + +#if defined(GxEPD2_DISPLAY_CLASS) && defined(GxEPD2_DRIVER_CLASS) +#define IS_GxEPD2_DRIVER(c, x) (c##x) +#define IS_GxEPD2_DRIVER_BW(x) IS_GxEPD2_DRIVER(x, _IS_BW) +#define IS_GxEPD2_DRIVER_3C(x) IS_GxEPD2_DRIVER(x, _IS_3C) +#define IS_GxEPD2_DRIVER_4C(x) IS_GxEPD2_DRIVER(x, _IS_4C) +#define IS_GxEPD2_DRIVER_7C(x) IS_GxEPD2_DRIVER(x, _IS_7C) +#if IS_GxEPD2_BW(GxEPD2_DISPLAY_CLASS) && IS_GxEPD2_DRIVER_3C(GxEPD2_DRIVER_CLASS) +#error "GxEPD2_BW used with 3-color driver class" +#endif +#if IS_GxEPD2_3C(GxEPD2_DISPLAY_CLASS) && IS_GxEPD2_DRIVER_BW(GxEPD2_DRIVER_CLASS) +#error "GxEPD2_3C used with b/w driver class" +#endif +#if !IS_GxEPD2_DRIVER_BW(GxEPD2_DRIVER_CLASS) && !IS_GxEPD2_DRIVER_3C(GxEPD2_DRIVER_CLASS) && !IS_GxEPD2_DRIVER_4C(GxEPD2_DRIVER_CLASS) && !IS_GxEPD2_DRIVER_7C(GxEPD2_DRIVER_CLASS) +#error "neither BW nor 3C nor 4C nor 7C kind defined for driver class (error in GxEPD2_selection_check.h)" +#endif + +#endif diff --git a/examples/GxEPD2_WiFi_Example/GxEPD2_wiring_examples.h b/examples/GxEPD2_WiFi_Example/GxEPD2_wiring_examples.h index 97ab8963..e91ce735 100644 --- a/examples/GxEPD2_WiFi_Example/GxEPD2_wiring_examples.h +++ b/examples/GxEPD2_WiFi_Example/GxEPD2_wiring_examples.h @@ -16,7 +16,7 @@ // mapping suggestion from Waveshare SPI e-Paper to Wemos D1 mini // BUSY -> D2, RST -> D4, DC -> D3, CS -> D8, CLK -> D5, DIN -> D7, GND -> GND, 3.3V -> 3.3V // NOTE: connect 3.3k pull-down from D8 to GND if your board or shield has level converters -// NOTE for ESP8266: using SS (GPIO15) for CS may cause boot mode problems, use different pin in case, or 4k7 pull-down +// NOTE for ESP8266: using SS (GPIO15) for CS may cause boot mode problems, use different pin in case, or 3.3k pull-down // NOTE: connect 1k pull-up from D4 (RST) to 3.3V if your board or shield has the "clever" reset circuit, or use a different pin // mapping suggestion from Waveshare SPI e-Paper to generic ESP8266 @@ -76,8 +76,11 @@ // note: can't use SS on MKR1000: is defined as 24, should be 4 // BUSY -> 5, RST -> 6, DC -> 7, CS-> 4, CLK -> 9, DIN -> 8 -// mapping suggestion for Arduino Nano RP2040 Connect +// mapping suggestion for Arduino Nano RP2040 Connect (Arduino MBED OS Nano Boards) // BUSY -> 7, RST -> 9, DC -> 8, CS-> 10, CLK -> 13, DIN -> 11 -// mapping suggestion for Raspberry Pi Pico RP2040 +// mapping suggestion for Raspberry Pi Pico RP2040 (Arduino MBED OS RP2040 Boards) +// BUSY -> 7, RST -> 9, DC -> 8, CS-> 5, CLK -> 18, DIN -> 19 + +// mapping of my proto board for Raspberry Pi Pico RP2040 (previous default SPI pins) // BUSY -> 7, RST -> 9, DC -> 8, CS-> 5, CLK -> 2, DIN -> 3 diff --git a/extras/sw_spi/src/GxEPD2_EPD.cpp b/extras/sw_spi/src/GxEPD2_EPD.cpp index df22045a..d1d7817f 100644 --- a/extras/sw_spi/src/GxEPD2_EPD.cpp +++ b/extras/sw_spi/src/GxEPD2_EPD.cpp @@ -38,6 +38,7 @@ GxEPD2_EPD::GxEPD2_EPD(int16_t cs, int16_t dc, int16_t rst, int16_t busy, int16_ _power_is_on = false; _using_partial_mode = false; _hibernating = false; + _init_display_done = false; _reset_duration = 20; } @@ -54,6 +55,7 @@ void GxEPD2_EPD::init(uint32_t serial_diag_bitrate, bool initial, uint16_t reset _power_is_on = false; _using_partial_mode = false; _hibernating = false; + _init_display_done = false; _reset_duration = reset_duration; if (serial_diag_bitrate > 0) { @@ -92,6 +94,15 @@ void GxEPD2_EPD::init(int16_t sck, int16_t mosi, uint32_t serial_diag_bitrate, b init(serial_diag_bitrate, initial, reset_duration, pulldown_rst_mode); } +void GxEPD2_EPD::end() +{ + pinMode(_sck, INPUT); + pinMode(_mosi, INPUT); + if (_cs >= 0) pinMode(_cs, INPUT); + if (_dc >= 0) pinMode(_dc, INPUT); + if (_rst >= 0) pinMode(_rst, INPUT); +} + void GxEPD2_EPD::_reset() { if (_rst >= 0) diff --git a/extras/sw_spi/src/GxEPD2_EPD.h b/extras/sw_spi/src/GxEPD2_EPD.h index 932b51af..14ea4c76 100644 --- a/extras/sw_spi/src/GxEPD2_EPD.h +++ b/extras/sw_spi/src/GxEPD2_EPD.h @@ -45,6 +45,7 @@ class GxEPD2_EPD virtual void init(uint32_t serial_diag_bitrate = 0); // serial_diag_bitrate = 0 : disabled virtual void init(uint32_t serial_diag_bitrate, bool initial, uint16_t reset_duration = 20, bool pulldown_rst_mode = false); virtual void init(int16_t sck, int16_t mosi, uint32_t serial_diag_bitrate, bool initial, uint16_t reset_duration = 20, bool pulldown_rst_mode = false); + virtual void end(); // release SPI and control pins // Support for Bitmaps (Sprites) to Controller Buffer and to Screen virtual void clearScreen(uint8_t value) = 0; // init controller memory and screen (default white) virtual void writeScreenBuffer(uint8_t value) = 0; // init controller memory (default white) @@ -129,6 +130,7 @@ class GxEPD2_EPD SPISettings _spi_settings; bool _initial_write, _initial_refresh; bool _power_is_on, _using_partial_mode, _hibernating; + bool _init_display_done; uint16_t _reset_duration; }; diff --git a/extras/tests/GxEPD2_MinimumExample/GxEPD2_display_selection_new_style.h b/extras/tests/GxEPD2_MinimumExample/GxEPD2_display_selection_new_style.h index 08457b19..764ef7a7 100644 --- a/extras/tests/GxEPD2_MinimumExample/GxEPD2_display_selection_new_style.h +++ b/extras/tests/GxEPD2_MinimumExample/GxEPD2_display_selection_new_style.h @@ -58,7 +58,8 @@ //#define GxEPD2_DRIVER_CLASS GxEPD2_370_TC1 // ED037TC1 280x480, SSD1677, (ICA-FU-20 ichia 2029), Waveshare 3.7" //#define GxEPD2_DRIVER_CLASS GxEPD2_420 // GDEW042T2 400x300, UC8176 (IL0398), (WFT042CZ15) //#define GxEPD2_DRIVER_CLASS GxEPD2_420_M01 // GDEW042M01 400x300, UC8176 (IL0398), (WFT042CZ15) -//#define GxEPD2_DRIVER_CLASS GxEPD2_420_GDEY042T91 // GDEY042T91 400x300, SSD1683 (no inking) +//#define GxEPD2_DRIVER_CLASS GxEPD2_420_GDEY042T81 // GDEY042T81 400x300, SSD1683 (no inking) +//#define GxEPD2_DRIVER_CLASS GxEPD2_426_GDEQ0426T82 // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //#define GxEPD2_DRIVER_CLASS GxEPD2_583 // GDEW0583T7 600x448, UC8159c (IL0371), (missing) //#define GxEPD2_DRIVER_CLASS GxEPD2_583_T8 // GDEW0583T8 648x480, EK79655 (GD7965), (WFT0583CZ61) //#define GxEPD2_DRIVER_CLASS GxEPD2_583_GDEQ0583T31 // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -87,6 +88,10 @@ //#define GxEPD2_DRIVER_CLASS GxEPD2_750c_Z90 // GDEH075Z90 880x528, SSD1677, (HINK-E075A07-A0) //#define GxEPD2_DRIVER_CLASS GxEPD2_1248c // GDEY1248Z51 1304x984, UC8179, (WFT1248BZ23,WFT1248BZ24) // 4-color e-paper +//#define GxEPD2_DRIVER_CLASS GxEPD2_266c_GDEY0266F51H // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//#define GxEPD2_DRIVER_CLASS GxEPD2_290c_GDEY029F51H // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//#define GxEPD2_DRIVER_CLASS GxEPD2_300c // Waveshare 3.00" 4-color +//#define GxEPD2_DRIVER_CLASS GxEPD2_420c_GDEY0420F51 // GDEY0420F51 400x300, HX8717 (no inking) //#define GxEPD2_DRIVER_CLASS GxEPD2_437c // Waveshare 4.37" 4-color // 7-color e-paper //#define GxEPD2_DRIVER_CLASS GxEPD2_565c // Waveshare 5.65" 7-color @@ -207,11 +212,24 @@ GxEPD2_DISPLAY_CLASS displ //GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ 10, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); #endif +#if defined(ARDUINO_UNOR4_MINIMA) || defined(ARDUINO_UNOR4_WIFI) +#define MAX_DISPLAY_BUFFER_SIZE 16384ul // e.g. half of available RAM +#if IS_GxEPD2_BW(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8) ? EPD::HEIGHT : MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8)) +#elif IS_GxEPD2_3C(GxEPD2_DISPLAY_CLASS) || IS_GxEPD2_4C(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8)) +#elif IS_GxEPD2_7C(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2)) +#endif +// adapt the constructor parameters to your wiring +GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ EPD_CS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); +#endif + #if defined(ARDUINO_ARCH_SAM) #define MAX_DISPLAY_BUFFER_SIZE 32768ul // e.g., up to 96k #if IS_GxEPD2_BW(GxEPD2_DISPLAY_CLASS) #define MAX_HEIGHT(EPD) (EPD::HEIGHT <= MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8) ? EPD::HEIGHT : MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8)) -#elif IS_GxEPD2_3C(GxEPD2_DISPLAY_CLASS) +#elif IS_GxEPD2_3C(GxEPD2_DISPLAY_CLASS) || IS_GxEPD2_4C(GxEPD2_DISPLAY_CLASS) #define MAX_HEIGHT(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8)) #elif IS_GxEPD2_7C(GxEPD2_DISPLAY_CLASS) #define MAX_HEIGHT(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2)) @@ -259,6 +277,10 @@ GxEPD2_DISPLAY_CLASS displ GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ 3, /*DC=*/ 2, /*RST=*/ 1, /*BUSY=*/ 0)); // DESPI-PICO //GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ 3, /*DC=*/ 2, /*RST=*/ 11, /*BUSY=*/ 10)); // DESPI-PICO modified #endif +#if defined(ARDUINO_ADAFRUIT_FEATHER_RP2040_THINKINK) +// Adafruit Feather RP2040 ThinkInk used with package https://github.com/earlephilhower/arduino-pico +GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ PIN_EPD_CS, /*DC=*/ PIN_EPD_DC, /*RST=*/ PIN_EPD_RESET, /*BUSY=*/ PIN_EPD_BUSY)); +#endif #undef MAX_DISPLAY_BUFFER_SIZE #undef MAX_HEIGHT #endif diff --git a/extras/tests/GxEPD2_MinimumExample/GxEPD2_selection_check.h b/extras/tests/GxEPD2_MinimumExample/GxEPD2_selection_check.h index df552f0a..dba0e51c 100644 --- a/extras/tests/GxEPD2_MinimumExample/GxEPD2_selection_check.h +++ b/extras/tests/GxEPD2_MinimumExample/GxEPD2_selection_check.h @@ -49,7 +49,8 @@ #define GxEPD2_370_TC1_IS_BW true #define GxEPD2_420_IS_BW true #define GxEPD2_420_M01_IS_BW true -#define GxEPD2_420_GDEY042T91_IS_BW true +#define GxEPD2_420_GDEY042T81_IS_BW true +#define GxEPD2_426_GDEQ0426T82_IS_BW true #define GxEPD2_583_IS_BW true #define GxEPD2_583_T8_IS_BW true #define GxEPD2_583_GDEQ0583T31_IS_BW true @@ -82,6 +83,10 @@ #define GxEPD2_750c_Z90_IS_3C true #define GxEPD2_1248c_IS_3C true // 4-color e-paper +#define GxEPD2_266c_GDEY0266F51H_IS_4C true +#define GxEPD2_290c_GDEY029F51H_IS_4C true +#define GxEPD2_300c_IS_4C true +#define GxEPD2_420c_GDEY0420F51_IS_4C true #define GxEPD2_437c_IS_4C true // 7-color e-paper #define GxEPD2_565c_IS_7C true diff --git a/extras/tests/GxEPD2_MinimumExample/GxEPD2_wiring_examples.h b/extras/tests/GxEPD2_MinimumExample/GxEPD2_wiring_examples.h index 97ab8963..e91ce735 100644 --- a/extras/tests/GxEPD2_MinimumExample/GxEPD2_wiring_examples.h +++ b/extras/tests/GxEPD2_MinimumExample/GxEPD2_wiring_examples.h @@ -16,7 +16,7 @@ // mapping suggestion from Waveshare SPI e-Paper to Wemos D1 mini // BUSY -> D2, RST -> D4, DC -> D3, CS -> D8, CLK -> D5, DIN -> D7, GND -> GND, 3.3V -> 3.3V // NOTE: connect 3.3k pull-down from D8 to GND if your board or shield has level converters -// NOTE for ESP8266: using SS (GPIO15) for CS may cause boot mode problems, use different pin in case, or 4k7 pull-down +// NOTE for ESP8266: using SS (GPIO15) for CS may cause boot mode problems, use different pin in case, or 3.3k pull-down // NOTE: connect 1k pull-up from D4 (RST) to 3.3V if your board or shield has the "clever" reset circuit, or use a different pin // mapping suggestion from Waveshare SPI e-Paper to generic ESP8266 @@ -76,8 +76,11 @@ // note: can't use SS on MKR1000: is defined as 24, should be 4 // BUSY -> 5, RST -> 6, DC -> 7, CS-> 4, CLK -> 9, DIN -> 8 -// mapping suggestion for Arduino Nano RP2040 Connect +// mapping suggestion for Arduino Nano RP2040 Connect (Arduino MBED OS Nano Boards) // BUSY -> 7, RST -> 9, DC -> 8, CS-> 10, CLK -> 13, DIN -> 11 -// mapping suggestion for Raspberry Pi Pico RP2040 +// mapping suggestion for Raspberry Pi Pico RP2040 (Arduino MBED OS RP2040 Boards) +// BUSY -> 7, RST -> 9, DC -> 8, CS-> 5, CLK -> 18, DIN -> 19 + +// mapping of my proto board for Raspberry Pi Pico RP2040 (previous default SPI pins) // BUSY -> 7, RST -> 9, DC -> 8, CS-> 5, CLK -> 2, DIN -> 3 diff --git a/extras/tests/GxEPD2_RefreshTests/GxEPD2_display_selection.h b/extras/tests/GxEPD2_RefreshTests/GxEPD2_display_selection.h index 35a76de1..2f471c8a 100644 --- a/extras/tests/GxEPD2_RefreshTests/GxEPD2_display_selection.h +++ b/extras/tests/GxEPD2_RefreshTests/GxEPD2_display_selection.h @@ -50,7 +50,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) // can use only half buffer size //GxEPD2_BW < GxEPD2_583, GxEPD2_583::HEIGHT / 2 > display(GxEPD2_583(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW < GxEPD2_583_T8, GxEPD2_583_T8::HEIGHT / 2 > display(GxEPD2_583_T8(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEW0583T8 648x480, EK79655 (GD7965) @@ -80,6 +81,10 @@ //GxEPD2_3C < GxEPD2_750c_Z08, GxEPD2_750c_Z08::HEIGHT / 4 > display(GxEPD2_750c_Z08(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C < GxEPD2_750c_Z90, GxEPD2_750c_Z90::HEIGHT / 4 > display(GxEPD2_750c_Z90(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEY0420F51 400x300, HX8717 (no inking) //GxEPD2_4C < GxEPD2_437c, GxEPD2_437c::HEIGHT / 4 > display(GxEPD2_437c(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // Waveshare 4.37" 4-color // 7-color e-paper //GxEPD2_3C < GxEPD2_565c, GxEPD2_565c::HEIGHT / 4 > display(GxEPD2_565c(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // Waveshare 5.65" 7-color (3C graphics) @@ -129,7 +134,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) // can use only half buffer size //GxEPD2_BW < GxEPD2_583, GxEPD2_583::HEIGHT / 2 > display(GxEPD2_583(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW < GxEPD2_583_T8, GxEPD2_583_T8::HEIGHT / 2 > display(GxEPD2_583_T8(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // GDEW0583T8 648x480, EK79655 (GD7965) @@ -159,6 +165,10 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // GDEY0420F51 400x300, HX8717 (no inking) //GxEPD2_4C < GxEPD2_437c, GxEPD2_437c::HEIGHT / 4 > display(GxEPD2_437c(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // Waveshare 4.37" 4-color // 7-color e-paper //GxEPD2_7C < GxEPD2_565c, GxEPD2_565c::HEIGHT / 4 > display(GxEPD2_565c(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=2*/ 2, /*BUSY=5*/ 5)); // Waveshare 5.65" 7-color @@ -202,7 +212,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //GxEPD2_BW display(GxEPD2_583(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW display(GxEPD2_583_T8(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEW0583T8 648x480, EK79655 (GD7965) //GxEPD2_BW display(GxEPD2_583_GDEQ0583T31(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -229,7 +240,11 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper -//GxEPD2_4C < GxEPD2_437c, GxEPD2_437c::HEIGHT / 4 > display(GxEPD2_437c(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // Waveshare 4.37" 4-color +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEY0420F51 400x300, HX8717 (no inking) +//GxEPD2_4C display(GxEPD2_437c(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // Waveshare 4.37" 4-color // 7-color e-paper //GxEPD2_3C < GxEPD2_565c, GxEPD2_565c::HEIGHT / 2 > display(GxEPD2_565c(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // Waveshare 5.65" 7-color (3C graphics) //GxEPD2_7C < GxEPD2_565c, GxEPD2_565c::HEIGHT / 2 > display(GxEPD2_565c(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // Waveshare 5.65" 7-color @@ -294,7 +309,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //GxEPD2_BW display(GxEPD2_583(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW display(GxEPD2_583_T8(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // GDEW0583T8 648x480, EK79655 (GD7965) //GxEPD2_BW display(GxEPD2_583_GDEQ0583T31(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -321,6 +337,10 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // GDEY0420F51 400x300, HX8717 (no inking) //GxEPD2_4C < GxEPD2_437c, GxEPD2_437c::HEIGHT / 4 > display(GxEPD2_437c(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // Waveshare 4.37" 4-color // 7-color e-paper //GxEPD2_3C < GxEPD2_565c, GxEPD2_565c::HEIGHT / 2 > display(GxEPD2_565c(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // Waveshare 5.65" 7-color (3C graphics) @@ -368,7 +388,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //GxEPD2_BW display(GxEPD2_583(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW display(GxEPD2_583_T8(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // GDEW0583T8 648x480, EK79655 (GD7965) //GxEPD2_BW display(GxEPD2_583_GDEQ0583T31(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -396,6 +417,10 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // GDEY0420F51 400x300, HX8717 (no inking) //GxEPD2_4C display(GxEPD2_437c(/*CS=PA4*/ SS, /*DC=*/ PA3, /*RST=*/ PA2, /*BUSY=*/ PA1)); // Waveshare 4.37" 4-color // 7-color e-paper #define MAX_HEIGHT_7C(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2)) // 2 pixel per byte @@ -450,7 +475,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //GxEPD2_BW display(GxEPD2_583(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW display(GxEPD2_583_T8(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0583T8 648x480, EK79655 (GD7965) //GxEPD2_BW display(GxEPD2_583_GDEQ0583T31(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -478,6 +504,10 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEY0420F51 400x300, HX8717 (no inking) //GxEPD2_4C display(GxEPD2_437c(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // Waveshare 4.37" 4-color // 7-color e-paper #define MAX_HEIGHT_7C(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2)) // 2 pixel per byte @@ -524,7 +554,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //GxEPD2_BW display(GxEPD2_583(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW display(GxEPD2_583_T8(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // GDEW0583T8 648x480, EK79655 (GD7965) //GxEPD2_BW display(GxEPD2_583_GDEQ0583T31(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -551,6 +582,10 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); //GDEH075Z90 880x528, SSD1677 // 4-color e-paper +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // GDEY0420F51 400x300, HX8717 (no inking) //GxEPD2_4C display(GxEPD2_437c(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // Waveshare 4.37" 4-color // 7-color e-paper //GxEPD2_7C display(GxEPD2_565c(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ 8, /*BUSY=*/ 7)); // Waveshare 5.65" 7-color diff --git a/extras/tests/GxEPD2_RefreshTests/GxEPD2_display_selection_added.h b/extras/tests/GxEPD2_RefreshTests/GxEPD2_display_selection_added.h index 301477b2..d3a14598 100644 --- a/extras/tests/GxEPD2_RefreshTests/GxEPD2_display_selection_added.h +++ b/extras/tests/GxEPD2_RefreshTests/GxEPD2_display_selection_added.h @@ -26,7 +26,7 @@ //GxEPD2_BW display(GxEPD2_150_BN(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // DEPG0150BN 200x200, SSD1681, TTGO T5 V2.4.1 //GxEPD2_BW display(GxEPD2_154(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEP015OC1 200x200, IL3829, no longer available //GxEPD2_BW display(GxEPD2_154_D67(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEH0154D67 200x200, SSD1681 -//GxEPD2_BW display(GxEPD2_154_T8(//*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0154T8 152x152, UC8151 (IL0373) +//GxEPD2_BW display(GxEPD2_154_T8(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0154T8 152x152, UC8151 (IL0373) //GxEPD2_BW display(GxEPD2_154_M09(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0154M09 200x200, JD79653A //GxEPD2_BW display(GxEPD2_154_M10(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0154M10 152x152, UC8151D //GxEPD2_BW display(GxEPD2_154_GDEY0154D67(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEY0154D67 200x200, SSD1681, (FPC-B001 20.05.21) @@ -57,7 +57,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //GxEPD2_BW display(GxEPD2_583(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW display(GxEPD2_583_T8(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0583T8 648x480, EK79655 (GD7965) //GxEPD2_BW display(GxEPD2_583_GDEQ0583T31(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -85,6 +86,10 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEY0420F51 400x300, HX8717 (no inking) //GxEPD2_4C display(GxEPD2_437c(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // Waveshare 4.37" 4-color // 7-color e-paper #define MAX_HEIGHT_7C(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2)) // 2 pixel per byte @@ -147,7 +152,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //GxEPD2_BW display(GxEPD2_583(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW display(GxEPD2_583_T8(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEW0583T8 648x480, EK79655 (GD7965) //GxEPD2_BW display(GxEPD2_583_GDEQ0583T31(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -175,7 +181,11 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper -//GxEPD2_4C display(GxEPD2_437c(//*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // Waveshare 4.37" 4-color +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEY0420F51 400x300, HX8717 (no inking) +//GxEPD2_4C display(GxEPD2_437c(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // Waveshare 4.37" 4-color // 7-color e-paper #define MAX_HEIGHT_7C(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2)) // 2 pixel per byte //GxEPD2_7C display(GxEPD2_565c(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // Waveshare 5.65" 7-color @@ -233,7 +243,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //GxEPD2_BW display(GxEPD2_583(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW display(GxEPD2_583_T8(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEW0583T8 648x480, EK79655 (GD7965) //GxEPD2_BW display(GxEPD2_583_GDEQ0583T31(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -260,6 +271,10 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEY0420F51 400x300, HX8717 (no inking) //GxEPD2_4C < GxEPD2_437c, GxEPD2_437c::HEIGHT / 4 > display(GxEPD2_437c(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // Waveshare 4.37" 4-color // 7-color e-paper //GxEPD2_7C < GxEPD2_565c, GxEPD2_565c::HEIGHT / 2 > display(GxEPD2_565c(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // Waveshare 5.65" 7-color @@ -313,7 +328,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //GxEPD2_BW display(GxEPD2_583(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW display(GxEPD2_583_T8(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEW0583T8 648x480, EK79655 (GD7965) //GxEPD2_BW display(GxEPD2_583_GDEQ0583T31(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -340,6 +356,10 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEY0420F51 400x300, HX8717 (no inking) //GxEPD2_4C < GxEPD2_437c, GxEPD2_437c::HEIGHT / 4 > display(GxEPD2_437c(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // Waveshare 4.37" 4-color // 7-color e-paper //GxEPD2_7C < GxEPD2_565c, GxEPD2_565c::HEIGHT / 2 > display(GxEPD2_565c(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // Waveshare 5.65" 7-color @@ -393,7 +413,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) // can use only half buffer size //GxEPD2_BW < GxEPD2_583, GxEPD2_583::HEIGHT / 2 > display(GxEPD2_583(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW < GxEPD2_583_T8, GxEPD2_583_T8::HEIGHT / 2 > display(GxEPD2_583_T8(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // GDEW0583T8 648x480, EK79655 (GD7965) @@ -423,6 +444,10 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // GDEY0420F51 400x300, HX8717 (no inking) //GxEPD2_4C < GxEPD2_437c, GxEPD2_437c::HEIGHT / 4 > display(GxEPD2_437c(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // Waveshare 4.37" 4-color // 7-color e-paper //GxEPD2_7C < GxEPD2_565c, GxEPD2_565c::HEIGHT / 4 > display(GxEPD2_565c(/*CS=15*/ SS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16)); // Waveshare 5.65" 7-color @@ -468,7 +493,8 @@ //GxEPD2_BW display(GxEPD2_370_TC1(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // ED037TC1 280x480, SSD1677, Waveshare 3.7" //GxEPD2_BW display(GxEPD2_420(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW042T2 400x300, UC8176 (IL0398) //GxEPD2_BW display(GxEPD2_420_M01(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW042M01 400x300, UC8176 (IL0398) -//GxEPD2_BW display(GxEPD2_420_GDEY042T91(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); GDEY042T91, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); GDEY042T81, 400x300, SSD1683 (no inking) +//GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //GxEPD2_BW display(GxEPD2_583(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0583T7 600x448, UC8159c (IL0371) //GxEPD2_BW display(GxEPD2_583_T8(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0583T8 648x480, EK79655 (GD7965) //GxEPD2_BW display(GxEPD2_583_GDEQ0583T31(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -496,6 +522,10 @@ //GxEPD2_3C display(GxEPD2_750c_Z08(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW075Z08 800x480, GD7965 //GxEPD2_3C display(GxEPD2_750c_Z90(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEH075Z90 880x528, SSD1677 // 4-color e-paper +//GxEPD2_4C display(GxEPD2_266c_GDEY0266F51H(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//GxEPD2_4C display(GxEPD2_290c_GDEY029F51H(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//GxEPD2_4C display(GxEPD2_300c(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // Waveshare 3.00" 4-color +//GxEPD2_4C display(GxEPD2_420c_GDEY0420F51(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEY0420F51 400x300, HX8717 (no inking) //GxEPD2_4C display(GxEPD2_437c(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // Waveshare 4.37" 4-color // 7-color e-paper #define MAX_HEIGHT_7C(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2)) // 2 pixel per byte diff --git a/extras/tests/GxEPD2_RefreshTests/GxEPD2_display_selection_new_style.h b/extras/tests/GxEPD2_RefreshTests/GxEPD2_display_selection_new_style.h index 08457b19..764ef7a7 100644 --- a/extras/tests/GxEPD2_RefreshTests/GxEPD2_display_selection_new_style.h +++ b/extras/tests/GxEPD2_RefreshTests/GxEPD2_display_selection_new_style.h @@ -58,7 +58,8 @@ //#define GxEPD2_DRIVER_CLASS GxEPD2_370_TC1 // ED037TC1 280x480, SSD1677, (ICA-FU-20 ichia 2029), Waveshare 3.7" //#define GxEPD2_DRIVER_CLASS GxEPD2_420 // GDEW042T2 400x300, UC8176 (IL0398), (WFT042CZ15) //#define GxEPD2_DRIVER_CLASS GxEPD2_420_M01 // GDEW042M01 400x300, UC8176 (IL0398), (WFT042CZ15) -//#define GxEPD2_DRIVER_CLASS GxEPD2_420_GDEY042T91 // GDEY042T91 400x300, SSD1683 (no inking) +//#define GxEPD2_DRIVER_CLASS GxEPD2_420_GDEY042T81 // GDEY042T81 400x300, SSD1683 (no inking) +//#define GxEPD2_DRIVER_CLASS GxEPD2_426_GDEQ0426T82 // GDEQ0426T82 480x800, SSD1677 (P426010-MF1-A) //#define GxEPD2_DRIVER_CLASS GxEPD2_583 // GDEW0583T7 600x448, UC8159c (IL0371), (missing) //#define GxEPD2_DRIVER_CLASS GxEPD2_583_T8 // GDEW0583T8 648x480, EK79655 (GD7965), (WFT0583CZ61) //#define GxEPD2_DRIVER_CLASS GxEPD2_583_GDEQ0583T31 // GDEQ0583T31 648x480, UC8179, (P583010-MF1-B) @@ -87,6 +88,10 @@ //#define GxEPD2_DRIVER_CLASS GxEPD2_750c_Z90 // GDEH075Z90 880x528, SSD1677, (HINK-E075A07-A0) //#define GxEPD2_DRIVER_CLASS GxEPD2_1248c // GDEY1248Z51 1304x984, UC8179, (WFT1248BZ23,WFT1248BZ24) // 4-color e-paper +//#define GxEPD2_DRIVER_CLASS GxEPD2_266c_GDEY0266F51H // GDEY0266F51H 184x360, JD79667 (FPC-H006 22.04.02) +//#define GxEPD2_DRIVER_CLASS GxEPD2_290c_GDEY029F51H // GDEY029F51H 168x384, JD79667 (FPC-H004 22.03.24) +//#define GxEPD2_DRIVER_CLASS GxEPD2_300c // Waveshare 3.00" 4-color +//#define GxEPD2_DRIVER_CLASS GxEPD2_420c_GDEY0420F51 // GDEY0420F51 400x300, HX8717 (no inking) //#define GxEPD2_DRIVER_CLASS GxEPD2_437c // Waveshare 4.37" 4-color // 7-color e-paper //#define GxEPD2_DRIVER_CLASS GxEPD2_565c // Waveshare 5.65" 7-color @@ -207,11 +212,24 @@ GxEPD2_DISPLAY_CLASS displ //GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ 10, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); #endif +#if defined(ARDUINO_UNOR4_MINIMA) || defined(ARDUINO_UNOR4_WIFI) +#define MAX_DISPLAY_BUFFER_SIZE 16384ul // e.g. half of available RAM +#if IS_GxEPD2_BW(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8) ? EPD::HEIGHT : MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8)) +#elif IS_GxEPD2_3C(GxEPD2_DISPLAY_CLASS) || IS_GxEPD2_4C(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8)) +#elif IS_GxEPD2_7C(GxEPD2_DISPLAY_CLASS) +#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2)) +#endif +// adapt the constructor parameters to your wiring +GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ EPD_CS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); +#endif + #if defined(ARDUINO_ARCH_SAM) #define MAX_DISPLAY_BUFFER_SIZE 32768ul // e.g., up to 96k #if IS_GxEPD2_BW(GxEPD2_DISPLAY_CLASS) #define MAX_HEIGHT(EPD) (EPD::HEIGHT <= MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8) ? EPD::HEIGHT : MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8)) -#elif IS_GxEPD2_3C(GxEPD2_DISPLAY_CLASS) +#elif IS_GxEPD2_3C(GxEPD2_DISPLAY_CLASS) || IS_GxEPD2_4C(GxEPD2_DISPLAY_CLASS) #define MAX_HEIGHT(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8)) #elif IS_GxEPD2_7C(GxEPD2_DISPLAY_CLASS) #define MAX_HEIGHT(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2)) @@ -259,6 +277,10 @@ GxEPD2_DISPLAY_CLASS displ GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ 3, /*DC=*/ 2, /*RST=*/ 1, /*BUSY=*/ 0)); // DESPI-PICO //GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ 3, /*DC=*/ 2, /*RST=*/ 11, /*BUSY=*/ 10)); // DESPI-PICO modified #endif +#if defined(ARDUINO_ADAFRUIT_FEATHER_RP2040_THINKINK) +// Adafruit Feather RP2040 ThinkInk used with package https://github.com/earlephilhower/arduino-pico +GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ PIN_EPD_CS, /*DC=*/ PIN_EPD_DC, /*RST=*/ PIN_EPD_RESET, /*BUSY=*/ PIN_EPD_BUSY)); +#endif #undef MAX_DISPLAY_BUFFER_SIZE #undef MAX_HEIGHT #endif diff --git a/extras/tests/GxEPD2_RefreshTests/GxEPD2_selection_check.h b/extras/tests/GxEPD2_RefreshTests/GxEPD2_selection_check.h index df552f0a..dba0e51c 100644 --- a/extras/tests/GxEPD2_RefreshTests/GxEPD2_selection_check.h +++ b/extras/tests/GxEPD2_RefreshTests/GxEPD2_selection_check.h @@ -49,7 +49,8 @@ #define GxEPD2_370_TC1_IS_BW true #define GxEPD2_420_IS_BW true #define GxEPD2_420_M01_IS_BW true -#define GxEPD2_420_GDEY042T91_IS_BW true +#define GxEPD2_420_GDEY042T81_IS_BW true +#define GxEPD2_426_GDEQ0426T82_IS_BW true #define GxEPD2_583_IS_BW true #define GxEPD2_583_T8_IS_BW true #define GxEPD2_583_GDEQ0583T31_IS_BW true @@ -82,6 +83,10 @@ #define GxEPD2_750c_Z90_IS_3C true #define GxEPD2_1248c_IS_3C true // 4-color e-paper +#define GxEPD2_266c_GDEY0266F51H_IS_4C true +#define GxEPD2_290c_GDEY029F51H_IS_4C true +#define GxEPD2_300c_IS_4C true +#define GxEPD2_420c_GDEY0420F51_IS_4C true #define GxEPD2_437c_IS_4C true // 7-color e-paper #define GxEPD2_565c_IS_7C true diff --git a/extras/tests/GxEPD2_RefreshTests/GxEPD2_wiring_examples.h b/extras/tests/GxEPD2_RefreshTests/GxEPD2_wiring_examples.h index c6822451..e91ce735 100644 --- a/extras/tests/GxEPD2_RefreshTests/GxEPD2_wiring_examples.h +++ b/extras/tests/GxEPD2_RefreshTests/GxEPD2_wiring_examples.h @@ -16,7 +16,7 @@ // mapping suggestion from Waveshare SPI e-Paper to Wemos D1 mini // BUSY -> D2, RST -> D4, DC -> D3, CS -> D8, CLK -> D5, DIN -> D7, GND -> GND, 3.3V -> 3.3V // NOTE: connect 3.3k pull-down from D8 to GND if your board or shield has level converters -// NOTE for ESP8266: using SS (GPIO15) for CS may cause boot mode problems, use different pin in case, or 4k7 pull-down +// NOTE for ESP8266: using SS (GPIO15) for CS may cause boot mode problems, use different pin in case, or 3.3k pull-down // NOTE: connect 1k pull-up from D4 (RST) to 3.3V if your board or shield has the "clever" reset circuit, or use a different pin // mapping suggestion from Waveshare SPI e-Paper to generic ESP8266 @@ -58,6 +58,10 @@ // mapping suggestion for AVR, UNO, NANO etc. // BUSY -> 7, RST -> 9, DC -> 8, CS-> 10, CLK -> 13, DIN -> 11 +// mapping suggestion for AVR, Arduino Micro, Leonardo +// note: on Leonardo board HW SPI pins are on 6-pin ICSP header +// BUSY -> 7, RST -> 9, DC -> 8, CS-> 10, CLK -> 15, DIN -> 16 + // mapping of Waveshare Universal e-Paper Raw Panel Driver Shield for Arduino / NUCLEO // BUSY -> 7, RST -> 8, DC -> 9, CS-> 10, CLK -> 13, DIN -> 11 @@ -72,8 +76,11 @@ // note: can't use SS on MKR1000: is defined as 24, should be 4 // BUSY -> 5, RST -> 6, DC -> 7, CS-> 4, CLK -> 9, DIN -> 8 -// mapping suggestion for Arduino Nano RP2040 Connect +// mapping suggestion for Arduino Nano RP2040 Connect (Arduino MBED OS Nano Boards) // BUSY -> 7, RST -> 9, DC -> 8, CS-> 10, CLK -> 13, DIN -> 11 -// mapping suggestion for Raspberry Pi Pico RP2040 +// mapping suggestion for Raspberry Pi Pico RP2040 (Arduino MBED OS RP2040 Boards) +// BUSY -> 7, RST -> 9, DC -> 8, CS-> 5, CLK -> 18, DIN -> 19 + +// mapping of my proto board for Raspberry Pi Pico RP2040 (previous default SPI pins) // BUSY -> 7, RST -> 9, DC -> 8, CS-> 5, CLK -> 2, DIN -> 3 diff --git a/library.properties b/library.properties index fcfa2f23..0d5d0e49 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=GxEPD2 -version=1.5.2 +version=1.5.3 author=Jean-Marc Zingg maintainer=Jean-Marc Zingg sentence=Arduino Display Library for SPI E-Paper displays from Dalian Good Display and Waveshare. diff --git a/src/GxEPD2.h b/src/GxEPD2.h index 3230b50c..695fb986 100644 --- a/src/GxEPD2.h +++ b/src/GxEPD2.h @@ -70,7 +70,8 @@ class GxEPD2 GDEW0371W7, Waveshare_3_7_bw = GDEW0371W7, GDEW042T2, Waveshare_4_2_bw = GDEW042T2, GDEW042M01, - GDEY042T91, + GDEY042T81, + GDEQ0426T82, GDEW0583T7, Waveshare_5_83_bw = GDEW0583T7, GDEW0583T8, GDEQ0583T31, @@ -98,13 +99,19 @@ class GxEPD2 GDEQ042Z21, Waveshare_4_2_V2_bwr = GDEQ042Z21, GDEW0583Z21, Waveshare_5_83_bwr = GDEW0583Z21, GDEW0583Z83, - Waveshare437inch4color, - ACeP565, Waveshare_5_65_7c = ACeP565, - GDEY073D46, GDEW075Z09, Waveshare_7_5_bwr = GDEW075Z09, GDEW075Z08, Waveshare_7_5_bwr_Z08 = GDEW075Z08, GDEH075Z90, Waveshare_7_5_bwr_Z90 = GDEH075Z90, - GDEY1248Z51 + GDEY1248Z51, + // 4-color + GDEY0266F51H, + GDEY029F51H, + Waveshare3inch4color, + GDEY0420F51, + Waveshare437inch4color, + // 7-color + ACeP565, Waveshare_5_65_7c = ACeP565, + GDEY073D46 }; }; diff --git a/src/GxEPD2_4C.h b/src/GxEPD2_4C.h index 645a1588..8ba2f0d7 100644 --- a/src/GxEPD2_4C.h +++ b/src/GxEPD2_4C.h @@ -48,6 +48,18 @@ # define __has_include(x) true #endif +#if __has_include("epd4c/GxEPD2_266c_GDEY0266F51H.h") +#include "epd4c/GxEPD2_266c_GDEY0266F51H.h" +#endif +#if __has_include("epd4c/GxEPD2_290c_GDEY029F51H.h") +#include "epd4c/GxEPD2_290c_GDEY029F51H.h" +#endif +#if __has_include("epd4c/GxEPD2_300c.h") +#include "epd4c/GxEPD2_300c.h" +#endif +#if __has_include("epd4c/GxEPD2_420c_GDEY0420F51.h") +#include "epd4c/GxEPD2_420c_GDEY0420F51.h" +#endif #if __has_include("epd4c/GxEPD2_437c.h") #include "epd4c/GxEPD2_437c.h" #endif diff --git a/src/GxEPD2_BW.h b/src/GxEPD2_BW.h index ebc7b0e7..22998ed7 100644 --- a/src/GxEPD2_BW.h +++ b/src/GxEPD2_BW.h @@ -157,8 +157,11 @@ #if __has_include("epd/GxEPD2_420_M01.h") #include "epd/GxEPD2_420_M01.h" #endif -#if __has_include("gdey/GxEPD2_420_GDEY042T91.h") -#include "gdey/GxEPD2_420_GDEY042T91.h" +#if __has_include("gdey/GxEPD2_420_GDEY042T81.h") +#include "gdey/GxEPD2_420_GDEY042T81.h" +#endif +#if __has_include("gdeq/GxEPD2_426_GDEQ0426T82.h") +#include "gdeq/GxEPD2_426_GDEQ0426T82.h" #endif #if __has_include("epd/GxEPD2_583.h") #include "epd/GxEPD2_583.h" @@ -255,12 +258,12 @@ class GxEPD2_BW : public GxEPD2_GFX_BASE_CLASS } // transpose partial window to 0,0 x -= _pw_x; - y -= _pw_y; + if (!_reverse) y -= _pw_y; + else y = HEIGHT - _pw_y - y - 1; // clip to (partial) window if ((x < 0) || (x >= int16_t(_pw_w)) || (y < 0) || (y >= int16_t(_pw_h))) return; // adjust for current page y -= _current_page * _page_height; - if (_reverse) y = _page_height - y - 1; // check if in current page if ((y < 0) || (y >= int16_t(_page_height))) return; uint16_t i = x / 8 + y * (_pw_w / 8); @@ -282,7 +285,7 @@ class GxEPD2_BW : public GxEPD2_GFX_BASE_CLASS // initial false for re-init after processor deep sleep wake up, if display power supply was kept // this can be used to avoid the repeated initial full refresh on displays with fast partial update // NOTE: garbage will result on fast partial update displays, if initial full update is omitted after power loss - // reset_duration = 10 is default; a value of 2 may help with "clever" reset circuit of newer boards from Waveshare + // reset_duration = 10 is default; a value of 2 may help with "clever" reset circuit of newer boards from Waveshare // pulldown_rst_mode true for alternate RST handling to avoid feeding 5V through RST pin void init(uint32_t serial_diag_bitrate, bool initial, uint16_t reset_duration = 10, bool pulldown_rst_mode = false) { @@ -305,7 +308,7 @@ class GxEPD2_BW : public GxEPD2_GFX_BASE_CLASS } // release SPI and control pins - void end() + void end() { epd2.end(); } @@ -346,11 +349,11 @@ class GxEPD2_BW : public GxEPD2_GFX_BASE_CLASS h = gx_uint16_min(h, height() - y); _rotate(x, y, w, h); uint16_t y_part = _reverse ? HEIGHT - h - y : y; - epd2.writeImagePart(_buffer, x, y_part, GxEPD2_Type::WIDTH, _page_height, x, y, w, h); - epd2.refresh(x, y, w, h); + epd2.writeImagePart(_buffer, x, y_part, GxEPD2_Type::WIDTH, _page_height, x, y_part, w, h); + epd2.refresh(x, y_part, w, h); if (epd2.hasFastPartialUpdate) { - epd2.writeImagePartAgain(_buffer, x, y_part, GxEPD2_Type::WIDTH, _page_height, x, y, w, h); + epd2.writeImagePartAgain(_buffer, x, y_part, GxEPD2_Type::WIDTH, _page_height, x, y_part, w, h); } } @@ -380,6 +383,7 @@ class GxEPD2_BW : public GxEPD2_GFX_BASE_CLASS _pw_w += _pw_x % 8; if (_pw_w % 8 > 0) _pw_w += 8 - _pw_w % 8; _pw_x -= _pw_x % 8; + if (_reverse) _pw_y = HEIGHT - _pw_h - _pw_y; } void firstPage() @@ -395,12 +399,11 @@ class GxEPD2_BW : public GxEPD2_GFX_BASE_CLASS { if (_using_partial_mode) { - uint32_t offset = _reverse ? (HEIGHT - _pw_h) * _pw_w / 8 : 0; - epd2.writeImage(_buffer + offset, _pw_x, _pw_y, _pw_w, _pw_h); + epd2.writeImage(_buffer, _pw_x, _pw_y, _pw_w, _pw_h); epd2.refresh(_pw_x, _pw_y, _pw_w, _pw_h); if (epd2.hasFastPartialUpdate) { - epd2.writeImageAgain(_buffer + offset, _pw_x, _pw_y, _pw_w, _pw_h); + epd2.writeImageAgain(_buffer, _pw_x, _pw_y, _pw_w, _pw_h); //epd2.refresh(_pw_x, _pw_y, _pw_w, _pw_h); // not needed } } @@ -429,9 +432,8 @@ class GxEPD2_BW : public GxEPD2_GFX_BASE_CLASS { //Serial.print("writeImage("); Serial.print(_pw_x); Serial.print(", "); Serial.print(dest_ys); Serial.print(", "); //Serial.print(_pw_w); Serial.print(", "); Serial.print(dest_ye - dest_ys); Serial.println(")"); - uint32_t offset = _reverse ? (_page_height - (dest_ye - dest_ys)) * _pw_w / 8 : 0; - if (!_second_phase) epd2.writeImage(_buffer + offset, _pw_x, dest_ys, _pw_w, dest_ye - dest_ys); - else epd2.writeImageAgain(_buffer + offset, _pw_x, dest_ys, _pw_w, dest_ye - dest_ys); + if (!_second_phase) epd2.writeImage(_buffer, _pw_x, dest_ys, _pw_w, dest_ye - dest_ys); + else epd2.writeImageAgain(_buffer, _pw_x, dest_ys, _pw_w, dest_ye - dest_ys); } else { @@ -494,12 +496,11 @@ class GxEPD2_BW : public GxEPD2_GFX_BASE_CLASS drawCallback(pv); if (_using_partial_mode) { - uint32_t offset = _reverse ? (HEIGHT - _pw_h) * _pw_w / 8 : 0; - epd2.writeImage(_buffer + offset, _pw_x, _pw_y, _pw_w, _pw_h); + epd2.writeImage(_buffer, _pw_x, _pw_y, _pw_w, _pw_h); epd2.refresh(_pw_x, _pw_y, _pw_w, _pw_h); if (epd2.hasFastPartialUpdate) { - epd2.writeImageAgain(_buffer + offset, _pw_x, _pw_y, _pw_w, _pw_h); + epd2.writeImageAgain(_buffer, _pw_x, _pw_y, _pw_w, _pw_h); //epd2.refresh(_pw_x, _pw_y, _pw_w, _pw_h); // not needed } } @@ -530,9 +531,8 @@ class GxEPD2_BW : public GxEPD2_GFX_BASE_CLASS { fillScreen(GxEPD_WHITE); drawCallback(pv); - uint32_t offset = _reverse ? (_page_height - (dest_ye - dest_ys)) * _pw_w / 8 : 0; - if (phase == 1) epd2.writeImage(_buffer + offset, _pw_x, dest_ys, _pw_w, dest_ye - dest_ys); - else epd2.writeImageAgain(_buffer + offset, _pw_x, dest_ys, _pw_w, dest_ye - dest_ys); + if (phase == 1) epd2.writeImage(_buffer, _pw_x, dest_ys, _pw_w, dest_ye - dest_ys); + else epd2.writeImageAgain(_buffer, _pw_x, dest_ys, _pw_w, dest_ye - dest_ys); } } epd2.refresh(_pw_x, _pw_y, _pw_w, _pw_h); diff --git a/src/GxEPD2_EPD.cpp b/src/GxEPD2_EPD.cpp index 2315104c..8df8bef0 100644 --- a/src/GxEPD2_EPD.cpp +++ b/src/GxEPD2_EPD.cpp @@ -28,6 +28,7 @@ GxEPD2_EPD::GxEPD2_EPD(int16_t cs, int16_t dc, int16_t rst, int16_t busy, int16_ _power_is_on = false; _using_partial_mode = false; _hibernating = false; + _init_display_done = false; _reset_duration = 10; _busy_callback = 0; _busy_callback_parameter = 0; @@ -46,6 +47,7 @@ void GxEPD2_EPD::init(uint32_t serial_diag_bitrate, bool initial, uint16_t reset _power_is_on = false; _using_partial_mode = false; _hibernating = false; + _init_display_done = false; _reset_duration = reset_duration; if (serial_diag_bitrate > 0) { diff --git a/src/GxEPD2_EPD.h b/src/GxEPD2_EPD.h index ef2318f1..34c11452 100644 --- a/src/GxEPD2_EPD.h +++ b/src/GxEPD2_EPD.h @@ -119,6 +119,7 @@ class GxEPD2_EPD SPISettings _spi_settings; bool _initial_write, _initial_refresh; bool _power_is_on, _using_partial_mode, _hibernating; + bool _init_display_done; uint16_t _reset_duration; void (*_busy_callback)(const void*); const void* _busy_callback_parameter; diff --git a/src/bitmaps/Bitmaps4c168x384.h b/src/bitmaps/Bitmaps4c168x384.h new file mode 100644 index 00000000..7e5c9aea --- /dev/null +++ b/src/bitmaps/Bitmaps4c168x384.h @@ -0,0 +1,1020 @@ +#ifndef _GxBitmaps4c168x384_H_ +#define _GxBitmaps4c168x384_H_ + +#if defined(ESP8266) || defined(ESP32) +#include +#else +#include +#endif + +const unsigned char Bitmap4c168x384[16128] PROGMEM = { /* 0X81,0X02,0X80,0X01,0XA8,0X00, */ + 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, + 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, + 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, + 0X55, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, + 0X55, 0X56, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, + 0X56, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0X55, 0X55, + 0X55, 0X6A, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X56, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, + 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XAA, 0XAA, + 0X95, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XA5, + 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, + 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X56, + 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, + 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X6A, + 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, + 0X55, 0X56, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, + 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XA5, 0X55, 0X55, + 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, + 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, + 0X95, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, + 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, + 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X56, + 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, + 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, + 0X55, 0X56, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, + 0X5A, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, + 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0XAA, 0XAF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0X95, 0X55, + 0X55, 0X55, 0X55, 0X56, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, + 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0XAA, + 0XFF, 0XFF, 0XD5, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0X95, + 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, + 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0XFF, 0X55, 0XD5, 0X55, 0X55, 0X55, + 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, + 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, + 0XAA, 0XAA, 0XAA, 0XAB, 0XF9, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, + 0X55, 0X56, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, + 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XAF, 0XAA, 0X55, + 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0X95, 0X55, 0X55, + 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, + 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XAF, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, + 0X95, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, + 0X95, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, + 0XAA, 0XBA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X5A, + 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X6A, + 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, + 0X55, 0X55, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, + 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, + 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0X95, 0X55, + 0X55, 0X55, 0X55, 0X5A, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, + 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, + 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0X95, + 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XEA, 0XAA, 0XAA, 0XAB, 0XFF, 0XD5, 0X55, 0X55, 0X55, + 0X6A, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, + 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, + 0XFF, 0XFF, 0XAA, 0XAA, 0XAF, 0XFF, 0XF5, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0X95, 0X55, 0X55, 0X55, + 0X55, 0X5A, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, + 0X56, 0XAA, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0XFF, 0XFF, 0XEA, 0XAA, 0XFF, 0XFF, + 0XFD, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0X55, 0X55, 0X55, + 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0XA5, + 0X55, 0X55, 0X55, 0X55, 0XFF, 0XFF, 0XFA, 0XAA, 0XFF, 0X03, 0XFD, 0X55, 0X55, 0X55, 0X6A, 0XAA, + 0XA5, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0XA9, + 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X57, 0XF0, 0X03, + 0XFE, 0XAA, 0XF0, 0X00, 0X3F, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X5A, + 0XAA, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, + 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X5F, 0X00, 0X00, 0X3E, 0XAF, 0XC0, 0X00, 0X0F, 0X55, + 0X55, 0X55, 0X6A, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X56, + 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, + 0X55, 0X7C, 0X00, 0X00, 0X0F, 0XAF, 0X00, 0X00, 0X0F, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XA5, 0X55, + 0X55, 0X55, 0X55, 0X5A, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, + 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0XFC, 0X00, 0X00, 0X03, 0XEF, + 0X00, 0X00, 0X03, 0XD5, 0X55, 0X55, 0X6A, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0X55, + 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, + 0XA9, 0X55, 0X55, 0X55, 0X57, 0XF0, 0X00, 0X00, 0X00, 0XEC, 0X00, 0X00, 0X03, 0XD5, 0X55, 0X55, + 0X6A, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, + 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X95, 0X55, 0X57, 0XF0, + 0X00, 0X00, 0X00, 0XF0, 0X00, 0X00, 0X03, 0XD5, 0X55, 0X55, 0X5A, 0XAA, 0XA5, 0X55, 0X55, 0X55, + 0X55, 0X5A, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X56, + 0XAA, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X95, 0X55, 0X57, 0XC0, 0X00, 0X00, 0X00, 0X30, 0X00, 0X00, + 0X00, 0XD5, 0X55, 0X55, 0X5A, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0X55, 0X55, 0X55, + 0X55, 0X6A, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, + 0XA5, 0X55, 0X57, 0XC0, 0X00, 0X00, 0X00, 0X30, 0X00, 0X00, 0X00, 0XD5, 0X55, 0X55, 0X5A, 0XAA, + 0XA5, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XAA, 0X55, + 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0XA5, 0X55, 0X57, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0XD5, 0X55, 0X55, 0X5A, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X6A, + 0XAA, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, + 0XAA, 0XAA, 0X55, 0X55, 0XA9, 0X55, 0X57, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XD5, + 0X55, 0X55, 0X5A, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0X55, 0X55, 0X55, 0X55, 0XAA, + 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0XAA, 0X55, + 0X57, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XD5, 0X55, 0X55, 0X5A, 0XAA, 0XA5, 0X55, + 0X55, 0X55, 0X55, 0X6A, 0XA9, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, + 0X55, 0X6A, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0XAA, 0X55, 0X57, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X35, 0X55, 0X55, 0X5A, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XA9, 0X55, + 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XAA, 0XA5, + 0X55, 0X55, 0XAA, 0X55, 0X57, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X35, 0X55, 0X55, + 0X5A, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XA9, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, + 0XA9, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0XAA, 0X95, 0X57, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X35, 0XFF, 0XFD, 0X5A, 0XAA, 0XA5, 0X55, 0X55, 0X55, + 0X55, 0X6A, 0XAF, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0XAA, + 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0XAA, 0X95, 0X57, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X17, 0XFF, 0XFF, 0X5A, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X7A, 0XFF, 0X55, 0X55, 0X55, + 0X55, 0XAA, 0XAB, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, + 0XAA, 0XA5, 0X57, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3C, 0X00, 0XFF, 0XD6, 0XAA, + 0XA9, 0X55, 0X55, 0X55, 0X55, 0X7F, 0XFF, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAE, 0XAA, 0XA5, 0X55, + 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0XAA, 0XA5, 0X55, 0XC0, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X30, 0X00, 0X0F, 0XFE, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X7F, + 0XFF, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAE, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, + 0XAA, 0X55, 0X55, 0X55, 0XAA, 0XA9, 0X55, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X03, 0XFE, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X7F, 0XFF, 0X55, 0X55, 0X55, 0X56, 0XAA, + 0XBE, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0XAA, 0XAF, + 0XFD, 0X40, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3E, 0XAA, 0XA9, 0X55, + 0X55, 0X55, 0X55, 0X7F, 0XFF, 0XD5, 0X55, 0X55, 0X56, 0XAA, 0XBA, 0XAA, 0X95, 0X55, 0X55, 0X55, + 0X5A, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0XAB, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0XBF, 0XFF, 0XFD, + 0X55, 0X55, 0X56, 0XAA, 0XFA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, + 0X55, 0X55, 0XAF, 0XFC, 0X00, 0X30, 0X00, 0X00, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X3F, 0XEA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0XAF, 0XFF, 0XFF, 0X55, 0X55, 0X5A, 0XAA, 0XFA, 0XAA, + 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0XFF, 0XC0, 0X00, 0X00, + 0X00, 0X03, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XEA, 0XA9, 0X55, 0X55, 0X55, + 0X55, 0XAF, 0XFF, 0XFD, 0X55, 0X55, 0X5A, 0XAA, 0XFA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, + 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X0F, 0X00, 0X00, 0X00, 0X30, + 0X00, 0X00, 0X00, 0X00, 0X03, 0XEA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0XAF, 0XFF, 0XF5, 0X55, 0X55, + 0X5A, 0XAB, 0XFA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, + 0XFC, 0X00, 0X00, 0X00, 0X00, 0X3C, 0X00, 0X00, 0X00, 0X30, 0X00, 0X00, 0X00, 0X00, 0X03, 0XEA, + 0XA9, 0X55, 0X55, 0X55, 0X55, 0XBF, 0XFF, 0XD5, 0X55, 0X55, 0X5A, 0XAB, 0XEA, 0XA9, 0X55, 0X55, + 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X30, + 0X00, 0X00, 0X00, 0X30, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFA, 0XA9, 0X55, 0X55, 0XD5, 0X55, 0XBF, + 0XFF, 0X55, 0X55, 0X55, 0X5A, 0XAF, 0XEA, 0XA9, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0XAA, + 0X55, 0X55, 0X55, 0X55, 0XC0, 0X00, 0X00, 0X00, 0X00, 0XF0, 0X00, 0X00, 0X00, 0X30, 0X00, 0X00, + 0X00, 0X00, 0X03, 0XFA, 0XA9, 0X55, 0X55, 0XD5, 0X55, 0XBF, 0XFF, 0X55, 0X55, 0X55, 0X6A, 0XAF, + 0XEA, 0XA9, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X00, 0X00, + 0X00, 0X00, 0X00, 0XF0, 0X00, 0X00, 0X00, 0X30, 0X00, 0X00, 0X00, 0X00, 0X00, 0XFA, 0XA9, 0X55, + 0X55, 0XD5, 0X55, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X6A, 0XBF, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X5A, + 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X00, 0X00, 0X00, 0X00, 0X00, 0XC0, 0X00, 0X00, + 0X00, 0X3C, 0X00, 0X00, 0X00, 0X00, 0X00, 0XFA, 0XA9, 0X55, 0X55, 0XD5, 0X55, 0XBA, 0XBF, 0X55, + 0X55, 0X55, 0X6A, 0XBF, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, + 0X55, 0X55, 0X00, 0X00, 0X00, 0X00, 0X00, 0XC0, 0X00, 0X00, 0X00, 0X3C, 0X00, 0X00, 0X00, 0X00, + 0X00, 0XFE, 0XA9, 0X55, 0X55, 0XD5, 0X55, 0XAA, 0XBF, 0X55, 0X55, 0X55, 0X6A, 0XFF, 0XAA, 0XA5, + 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X00, 0X00, 0X00, 0X00, + 0X00, 0XC0, 0X00, 0X00, 0X00, 0X0F, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3E, 0XA9, 0X55, 0X55, 0XF5, + 0X55, 0XAA, 0XAF, 0X55, 0X55, 0X55, 0XAA, 0XFF, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, + 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X00, 0X00, 0X00, 0X00, 0X00, 0XC0, 0X00, 0X00, 0X00, 0X0F, + 0XF0, 0X00, 0X00, 0X00, 0X00, 0X3E, 0XAF, 0XD5, 0X55, 0X75, 0X55, 0XAA, 0XA7, 0X55, 0X55, 0X55, + 0XAA, 0XFF, 0XAA, 0X95, 0X55, 0X57, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, + 0X00, 0X00, 0X00, 0X00, 0X00, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3E, + 0XAF, 0X7F, 0X55, 0X75, 0X55, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0XAA, 0XFF, 0XAA, 0X95, 0X55, 0XDF, + 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X00, 0X00, 0X00, 0X00, 0X00, 0XC0, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3E, 0XAF, 0X57, 0X55, 0X7D, 0X55, 0XAA, + 0XA5, 0X55, 0X55, 0X55, 0XAF, 0XFE, 0XAA, 0X95, 0X55, 0XFF, 0X55, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X00, 0X00, 0X00, 0X00, 0X00, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X3E, 0XFF, 0XD7, 0XD5, 0X7D, 0X55, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0XAF, 0XFE, + 0XAA, 0X55, 0X55, 0XFF, 0X56, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X00, 0X00, + 0X00, 0X00, 0X00, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3E, 0XFF, 0XF5, + 0XF5, 0X7D, 0X55, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0XAF, 0XFE, 0XAA, 0X55, 0X55, 0XFF, 0XD6, 0XAA, + 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X00, 0X00, 0X00, 0X00, 0X00, 0XF0, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3E, 0XBF, 0XF5, 0X75, 0X7D, 0X56, 0XAA, 0XA5, 0X55, + 0X55, 0X56, 0XBF, 0XFE, 0XAA, 0X55, 0X55, 0XFF, 0XDA, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3C, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X3E, 0XBF, 0XD5, 0X7D, 0X7D, 0X56, 0XAA, 0X95, 0X55, 0X55, 0X56, 0XBF, 0XFA, 0XAA, 0X55, + 0X57, 0XFF, 0XFA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X3C, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X30, 0XFF, 0XD5, 0X5D, 0X7F, + 0X56, 0XAA, 0X95, 0X55, 0X55, 0X56, 0XFF, 0XFA, 0XAA, 0X55, 0X57, 0XFF, 0X5A, 0XAA, 0XAA, 0XAA, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XC0, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XD5, 0X5D, 0X7F, 0X56, 0XAA, 0X95, 0X55, 0X55, 0X56, + 0XFF, 0XFA, 0XA9, 0X55, 0X55, 0X7F, 0X6A, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X0F, 0XD5, 0X55, 0X5F, 0X56, 0XAA, 0X95, 0X55, 0X55, 0X5A, 0XFF, 0XFA, 0XA5, 0X55, 0X55, 0X5D, + 0X6A, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, + 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XF5, 0X55, 0X7F, 0XD6, 0XAA, + 0X95, 0X55, 0X55, 0X5B, 0XFF, 0XFA, 0XA5, 0X55, 0X55, 0X5D, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X5A, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0XFD, 0X55, 0X5F, 0XD6, 0XAA, 0X95, 0X55, 0X55, 0X5F, 0XFF, 0XEA, + 0XA5, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XA5, 0X5D, 0X55, 0X55, 0X55, 0X55, 0X6A, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X0F, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XFD, + 0X55, 0X5F, 0XD6, 0XAA, 0X95, 0X55, 0X55, 0X5F, 0XFF, 0XEA, 0XA5, 0X55, 0X55, 0X56, 0XAA, 0XAA, + 0XAA, 0XA5, 0X5D, 0X55, 0X55, 0X55, 0X55, 0XAA, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3C, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XFD, 0X55, 0X5F, 0XF6, 0XAA, 0X95, 0X55, + 0X55, 0X6F, 0XFF, 0XEA, 0X95, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0X95, 0X75, 0X55, 0X55, 0X55, + 0X56, 0XAA, 0X00, 0X00, 0X00, 0X00, 0X00, 0X30, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X3F, 0X55, 0X5F, 0XF6, 0XAA, 0X95, 0X55, 0X55, 0X7F, 0XFF, 0XEA, 0X95, 0X55, + 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0X55, 0XD5, 0X55, 0X55, 0X55, 0X56, 0XAA, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X30, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0X55, 0X5F, + 0XFA, 0XAA, 0X95, 0X55, 0X55, 0XFF, 0XFF, 0XEA, 0X95, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0X57, + 0XD5, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0X00, 0X00, 0X00, 0X00, 0X00, 0X30, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X03, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0X55, 0X5F, 0XFE, 0XAA, 0X95, 0X55, 0X55, 0XFF, + 0XFF, 0XEA, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XA9, 0X5F, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X30, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XC0, 0X00, 0X30, 0X00, + 0X00, 0X0F, 0X55, 0X5F, 0XFE, 0XAA, 0X55, 0X55, 0X57, 0XFF, 0XFF, 0XEA, 0X55, 0X55, 0X55, 0X6A, + 0XAA, 0XAA, 0XA9, 0X7F, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0X00, 0X00, 0X00, 0X00, 0X00, 0X30, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XD5, 0X5F, 0XFE, 0XAA, + 0X55, 0X55, 0X5B, 0XFF, 0XFF, 0XA9, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XA5, 0X7D, 0X55, 0X55, + 0X55, 0X55, 0XAA, 0XAA, 0X00, 0X00, 0X00, 0X00, 0X00, 0X30, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, + 0XF0, 0X00, 0XC0, 0X00, 0X00, 0X0F, 0XD5, 0X5F, 0XFF, 0XAA, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XA9, + 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XA5, 0XFD, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X30, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XF0, 0X00, 0XC0, 0X00, 0X00, 0X0F, + 0XD5, 0X5F, 0XFF, 0XAA, 0X55, 0X55, 0X7F, 0XFF, 0XFF, 0XA9, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, + 0XA7, 0XF5, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0X00, 0X00, 0X00, 0X00, 0X00, 0X30, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X03, 0X3C, 0X0F, 0X00, 0X00, 0X00, 0X0F, 0XD5, 0X5F, 0XFF, 0XEA, 0X55, 0X55, + 0X7F, 0XFF, 0XFC, 0XA9, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0X9F, 0XF5, 0X55, 0X55, 0X55, 0X6A, + 0XAA, 0XAA, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0X0F, 0XFC, + 0X00, 0X00, 0X00, 0X0F, 0XD5, 0X57, 0XFF, 0XEA, 0X55, 0X55, 0XFF, 0XFF, 0XFC, 0XA5, 0X55, 0X55, + 0X56, 0XAA, 0XAA, 0XAA, 0X5F, 0XD5, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X0C, 0X00, 0X00, 0X00, 0X00, 0X03, 0X03, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XD5, 0X57, + 0XFF, 0XFA, 0X55, 0X57, 0XFF, 0XFF, 0XFC, 0XA5, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XFF, 0XD5, + 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0XCC, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XD5, 0X57, 0XFF, 0XFA, 0X55, 0X5B, 0XFF, 0XFF, + 0XF2, 0XA5, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XA9, 0XFF, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X30, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X0F, 0XD5, 0X57, 0XFF, 0XFE, 0X55, 0X5F, 0XFF, 0XFF, 0XF0, 0XA5, 0X55, 0X55, 0X5A, 0XAA, + 0XAA, 0XAB, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XD5, 0X57, 0XFF, 0XFF, + 0X55, 0XBF, 0XFF, 0XFF, 0XC3, 0X95, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XBF, 0XFD, 0X55, 0X55, 0X55, + 0X5A, 0XAA, 0XAA, 0XAA, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XD5, 0X57, 0XFF, 0XFF, 0XD7, 0XFF, 0XFF, 0XFF, 0XC2, 0X95, + 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XBF, 0XFD, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XAA, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, + 0XD5, 0X57, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC3, 0X95, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XFF, + 0XF5, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XD5, 0X5C, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0X0E, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAF, 0XFF, 0XF5, 0X55, 0X55, 0X56, 0XAA, 0XAA, + 0XAA, 0XAA, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X0F, 0XD5, 0X5C, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X0E, 0X55, 0X55, 0X56, + 0XAA, 0XAA, 0XAF, 0XFF, 0XF5, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0XAA, 0X00, 0X00, 0X00, 0X00, + 0X40, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XD5, 0X5C, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X0E, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XBF, 0XFF, 0XD5, 0X55, + 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0XC0, 0X00, 0X00, 0X05, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0X55, 0X5C, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, + 0X0E, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XFF, 0XFF, 0XD5, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XAA, 0XAA, + 0XFC, 0X00, 0X03, 0X55, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3C, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X3F, 0X55, 0X7C, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X0D, 0X55, 0X55, 0X5A, 0XAA, 0XAB, + 0XFF, 0XFF, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XFF, 0XF3, 0XF9, 0X55, 0X00, 0X00, + 0X00, 0X00, 0X00, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0X55, 0X7C, 0X3F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XF0, 0X0D, 0X55, 0X55, 0X5A, 0XAA, 0XAF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0XAA, + 0XAA, 0XAA, 0XAA, 0XA9, 0X7F, 0XFF, 0X55, 0X55, 0X00, 0X00, 0X00, 0X00, 0X00, 0XFF, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0XFF, 0X55, 0X7C, 0X3F, 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X3D, 0X55, + 0X55, 0X6A, 0XAA, 0XFF, 0XFF, 0XFE, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, + 0X55, 0X57, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XFD, + 0X55, 0XFC, 0X3F, 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X3D, 0X55, 0X55, 0X6A, 0XAA, 0XFF, 0XFF, 0XFD, + 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X57, 0XC0, 0X00, 0X00, 0X00, + 0X00, 0X3F, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XFF, 0X57, 0XFF, 0X3F, 0XFF, 0XFF, 0XFF, + 0XFF, 0X00, 0X3D, 0X55, 0X55, 0XAA, 0XAF, 0XFF, 0XFF, 0XFD, 0X55, 0X55, 0X6A, 0XAA, 0XAE, 0XAA, + 0XAA, 0X55, 0X55, 0X55, 0X55, 0X57, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XC0, 0X03, 0XC0, 0X00, + 0X00, 0X00, 0X00, 0XFF, 0XFF, 0XFC, 0X0F, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0X3D, 0X55, 0X55, 0XAA, + 0XBF, 0XFF, 0XFF, 0XF5, 0X55, 0X55, 0X6A, 0XAA, 0XAE, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X57, + 0XC0, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XC0, 0X03, 0XC0, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XFF, + 0X0F, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0X3D, 0X55, 0X56, 0XAA, 0XFF, 0XFF, 0XFF, 0XF5, 0X55, 0X55, + 0XAA, 0XAA, 0XAE, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X57, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X03, + 0XF0, 0X03, 0XC0, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0X0F, 0XFF, 0XFF, 0XFF, 0XFC, 0X00, + 0X3F, 0X55, 0X56, 0XAF, 0XFF, 0XFF, 0XFF, 0XD5, 0X55, 0X56, 0XAA, 0XAA, 0XBE, 0XAA, 0XA5, 0X55, + 0X55, 0X55, 0X55, 0X57, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFC, 0X03, 0XF0, 0X00, 0X00, 0X00, + 0X0F, 0XFF, 0XFF, 0XFF, 0X03, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0XFF, 0X55, 0X5A, 0XBF, 0XFF, 0XFF, + 0XFF, 0X15, 0X55, 0X5A, 0XAA, 0XFA, 0XFE, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XC0, 0X00, + 0X00, 0X00, 0X00, 0X00, 0XFC, 0X03, 0XF0, 0X00, 0X00, 0X00, 0X3F, 0XFF, 0XFF, 0XFF, 0X03, 0XFF, + 0XFF, 0XFF, 0XF0, 0X00, 0XFF, 0X55, 0X5A, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X5A, 0XAA, 0XFF, + 0XFE, 0XA9, 0X55, 0X55, 0X95, 0X55, 0X55, 0X55, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3C, 0X00, + 0XFC, 0X00, 0X00, 0X00, 0X3F, 0XFF, 0XFF, 0XFF, 0X03, 0XFF, 0XFF, 0XFF, 0XC0, 0X00, 0XFF, 0XD5, + 0X5F, 0XFF, 0XFF, 0XFF, 0XF0, 0XD5, 0X55, 0X6A, 0XAA, 0XFF, 0XFE, 0XA9, 0X55, 0X55, 0XA5, 0X55, + 0X55, 0X55, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0X00, 0XFC, 0X00, 0X00, 0X00, 0XFF, 0XFF, + 0XFF, 0XFF, 0X00, 0XFF, 0XFF, 0XFF, 0XC0, 0X00, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC3, 0X55, + 0X55, 0XAA, 0XAA, 0XBF, 0XFE, 0XA5, 0X55, 0X55, 0XA9, 0X55, 0X55, 0X55, 0XFC, 0X00, 0X0F, 0X00, + 0X00, 0X00, 0X0F, 0XC0, 0XFC, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0XFF, 0XFF, 0XFF, + 0X00, 0X00, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XCF, 0X55, 0X56, 0XAA, 0XAA, 0XBF, 0XFF, 0XD5, + 0X55, 0X55, 0XA9, 0X55, 0X55, 0X55, 0X7F, 0X00, 0X3C, 0X00, 0X00, 0X00, 0X0F, 0XC0, 0X3F, 0X00, + 0X00, 0X3F, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0X0F, 0X55, 0X56, 0XAA, 0XAA, 0XBF, 0XFF, 0XD5, 0X55, 0X55, 0XAA, 0X55, 0X55, 0X55, + 0X7F, 0XCC, 0XFB, 0X00, 0X00, 0X00, 0X03, 0XC0, 0X3F, 0XF0, 0X3F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X00, 0X3F, 0XFF, 0XFC, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X0D, 0X55, 0X5A, 0XAA, + 0XAA, 0XBF, 0XFF, 0XF5, 0X55, 0X55, 0XEA, 0X95, 0X55, 0X55, 0X5F, 0XFF, 0XFA, 0X00, 0X00, 0X00, + 0X03, 0XF0, 0X0F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0X3F, 0XFF, 0XF0, 0X00, 0X03, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X3D, 0X55, 0X6A, 0XAA, 0XAA, 0XBF, 0XFF, 0XFD, 0X55, 0X55, + 0XFF, 0XFF, 0XD5, 0X55, 0X57, 0XFF, 0XAB, 0X00, 0X00, 0X03, 0X00, 0XFC, 0X0F, 0XFF, 0XFF, 0XF0, + 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0X0F, 0XFF, 0XF0, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, + 0XF5, 0X55, 0XAA, 0XAA, 0XAA, 0XFF, 0XFF, 0XF5, 0X55, 0X55, 0XAF, 0XFD, 0X55, 0X55, 0X55, 0X55, + 0X6B, 0X00, 0X00, 0X0F, 0X00, 0X3C, 0X03, 0XFF, 0XFC, 0X00, 0X3F, 0XFF, 0XFF, 0XFF, 0X00, 0X0F, + 0XFF, 0XC0, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0XF5, 0X55, 0XAA, 0XAA, 0XAA, 0XFF, + 0XFF, 0X55, 0X55, 0X55, 0XAB, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X6B, 0X00, 0X00, 0X0F, 0XC0, 0X3C, + 0X03, 0XFF, 0XFC, 0X00, 0X0F, 0XFF, 0XFF, 0XFF, 0X00, 0X03, 0XFF, 0X00, 0X00, 0X03, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0X00, 0XF5, 0X56, 0XAA, 0XAA, 0XAA, 0XFF, 0XFD, 0X55, 0X55, 0X55, 0XAA, 0XAA, + 0X95, 0X55, 0X55, 0X55, 0X5B, 0XC0, 0X00, 0X0F, 0XF0, 0X0F, 0X03, 0XFF, 0XFC, 0X00, 0X0F, 0XFF, + 0XFF, 0XFF, 0X00, 0X00, 0XFC, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X03, 0XF5, 0X5A, + 0XAA, 0XAA, 0XAA, 0XFF, 0XFD, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X56, 0XC0, + 0X00, 0X0F, 0XF0, 0X0F, 0XC0, 0XFF, 0XFC, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X03, 0XF5, 0X6A, 0XAA, 0XAA, 0XAB, 0XD5, 0XFD, 0X55, + 0X55, 0X55, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X56, 0XE0, 0X00, 0X03, 0XFC, 0X03, 0XC0, 0XFF, + 0XFF, 0X00, 0X00, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0XFF, 0XFF, 0XFF, + 0XC0, 0X0F, 0XE5, 0X6A, 0XAA, 0XAA, 0XAA, 0X55, 0XFD, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XA9, 0X55, + 0X55, 0X55, 0X55, 0XF0, 0X00, 0X0F, 0XFF, 0X03, 0XC0, 0X3F, 0XFC, 0X00, 0X00, 0X3F, 0XFF, 0XFF, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0X0F, 0XD5, 0XAA, 0XAA, 0XAA, + 0XA9, 0X55, 0X7D, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0XBC, 0X00, 0X3F, + 0X7F, 0X00, 0XF0, 0X3F, 0XFF, 0X00, 0X00, 0X0F, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, + 0XFF, 0XFF, 0XFF, 0XFC, 0X00, 0X3F, 0XD5, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X75, 0X55, 0X55, 0X55, + 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X7F, 0XCF, 0XFE, 0X7F, 0XC0, 0XFC, 0X3F, 0XFC, 0X00, + 0X00, 0X0F, 0XFF, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X3F, + 0XDA, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, + 0X55, 0X6F, 0XFF, 0XFE, 0X5F, 0XC0, 0X3C, 0X0F, 0XFF, 0X00, 0X00, 0X00, 0XFF, 0XFC, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X0F, 0XFF, 0XFF, 0XFF, 0XC0, 0X00, 0X3F, 0XDA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, + 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFA, 0X97, 0XF0, + 0X3C, 0X0F, 0XFC, 0X00, 0X00, 0X00, 0X3F, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0XFF, + 0XFC, 0X00, 0X00, 0XFF, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, + 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X56, 0XFF, 0XAA, 0X96, 0XFC, 0X0F, 0X03, 0XFF, 0X00, 0X00, 0X00, + 0X0F, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0XFF, 0XFC, 0X00, 0X00, 0XFF, 0XAA, 0XAA, + 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X56, + 0XAA, 0XAA, 0XA5, 0X7C, 0X03, 0XC3, 0XFF, 0X00, 0X00, 0X00, 0X3C, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X03, 0XFF, 0XFF, 0XC0, 0X00, 0X03, 0XFF, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XA5, 0X7F, 0X03, 0XC3, + 0XFF, 0X00, 0X00, 0X00, 0X3F, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0X00, 0X00, + 0X03, 0XFF, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, + 0X95, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XA9, 0X5F, 0XC0, 0XC0, 0XFF, 0X00, 0X00, 0X00, 0X3F, 0XF0, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFC, 0X00, 0X00, 0X03, 0XFF, 0XAA, 0XAA, 0XAA, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XEA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X6A, 0XAA, + 0XA9, 0X57, 0XC0, 0XF0, 0XFF, 0X00, 0X00, 0X00, 0X3F, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0XFF, 0XC0, 0X00, 0X00, 0X0F, 0XFF, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X5A, 0XAA, 0XBF, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0X57, 0XF0, 0X3C, 0X3F, 0X00, + 0X00, 0X00, 0X03, 0XFF, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0XF0, 0X00, 0X00, 0X00, 0X0F, 0XFF, + 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAB, 0XFA, 0XAA, 0X55, + 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0X55, 0XFC, 0X3C, 0X3F, 0X00, 0X00, 0X00, 0X00, 0XFF, 0XFF, 0XFF, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XFF, 0XEA, 0X95, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0X95, + 0X7C, 0X0C, 0X0F, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X3F, 0XFF, 0XEA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0X55, 0X6A, + 0XAA, 0XBF, 0XFF, 0X95, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0X95, 0X7F, 0X0F, 0X0F, 0X00, 0X00, 0X00, + 0X00, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFF, 0XEA, 0XAA, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, 0X55, 0X5A, 0XAA, 0XAB, 0XFF, 0XFD, 0X55, 0X55, + 0X55, 0XAA, 0XAA, 0XA5, 0XBF, 0XC3, 0XCF, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XC0, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFF, 0XEA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X56, 0XAA, 0X55, 0X56, 0XAA, 0XAA, 0XFF, 0XFF, 0XFD, 0X55, 0X55, 0X6A, 0XAA, 0XA7, 0XFF, 0XC0, + 0XC3, 0X00, 0X00, 0X00, 0X3F, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0XFF, 0XFF, 0XEA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0X55, 0X55, 0XAA, 0XAA, + 0XBF, 0XFF, 0XFF, 0XFF, 0X55, 0X5A, 0XAA, 0XFF, 0XFF, 0XF0, 0XF3, 0XC0, 0X00, 0X00, 0X3F, 0XF0, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XFF, 0XFF, 0XEA, 0X95, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0X55, 0X55, 0X6A, 0XAA, 0XAF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFC, 0X30, 0XC0, 0X00, 0X00, 0X3F, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0XFF, 0XFF, 0XFA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAE, 0XAA, + 0X55, 0X55, 0X5A, 0XAA, 0XAB, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X30, 0XC0, + 0X00, 0X00, 0X3C, 0X00, 0X00, 0X3F, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XFF, 0XFF, + 0XF9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XFA, 0XAA, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XBF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X0C, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XFF, 0XFF, 0XFD, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0XAF, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XBF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XCC, 0X30, 0X00, 0X00, 0X00, 0X00, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XFE, 0XAA, 0XAA, 0X55, 0X55, + 0X55, 0X6A, 0XAA, 0XAB, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC3, 0X30, 0X00, 0X00, + 0X00, 0X0F, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X6F, 0XFA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0XCC, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XF5, 0X55, 0X55, 0X55, 0X57, 0XFF, 0XAA, + 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XBF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFC, 0XCC, 0X00, 0X00, 0X3F, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, + 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0XFF, 0XFE, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, + 0XAA, 0XAA, 0XAF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X03, 0X00, 0X00, 0X3F, 0XFC, + 0X3F, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAB, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X33, 0X00, 0X00, 0X3F, 0XFC, 0X3F, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XAA, 0XAA, 0XAA, 0XA5, + 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XA2, 0XBF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X33, + 0X00, 0X00, 0X3F, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, + 0XA8, 0X3F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0XCC, 0XC0, 0X00, 0X03, 0XFF, 0XFF, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFA, + 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0X80, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XF0, 0X30, 0XC0, 0X00, 0X00, 0X0F, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XEA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XA0, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X33, 0X00, 0X00, + 0X00, 0X00, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XA8, + 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X0C, 0X30, 0X00, 0X00, 0X00, 0X03, 0XFF, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFA, 0XAA, 0XAA, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0X80, 0X00, 0X03, 0XFF, 0XFF, 0XFC, + 0X00, 0X03, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X3F, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0XAA, 0XAA, 0XA0, 0X00, 0X00, 0X03, 0XFF, 0X00, 0X00, 0X00, 0X30, 0X00, 0X00, 0X00, + 0X00, 0X3F, 0X00, 0X00, 0X0C, 0X00, 0X00, 0X00, 0X00, 0X00, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XA8, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X3F, 0X00, 0X00, 0X03, 0X00, + 0X00, 0X00, 0X00, 0X00, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAB, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X3C, 0X00, 0X00, 0X00, 0X00, 0X3F, 0X00, 0X00, 0X0F, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XC2, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X56, 0XAA, 0XAA, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0XFF, 0XFF, 0XFC, 0X0A, 0XA5, 0X55, + 0X55, 0X55, 0X55, 0X55, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XBC, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X03, 0X00, 0X00, 0X00, 0X00, 0X3F, 0X00, 0X00, 0X03, 0XCC, 0X00, 0X00, + 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0X00, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0X95, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X3F, 0X00, 0X00, 0X0C, 0XC3, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XFC, 0X00, + 0X03, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, + 0XAA, 0XAB, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFF, 0XFF, 0XFF, 0X00, 0X00, + 0X0C, 0XC3, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0E, 0X95, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAB, 0XF0, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X0C, 0XC3, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0XF9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XA5, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFF, + 0XFF, 0XFF, 0X00, 0X00, 0X03, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XD5, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, + 0XBF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XBF, 0XC0, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X3F, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, + 0X55, 0X55, 0X56, 0XAA, 0XAF, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XC0, 0X00, + 0X00, 0X00, 0X0C, 0X03, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XFD, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAF, 0XFC, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X0C, 0X03, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X03, 0XF5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, + 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAB, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X3F, 0XFF, 0XFC, 0X00, 0X00, 0X00, 0X03, 0X0C, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XF5, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0XA9, 0XD5, 0X55, 0X55, + 0X55, 0X56, 0XAB, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XC3, 0XFC, 0X00, 0X00, 0X00, + 0X0F, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XD5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XAA, 0XE5, 0X55, 0X55, 0X55, 0X56, 0XAB, 0XFF, 0XC0, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X3F, 0X00, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0XFF, 0XD5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, + 0XAF, 0XFD, 0X55, 0X55, 0X55, 0X55, 0X6B, 0XFF, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0X00, + 0XFC, 0X00, 0X00, 0X00, 0X03, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAB, 0XFA, 0X95, 0X55, 0X55, 0X55, + 0X6A, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0X00, 0XFC, 0X00, 0X00, 0X00, 0X0C, 0XCC, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XFA, 0XA5, 0X55, 0X55, 0X55, 0X56, 0XFF, 0XFC, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X3F, 0X00, 0XFC, 0X00, 0X00, 0X00, 0X0C, 0XC3, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, + 0XFD, 0X55, 0X55, 0X55, 0X57, 0XD5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XEA, + 0XAA, 0X55, 0X55, 0X55, 0X56, 0XFF, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFF, 0XFF, 0XFF, + 0X00, 0X00, 0X0C, 0XC3, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFD, 0X55, 0X55, 0X55, 0X7F, 0XD5, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0XFF, + 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X03, 0X3C, 0X00, 0X00, + 0X00, 0X00, 0X00, 0XFF, 0XFD, 0X55, 0X55, 0X55, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X56, 0X55, 0X55, + 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X3F, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XF5, 0X55, + 0X55, 0X55, 0XFF, 0XD5, 0X55, 0X55, 0X55, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, + 0X95, 0X55, 0X55, 0XFF, 0XFF, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X03, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XF5, 0X55, 0X55, 0X55, 0X7F, 0XD5, 0X55, 0X6A, + 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0XFF, 0XFF, 0XC0, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X03, 0X00, 0X00, 0X00, 0X00, + 0X0F, 0XFF, 0XF5, 0X55, 0X55, 0X55, 0X7F, 0X95, 0X5A, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0X55, 0X55, 0XFF, 0XFF, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X03, 0XF0, + 0X3F, 0XF0, 0X00, 0X00, 0X0C, 0X03, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0XF5, 0X55, 0X55, 0X55, + 0X5D, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XA9, + 0X55, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XF0, 0XFF, 0XFC, 0X00, 0X00, 0X03, 0X0C, + 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFF, 0XF5, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0X57, 0XFF, 0XFF, 0XF0, 0X00, 0X00, + 0X00, 0X00, 0X3F, 0XF0, 0XFF, 0XFC, 0X00, 0X00, 0X0F, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X3F, 0XFF, + 0XF5, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X56, 0XAA, 0XAA, 0X97, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XC3, 0XF0, 0XFF, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFF, 0XF5, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAF, 0XFF, + 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X3F, 0X03, 0XF0, 0X3F, 0X00, 0X00, 0X00, 0X30, 0X00, 0X00, + 0X00, 0X00, 0XFF, 0XFF, 0XFE, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XBF, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X00, + 0X3F, 0X03, 0XF0, 0X3F, 0X00, 0X00, 0X00, 0X30, 0X00, 0X00, 0X00, 0X00, 0XFF, 0XFF, 0XFE, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X56, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X3F, 0X0F, 0XC0, 0X3F, 0X00, 0X00, + 0X00, 0X30, 0X00, 0X00, 0X00, 0X00, 0XFF, 0XFF, 0XFF, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X57, 0XFF, 0XFF, 0XFF, 0XF0, + 0X00, 0X00, 0X00, 0X00, 0X3F, 0XCF, 0XC0, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0XFF, 0XFF, 0XFF, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFF, + 0XC0, 0XFF, 0X00, 0X00, 0XC3, 0X03, 0X00, 0X00, 0X00, 0X00, 0XFF, 0XFF, 0XFF, 0XEA, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XFF, + 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0X0F, 0XFC, 0X00, 0X00, 0XC3, 0X03, + 0X00, 0X00, 0X00, 0X00, 0XFF, 0XFF, 0XFF, 0XEA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5B, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X03, 0XFC, 0X0F, 0XFC, 0X00, 0X00, 0XC3, 0X03, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFF, + 0XFF, 0XFA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0XBF, 0XFF, 0XFF, 0XFF, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XC0, + 0X00, 0X00, 0XC3, 0X03, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFF, 0XFF, 0XFE, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, + 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XFF, 0XFF, 0X00, 0X00, + 0X00, 0X00, 0X0F, 0XFF, 0XFF, 0XFF, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XA9, + 0X55, 0X55, 0X55, 0X55, 0X55, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XFF, + 0XEA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0XBF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFF, 0XFF, 0XFF, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFE, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XBF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0XFF, 0XFF, 0XFF, 0XFF, 0XA6, 0X66, 0X65, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFF, + 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFF, 0XFF, 0XFF, 0XD5, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFD, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0XAA, 0XAF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFF, 0X00, + 0X00, 0X00, 0X0C, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFF, 0XFF, 0XFF, 0XF5, 0X55, + 0X55, 0X55, 0X55, 0X55, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X03, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XD5, 0X55, 0X55, 0X55, 0X55, 0XFF, 0XFF, + 0XFF, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X0F, 0XFF, 0XFF, 0XFC, 0X00, 0X00, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, + 0XFF, 0XFF, 0XFF, 0XFD, 0X55, 0X55, 0X55, 0X55, 0XAB, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XF0, 0X03, 0XFF, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XD5, 0X55, + 0X55, 0X55, 0XAA, 0XAB, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X3F, 0XC0, 0X00, 0XFF, 0X00, 0X00, 0X03, 0X0C, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAF, 0XFF, + 0XFF, 0XFF, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0X00, + 0X00, 0X3F, 0X00, 0X00, 0X0C, 0X03, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFD, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAF, 0XFF, 0XFF, 0XFF, 0XC0, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0X00, 0X00, 0X3F, 0X00, 0X00, 0X0C, 0X03, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XEF, 0X7F, 0XBF, 0XFF, 0XF5, 0X55, + 0XAA, 0XAA, 0XAA, 0XAA, 0XBF, 0XFF, 0XFF, 0XFF, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X3F, 0X00, 0X00, 0X3F, 0X00, 0X00, 0X0C, 0X03, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, + 0XFF, 0XFF, 0X54, 0X44, 0X04, 0X55, 0X55, 0X56, 0X7F, 0XB5, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XBF, + 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0X00, 0X00, 0X3F, + 0X00, 0X00, 0X03, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XE5, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XBF, 0XFF, 0XFF, 0XFC, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X3F, 0XFF, 0XFD, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X57, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X3F, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X03, 0XFF, 0X00, 0X00, 0X00, 0X00, 0XFF, 0XFF, 0XFD, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6F, + 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFF, 0XFF, 0XFF, 0X00, 0X00, + 0X0C, 0X00, 0X00, 0X00, 0X00, 0X00, 0XFF, 0XFF, 0XF5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XFF, 0XFF, 0XFF, 0XFC, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X00, 0X00, 0X00, 0X00, 0X00, + 0XFF, 0XFF, 0XFA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X0C, 0X00, 0X00, 0X00, 0X00, 0X00, 0XFF, 0XFF, 0XFA, 0XAA, 0X99, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XFF, + 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFF, 0X00, 0X00, 0X00, 0X0F, 0XFF, + 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFF, 0XFA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFF, + 0XFA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0XFF, 0XFF, 0XFF, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0XFF, 0XFC, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFF, 0XFE, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XBF, 0XFF, + 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XF0, 0X03, 0XFF, 0X00, 0X00, 0XCF, 0XFF, 0X00, 0X00, + 0X00, 0X00, 0X0F, 0XFF, 0XFE, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAF, 0XFF, 0XFF, 0XFC, 0X00, 0X00, 0X00, 0X00, + 0X3F, 0XC0, 0X00, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0XFE, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X5A, 0XAA, 0XAB, 0XFF, 0XFF, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X3F, 0X00, 0X00, 0X3F, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, + 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XFF, 0XFF, 0XFF, + 0X00, 0X00, 0X00, 0X00, 0X3F, 0X00, 0X00, 0X3F, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X03, 0XFF, 0XFF, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0XBF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X3F, 0X00, + 0X00, 0X3F, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XFF, 0XFF, 0XEA, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAF, 0XFF, 0XFF, 0XC0, 0X00, 0X00, 0X00, 0X3F, 0X00, 0X00, 0X3F, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFF, 0XEA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X57, 0XFF, 0XFF, 0XC0, 0X00, + 0X00, 0X00, 0X3F, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, + 0XFF, 0XFA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0XA5, 0X57, 0XFF, 0XFF, 0XC0, 0X00, 0X00, 0X00, 0X3F, 0XFF, 0XFF, 0XFF, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0XFE, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X57, + 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFE, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, + 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X57, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0X95, 0X55, 0X55, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0XC0, 0XC3, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XFF, 0XFF, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAA, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0XFF, 0XFC, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFF, 0X00, 0X00, 0X00, 0XC0, 0XC3, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X3F, 0XFF, 0XD6, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X6A, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0XFF, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, + 0XFF, 0XF0, 0X00, 0X00, 0XC0, 0XC3, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFF, 0XF5, 0X6A, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, + 0X55, 0X57, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0XFF, 0XFC, 0X00, 0X00, 0X3F, 0X0C, + 0X00, 0X30, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0XF5, 0X56, 0XAA, 0XAA, 0XAA, 0XAA, 0XAB, 0XBE, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X5B, 0XFF, 0XC0, 0X00, 0X00, + 0X00, 0X00, 0X0F, 0XF0, 0X03, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X03, 0XFF, 0XFD, 0X55, 0X6A, 0XAA, 0XAA, 0XAA, 0XAB, 0XFA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0X95, 0X55, 0X55, 0X55, 0X5B, 0XFF, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XC0, 0X00, 0XFF, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X00, 0X00, 0X00, 0X00, 0X00, 0XFF, 0XFF, 0X55, 0X56, 0XAA, + 0XAA, 0XAA, 0XAB, 0XFE, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0XAF, + 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0X00, 0X00, 0X3F, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, + 0X00, 0X00, 0X00, 0X00, 0X00, 0XFF, 0XFF, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XAB, 0XFF, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0XAF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X3F, 0X00, 0X00, 0X3F, 0X00, 0X00, 0X00, 0X03, 0X00, 0X0C, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, + 0XFF, 0XD5, 0X55, 0X56, 0XAA, 0XAA, 0XAB, 0XFF, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, + 0X55, 0X55, 0X5A, 0XBF, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0X00, 0X00, 0X3F, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X03, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0XF5, 0X55, 0X55, 0X6A, 0XAA, + 0XAB, 0XFE, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XFF, 0XF0, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X3F, 0X00, 0X00, 0X3F, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X30, 0X00, + 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFD, 0X55, 0X55, 0X56, 0XAA, 0XAB, 0XBA, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XFF, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XC0, + 0X00, 0XFF, 0X00, 0X00, 0X3F, 0X03, 0X00, 0X03, 0XCC, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFD, + 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XBE, 0XAA, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, + 0XAA, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XF0, 0X03, 0XFC, 0X00, 0X00, 0XC0, 0XC3, + 0X00, 0X00, 0X03, 0X00, 0X3F, 0XFC, 0X00, 0X00, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAF, 0XFC, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X0F, 0XFF, 0XFF, 0XFC, 0X00, 0X00, 0XC0, 0X33, 0X00, 0X00, 0XF3, 0X03, 0XFF, 0XFF, + 0XF0, 0X00, 0X3F, 0XFF, 0XD5, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X5A, 0XAF, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XF0, + 0X00, 0X00, 0XC0, 0X0F, 0X00, 0X00, 0X0C, 0XCF, 0XFF, 0XFF, 0XFF, 0X00, 0X0F, 0XFF, 0XF5, 0X55, + 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XBF, 0XC0, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFF, 0X00, 0X00, 0X00, 0X30, 0X03, 0X00, 0X00, + 0X30, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X03, 0XFF, 0XF5, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, + 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X33, 0X3F, 0XFF, 0XFF, 0XFF, 0XFF, + 0X03, 0XFF, 0XFD, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X5A, 0XAA, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFF, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X0C, 0XCF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X3F, 0XFF, 0X55, 0X55, 0X55, + 0X55, 0X55, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAF, 0XF0, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0XC3, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X3F, 0XFF, 0XD5, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XA9, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAF, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XFF, + 0XFF, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X33, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X0F, + 0XFF, 0XD5, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XBF, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XF0, 0X03, 0XFC, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X03, 0X30, 0XFF, 0XFF, 0XFF, 0XFB, 0XFF, 0XF3, 0XFF, 0XF9, 0X55, 0X55, 0X55, 0X55, + 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X3F, 0XC0, 0X00, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0X0C, 0X3F, 0XFF, + 0XFB, 0XAA, 0X97, 0X7C, 0XFF, 0XFD, 0X55, 0X55, 0X55, 0X55, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X6A, 0XAB, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0X00, 0X00, 0X3F, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XCC, 0X3F, 0XFF, 0XEA, 0XAA, 0XA5, 0X57, 0XFF, 0XFF, + 0X55, 0X55, 0X55, 0X55, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAF, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0X00, 0X00, 0X3F, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0XC3, 0X0F, 0XFF, 0XAA, 0XAA, 0XAA, 0X55, 0X3F, 0XFF, 0XD5, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XBC, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X3F, 0X00, 0X00, 0X3F, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XF3, 0XCF, 0XFE, 0XAA, 0XAA, + 0XAA, 0X95, 0X57, 0XFF, 0XD5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, + 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0X00, 0X00, 0X3F, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X30, 0XC3, 0XFA, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X7F, 0XF5, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAB, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XFF, + 0XFC, 0X00, 0X00, 0X00, 0X3F, 0XC0, 0X00, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X30, + 0XF0, 0XFA, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X5F, 0XFD, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0XAA, 0XAC, 0X00, 0X00, 0X00, 0X3F, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X0F, 0XF0, + 0X03, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3C, 0X30, 0XFE, 0XAA, 0XAA, 0XAA, 0XAA, + 0X55, 0X55, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XA0, 0X00, 0X00, + 0X0F, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0XFF, 0XFC, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X3C, 0X3C, 0X3D, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X7F, 0XD5, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0X00, 0X00, 0X0F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, + 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3C, 0X3C, 0X0F, + 0X6A, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X57, 0XD5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, + 0XA8, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFF, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0X0F, 0X0F, 0XDA, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, + 0X55, 0XFD, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XA0, 0X00, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X0F, 0X03, 0X03, 0XF6, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X7D, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X56, 0XAA, 0X00, 0X3F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, + 0X00, 0XF0, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XC3, 0XC0, 0XF5, 0XAA, + 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X57, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XA8, 0X0F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X00, 0X00, 0X00, 0X03, 0XFC, 0XFF, 0XFC, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XC3, 0XC0, 0XFD, 0XAA, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X56, + 0XD5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, 0X80, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFC, 0X00, 0X00, 0X00, 0X0F, 0XFC, 0XFF, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, + 0XC0, 0XF0, 0X3F, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X75, 0X55, 0X55, 0X55, 0X55, 0X55, + 0XA8, 0X3F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X00, 0X00, 0X00, 0X3F, 0XF0, + 0XFC, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XF0, 0X3C, 0X0F, 0XDA, 0XAA, 0XAA, + 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X3F, 0XC0, 0XFC, 0X3F, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X03, 0XF0, 0X3C, 0X0F, 0XD6, 0XAA, 0XFF, 0XFA, 0XAA, 0XA5, 0X55, 0X75, 0X55, + 0X55, 0X55, 0X55, 0X5A, 0XAF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, + 0X00, 0X00, 0X3F, 0X00, 0XFC, 0X3F, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XFC, 0X0F, + 0X03, 0XF5, 0XAB, 0XFF, 0XFE, 0XAA, 0XA9, 0X55, 0X5D, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XBF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X3F, 0X00, 0XFC, 0X3F, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XFC, 0X0F, 0X00, 0XFD, 0X6F, 0XFF, 0XFE, 0XAA, + 0XAA, 0X55, 0X56, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, 0X7A, 0XAA, + 0XAF, 0XFF, 0XC0, 0X00, 0X00, 0X00, 0X3F, 0X00, 0X00, 0X3F, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0XFF, 0X03, 0XC0, 0XFF, 0X5F, 0XF0, 0XFF, 0XAA, 0XAA, 0X95, 0X57, 0X55, 0X55, 0X55, + 0X56, 0XAF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF5, 0X55, 0X6A, 0XAA, 0XA5, 0XFF, 0XC0, 0X00, 0X00, 0X00, + 0X3F, 0X00, 0X00, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0X03, 0XC0, 0X3F, + 0X7F, 0X00, 0X0F, 0XAA, 0XAA, 0XA9, 0X55, 0XD5, 0X55, 0X55, 0X5A, 0XBF, 0XFF, 0XFF, 0XFF, 0XF5, + 0X55, 0X55, 0XAA, 0XAA, 0XA5, 0XFF, 0XC0, 0X00, 0X00, 0X00, 0X3F, 0XC0, 0X00, 0XFF, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0X03, 0XF0, 0X3F, 0XFC, 0X00, 0X03, 0XEA, 0XAA, 0XA9, + 0X55, 0XD5, 0X55, 0X55, 0X6A, 0XFF, 0XFF, 0XFF, 0XFD, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0X95, 0XFF, + 0X00, 0X00, 0X0F, 0XFC, 0X0F, 0XFC, 0X03, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X3F, 0XC0, 0XF0, 0X0F, 0XF0, 0X00, 0X00, 0XEA, 0XAA, 0XAA, 0X95, 0X75, 0X55, 0X55, 0XAB, 0XFF, + 0XFF, 0XFF, 0X95, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0X55, 0XFF, 0X00, 0X00, 0X3F, 0XFC, 0X0F, 0XFF, + 0XFF, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0X00, 0X00, 0X0F, 0XC0, 0X3C, 0X03, 0XFC, 0X00, + 0X00, 0XEA, 0XAA, 0XAA, 0XA5, 0X75, 0X55, 0X56, 0XBF, 0XFF, 0XFF, 0XAA, 0X55, 0X55, 0X55, 0X5A, + 0XAA, 0XAA, 0X55, 0XFF, 0X00, 0X00, 0XFF, 0XFF, 0X03, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X00, + 0X03, 0XFF, 0XC0, 0X00, 0X0F, 0XF0, 0X3F, 0X03, 0XFC, 0X00, 0X00, 0XEA, 0XAA, 0XAA, 0XA9, 0X75, + 0X55, 0X5A, 0XFF, 0XFF, 0XEA, 0XA9, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0X55, 0XFC, 0X00, 0X0F, + 0XFF, 0XFF, 0X00, 0X3F, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0XFC, 0X00, 0X0F, 0XF0, + 0X0F, 0X00, 0XFC, 0X00, 0X00, 0X3A, 0XAA, 0XAA, 0XAA, 0X75, 0X55, 0X6B, 0XFF, 0XFA, 0XAA, 0XA9, + 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XA9, 0X55, 0XFC, 0X00, 0X3F, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0XFF, 0X00, 0X0F, 0XFC, 0X0F, 0XC0, 0X3C, 0X00, 0X00, 0X3A, + 0XAF, 0XAA, 0XAA, 0XB5, 0X55, 0XBF, 0XFF, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XA9, + 0X57, 0XF0, 0X00, 0X3F, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFC, 0X03, 0XC0, 0X30, 0X00, 0X00, 0X3A, 0XFF, 0XFE, 0XAA, 0XA9, 0X56, 0XFF, + 0XEA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XA5, 0X57, 0XF0, 0X00, 0XFF, 0XFF, 0XFF, + 0XC0, 0X00, 0X00, 0X00, 0X0F, 0XF0, 0X00, 0X00, 0X3F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X03, 0XF0, + 0X00, 0X00, 0X00, 0X2B, 0XFF, 0XFE, 0XAA, 0XAA, 0X5F, 0XFA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, + 0X56, 0XAA, 0XAA, 0XA5, 0X57, 0XF0, 0X03, 0XFF, 0XFF, 0XFF, 0XC0, 0X00, 0X00, 0X00, 0XFF, 0XFC, + 0X00, 0X00, 0X3F, 0XFF, 0XFF, 0XF0, 0X00, 0X3F, 0X03, 0XF0, 0X00, 0X00, 0X00, 0X3F, 0XC0, 0XFF, + 0XAA, 0XAA, 0X7F, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0X95, 0X5B, 0XC0, + 0X0F, 0XFF, 0XFF, 0XFF, 0XC0, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0X00, 0X00, 0X3F, 0XFF, 0XFC, 0X00, + 0X00, 0X3F, 0X00, 0XFC, 0X00, 0X00, 0X00, 0X2C, 0X00, 0X0F, 0XAA, 0XAA, 0XEA, 0XAA, 0XAA, 0XAA, + 0XA5, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0X95, 0X5F, 0XC0, 0X3F, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, + 0X00, 0X03, 0XFF, 0XFF, 0X00, 0X00, 0X3F, 0XFF, 0XF0, 0X00, 0X00, 0X0F, 0XC0, 0X3C, 0X00, 0X00, + 0X00, 0X30, 0X00, 0X0F, 0XEA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X5A, 0XAA, + 0XAA, 0X55, 0X5F, 0X00, 0X3F, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X0F, 0XFF, 0XFF, 0XC0, 0X00, + 0X3F, 0XFF, 0XC0, 0X00, 0X00, 0X0F, 0XC0, 0X3F, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XEA, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0X55, 0X5F, 0X00, 0XFF, 0XFF, + 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X3F, 0XFF, 0XFF, 0XC0, 0X00, 0X3F, 0XFF, 0X00, 0X00, 0X00, 0X03, + 0XC0, 0X3F, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X03, 0XEA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, + 0X55, 0X55, 0XAA, 0XAA, 0XA9, 0X55, 0X7F, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X3F, + 0XFF, 0XFF, 0XC0, 0X00, 0X3F, 0XFC, 0X00, 0X00, 0X00, 0X03, 0XF0, 0X0F, 0XC0, 0X00, 0X00, 0X00, + 0X00, 0X00, 0XEA, 0XAA, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XA9, 0X55, + 0X7C, 0X0F, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X3F, 0XFC, + 0X00, 0X00, 0X00, 0X03, 0XF0, 0X03, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0XEA, 0XAA, 0XAA, 0XAA, + 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XA5, 0X55, 0XB0, 0X0F, 0XFF, 0XFF, 0XFF, 0XFF, + 0XF0, 0X00, 0X00, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X3F, 0XF0, 0X00, 0X00, 0X00, 0X00, 0XF0, 0X03, + 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0XEA, 0XAA, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X56, + 0XAA, 0XAA, 0XA5, 0X55, 0XF0, 0X3F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X00, 0X03, 0XFF, 0XFF, 0XFF, + 0XFC, 0X00, 0X3F, 0XF0, 0X00, 0X00, 0X00, 0X00, 0XF0, 0X03, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X00, + 0XFA, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0X95, 0X55, 0XF0, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFC, 0X00, 0X3F, 0XC0, 0X00, 0X00, + 0X00, 0X00, 0XF0, 0X00, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3A, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, + 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0X95, 0X55, 0XC0, 0XFF, 0XFF, 0XD5, 0X7F, 0XFF, 0XFC, 0X00, + 0X03, 0XFF, 0XFF, 0XFF, 0XFC, 0X00, 0X3F, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X3A, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, + 0X55, 0X57, 0XC3, 0XFF, 0XFF, 0X55, 0X5F, 0XFF, 0XFC, 0X00, 0X0F, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, + 0X3F, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3A, 0XAA, + 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0X55, 0X57, 0X0F, 0XFF, 0XF9, 0X55, + 0X57, 0XFF, 0XFC, 0X00, 0X0F, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0X3F, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X3F, 0XC0, 0X00, 0X00, 0X00, 0X00, 0XFA, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, + 0X55, 0XAA, 0XAA, 0XAA, 0X55, 0X5F, 0X0F, 0XFF, 0XE9, 0X55, 0X57, 0XFF, 0XFC, 0X00, 0X0F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XC0, 0X3F, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0X00, 0X00, 0X00, + 0X00, 0X00, 0XEA, 0XAF, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XA9, 0X55, 0X5C, + 0X3F, 0XFF, 0XA9, 0X55, 0X55, 0XFF, 0XFC, 0X00, 0X3F, 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X3F, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0X00, 0X00, 0X00, 0X00, 0X00, 0XEA, 0XB0, 0XAA, 0XAA, + 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XA5, 0X55, 0X5C, 0XFF, 0XFE, 0XA5, 0X55, 0X55, 0XFF, + 0XFC, 0X00, 0X3F, 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XEB, 0X00, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, + 0XAA, 0XA5, 0X55, 0X7C, 0XFF, 0XFA, 0XA5, 0X55, 0X55, 0XBF, 0XFC, 0X00, 0X3F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XC0, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0XE8, 0X00, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XA5, 0X55, 0X73, 0XFF, 0XEA, + 0XA5, 0X55, 0X55, 0XBF, 0XFC, 0X00, 0XFF, 0XFF, 0XFF, 0XF7, 0XFF, 0XF0, 0XFC, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X50, 0X00, 0XAA, 0X95, 0X55, 0X55, + 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0X95, 0X55, 0XF3, 0XFF, 0XAA, 0XA5, 0X55, 0X55, 0XBF, 0XFC, 0X00, + 0XFF, 0XFF, 0XFD, 0X55, 0XFF, 0XF0, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X03, 0X40, 0X00, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0X55, + 0X55, 0XCF, 0XFF, 0XAA, 0X95, 0X55, 0X55, 0XBF, 0XFC, 0X00, 0XFF, 0XFF, 0XF5, 0X55, 0X7F, 0XFC, + 0XFC, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X00, 0X00, + 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0XCF, 0XFA, 0XAA, 0X95, 0X55, + 0X55, 0XBF, 0XFC, 0X00, 0XFF, 0XFF, 0XA5, 0X55, 0X7F, 0XFC, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X00, 0X00, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X56, + 0XAA, 0XAA, 0XAA, 0X55, 0X57, 0X3F, 0XFA, 0XAA, 0X95, 0X55, 0X55, 0XAF, 0XFC, 0X00, 0XFF, 0XFE, + 0XA5, 0X55, 0X5F, 0XFC, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XA9, 0X55, 0X57, 0XBF, + 0XEA, 0XAA, 0X95, 0X55, 0X55, 0XAF, 0XFC, 0X03, 0XFF, 0XFE, 0XA5, 0X55, 0X57, 0XFC, 0XFC, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X0F, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X95, 0X55, + 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XA9, 0X55, 0X5F, 0XFF, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0XAF, + 0XFC, 0X03, 0XFF, 0XFA, 0XA5, 0X55, 0X57, 0XFF, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3C, 0XC0, + 0X00, 0X00, 0X00, 0X00, 0X30, 0X00, 0X00, 0X00, 0X95, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, + 0XA5, 0X55, 0X5C, 0XFE, 0XAA, 0XAA, 0X55, 0X55, 0X56, 0XAF, 0XFC, 0X03, 0XFF, 0XEA, 0XA5, 0X55, + 0X55, 0XFF, 0XFC, 0X00, 0X00, 0X00, 0X03, 0XC0, 0X30, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X00, + 0X00, 0X00, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XA5, 0X55, 0X5B, 0XFE, 0XAA, 0XAA, + 0X55, 0X55, 0X56, 0XAF, 0XFC, 0X03, 0XFF, 0XEA, 0XA5, 0X55, 0X55, 0XFF, 0XFC, 0X00, 0X00, 0X00, + 0X0F, 0XFC, 0X30, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0X00, 0X00, 0X00, 0X55, 0X55, 0X55, 0X55, + 0X55, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X5F, 0XFA, 0XAA, 0XAA, 0X55, 0X55, 0X56, 0XAF, 0XFC, 0X03, + 0XFF, 0XAA, 0XA5, 0X55, 0X55, 0X7F, 0XFC, 0X00, 0X00, 0X00, 0X30, 0X0F, 0XF0, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X03, 0X00, 0X00, 0X00, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0X95, 0X55, + 0X7F, 0XEA, 0XAA, 0XAA, 0X55, 0X55, 0X56, 0XAF, 0XFC, 0X0F, 0XFF, 0X6A, 0XA9, 0X55, 0X55, 0X7F, + 0XFC, 0X00, 0X00, 0X00, 0XC0, 0X03, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0X00, 0X00, 0X00, + 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0XFF, 0XEA, 0XAA, 0XAA, 0X55, 0X55, + 0X56, 0XAF, 0XFC, 0X0F, 0XFD, 0X6A, 0XA9, 0X55, 0X55, 0X7F, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X03, + 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0X00, 0X00, 0X00, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, + 0XAA, 0XAA, 0X55, 0X55, 0XFF, 0X6A, 0XAA, 0XA9, 0X55, 0X55, 0X56, 0XAB, 0XFC, 0X0F, 0XFD, 0X6A, + 0XA9, 0X55, 0X55, 0X5F, 0XFC, 0X00, 0X00, 0X00, 0XC0, 0X00, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X03, 0X00, 0X00, 0X00, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XA9, 0X55, 0X57, 0XFD, 0XAA, + 0XAA, 0XA9, 0X55, 0X55, 0X56, 0XAB, 0XFC, 0X0F, 0XF5, 0X6A, 0XA9, 0X55, 0X55, 0X5F, 0XFF, 0X00, + 0X00, 0X00, 0X00, 0X00, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0X00, 0X00, 0X00, 0X55, 0X55, + 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XA9, 0X55, 0X57, 0XF5, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X56, 0XAB, + 0XFC, 0X0F, 0XF5, 0X6A, 0XA9, 0X55, 0X55, 0X57, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X03, 0X00, 0X00, 0X00, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XA5, + 0X55, 0X5F, 0XF5, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X5A, 0XAB, 0XFC, 0X3F, 0XF5, 0X6A, 0XA9, 0X55, + 0X55, 0X57, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0X00, + 0X00, 0X00, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X5F, 0XD6, 0XAA, 0XAA, 0XA5, + 0X55, 0X55, 0X5A, 0XAB, 0XFC, 0X3F, 0XD5, 0X6A, 0XA9, 0X55, 0X55, 0X57, 0XFF, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0X00, 0X00, 0X00, 0X55, 0X55, 0X55, 0X55, + 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X5F, 0XD6, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X5A, 0XAB, 0XFC, 0X3F, + 0XD5, 0X6A, 0XA9, 0X55, 0X55, 0X55, 0XFF, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X0F, 0X00, 0X00, 0X00, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X7F, + 0X5A, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X5A, 0XAB, 0XFC, 0X3F, 0XD5, 0X6A, 0XA9, 0X55, 0X55, 0X55, + 0XFF, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3C, 0X00, 0X00, 0X00, + 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X7D, 0X5A, 0XAA, 0XAA, 0XA5, 0X55, 0X55, + 0X5A, 0XAB, 0XFC, 0X3F, 0X55, 0X6A, 0XAA, 0X55, 0X55, 0X75, 0XFF, 0XC0, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XF0, 0X00, 0X00, 0X00, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, + 0XAA, 0X55, 0X55, 0XFD, 0X5A, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X5A, 0XAB, 0XFC, 0X3F, 0X55, 0X6A, + 0XAA, 0X55, 0X55, 0X75, 0X7F, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XFF, + 0XF0, 0X00, 0X00, 0X00, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0XF5, 0X5A, 0XAA, + 0XAA, 0X95, 0X55, 0X55, 0X5A, 0XAB, 0XFC, 0X3F, 0X55, 0X6A, 0XAA, 0X55, 0X55, 0X5D, 0X7F, 0XFC, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0XFC, 0X00, 0X00, 0X00, 0X55, 0X55, + 0X55, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X57, 0XD5, 0X6A, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X5A, 0XAB, + 0XFC, 0XFD, 0X55, 0X5A, 0XAA, 0X55, 0X55, 0X5D, 0X7F, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X3C, 0X00, 0X00, 0X00, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, + 0X57, 0XD5, 0X6A, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X5A, 0XAB, 0XFC, 0XFD, 0X55, 0X5A, 0XAA, 0X55, + 0X55, 0X5D, 0X5F, 0XFF, 0XC3, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0X00, + 0X00, 0X00, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X57, 0X55, 0XAA, 0XAA, 0XAA, 0X95, + 0X55, 0X55, 0X5A, 0XAB, 0XFC, 0XFD, 0X55, 0X5A, 0XAA, 0X95, 0X55, 0X57, 0X5F, 0XFE, 0XAF, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0X00, 0X00, 0X00, 0X55, 0X55, 0X56, 0XAA, + 0XAA, 0XAA, 0XA5, 0X55, 0X57, 0X55, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X5A, 0XAB, 0XFC, 0XF5, + 0X55, 0X5A, 0XAA, 0X95, 0X55, 0X57, 0X5F, 0XFF, 0XAF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X03, 0XC0, 0X00, 0X00, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X5D, 0X55, + 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X6A, 0XAB, 0XFC, 0XFD, 0X55, 0X5A, 0XAA, 0X95, 0X55, 0X57, + 0XD7, 0XFF, 0XAF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XC0, 0X00, 0X00, + 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, + 0X6A, 0XA9, 0XFC, 0XF5, 0X55, 0X5A, 0XAA, 0X95, 0X55, 0X55, 0XF7, 0XFF, 0XAF, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XC0, 0X00, 0X00, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XAA, + 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X6A, 0XA9, 0XFC, 0XF5, 0X55, 0X5A, + 0XAA, 0X95, 0X55, 0X55, 0X7D, 0XFF, 0XAF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0XC0, 0X00, 0X00, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, + 0XAA, 0X55, 0X55, 0X55, 0X6A, 0XA9, 0XFC, 0XF5, 0X55, 0X5A, 0XAE, 0X95, 0X55, 0X55, 0X57, 0XFF, + 0XAF, 0X00, 0X00, 0X00, 0X00, 0X00, 0XF0, 0X00, 0X00, 0X00, 0X00, 0XF0, 0X00, 0X00, 0X55, 0X55, + 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X6A, 0XA9, + 0XFC, 0XD5, 0X55, 0X5A, 0XBE, 0X95, 0X55, 0X55, 0X55, 0XFF, 0XAF, 0X00, 0X00, 0X00, 0X00, 0X03, + 0XFC, 0X00, 0X00, 0X00, 0X00, 0XF0, 0X00, 0X00, 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, + 0X55, 0X5A, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X6A, 0XA9, 0XFC, 0XD5, 0X55, 0X5A, 0XAF, 0XED, + 0X55, 0X55, 0X55, 0XFF, 0XAF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3C, 0X00, 0X00, 0X00, 0X00, 0XF0, + 0X00, 0X00, 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XA9, 0X55, + 0X55, 0X55, 0X6A, 0XA9, 0XFC, 0XD5, 0X55, 0X5A, 0XBF, 0XFD, 0X55, 0X55, 0X55, 0X7F, 0XAF, 0XC0, + 0X00, 0X00, 0X00, 0X00, 0X0F, 0X00, 0X00, 0X00, 0X00, 0XC0, 0X00, 0X00, 0X55, 0X5A, 0XAA, 0XAA, + 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X6A, 0XA9, 0XFF, 0XD5, + 0X55, 0X5A, 0XBF, 0XF5, 0X55, 0X55, 0X55, 0X7F, 0XAF, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X0F, 0X00, + 0X00, 0X00, 0X00, 0XC0, 0X00, 0X00, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X6A, + 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X6A, 0XA9, 0XFF, 0X55, 0X55, 0X5A, 0XFF, 0XF5, 0X55, 0X55, + 0X55, 0X7F, 0XEB, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X03, 0X00, 0X00, 0X00, 0X00, 0XC0, 0X00, 0X00, + 0X55, 0X6A, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, + 0X6A, 0XA9, 0XFF, 0X55, 0X55, 0X57, 0XFF, 0XF5, 0X55, 0X55, 0X55, 0X7F, 0XEB, 0XC0, 0X00, 0X00, + 0X00, 0X00, 0X03, 0X00, 0X00, 0X00, 0X03, 0XC0, 0X00, 0X00, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, + 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0XAA, 0XA9, 0XFF, 0X55, 0X55, 0X56, + 0XFF, 0XF5, 0X55, 0X55, 0X55, 0X5F, 0XEB, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X03, 0X00, 0X00, 0X00, + 0X03, 0X00, 0X00, 0X00, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, + 0X95, 0X55, 0X55, 0X55, 0XAA, 0XA9, 0XFF, 0X55, 0X55, 0X56, 0XBF, 0XF5, 0X55, 0X55, 0X55, 0X5F, + 0XEB, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X03, 0X00, 0X00, 0X00, 0X0F, 0X00, 0X00, 0X00, 0X56, 0XAA, + 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0XAA, 0XA9, + 0XFF, 0X55, 0X55, 0X56, 0XBF, 0XFD, 0X55, 0X55, 0X55, 0X5F, 0XEB, 0XFC, 0X00, 0X00, 0X00, 0X00, + 0X03, 0X00, 0X00, 0X00, 0X3C, 0X00, 0X00, 0X00, 0X56, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, + 0X56, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0XAA, 0XA9, 0XFF, 0X55, 0X55, 0X56, 0XAF, 0XBD, + 0X55, 0X55, 0X55, 0X57, 0XEA, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XF0, 0X00, + 0X00, 0X00, 0X5A, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0X95, 0X55, + 0X55, 0X55, 0XAA, 0XA9, 0XFD, 0X55, 0X55, 0X56, 0XBF, 0XA9, 0X55, 0X55, 0X55, 0X57, 0XEA, 0XBF, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0X00, 0X00, 0X03, 0XC0, 0X5A, 0XAA, 0XAA, 0XAA, + 0XA5, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0XAA, 0XA9, 0XFD, 0X55, + 0X55, 0X56, 0XAE, 0XA9, 0X55, 0X55, 0X55, 0X57, 0XEA, 0XBF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X03, 0XBF, 0X6A, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X5A, 0XAA, + 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XA9, 0XFD, 0X55, 0X55, 0X56, 0XAA, 0XA9, 0X55, 0X55, + 0X55, 0X57, 0XEA, 0XBF, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XE7, + 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, + 0XAA, 0XA9, 0XFD, 0X55, 0X55, 0X56, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X57, 0XFA, 0XAF, 0XF0, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XE5, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, + 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XA9, 0XFD, 0X55, 0X55, 0X56, + 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0XFA, 0XAB, 0XFC, 0X00, 0X03, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0XE9, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XAA, + 0X55, 0X55, 0X55, 0X56, 0XAA, 0XA9, 0XF5, 0X55, 0X55, 0X56, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, + 0XFA, 0XAB, 0XFF, 0XCC, 0X3F, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3A, 0XAA, 0XAA, + 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XA9, + 0XF5, 0X55, 0X55, 0X56, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0XFA, 0XAA, 0XBF, 0XFF, 0XF5, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3A, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, + 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XA9, 0XF5, 0X55, 0X55, 0X56, 0XAA, 0XAA, + 0X55, 0X55, 0X55, 0X55, 0X7A, 0XAA, 0XAB, 0XFF, 0X97, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X3A, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, + 0X55, 0X56, 0XAA, 0XA9, 0XF5, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X7A, 0XAA, + 0XAA, 0XAA, 0X97, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3A, 0XAA, 0XAA, 0XAA, 0XA5, + 0X55, 0X55, 0X55, 0X55, 0XEA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XA5, 0XF5, 0X55, + 0X55, 0X56, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X7A, 0XAA, 0XAA, 0XAA, 0XA7, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X3A, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0XEF, 0XAA, + 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XA5, 0XF5, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0X55, 0X55, + 0X55, 0X55, 0X7E, 0XAA, 0XAA, 0XAA, 0XA7, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3A, + 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X56, 0XFE, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X56, + 0XAA, 0XA5, 0XD5, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X7E, 0XAA, 0XAA, 0XAA, + 0XA7, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3A, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, + 0X55, 0X56, 0XFF, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XA5, 0XD5, 0X55, 0X55, 0X55, + 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X5E, 0XAA, 0XAA, 0XAA, 0XA9, 0XC0, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X3A, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X5B, 0XFE, 0XAA, 0XAA, 0XA5, + 0X55, 0X55, 0X55, 0X56, 0XAA, 0XA5, 0XD5, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, + 0X5E, 0XAA, 0XAA, 0XAA, 0XAA, 0XC0, 0X00, 0X00, 0X03, 0X00, 0X00, 0X00, 0X00, 0XFA, 0XAA, 0XAA, + 0XAA, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XA5, + 0XD5, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0XAA, 0XC0, + 0X00, 0X00, 0X03, 0X00, 0X00, 0X00, 0X00, 0XFA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X5F, + 0XFF, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XA5, 0XD5, 0X55, 0X55, 0X55, 0XAA, 0XAA, + 0X95, 0X55, 0X55, 0X55, 0X57, 0XAA, 0XAA, 0XAA, 0XAA, 0XF0, 0X00, 0X00, 0X0F, 0XC0, 0X00, 0X00, + 0X03, 0XFA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X5B, 0XFF, 0XEA, 0XAA, 0X95, 0X55, 0X55, + 0X55, 0X5A, 0XAA, 0XA5, 0XD5, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X57, 0XAA, + 0XAA, 0XAA, 0XAA, 0XF0, 0X00, 0X00, 0X0F, 0X70, 0X00, 0X00, 0X03, 0XFA, 0XAA, 0XAA, 0XA5, 0X55, + 0X55, 0X55, 0X55, 0X6A, 0XFA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XA5, 0XD5, 0X55, + 0X55, 0X55, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X57, 0XAA, 0XAA, 0XAA, 0XAA, 0XF0, 0X00, 0X00, + 0X3D, 0X70, 0X00, 0X00, 0X0F, 0XEA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XEA, 0XAA, + 0XAA, 0X95, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XA5, 0XD5, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0X95, 0X55, + 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0XAA, 0XBC, 0X00, 0X00, 0XF5, 0X7C, 0X00, 0X00, 0X2F, 0XEA, + 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XEA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X5A, + 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X57, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAC, 0X00, 0X00, 0XF5, 0X6F, 0X00, 0X00, 0XFF, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, + 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, + 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0XAF, 0XC0, 0X0F, 0XF5, 0X5F, + 0XF0, 0X0F, 0XFF, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, + 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, + 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0XAF, 0XF0, 0XFF, 0X55, 0X57, 0XFF, 0XFF, 0XFE, 0XAA, 0XAA, 0XAA, + 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XA5, + 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0XAF, + 0XFF, 0XFF, 0X55, 0X55, 0XFF, 0XFF, 0XFA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, + 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, + 0X95, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XAA, 0XAB, 0XFF, 0XFD, 0X55, 0X55, 0X6F, 0XFF, + 0XEA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, + 0X55, 0X5A, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X6A, + 0XAA, 0XAA, 0XAA, 0XA9, 0XFF, 0XD5, 0X55, 0X55, 0X55, 0X7A, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, + 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XA5, 0X55, 0X55, + 0X55, 0X55, 0X6A, 0XAE, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, + 0XA9, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X57, 0XAA, 0XAE, 0XA5, 0X55, + 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, + 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X6A, + 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X57, 0XEA, 0XFE, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, + 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, + 0X5A, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X57, + 0XFF, 0XFE, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X5D, 0X55, + 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, + 0X55, 0X55, 0X55, 0X6A, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X57, 0XFF, 0XFA, 0XA5, 0X55, 0X55, 0X55, + 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X7D, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0X95, + 0X55, 0X55, 0X55, 0X57, 0XFF, 0XFA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0XAA, + 0X95, 0X55, 0XF5, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, + 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X57, 0XFF, 0XFA, + 0XA5, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0XAA, 0XA5, 0X5B, 0XD5, 0X55, 0X55, 0X55, + 0X6A, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, + 0X55, 0X6A, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X57, 0XFF, 0XFA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X56, + 0XAA, 0XAA, 0XAA, 0XAA, 0XE5, 0XFF, 0XD5, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XA9, 0X55, 0X55, 0X55, + 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0X95, 0X55, 0X55, + 0X55, 0X5F, 0XFF, 0XFA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0XAA, 0XFF, 0XFF, + 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, + 0X95, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFA, 0XA9, 0X55, + 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0XAA, 0XBF, 0XF5, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, + 0XA5, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0XAA, + 0XAA, 0X95, 0X55, 0X55, 0X55, 0X7F, 0XFF, 0XFE, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAB, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X56, + 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0XFF, + 0XFF, 0XFE, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, + 0X55, 0X55, 0X55, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0XFF, 0XFF, 0XFF, 0XA9, 0X55, 0X55, 0X55, + 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0X95, + 0X55, 0X55, 0X57, 0XFF, 0XFF, 0XFF, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XAA, + 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, + 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X7F, 0XFF, 0XFF, + 0XE9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X6A, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, + 0X55, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X57, 0XFF, 0XFF, 0XBA, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X6A, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X6A, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0X95, 0X55, 0X55, + 0X55, 0X55, 0XFF, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XAA, 0XA9, + 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0XFF, 0XAA, 0XAA, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, + 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, + 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X7F, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, + 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, + 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X7E, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, + 0X55, 0X55, 0X56, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X7E, 0XAA, 0XAA, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X7A, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, + 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, + 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X7A, 0XAA, + 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, + 0X56, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, + 0X56, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0XA5, + 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0X95, + 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, + 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, + 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X56, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, + 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0X95, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, + 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, + 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X5A, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X6A, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XA5, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, + 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, + 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X56, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XA5, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, + 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, + 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X6A, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, + 0XAA, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XA9, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XA5, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XA9, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, +}; +#endif diff --git a/src/bitmaps/Bitmaps4c184x360.h b/src/bitmaps/Bitmaps4c184x360.h new file mode 100644 index 00000000..5746742c --- /dev/null +++ b/src/bitmaps/Bitmaps4c184x360.h @@ -0,0 +1,1047 @@ +#ifndef _GxBitmaps4c184x360_H_ +#define _GxBitmaps4c184x360_H_ + +#if defined(ESP8266) || defined(ESP32) +#include +#else +#include +#endif + +const unsigned char Bitmap4c184x360[16560] PROGMEM = { /* 0X81,0X02,0X68,0X01,0XB8,0X00, */ + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X40, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, 0XAA, 0XA8, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X50, 0X0A, 0XAA, 0XAA, 0XAA, 0XAA, 0X80, 0X01, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, + 0X0A, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XA0, 0X05, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X00, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X00, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X2A, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0XA8, 0X05, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X02, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0X81, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X2A, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0XA0, 0X15, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X50, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X40, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, + 0X01, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X0A, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XA0, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X2A, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XA8, 0X15, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFD, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X40, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X01, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFD, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X0A, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X80, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X54, 0X0A, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XA8, 0X15, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XA8, 0X05, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X50, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0X81, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X4A, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAA, 0X81, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X0A, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X02, 0XAA, 0XAA, 0XAA, 0X80, 0XAA, 0XAA, 0XAA, 0XAA, + 0XA0, 0X15, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X54, 0X2A, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X02, 0XAA, 0X02, 0XAA, 0X80, 0XAA, 0XAA, 0XAA, 0XAA, 0XA8, 0X15, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0X02, 0XAA, 0X02, 0XAA, 0X80, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X05, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFD, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X52, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0X02, 0XAA, 0X02, 0XAA, 0X80, 0XAA, 0XAB, 0XAA, 0XAA, 0XAA, 0X05, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X4A, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X02, + 0XAA, 0X02, 0XAA, 0X80, 0XAA, 0XAA, 0XFA, 0XAA, 0XAA, 0X85, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X0A, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X02, 0XAA, 0X02, + 0XAA, 0X80, 0XAA, 0XAA, 0XAF, 0XEA, 0XAA, 0X80, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X2A, 0XA0, 0X2A, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X02, 0XAA, 0X02, 0XAA, 0X80, + 0XAA, 0XAA, 0XFA, 0XAA, 0XAA, 0XA8, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X50, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X55, 0X54, + 0X2A, 0XA0, 0X2A, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X02, 0XAA, 0X02, 0XAA, 0X80, 0XAA, 0XAB, + 0XAA, 0XAA, 0XAA, 0XA8, 0X15, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0XAA, 0XA0, + 0X2A, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X02, 0XAA, 0X02, 0XAA, 0X80, 0XAA, 0XAA, 0XAA, 0XEA, + 0XAA, 0XA8, 0X15, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0XAA, 0XA0, 0X2A, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X00, 0X00, 0X00, 0X00, 0X00, 0XAA, 0XAA, 0XBF, 0XAA, 0XAA, 0XAA, + 0X05, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFD, 0X55, 0X55, 0X55, 0X55, 0X55, 0X42, 0XAA, 0XA0, 0X2A, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0X00, 0X00, 0X00, 0X00, 0X00, 0XAA, 0XAB, 0XEB, 0XAA, 0XAA, 0XAA, 0X85, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X55, 0X42, 0XAA, 0XA0, 0X00, 0X00, 0X00, 0X00, 0X0A, 0XAA, + 0XAA, 0X00, 0X00, 0X00, 0X00, 0X00, 0XAA, 0XAA, 0XBF, 0XAA, 0XAA, 0XAA, 0X81, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X0A, 0XAA, 0XA0, 0X00, 0X00, 0X00, 0X00, 0X0A, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XEA, 0XAA, 0XAA, 0XA1, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X0A, 0XAA, 0XA0, 0X00, 0X00, 0X00, 0X00, 0X0A, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XEA, 0XAA, 0XAA, 0XA0, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X0A, 0XAA, 0XA0, 0X2A, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X80, + 0XAA, 0XAA, 0XAA, 0XEA, 0XAA, 0XAA, 0XA0, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X50, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X55, 0X2A, + 0XAA, 0XA0, 0X2A, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X80, 0XAA, 0XAB, + 0XFF, 0XEA, 0XAA, 0XAA, 0XA8, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X54, 0X2A, 0XAA, 0XA0, + 0X2A, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X80, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAA, 0XA8, 0X15, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X54, 0X2A, 0XAA, 0XA0, 0X2A, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X80, 0XAA, 0XAB, 0XFA, 0XAA, 0XAA, 0XAA, + 0XAA, 0X15, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X54, 0XAA, 0XAA, 0XA0, 0X2A, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X80, 0XAA, 0XAB, 0XAE, 0XAA, 0XAA, 0XAA, 0XAA, 0X15, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X54, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X80, 0XAA, 0XAB, 0XAE, 0XAA, 0XAA, 0XAA, 0XAA, 0X05, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, + 0X55, 0X55, 0X55, 0X55, 0X54, 0XAA, 0XAA, 0XAA, 0XAA, 0X00, 0X00, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0X80, 0XAA, 0XAB, 0XFF, 0XEA, 0XAA, 0XAA, 0XAA, 0X05, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, 0X55, 0X55, + 0X55, 0X55, 0X50, 0XAA, 0XAA, 0XAA, 0XA0, 0X00, 0X00, 0X0A, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0X80, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X85, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, 0X55, 0X55, 0X55, 0X55, + 0X50, 0XAA, 0XAA, 0XAA, 0X00, 0X00, 0X00, 0X00, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X80, + 0XAA, 0XAA, 0XEF, 0XEA, 0XAA, 0XAA, 0XAA, 0X85, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X50, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X52, 0XAA, + 0XAA, 0XA8, 0X00, 0XAA, 0XAA, 0X00, 0X2A, 0XAA, 0XAA, 0X00, 0X00, 0X00, 0X00, 0X00, 0XAA, 0XAB, + 0XAE, 0XEA, 0XAA, 0XAA, 0XAA, 0X81, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X52, 0XAA, 0XAA, 0XA8, + 0X02, 0XAA, 0XAA, 0X80, 0X2A, 0XAA, 0XAA, 0X00, 0X00, 0X00, 0X00, 0X00, 0XAA, 0XAB, 0XBA, 0XEA, + 0XAA, 0XAA, 0XAA, 0X81, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, 0X55, 0X55, 0X55, 0X55, 0X42, 0XAA, 0XAA, 0XA0, 0X0A, 0XAA, + 0XAA, 0XA0, 0X0A, 0XAA, 0XAA, 0X00, 0X00, 0X00, 0X00, 0X00, 0XAA, 0XAB, 0XFB, 0XAA, 0XAA, 0XAA, + 0XAA, 0X81, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFD, 0X55, 0X55, 0X55, 0X55, 0X42, 0XAA, 0XAA, 0XA0, 0X2A, 0XAA, 0XAA, 0XA8, + 0X0A, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X81, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFD, 0X55, 0X55, 0X55, 0X55, 0X42, 0XAA, 0XAA, 0XA0, 0X2A, 0XAA, 0XAA, 0XA8, 0X0A, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAB, 0XFF, 0XEA, 0XAA, 0XAA, 0XAA, 0X81, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, + 0X55, 0X55, 0X55, 0X55, 0X42, 0XAA, 0XAA, 0XA0, 0X2A, 0XAA, 0XAA, 0XA8, 0X0A, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0XA8, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X81, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, 0X55, 0X55, + 0X55, 0X55, 0X42, 0XAA, 0XAA, 0XA0, 0X2A, 0XAA, 0XAA, 0XA8, 0X0A, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0X00, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X81, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, 0X55, 0X55, 0X55, 0X55, + 0X42, 0XAA, 0XAA, 0XA0, 0X0A, 0XAA, 0XAA, 0XA0, 0X0A, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X80, 0X00, + 0XAA, 0XAA, 0XFF, 0XAA, 0XAA, 0XAA, 0XAA, 0X85, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, 0X55, 0X55, 0X55, 0X55, 0X42, 0XAA, + 0XAA, 0XA8, 0X02, 0XAA, 0XAA, 0X80, 0X2A, 0XAA, 0XAA, 0XAA, 0XAA, 0XA0, 0X00, 0X02, 0XAA, 0XAB, + 0XAA, 0XEA, 0XAA, 0XAA, 0XAA, 0X85, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, 0X55, 0X55, 0X55, 0X55, 0X42, 0XAA, 0XAA, 0XA8, + 0X00, 0XAA, 0XAA, 0X00, 0X2A, 0XAA, 0XAA, 0XAA, 0XA8, 0X00, 0X00, 0XAA, 0XAA, 0XAB, 0XAA, 0XEA, + 0XAA, 0XAA, 0XAA, 0X05, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X52, 0XAA, 0XAA, 0XAA, 0X00, 0X00, + 0X00, 0X00, 0XAA, 0XAA, 0XAA, 0XAA, 0X00, 0X00, 0X02, 0XAA, 0XAA, 0XAB, 0XFF, 0XEA, 0XAA, 0XAA, + 0XAA, 0X05, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X52, 0XAA, 0XAA, 0XAA, 0XA0, 0X00, 0X00, 0X0A, + 0XAA, 0XAA, 0XAA, 0XA0, 0X00, 0X0A, 0X02, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X05, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFD, 0X55, 0X55, 0X55, 0X55, 0X50, 0XAA, 0XAA, 0XAA, 0XAA, 0X00, 0X00, 0XAA, 0XAA, 0XAA, + 0XAA, 0X00, 0X02, 0XAA, 0X02, 0XAA, 0XAA, 0XAA, 0XFF, 0XAA, 0XAA, 0XAA, 0XAA, 0X05, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, + 0X55, 0X55, 0X55, 0X55, 0X50, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X00, + 0X2A, 0XAA, 0X02, 0XAA, 0XAA, 0XAB, 0XAA, 0XEA, 0XAA, 0XAA, 0XAA, 0X05, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, 0X55, 0X55, + 0X55, 0X55, 0X50, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X00, 0X00, 0XAA, + 0X02, 0XAA, 0XAA, 0XAB, 0XAA, 0XEA, 0XAA, 0XAA, 0XAA, 0X15, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, + 0X54, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X80, 0X00, 0X0A, 0X02, 0XAA, + 0XAA, 0XAB, 0XAA, 0XEA, 0XAA, 0XAA, 0XAA, 0X15, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X50, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X54, 0XAA, + 0XAA, 0XA0, 0X00, 0X00, 0X00, 0X00, 0X0A, 0XAA, 0XAA, 0XAA, 0X00, 0X00, 0X02, 0XAA, 0XAA, 0XAA, + 0XFF, 0XAA, 0XAA, 0XAA, 0XA8, 0X15, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X54, 0X2A, 0XAA, 0XA0, + 0X00, 0X00, 0X00, 0X00, 0X0A, 0XAA, 0XAA, 0XAA, 0XA8, 0X00, 0X00, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAA, 0XA8, 0X15, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X54, 0X2A, 0XAA, 0XA0, 0X00, 0X00, + 0X00, 0X00, 0X0A, 0XAA, 0XAA, 0XAA, 0XAA, 0XA0, 0X00, 0X02, 0XAA, 0XAA, 0XFF, 0XAA, 0XAA, 0XAA, + 0XA8, 0X15, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFD, 0X55, 0X55, 0X55, 0X55, 0X54, 0X2A, 0XAA, 0XAA, 0XAA, 0XA0, 0X2A, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X80, 0X00, 0XAA, 0XAB, 0XAA, 0XEA, 0XAA, 0XAA, 0XA8, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFD, 0X55, 0X55, 0X55, 0X55, 0X55, 0X2A, 0XAA, 0XAA, 0XAA, 0XA0, 0X2A, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X00, 0XAA, 0XAB, 0XAA, 0XEA, 0XAA, 0XAA, 0XA0, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X0A, 0XAA, 0XAA, 0XAA, 0XA0, 0X2A, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0XA8, 0XAA, 0XAB, 0XAA, 0XEA, 0XAA, 0XAA, 0XA0, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X0A, 0XAA, 0XAA, 0XAA, 0XA0, 0X2A, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0XFF, 0XAA, 0XAA, 0XAA, 0XA1, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X42, 0XAA, 0XAA, 0XAA, 0XA0, 0X2A, 0XAA, 0XAA, 0XAA, 0XAA, 0XA8, 0X0A, 0XAA, 0X00, 0X2A, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X81, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X50, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X55, 0X42, + 0XAA, 0XAA, 0XAA, 0XA0, 0X2A, 0XAA, 0XAA, 0XAA, 0XAA, 0XA0, 0X0A, 0XA8, 0X00, 0X0A, 0XAA, 0XAA, + 0XEF, 0XEA, 0XAA, 0XAA, 0X05, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X55, 0X42, 0XAA, 0XAA, + 0XAA, 0XA0, 0X2A, 0XAA, 0XAA, 0XAA, 0XAA, 0X80, 0X0A, 0XA0, 0X00, 0X02, 0XAA, 0XAB, 0XAE, 0XEA, + 0XAA, 0XAA, 0X05, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0XAA, 0XA0, 0X00, 0X00, + 0X00, 0X00, 0X0A, 0XAA, 0XAA, 0X80, 0XAA, 0X80, 0X2A, 0X00, 0XAA, 0XAB, 0XAA, 0XEA, 0XAA, 0XAA, + 0X05, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFD, 0X55, 0X55, 0X55, 0X55, 0X55, 0X54, 0X2A, 0XA0, 0X00, 0X00, 0X00, 0X00, + 0X0A, 0XAA, 0XAA, 0X02, 0XAA, 0X80, 0XAA, 0X80, 0XAA, 0XAB, 0XAA, 0XEA, 0XAA, 0XA8, 0X15, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFD, 0X55, 0X55, 0X55, 0X55, 0X55, 0X54, 0X2A, 0XA0, 0X00, 0X00, 0X00, 0X00, 0X0A, 0XAA, + 0XAA, 0X02, 0XAA, 0X80, 0XAA, 0X80, 0XAA, 0XAA, 0XFF, 0XAA, 0XAA, 0XA0, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X0A, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X02, + 0XAA, 0X02, 0XAA, 0X80, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XA0, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X0A, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X02, 0XAA, 0X02, + 0XAA, 0X80, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XA1, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X42, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X02, 0XA8, 0X02, 0XAA, 0X00, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X01, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X50, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X52, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X00, 0XA8, 0X0A, 0XA8, 0X02, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0X05, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X2A, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X80, 0X00, 0X0A, 0X80, 0X02, 0XAA, 0XAA, 0XAA, 0XAA, + 0XA8, 0X15, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X54, 0X2A, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XA0, 0X00, 0X2A, 0X80, 0X0A, 0XAA, 0XAA, 0XAA, 0XAA, 0XA8, 0X15, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X0A, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0XA8, 0X00, 0XAA, 0X80, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XA0, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X42, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X81, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X40, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X05, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X54, 0X2A, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XA8, 0X15, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X54, 0X0A, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0XA0, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X50, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X42, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0X81, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X40, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X05, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X54, 0X2A, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XA0, 0X15, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X02, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X81, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFD, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X2A, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XA8, 0X05, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X54, 0X0A, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XA0, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X40, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0X01, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X54, 0X0A, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, + 0XA0, 0X15, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X40, 0X2A, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XA0, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X54, 0X00, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X81, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X50, 0X00, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X85, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X50, 0X00, 0X00, 0X00, 0X02, 0XAA, 0XAA, 0X81, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X54, 0X00, 0X00, 0X00, 0XAA, 0XAA, 0XA1, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X54, 0X2A, 0XAA, 0XA0, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X02, 0XAA, 0XA8, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X40, 0XAA, + 0XA8, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X50, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X54, 0X0A, 0XA8, 0X15, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X02, 0XAA, 0X15, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X0A, 0X05, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X00, 0X81, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X54, 0X00, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X50, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFD, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X57, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X57, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XA5, + 0X55, 0X5A, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, 0X96, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X7F, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0X55, 0XAA, + 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0X9A, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0XA9, + 0X95, 0X55, 0X55, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X7F, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0X5A, 0XAA, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0X9A, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X56, 0XA9, 0XA5, 0X55, + 0X55, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0X5A, 0XAA, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X5A, 0XA6, 0X96, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X5A, 0X59, 0X69, 0X55, 0X55, 0X5A, + 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0XA5, 0X6A, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X5A, 0X96, 0X95, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X59, 0X59, 0X59, 0X55, 0X55, 0X55, 0XAA, 0X95, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X57, 0XFF, + 0X55, 0X55, 0X55, 0X5A, 0X95, 0X5A, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0X96, + 0X95, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X59, 0X59, 0X59, 0X55, 0X55, 0X5A, 0XA9, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X57, 0XFF, 0X55, 0X55, + 0X55, 0X5A, 0X95, 0X5A, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XA6, 0X96, 0XA9, + 0X55, 0X55, 0X55, 0X55, 0X5A, 0X59, 0X69, 0X55, 0X55, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0X55, 0X55, 0X55, 0X5A, + 0X95, 0X5A, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XA5, 0X55, 0X55, + 0X55, 0X55, 0X56, 0XAA, 0XA5, 0X55, 0X55, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0X95, 0X5A, + 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, + 0X55, 0XAA, 0X95, 0X55, 0X55, 0X5A, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0X95, 0X5A, 0X95, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X7F, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X59, 0X55, 0X59, 0X55, + 0X55, 0X5A, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X7F, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X59, 0X55, 0X59, 0X55, 0X55, 0XAA, + 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X65, 0X5A, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0XA5, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XFF, 0XFF, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XA9, + 0X6A, 0XA5, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X5A, 0XA9, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X57, 0XFF, 0XFF, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XA9, 0X6A, 0XA5, + 0X55, 0X55, 0X55, 0X55, 0X59, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X57, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XA5, 0X56, 0XA9, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XA5, 0X56, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0X95, 0X55, 0XA9, 0X55, 0X55, 0X55, 0X56, + 0X5A, 0XAA, 0XA9, 0X55, 0X55, 0X95, 0X55, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0X95, 0X55, 0XA9, 0X55, 0X55, 0X55, 0X56, 0X5A, 0XAA, + 0XA9, 0X55, 0X55, 0X95, 0X55, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X7F, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0X95, 0X55, 0X55, 0X5A, 0X95, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X5A, 0XA5, 0X56, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0XA5, 0X56, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X7F, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0X95, 0X5A, 0X95, 0X5A, 0X95, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, + 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XFF, + 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0X95, 0X5A, 0X95, 0X5A, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XA9, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XFF, 0XFF, 0XFF, + 0X55, 0X55, 0X55, 0X5A, 0X95, 0X5A, 0X95, 0X5A, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, + 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X57, 0XFF, 0XFF, 0XFF, 0X55, 0X55, + 0X55, 0X5A, 0X95, 0X5A, 0X95, 0X5A, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X57, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, + 0X95, 0X5A, 0X95, 0X5A, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X59, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0X95, 0X5A, + 0X95, 0X5A, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X59, 0X55, 0X55, 0X55, 0X55, + 0X59, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0X95, 0X5A, 0X95, 0X5A, + 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X5A, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0X95, 0X5A, 0X95, 0X5A, 0X95, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XA9, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X7F, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XA9, 0X55, 0X6A, 0XAA, + 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X7F, 0XFF, + 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X5A, 0X96, 0XA5, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0X95, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XFF, 0XFF, 0XFF, 0XFF, + 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0X95, + 0XA5, 0XA9, 0X55, 0X55, 0X55, 0X56, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, + 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0X95, 0XA9, 0XA9, + 0X55, 0X55, 0X55, 0X56, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X57, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XA5, 0XAA, 0XA9, 0X55, 0X55, + 0X55, 0X55, 0X6A, 0XAA, 0X95, 0X55, 0X55, 0X5A, 0X99, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X57, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XA5, 0X6A, 0XA5, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X6A, 0XA9, 0X55, 0X55, 0X6A, 0X9A, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XA9, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X95, 0X5A, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, + 0XA9, 0X55, 0X55, 0XA5, 0X96, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0X95, 0X55, + 0X55, 0X95, 0X95, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X7F, + 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0XA9, 0X5A, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X95, + 0X95, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X7F, 0XFF, 0XFF, + 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0XA5, 0X5A, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XA9, + 0X5A, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XA9, 0X55, 0X55, 0X55, 0X55, 0XA5, 0X96, 0X95, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X55, 0X55, 0X55, 0X5A, 0X95, 0X56, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, + 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X56, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, + 0X55, 0X5A, 0X95, 0X56, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XAA, 0XA9, + 0X55, 0X55, 0X55, 0X55, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X5A, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X57, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, + 0X95, 0X56, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, + 0X55, 0X55, 0X56, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X57, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0X95, 0X56, + 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X5A, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0X95, 0X56, 0XA5, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, + 0XA9, 0X55, 0X65, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0X95, 0X55, + 0X6A, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X5A, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0X95, 0X55, 0X55, 0X5A, 0X95, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X7F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X5A, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0X95, 0X55, 0X55, 0X55, 0X55, 0XA9, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0X95, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0X95, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XA5, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0X95, 0X55, 0X6A, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X56, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XA9, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X5A, 0X95, 0X55, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X57, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X5A, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X57, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, + 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X59, 0X55, + 0X59, 0X55, 0X6A, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XA9, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0X55, 0X69, 0X55, + 0X65, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0X96, 0XA5, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X6A, 0X96, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0XA9, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, + 0X9A, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X69, 0X55, 0X55, 0X55, 0X55, 0X55, 0XA9, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, + 0X55, 0X5A, 0XAA, 0XA5, 0X6A, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0X9A, 0XA5, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, + 0XA5, 0X55, 0X6A, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XA6, 0X96, 0XA9, 0X55, 0X55, + 0X55, 0X56, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X57, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XA5, + 0X6A, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0X96, 0X95, 0XA9, 0X55, 0X55, 0X55, 0X56, + 0XAA, 0XAA, 0XA9, 0X55, 0X6A, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X57, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0X96, 0X95, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X5A, 0XA6, 0X96, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0XA5, 0X56, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X56, 0X55, 0X65, 0X55, 0X55, 0X95, + 0X55, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X5A, 0X55, 0X69, 0X55, 0X55, 0X95, 0X55, 0X95, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, + 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X59, 0X55, 0X59, 0X55, 0X55, 0XA5, 0X56, 0X95, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X59, 0X55, 0X59, 0X55, 0X55, 0X6A, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X5A, 0X55, 0X69, 0X55, 0X55, 0X5A, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XA9, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0X95, 0X55, 0XA9, 0X55, 0X55, 0X55, 0X55, + 0X56, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X57, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XA9, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0X95, 0X55, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, + 0X95, 0X55, 0X55, 0X5A, 0X99, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X57, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X6A, 0X9A, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XA9, 0X55, 0X55, 0XA5, + 0X96, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0XA5, 0X5A, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, + 0XAA, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XA9, 0X55, 0X55, 0X95, 0X95, 0X95, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X55, 0X55, 0X55, 0X5A, 0X95, 0X56, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0X95, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X59, 0X65, 0X69, 0X55, 0X55, 0X95, 0X95, 0X95, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, + 0X55, 0X5A, 0X95, 0X56, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X59, 0X69, 0X59, 0X55, 0X55, 0XA5, 0X96, 0X95, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, + 0X95, 0X56, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X59, 0X59, 0X59, 0X55, 0X55, 0X6A, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0X95, 0X56, + 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, + 0X5A, 0X59, 0X59, 0X55, 0X55, 0X5A, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X57, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, + 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X56, 0X9A, + 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X57, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X96, 0XA5, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X5A, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XA5, + 0X55, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X5A, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XA9, 0X56, 0X95, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XA5, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XA9, 0X55, 0X69, 0X5A, 0X6A, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XA9, + 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XA9, 0X55, 0X65, 0X56, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XA9, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X65, 0X56, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X6A, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, + 0X69, 0X5A, 0X95, 0X55, 0X65, 0X56, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0X6A, + 0XA5, 0X55, 0X65, 0X56, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X57, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0X96, 0XA5, 0X69, 0X55, + 0X65, 0X56, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X57, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0X55, 0X95, 0X59, 0X55, 0X6A, 0XAA, + 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0X55, 0X95, 0X59, 0X55, 0X6A, 0XAA, 0XAA, 0X95, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, + 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X56, 0X55, 0X95, 0X59, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0XA9, + 0X55, 0X55, 0X55, 0X56, 0X55, 0X95, 0X59, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, + 0X55, 0X56, 0X55, 0X95, 0X59, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0X95, 0X55, + 0X55, 0X5A, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, + 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0X95, 0X55, 0X55, 0X5A, + 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, + 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X57, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0X95, 0X5A, 0X95, 0X5A, 0X95, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X57, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0X95, 0X5A, 0X95, 0X5A, 0X95, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0X95, 0X5A, 0X95, 0X5A, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X0F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X55, 0X55, 0X55, 0X5A, 0X95, 0X5A, 0X95, 0X5A, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X00, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, + 0X55, 0X5A, 0X95, 0X5A, 0X95, 0X5A, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0X0F, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, + 0X95, 0X5A, 0X95, 0X5A, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X7F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0X95, 0X5A, + 0X95, 0X5A, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0X95, 0X5A, 0X95, 0X5A, + 0X95, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XF0, 0X00, 0X00, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, + 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X57, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, + 0X00, 0X00, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, + 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X57, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0XFF, 0XFF, + 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0X0F, 0XFF, 0XFF, 0XFF, 0XFF, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X00, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0X95, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X7F, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X0F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X7F, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFC, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0X55, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XF0, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0XA9, 0X55, 0X6A, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X57, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XF0, 0X00, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0XA9, 0X55, 0X6A, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X57, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X00, 0X00, + 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XA9, + 0X55, 0X6A, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X00, 0X00, 0X0F, 0XFF, 0XFF, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XA9, 0X55, 0X6A, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X00, 0X00, 0X00, 0XFF, 0XFF, 0XFF, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0XA9, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X00, 0X03, 0XC0, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, + 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X7F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFC, 0X03, 0XFF, 0XC0, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, + 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFC, 0X00, 0X03, 0XC0, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, + 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, + 0X00, 0X00, 0X00, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X00, + 0X00, 0X0F, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X57, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X00, 0X00, + 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, + 0XA5, 0X56, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X57, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0XFF, 0XFF, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XA5, 0X5A, + 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0XFF, 0XFF, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X5A, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XA5, 0X6A, 0XAA, 0XA5, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X5A, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0X55, 0X6A, 0X56, 0XA9, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, + 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XA9, 0X55, 0XA9, 0X55, 0XA9, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, + 0X95, 0X55, 0X55, 0X55, 0X55, 0XA9, 0X55, 0XA9, 0X55, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XC0, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, + 0X55, 0X55, 0X55, 0XA9, 0X56, 0XA9, 0X55, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XC0, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, + 0X55, 0XA9, 0X56, 0XA5, 0X56, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X57, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, + 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, + 0X5A, 0XA5, 0X5A, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X57, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0XFF, 0XFF, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0X95, + 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0XFF, 0XFF, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0X95, 0XAA, 0X95, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X00, 0X00, 0X00, 0X00, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, + 0X69, 0X55, 0X56, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X56, 0XA9, 0X55, 0XA9, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFC, 0X00, 0X00, 0X00, 0X00, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0XAA, 0X55, + 0X5A, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFC, 0X00, 0X00, 0X00, 0X00, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X56, 0XAA, 0X55, 0X5A, 0XAA, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0XA9, 0X55, 0X55, 0XAA, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0X95, 0X55, 0X55, 0X6A, 0X95, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X03, 0XFF, 0XFF, + 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0X95, 0X55, 0X55, 0X5A, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X57, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X3F, 0XFF, 0XFF, 0XFF, + 0X55, 0X55, 0X55, 0X5A, 0X95, 0X55, 0X55, 0X5A, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X57, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X00, 0X00, 0X3F, 0XFF, 0XFF, 0XFF, 0X55, 0X55, + 0X55, 0X5A, 0X95, 0X55, 0X55, 0X5A, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X03, 0XF0, 0X0F, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, + 0XA5, 0X55, 0X55, 0X6A, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFC, 0X0F, 0XFC, 0X0F, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X56, 0XAA, 0X55, + 0X56, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFC, 0X0F, 0XFC, 0X0F, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XA9, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, + 0X0F, 0XFC, 0X0F, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XA5, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X0F, 0XFC, + 0X0F, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XAA, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X00, 0X00, 0X00, 0X00, + 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X57, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X00, 0X00, 0X00, 0X00, 0XFF, 0XFF, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X57, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X00, 0X00, 0X00, 0X00, 0XFF, 0XFF, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, + 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XF0, 0XFF, 0XC0, 0X0F, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0XFF, + 0X00, 0X03, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0XFC, 0X00, 0X03, + 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X03, 0XFC, 0X0F, 0X00, 0XFF, 0XFF, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X57, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X0F, 0XF0, 0X3F, 0XC0, 0XFF, 0XFF, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X5A, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X57, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X0F, 0XF0, 0X3F, 0XC0, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X5A, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFC, 0X0F, 0XC0, 0XFF, 0XC0, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, + 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFC, 0X03, 0XC0, 0XFF, 0X00, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X6A, 0XA9, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X00, 0X00, 0XF0, 0X03, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X56, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0X03, + 0XF0, 0X0F, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X0F, 0XF0, 0X3F, + 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X57, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X57, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X00, 0X00, 0X00, 0X00, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFC, 0X00, 0X00, 0X00, 0X00, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFC, 0X00, 0X00, 0X00, 0X00, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, + 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X7F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0X03, 0XFF, + 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0XAA, 0XAA, 0XAA, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X00, 0X00, 0X0F, 0XFF, 0XFF, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X57, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0XFF, 0XFC, 0X03, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X57, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFC, 0X03, 0XFF, 0XFF, 0X00, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFC, 0X0F, 0XFF, 0XFF, 0XC0, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, + 0X0F, 0XFF, 0XFF, 0XC0, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X7F, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X0F, 0XFF, + 0XFF, 0XC0, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X7F, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X0F, 0XFF, 0XFF, 0XC0, + 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X69, 0X55, 0XAA, 0XA5, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X00, 0X00, 0X00, 0X00, 0XFF, 0XFF, + 0X55, 0X55, 0X55, 0X56, 0XA9, 0X5A, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X00, 0X00, 0X00, 0X00, 0XFF, 0XFF, 0X55, 0X55, + 0X55, 0X5A, 0XA9, 0X5A, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X57, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X00, 0X00, 0X00, 0X00, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, + 0X95, 0X6A, 0X95, 0X6A, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X57, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0X95, 0X6A, + 0X95, 0X6A, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0X95, 0X6A, 0X55, 0X5A, + 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0X95, 0X6A, 0X55, 0X5A, 0X95, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, + 0X03, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0XA5, 0X5A, 0X95, 0X6A, 0X95, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X7F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X3F, + 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XF0, 0X0F, 0XFF, 0XFC, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, + 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, + 0X0F, 0XFF, 0XFC, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0XFF, 0XFC, 0X03, 0XFF, 0XFF, 0X55, 0X55, + 0X55, 0X55, 0X56, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X0F, 0XFF, + 0XFC, 0X03, 0XFF, 0XFF, 0XFF, 0XFC, 0X03, 0XFF, 0XFF, 0X00, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X57, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X0F, 0XFF, 0XFC, 0X03, + 0XFF, 0XFF, 0XFF, 0XFC, 0X0F, 0XFF, 0XFF, 0XC0, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X57, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X0F, 0XFF, 0XFC, 0X03, 0XFF, 0XFF, + 0XFF, 0XFC, 0X0F, 0XFF, 0XFF, 0XC0, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X69, 0X55, 0XAA, 0XA5, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X0F, 0XFF, 0XFC, 0X03, 0XFF, 0XFF, 0XFF, 0XFC, + 0X0F, 0XFF, 0XFF, 0XC0, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X56, 0XA9, 0X5A, 0XAA, 0XAA, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X0F, 0XFF, 0XFC, 0X03, 0XFF, 0XFF, 0XFF, 0XFC, 0X03, 0XFF, + 0XFF, 0X00, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0XA9, 0X5A, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XF0, 0X0F, 0XFF, 0XFC, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0XFF, 0XFC, 0X03, + 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0XA9, 0X5A, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XF0, 0X0F, 0XFF, 0XFC, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, + 0X55, 0X55, 0X55, 0X5A, 0X95, 0X6A, 0X95, 0X6A, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0XF0, + 0X0F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X3F, 0XFF, 0XFF, 0X55, 0X55, + 0X55, 0X5A, 0X95, 0X6A, 0X55, 0X5A, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0XFF, 0XFF, 0XC0, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, + 0X95, 0X6A, 0X55, 0X5A, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X57, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0XFF, 0XFF, 0XC0, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0XA5, 0X5A, + 0X95, 0X6A, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X57, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0XFF, 0XFF, 0XC0, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0XAA, 0XAA, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0XFF, 0XFF, 0XC0, 0XFC, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0XAA, 0XAA, 0XAA, 0XA9, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0XFF, 0XFF, 0XC0, 0XFC, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, + 0X00, 0X3F, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X56, 0XAA, 0XAA, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0X00, 0XFF, 0XFF, 0XC0, 0XFC, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X03, + 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X00, 0XFF, 0XFF, 0XC0, 0XFC, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0XFF, 0XFC, 0X03, 0XFF, 0XFF, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0XFF, + 0XFF, 0XC0, 0XFC, 0X03, 0XFF, 0XFF, 0XFF, 0XFC, 0X03, 0XFF, 0XFF, 0X00, 0XFF, 0XFF, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, + 0XFC, 0X03, 0XFF, 0XFF, 0XFF, 0XFC, 0X0F, 0XFF, 0XFF, 0XC0, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X5A, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0XFC, 0X03, + 0XFF, 0XFF, 0XFF, 0XFC, 0X0F, 0XFF, 0XFF, 0XC0, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X5A, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X57, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0XFC, 0X03, 0XFF, 0XFF, + 0XFF, 0XFC, 0X0F, 0XFF, 0XFF, 0XC0, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5A, + 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X57, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0XFC, 0X03, 0XFF, 0XFF, 0XFF, 0XFC, + 0X03, 0XFF, 0XFF, 0X00, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0XFF, + 0XFC, 0X03, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X03, + 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X3F, 0XFF, 0XFF, + 0X55, 0X55, 0X55, 0X55, 0X6A, 0XA5, 0X55, 0X5A, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFC, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0X55, 0X55, + 0X55, 0X56, 0XAA, 0XAA, 0X55, 0X5A, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFC, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X56, + 0XAA, 0XAA, 0XA5, 0X5A, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X03, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0XA5, 0X5A, + 0XA9, 0X5A, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X57, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, + 0XFF, 0XFF, 0XF0, 0XFC, 0X00, 0X0F, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0X95, 0X56, 0XAA, 0X5A, + 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X57, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, + 0XC0, 0X3C, 0X00, 0X03, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0X95, 0X55, 0XAA, 0XAA, 0X95, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0X3C, + 0X00, 0X03, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X5A, 0XA5, 0X55, 0X5A, 0XAA, 0X95, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X03, 0XFC, 0X0F, 0X00, + 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X56, 0XAA, 0X55, 0X56, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X0F, 0XFC, 0X0F, 0XC0, 0XFF, 0XFF, + 0X55, 0X55, 0X55, 0X56, 0XAA, 0X55, 0X56, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X0F, 0XFC, 0X0F, 0XC0, 0XFF, 0XFF, 0X55, 0X55, + 0X55, 0X55, 0XAA, 0X55, 0X55, 0XAA, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X0F, 0XFF, 0XFF, 0XC0, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, + 0X6A, 0X55, 0X55, 0X56, 0X95, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFC, 0X0F, 0XFF, 0XFF, 0XC0, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFC, 0X03, 0XFF, 0XFF, 0X00, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X57, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X00, 0XFF, 0XFC, 0X03, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X57, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X00, + 0X00, 0X0F, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X3F, + 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0X03, 0XFF, 0XFF, 0XFF, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X57, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X57, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, + 0X55, 0X55, 0X55, 0X55, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, +}; +#endif diff --git a/src/bitmaps/Bitmaps4c400x300.h b/src/bitmaps/Bitmaps4c400x300.h new file mode 100644 index 00000000..bccd3ab1 --- /dev/null +++ b/src/bitmaps/Bitmaps4c400x300.h @@ -0,0 +1,1887 @@ +#ifndef _GxBitmaps4c400x300_H_ +#define _GxBitmaps4c400x300_H_ + +#if defined(ESP8266) || defined(ESP32) +#include +#else +#include +#endif + +const unsigned char Bitmap4c400x300[30000] PROGMEM = { /* 0X00,0X02,0X90,0X01,0X2C,0X01, */ + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X03, 0XFF, 0XFF, 0XC0, 0X00, 0X03, 0XFF, 0X00, 0X00, 0X0F, 0XFF, 0XFF, 0XC0, 0X00, 0XFF, + 0XFF, 0XFC, 0X00, 0X00, 0X0F, 0XFF, 0X00, 0X00, 0X3F, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XFC, 0X00, 0X03, 0XFF, 0X00, 0X00, 0X0F, 0XFF, + 0XFF, 0XF0, 0X00, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0XFF, 0XFF, 0XF0, 0X00, 0X3F, 0XFF, 0XFF, 0XF0, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XFC, 0X00, 0X03, 0XFF, + 0X00, 0X00, 0X0F, 0XFF, 0XFF, 0XFC, 0X00, 0XFF, 0XFF, 0XFF, 0XC0, 0X03, 0XFF, 0XFF, 0XFC, 0X00, + 0X3F, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XF0, 0X00, + 0XFF, 0X00, 0X0F, 0XCF, 0XC0, 0X00, 0X0F, 0XC0, 0X03, 0XFC, 0X00, 0XFC, 0X00, 0X3F, 0XC0, 0X0F, + 0XFC, 0X03, 0XFF, 0X00, 0X00, 0X0F, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0XFC, 0X3F, 0X0F, 0XF0, 0X03, 0XFC, 0X00, 0X00, 0X0F, 0XFC, 0X00, + 0X00, 0X03, 0XF0, 0X00, 0X3F, 0X00, 0X0F, 0XCF, 0XC0, 0X00, 0X0F, 0XC0, 0X00, 0XFC, 0X00, 0XFC, + 0X00, 0X0F, 0XC0, 0X0F, 0XC0, 0X00, 0X3F, 0X00, 0X00, 0X0F, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XFC, 0X3F, 0X0F, 0XF0, 0X03, 0XFC, 0X00, + 0X00, 0X0F, 0XFC, 0X00, 0X00, 0X03, 0XF0, 0X00, 0X3F, 0X00, 0X3F, 0XCF, 0XF0, 0X00, 0X0F, 0XC0, + 0X00, 0XFC, 0X00, 0XFC, 0X00, 0X0F, 0XC0, 0X3F, 0XC0, 0X00, 0X3F, 0XC0, 0X00, 0X0F, 0XC0, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XFC, 0X3F, 0X0F, + 0XFC, 0X0F, 0XFC, 0X00, 0X00, 0X0F, 0XFC, 0X00, 0X00, 0X03, 0XF0, 0X00, 0X3F, 0X00, 0X3F, 0X03, + 0XF0, 0X00, 0X0F, 0XC0, 0X03, 0XFC, 0X00, 0XFC, 0X00, 0X3F, 0XC0, 0X3F, 0X00, 0X00, 0X0F, 0XC0, + 0X00, 0X0F, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0XFC, 0X03, 0X0F, 0XFC, 0X0F, 0XFC, 0X00, 0X00, 0X3F, 0X3F, 0X00, 0X00, 0X03, 0XF0, 0X00, + 0XFF, 0X00, 0X3F, 0X03, 0XF0, 0X00, 0X0F, 0XFF, 0XFF, 0XF0, 0X00, 0XFF, 0XFF, 0XFF, 0X00, 0X3F, + 0X00, 0X00, 0X0F, 0XC0, 0X00, 0X0F, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0XFC, 0X0F, 0X0F, 0XFC, 0X0F, 0XFC, 0X00, 0X00, 0X3F, 0X3F, 0X00, + 0X00, 0X03, 0XFF, 0XFF, 0XFC, 0X00, 0XFC, 0X00, 0XFC, 0X00, 0X0F, 0XFF, 0XFF, 0XC0, 0X00, 0XFF, + 0XFF, 0XFC, 0X00, 0X3F, 0X00, 0X00, 0X0F, 0XC0, 0X00, 0X0F, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X02, 0XAA, 0XAA, 0XAA, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XFC, 0X3C, 0X0F, 0XCF, 0X3C, 0XFC, 0X00, + 0X00, 0X3F, 0X3F, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XF0, 0X00, 0XFC, 0X00, 0XFC, 0X00, 0X0F, 0XFF, + 0XFC, 0X00, 0X00, 0XFF, 0XFF, 0XC0, 0X00, 0X3F, 0X00, 0X00, 0X0F, 0XC0, 0X00, 0X0F, 0XC0, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XFC, 0X00, 0X0F, + 0XCF, 0X3C, 0XFC, 0X00, 0X00, 0XFC, 0X0F, 0XC0, 0X00, 0X03, 0XFF, 0XFF, 0XC0, 0X03, 0XFF, 0XFF, + 0XFF, 0X00, 0X0F, 0XC0, 0XFF, 0X00, 0X00, 0XFC, 0X0F, 0XF0, 0X00, 0X3F, 0X00, 0X00, 0X0F, 0XC0, + 0X00, 0X0F, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0XFC, 0X00, 0X0F, 0XCF, 0X3C, 0XFC, 0X00, 0X00, 0XFF, 0XFF, 0XC0, 0X00, 0X03, 0XF0, 0X00, + 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0X00, 0X0F, 0XC0, 0X3F, 0XC0, 0X00, 0XFC, 0X03, 0XFC, 0X00, 0X3F, + 0XC0, 0X00, 0X3F, 0XC0, 0X00, 0X0F, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0A, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0XFC, 0X00, 0X0F, 0XCF, 0X3C, 0XFC, 0X00, 0X00, 0XFF, 0XFF, 0XC0, + 0X00, 0X03, 0XF0, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0X00, 0X0F, 0XC0, 0X0F, 0XC0, 0X00, 0XFC, + 0X00, 0XFC, 0X00, 0X0F, 0XC0, 0X00, 0X3F, 0X00, 0X00, 0X0F, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X08, + 0XAE, 0XAA, 0XAA, 0XAA, 0XEF, 0X01, 0X26, 0X6A, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XFC, 0X00, 0X0F, 0XC3, 0XF0, 0XFC, 0X00, + 0X03, 0XFF, 0XFF, 0XF0, 0X00, 0X03, 0XF0, 0X00, 0X00, 0X0F, 0XC0, 0X00, 0X0F, 0XC0, 0X0F, 0XC0, + 0X03, 0XF0, 0X00, 0XFC, 0X00, 0X3F, 0X00, 0X0F, 0XFC, 0X03, 0XFF, 0X00, 0X00, 0X0F, 0XC0, 0X00, + 0X00, 0X00, 0X00, 0XAE, 0XEA, 0XFA, 0XFF, 0XEE, 0X40, 0X33, 0X00, 0X01, 0XAA, 0XAA, 0XA9, 0XAA, + 0XAA, 0XA6, 0XA4, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XFC, 0X00, 0X0F, + 0XC3, 0XF0, 0XFC, 0X00, 0X03, 0XF0, 0X03, 0XF0, 0X00, 0X03, 0XF0, 0X00, 0X00, 0X0F, 0XC0, 0X00, + 0X0F, 0XC0, 0X0F, 0XC0, 0X03, 0XFC, 0X00, 0XFC, 0X00, 0X3F, 0XC0, 0X03, 0XFF, 0XFF, 0XFC, 0X00, + 0X00, 0X0F, 0XC0, 0X00, 0X00, 0X00, 0X02, 0XEE, 0XEB, 0XAE, 0XE0, 0X00, 0XC1, 0XC8, 0XCC, 0XCC, + 0X1A, 0XAA, 0XAA, 0X9A, 0XA6, 0XAA, 0XAA, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0XFC, 0X00, 0X0F, 0XC3, 0XF0, 0XFC, 0X00, 0X03, 0XF0, 0X03, 0XF0, 0X00, 0X03, 0XF0, 0X00, + 0X00, 0X0F, 0XC0, 0X00, 0X0F, 0XC0, 0X0F, 0XC0, 0X00, 0XFC, 0X00, 0XFC, 0X00, 0X0F, 0XC0, 0X00, + 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X0F, 0XC0, 0X00, 0X00, 0X00, 0X0E, 0XEF, 0XBE, 0XEF, 0X04, 0X27, + 0X23, 0X00, 0X00, 0X13, 0X0A, 0XAA, 0XAA, 0XAA, 0XAA, 0X6A, 0XAA, 0XAA, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0XFC, 0X00, 0X0F, 0XC0, 0XC0, 0XFC, 0X00, 0X0F, 0XC0, 0X00, 0XFC, + 0X00, 0X03, 0XF0, 0X00, 0X00, 0X3F, 0X00, 0X00, 0X03, 0XF0, 0X0F, 0XC0, 0X00, 0XFF, 0X00, 0XFC, + 0X00, 0X0F, 0XF0, 0X00, 0X0F, 0XFF, 0X00, 0X00, 0X00, 0X0F, 0XC0, 0X00, 0X00, 0X00, 0XFF, 0XFF, + 0XFB, 0XB8, 0X0E, 0X31, 0X0E, 0X3F, 0XFC, 0XC8, 0XC0, 0X5E, 0X6B, 0XAA, 0XAA, 0XA9, 0X69, 0XAA, + 0XA8, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0XBB, 0XFA, 0XFF, 0XB8, 0X60, 0X63, 0XC0, 0XFF, 0X5F, 0X00, 0X70, 0XEA, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0X9A, 0X6A, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFE, 0XFF, 0XAF, 0XB8, 0X3B, 0X36, 0X33, 0XFF, 0XF7, 0X33, + 0X0C, 0X01, 0XAA, 0XAA, 0XAA, 0XAA, 0XA9, 0XA6, 0XA9, 0XA8, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XFE, 0XF8, 0X23, 0X20, + 0X13, 0XFF, 0X77, 0X0C, 0X22, 0X30, 0X6E, 0XAE, 0XAA, 0XAA, 0XAA, 0XAA, 0X9A, 0X6A, 0X40, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0B, 0XFF, 0XEB, + 0XEF, 0XFB, 0X74, 0XB3, 0XC3, 0XFF, 0XF7, 0X00, 0XC4, 0X80, 0X05, 0XEA, 0XEB, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAA, 0XA0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X0F, 0XFF, 0XFE, 0XFB, 0XB0, 0X23, 0X1C, 0X23, 0XD7, 0XDF, 0X33, 0X0C, 0XC8, 0XC2, 0X66, + 0XAA, 0XAA, 0XAE, 0XAA, 0XAA, 0XAA, 0XAA, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0XFF, 0XFB, 0XF8, 0X38, 0XC9, 0XCC, 0XF5, 0X7C, 0X30, + 0XC8, 0XCC, 0X33, 0X2E, 0XAA, 0X9A, 0XAA, 0XAE, 0XAA, 0X9A, 0XAA, 0X80, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0XFF, 0XFF, 0XFC, 0XC7, 0X23, + 0X00, 0X3F, 0XF3, 0XC1, 0X38, 0X6D, 0X82, 0X19, 0X99, 0XAA, 0XAA, 0XAA, 0XAA, 0XA9, 0XAA, 0XA0, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0XFE, + 0XFF, 0XFE, 0X31, 0XCC, 0XF3, 0X03, 0XCC, 0X33, 0X00, 0XC0, 0X34, 0XDA, 0XAA, 0XAA, 0X9A, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X0B, 0XFF, 0XFF, 0XFF, 0XBF, 0X0C, 0X93, 0X93, 0X33, 0XF3, 0X03, 0X2C, 0X8E, 0X60, 0X99, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XA5, 0XAA, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XEF, 0XFB, 0XFE, 0X8B, 0X34, 0XF3, 0X30, 0X0C, 0X36, + 0X04, 0X48, 0XC7, 0X6A, 0XEB, 0XAB, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X5A, 0XA8, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XDF, 0XFF, 0XFE, 0X08, 0XE3, + 0X2D, 0X3F, 0X00, 0XC8, 0X33, 0XE4, 0X89, 0XAA, 0X9A, 0XAA, 0XAA, 0XA6, 0XAA, 0XAA, 0XAA, 0XAA, + 0XA9, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X4B, + 0XFF, 0XFF, 0XC0, 0XB4, 0XC3, 0XC0, 0X1E, 0X7F, 0X60, 0X0C, 0X5E, 0X9E, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0XA9, 0X9A, 0X40, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X36, 0X33, 0XFF, 0XFF, 0XAF, 0X0E, 0XDC, 0XBF, 0XF0, 0X04, 0XC3, 0X92, 0XC9, 0XAA, + 0XAA, 0XAA, 0XBA, 0XAB, 0XAA, 0XAE, 0XAA, 0XAE, 0XAA, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X37, 0X36, 0XFF, 0XFF, 0XC2, 0XC0, 0X07, 0X47, 0XBB, 0XF8, + 0X38, 0X30, 0XE6, 0XEA, 0XAE, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XE9, 0X90, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X77, 0X73, 0X7F, 0XFB, 0X90, 0XCB, + 0X42, 0XF0, 0X14, 0X20, 0XC4, 0X23, 0X1A, 0XAA, 0X6A, 0XEA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0XA4, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XDC, 0X9C, + 0X9F, 0XFF, 0XEC, 0XB0, 0XBC, 0X0F, 0XCF, 0X4F, 0X6F, 0XB4, 0XAD, 0XA6, 0XBA, 0XAE, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XE9, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0XD9, 0XCD, 0XCF, 0XFF, 0X0B, 0X07, 0X03, 0X80, 0XB0, 0XB0, 0X30, 0X03, 0X5A, 0XBA, + 0XEA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XBA, 0X40, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X02, 0XCD, 0XDC, 0X4F, 0XFF, 0XC3, 0XC0, 0XB0, 0XFC, 0X04, 0X1D, + 0X00, 0XF8, 0XB9, 0XAE, 0XAA, 0XAA, 0XAE, 0XBA, 0XEA, 0XAB, 0XAB, 0XAA, 0XAA, 0XBE, 0X80, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0X67, 0X67, 0X3F, 0XFF, 0X30, 0XBE, + 0X0C, 0X47, 0XBF, 0X82, 0XEE, 0X43, 0X67, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XEA, 0XAA, 0XAA, + 0XAA, 0X6E, 0X90, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC9, 0XCD, + 0X9F, 0XFF, 0XFC, 0X40, 0XD0, 0XE0, 0X40, 0XBC, 0X08, 0XB6, 0X7A, 0XBA, 0XBA, 0XEA, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAE, 0XBA, 0X97, 0XA4, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X00, 0X0C, 0X00, 0XC0, 0X0C, 0X00, + 0X30, 0X00, 0X0F, 0XF0, 0X30, 0XFF, 0X00, 0XFF, 0X00, 0X30, 0X30, 0X30, 0XCF, 0XFC, 0X0C, 0X0C, + 0X00, 0X3F, 0X00, 0XFF, 0X00, 0XC0, 0X03, 0XFC, 0X0F, 0XF0, 0X0F, 0XF0, 0XC0, 0XC0, 0XC0, 0X00, + 0X00, 0X0B, 0X77, 0X24, 0XCF, 0XFD, 0XFC, 0XF8, 0X7F, 0X2C, 0XCC, 0X1B, 0XDF, 0X4C, 0XDB, 0XAA, + 0XAA, 0XAB, 0XAA, 0XBA, 0XAA, 0XAA, 0XAA, 0XBA, 0XEA, 0XA9, 0XF8, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X00, 0X33, + 0X00, 0XF0, 0X3C, 0X00, 0XCC, 0X00, 0X0C, 0X0C, 0X30, 0XC0, 0XC0, 0XC0, 0XC0, 0X30, 0X30, 0X30, + 0XC0, 0XC0, 0X0C, 0X0C, 0X00, 0XC0, 0XC3, 0X00, 0XC0, 0XC0, 0X0C, 0X03, 0X0C, 0X0C, 0X0C, 0X00, + 0XC0, 0XC0, 0XC0, 0X00, 0X00, 0X07, 0X9C, 0X7D, 0XDB, 0XFF, 0XFC, 0X3C, 0X02, 0XCC, 0XED, 0X00, + 0X80, 0XEE, 0XBA, 0XAB, 0XAA, 0XAA, 0XAB, 0XAB, 0XBA, 0XBA, 0XAE, 0XAA, 0XAB, 0XAA, 0XBE, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X0C, 0X00, 0X33, 0X00, 0XF0, 0X3C, 0X00, 0XCC, 0X00, 0X0C, 0X0C, 0X30, 0XC0, 0XC0, 0XC0, + 0XC0, 0X0C, 0XCC, 0XC0, 0XC0, 0XC0, 0X0C, 0X0C, 0X00, 0XC0, 0X03, 0X00, 0XC0, 0XC0, 0X0C, 0X03, + 0X0C, 0X0C, 0X0C, 0X00, 0XC0, 0XC0, 0XC0, 0X00, 0X00, 0X0D, 0XE2, 0XD0, 0X8F, 0XFF, 0XFF, 0XF3, + 0XF8, 0XD0, 0X83, 0XFC, 0X1C, 0XC9, 0X6A, 0XEA, 0XAA, 0XAA, 0XBA, 0XAA, 0XAA, 0XAB, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X00, 0XC0, 0XC0, 0XCC, 0XCC, 0X03, 0X03, 0X00, 0X0F, 0XF0, + 0X30, 0XFF, 0X00, 0XC0, 0XC0, 0X0C, 0XCC, 0XC0, 0XC0, 0XC0, 0X0F, 0XFC, 0X00, 0XC0, 0X03, 0X00, + 0XC0, 0XC0, 0X0C, 0X03, 0X0F, 0XF0, 0X0F, 0XF0, 0XC0, 0XC0, 0XC0, 0X00, 0X00, 0X0B, 0X71, 0X2F, + 0X13, 0XFF, 0XFF, 0XFF, 0X0C, 0X3F, 0X02, 0X02, 0XF6, 0XC3, 0XAE, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAB, 0XAA, 0XBA, 0XBA, 0XBA, 0XAA, 0XAE, 0XA0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X00, 0XFF, 0XC0, 0XCC, 0XCC, 0X03, + 0XFF, 0X00, 0X0C, 0X0C, 0X30, 0XC3, 0X00, 0XC0, 0XC0, 0X0C, 0XCC, 0XC0, 0XC0, 0XC0, 0X0C, 0X0C, + 0X00, 0XC0, 0X03, 0X00, 0XC0, 0XC0, 0X0C, 0X03, 0X0C, 0X30, 0X0C, 0X00, 0XC0, 0XC0, 0XC0, 0X00, + 0X00, 0X1D, 0XD3, 0XF5, 0XF1, 0XFF, 0XFF, 0XFF, 0XC1, 0X03, 0XF0, 0X01, 0XC3, 0X2D, 0XAA, 0XAA, + 0XEA, 0XAA, 0XAA, 0XEB, 0XAE, 0XAB, 0XAA, 0XAA, 0XAA, 0XE9, 0X5A, 0XA8, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X00, 0XC0, + 0XC0, 0XC3, 0X0C, 0X03, 0X03, 0X00, 0X0C, 0X0C, 0X30, 0XC3, 0X00, 0XC0, 0XC0, 0X03, 0X03, 0X00, + 0XC0, 0XC0, 0X0C, 0X0C, 0X00, 0XC0, 0XC3, 0X00, 0XC0, 0XC0, 0X0C, 0X03, 0X0C, 0X30, 0X0C, 0X00, + 0XC0, 0XC0, 0XC0, 0X00, 0X00, 0X0E, 0X30, 0X5C, 0X9C, 0XFF, 0XFF, 0XFF, 0XFC, 0XF4, 0X0F, 0XCC, + 0X2D, 0XCA, 0XBA, 0XBA, 0XAE, 0XAE, 0XAA, 0XAA, 0XAA, 0XAA, 0XEB, 0XAB, 0XAA, 0XAB, 0X9A, 0XA8, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X0C, 0X03, 0X00, 0X30, 0XC3, 0X0C, 0X0C, 0X00, 0XC0, 0X0F, 0XF0, 0X30, 0XC0, 0XC0, 0XFF, + 0X00, 0X03, 0X03, 0X00, 0XC0, 0XC0, 0X0C, 0X0C, 0X00, 0X3F, 0X00, 0XFF, 0X00, 0XFF, 0X03, 0XFC, + 0X0C, 0X0C, 0X0C, 0X00, 0X3F, 0X00, 0XFF, 0X00, 0X00, 0X0C, 0X4F, 0X07, 0X34, 0XFF, 0XFF, 0XDF, + 0XFC, 0X0F, 0XC0, 0XEF, 0XB9, 0X9E, 0XAA, 0XAA, 0XAA, 0XBA, 0XBB, 0XBA, 0XEA, 0XBA, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0XC9, 0XFB, + 0X9D, 0X3F, 0XFF, 0X3F, 0XFF, 0X00, 0XB6, 0X00, 0X42, 0XEB, 0XBB, 0XBA, 0XAA, 0XAB, 0XAA, 0XAE, + 0XAB, 0XAA, 0XEE, 0XBA, 0XAE, 0XAA, 0XAA, 0XAA, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X0D, 0XE7, 0X61, 0XD9, 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X3C, 0X07, 0X8C, 0XCA, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAB, 0XAA, 0XBA, 0XBB, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XE6, 0XA0, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X0E, 0XDD, 0XDF, 0X72, 0X3F, 0XFF, 0XFF, 0XFF, 0XF0, 0X9F, 0X3C, + 0XFB, 0X1E, 0XAA, 0XAB, 0XAA, 0XAE, 0XBA, 0XBB, 0XAB, 0XAA, 0XAA, 0XBA, 0XEA, 0XBA, 0XAA, 0XAA, + 0XB8, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X0F, 0XF0, 0X3F, 0XF0, 0X0C, 0X0F, 0XFC, 0X0C, 0X0C, 0X3F, 0XF0, 0XFF, 0X00, 0X3F, 0X00, + 0X00, 0X03, 0X00, 0X03, 0X00, 0X0F, 0XF0, 0XC0, 0X0C, 0XFF, 0XC0, 0X0F, 0XF0, 0X0F, 0XF0, 0X3F, + 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0X4E, 0X35, 0X8D, 0X7F, 0XFD, 0XFF, + 0XFF, 0XFC, 0X03, 0XB0, 0X00, 0X3A, 0XEA, 0XAA, 0XAB, 0XAA, 0XEB, 0XAA, 0XBA, 0XAA, 0XAE, 0XAB, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X00, 0X30, 0X00, 0X33, 0X00, 0XC0, 0X0C, 0X0C, 0X30, 0X00, + 0XC0, 0XC0, 0XC0, 0XC0, 0X00, 0X0C, 0XC0, 0X03, 0X00, 0X30, 0X0C, 0X30, 0X30, 0XC0, 0X00, 0X0C, + 0X00, 0X30, 0X0C, 0X30, 0X30, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0X31, 0XDB, + 0X77, 0X3F, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0X02, 0XDC, 0XEA, 0XBA, 0XAE, 0XBA, 0XAE, 0XBA, 0XBB, + 0XAB, 0XAA, 0XAA, 0XAA, 0XAE, 0XBA, 0XEA, 0XAA, 0XAA, 0X40, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X00, 0X30, 0X00, 0X33, 0X00, 0XC0, + 0X0C, 0X0C, 0X30, 0X00, 0XC0, 0XC0, 0XC0, 0X00, 0X00, 0X0C, 0XC0, 0X03, 0X00, 0X30, 0X0C, 0X30, + 0X30, 0XC0, 0X00, 0X0C, 0X00, 0X30, 0X0C, 0X30, 0X30, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X0E, 0X77, 0X2C, 0XD9, 0XFF, 0XF3, 0XFF, 0XFF, 0XFF, 0XC1, 0XCC, 0X0C, 0XAE, 0XAB, 0XAA, + 0XEB, 0XBA, 0XEB, 0XAA, 0XBA, 0XAE, 0XAA, 0XAA, 0XAB, 0XAB, 0XAA, 0XAA, 0XAA, 0X80, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XF0, 0X3F, + 0XF0, 0XC0, 0XC0, 0XC0, 0X0F, 0XFC, 0X3F, 0XF0, 0XFF, 0X00, 0X3F, 0X00, 0X00, 0X30, 0X30, 0X03, + 0X00, 0X30, 0X0C, 0X0C, 0XC0, 0XFF, 0XC0, 0X0F, 0XF0, 0X30, 0X0C, 0X3F, 0XC0, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XC9, 0XCD, 0XCD, 0X3F, 0XF3, 0XFF, 0XFF, 0XFF, 0XF0, 0XD2, + 0XC1, 0XAA, 0XEA, 0XEE, 0XBA, 0XAE, 0XBA, 0XBB, 0XAA, 0XEB, 0XBA, 0XAA, 0XAA, 0XBA, 0XAA, 0XB6, + 0X5A, 0XA4, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X0C, 0X00, 0X30, 0X00, 0XFF, 0XC0, 0XC0, 0X0C, 0X0C, 0X30, 0X00, 0XC3, 0X00, 0X00, 0XC0, + 0X00, 0X3F, 0XF0, 0X03, 0X00, 0X30, 0X0C, 0X0C, 0XC0, 0XC0, 0X00, 0X0C, 0X00, 0X30, 0X0C, 0X30, + 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X07, 0X6C, 0XD6, 0X71, 0X33, 0XCF, 0XFF, + 0XFF, 0XFF, 0XFC, 0X3C, 0X0F, 0XBA, 0XAE, 0XAA, 0XAB, 0XAB, 0XAB, 0XAE, 0XAE, 0XAA, 0XAB, 0XAE, + 0XAA, 0XBB, 0XAA, 0XEA, 0XA9, 0XA8, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X00, 0X30, 0X00, 0XC0, 0XC0, 0XC0, 0X0C, 0X0C, 0X30, 0X00, + 0XC3, 0X00, 0XC0, 0XC0, 0X00, 0X30, 0X30, 0X03, 0X00, 0X30, 0X0C, 0X03, 0X00, 0XC0, 0X00, 0X0C, + 0X00, 0X30, 0X0C, 0X30, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XD6, 0X7C, + 0XDB, 0XF3, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X0D, 0XCE, 0XBA, 0XEA, 0XBB, 0XBA, 0XBA, 0XAA, 0XEA, + 0XEB, 0XBB, 0XBA, 0XAB, 0XAA, 0XAA, 0XEE, 0XAA, 0XBA, 0XAA, 0X40, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X00, 0X3F, 0XF3, 0X00, 0X30, 0XC0, + 0X0C, 0X0C, 0X3F, 0XF0, 0XC0, 0XC0, 0X3F, 0X03, 0X00, 0XC0, 0X0C, 0X03, 0XFC, 0X0F, 0XF0, 0X03, + 0X00, 0XFF, 0XC0, 0X0C, 0X00, 0X0F, 0XF0, 0X30, 0X30, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X03, 0X9D, 0XC7, 0X33, 0XC3, 0XDF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC8, 0XCE, 0XAB, 0XAE, 0XAE, + 0XBA, 0XEB, 0XEA, 0XAA, 0XAE, 0XBE, 0XBB, 0XEA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XA9, 0X80, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XF3, 0X71, 0X9D, 0XC3, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, + 0X3E, 0XEA, 0XAA, 0XEB, 0XAE, 0XAE, 0XBB, 0XBA, 0XEB, 0XAB, 0XEE, 0XBA, 0XAA, 0XAA, 0XAA, 0XAA, + 0XEA, 0XAA, 0XA0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XE7, 0X2F, 0X37, 0XC7, 0XF7, 0XFF, + 0XFF, 0XFF, 0XFF, 0XF3, 0X7A, 0XAB, 0XBB, 0XBA, 0XBB, 0XEA, 0XEA, 0XAB, 0XAA, 0XAA, 0XBE, 0XEB, + 0XAA, 0XAA, 0XAA, 0XAA, 0XBF, 0XAA, 0XA9, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XFD, 0XD3, + 0X70, 0XC3, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF7, 0XFE, 0XBA, 0XBA, 0XAE, 0XEA, 0XEE, 0XBB, 0XBA, + 0XAE, 0XEB, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAE, 0XAA, 0X80, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X30, 0X03, 0X0F, 0XF0, 0X0F, 0XC0, 0X03, + 0X00, 0X30, 0X03, 0X0F, 0XF0, 0X30, 0XC0, 0XC0, 0XFF, 0X00, 0X00, 0X30, 0X00, 0X30, 0X0C, 0X00, + 0XC0, 0X00, 0XC0, 0X03, 0XFF, 0X03, 0X03, 0X0F, 0XF0, 0X30, 0X3F, 0X00, 0X30, 0X03, 0X00, 0X00, + 0X00, 0X00, 0XF6, 0X39, 0X37, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XEA, 0XEE, 0XEB, 0XBA, + 0XEE, 0XBA, 0XEA, 0XEE, 0XEA, 0XAA, 0XEA, 0XAA, 0XEB, 0XAA, 0XAA, 0X7A, 0XA6, 0X66, 0XAA, 0XA0, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X0C, 0X30, + 0X0C, 0X30, 0X30, 0X0C, 0XC0, 0X30, 0X03, 0X00, 0X30, 0X30, 0XF0, 0XC3, 0X00, 0XC0, 0X00, 0X30, + 0X00, 0XCC, 0X0F, 0X03, 0XC0, 0X03, 0X30, 0X00, 0X30, 0X03, 0X03, 0X0C, 0X0C, 0X30, 0XC0, 0XC0, + 0XCC, 0X03, 0X00, 0X00, 0X00, 0X00, 0X3D, 0XDF, 0X0C, 0X3F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, + 0XEE, 0XAE, 0XBA, 0XEE, 0XEB, 0XBA, 0XEE, 0XEA, 0XBE, 0XEE, 0XAA, 0XEA, 0XAA, 0XBA, 0XAA, 0XAA, + 0XAA, 0XAB, 0XAB, 0XAA, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X0C, 0X0C, 0X30, 0X0C, 0X30, 0X00, 0X0C, 0XC0, 0X30, 0X03, 0X00, 0XC0, 0X30, 0XF0, 0XC3, + 0X00, 0X00, 0X00, 0X30, 0X00, 0XCC, 0X0F, 0X03, 0XC0, 0X03, 0X30, 0X00, 0X30, 0X00, 0XCC, 0X0C, + 0X0C, 0X30, 0XC0, 0X00, 0XCC, 0X03, 0X00, 0X00, 0X00, 0X00, 0X2F, 0X08, 0X77, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XBA, 0XBA, 0XEB, 0XAE, 0XBB, 0XAB, 0XAE, 0XAE, 0XEA, 0XAA, 0XEA, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X6E, 0XC6, 0XAA, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0X30, 0X30, 0X0C, 0X30, 0X00, 0X30, 0X30, 0X30, 0X03, 0X03, + 0X00, 0X30, 0XCC, 0XC3, 0X0F, 0XC0, 0X00, 0X30, 0X03, 0X03, 0X0C, 0XCC, 0XC0, 0X0C, 0X0C, 0X00, + 0X30, 0X00, 0X30, 0X0F, 0XF0, 0X30, 0XC0, 0X03, 0X03, 0X03, 0X00, 0X00, 0X00, 0X00, 0X0F, 0X73, + 0X33, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XAF, 0XAE, 0XAE, 0XBB, 0XBA, 0XEE, 0XBA, 0XEA, + 0XAE, 0XEE, 0XAA, 0XAA, 0XEA, 0XAA, 0XEA, 0XAA, 0XAA, 0XA1, 0XFD, 0X66, 0XA0, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0X30, 0X30, 0X0C, 0X30, 0X00, 0X3F, + 0XF0, 0X30, 0X03, 0X03, 0X00, 0X30, 0XC3, 0XC3, 0X00, 0XC0, 0X00, 0X30, 0X03, 0XFF, 0X0C, 0XCC, + 0XC0, 0X0F, 0XFC, 0X00, 0X30, 0X00, 0X30, 0X0C, 0X00, 0X30, 0XC0, 0X03, 0XFF, 0X03, 0X00, 0X00, + 0X00, 0X00, 0X07, 0XB7, 0X73, 0X30, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XAE, 0XEE, 0XEB, 0XEE, + 0XAE, 0XEE, 0XEB, 0XAE, 0XEA, 0XAA, 0XAA, 0XBB, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XA6, 0X2B, 0XFA, + 0XA8, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XC0, 0X30, + 0X0C, 0X30, 0X30, 0X30, 0X30, 0X30, 0X03, 0X0C, 0X00, 0X30, 0XC3, 0XC3, 0X00, 0XC0, 0X00, 0X30, + 0X03, 0X03, 0X0C, 0X30, 0XC0, 0X0C, 0X0C, 0X00, 0X30, 0X00, 0X30, 0X0C, 0X00, 0X30, 0XC0, 0XC3, + 0X03, 0X03, 0X00, 0X00, 0X00, 0X00, 0X03, 0XF0, 0XC4, 0XC0, 0X0F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, + 0XEB, 0XBA, 0XBA, 0XBA, 0XEE, 0XEB, 0XBB, 0XBA, 0XAE, 0XEE, 0XBA, 0XBE, 0XEE, 0XEE, 0XAE, 0XAB, + 0XAA, 0X78, 0XA6, 0XAE, 0XAA, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0XC0, 0X0F, 0XF0, 0X0F, 0XC0, 0XC0, 0X0C, 0X3F, 0XC3, 0X0F, 0XF0, 0X30, 0XC0, 0XC0, + 0XFF, 0X03, 0X00, 0X30, 0X0C, 0X00, 0XCC, 0X30, 0XC0, 0X30, 0X03, 0X00, 0X30, 0X00, 0X30, 0X0C, + 0X00, 0X30, 0X3F, 0X0C, 0X00, 0XC3, 0XFC, 0X00, 0X00, 0X00, 0X00, 0XE7, 0X03, 0X70, 0X00, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFE, 0XAF, 0XBB, 0XBB, 0XBB, 0XBE, 0XBA, 0XBA, 0XAB, 0XBA, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0XA6, 0XAF, 0XAA, 0XA6, 0XAA, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3C, + 0X7C, 0X3C, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XBB, 0XBA, 0XEE, 0XEB, 0XAF, 0XEB, 0XAE, 0XBA, + 0XAB, 0XAB, 0XAB, 0XAA, 0XAE, 0XEA, 0XEB, 0XBA, 0XAA, 0XAB, 0XAA, 0XAA, 0X6A, 0XA0, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X3F, 0XED, 0XCC, 0X00, 0X00, 0X03, 0XFF, 0XCC, 0X0E, 0XEE, 0XEF, 0XAE, 0XEE, + 0XBA, 0XEE, 0XEA, 0XEB, 0XAA, 0XBA, 0XAA, 0XAA, 0XAB, 0XBA, 0XAA, 0XAA, 0XAA, 0XA6, 0XEA, 0XAA, + 0XAB, 0XA8, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0X77, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, + 0XBB, 0XAB, 0XBB, 0XBB, 0XBE, 0XEE, 0XAE, 0XBA, 0XBB, 0XAA, 0XAA, 0XAA, 0XAA, 0XBB, 0XAE, 0XAE, + 0XAA, 0XEA, 0X7A, 0XAA, 0XAA, 0XAA, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X0F, 0XF0, 0X3F, 0XF0, 0XFF, 0X00, 0X3F, 0X03, 0X03, 0X03, 0X0C, 0X0C, 0X03, 0XFC, 0X00, + 0X3F, 0XC0, 0XC3, 0XFC, 0X03, 0XFC, 0X00, 0XC0, 0XC0, 0XC3, 0X3F, 0XF0, 0X30, 0X30, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XF3, 0X1F, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X0E, 0XEF, 0XBA, 0XBB, 0XBB, 0XBA, 0XAB, 0XEB, 0XAB, 0XAA, 0XAB, 0XAA, 0XAA, + 0XBB, 0XAA, 0XAB, 0XBA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X0C, 0X30, 0X00, 0XC0, 0XC0, 0XC0, 0XC3, 0X03, 0X03, 0X0F, + 0X0C, 0X0C, 0X03, 0X00, 0X30, 0X30, 0XC3, 0X03, 0X03, 0X03, 0X00, 0XC0, 0XC0, 0XC3, 0X03, 0X00, + 0X30, 0X30, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0XFC, 0XCF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XBB, 0XBB, 0XBB, 0XBB, 0XAE, 0XEE, 0XBA, 0XBA, + 0XBA, 0XBA, 0XAA, 0XBA, 0XAA, 0XAA, 0XEA, 0XAB, 0XAA, 0X6A, 0XBA, 0XAA, 0XAA, 0XAA, 0XB8, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X0C, 0X30, 0X00, 0XC0, 0XC0, 0XC0, + 0X03, 0X03, 0X03, 0X0F, 0X0C, 0X0C, 0X00, 0X00, 0X30, 0X30, 0XC3, 0X03, 0X03, 0X03, 0X00, 0X33, + 0X33, 0X03, 0X03, 0X00, 0X30, 0X30, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X3F, 0X73, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XBB, 0XAE, 0XBB, 0XBB, + 0XBB, 0XBB, 0XEA, 0XEA, 0XAB, 0XAA, 0XBB, 0XAB, 0XAA, 0XAA, 0XAB, 0XAA, 0X6A, 0XAA, 0XB9, 0XAA, + 0XAA, 0XAA, 0XAA, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XF0, 0X3F, + 0XF0, 0XFF, 0X00, 0XC0, 0X03, 0XFF, 0X03, 0X0C, 0XCC, 0X0C, 0X3F, 0X00, 0X3F, 0XC0, 0XC3, 0XFC, + 0X03, 0X03, 0X00, 0X33, 0X33, 0X03, 0X03, 0X00, 0X3F, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XF3, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X0F, + 0XBB, 0XEE, 0XEE, 0XEB, 0XAE, 0XEE, 0XFE, 0XAF, 0XFA, 0XBB, 0XAA, 0XEA, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAE, 0XAA, 0XAA, 0XAA, 0XAF, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X0C, 0X00, 0X30, 0X00, 0XC3, 0X00, 0XC0, 0X03, 0X03, 0X03, 0X0C, 0X3C, 0X0C, 0X03, 0X00, + 0X30, 0X30, 0XC3, 0X0C, 0X03, 0X03, 0X00, 0X33, 0X33, 0X03, 0X03, 0X00, 0X30, 0X30, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XFF, 0XC0, 0X00, + 0X00, 0X00, 0X00, 0X0F, 0XBE, 0XBA, 0XEE, 0XEE, 0XEE, 0XBA, 0XEF, 0XFE, 0XBA, 0XAB, 0XBA, 0XAA, + 0XAA, 0XBA, 0XEA, 0XAA, 0XAA, 0XAA, 0XAA, 0XEA, 0XAA, 0XAA, 0XAB, 0XE8, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X00, 0X30, 0X00, 0XC3, 0X00, 0XC0, 0XC3, 0X03, 0X03, 0X0C, + 0X3C, 0X0C, 0X03, 0X00, 0X30, 0X30, 0XC3, 0X0C, 0X03, 0X03, 0X00, 0X0C, 0X0C, 0X03, 0X03, 0X00, + 0X30, 0X30, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X3F, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XFB, 0XEE, 0XFB, 0XBA, 0XEE, 0XEE, 0XEE, 0XEE, + 0XEF, 0XBB, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XEA, 0XA9, 0XBA, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X00, 0X3F, 0XF0, 0XC0, 0XC0, 0X3F, + 0X03, 0X03, 0X03, 0X0C, 0X0C, 0X03, 0XFC, 0X00, 0X3F, 0XC0, 0XC3, 0X03, 0X03, 0XFC, 0X00, 0X0C, + 0X0C, 0X03, 0X03, 0X00, 0X30, 0X30, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X0F, 0X0E, 0XEE, 0XEE, 0XEE, + 0XEB, 0XBB, 0XBA, 0XEA, 0XAA, 0XEA, 0XAA, 0XEB, 0XAB, 0XAB, 0XAB, 0XAA, 0XAA, 0XAA, 0XAA, 0XBA, + 0XAA, 0XA6, 0X92, 0X9A, 0XA0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3C, 0X00, 0X00, 0X00, 0X00, 0X0F, + 0X3E, 0XFB, 0XEF, 0XEE, 0XFF, 0XEB, 0XAE, 0XAA, 0XAA, 0XAA, 0XAE, 0XAA, 0XEA, 0XAA, 0XBA, 0XAE, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XA9, 0XA8, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0X00, + 0X00, 0X00, 0X00, 0X0C, 0X3F, 0XAE, 0XEF, 0XFF, 0XFB, 0XBF, 0XBA, 0XEB, 0XBA, 0XEA, 0XAA, 0XBA, + 0XAA, 0XAB, 0XAA, 0XAA, 0XEA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X9A, 0X80, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X08, 0X3B, 0XEF, 0XBA, 0XEE, 0XFF, 0XFF, 0XAA, 0XBA, + 0XAA, 0XBA, 0XAA, 0XAE, 0XAE, 0XBA, 0XAB, 0XBA, 0XBA, 0XEB, 0XAA, 0XAA, 0XEE, 0XAA, 0XAA, 0XAA, + 0XAA, 0XA8, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XF0, 0X30, 0X30, 0X3F, 0XC0, 0X3F, + 0XC0, 0XFF, 0X00, 0X0C, 0X00, 0XFC, 0X0F, 0XFC, 0X30, 0X30, 0XC0, 0X00, 0X3F, 0XC0, 0XFF, 0XC3, + 0XFF, 0X3F, 0XF0, 0X00, 0X0C, 0X0C, 0X00, 0XC0, 0XC0, 0X0C, 0XC3, 0X03, 0X00, 0XFF, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3E, 0XBE, 0XEF, 0XBB, + 0XEB, 0XFA, 0XAA, 0XAA, 0XAA, 0XAB, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAB, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0XBA, 0XAA, 0XEA, 0XA9, 0X9A, 0XA0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X30, 0X30, + 0X30, 0XC0, 0X30, 0XC0, 0X30, 0XC0, 0XC0, 0X33, 0X03, 0X03, 0X00, 0XC0, 0X30, 0X30, 0XC0, 0X00, + 0X30, 0X00, 0XC0, 0X03, 0X00, 0X03, 0X00, 0X00, 0X0C, 0X0C, 0X03, 0X30, 0X30, 0X30, 0XC3, 0XC3, + 0X03, 0X00, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X3B, 0XBE, 0XEA, 0XFA, 0XEF, 0XEB, 0XBB, 0XAA, 0XAA, 0XAA, 0XBA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAE, 0XBA, 0XAA, 0XAA, 0XAB, 0XAB, 0XBA, 0XAA, 0XAA, 0XA9, 0XAA, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0XC0, 0X0C, 0XC0, 0XC0, 0X00, 0XC0, 0X30, 0XC0, 0XC0, 0X33, 0X03, 0X00, 0X00, 0XC0, + 0X0C, 0XC0, 0XC0, 0X00, 0X30, 0X00, 0XC0, 0X03, 0X00, 0X03, 0X00, 0X00, 0X0C, 0X0C, 0X03, 0X30, + 0X30, 0X30, 0XC3, 0XC3, 0X03, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X3E, 0XFB, 0XFA, 0XAA, 0XAE, 0XAE, 0XAA, 0XAA, 0XAA, 0XBA, 0XAB, 0XAE, + 0XEA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XEA, 0XAE, 0XAA, 0XAA, 0X6A, 0XAA, 0XA6, 0X8A, 0X80, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0X00, 0X03, 0X00, 0XC3, 0XF0, 0XC0, 0X30, 0XC0, 0XC0, 0XC0, + 0XC3, 0X00, 0X00, 0XC0, 0X03, 0X00, 0XC0, 0X00, 0X3F, 0XC0, 0XFF, 0XC3, 0XFF, 0X03, 0X00, 0X00, + 0X0F, 0XFC, 0X0C, 0X0C, 0X0C, 0XC0, 0XC3, 0X33, 0X03, 0X0F, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3B, 0XFB, 0XFF, 0XAB, 0XEA, 0XAA, 0XAE, 0XAE, + 0XAA, 0XAA, 0XEA, 0XAA, 0XAB, 0XAA, 0XAA, 0XAA, 0XEB, 0XAA, 0XEE, 0XBA, 0XAA, 0X6A, 0XAA, 0XAA, + 0XAA, 0X6A, 0XA9, 0XA8, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0X00, 0X03, 0X00, 0XC0, 0X30, 0XC0, + 0X30, 0XC0, 0XC0, 0XFF, 0XC3, 0X00, 0X00, 0XC0, 0X03, 0X00, 0XC0, 0X00, 0X30, 0X00, 0XC0, 0X03, + 0X00, 0X03, 0X00, 0X00, 0X0C, 0X0C, 0X0F, 0XFC, 0X0C, 0XC0, 0XC3, 0X0F, 0X03, 0X00, 0XC0, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XEF, 0XFB, 0XEA, + 0X9A, 0XAF, 0XFA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAE, 0XAB, 0XAA, 0XAA, 0XAA, 0XAA, 0XAB, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X96, 0X1A, 0X40, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X00, 0X03, + 0X00, 0XC0, 0X30, 0XC0, 0X30, 0XC0, 0XC0, 0XC0, 0XC3, 0X03, 0X00, 0XC0, 0X03, 0X00, 0XC0, 0X00, + 0X30, 0X00, 0XC0, 0X03, 0X00, 0X03, 0X00, 0X00, 0X0C, 0X0C, 0X0C, 0X0C, 0X03, 0X00, 0XC3, 0X0F, + 0X03, 0X00, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X3F, 0XFE, 0XAA, 0XBF, 0XAA, 0XFF, 0XAA, 0XAE, 0XEA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XEA, 0XAA, + 0XAA, 0XAA, 0XAA, 0XEA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XA9, 0XA0, 0XB0, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X0F, 0XF0, 0X03, 0X00, 0X3F, 0XC0, 0X3F, 0XC0, 0XFF, 0X03, 0X00, 0X30, 0XFC, 0X00, 0XC0, + 0X03, 0X00, 0XFF, 0X00, 0X30, 0X00, 0XFF, 0XC3, 0XFF, 0X03, 0X00, 0XC0, 0X0C, 0X0C, 0X30, 0X03, + 0X03, 0X00, 0XC3, 0X03, 0X00, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X0F, 0XFE, 0XBF, 0XFE, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XA6, + 0XAA, 0XAA, 0XAA, 0XAA, 0XEA, 0XEA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X2A, + 0X79, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XC0, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0B, 0XEB, 0XFF, 0XEA, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0XBA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAB, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAA, 0X9A, 0X66, 0X93, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XAF, 0XBB, 0XAA, + 0XBE, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XA6, 0XA8, 0X74, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X0B, 0XFA, 0XFE, 0XBA, 0XBE, 0XEA, 0XAA, 0XAA, 0X7A, 0XAE, 0XEA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAB, 0XAE, 0XAB, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X6B, 0X1D, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X3F, 0XF0, 0XC0, 0XC0, 0XC0, 0XFF, 0X00, 0XFF, 0XC0, 0X3F, 0XC0, 0XFF, 0XC0, 0XFC, 0X00, + 0X3F, 0XC0, 0X3F, 0XC0, 0XC3, 0X03, 0X0F, 0XFC, 0X30, 0XC0, 0XC0, 0X3F, 0XC0, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X0F, 0XEB, 0XEA, 0XEB, 0XB6, 0XAA, 0XEA, 0XAA, 0XAA, 0XE9, 0XAB, 0XAA, + 0XEA, 0XAA, 0XAB, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XEA, 0XAA, 0XAA, 0XAA, 0XA6, 0XA9, 0XA6, + 0XA9, 0XA2, 0XD0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0X00, 0XC0, 0XC0, 0XC3, 0X00, 0XC0, 0X0C, 0X00, 0XC0, 0X30, + 0XC0, 0X03, 0X03, 0X00, 0X30, 0X30, 0XC0, 0X30, 0XC3, 0XC3, 0X00, 0XC0, 0X30, 0XF0, 0XC0, 0XC0, + 0X30, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3B, 0XBE, 0XEE, 0XEA, 0XAA, 0XAA, 0XAA, 0XAE, + 0XAA, 0XAA, 0X7A, 0XAA, 0XAA, 0XAA, 0XA9, 0X9A, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0XEB, 0XAA, 0XAA, + 0XAB, 0XA6, 0XAA, 0XA9, 0XDA, 0X98, 0XA4, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0X00, 0X33, 0X33, 0X03, 0X00, 0XC0, + 0X0C, 0X00, 0XC0, 0X30, 0XC0, 0X03, 0X00, 0X00, 0X30, 0X30, 0XC0, 0X30, 0XC3, 0XC3, 0X00, 0XC0, + 0X30, 0XF0, 0XC0, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XEE, 0XFE, 0XFA, 0XEF, + 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X69, 0XFA, 0XAA, 0XAB, 0XAA, 0XAA, 0XB6, 0XAA, 0X9A, 0XAA, 0XAA, + 0XAA, 0X6A, 0XAA, 0XAA, 0XA9, 0X7A, 0XAA, 0XA9, 0X56, 0XA5, 0X2E, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0X00, 0X33, + 0X33, 0X03, 0X00, 0XC0, 0X0C, 0X00, 0XC0, 0X30, 0XFF, 0XC0, 0XFC, 0X00, 0X3F, 0XC0, 0XC0, 0X30, + 0XC3, 0X33, 0X00, 0XC0, 0X30, 0XCC, 0XC0, 0XC3, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0XEE, 0XEE, 0XEA, 0XBA, 0XAA, 0XBA, 0XAB, 0XAE, 0XBA, 0XAA, 0XFF, 0XAA, 0XAA, 0XAA, 0XAA, 0XA9, + 0X9A, 0XAE, 0XAE, 0XBA, 0XAA, 0XFB, 0XEA, 0XBA, 0XAA, 0XAA, 0XAA, 0XA8, 0XF5, 0X6A, 0X4A, 0X80, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X03, 0X00, 0X33, 0X33, 0X03, 0X00, 0XC0, 0X0C, 0X00, 0XC0, 0X30, 0XC0, 0X00, 0X03, 0X00, + 0X30, 0X00, 0XC0, 0X30, 0XC3, 0X0F, 0X00, 0XC0, 0X30, 0XC3, 0XC0, 0XC0, 0X30, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X03, 0XFB, 0XEA, 0XAF, 0XAE, 0XBA, 0XAA, 0XBA, 0XBA, 0X66, 0X9B, 0XFF, 0XEE, + 0XAA, 0XAA, 0XAA, 0XAA, 0XA9, 0XA6, 0XAA, 0XAA, 0XBA, 0X6E, 0XAA, 0XAA, 0XAA, 0XAB, 0XAA, 0XAB, + 0X1D, 0X6A, 0X61, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0X00, 0X0C, 0X0C, 0X03, 0X00, 0XC0, 0X0C, 0X00, 0XC0, 0X30, + 0XC0, 0X03, 0X03, 0X00, 0X30, 0X00, 0XC0, 0X30, 0XC3, 0X0F, 0X00, 0XC0, 0X30, 0XC3, 0XC0, 0XC0, + 0X30, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XAB, 0XEF, 0XAB, 0XEA, 0XAE, 0XEA, 0XAA, 0XA6, + 0XAA, 0XAF, 0XEB, 0XAA, 0XAA, 0XBA, 0XAA, 0XAA, 0XAA, 0XA9, 0XAA, 0XAA, 0XAA, 0X96, 0XEE, 0XAA, + 0XEA, 0XB9, 0XFA, 0X97, 0X77, 0X56, 0X99, 0XA4, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0X00, 0X0C, 0X0C, 0X00, 0XFF, 0X00, + 0X0C, 0X00, 0X3F, 0XC0, 0XFF, 0XC0, 0XFC, 0X00, 0X30, 0X00, 0X3F, 0XC0, 0XC3, 0X03, 0X00, 0XC0, + 0X30, 0XC0, 0XC0, 0X3F, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XEB, 0XEA, 0XAA, 0XBA, + 0XAE, 0XEA, 0XAA, 0XAA, 0XAA, 0XAE, 0XAA, 0XAB, 0XAA, 0XA9, 0X6A, 0XAA, 0XAA, 0XAA, 0XAE, 0XAA, + 0XAA, 0X9A, 0X6A, 0XBA, 0XAA, 0XBD, 0X95, 0X79, 0X8F, 0X76, 0XA8, 0X68, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, + 0XAF, 0XEE, 0XBE, 0XBA, 0XAA, 0XAE, 0XAA, 0XA9, 0XAA, 0XAA, 0XAA, 0XEA, 0XAE, 0XA7, 0XFE, 0XAA, + 0XAB, 0XAA, 0X9B, 0XAA, 0XAA, 0XA7, 0XAA, 0XAA, 0XAA, 0XB7, 0XD7, 0X99, 0X99, 0XFD, 0XAA, 0X9A, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X0E, 0XFE, 0XEA, 0XEA, 0XEA, 0XAA, 0XAA, 0XAE, 0XAA, 0XAA, 0XBA, 0XEA, 0XEA, + 0XAA, 0XAF, 0XFF, 0XEA, 0XAA, 0XAA, 0XA6, 0XEA, 0XAA, 0XDA, 0XA9, 0XAA, 0XEA, 0XBF, 0X6A, 0XA6, + 0X62, 0X5D, 0X6A, 0X6A, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0E, 0XBB, 0XBE, 0XEA, 0XAB, 0XAA, 0XAA, 0XAA, 0XBA, + 0XEA, 0XAA, 0XAE, 0XAA, 0XAA, 0XAB, 0XFB, 0XFE, 0XAA, 0XAA, 0XA9, 0XBA, 0XAA, 0XB7, 0XAA, 0XAA, + 0XAA, 0XB7, 0X5A, 0X6A, 0X69, 0X97, 0X5A, 0X99, 0XA0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XF0, 0X0F, 0XF0, 0X3F, 0XC3, 0X03, + 0X03, 0X00, 0XC0, 0X0F, 0XF0, 0X3F, 0XC0, 0X00, 0X0C, 0X03, 0X03, 0X03, 0XFC, 0X00, 0XFF, 0XC3, + 0X03, 0X03, 0X0F, 0XF0, 0X03, 0XFF, 0X00, 0XFF, 0X03, 0XFF, 0X03, 0XF0, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XBE, 0XAE, 0XAE, 0XAA, + 0XAE, 0XAE, 0XAA, 0XAA, 0XAA, 0XAE, 0XAA, 0XAB, 0XAA, 0XAF, 0XFE, 0XBF, 0X66, 0XAE, 0X55, 0X96, + 0XAA, 0XA6, 0XAA, 0XAB, 0XAA, 0XBF, 0X5A, 0XB9, 0XA6, 0X76, 0X5A, 0XA6, 0XA0, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X00, 0X30, + 0X0C, 0X30, 0X33, 0X03, 0X03, 0X03, 0X30, 0X0C, 0X0C, 0X30, 0X30, 0X00, 0X33, 0X03, 0XC3, 0X03, + 0X03, 0X00, 0X0C, 0X03, 0X03, 0X03, 0X30, 0X0C, 0X00, 0X30, 0X03, 0X00, 0XC3, 0X00, 0X0C, 0X0C, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3B, + 0XAF, 0XBB, 0XEE, 0XEB, 0XAA, 0XAA, 0XAB, 0XAA, 0XAB, 0XAA, 0XEA, 0XEA, 0XAA, 0XAF, 0XEE, 0XAA, + 0XFD, 0X55, 0XFF, 0X57, 0XAA, 0XAD, 0XAA, 0XAA, 0XBA, 0XBF, 0XD6, 0XAA, 0XEA, 0X95, 0XD5, 0XA9, + 0XA8, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X0C, 0X00, 0X30, 0X0C, 0X30, 0X30, 0XCC, 0XCC, 0X03, 0X30, 0X0C, 0X0C, 0X30, 0X30, 0X00, + 0X33, 0X03, 0XC3, 0X03, 0X03, 0X00, 0X0C, 0X00, 0XCC, 0XCC, 0X30, 0X0C, 0X00, 0X30, 0X03, 0X00, + 0XC3, 0X00, 0X0C, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X3A, 0XFE, 0XFB, 0XFF, 0XEA, 0XBA, 0XBB, 0XAE, 0XBA, 0XBA, 0XAB, 0XAE, 0XAA, + 0XAA, 0XAF, 0X7B, 0XAB, 0XAA, 0XEA, 0XFF, 0X7F, 0XFA, 0XA9, 0XAB, 0XAA, 0XAA, 0XFF, 0X75, 0XA9, + 0X96, 0X99, 0X56, 0XAA, 0XAA, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XF0, 0X30, 0X0C, 0X3F, 0XC0, 0XCC, 0XCC, 0X0C, 0X0C, 0X0F, + 0XF0, 0X30, 0X30, 0X00, 0XC0, 0XC3, 0X33, 0X03, 0X03, 0X00, 0X0C, 0X00, 0XCC, 0XCC, 0X30, 0X0C, + 0X00, 0X30, 0X03, 0X00, 0XC3, 0XFF, 0X03, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X2E, 0XBE, 0XBB, 0XEE, 0XFA, 0XAA, 0XAB, 0XAA, 0XAE, + 0X9E, 0XAA, 0XAA, 0XBA, 0XAE, 0XA7, 0XDA, 0XEA, 0XAA, 0XAA, 0X7F, 0XFF, 0X7E, 0XAB, 0X6A, 0X5B, + 0XAA, 0XFF, 0XF5, 0X6A, 0XA9, 0XD7, 0X75, 0X6A, 0X6A, 0X40, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X00, 0X30, 0X0C, 0X30, 0XC0, 0XCC, + 0XCC, 0X0F, 0XFC, 0X0C, 0X30, 0X30, 0X30, 0X00, 0XFF, 0XC3, 0X0F, 0X03, 0X03, 0X00, 0X0C, 0X00, + 0XCC, 0XCC, 0X30, 0X0C, 0X00, 0X30, 0X03, 0X00, 0XC3, 0X00, 0X00, 0X0C, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3B, 0XBE, 0XAA, 0XEA, 0XAB, + 0XBA, 0XEA, 0XBA, 0XBA, 0X66, 0XBB, 0XBB, 0XAB, 0XAA, 0XAD, 0XEA, 0XEA, 0XEE, 0XAA, 0XBF, 0XBB, + 0X7B, 0XAA, 0X7B, 0XAA, 0XAB, 0XFD, 0XF9, 0X5A, 0XDA, 0XA5, 0X95, 0X66, 0X66, 0X80, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X00, 0X30, + 0X0C, 0X30, 0XC0, 0X30, 0X30, 0X0C, 0X0C, 0X0C, 0X30, 0X30, 0X30, 0X00, 0XC0, 0XC3, 0X0F, 0X03, + 0X03, 0X00, 0X0C, 0X00, 0X30, 0X30, 0X30, 0X0C, 0X00, 0X30, 0X03, 0X00, 0XC3, 0X00, 0X0C, 0X0C, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3A, + 0XBE, 0XEB, 0XBB, 0XBA, 0XAA, 0XAE, 0XEB, 0XAA, 0XEA, 0XAA, 0XAA, 0XAA, 0XAA, 0XB6, 0X76, 0XBA, + 0XAB, 0XBA, 0X77, 0XF7, 0XFE, 0XEA, 0X5A, 0XAA, 0XAB, 0XFF, 0X77, 0X55, 0XAD, 0X67, 0X66, 0X59, + 0X56, 0X90, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X0C, 0X00, 0X0F, 0XF0, 0X30, 0X30, 0X30, 0X30, 0X30, 0X03, 0X0C, 0X0C, 0X3F, 0XC0, 0X03, + 0X00, 0X33, 0X03, 0X03, 0XFC, 0X00, 0X0C, 0X00, 0X30, 0X30, 0X0F, 0XF0, 0X00, 0X30, 0X00, 0XFF, + 0X03, 0XFF, 0X03, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X3B, 0XBB, 0XAF, 0XBB, 0XAE, 0XEE, 0XBA, 0XEA, 0XE9, 0XA6, 0XEB, 0XAE, 0XBA, + 0XBA, 0X5D, 0XDA, 0XAA, 0XAA, 0XAA, 0XBF, 0X7B, 0X77, 0X7A, 0XDA, 0XAB, 0XAF, 0X7F, 0XF9, 0X96, + 0X66, 0X69, 0X75, 0X7A, 0X7D, 0XA0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X2E, 0XEB, 0XEE, 0XEE, 0XAB, 0XAA, 0XAE, 0XAE, 0X7A, + 0XAA, 0XAA, 0XEB, 0XAB, 0XAB, 0X59, 0XA7, 0XAE, 0XAE, 0XBA, 0XAF, 0X9E, 0X9F, 0XEE, 0XD5, 0XAA, + 0X5F, 0XFF, 0XBD, 0XD5, 0X97, 0X59, 0X9D, 0X55, 0X9D, 0X64, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3B, 0XEE, 0XEE, 0XAA, 0XEE, + 0XB6, 0XEA, 0XEA, 0XEA, 0XAE, 0XAE, 0XAE, 0XAA, 0XBA, 0X69, 0XDE, 0X6B, 0XAA, 0XAA, 0X9F, 0XD5, + 0XB6, 0X76, 0XA5, 0XD5, 0X7F, 0XF7, 0XDD, 0XD6, 0X5D, 0XDB, 0X66, 0X59, 0X99, 0XA8, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3A, + 0XBB, 0XBA, 0XBA, 0XAB, 0XFA, 0XAE, 0XAE, 0XAA, 0XAA, 0XAB, 0XEA, 0XEB, 0XA9, 0X5A, 0X66, 0XDA, + 0XAA, 0XAE, 0XAF, 0XFE, 0X59, 0XED, 0XAD, 0XFF, 0XA9, 0XFF, 0XFE, 0X75, 0X99, 0XB5, 0XDE, 0X55, + 0X99, 0XAA, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X0F, 0XF0, 0X0F, 0XF0, 0X30, 0X30, 0X33, 0XFF, 0X03, 0X0C, 0X0C, 0X0F, 0XF0, 0X00, 0XFF, + 0X00, 0X0C, 0X00, 0XFC, 0X03, 0X03, 0X30, 0X30, 0X30, 0X0C, 0X00, 0XFF, 0X03, 0XFC, 0X00, 0X00, + 0XC0, 0XC0, 0XCC, 0X0C, 0X0C, 0X0F, 0XC0, 0X30, 0X30, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X7B, 0XFB, 0XEA, 0XEB, 0XBE, 0XEA, 0XEB, 0XAA, 0XEA, 0XBA, 0XAA, 0XAE, 0XAA, + 0XA5, 0X6D, 0X9D, 0X9D, 0XEA, 0XEA, 0X9F, 0XFF, 0X69, 0X5D, 0XD9, 0XEF, 0XAF, 0XFF, 0X7B, 0X6D, + 0X59, 0XFF, 0XED, 0X5D, 0X66, 0X6A, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X0C, 0X30, 0X0C, 0X30, 0X3C, 0X30, 0X30, 0X03, 0X0F, 0X0C, + 0X30, 0X0C, 0X00, 0XC0, 0XC0, 0X33, 0X03, 0X03, 0X03, 0X0C, 0X30, 0X30, 0X30, 0X33, 0X00, 0XC0, + 0XC3, 0X03, 0X00, 0X00, 0XC0, 0XC0, 0XCC, 0X0C, 0X0C, 0X30, 0X30, 0X30, 0X30, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X2E, 0XBB, 0XFE, 0XBA, 0XEB, 0XBA, 0XBA, 0XAE, 0XB6, + 0XAA, 0XAB, 0XAB, 0XBE, 0XEB, 0X66, 0XDD, 0XE6, 0XA6, 0X5A, 0XA7, 0XDF, 0XF6, 0X97, 0XDA, 0X0F, + 0XAA, 0X7F, 0XF7, 0X5E, 0X55, 0X6F, 0X77, 0X96, 0X59, 0X6A, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X0C, 0X30, 0X0C, 0X30, 0X3C, 0X30, + 0X30, 0X03, 0X0F, 0X0C, 0X30, 0X00, 0X00, 0XC0, 0XC0, 0X33, 0X03, 0X00, 0X03, 0X30, 0X0C, 0XCC, + 0XC0, 0X33, 0X00, 0XC0, 0XC3, 0X03, 0X00, 0X00, 0X33, 0X33, 0X0C, 0X0C, 0X0C, 0X30, 0X00, 0X30, + 0X30, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XBA, 0XEE, 0XEA, 0XEE, 0XEA, + 0XBA, 0XEB, 0XAB, 0XAA, 0XAB, 0XAA, 0XE6, 0XDE, 0XA5, 0X76, 0X66, 0XDD, 0X7B, 0XB6, 0X97, 0XDF, + 0XFF, 0X66, 0X75, 0XB1, 0XEA, 0XFF, 0XFF, 0XE7, 0X5B, 0X7F, 0XF7, 0X55, 0X5D, 0X5A, 0X90, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XF0, 0X30, + 0X0C, 0X30, 0X33, 0X30, 0X30, 0X03, 0X0C, 0XCC, 0X30, 0XFC, 0X00, 0XFF, 0X00, 0XC0, 0XC3, 0X00, + 0X03, 0XCC, 0X0C, 0XCC, 0XC0, 0XC0, 0XC0, 0XFF, 0X03, 0X03, 0X00, 0X00, 0X33, 0X33, 0X0F, 0XFC, + 0X0C, 0X30, 0X00, 0X3F, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, + 0XBE, 0XFB, 0XBB, 0XBB, 0XAE, 0XBB, 0XBA, 0XFA, 0XEA, 0XEA, 0XAA, 0XAA, 0XA7, 0X79, 0X9D, 0XEF, + 0X69, 0XED, 0X99, 0XF7, 0XF7, 0XDD, 0X6D, 0X7F, 0X76, 0X6F, 0XEF, 0XDF, 0XD5, 0X5B, 0XFF, 0XD9, + 0X95, 0X96, 0XA0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X0C, 0X00, 0X30, 0X0C, 0X30, 0X30, 0XF0, 0X30, 0X03, 0X0C, 0X3C, 0X30, 0X0C, 0X00, 0XC0, + 0XC0, 0XFF, 0XC3, 0X00, 0X03, 0X0C, 0X0C, 0XCC, 0XC0, 0XFF, 0XC0, 0XC3, 0X03, 0X03, 0X00, 0X00, + 0X33, 0X33, 0X0C, 0X0C, 0X0C, 0X30, 0X00, 0X30, 0X30, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0XBA, 0XBE, 0XBA, 0XEB, 0XAA, 0XBA, 0XEA, 0XAB, 0XBA, 0XAA, 0XAB, 0XAA, 0XA7, + 0X69, 0X7E, 0X66, 0X7F, 0XDD, 0XFF, 0X55, 0XFD, 0XFF, 0XFB, 0X5E, 0X5F, 0X3D, 0X9F, 0XFE, 0XF6, + 0XD6, 0X65, 0XFF, 0X65, 0X5B, 0X59, 0XA0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X00, 0X30, 0X0C, 0X30, 0X30, 0XF0, 0X30, 0X03, 0X0C, 0X3C, + 0X30, 0X0C, 0X00, 0XC0, 0XC0, 0XC0, 0XC3, 0X03, 0X03, 0X03, 0X03, 0X03, 0X00, 0XC0, 0XC0, 0XC3, + 0X03, 0X03, 0X00, 0X00, 0X0C, 0X0C, 0X0C, 0X0C, 0X0C, 0X30, 0X30, 0X30, 0X30, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3B, 0XBF, 0XBB, 0XBE, 0XBB, 0XBE, 0XAF, 0XBB, 0XBA, + 0XBA, 0XAA, 0XDA, 0XEA, 0X9D, 0XBF, 0XE7, 0X6E, 0XFF, 0X6F, 0X6D, 0X7E, 0X7F, 0XF7, 0XE5, 0XDB, + 0XE6, 0X67, 0XFF, 0XFD, 0XF5, 0X76, 0X57, 0X56, 0X55, 0XD5, 0XA8, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X00, 0X0F, 0XF0, 0X30, 0X30, 0X30, + 0X30, 0X03, 0X0C, 0X0C, 0X0F, 0XF0, 0X00, 0XFF, 0X03, 0X00, 0X30, 0XFC, 0X03, 0X03, 0X03, 0X03, + 0X03, 0X00, 0X30, 0XC0, 0XC3, 0XFC, 0X03, 0X00, 0X0C, 0X0C, 0X0C, 0X0C, 0X0C, 0X0F, 0XC0, 0X30, + 0X30, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3A, 0XEE, 0XEF, 0XBB, 0XAB, + 0XAE, 0XEE, 0XAE, 0XBA, 0XAA, 0XEA, 0XEA, 0X66, 0XA5, 0XF6, 0X6D, 0X7F, 0XFF, 0XFF, 0X57, 0X5F, + 0X57, 0XF7, 0X75, 0X97, 0XDB, 0X97, 0XFF, 0XF7, 0X75, 0X67, 0X56, 0X67, 0X59, 0X96, 0X68, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3B, + 0XAF, 0XEE, 0XFB, 0XEE, 0XEF, 0XBB, 0XEB, 0X7E, 0XBA, 0XBA, 0XE6, 0XAD, 0XAD, 0X6B, 0X9E, 0X5F, + 0XFF, 0XFF, 0X97, 0XDF, 0XF5, 0XFF, 0XDF, 0X57, 0XFD, 0XF9, 0X7F, 0XFF, 0X7D, 0X5D, 0XE5, 0XD5, + 0X95, 0XB5, 0X5A, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X0B, 0XEE, 0XBB, 0XEE, 0XEB, 0XBF, 0XAE, 0XBF, 0XBA, 0XAE, 0XAA, 0XE6, 0XDA, + 0X95, 0XF6, 0X5F, 0X67, 0XFF, 0XFF, 0X5F, 0XFF, 0XFF, 0X7D, 0XFF, 0X75, 0XFD, 0XDF, 0X6F, 0XFF, + 0XDF, 0X59, 0XD5, 0X9D, 0X57, 0XF6, 0X6A, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0B, 0XEB, 0XEE, 0XFB, 0XFF, 0XAA, 0XFB, 0XBF, 0XAE, + 0XEA, 0XAA, 0XD9, 0X9D, 0X9F, 0XB7, 0X9B, 0X67, 0XFF, 0XFD, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, + 0XFF, 0X77, 0XF7, 0XFF, 0XFF, 0XD5, 0XED, 0XD9, 0XD7, 0X7F, 0X56, 0X40, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XC0, 0X0F, 0XF0, 0X3F, 0XF0, 0X00, + 0XFC, 0X0C, 0X0C, 0X0C, 0XFF, 0XC0, 0X30, 0X03, 0XFC, 0X03, 0X00, 0X3F, 0XF0, 0X03, 0XFC, 0X0F, + 0XF0, 0X3F, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0E, 0XAE, 0XBE, 0XEF, 0XEA, + 0XAF, 0XBA, 0X7E, 0XBE, 0XAE, 0XBA, 0XAB, 0XA6, 0XD9, 0XDA, 0X67, 0XD9, 0X9D, 0X95, 0X9F, 0XFF, + 0XFF, 0XFF, 0XDF, 0X70, 0X3F, 0XA7, 0XFF, 0XDF, 0XFD, 0XD7, 0XD5, 0X57, 0X55, 0XFD, 0X56, 0X80, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0X30, 0X0C, + 0X0C, 0X30, 0X00, 0X03, 0X03, 0X0C, 0X0C, 0X0C, 0X0C, 0X00, 0XCC, 0X03, 0X03, 0X03, 0X00, 0X30, + 0X00, 0X03, 0X00, 0X30, 0X0C, 0X30, 0X30, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, + 0XAB, 0XBA, 0XFE, 0XBA, 0XBE, 0XAF, 0XEE, 0XAB, 0XAB, 0XAA, 0XD6, 0X7D, 0X9F, 0XA7, 0X66, 0XD7, + 0X59, 0X59, 0X5F, 0XFF, 0XFF, 0XFF, 0XFF, 0XDB, 0X1F, 0XFE, 0XFF, 0XDF, 0X7F, 0XF5, 0XFF, 0XB5, + 0XA5, 0XFF, 0XE6, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X03, 0X30, 0X0C, 0X0C, 0X30, 0X00, 0X03, 0X00, 0X0C, 0X0C, 0X0C, 0X0C, 0X00, 0XCC, 0X03, + 0X03, 0X03, 0X00, 0X30, 0X00, 0X03, 0X00, 0X30, 0X0C, 0X30, 0X30, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X0F, 0XAE, 0XEB, 0XAE, 0XAE, 0XFA, 0XFB, 0XEE, 0XFF, 0XAE, 0XAE, 0XB7, 0X9B, + 0X7D, 0X9D, 0X9D, 0XDE, 0X77, 0XB7, 0X5F, 0XFF, 0XFF, 0XDF, 0X7F, 0XF7, 0X4F, 0XFD, 0XFF, 0XFF, + 0XFD, 0XFD, 0XB7, 0X77, 0X55, 0XFF, 0X56, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X0C, 0X0F, 0XF0, 0X3F, 0XF0, 0X00, 0XFC, 0X0C, 0X0C, 0X0C, + 0X0C, 0X03, 0X03, 0X03, 0XFC, 0X03, 0X00, 0X3F, 0XF0, 0X03, 0XFC, 0X30, 0X0C, 0X3F, 0XC0, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XEF, 0XBA, 0XEE, 0XAE, 0XEB, 0XAE, 0XEB, 0XAE, + 0XEA, 0XEA, 0XA9, 0XF7, 0X7E, 0XDA, 0XD9, 0XE5, 0XE7, 0X59, 0X97, 0XFF, 0XFF, 0XFF, 0XDD, 0XFD, + 0XE3, 0XEF, 0X7F, 0XF7, 0X7F, 0X7D, 0X7F, 0XDD, 0XF9, 0X77, 0XF6, 0X90, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XFC, 0X0C, 0X30, 0X30, 0X00, 0X00, + 0X03, 0X0C, 0X0C, 0X0C, 0X0C, 0X03, 0XFF, 0X03, 0X03, 0X03, 0X00, 0X30, 0X00, 0X03, 0X00, 0X30, + 0X0C, 0X30, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0B, 0XEE, 0XEE, 0XAE, 0XEB, + 0XBE, 0XEE, 0XEE, 0XEB, 0XAE, 0XAE, 0X77, 0XBE, 0X79, 0XB7, 0X67, 0XB7, 0X77, 0X7D, 0X5B, 0XFF, + 0XFF, 0XFD, 0XFF, 0XFF, 0X70, 0XDF, 0X7F, 0XFF, 0XFD, 0XF7, 0X77, 0X7D, 0XD5, 0X76, 0XF7, 0X60, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X0C, 0X0C, + 0X30, 0X30, 0X00, 0X03, 0X03, 0X0C, 0X0C, 0X0C, 0X0C, 0X03, 0X03, 0X03, 0X03, 0X03, 0X00, 0X30, + 0X00, 0X03, 0X00, 0X30, 0X0C, 0X30, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X07, + 0XEB, 0XBB, 0XBB, 0XAE, 0XEE, 0XEE, 0XFA, 0XBA, 0XEB, 0XA7, 0XB7, 0X6F, 0X6A, 0X67, 0X75, 0X75, + 0X9E, 0XD9, 0XD7, 0XFF, 0XFF, 0XFF, 0XFF, 0XDF, 0XDD, 0X1F, 0XFF, 0XDF, 0X7D, 0XFF, 0XDF, 0XFD, + 0X7D, 0X55, 0X95, 0XD0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X30, 0X03, 0X0C, 0X0C, 0X3F, 0XF0, 0X00, 0XFC, 0X03, 0XF0, 0X0C, 0X0C, 0X0C, 0X00, 0XC3, + 0XFC, 0X03, 0XFC, 0X3F, 0XF0, 0X03, 0X00, 0X0F, 0XF0, 0X30, 0X30, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X03, 0XEF, 0XBE, 0XBB, 0XAB, 0XBE, 0XEF, 0XEB, 0XEE, 0XEA, 0XAA, 0X6F, 0XFE, + 0X67, 0XB6, 0X9B, 0X79, 0XED, 0XED, 0X97, 0XFF, 0XFF, 0XFF, 0X7D, 0XFD, 0XF7, 0X7F, 0XDF, 0XFF, + 0XFF, 0X7C, 0XF7, 0X7F, 0XF5, 0X65, 0XD6, 0XA0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XEA, 0XAB, 0XBB, 0XBA, 0XEA, 0XFB, 0XAB, 0XFA, + 0XBA, 0XB7, 0X9F, 0XFF, 0X69, 0X6D, 0XF6, 0X5D, 0XD7, 0XDF, 0X57, 0XFF, 0XFF, 0XFF, 0XFF, 0XDF, + 0XF7, 0X47, 0XDF, 0XDF, 0X7F, 0XDF, 0X7F, 0XF7, 0X7F, 0X55, 0XD5, 0X60, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XAF, 0XBE, 0XBB, 0XAE, + 0XAE, 0XAA, 0XBA, 0XAB, 0XBD, 0X9A, 0XEF, 0XFF, 0XFD, 0XDB, 0X66, 0X6D, 0X9E, 0XFD, 0X5B, 0XFF, + 0XFF, 0XFF, 0XF7, 0XFF, 0X7F, 0X73, 0XFF, 0XFF, 0XF7, 0X7D, 0XCD, 0XFF, 0X3D, 0X65, 0XE5, 0XA0, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, + 0XEB, 0XEE, 0XEE, 0XEA, 0XEA, 0XFB, 0XAE, 0XEE, 0XAF, 0X6D, 0XFF, 0XFF, 0X6A, 0X76, 0XF7, 0X5F, + 0X77, 0X7F, 0XD7, 0XFF, 0XFF, 0XFF, 0XFF, 0XF7, 0XF7, 0XF0, 0XF7, 0XF7, 0XFF, 0XDF, 0X77, 0XDF, + 0XCF, 0XD7, 0X75, 0X64, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X03, 0XFC, 0X0F, 0XF0, 0X00, 0XC0, 0X03, 0XF0, 0X3F, 0XC0, 0XC3, 0X03, 0X03, 0XFC, 0X00, + 0X00, 0XC0, 0X0C, 0X30, 0X30, 0X0F, 0XF0, 0X0F, 0XFC, 0X03, 0X00, 0X30, 0X30, 0X03, 0X03, 0XF0, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X03, 0XEE, 0XEE, 0XEE, 0XEE, 0XBB, 0XBA, 0XEB, 0XAB, 0XFF, 0X9B, 0XFF, 0XFD, + 0X97, 0X67, 0X67, 0X9B, 0X6F, 0XBF, 0X97, 0XFF, 0XFF, 0XF7, 0XFD, 0XFF, 0XFF, 0X77, 0X3F, 0XFF, + 0XF7, 0XFD, 0XCF, 0X77, 0XFC, 0X17, 0XD9, 0X64, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X03, 0X0C, 0X0C, 0X03, 0X30, 0X0C, 0X0C, 0X30, 0X30, 0XC3, + 0XC3, 0X0C, 0X03, 0X00, 0X00, 0XF0, 0X3C, 0X30, 0X30, 0X0C, 0X0C, 0X0C, 0X00, 0X0C, 0XC0, 0X30, + 0XC0, 0X03, 0X0C, 0X0C, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XEF, 0XEA, 0XFE, 0XBB, 0XBE, 0XEE, 0XBA, 0XEA, + 0XFB, 0XF6, 0XFF, 0XFA, 0X66, 0XD6, 0XDE, 0XD7, 0XD9, 0XFF, 0XD7, 0XDF, 0XFF, 0XFF, 0XFF, 0X7F, + 0X7F, 0XDD, 0X3F, 0XF7, 0XFF, 0XDF, 0XF3, 0XDD, 0X33, 0XD7, 0XCD, 0X58, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X00, 0X0C, 0X0C, 0X03, 0X30, 0X0C, + 0X00, 0X30, 0X30, 0XC3, 0XC3, 0X0C, 0X00, 0X00, 0X00, 0XF0, 0X3C, 0X0C, 0XC0, 0X0C, 0X0C, 0X0C, + 0X00, 0X0C, 0XC0, 0X33, 0X00, 0X03, 0X0C, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XEB, 0XAE, 0XEB, 0XAB, + 0XBE, 0XEE, 0XEB, 0XAB, 0XAA, 0XFB, 0XFF, 0XD6, 0X66, 0XDB, 0X79, 0XF7, 0XDF, 0XF7, 0XDF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X7F, 0XF7, 0X0F, 0XFF, 0XF7, 0X7F, 0X74, 0XFC, 0XF3, 0X1B, 0X95, 0X64, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X3F, 0X0F, + 0XF0, 0X0C, 0X0C, 0X03, 0XF0, 0X3F, 0XC0, 0XC3, 0X33, 0X0C, 0X3F, 0X00, 0X00, 0XCC, 0XCC, 0X03, + 0X00, 0X0F, 0XF0, 0X0F, 0XFC, 0X30, 0X30, 0X3C, 0XC0, 0X03, 0X03, 0XF0, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0XFA, 0XEE, 0XBA, 0XEE, 0XFE, 0XEE, 0XEF, 0XFA, 0XBB, 0XAB, 0XEE, 0X66, 0X65, 0XB5, 0X9F, 0X6D, + 0XDD, 0XFF, 0XD7, 0XFF, 0XFF, 0XFF, 0XFF, 0XF7, 0XDF, 0XFD, 0XC7, 0XFF, 0XFF, 0XF7, 0XFF, 0X77, + 0XCC, 0X9B, 0XF3, 0X58, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X0C, 0X03, 0X0C, 0X30, 0X0F, 0XFC, 0X00, 0X0C, 0X30, 0X00, 0XC3, 0X0F, 0X0C, 0X03, 0X00, + 0X00, 0XCC, 0XCC, 0X03, 0X00, 0X0C, 0X0C, 0X0C, 0X00, 0X3F, 0XF0, 0X30, 0XC0, 0X03, 0X00, 0X0C, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0XFA, 0XBE, 0XBB, 0XBB, 0XAA, 0XEE, 0XEF, 0XAB, 0XBA, 0XBE, 0X5A, 0X99, + 0XDA, 0X7D, 0X7B, 0XFF, 0XFF, 0XFF, 0XDF, 0XF7, 0XFF, 0XFD, 0XFF, 0XFF, 0XFF, 0XFF, 0X43, 0XFD, + 0XF7, 0XDF, 0X33, 0X3F, 0X33, 0X5F, 0XF1, 0X58, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X03, 0X0C, 0X30, 0X0C, 0X0C, 0X0C, 0X0C, 0X30, 0X00, 0XC3, + 0X0F, 0X0C, 0X03, 0X00, 0X00, 0XC3, 0X0C, 0X03, 0X00, 0X0C, 0X0C, 0X0C, 0X00, 0X30, 0X30, 0X30, + 0X30, 0X03, 0X0C, 0X0C, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XFA, 0XBA, 0XBA, 0XEA, 0XFF, 0XAE, 0XBE, 0XBB, + 0XAA, 0XBD, 0X6B, 0X99, 0X97, 0XFF, 0X57, 0XF7, 0XFF, 0XFF, 0XFF, 0XFF, 0X7F, 0XFF, 0X7F, 0XFD, + 0XF7, 0XFF, 0XF0, 0XFF, 0XFF, 0XFF, 0XCF, 0X33, 0XCC, 0XDC, 0XFC, 0X94, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFC, 0X0C, 0X0C, 0X30, 0X03, 0X03, + 0XF0, 0X30, 0X00, 0XC3, 0X03, 0X03, 0XFC, 0X0C, 0X00, 0XC3, 0X0C, 0X03, 0X00, 0X0F, 0XF0, 0X0F, + 0XFC, 0XC0, 0X0C, 0X30, 0X30, 0X03, 0X03, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7A, 0XEF, 0X7B, 0XAF, + 0XBF, 0XBA, 0XEA, 0XEA, 0XBA, 0XBA, 0X67, 0X67, 0X67, 0XDF, 0X5F, 0XFF, 0XFD, 0XFF, 0XDF, 0XFF, + 0XDF, 0XFF, 0XFF, 0XFF, 0XDF, 0XFF, 0XDC, 0XFD, 0XF7, 0XCF, 0XF3, 0X3C, 0XF3, 0X3F, 0XFC, 0XDC, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X3E, 0X7B, 0XBA, 0XFA, 0XEA, 0XBB, 0XBB, 0XBB, 0XAF, 0XE6, 0X6B, 0XB6, 0X65, 0XDF, 0XD7, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFC, 0XF7, 0XFF, 0XFF, 0XFF, 0XFF, 0XDF, 0XFC, 0X3F, 0XFC, 0XFF, 0X3F, 0XCF, + 0X73, 0X0C, 0XFF, 0X15, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X3E, 0XB6, 0XBB, 0XAB, 0XAE, 0XEB, 0XBA, 0XEA, 0XAF, 0XE6, 0X6E, 0XD9, + 0XD7, 0XEF, 0XF5, 0XFF, 0X7F, 0XFF, 0XFF, 0XFF, 0XF2, 0XFF, 0XFC, 0XFF, 0XF7, 0XFF, 0X3C, 0X3F, + 0XFF, 0XF3, 0XF3, 0XCF, 0X34, 0X3F, 0XFC, 0X3D, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3E, 0X7D, 0XBA, 0XFB, 0XEB, 0XBA, 0XAF, 0X9B, + 0XEE, 0XA7, 0X97, 0X97, 0X67, 0XFF, 0XFD, 0XFF, 0XFF, 0XFF, 0XFF, 0XDF, 0XFD, 0X9F, 0XCF, 0XDF, + 0XFF, 0XFF, 0XFF, 0X0F, 0XFF, 0XFC, 0XFC, 0XFF, 0X3B, 0X0F, 0X7F, 0XD6, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XF0, 0XFF, 0XC0, 0XFF, 0X00, 0XFF, + 0X03, 0X03, 0X00, 0XFF, 0X00, 0X00, 0XC0, 0X0C, 0X0C, 0X3F, 0XC0, 0X03, 0XFC, 0X03, 0XFC, 0X0C, + 0X0C, 0X0C, 0XFF, 0XC3, 0XFC, 0X03, 0XFC, 0X30, 0X30, 0X30, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3E, 0XBF, 0X6E, 0XBF, + 0XAE, 0XBA, 0XBB, 0XBB, 0XDF, 0XA9, 0X9E, 0XDE, 0X77, 0XFE, 0XDF, 0XFF, 0XFF, 0XFD, 0XDC, 0XFF, + 0XFD, 0XDB, 0XFF, 0XFC, 0XFF, 0X7F, 0XCF, 0XCF, 0XFF, 0XDF, 0XDF, 0X3C, 0X36, 0X3F, 0XFD, 0XCD, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X0C, 0X0C, + 0X00, 0XC0, 0XC3, 0X00, 0XC3, 0XC3, 0X03, 0X00, 0XC0, 0X03, 0X30, 0X0F, 0X0C, 0X30, 0X30, 0X03, + 0X03, 0X0C, 0X03, 0X0C, 0X0C, 0X0C, 0XC0, 0X03, 0X03, 0X03, 0X00, 0X30, 0X30, 0X30, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X1F, 0XBF, 0XEA, 0XBB, 0XAB, 0XBA, 0XEA, 0XBF, 0XEB, 0XA9, 0X9B, 0XA7, 0X97, 0XFE, 0XFB, 0XDF, + 0XFF, 0XFF, 0XCF, 0XFD, 0XFF, 0X65, 0XFF, 0X7F, 0X7F, 0XF3, 0XFE, 0XC7, 0X7C, 0XFB, 0XE7, 0XEF, + 0XDF, 0X3F, 0XCF, 0XDD, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X0C, 0X00, 0X0C, 0X00, 0XC0, 0XC3, 0X00, 0XC3, 0XC3, 0X03, 0X00, 0X00, 0X03, 0X30, 0X0F, + 0X0C, 0X30, 0X30, 0X03, 0X03, 0X0C, 0X03, 0X03, 0X33, 0X30, 0XC0, 0X03, 0X03, 0X03, 0X00, 0X30, + 0X30, 0X30, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X0F, 0X7F, 0XDE, 0X6A, 0XFB, 0XB6, 0XE7, 0XBF, 0XB7, 0X9E, 0X6F, 0X5F, + 0XD7, 0XFF, 0XDD, 0XFF, 0XFF, 0XFD, 0XFF, 0X67, 0XFF, 0XF9, 0X9F, 0XB9, 0XF7, 0XFD, 0XBD, 0X7D, + 0XFF, 0X99, 0XB8, 0XCC, 0X68, 0X3F, 0X7D, 0XCD, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XF0, 0X0C, 0X00, 0XFF, 0X03, 0X00, 0XC3, 0X33, 0X03, 0X0F, + 0XC0, 0X0C, 0X0C, 0X0C, 0XCC, 0X30, 0X30, 0X03, 0XFC, 0X0C, 0X03, 0X03, 0X33, 0X30, 0XFF, 0XC3, + 0XFC, 0X03, 0XFC, 0X30, 0X30, 0X30, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0X6F, 0XFB, 0XAA, 0XBF, 0XEF, 0XFD, 0XBD, + 0X7A, 0XE6, 0X97, 0XDF, 0XF7, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, 0X8E, 0X99, 0XFF, 0XFF, 0X66, 0XDA, + 0X6F, 0X9E, 0XDB, 0XFC, 0X7F, 0X66, 0X33, 0XFF, 0X06, 0X1F, 0X7F, 0XDE, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X0C, 0X00, 0XC3, 0X03, 0X00, + 0XC3, 0X0F, 0X03, 0X00, 0XC0, 0X0F, 0XFC, 0X0C, 0X3C, 0X30, 0X30, 0X03, 0X00, 0X0C, 0X03, 0X03, + 0X33, 0X30, 0XC0, 0X03, 0X0C, 0X03, 0X00, 0X30, 0X30, 0X30, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0XEE, 0X79, + 0XFF, 0XBF, 0XFA, 0XF6, 0XAE, 0XEE, 0X5B, 0XEF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, 0X3F, 0X7A, + 0X5F, 0XFF, 0XF9, 0X66, 0X66, 0XE9, 0X6F, 0XDD, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0XDB, 0XFD, 0X75, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X0C, 0X0C, + 0X00, 0XC3, 0X03, 0X00, 0XC3, 0X0F, 0X03, 0X00, 0XC0, 0X0C, 0X0C, 0X0C, 0X3C, 0X30, 0X30, 0X03, + 0X00, 0X0C, 0X03, 0X00, 0XC0, 0XC0, 0XC0, 0X03, 0X0C, 0X03, 0X00, 0X30, 0X30, 0X30, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X03, 0X7F, 0XDF, 0XDA, 0X5E, 0X6F, 0XF6, 0XB7, 0X76, 0XE7, 0XA7, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0X5F, 0XED, 0XA7, 0XFF, 0XFF, 0XFF, 0XD9, 0X56, 0XFF, 0XFD, 0X4F, 0XF7, 0XFF, 0X3F, + 0XFE, 0X57, 0X7F, 0XDE, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X03, 0XF0, 0X0C, 0X00, 0XC0, 0XC0, 0XFF, 0X03, 0X03, 0X00, 0XFF, 0X00, 0X30, 0X03, 0X0C, + 0X0C, 0X3F, 0XC0, 0X03, 0X00, 0X03, 0XFC, 0X00, 0XC0, 0XC0, 0XFF, 0XC3, 0X03, 0X03, 0X00, 0X0F, + 0XC0, 0X3F, 0XC3, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XEF, 0XF9, 0XD9, 0X99, 0X6B, 0X7A, 0X7B, 0XBA, 0X57, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X7F, 0XE6, 0XD9, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XDC, 0XF7, + 0X53, 0XFF, 0X33, 0XF7, 0X77, 0X77, 0XF7, 0X75, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XDF, 0XDF, 0XFE, 0X9B, 0XEA, 0X76, 0XB6, + 0XE7, 0XB7, 0XA7, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X73, 0XFF, 0XAA, 0X9F, 0XDF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XDF, 0XF4, 0XF3, 0XFF, 0X3F, 0X74, 0XD5, 0XFB, 0X5E, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XFF, 0XF7, 0XFD, + 0XE6, 0X9E, 0X6D, 0XEE, 0X6F, 0X7B, 0X5B, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X7B, 0XF9, + 0X9D, 0X65, 0XFD, 0XFD, 0XF7, 0XFF, 0X7D, 0XFD, 0XD4, 0XFF, 0X73, 0XCC, 0XF6, 0X22, 0XDD, 0X75, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0XF7, 0XF7, 0XFF, 0X79, 0XF6, 0XDB, 0X6D, 0XF6, 0XE6, 0XE7, 0XFF, 0XE7, 0XFF, 0X7F, 0XFF, + 0XFF, 0XFF, 0X7D, 0XFF, 0XBB, 0XBA, 0X5F, 0XDF, 0XFF, 0XFF, 0XFF, 0XF3, 0XFD, 0X3C, 0XFC, 0XCF, + 0X77, 0X31, 0XFB, 0X7E, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0XC0, 0X0C, 0X00, 0XC0, 0X00, 0XFF, 0X0C, 0X0C, 0X0C, 0X30, 0XC0, 0XC0, 0XFF, 0X00, + 0X0C, 0X00, 0XC3, 0XFF, 0X00, 0XFF, 0XC0, 0XFF, 0X00, 0X0F, 0XFC, 0X03, 0X00, 0XFF, 0XC0, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0XFF, 0XFF, 0XFF, 0XB6, 0XE7, 0X9B, 0XAD, 0X9B, 0XEF, 0XD7, 0XFF, + 0XDF, 0XFF, 0XFF, 0XFF, 0XFF, 0XEE, 0X7D, 0XFB, 0X79, 0X99, 0XA7, 0XFF, 0X7F, 0X7F, 0XFF, 0XDF, + 0X77, 0X5F, 0XCF, 0XF3, 0X72, 0X4D, 0XDD, 0X65, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0X30, 0X0C, 0X00, 0XC0, 0X03, 0X00, 0XCC, 0X0C, 0X0C, 0X30, + 0XF0, 0XC3, 0X00, 0XC0, 0X0F, 0X03, 0XC3, 0X00, 0X00, 0X0C, 0X03, 0X00, 0XC0, 0X0C, 0X00, 0X0C, + 0XC0, 0X0C, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3D, 0XF7, 0XFF, 0XB6, 0X79, 0XB6, 0XDE, + 0XB9, 0XE7, 0XE7, 0XFF, 0X66, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XBB, 0X7F, 0XEE, 0X9B, 0X79, 0X7F, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, 0XCF, 0XFC, 0XCD, 0XD9, 0XC0, 0XF6, 0X76, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0X30, 0X0C, 0X00, 0XC0, 0X03, 0X00, + 0XC3, 0X33, 0X30, 0X30, 0XF0, 0XC3, 0X00, 0X00, 0X0F, 0X03, 0XC3, 0X00, 0X00, 0X0C, 0X03, 0X00, + 0XC0, 0X0C, 0X00, 0X0C, 0XC0, 0X0C, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0X7F, 0XFF, + 0X7D, 0XBE, 0XDB, 0XAB, 0X77, 0XFB, 0XD7, 0XF6, 0XBD, 0XFF, 0XF7, 0XFF, 0XF7, 0XDF, 0X7D, 0XFF, + 0XF7, 0XB9, 0XA6, 0X97, 0XDF, 0XF7, 0XFF, 0XFF, 0X37, 0X53, 0XF3, 0XFC, 0XDB, 0X30, 0XE7, 0X57, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X0C, 0X0C, + 0X00, 0XC0, 0X03, 0X00, 0XC3, 0X33, 0X30, 0X30, 0XCC, 0XC3, 0X0F, 0XC0, 0X0C, 0XCC, 0XC3, 0XFF, + 0X00, 0X0C, 0X03, 0X00, 0XC0, 0X0F, 0XFC, 0X30, 0X30, 0X0C, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X0F, 0X3F, 0XFF, 0XBE, 0X6D, 0XB7, 0X7A, 0X7E, 0XFF, 0XFF, 0XFD, 0X5E, 0X9D, 0XFF, 0XF7, + 0XFF, 0XFB, 0X9D, 0XFD, 0XFE, 0XDE, 0XEB, 0X69, 0XF7, 0X7F, 0XFF, 0XF7, 0XFF, 0XF3, 0XFF, 0XCF, + 0XD1, 0XCC, 0XF5, 0X75, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X0F, 0XFC, 0X0C, 0X00, 0XC0, 0X03, 0X00, 0XC3, 0X33, 0X30, 0X30, 0XC3, 0XC3, 0X00, 0XC0, + 0X0C, 0XCC, 0XC3, 0X00, 0X00, 0X0C, 0X03, 0X00, 0XC0, 0X0C, 0X00, 0X3F, 0XF0, 0X0C, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XDF, 0X7F, 0X7F, 0X7F, 0X69, 0XF7, 0XAD, 0XFF, 0XFF, 0XFD, + 0XED, 0XEF, 0XFD, 0XF7, 0X7F, 0XFD, 0XD9, 0XFF, 0XFF, 0XEB, 0X67, 0XA6, 0X5F, 0XFD, 0XFF, 0XFF, + 0XDC, 0XD4, 0XF3, 0X37, 0X2E, 0X30, 0XE7, 0X76, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X0C, 0X0C, 0X00, 0XC0, 0X03, 0X00, 0XC0, 0XC0, 0XC0, 0X30, + 0XC3, 0XC3, 0X00, 0XC0, 0X0C, 0X30, 0XC3, 0X00, 0X00, 0X0C, 0X03, 0X00, 0XC0, 0X0C, 0X00, 0X30, + 0X30, 0X0C, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0B, 0XCF, 0XCD, 0XFF, 0X5F, 0X9F, 0XBB, + 0X5F, 0XFF, 0XFF, 0XFD, 0X67, 0X5E, 0XEF, 0XFD, 0XFD, 0XFF, 0XF7, 0X77, 0XFF, 0XFE, 0XFB, 0X6E, + 0XA5, 0XFF, 0XFF, 0XFF, 0XFF, 0X3C, 0XFF, 0XCF, 0XDD, 0XCC, 0XF9, 0X65, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X30, 0X03, 0X0F, 0XF0, 0XFF, 0X00, 0XFF, + 0X00, 0XC0, 0XC0, 0X30, 0XC0, 0XC0, 0XFF, 0X00, 0X0C, 0X30, 0XC3, 0XFF, 0X00, 0X0C, 0X00, 0XFF, + 0X00, 0X0F, 0XFC, 0XC0, 0X0C, 0X0C, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XF7, 0XFD, + 0XFF, 0XDF, 0X5D, 0XF9, 0XBB, 0XFF, 0XFD, 0XFF, 0X77, 0XB9, 0XF7, 0XBF, 0XDF, 0XDF, 0X67, 0X7F, + 0XDC, 0XFD, 0XEF, 0XB6, 0X79, 0X9F, 0XF3, 0XFD, 0XEF, 0XCF, 0XDC, 0XF9, 0X09, 0XB0, 0X35, 0X97, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X03, 0X73, 0X7E, 0X7F, 0XDF, 0XDB, 0X7E, 0XDD, 0XFF, 0XFE, 0XFF, 0X9B, 0X67, 0XBF, 0XDF, + 0XD9, 0XFB, 0XF7, 0XD7, 0XFF, 0X3F, 0XB6, 0XDB, 0X9B, 0X67, 0XFF, 0X1B, 0X7F, 0XFF, 0XFE, 0XCE, + 0XCB, 0X7C, 0X3D, 0X75, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0X7F, 0XFB, 0XE7, 0XBF, 0X7E, 0XFF, 0XFD, 0XEF, + 0XD7, 0XB7, 0X7B, 0XFF, 0X77, 0XDD, 0XD7, 0X79, 0XF7, 0XFF, 0XFB, 0X79, 0XAE, 0XA6, 0XFF, 0XFF, + 0XFD, 0XB0, 0XFD, 0XFD, 0X8D, 0XE3, 0X3D, 0X76, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XDC, 0XDF, 0XBF, 0XDF, 0XF7, 0X7F, + 0XBF, 0X7F, 0XFB, 0X7F, 0XE6, 0X79, 0XB7, 0X77, 0XFD, 0XEF, 0XF7, 0XFE, 0X7D, 0XF3, 0XFF, 0XAE, + 0XE6, 0X79, 0X9F, 0X76, 0X6B, 0X6C, 0X3E, 0XFD, 0XC2, 0X7C, 0X3E, 0X55, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X0C, 0X00, 0XC0, 0X3F, 0XC0, 0X3F, + 0XC0, 0X00, 0X3F, 0X03, 0X03, 0X0F, 0XFC, 0X0C, 0X00, 0XC0, 0X0F, 0XFC, 0X3F, 0XC0, 0X00, 0XFF, + 0X0F, 0XF0, 0X0C, 0X0C, 0X30, 0XFF, 0XC0, 0XFC, 0X00, 0X00, 0XC0, 0X03, 0X00, 0X30, 0X03, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XB7, 0XDF, + 0XBF, 0X6F, 0XFE, 0XFF, 0XFF, 0XFF, 0XFD, 0XEF, 0XF5, 0XDB, 0X7E, 0XFB, 0XDD, 0X77, 0XE7, 0X2F, + 0X6F, 0XFF, 0XFF, 0X7F, 0X7B, 0X9A, 0X6F, 0XEB, 0XB6, 0XFB, 0X0F, 0XB2, 0XD3, 0XF3, 0X3D, 0X76, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X0C, 0X03, + 0X30, 0X30, 0X30, 0X30, 0X30, 0X00, 0XC0, 0XC3, 0X03, 0X0C, 0X00, 0X0C, 0X00, 0XC0, 0X0C, 0X00, + 0X30, 0X30, 0X00, 0XC0, 0X0C, 0X0C, 0X0C, 0X0C, 0X30, 0X0C, 0X03, 0X03, 0X00, 0X00, 0XC0, 0X0C, + 0XC0, 0X3C, 0X0F, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X3B, 0XFB, 0X9F, 0XF7, 0XFF, 0XFF, 0XFF, 0XFD, 0XFD, 0XDD, 0XFD, 0XED, 0XE7, 0X7D, + 0XFB, 0X5F, 0XF7, 0X97, 0XD7, 0XDF, 0XCF, 0XF7, 0XA7, 0XB7, 0XA6, 0XF6, 0X6F, 0XFF, 0XC3, 0XF2, + 0XB0, 0X7F, 0X0F, 0X75, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X0C, 0X0C, 0X03, 0X30, 0X30, 0X30, 0X30, 0X30, 0X00, 0XC0, 0X03, 0X03, 0X0C, 0X00, 0X0C, + 0X00, 0XC0, 0X0C, 0X00, 0X30, 0X30, 0X00, 0XC0, 0X0C, 0X0C, 0X0C, 0X0C, 0X30, 0X0C, 0X03, 0X00, + 0X00, 0X00, 0XC0, 0X0C, 0XC0, 0X3C, 0X0F, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X1D, 0XF7, 0XFF, 0X3A, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X7B, + 0XFD, 0X76, 0X6F, 0XB7, 0XF7, 0X99, 0XFB, 0X5A, 0XF9, 0XFD, 0XFF, 0XFE, 0XDE, 0X6A, 0X5A, 0X7E, + 0XEE, 0XDE, 0XF1, 0XFF, 0X78, 0XED, 0X0D, 0X5D, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XFC, 0X0C, 0X0C, 0X3F, 0XC0, 0X30, 0X30, 0X00, 0X3F, 0X03, + 0XFF, 0X0F, 0XFC, 0X0C, 0X00, 0XC0, 0X0F, 0XFC, 0X30, 0X30, 0X00, 0XFF, 0X0F, 0XF0, 0X0C, 0X0C, + 0X30, 0X0C, 0X00, 0XFC, 0X00, 0X00, 0XC0, 0X30, 0X30, 0X33, 0X33, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0E, 0XFF, 0XDB, 0XFF, 0XB7, 0XFF, + 0XFF, 0XFF, 0X7F, 0X9D, 0XFF, 0X6D, 0XD7, 0X7D, 0XFD, 0XDD, 0XFF, 0X99, 0X7E, 0X7F, 0XFF, 0XFF, + 0XAB, 0XB7, 0XB7, 0XBF, 0X67, 0XBF, 0XFF, 0X73, 0X9C, 0X3F, 0XCB, 0X74, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X0C, 0X0F, 0XFC, 0X30, 0XC0, 0X30, + 0X33, 0XC0, 0X00, 0XC3, 0X03, 0X0C, 0X00, 0X0C, 0X00, 0XC0, 0X0C, 0X00, 0X30, 0X30, 0X00, 0XC0, + 0X0C, 0X30, 0X0C, 0X0C, 0X30, 0X0C, 0X00, 0X03, 0X00, 0X00, 0XC0, 0X3F, 0XF0, 0X33, 0X33, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X07, 0X7F, + 0X3B, 0XDD, 0XDF, 0X7F, 0XFF, 0XFF, 0XF7, 0XDE, 0XDF, 0X5D, 0XBD, 0XFB, 0X7D, 0XF7, 0XFF, 0X59, + 0XAF, 0X5F, 0X7F, 0X3D, 0XB7, 0X6A, 0XA9, 0X9B, 0XEB, 0XE6, 0X73, 0XCD, 0XBD, 0XFB, 0X07, 0X5C, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X0C, 0X0C, + 0X0C, 0X30, 0XC0, 0X30, 0X30, 0X00, 0XC0, 0XC3, 0X03, 0X0C, 0X00, 0X0C, 0X00, 0XC0, 0X0C, 0X00, + 0X30, 0X30, 0X00, 0XC0, 0X0C, 0X30, 0X0C, 0X0C, 0X30, 0X0C, 0X03, 0X03, 0X00, 0X00, 0XC0, 0X30, + 0X30, 0X30, 0XC3, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X01, 0XAF, 0XF6, 0XFF, 0XEF, 0XF5, 0XFF, 0XDF, 0X7F, 0XF7, 0XBF, 0XDD, 0X5B, 0X77, + 0XFE, 0X6F, 0X7F, 0X66, 0X57, 0XE7, 0XDF, 0XFF, 0XFE, 0XBD, 0XDB, 0XB6, 0XFD, 0XFF, 0XBC, 0XFB, + 0X6E, 0X3F, 0XC7, 0X74, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X0C, 0X0C, 0X30, 0X03, 0X30, 0X30, 0X3F, 0XC0, 0X00, 0X3F, 0X03, 0X03, 0X0F, 0XFC, 0X0F, + 0XF0, 0XFF, 0X0F, 0XFC, 0X3F, 0XC0, 0X00, 0XC0, 0X0C, 0X0C, 0X03, 0XF0, 0X30, 0X0C, 0X00, 0XFC, + 0X0C, 0X00, 0XC0, 0XC0, 0X0C, 0X30, 0XC3, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X02, 0XDD, 0XDE, 0X7F, 0X7B, 0XFF, 0X7F, 0XDF, 0XFF, 0XF7, + 0X77, 0XDF, 0X77, 0XFF, 0X7D, 0XDD, 0XFF, 0X66, 0X6A, 0XF6, 0XFD, 0XFF, 0XDF, 0XDA, 0X9E, 0X6A, + 0X7E, 0X7F, 0XEF, 0X3C, 0XB6, 0X3F, 0X0B, 0X74, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7B, 0X73, 0XBF, 0XEF, 0XDF, + 0XFD, 0XDF, 0XF7, 0XFD, 0XDF, 0XF7, 0X7B, 0X77, 0XDF, 0X7F, 0XFF, 0X99, 0X95, 0XBD, 0X7F, 0XCF, + 0XFB, 0XF7, 0XB6, 0XDF, 0X9F, 0XE7, 0XFF, 0XCF, 0X6F, 0XCF, 0XD3, 0X70, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X9B, + 0X7F, 0X6D, 0XF7, 0XFF, 0X5F, 0XEB, 0XFF, 0X7D, 0XED, 0XF7, 0X59, 0XFF, 0XFF, 0X7F, 0X7F, 0X6E, + 0X69, 0X9F, 0X9F, 0XFF, 0XFF, 0XBA, 0XEB, 0XA9, 0XEB, 0XFF, 0XBF, 0XF3, 0XD9, 0X8F, 0X73, 0XF0, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X36, 0XDF, 0XDF, 0XFE, 0XF3, 0XFD, 0XFD, 0XFF, 0XFF, 0X77, 0XFB, 0XD7, 0X7F, + 0XFF, 0XD7, 0XFF, 0X99, 0X96, 0X6B, 0XD5, 0XFF, 0XCF, 0XFF, 0X6D, 0XDA, 0XD9, 0XFB, 0X7F, 0X3C, + 0XDB, 0XFF, 0XCC, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0XC0, 0X0F, 0XF0, 0X30, 0X03, 0X0C, 0X3F, 0XC0, 0X3F, 0XF0, 0XFF, 0X00, 0X00, 0XC0, + 0X0C, 0X0C, 0X3F, 0XC0, 0X00, 0X3F, 0X03, 0X03, 0X03, 0XFF, 0X0F, 0XF0, 0X30, 0X0F, 0XC0, 0XC0, + 0XC3, 0XFF, 0X0F, 0XF0, 0X00, 0X3F, 0XC0, 0XC0, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0D, 0XB7, 0XEB, 0XCF, 0XFF, 0XF7, 0XDF, 0XFD, 0XFF, + 0X9E, 0X7F, 0XDB, 0XFF, 0XFF, 0XFF, 0XFF, 0X6A, 0X69, 0X97, 0XE9, 0X7F, 0XFF, 0XF7, 0XEE, 0X9D, + 0XBA, 0XBF, 0XF3, 0XF3, 0X37, 0X67, 0X8C, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0X30, 0X0C, 0X0C, 0X3C, 0X0F, 0X0C, 0X30, 0X30, 0X30, 0X00, + 0XC0, 0XC0, 0X03, 0X30, 0X0F, 0X0C, 0X30, 0X30, 0X00, 0XC0, 0XC3, 0X03, 0X03, 0X00, 0X0C, 0X0C, + 0X30, 0X30, 0X30, 0XC0, 0XC3, 0X00, 0X0C, 0X0C, 0X00, 0X30, 0X30, 0XC0, 0XC0, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X09, 0X9D, 0XCD, 0XFE, 0X7F, + 0XFD, 0XFF, 0X7F, 0XDF, 0XF7, 0XFF, 0XF7, 0X7F, 0XFF, 0XFF, 0XFF, 0X97, 0X9A, 0X69, 0XFE, 0X9F, + 0XF3, 0XFF, 0XF9, 0XEB, 0X9D, 0XDF, 0XBF, 0XFF, 0X0D, 0XEC, 0XCC, 0XF0, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0X30, 0X0C, 0X0C, 0X3C, 0X0F, 0X0C, + 0X30, 0X30, 0X30, 0X00, 0XC0, 0XC0, 0X03, 0X30, 0X0F, 0X0C, 0X30, 0X30, 0X00, 0XC0, 0X03, 0X03, + 0X03, 0X00, 0X0C, 0X0C, 0X30, 0X30, 0X00, 0XC0, 0XC3, 0X00, 0X0C, 0X0C, 0X00, 0X30, 0X30, 0X33, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, + 0XE5, 0XFE, 0XFD, 0XFF, 0X3F, 0XDF, 0XFF, 0XFF, 0XF7, 0X7F, 0XF7, 0XFF, 0XFF, 0XFF, 0XFF, 0XAE, + 0X6D, 0X99, 0XBE, 0X55, 0XFF, 0XFF, 0XCF, 0XED, 0XAA, 0XA6, 0XFF, 0XCF, 0XC3, 0X9C, 0XCC, 0X30, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X0C, 0X0C, + 0X0C, 0X33, 0X33, 0X0C, 0X3F, 0XC0, 0X3F, 0XF0, 0XC0, 0XC0, 0X0C, 0X0C, 0X0C, 0XCC, 0X30, 0X30, + 0X00, 0XC0, 0X03, 0XFF, 0X03, 0XFF, 0X0F, 0XF0, 0X30, 0X0F, 0XC0, 0XFF, 0XC3, 0XFF, 0X0C, 0X0C, + 0X00, 0X3F, 0XC0, 0X0C, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X5E, 0X7F, 0X7F, 0XAF, 0XF7, 0XFD, 0XFF, 0XF7, 0XFF, 0XDF, 0XFD, 0XFF, + 0XFF, 0XFF, 0XFD, 0XE6, 0XE6, 0XE6, 0X5F, 0X9A, 0X7F, 0XCF, 0XFF, 0XEB, 0X77, 0X6D, 0XB3, 0XFF, + 0X33, 0XEC, 0X43, 0X30, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X0F, 0XFC, 0X0C, 0X0C, 0X33, 0X33, 0X0C, 0X30, 0XC0, 0X30, 0X00, 0XC0, 0XC0, 0X0F, 0XFC, + 0X0C, 0X3C, 0X30, 0X30, 0X00, 0XC0, 0X03, 0X03, 0X03, 0X00, 0X0C, 0X30, 0X30, 0X00, 0X30, 0XC0, + 0XC3, 0X00, 0X0C, 0X0C, 0X00, 0X30, 0X30, 0X0C, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XDB, 0X7F, 0X3F, 0XDF, 0X7F, 0X3F, 0XF7, 0XFD, + 0XFD, 0XFD, 0XFF, 0XFF, 0XFF, 0XCF, 0XFF, 0XEE, 0XDA, 0X66, 0X6B, 0XE6, 0X5F, 0XFF, 0X72, 0X7E, + 0XAA, 0XEB, 0XBF, 0XFC, 0XF1, 0XDF, 0X8F, 0X30, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X0C, 0X0C, 0X0C, 0X30, 0XC3, 0X0C, 0X30, 0XC0, 0X30, 0X00, + 0XC0, 0XC0, 0X0C, 0X0C, 0X0C, 0X3C, 0X30, 0X30, 0X00, 0XC0, 0XC3, 0X03, 0X03, 0X00, 0X0C, 0X30, + 0X30, 0X30, 0X30, 0XC0, 0XC3, 0X00, 0X0C, 0X0C, 0X00, 0X30, 0X30, 0X0C, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X35, 0X9F, 0XF7, 0XF7, + 0X9C, 0XDD, 0XFF, 0XFF, 0X7F, 0X5F, 0X7F, 0XDF, 0XF3, 0XFF, 0XFE, 0XF7, 0XEE, 0X66, 0X65, 0XF9, + 0XA5, 0XFF, 0XFF, 0XE6, 0XDD, 0XB6, 0XDF, 0X3F, 0XCC, 0XFD, 0XC0, 0XF0, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X30, 0X03, 0X0F, 0XF0, 0X30, 0XC3, 0X0C, + 0X30, 0X30, 0X3F, 0XF0, 0XFF, 0X00, 0X30, 0X03, 0X0C, 0X0C, 0X3F, 0XC0, 0X00, 0X3F, 0X03, 0X03, + 0X03, 0XFF, 0X0C, 0X0C, 0X30, 0X0F, 0XC0, 0XC0, 0XC3, 0XFF, 0X0F, 0XF0, 0X00, 0X3F, 0XC0, 0X0C, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X06, 0XDB, 0XF2, 0XFB, 0XE7, 0XFF, 0XDF, 0XFF, 0XFF, 0XFF, 0XFD, 0XFF, 0X7F, 0XDF, 0XF7, 0X7F, + 0X9B, 0X99, 0X9A, 0XBE, 0X66, 0X7F, 0XFC, 0XFF, 0X7A, 0XFB, 0XBE, 0XFF, 0XFC, 0X32, 0XCF, 0XC0, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X09, 0XB5, 0XFE, 0X7D, 0XFA, 0XFF, 0XFF, 0XFF, 0XF7, 0XF7, 0XFF, 0XF7, + 0XDF, 0XEF, 0XEF, 0XAF, 0XF9, 0XEA, 0X65, 0X6F, 0X66, 0X95, 0XFF, 0X2E, 0XEE, 0X77, 0X7B, 0X73, + 0XCF, 0X3D, 0X41, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X66, 0XFC, 0XEF, 0X99, 0XBD, 0X7F, 0XFF, + 0XFF, 0XF7, 0X3F, 0XFD, 0XBF, 0XDF, 0XDF, 0XDA, 0XF6, 0X9D, 0X9A, 0X6F, 0XE7, 0X6A, 0X7F, 0XCF, + 0X99, 0XBB, 0XBD, 0XEF, 0XFC, 0XC3, 0XC3, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XDE, 0X6F, 0X25, + 0XED, 0X9E, 0X9F, 0XFF, 0XFC, 0XFC, 0XFF, 0X7E, 0X66, 0XF7, 0XBF, 0XE7, 0XAD, 0XE9, 0XA6, 0X97, + 0XFA, 0X76, 0XDF, 0XCD, 0XFB, 0XEE, 0X6F, 0XD8, 0XFF, 0XD1, 0XC1, 0X80, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XF0, 0X3F, 0XF0, 0X3F, 0XC0, 0XFF, + 0X03, 0X00, 0X0F, 0XFC, 0X00, 0XFF, 0X03, 0XFC, 0X0F, 0XF0, 0X00, 0X30, 0X03, 0X30, 0X30, 0X03, + 0XFC, 0X03, 0XFF, 0X00, 0XC0, 0X30, 0X30, 0XFF, 0XC3, 0X0F, 0XF0, 0X30, 0X30, 0X30, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X37, 0X7F, 0XF6, 0XF6, 0X99, 0X9F, 0X7F, 0XFF, 0XFF, 0XCF, 0XFF, 0X9A, 0X6E, 0XF5, 0XF9, + 0XBA, 0X9D, 0X99, 0X99, 0XF6, 0X66, 0X6F, 0XFE, 0X66, 0X6E, 0XEE, 0XEF, 0XFF, 0XF3, 0X02, 0XC0, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X0C, 0X30, + 0X00, 0XC0, 0X30, 0XC0, 0XC3, 0X00, 0X0C, 0X00, 0X00, 0XC0, 0X0C, 0X03, 0X0C, 0X0C, 0X00, 0X3C, + 0X0F, 0X30, 0X30, 0X03, 0X03, 0X03, 0X00, 0X03, 0X30, 0X30, 0X30, 0X0C, 0X03, 0X0C, 0X00, 0X30, + 0X30, 0X30, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X26, 0XE6, 0XFE, 0X7B, 0X6B, 0XF7, 0XF7, 0XFF, 0XFF, 0X3C, 0XCF, + 0XE5, 0XBF, 0XDA, 0X7E, 0XDF, 0X6A, 0XA6, 0X66, 0X7D, 0XB9, 0XD9, 0XFF, 0XEF, 0X67, 0XD9, 0XFE, + 0X7F, 0XFF, 0X32, 0X40, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X0C, 0X0C, 0X30, 0X00, 0XC0, 0X30, 0XC0, 0XC3, 0X00, 0X0C, 0X00, 0X00, 0XC0, 0X0C, 0X03, + 0X0C, 0X0C, 0X00, 0X3C, 0X0F, 0X0C, 0XC0, 0X03, 0X03, 0X03, 0X00, 0X03, 0X30, 0X30, 0X30, 0X0C, + 0X03, 0X0C, 0X00, 0X30, 0X30, 0X30, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0D, 0X9D, 0XFC, 0XAC, 0X9D, 0XBD, 0XFF, + 0XFF, 0XFF, 0XFD, 0XFD, 0XFF, 0XF6, 0X99, 0XBF, 0X69, 0XB6, 0X76, 0X69, 0XAF, 0X9E, 0XAD, 0X9F, + 0XED, 0XBA, 0X7E, 0X99, 0XFF, 0XFF, 0X03, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XF0, 0X3F, 0XF0, 0XC0, 0X30, 0XFF, 0X03, 0X00, 0X0F, 0XFC, + 0X00, 0XFF, 0X0C, 0X03, 0X0F, 0XF0, 0X00, 0X33, 0X33, 0X03, 0X00, 0X03, 0XFC, 0X03, 0XFF, 0X0C, + 0X0C, 0X30, 0X30, 0X0C, 0X03, 0X0F, 0XF0, 0X30, 0X30, 0X30, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0X67, 0X7F, + 0XDF, 0XE9, 0X9E, 0X7C, 0XFF, 0XFD, 0XCF, 0X3F, 0XFF, 0XE6, 0X6A, 0X5F, 0XFB, 0XBB, 0X6A, 0X66, + 0X5B, 0XE7, 0X5A, 0XD9, 0XFF, 0XD6, 0XE7, 0XEF, 0X9D, 0XFF, 0X3C, 0XC0, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X00, 0X30, 0X00, 0XC0, 0X30, 0XC0, + 0X03, 0X00, 0X0C, 0X00, 0X00, 0XC0, 0X0C, 0X03, 0X0C, 0X30, 0X00, 0X33, 0X33, 0X03, 0X00, 0X03, + 0X03, 0X03, 0X00, 0X0F, 0XFC, 0X30, 0X30, 0X0C, 0X03, 0X0C, 0X00, 0X30, 0X30, 0X30, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0XDA, 0XEF, 0XD9, 0X35, 0XAD, 0X93, 0XFF, 0XFF, 0XAB, 0XBC, 0XB9, 0X9A, 0XB6, 0XE7, + 0XD9, 0X9E, 0X66, 0XD9, 0X99, 0XFA, 0XB7, 0X69, 0X9F, 0XF9, 0XBB, 0X9B, 0XAF, 0XFC, 0XD0, 0XD0, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X00, 0X30, + 0X00, 0XC0, 0X30, 0XC0, 0X03, 0X00, 0X0C, 0X00, 0X00, 0XC0, 0X0C, 0X03, 0X0C, 0X30, 0X00, 0X30, + 0XC3, 0X03, 0X00, 0X03, 0X03, 0X03, 0X00, 0X0C, 0X0C, 0X30, 0X30, 0X0C, 0X03, 0X0C, 0X00, 0X30, + 0X30, 0X30, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XF9, 0X67, 0XF7, 0XCE, 0X5A, 0XFC, 0XCF, 0XFF, 0XDE, 0X5F, + 0X7A, 0XE7, 0X69, 0X69, 0XFE, 0XAE, 0XAD, 0XB6, 0X66, 0X7D, 0X66, 0XDE, 0XE6, 0XFF, 0X79, 0XF9, + 0XFB, 0X30, 0X7C, 0XB0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X0C, 0X00, 0X3F, 0XF0, 0X3F, 0XC0, 0XC0, 0X03, 0XFC, 0X0F, 0XFC, 0X00, 0XC0, 0X03, 0XFC, + 0X0C, 0X0C, 0X00, 0X30, 0XC3, 0X03, 0X00, 0X03, 0XFC, 0X03, 0XFF, 0X30, 0X03, 0X0F, 0XC0, 0X0C, + 0X03, 0X0C, 0X00, 0X0F, 0XC0, 0X3F, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0D, 0XBD, 0XC0, 0XF3, 0XAB, 0XFF, + 0X3F, 0XFB, 0XF9, 0XEB, 0XD9, 0XF6, 0XAD, 0XA5, 0XFD, 0XD9, 0XDA, 0X69, 0X99, 0XAE, 0XBB, 0X6D, + 0X9A, 0XFF, 0XA7, 0XAE, 0XDC, 0XFA, 0XC0, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0X5B, + 0X00, 0XFC, 0X56, 0XD7, 0XC9, 0XFE, 0XFE, 0XC4, 0XE7, 0X7E, 0X59, 0X9A, 0X7F, 0XAE, 0XA9, 0X99, + 0XA6, 0X5F, 0X56, 0X9B, 0XDD, 0X9B, 0XFE, 0X7C, 0XFF, 0XDD, 0XBC, 0XB0, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0XFF, 0X00, 0XFF, 0XF6, 0XF7, 0XF3, 0XFF, 0X7E, 0X6F, 0X2E, 0X6E, 0X6E, 0X6D, + 0X9F, 0XD6, 0X76, 0XD9, 0X99, 0X9B, 0XE9, 0XE6, 0XBA, 0XED, 0XBF, 0XBF, 0XFF, 0XE6, 0XC3, 0XF0, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XBF, 0XC9, 0XFD, 0XFC, 0XBF, 0XFF, 0XFF, + 0X7E, 0X67, 0XE6, 0X9A, 0X67, 0XFB, 0X69, 0X9A, 0X99, 0X99, 0XF6, 0X6D, 0X9D, 0X9B, 0XDB, 0XDF, + 0XF3, 0X7B, 0X3C, 0X70, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X0F, 0XF0, 0X30, 0X00, 0XC0, 0XC3, 0X00, 0X30, 0X0C, 0X00, 0X3F, 0XC0, 0XFF, 0XC0, 0X00, + 0XC0, 0X30, 0X30, 0X3F, 0XC0, 0X03, 0X00, 0X30, 0XC0, 0XC0, 0X03, 0X00, 0X3F, 0XC0, 0X30, 0XC0, + 0X0C, 0XFF, 0XC0, 0XC0, 0XC0, 0X3F, 0XF0, 0X3F, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFD, 0XFF, + 0XFD, 0XDF, 0XFF, 0XFF, 0XFD, 0XDB, 0XDA, 0XE9, 0X99, 0XF9, 0XB7, 0X99, 0XD9, 0X99, 0XBE, 0X7B, + 0X7B, 0XFD, 0XA7, 0XFB, 0XEF, 0XE6, 0XC3, 0X3C, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X0C, 0X30, 0X00, 0XC0, 0XC3, 0XC0, 0XF0, 0X33, 0X00, 0XC0, + 0X30, 0XC0, 0X00, 0X03, 0X30, 0X3C, 0X30, 0X30, 0X30, 0X03, 0XC0, 0XF0, 0XC0, 0XC0, 0X0C, 0XC0, + 0X30, 0X30, 0X30, 0XC0, 0X0C, 0X0C, 0X00, 0XC0, 0XC0, 0X03, 0X00, 0XC0, 0X30, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X3F, 0XFF, 0XDB, 0XFF, 0XB7, 0XBF, 0XFF, 0XFF, 0X25, 0XF5, 0X99, 0XA6, 0X7E, 0X9A, 0XA6, + 0X99, 0X96, 0X6F, 0X66, 0XE7, 0X9A, 0X7E, 0X79, 0XDC, 0XED, 0XB3, 0X3C, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X0C, 0X30, 0X00, 0XC0, 0XC3, 0XC0, + 0XF0, 0X33, 0X00, 0XC0, 0X00, 0XC0, 0X00, 0X03, 0X30, 0X3C, 0X30, 0X30, 0X30, 0X03, 0XC0, 0XF0, + 0X33, 0X00, 0X0C, 0XC0, 0X30, 0X30, 0X30, 0XC0, 0X0C, 0X0C, 0X00, 0X33, 0X00, 0X03, 0X00, 0XC0, + 0X30, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X3E, 0XFF, 0XD9, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF6, 0XBA, 0X9E, + 0X59, 0X9F, 0X66, 0X7B, 0X66, 0X69, 0X9B, 0X9B, 0X9E, 0X7B, 0XA6, 0XBF, 0XFF, 0X36, 0XCC, 0XF8, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XF0, 0X30, + 0X00, 0XC0, 0XC3, 0X33, 0X30, 0XC0, 0XC0, 0XC3, 0XF0, 0XFF, 0XC0, 0X0C, 0X0C, 0X33, 0X30, 0X30, + 0X30, 0X03, 0X33, 0X30, 0X0C, 0X00, 0X30, 0X30, 0X3F, 0XC0, 0X30, 0XC0, 0X0C, 0X0C, 0X00, 0X0C, + 0X00, 0X03, 0X00, 0XC0, 0X30, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X2B, 0XFF, 0XFD, 0X9F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XF2, 0X5F, 0X69, 0XA6, 0X67, 0XF9, 0XA5, 0XE9, 0X96, 0X65, 0XF9, 0XEE, 0XE7, 0X6D, 0X9E, + 0X37, 0XEC, 0XF3, 0X3C, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X0C, 0X00, 0X30, 0X00, 0XC0, 0XC3, 0X33, 0X30, 0XFF, 0XC0, 0XC0, 0X30, 0XC0, 0X00, 0X0F, + 0XFC, 0X30, 0XF0, 0X30, 0X30, 0X03, 0X33, 0X30, 0X0C, 0X00, 0X3F, 0XF0, 0X30, 0X30, 0X30, 0XC0, + 0X0C, 0X0C, 0X00, 0X0C, 0X00, 0X03, 0X00, 0XC0, 0X30, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X2F, 0XBF, 0XFF, + 0X67, 0XF7, 0XFF, 0XFF, 0XFF, 0XF9, 0X9B, 0X9B, 0X69, 0X9B, 0XF6, 0X9A, 0X96, 0X99, 0X9A, 0XB6, + 0X66, 0X6F, 0X9F, 0XED, 0XFB, 0X3B, 0XC2, 0X34, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X00, 0X30, 0X00, 0XC0, 0XC3, 0X0C, 0X30, 0XC0, 0XC0, 0XC0, + 0X30, 0XC0, 0X00, 0X0C, 0X0C, 0X30, 0XF0, 0X30, 0X30, 0X03, 0X0C, 0X30, 0X0C, 0X00, 0X30, 0X30, + 0X30, 0X30, 0X30, 0XC0, 0X0C, 0X0C, 0X00, 0X0C, 0X00, 0X03, 0X00, 0XC0, 0X30, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X0E, 0XEF, 0XFF, 0XD9, 0X6F, 0XFF, 0XFF, 0XFF, 0XFF, 0X67, 0XE6, 0X66, 0X65, 0XFE, 0X66, + 0X6A, 0X79, 0X65, 0X6E, 0XEE, 0XD9, 0XEA, 0XBB, 0XCB, 0X37, 0X37, 0X3C, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X00, 0X3F, 0XC0, 0X3F, 0X03, 0X0C, + 0X33, 0X00, 0X30, 0X3F, 0XC0, 0XFF, 0XC0, 0X30, 0X03, 0X30, 0X30, 0X3F, 0XC0, 0X03, 0X0C, 0X30, + 0X0C, 0X00, 0XC0, 0X0C, 0X3F, 0XC0, 0X30, 0XFF, 0X0C, 0X0C, 0X00, 0X0C, 0X00, 0X03, 0X00, 0X3F, + 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XEF, 0XFF, 0XFE, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0X26, 0XE6, + 0X99, 0X96, 0X7F, 0X69, 0XE5, 0X99, 0X9A, 0X67, 0X9D, 0XBA, 0X9D, 0XF6, 0XFC, 0XFB, 0X32, 0X30, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0B, 0XBE, 0XFF, 0XFF, 0X9F, 0XFF, 0XFF, + 0XFF, 0XFF, 0XF9, 0X7E, 0X66, 0X69, 0X97, 0XE6, 0X6B, 0XA6, 0X65, 0X99, 0XEA, 0XED, 0XEE, 0XBD, + 0XFF, 0X73, 0X37, 0X30, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XBF, 0XFF, + 0XFF, 0XFE, 0X81, 0XFF, 0XFF, 0XFF, 0XD6, 0XBD, 0X99, 0X96, 0X66, 0XF6, 0X76, 0X5A, 0X66, 0X69, + 0XB7, 0X67, 0X9D, 0XBF, 0X8C, 0XEF, 0X32, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X03, 0XEF, 0XBF, 0XFF, 0XFF, 0X80, 0X07, 0X5F, 0XFF, 0XFD, 0X5F, 0X69, 0XA6, 0X59, 0X7E, + 0X69, 0X99, 0X99, 0X9E, 0X6E, 0XBE, 0XEE, 0XDA, 0XF3, 0X33, 0X36, 0X70, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X00, 0XC3, 0X0C, 0X00, 0XC3, 0X03, + 0XF0, 0X00, 0XC0, 0XC0, 0XC0, 0XC3, 0X00, 0X30, 0X0C, 0X00, 0XC0, 0XC0, 0X03, 0XF0, 0X3F, 0XC0, + 0XFF, 0XC3, 0XFF, 0X03, 0XF0, 0X0C, 0X0C, 0X00, 0X03, 0X00, 0X03, 0X00, 0XC0, 0X0C, 0X00, 0X0C, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFE, 0XFF, 0XFF, 0XFE, 0XC0, 0X00, 0XFF, 0XFF, 0XFF, 0X27, + 0X99, 0X99, 0XA5, 0X9E, 0X66, 0XE7, 0X66, 0XD9, 0X99, 0XE9, 0XE7, 0XBD, 0XFE, 0XDF, 0X33, 0X40, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0X03, 0XC3, + 0X0F, 0X03, 0XC3, 0X0C, 0X0C, 0X00, 0XC0, 0XC0, 0XC0, 0XC3, 0XC0, 0XF0, 0X33, 0X00, 0XF0, 0XC0, + 0X0C, 0X0C, 0X30, 0X30, 0XC0, 0X03, 0X00, 0X0C, 0X0C, 0X0C, 0X0C, 0X00, 0X03, 0X00, 0X0C, 0XC0, + 0XF0, 0X3C, 0X00, 0X33, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XBF, 0XEF, 0XFF, 0XFE, 0XC0, 0X00, + 0XBF, 0XFF, 0XFE, 0XD9, 0XE6, 0X66, 0X5A, 0X67, 0XD9, 0X9A, 0X99, 0XA6, 0X66, 0X9E, 0XBB, 0X6F, + 0X7C, 0XA3, 0X26, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X0F, 0X03, 0XC3, 0X0F, 0X03, 0XC3, 0X0C, 0X00, 0X00, 0XC0, 0XC0, 0XC0, 0XC3, 0XC0, 0XF0, + 0X33, 0X00, 0XF0, 0XC0, 0X0C, 0X00, 0X30, 0X30, 0XC0, 0X03, 0X00, 0X0C, 0X00, 0X0C, 0X0C, 0X00, + 0X03, 0X00, 0X0C, 0XC0, 0XF0, 0X3C, 0X00, 0X33, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XF8, 0X00, 0X00, 0X00, 0X00, 0X00, 0X02, 0XFF, 0XFF, + 0XFF, 0XFF, 0XC0, 0X00, 0X3E, 0XFF, 0XFF, 0X66, 0XF9, 0XA6, 0X65, 0X9B, 0XF9, 0X99, 0X99, 0X9A, + 0X79, 0XFD, 0XEE, 0XE9, 0XB3, 0XDC, 0XDD, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0XCC, 0XC3, 0X0C, 0XCC, 0XC3, 0X0C, 0X00, 0X00, 0XFF, 0XC0, + 0XC0, 0XC3, 0X33, 0X30, 0XC0, 0XC0, 0XCC, 0XC0, 0X03, 0XF0, 0X3F, 0XC0, 0XFF, 0XC3, 0XFF, 0X0C, + 0X00, 0X0F, 0XFC, 0X00, 0X03, 0X00, 0X30, 0X30, 0XCC, 0XCC, 0X00, 0XC0, 0XC0, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XEF, 0XD0, 0X00, 0X00, 0X00, + 0X00, 0X00, 0XFA, 0XFB, 0XFF, 0XFB, 0XC0, 0X00, 0XB7, 0X5F, 0XFF, 0XF9, 0X7E, 0X59, 0X9A, 0X65, + 0X7D, 0XA7, 0X66, 0X76, 0X9A, 0X9A, 0XDD, 0XFF, 0XED, 0XAC, 0XCD, 0XC0, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0XCC, 0XC3, 0X0C, 0XCC, 0XC3, 0X0C, + 0X00, 0X00, 0XC0, 0XC0, 0XC0, 0XC3, 0X33, 0X30, 0XFF, 0XC0, 0XC3, 0XC0, 0X00, 0X0C, 0X30, 0X00, + 0XC0, 0X03, 0X00, 0X0C, 0X00, 0X0C, 0X0C, 0X00, 0X03, 0X00, 0X3F, 0XF0, 0XCC, 0XCC, 0X00, 0XFF, + 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, + 0XFF, 0XD0, 0X00, 0X00, 0X00, 0X00, 0XEF, 0XEF, 0XFF, 0XFF, 0XC0, 0X00, 0X3F, 0XB7, 0XFF, 0XF2, + 0X6F, 0X66, 0X65, 0X99, 0X9F, 0XDA, 0X9A, 0X66, 0X6F, 0X6D, 0XAF, 0X9F, 0XCE, 0XD3, 0X23, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X30, 0XC3, + 0X0C, 0X30, 0XC3, 0X0C, 0X0C, 0X00, 0XC0, 0XC0, 0XC0, 0XC3, 0X0C, 0X30, 0XC0, 0XC0, 0XC3, 0XC0, + 0X0C, 0X0C, 0X30, 0X00, 0XC0, 0X03, 0X00, 0X0C, 0X0C, 0X0C, 0X0C, 0X00, 0X03, 0X00, 0X30, 0X30, + 0XC3, 0X0C, 0X00, 0XC0, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X03, 0XBB, 0XBE, 0XFF, 0X00, 0X00, 0X07, 0X1F, 0XFE, 0XFF, 0XBF, 0XFF, 0XC0, 0X00, + 0X3F, 0X5D, 0X7F, 0XFF, 0X97, 0XD9, 0X99, 0X96, 0X67, 0XE9, 0X79, 0X9B, 0X66, 0X9A, 0X5F, 0XBC, + 0XF7, 0X73, 0XB1, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X0C, 0X30, 0XC3, 0X0C, 0X30, 0XC3, 0X03, 0XF0, 0X00, 0XC0, 0XC0, 0X3F, 0X03, 0X0C, 0X33, + 0X00, 0X30, 0XC0, 0XC0, 0X03, 0XF0, 0X30, 0X00, 0XFF, 0XC3, 0XFF, 0X03, 0XF0, 0X0C, 0X0C, 0X30, + 0X03, 0X00, 0XC0, 0X0C, 0XC3, 0X0C, 0X03, 0X00, 0X30, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFB, 0XFB, 0X67, 0XC0, 0X00, 0X3C, 0XFF, 0XEB, 0XBF, + 0XFF, 0XFF, 0X80, 0X00, 0X3F, 0XEF, 0XE7, 0XFE, 0X5B, 0XED, 0X99, 0X99, 0X99, 0XFD, 0XA6, 0X66, + 0X6E, 0X6D, 0XA9, 0XDF, 0X9A, 0XEB, 0X1F, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XBF, 0XFB, 0XFB, 0XFC, 0X00, + 0XC0, 0X3F, 0XFE, 0XFB, 0XBF, 0XFF, 0X00, 0X00, 0X3F, 0X7B, 0XF9, 0XFF, 0XA5, 0X7E, 0X66, 0X66, + 0X66, 0X5F, 0XE6, 0X6A, 0X65, 0X9A, 0XE6, 0XFB, 0X65, 0XCC, 0XB3, 0XC0, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X07, 0X9E, + 0XB7, 0XF7, 0XBF, 0X00, 0XCF, 0X1F, 0XFB, 0XEF, 0XFF, 0XFF, 0X80, 0X00, 0X3E, 0XF7, 0XFE, 0X5F, + 0XDA, 0X7D, 0X99, 0X99, 0X66, 0X66, 0XF9, 0X9D, 0X9A, 0XE7, 0X7F, 0XF5, 0XAE, 0X9C, 0XD3, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X03, 0XEB, 0XFF, 0X7F, 0XFF, 0XD0, 0XCF, 0XFF, 0X3E, 0XFB, 0XFF, 0XFF, 0XC0, 0X00, + 0X3D, 0XEF, 0XBE, 0XF7, 0XF5, 0X9F, 0X66, 0X66, 0X59, 0X99, 0X6F, 0X99, 0XA9, 0X9A, 0XDF, 0XFE, + 0X59, 0XF3, 0X3F, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X0F, 0XF0, 0X3F, 0XC0, 0XC3, 0XFF, 0X0C, 0X0C, 0X0F, 0XF0, 0X03, 0XFF, 0X00, 0XFF, 0X00, + 0X0C, 0X0C, 0X30, 0X30, 0X30, 0X03, 0X00, 0XC0, 0X30, 0X30, 0X0F, 0XC0, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0B, 0XBD, 0XBB, 0XB9, 0XEF, 0XFC, 0XF0, 0XFF, 0X3E, 0XFB, + 0XEF, 0XFF, 0XC0, 0X00, 0X3F, 0XDF, 0XFD, 0XFF, 0X7E, 0X67, 0X99, 0X99, 0XA5, 0X95, 0X9F, 0X6A, + 0X59, 0XB9, 0XEF, 0XFF, 0XE7, 0X8C, 0XC3, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X00, 0X30, 0X30, 0XC3, 0X00, 0X0F, 0X0C, 0X0C, 0X0C, 0X00, + 0X30, 0X03, 0X00, 0XC0, 0X0C, 0X0C, 0X30, 0X30, 0X3C, 0X0F, 0X03, 0X30, 0X3C, 0X30, 0X30, 0X30, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0X7B, 0XDB, 0XDD, 0XF7, 0XFF, + 0XFF, 0XFF, 0XFF, 0XBF, 0XFF, 0XFF, 0XFC, 0X00, 0X3E, 0XDF, 0XFD, 0XFF, 0XFF, 0XD9, 0XE6, 0X66, + 0X59, 0X69, 0X97, 0XA7, 0XEB, 0X66, 0XBD, 0XBF, 0XFC, 0XC0, 0XCB, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X00, 0X30, 0X30, 0XC3, 0X00, 0X0F, + 0X0C, 0X0C, 0X0C, 0X00, 0X30, 0X03, 0X00, 0XC0, 0X0C, 0X0C, 0X30, 0X30, 0X3C, 0X0F, 0X03, 0X30, + 0X3C, 0X30, 0X30, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XE7, + 0X79, 0X38, 0XEE, 0X7E, 0XD3, 0XFF, 0XFF, 0XBE, 0XFF, 0XFF, 0XFC, 0X00, 0X3D, 0XDF, 0XFE, 0XFF, + 0XFF, 0XD9, 0XF9, 0X99, 0X99, 0X96, 0X66, 0XD7, 0XFD, 0XEF, 0XD9, 0XFF, 0XFF, 0XFC, 0X07, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XF0, 0X3F, + 0XC0, 0XC3, 0XFF, 0X0C, 0XCC, 0X0C, 0X0C, 0X00, 0X30, 0X03, 0X00, 0XC0, 0X0F, 0XFC, 0X30, 0X30, + 0X33, 0X33, 0X0C, 0X0C, 0X33, 0X30, 0X0F, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0XED, 0XB7, 0X7F, 0XF7, 0XF7, 0XCF, 0XFF, 0XFF, 0XFB, 0XBF, 0XFF, 0XFC, 0X00, + 0X3F, 0XFF, 0XFD, 0XFF, 0XFF, 0XF6, 0X7E, 0X66, 0X66, 0X69, 0X99, 0X76, 0X66, 0X66, 0X66, 0X7D, + 0XFF, 0XFF, 0X7F, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X0C, 0X00, 0X30, 0XC0, 0XC3, 0X00, 0X0C, 0X3C, 0X0C, 0X0C, 0X00, 0X30, 0X03, 0X00, 0XC0, + 0X0C, 0X0C, 0X30, 0X30, 0X33, 0X33, 0X0F, 0XFC, 0X30, 0XF0, 0X00, 0X30, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XF6, 0X7E, 0XFF, 0X9F, 0X9F, 0X3F, 0XF0, 0XFE, 0XEF, + 0X7F, 0XFF, 0XFF, 0XC3, 0XFF, 0XFF, 0XFD, 0XFF, 0XFF, 0XFE, 0X1E, 0X66, 0X66, 0X65, 0X66, 0X69, + 0X99, 0X99, 0X9A, 0X7F, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X00, 0X30, 0XC0, 0XC3, 0X00, 0X0C, 0X3C, 0X0C, 0X0C, 0X00, + 0X30, 0X03, 0X00, 0XC0, 0X0C, 0X0C, 0X30, 0X30, 0X30, 0XC3, 0X0C, 0X0C, 0X30, 0XF0, 0X30, 0X30, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3D, 0XE7, 0XFB, 0XFB, 0XFE, + 0XFF, 0XFF, 0X3F, 0XEF, 0XFF, 0XFF, 0XFF, 0XCF, 0XFF, 0XFF, 0XFD, 0XFB, 0XFF, 0XFF, 0XE7, 0XD9, + 0X99, 0X66, 0X9B, 0X9E, 0X9A, 0X66, 0X99, 0XBF, 0X99, 0X7F, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X00, 0X30, 0X30, 0XC3, 0XFF, 0X0C, + 0X0C, 0X0F, 0XF0, 0X00, 0X30, 0X00, 0XFF, 0X00, 0X0C, 0X0C, 0X0F, 0XC0, 0X30, 0XC3, 0X30, 0X03, + 0X30, 0X30, 0X0F, 0XC0, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, + 0XFE, 0XFF, 0XBD, 0XF4, 0XFF, 0XFF, 0XFF, 0XFE, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0XF7, + 0XFF, 0XFF, 0X9E, 0XE6, 0X66, 0X66, 0X5B, 0X66, 0X66, 0X69, 0X66, 0XE5, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X2F, 0XFB, 0X7B, 0XFF, 0XE7, 0XFF, 0XFF, 0XFF, 0XBF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFD, 0XBF, 0XFF, 0XFF, 0XE5, 0X79, 0X99, 0X96, 0X65, 0X99, 0X99, 0X96, 0X69, 0X7F, + 0XFF, 0XFF, 0XFF, 0X6F, 0XFF, 0XD0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XBE, 0XE7, 0X79, 0XFF, 0XFF, 0XBF, 0XFB, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, 0XDB, 0XFF, 0XFF, 0XF6, 0XBD, 0X99, 0X99, 0X9B, 0X66, + 0XD9, 0XA9, 0XE6, 0XBF, 0X7F, 0XFF, 0X56, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3B, 0XFD, 0XFF, 0XBC, 0X4F, + 0XBF, 0XFF, 0XB7, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, 0XF7, 0XFF, 0XFF, 0XF7, 0X5F, + 0X99, 0X9A, 0X65, 0X99, 0X6D, 0X9A, 0X59, 0X77, 0XFD, 0XD7, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3E, + 0X64, 0X67, 0XDB, 0XDF, 0XFF, 0XFB, 0X7D, 0XBF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0X6F, + 0X7F, 0XFF, 0XF6, 0X67, 0X9A, 0X65, 0X9A, 0X69, 0X9A, 0X66, 0X66, 0XBF, 0X77, 0X7F, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X3D, 0XD2, 0X72, 0X7F, 0XBF, 0XFF, 0XFF, 0XDF, 0X76, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFD, 0XE7, 0XFF, 0XFF, 0XFD, 0XF7, 0XE5, 0X9A, 0X65, 0X96, 0X66, 0X99, 0XA5, 0XB7, + 0X77, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XFD, 0X6D, 0XFB, 0XFF, 0XFF, 0XEE, 0XF9, 0XED, + 0XEF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, 0XDE, 0X7F, 0X7F, 0XFD, 0XD9, 0XF6, 0X65, 0X99, 0X9A, + 0XD9, 0XD9, 0X99, 0XFF, 0XFF, 0X77, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XFF, 0XF7, 0X1D, 0XFB, + 0XBB, 0XFF, 0XDF, 0X7D, 0XE7, 0XFF, 0XFF, 0XFE, 0XFF, 0XFF, 0XFE, 0X6D, 0XFF, 0XBF, 0XFE, 0X72, + 0X7E, 0X66, 0X66, 0X66, 0X66, 0XA6, 0X66, 0XDD, 0XF7, 0XFF, 0XFD, 0XF7, 0XFF, 0XFF, 0XFF, 0XFF, + 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0XFE, 0XF6, 0XE7, 0X6F, 0XFB, 0X9F, 0XB9, 0XD7, 0XDF, 0XBF, 0XEF, 0XB7, 0XDB, 0XFB, 0XFD, 0XD9, + 0XFF, 0XBF, 0XFF, 0X7D, 0X9D, 0X99, 0X99, 0X99, 0XA6, 0X59, 0X97, 0XFF, 0XFF, 0XFF, 0XFF, 0XDF, + 0XFD, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X3E, 0XEF, 0X76, 0X12, 0X77, 0XFF, 0X1E, 0XF8, 0XC7, 0X6B, 0XFF, 0XFE, + 0XFF, 0XBF, 0XFE, 0X6D, 0XBF, 0X7F, 0XFF, 0X9F, 0X9F, 0X99, 0X99, 0X99, 0X9D, 0XB5, 0X9B, 0XFF, + 0XFF, 0XF7, 0XDD, 0XFF, 0X77, 0XF7, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X2F, 0X51, 0XEC, 0XF9, 0XEE, 0XDE, 0XFF, 0XFD, + 0XB7, 0XB5, 0XED, 0XBF, 0XFF, 0XFF, 0XFC, 0XDD, 0XFF, 0XBF, 0XFF, 0XDC, 0X5B, 0XD9, 0X99, 0X66, + 0X66, 0X76, 0X6D, 0XFF, 0XFF, 0XFF, 0XFD, 0XF7, 0XFF, 0X7F, 0XFF, 0XFF, 0XFF, 0XC0, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFC, 0X0E, 0X1F, + 0XDD, 0XB7, 0X4F, 0X6D, 0XED, 0XDF, 0X7B, 0X7B, 0XFF, 0XFF, 0XFF, 0X77, 0X7F, 0X7F, 0XFF, 0XE7, + 0XB5, 0XF6, 0X66, 0X99, 0XD9, 0X99, 0X9D, 0X99, 0XFF, 0XFF, 0XFF, 0XF7, 0XDF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X0E, 0X51, 0XD8, 0X7B, 0XDF, 0XB5, 0XFF, 0X93, 0XBE, 0XFD, 0X7F, 0XFF, 0XFF, 0XFD, 0X9F, + 0X7F, 0XBF, 0XFF, 0XFD, 0X5A, 0X7D, 0X99, 0X66, 0X6D, 0X99, 0X96, 0X59, 0X97, 0XFF, 0XFF, 0XFF, + 0XFD, 0XF7, 0X7F, 0XFF, 0XFF, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XF0, 0XFE, 0XC6, 0X72, 0X7F, 0X3F, 0XD7, 0X27, 0X5F, 0XEF, + 0XFF, 0XFF, 0XFF, 0X62, 0X7F, 0X7B, 0XFF, 0XFD, 0XB5, 0X9F, 0X99, 0X99, 0X97, 0XFD, 0X99, 0X97, + 0X59, 0X5F, 0XFF, 0XFD, 0XFF, 0XFD, 0XFF, 0XFF, 0XFF, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X17, 0XF0, 0X67, 0XF1, 0XDC, 0X7F, 0X7B, 0XC7, + 0XFD, 0XFF, 0X3B, 0X7F, 0XBB, 0XFF, 0XFD, 0X77, 0X7F, 0XEF, 0XFF, 0XFF, 0X49, 0X9B, 0XD9, 0X99, + 0X9B, 0XFF, 0XFD, 0XDD, 0X66, 0X65, 0X5F, 0XFF, 0XF7, 0X77, 0XDD, 0XFF, 0XFF, 0XFF, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC2, 0X42, 0X1E, 0XC7, + 0X87, 0XBF, 0XFF, 0XFF, 0XFE, 0X7B, 0XE7, 0XDF, 0XFF, 0XFE, 0XFF, 0X5E, 0X7F, 0XDF, 0XEF, 0XFF, + 0XE6, 0X65, 0XFE, 0X59, 0X7F, 0XFF, 0XFF, 0XFA, 0X66, 0X59, 0XA5, 0X7F, 0XFF, 0XD7, 0X7F, 0XFF, + 0XFF, 0XFF, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XED, + 0X84, 0X1F, 0X09, 0XEF, 0XCF, 0X78, 0X6D, 0XF9, 0XEF, 0X47, 0X36, 0XFF, 0X7F, 0XFF, 0XFC, 0XF6, + 0X7F, 0XBF, 0XFF, 0XFF, 0XFD, 0X97, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XE5, 0X96, 0X59, 0X95, + 0XFF, 0XFD, 0X5D, 0XFF, 0XFF, 0XFF, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X07, 0XFF, 0XFF, 0XF9, 0X52, 0XFE, 0XFF, 0X7F, 0XFE, 0X7D, 0XF7, 0XDE, 0X6D, 0XFF, + 0X9F, 0XEF, 0XFF, 0X5B, 0X7F, 0XFF, 0XEF, 0XBF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XE5, 0XD6, 0X59, 0X57, 0XFF, 0XF7, 0X5F, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XB5, 0XEF, 0XFF, 0X7F, 0X59, 0XE7, 0XF1, 0X8F, 0XF7, + 0XFF, 0XFF, 0XD6, 0XD7, 0XFF, 0XFF, 0XFC, 0X9D, 0X9F, 0XEF, 0XEE, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XC1, 0X3F, 0X7F, 0XF6, 0XA5, 0X5B, 0XFF, 0X77, 0XFF, 0XFF, 0XF0, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XBF, 0XDB, 0X6F, 0XFB, 0XDF, + 0XFF, 0XB4, 0X1B, 0XEF, 0XFF, 0XBF, 0XB6, 0X6D, 0XBE, 0XDF, 0XEF, 0X5B, 0X6F, 0XDF, 0XEF, 0XBF, + 0XFF, 0XFE, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X0C, 0X80, 0X3F, 0XDA, 0X99, 0X6F, 0XFF, + 0X7F, 0XFF, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0A, 0X80, 0X02, 0XA0, 0X00, 0X00, + 0X00, 0X01, 0X50, 0X00, 0X54, 0X00, 0X00, 0X00, 0X0A, 0X80, 0X02, 0XA0, 0X00, 0X00, 0X00, 0X05, + 0X40, 0X01, 0X50, 0X00, 0X00, 0X00, 0X02, 0XA0, 0X00, 0XA8, 0X00, 0X00, 0X00, 0X05, 0X40, 0X01, + 0X50, 0X00, 0X00, 0X00, 0XA8, 0X00, 0X2A, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, + 0XBF, 0XFD, 0X77, 0XFE, 0X7B, 0XFF, 0XB7, 0XFF, 0XF7, 0XFD, 0X7F, 0XFF, 0X7F, 0XFF, 0XFC, 0XB7, + 0X6F, 0XEF, 0XFB, 0XFF, 0XFF, 0XFD, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X00, + 0X7F, 0X76, 0X96, 0XBF, 0XFF, 0XFF, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XAA, 0XA8, + 0X2A, 0XAA, 0X00, 0X00, 0X00, 0X15, 0X55, 0X05, 0X55, 0X40, 0X00, 0X00, 0XAA, 0XA8, 0X2A, 0XAA, + 0X00, 0X00, 0X00, 0X55, 0X54, 0X15, 0X55, 0X00, 0X00, 0X00, 0X2A, 0XAA, 0X0A, 0XAA, 0X80, 0X00, + 0X00, 0X55, 0X54, 0X15, 0X55, 0X00, 0X00, 0X0A, 0XAA, 0X82, 0XAA, 0XA0, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0XFF, 0XFF, 0XFB, 0XBF, 0XEF, 0XEE, 0XFF, 0XF1, 0XEF, 0XEF, 0XEE, 0XDF, 0XEE, + 0XFB, 0XFF, 0XFF, 0X5A, 0X5F, 0XDB, 0XEE, 0XEF, 0XFF, 0XFF, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XCC, 0XCF, 0XC0, 0X00, 0X00, 0XFF, 0XF9, 0X59, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X02, 0XAA, 0XAA, 0XAA, 0XAA, 0X80, 0X00, 0X00, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, 0X02, + 0XAA, 0XAA, 0XAA, 0XAA, 0X80, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X40, 0X00, 0X00, 0XAA, 0XAA, + 0XAA, 0XAA, 0XA0, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X40, 0X00, 0X2A, 0XAA, 0XAA, 0XAA, 0XA8, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XD9, 0XFB, 0XEE, 0XFF, 0XFF, 0XDE, 0XFF, 0XD7, + 0XFE, 0XF5, 0X7E, 0X5F, 0XE7, 0XBF, 0XFD, 0XB7, 0XDF, 0XEF, 0XEF, 0XBF, 0XFF, 0XFF, 0XBF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XF3, 0XFF, 0X00, 0X00, 0X00, 0X00, 0XFF, 0XE7, 0X9F, 0XFF, 0XFF, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X0A, 0XAA, 0XAA, 0XAA, 0XAA, 0XA0, 0X00, 0X01, 0X55, 0X55, 0X55, + 0X55, 0X54, 0X00, 0X0A, 0XAA, 0XAA, 0XAA, 0XAA, 0XA0, 0X00, 0X05, 0X55, 0X55, 0X55, 0X55, 0X50, + 0X00, 0X02, 0XAA, 0XAA, 0XAA, 0XAA, 0XA8, 0X00, 0X05, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, 0XAA, + 0XAA, 0XAA, 0XAA, 0XAA, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0X65, 0XFF, 0XFF, + 0XFF, 0XF7, 0XBB, 0XF7, 0XFF, 0XFF, 0X7F, 0XD7, 0XFF, 0X9F, 0XFF, 0X58, 0X9F, 0XFB, 0XEB, 0XEF, + 0XFF, 0XFF, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XF7, 0X30, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X01, 0XFF, + 0XE6, 0X6F, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0A, 0XAA, 0XAA, 0XAA, 0XAA, 0XA8, 0X00, + 0X01, 0X55, 0X55, 0X55, 0X55, 0X55, 0X00, 0X0A, 0XAA, 0XAA, 0XAA, 0XAA, 0XA8, 0X00, 0X05, 0X55, + 0X55, 0X55, 0X55, 0X54, 0X00, 0X02, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X00, 0X05, 0X55, 0X55, 0X55, + 0X55, 0X54, 0X00, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X3F, 0XFF, 0XEF, 0XEF, 0XBF, 0XFF, 0XFF, 0XF6, 0XFD, 0XBE, 0XAF, 0XFB, 0XEF, 0XFB, 0XFC, 0XDD, + 0XDF, 0XDB, 0XEF, 0XBF, 0XFF, 0XFF, 0X9F, 0XBF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X3C, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0A, 0XAA, 0XAA, + 0XAA, 0XAA, 0XA8, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X55, 0X00, 0X0A, 0XAA, 0XAA, 0XAA, 0XAA, + 0XA8, 0X00, 0X05, 0X55, 0X55, 0X55, 0X55, 0X54, 0X00, 0X02, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X00, + 0X05, 0X55, 0X55, 0X55, 0X55, 0X54, 0X00, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, 0X80, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0XFE, 0XF7, 0XFF, 0XFB, 0XEF, + 0XFF, 0XF9, 0XFC, 0X67, 0X9F, 0XF6, 0XEB, 0XBF, 0XFF, 0XFF, 0XE7, 0XB7, 0XFF, 0XFF, 0XFF, 0XEF, + 0X0F, 0XCF, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X0A, 0XAA, 0XAA, 0XAA, 0XAA, 0XA8, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X55, 0X00, 0X0A, + 0XAA, 0XAA, 0XAA, 0XAA, 0XA8, 0X00, 0X05, 0X55, 0X55, 0X55, 0X55, 0X54, 0X00, 0X02, 0XAA, 0XAA, + 0XAA, 0XAA, 0XAA, 0X00, 0X05, 0X55, 0X55, 0X55, 0X55, 0X54, 0X00, 0XAA, 0XAA, 0XAA, 0XAA, 0XAA, + 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0XFF, 0XFF, 0XFF, 0XEF, 0XFF, + 0XE7, 0XFF, 0XF7, 0XFF, 0XFF, 0XBF, 0XBE, 0XDB, 0X7F, 0XEB, 0XEE, 0XFE, 0XFF, 0XFF, 0XDA, 0X69, + 0XEF, 0X7B, 0XFF, 0XFC, 0XF3, 0X3C, 0X01, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X02, 0XAA, 0XAA, 0XAA, 0XAA, 0XA0, 0X00, 0X00, 0X55, 0X55, 0X55, + 0X55, 0X54, 0X00, 0X02, 0XAA, 0XAA, 0XAA, 0XAA, 0XA0, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X50, + 0X00, 0X00, 0XAA, 0XAA, 0XAA, 0XAA, 0XA8, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, 0X2A, + 0XAA, 0XAA, 0XAA, 0XAA, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0B, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFA, 0XFF, 0XFF, 0XEF, 0XBA, 0X6E, 0XFC, 0X76, 0X5F, 0XF7, 0XEE, 0XFE, + 0XFF, 0XFF, 0XF5, 0X99, 0XDB, 0X99, 0XFF, 0XCC, 0X33, 0X3F, 0X33, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X02, 0XAA, 0XAA, 0XAA, 0XAA, 0XA0, 0X00, + 0X00, 0X55, 0X55, 0X55, 0X55, 0X54, 0X00, 0X02, 0XAA, 0XAA, 0XAA, 0XAA, 0XA0, 0X00, 0X01, 0X55, + 0X55, 0X55, 0X55, 0X50, 0X00, 0X00, 0XAA, 0XAA, 0XAA, 0XAA, 0XA8, 0X00, 0X01, 0X55, 0X55, 0X55, + 0X55, 0X50, 0X00, 0X2A, 0XAA, 0XAA, 0XAA, 0XAA, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0XFF, 0XFF, 0XBF, 0XFF, 0XBB, 0XFF, 0XFF, 0XFF, 0XFF, 0XF7, 0XFF, 0XFF, 0XFE, 0XD9, + 0XDF, 0XFB, 0XEA, 0XFB, 0XFF, 0XFF, 0XD9, 0X99, 0XEF, 0X66, 0X7F, 0XFF, 0XFF, 0XF6, 0XB0, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X02, 0XAA, 0XAA, + 0XAA, 0XAA, 0XA0, 0X00, 0X00, 0X55, 0X55, 0X55, 0X55, 0X54, 0X00, 0X02, 0XAA, 0XAA, 0XAA, 0XAA, + 0XA0, 0X00, 0X01, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, 0X00, 0XAA, 0XAA, 0XAA, 0XAA, 0XA8, 0X00, + 0X01, 0X55, 0X55, 0X55, 0X55, 0X50, 0X00, 0X2A, 0XAA, 0XAA, 0XAA, 0XAA, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0XFE, 0XBA, 0XFF, 0XFF, 0XFE, 0XEB, 0XBF, 0XFA, + 0XF9, 0XFF, 0XF8, 0X76, 0X9F, 0XF7, 0XFA, 0XFB, 0XBF, 0XFF, 0XDD, 0X9B, 0XE7, 0X99, 0XBF, 0XFF, + 0XFD, 0X0D, 0X30, 0X60, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0XAA, 0XAA, 0XAA, 0XAA, 0X80, 0X00, 0X00, 0X15, 0X55, 0X55, 0X55, 0X50, 0X00, 0X00, + 0XAA, 0XAA, 0XAA, 0XAA, 0X80, 0X00, 0X00, 0X55, 0X55, 0X55, 0X55, 0X40, 0X00, 0X00, 0X2A, 0XAA, + 0XAA, 0XAA, 0XA0, 0X00, 0X00, 0X55, 0X55, 0X55, 0X55, 0X40, 0X00, 0X0A, 0XAA, 0XAA, 0XAA, 0XA8, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFF, 0XFD, 0XFF, 0XBF, + 0XFE, 0XFD, 0XFF, 0XEF, 0XFF, 0XFE, 0XFD, 0XDB, 0X5F, 0XFA, 0XEB, 0XFB, 0XFF, 0XFF, 0XD9, 0X9B, + 0XDA, 0XD9, 0X7F, 0XFF, 0XFF, 0XC8, 0XF1, 0XDC, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XAA, 0XAA, 0XAA, 0XAA, 0X80, 0X00, 0X00, 0X15, 0X55, 0X55, + 0X55, 0X50, 0X00, 0X00, 0XAA, 0XAA, 0XAA, 0XAA, 0X80, 0X00, 0X00, 0X55, 0X55, 0X55, 0X55, 0X40, + 0X00, 0X00, 0X2A, 0XAA, 0XAA, 0XAA, 0XA0, 0X00, 0X00, 0X55, 0X55, 0X55, 0X55, 0X40, 0X00, 0X0A, + 0XAA, 0XAA, 0XAA, 0XA8, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, + 0XFF, 0XFF, 0XEB, 0XEF, 0XEF, 0XFF, 0XFE, 0XFF, 0XFF, 0X97, 0XBC, 0X9D, 0X9B, 0XF9, 0XFB, 0XEA, + 0XEF, 0XFF, 0XF9, 0XD9, 0XE6, 0X66, 0X7F, 0XFF, 0XFF, 0XF4, 0XF0, 0X26, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X2A, 0XAA, 0XAA, 0XAA, 0X00, 0X00, + 0X00, 0X05, 0X55, 0X55, 0X55, 0X40, 0X00, 0X00, 0X2A, 0XAA, 0XAA, 0XAA, 0X00, 0X00, 0X00, 0X15, + 0X55, 0X55, 0X55, 0X00, 0X00, 0X00, 0X0A, 0XAA, 0XAA, 0XAA, 0X80, 0X00, 0X00, 0X15, 0X55, 0X55, + 0X55, 0X00, 0X00, 0X02, 0XAA, 0XAA, 0XAA, 0XA0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X3F, 0XC3, 0XFF, 0XFF, 0XBF, 0XFF, 0XE7, 0XFF, 0XFF, 0XFE, 0XFE, 0X7E, 0X77, + 0X6F, 0XF6, 0XEB, 0XEF, 0XBF, 0XFF, 0XF3, 0X66, 0XBE, 0XE6, 0XFF, 0XFF, 0X7F, 0X13, 0XC0, 0X0D, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0A, 0XAA, + 0XAA, 0XA8, 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X55, 0X00, 0X00, 0X00, 0X0A, 0XAA, 0XAA, 0XA8, + 0X00, 0X00, 0X00, 0X05, 0X55, 0X55, 0X54, 0X00, 0X00, 0X00, 0X02, 0XAA, 0XAA, 0XAA, 0X00, 0X00, + 0X00, 0X05, 0X55, 0X55, 0X54, 0X00, 0X00, 0X00, 0XAA, 0XAA, 0XAA, 0X80, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3E, 0X00, 0XFF, 0XEF, 0XFF, 0XFD, 0X7F, 0XFF, 0XFE, + 0XFF, 0XFF, 0X6F, 0X9C, 0X97, 0XF9, 0XFB, 0XEF, 0XBF, 0XFF, 0XF2, 0X67, 0X99, 0X66, 0X7B, 0XFF, + 0XBF, 0XF0, 0XF3, 0X01, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X02, 0XAA, 0XAA, 0XA0, 0X00, 0X00, 0X00, 0X00, 0X55, 0X55, 0X54, 0X00, 0X00, 0X00, + 0X02, 0XAA, 0XAA, 0XA0, 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, 0X00, 0XAA, + 0XAA, 0XA8, 0X00, 0X00, 0X00, 0X01, 0X55, 0X55, 0X50, 0X00, 0X00, 0X00, 0X2A, 0XAA, 0XAA, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XFC, 0X00, 0X3F, 0XFF, 0XFE, + 0XFB, 0XFE, 0XEF, 0XE5, 0XFB, 0XFE, 0XED, 0X7C, 0XDB, 0XFA, 0XEF, 0XEE, 0XEE, 0XFF, 0XF9, 0XAE, + 0X76, 0XB6, 0XB7, 0XFF, 0X7F, 0XC3, 0XC3, 0XF3, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XAA, 0XAA, 0X80, 0X00, 0X00, 0X00, 0X00, 0X15, 0X55, + 0X50, 0X00, 0X00, 0X00, 0X00, 0XAA, 0XAA, 0X80, 0X00, 0X00, 0X00, 0X00, 0X55, 0X55, 0X40, 0X00, + 0X00, 0X00, 0X00, 0X2A, 0XAA, 0XA0, 0X00, 0X00, 0X00, 0X00, 0X55, 0X55, 0X40, 0X00, 0X00, 0X00, + 0X0A, 0XAA, 0XA8, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X03, 0XFE, 0XEF, 0XBF, 0XD6, 0XFF, 0XFF, 0XFF, 0XFD, 0XDB, 0X5F, 0X67, 0XF9, 0XFF, 0XEF, + 0XBB, 0XFF, 0XF7, 0X56, 0XBE, 0X69, 0X77, 0XFF, 0XB3, 0XCF, 0X22, 0XF8, 0X3D, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X2A, 0XAA, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X05, 0X55, 0X40, 0X00, 0X00, 0X00, 0X00, 0X2A, 0XAA, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X15, 0X55, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0A, 0XAA, 0X80, 0X00, 0X00, 0X00, 0X00, 0X15, 0X55, + 0X00, 0X00, 0X00, 0X00, 0X02, 0XAA, 0XA0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XBF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XBE, 0X6C, + 0X9B, 0XF9, 0XFF, 0XBE, 0XBB, 0XFF, 0XF8, 0XA9, 0XE6, 0XB6, 0XB7, 0XFF, 0X77, 0X0F, 0X32, 0XFF, + 0X23, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X02, + 0XA8, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X55, 0X00, 0X00, 0X00, 0X00, 0X00, 0X02, 0XA8, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X01, 0X54, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XAA, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X01, 0X54, 0X00, 0X00, 0X00, 0X00, 0X00, 0X2A, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XF6, 0XFF, 0XBF, 0XFE, 0XFF, + 0XFF, 0XFF, 0XFD, 0X9F, 0X77, 0XFE, 0XFF, 0XBB, 0XBB, 0XBF, 0XFF, 0X5A, 0X6D, 0X99, 0XB7, 0XFF, + 0X3C, 0X3C, 0XC2, 0X66, 0X7F, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0XA0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X14, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0XA0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X50, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X28, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X50, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0A, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XFF, + 0XEF, 0XBF, 0XFB, 0XFF, 0XDB, 0XEF, 0XFB, 0XDD, 0X9B, 0XF9, 0XFF, 0XFA, 0XEE, 0XFE, 0XFC, 0XE6, + 0XE6, 0X69, 0XB9, 0XFF, 0XB0, 0XFC, 0X4A, 0XF7, 0X7F, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X0F, 0XFF, 0XFF, 0XFF, 0XDB, 0X67, 0XBF, 0XBA, 0X9F, 0X97, 0XFE, 0XBF, 0XFB, + 0XBB, 0XBF, 0XFF, 0X59, 0X9F, 0XB6, 0X76, 0XFF, 0X3F, 0XFC, 0XCA, 0X36, 0XFB, 0XF0, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0X7F, 0XBF, 0XFF, 0XFF, 0X7B, 0XF7, 0X3D, + 0X67, 0XF9, 0XFF, 0XFB, 0XBB, 0XBF, 0XFC, 0XA9, 0XB9, 0X9A, 0X79, 0XFF, 0X3B, 0XF1, 0XCE, 0XCF, + 0X41, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XF6, 0X7F, 0X9F, 0X67, 0XFE, 0XBF, 0XEB, 0XBB, 0XBF, 0XFD, 0XDD, 0X9B, 0X99, 0XB9, 0XFF, + 0XDC, 0XF1, 0X2A, 0XFE, 0XF4, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X02, 0XFF, 0XFF, 0XFF, 0XEF, 0XFB, 0XEE, 0X36, 0X9B, 0XFD, 0XFF, 0XEE, 0XBB, 0XBF, 0XFE, 0X26, + 0XB9, 0X99, 0XB6, 0XFF, 0X3F, 0XC7, 0X3A, 0XB4, 0XFD, 0XB0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0XFF, 0XFF, 0XFF, 0XFE, 0X7E, 0XFE, 0XDD, 0XD7, 0XFA, 0XFF, 0XEB, + 0XBA, 0XEF, 0XFF, 0XD9, 0X9E, 0X69, 0XB9, 0XFF, 0XCF, 0XCC, 0XAD, 0XB9, 0XBC, 0XF0, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XDF, + 0X2F, 0XFD, 0XFF, 0XBE, 0XEE, 0XEF, 0XFF, 0X3A, 0XEE, 0XD6, 0XF6, 0XFF, 0XCF, 0X20, 0XAE, 0XBF, + 0XDC, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XDD, 0XD7, 0XFA, 0XFF, 0XAE, 0XEE, 0XBF, 0XFF, 0XD6, 0X77, 0XA9, 0X79, 0XFF, + 0XCF, 0X33, 0X9A, 0X9F, 0XED, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XE7, 0X1F, 0XFD, 0XEF, 0XBB, 0XAA, 0XFB, 0XFF, 0X2B, + 0XAE, 0X79, 0XB6, 0XFF, 0XCD, 0X03, 0X8B, 0X83, 0XBF, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XFF, 0XFF, 0XFF, 0XBF, 0XFF, 0XF7, 0XD6, 0XFE, 0XFF, 0XAB, + 0XBE, 0XEF, 0XFF, 0XD9, 0XDB, 0XA6, 0XB9, 0XFF, 0XC7, 0X3E, 0XEA, 0XBC, 0XFF, 0XC0, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFF, 0XFF, 0XFF, 0XFF, 0XC7, + 0X26, 0XFD, 0XBF, 0XBB, 0XAB, 0XBB, 0XFF, 0X76, 0XAD, 0X9B, 0X79, 0XFE, 0XCF, 0XD3, 0XA7, 0XBF, + 0X77, 0X40, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XF7, 0XDD, 0XFF, 0XAF, 0XAE, 0XEE, 0XEF, 0XFF, 0X29, 0XDB, 0XB9, 0XB6, 0XFF, + 0XC3, 0XF2, 0XEB, 0X6F, 0XF3, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X0F, 0XFF, 0XFF, 0XFF, 0XFF, 0XDB, 0X26, 0XFE, 0X7F, 0XAB, 0XAE, 0XBB, 0XFF, 0XCB, + 0XAD, 0X99, 0XB9, 0XFE, 0XF3, 0XCE, 0XBA, 0XAF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0XFF, 0XFF, 0XFF, 0XE3, 0X65, 0XFF, 0XBF, 0XEB, + 0XBB, 0XBF, 0XFF, 0X25, 0XDA, 0X9B, 0X76, 0XEF, 0XD3, 0XF2, 0XE6, 0XAD, 0XDF, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XF7, + 0XD9, 0XFE, 0X7F, 0XEE, 0XBB, 0XBB, 0XFF, 0X36, 0XAD, 0XB6, 0XB9, 0XFB, 0XE3, 0XC3, 0XAA, 0XDC, + 0XBE, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFB, 0X65, 0XFE, 0XBF, 0XEA, 0XEB, 0XAF, 0XFF, 0XD9, 0X9A, 0X69, 0XB6, 0XEE, + 0XF2, 0XF2, 0XEE, 0XAC, 0X31, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0XFF, 0XFF, 0XFF, 0XFF, 0XF7, 0X99, 0XFF, 0X7F, 0XEB, 0XAE, 0XBF, 0XFF, 0X36, + 0XED, 0X97, 0X79, 0XFB, 0XF0, 0XC3, 0XAA, 0XAF, 0X3C, 0X90, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XFF, 0XFF, 0XFF, 0XFF, 0XFB, 0X76, 0XFF, 0XAB, 0XEA, + 0XEE, 0XEB, 0XFF, 0XDD, 0X9A, 0XE6, 0XE6, 0XFB, 0XBC, 0XF3, 0XBA, 0XAF, 0X3F, 0X30, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFF, 0XFF, 0XFF, 0XF3, + 0X65, 0XFE, 0X7F, 0XFA, 0XEE, 0XEF, 0XFF, 0X2A, 0XB6, 0X6E, 0X67, 0XEF, 0XBC, 0XC3, 0XAA, 0XEF, + 0XBF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, + 0XFF, 0XFF, 0XFF, 0XF6, 0X79, 0XFF, 0X9F, 0XFA, 0XEB, 0XAF, 0XFF, 0XD7, 0X6B, 0XA5, 0XE8, 0XBA, + 0XFC, 0XF2, 0XBA, 0XAB, 0XFF, 0X5C, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X0F, 0XFF, 0XFF, 0XFF, 0XF9, 0XD6, 0X7E, 0X6F, 0XFB, 0XBE, 0XEF, 0XFF, 0X1A, + 0XB5, 0X9E, 0X59, 0XEF, 0XBC, 0XD3, 0XEA, 0XAB, 0X3D, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XF9, 0X79, 0XFF, 0XDF, 0XFB, + 0XAB, 0XAB, 0XEF, 0XDE, 0X5A, 0XDB, 0XA7, 0XBB, 0XBC, 0XF0, 0XBA, 0X6B, 0X7C, 0X79, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XFF, 0XFF, 0XFF, 0XF6, + 0XC6, 0X7F, 0XAF, 0XFA, 0XBE, 0XBF, 0XFD, 0XD9, 0XBD, 0XA7, 0X99, 0XEB, 0XEC, 0X93, 0XBA, 0XAB, + 0XBD, 0XF0, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X0F, 0XFF, 0XFF, 0XFD, 0XF6, 0X7E, 0XDB, 0XFB, 0XEB, 0XBB, 0XEF, 0X26, 0X9B, 0X67, 0X66, 0XEE, + 0XBC, 0X3A, 0XEB, 0XAB, 0XDF, 0X1C, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFF, 0XFE, 0XC9, 0XBF, 0XEF, 0XFA, 0XEE, 0XFB, 0XFD, 0XB6, + 0X6D, 0XB9, 0XB6, 0XEB, 0XEF, 0X3A, 0XEE, 0X9B, 0XFC, 0X8C, 0XD0, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFD, 0XD9, 0X7E, 0XDB, 0XFA, + 0XEE, 0XBE, 0XEF, 0X6E, 0X66, 0X7D, 0X99, 0XAE, 0XBF, 0X3A, 0XAA, 0XAB, 0X0D, 0XCC, 0X90, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XFF, 0XFE, + 0XE6, 0X7F, 0X6B, 0XFB, 0XBB, 0XBB, 0XFC, 0X95, 0XBB, 0X35, 0XA5, 0XEE, 0XEF, 0X3E, 0XEE, 0X9B, + 0XFC, 0X84, 0X30, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X0F, 0XFC, 0XDD, 0X7E, 0XE7, 0XFA, 0XEE, 0XEF, 0XEC, 0XB9, 0X9E, 0XD9, 0X9F, 0XBA, + 0XBB, 0X3A, 0XAB, 0X8A, 0XFD, 0XC7, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XFD, 0XD9, 0XBD, 0XDB, 0XFA, 0XAB, 0XAE, 0XFC, 0XC6, + 0X75, 0X2D, 0X9A, 0XAE, 0XEB, 0X1E, 0XBA, 0XAA, 0X7C, 0X48, 0XE4, 0X00, 0X00, 0X00, 0X00, 0X00, +}; +#endif diff --git a/src/bitmaps/WS_Bitmaps4c168x400.h b/src/bitmaps/WS_Bitmaps4c168x400.h new file mode 100644 index 00000000..a5a84708 --- /dev/null +++ b/src/bitmaps/WS_Bitmaps4c168x400.h @@ -0,0 +1,1089 @@ +/** + @filename : imagedata.cpp + @brief : data file for epd demo + + Copyright (C) Waveshare 2022/7/22 + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documnetation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +#ifndef _WS_Bitmaps4c168x400_H_ +#define _WS_Bitmaps4c168x400_H_ + +#if defined(ESP8266) || defined(ESP32) +#include +#else +#include +#endif + + +const unsigned char WS_Bitmap4c168x400[] PROGMEM = { + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x15, 0x55, 0x57, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x54, 0x00, 0x00, 0x00, 0x00, 0x15, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x15, + 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 0x15, 0x50, 0x15, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xAA, 0xAB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x5F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x50, 0x15, 0x50, 0x15, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 0x15, 0x50, 0x15, 0x55, 0x57, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, 0xAF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x40, 0x15, 0x50, 0x15, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, + 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x5F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x15, + 0x50, 0x15, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xD7, 0xFF, + 0xFF, 0xFF, 0xFF, 0x55, 0x55, 0x55, 0x55, 0x40, 0x00, 0x05, 0x50, 0x15, 0x55, 0x57, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, 0xAA, 0xAB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, + 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xF5, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0x55, 0x55, 0x55, + 0x55, 0x00, 0x00, 0x00, 0x00, 0x15, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, 0xAA, + 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x5F, 0xFF, 0xFF, 0xFF, + 0xFD, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0x55, 0x55, 0x55, 0x54, 0x00, 0x14, 0x00, 0x00, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, 0xAA, 0xAA, 0xAF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x7F, 0xFF, 0xFF, 0xFF, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, + 0xFF, 0x55, 0x55, 0x55, 0x54, 0x01, 0x55, 0x00, 0x01, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, + 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0x55, 0x55, 0x55, 0x54, 0x15, + 0x55, 0x50, 0x05, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAB, 0xAA, 0xAA, 0xAA, + 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x57, 0xFF, 0xFF, 0xF5, 0x55, 0x55, 0x55, + 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAB, 0xEA, 0xAA, 0xAA, 0xAB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xD5, 0x55, 0x57, 0xFF, 0xFF, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, + 0xAB, 0xFE, 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x5F, 0xFF, 0xFF, + 0xD5, 0x55, 0x55, 0x55, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x55, 0x55, 0x55, 0x55, 0x50, 0x00, 0x05, + 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAB, 0xFF, 0xEA, 0xAA, 0xAA, 0xAF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x7F, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x7F, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x55, 0x55, 0x55, 0x55, 0x40, 0x00, 0x01, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xAA, 0xAB, 0xFF, 0xFA, 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, + 0x55, 0x7F, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x5F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x55, 0x55, 0x55, + 0x55, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAB, 0xFF, + 0xFF, 0xAA, 0xAA, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0xFF, 0xFF, 0xFF, 0xFD, 0x55, + 0x55, 0x55, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x55, 0x55, 0x55, 0x55, 0x00, 0x40, 0x40, 0x15, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAB, 0xFF, 0xFF, 0xEA, 0xAA, 0xAA, 0xAB, 0xFF, + 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0xFF, 0xFF, 0xFF, 0xFF, 0xF5, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, + 0xFF, 0x55, 0x55, 0x55, 0x54, 0x01, 0x40, 0x50, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xAA, 0xAB, 0xFF, 0xFF, 0xFE, 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0x55, 0x55, 0x55, 0x54, 0x05, + 0x40, 0x50, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAB, 0xFF, 0xFF, 0xFF, + 0xEA, 0xAA, 0xAA, 0xAF, 0xFF, 0xFF, 0xFF, 0xD5, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, + 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0x55, 0x55, 0x55, 0x54, 0x05, 0x40, 0x50, 0x15, 0x55, 0x55, 0x57, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAB, 0xFF, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, + 0xFF, 0xD5, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0x55, + 0x55, 0x55, 0x54, 0x05, 0x40, 0x50, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xD5, 0x57, 0xFF, 0xFF, 0xFF, + 0xFF, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0x55, 0x55, 0x55, 0x54, 0x05, 0x40, 0x00, + 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xD5, 0x5F, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x7F, 0xFF, + 0xFF, 0xFF, 0xFF, 0x55, 0x55, 0x55, 0x55, 0x01, 0x40, 0x00, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, + 0xFA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xD5, + 0x5F, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x5F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x55, 0x55, 0x55, + 0x55, 0x05, 0x40, 0x01, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xD5, 0x5F, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, + 0x55, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xFF, 0xFF, 0xFF, 0xD5, 0x5F, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xD5, 0x5F, 0xFF, + 0xFF, 0xFF, 0xF5, 0x55, 0x55, 0x55, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x41, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xD5, 0x5F, 0xFF, 0xFF, 0xFF, 0xFF, 0x55, 0x55, 0x55, + 0x5F, 0xFF, 0xFF, 0xFF, 0xFF, 0x55, 0x55, 0x55, 0x55, 0x50, 0x00, 0x05, 0x55, 0x55, 0x55, 0x57, + 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, + 0xFF, 0xD5, 0x5F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0x55, 0x55, 0x55, 0xDB, 0xFF, 0xFF, 0xFF, 0x55, + 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xD5, 0x5F, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0xFF, 0xFF, 0xFF, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, + 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x5F, 0xFF, 0xFF, 0xFF, 0xFF, 0x55, 0x5F, 0x55, 0x55, 0x55, + 0x7F, 0xFF, 0xFF, 0x55, 0x55, 0x55, 0x54, 0x00, 0x55, 0x40, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xAA, 0xAB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, + 0x5F, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0xF5, 0x55, 0x55, 0x5F, 0xFF, 0xFF, 0x55, 0x55, 0x55, + 0x54, 0x01, 0x55, 0x50, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAB, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x5F, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, + 0x55, 0xFF, 0xD5, 0x55, 0x57, 0xFF, 0xFD, 0x55, 0x55, 0x55, 0x54, 0x05, 0x55, 0x50, 0x15, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xD5, 0x5F, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x7F, 0xFF, 0xFD, 0x55, 0x55, 0xFF, + 0xFD, 0x55, 0x55, 0x55, 0x54, 0x05, 0x55, 0x50, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xAA, 0xAB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x5F, 0xFF, + 0xFF, 0xFF, 0xD5, 0x55, 0x5F, 0xFF, 0xFD, 0x56, 0x65, 0xFF, 0xFD, 0x55, 0x55, 0x55, 0x55, 0x01, + 0x55, 0x50, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAB, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x5F, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x7F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xF5, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x05, 0x55, 0x57, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xD5, 0x5F, 0xFF, 0xFF, 0xFF, 0xF5, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xF5, 0x55, + 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x5F, 0xFF, 0xFF, 0xFF, + 0xFF, 0x55, 0x55, 0x55, 0x7F, 0xFF, 0xFF, 0xFF, 0xF5, 0x55, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x5F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF5, 0x55, 0x55, 0x57, 0xFF, + 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x57, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, + 0x5F, 0xFF, 0x55, 0x55, 0xFF, 0xFF, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x5F, 0xFF, 0xD5, 0x55, 0x7F, 0xFF, + 0xF5, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xD5, 0x5F, 0xFF, 0xF5, 0x55, 0x57, 0xFF, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFD, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x5F, 0xFF, + 0xF9, 0x55, 0x55, 0x75, 0x55, 0x55, 0x5F, 0xFF, 0xFF, 0xFD, 0x55, 0x55, 0x55, 0x54, 0x15, 0x41, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFE, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xAB, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x5F, 0xFF, 0xFD, 0x55, 0x55, 0x55, 0x55, 0x55, + 0xFF, 0xFF, 0xFF, 0xF5, 0x55, 0x55, 0x55, 0x54, 0x15, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, + 0xFF, 0xFF, 0xFF, 0xEA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xBF, 0xFF, 0xFF, + 0xFF, 0xD5, 0x5F, 0xFF, 0xFF, 0x55, 0x55, 0x55, 0x55, 0x5F, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, + 0x55, 0x54, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAF, 0xFF, 0xFF, 0xFF, 0xD5, 0x5F, 0xFF, 0xFF, 0xFF, + 0x55, 0x55, 0x55, 0xFF, 0xFF, 0xFF, 0xFF, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAB, 0xFF, 0xFF, 0xFF, 0xD5, 0x5F, 0xFF, 0xFF, 0xFF, 0xF5, 0x55, 0x5F, 0xFF, 0xFF, 0xFF, + 0xFD, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 0x01, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, + 0xFE, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAB, 0xFF, 0xFF, 0xFF, 0xD5, + 0x5F, 0xFF, 0xFF, 0xFF, 0xFF, 0x55, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xD5, 0x5F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x15, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAA, + 0xFF, 0xFF, 0xFF, 0xD5, 0x5F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF5, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x50, 0x15, 0x55, 0x55, 0x00, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFA, 0xAA, + 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xD5, 0x5F, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 0x15, 0x55, + 0x50, 0x00, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xEA, 0xAA, 0xAF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xAA, 0xAA, 0xBF, 0xFF, 0xFF, 0xD5, 0x5F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 0x15, 0x54, 0x00, 0x00, 0x55, 0x55, 0x55, 0x57, + 0xFF, 0xFF, 0xEA, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEA, 0xAA, 0xBF, 0xFF, + 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x54, 0x01, 0x00, 0x00, 0x15, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xEA, 0xAA, 0xBF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEA, 0xAA, 0xBF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x00, 0x05, 0x55, + 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xEA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFA, 0xAA, 0xBF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, + 0xEA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0xAA, 0xBF, 0xFF, 0xFF, 0xD5, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x50, 0x00, 0x01, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xEA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0xAA, 0xBF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x40, 0x00, 0x05, 0x55, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xEA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0xAA, + 0xBF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xEA, 0xAA, + 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEA, 0xAA, 0xBF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x54, 0x00, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xEA, 0xAA, 0xAF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xAA, 0xAA, 0xBF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x40, 0x15, 0x55, 0x55, 0x57, + 0xFF, 0xFF, 0xEA, 0xAA, 0xAB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xAA, 0xAA, 0xBF, 0xFF, + 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x55, + 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 0x00, 0x05, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, + 0xFE, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAB, 0xFF, 0xFF, 0xFF, 0xD5, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x40, 0x00, 0x00, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFE, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAB, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x55, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAF, + 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x01, 0x40, 0x40, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xEA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x05, + 0x40, 0x50, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x51, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x05, 0x40, 0x54, 0x15, 0x55, 0x55, 0x57, + 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x40, 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x15, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x54, 0x05, 0x40, 0x50, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x00, + 0x05, 0x55, 0x55, 0x55, 0x55, 0x54, 0x05, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x05, 0x40, 0x50, + 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xBF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x00, 0x01, 0x55, 0x55, 0x55, 0x55, 0x50, + 0x01, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x05, 0x40, 0x00, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, + 0x55, 0x55, 0x54, 0x00, 0x05, 0x55, 0x55, 0x55, 0x55, 0x00, 0x01, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x01, 0x40, 0x00, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x05, 0x55, + 0x55, 0x55, 0x55, 0x40, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x40, 0x05, 0x55, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, 0x50, 0x00, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, + 0x54, 0x00, 0x15, 0x55, 0x40, 0x05, 0x55, 0x50, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x50, 0x00, 0x55, 0x55, 0x40, 0x05, + 0x55, 0x54, 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xD5, 0x55, 0x55, 0x50, 0x00, 0x55, 0x55, 0x40, 0x05, 0x55, 0x54, 0x00, 0x15, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x50, 0x00, + 0x55, 0x55, 0x40, 0x01, 0x55, 0x54, 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x50, 0x00, 0x55, 0x55, 0x40, 0x01, 0x55, 0x54, + 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x57, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, + 0x55, 0x55, 0x50, 0x00, 0x55, 0x55, 0x40, 0x00, 0x55, 0x54, 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, + 0x54, 0x01, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x50, 0x00, 0x15, 0x55, + 0x00, 0x00, 0x55, 0x50, 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, 0x54, 0x05, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFE, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAB, 0xFF, + 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x05, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xEA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, + 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x40, 0x00, 0x00, 0x00, 0x01, 0x55, 0x57, + 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAB, 0xFF, 0xFF, + 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x57, 0xFF, 0xFF, 0xFE, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAB, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x00, + 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x55, 0x57, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x40, 0x00, 0x00, 0x05, 0x50, 0x00, 0x00, + 0x05, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x05, 0x55, 0x57, 0xFF, 0xFF, + 0xFA, 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xD5, + 0x55, 0x55, 0x55, 0x50, 0x00, 0x00, 0x05, 0x54, 0x00, 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x54, 0x05, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x54, 0x00, 0x00, + 0x55, 0x55, 0x40, 0x05, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xEA, 0xAA, 0xAF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, + 0xBF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x40, 0x05, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xEA, 0xAA, + 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEA, 0xAA, 0xBF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, + 0x00, 0x01, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xEA, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xEA, 0xAA, 0xBF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x40, 0x00, 0x00, 0x55, 0x55, 0x55, 0x57, + 0xFF, 0xFF, 0xEA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0xAA, 0xBF, 0xFF, + 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xEA, 0xAA, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0xAA, 0xBF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x01, 0x55, 0x40, + 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xEA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFA, 0xAA, 0xBF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x05, 0x55, 0x50, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, + 0xEA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0xAA, 0xBF, 0xFF, 0xFF, 0xD5, + 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x50, 0x15, 0x55, 0x55, 0x55, 0x55, + 0x54, 0x05, 0x55, 0x50, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xEA, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xEA, 0xAA, 0xBF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x55, 0x40, 0x01, 0x55, 0x55, 0x55, 0x55, 0x54, 0x05, 0x55, 0x50, 0x15, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xEA, 0xAA, 0xAF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, + 0xBF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x40, 0x01, + 0x55, 0x55, 0x55, 0x55, 0x54, 0x01, 0x55, 0x50, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xEA, 0xAA, + 0xAB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xAA, 0xAA, 0xBF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, + 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, + 0x14, 0x00, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x55, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x57, + 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, + 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x40, 0x00, 0x01, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFE, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAB, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x40, 0x01, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x05, + 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFE, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAB, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, + 0x40, 0x01, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, + 0xFF, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAF, 0xFF, 0xFF, 0xFF, 0xD5, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x15, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xEA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x15, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xFF, + 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, + 0x00, 0x00, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x00, 0x05, 0x55, 0x55, 0x55, 0x57, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x54, 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x15, 0x55, + 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x00, 0x15, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, + 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x54, 0x00, 0x00, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x15, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, + 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, + 0x00, 0x00, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, + 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x00, 0x15, 0x55, 0x55, 0x55, 0x57, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEA, 0xFF, 0xFF, 0xFF, 0xFF, 0xAB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x54, 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, + 0xBF, 0xFF, 0xFF, 0xFE, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x40, 0x05, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xAA, 0xAF, 0xFF, 0xFF, 0xFA, 0xAA, 0xBF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x40, 0x01, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x00, 0x15, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFA, 0xAA, 0xAB, 0xFF, 0xFF, 0xEA, 0xAA, 0xAF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x00, 0x00, 0x00, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xEA, 0xAA, 0xAA, 0xFF, + 0xFF, 0xAA, 0xAA, 0xAB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x50, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x15, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xBF, 0xFE, 0xAA, 0xAA, 0xAF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 0x00, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFE, 0xAA, 0xAA, 0xAF, 0xFA, 0xAA, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, 0xAB, 0xEA, 0xAA, + 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, + 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x50, 0x15, 0x01, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x05, 0x00, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xAA, 0xAA, 0xAA, 0xAA, 0xBF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, + 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x40, 0x01, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEA, 0xAA, + 0xAA, 0xAB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x05, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, + 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEA, 0xAA, 0xAA, 0xAB, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x05, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, + 0xAA, 0xAA, 0xAA, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x57, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xEA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x01, 0x55, 0x40, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, 0xAB, + 0xEA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x01, 0x55, 0x50, 0x15, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xAA, 0xAA, 0xAF, 0xFA, 0xAA, 0xAA, 0xBF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x01, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x54, 0x05, 0x55, 0x50, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFA, 0xAA, 0xAA, 0xBF, 0xFE, 0xAA, 0xAA, 0xAF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, + 0x55, 0x55, 0x40, 0x00, 0x00, 0x05, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x05, + 0x55, 0x50, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xEA, 0xAA, 0xAA, 0xFF, 0xFF, 0xAA, + 0xAA, 0xAB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x01, 0x55, 0x50, 0x15, 0x55, 0x55, 0x57, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0xAA, 0xAB, 0xFF, 0xFF, 0xEA, 0xAA, 0xAF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x50, 0x00, 0x00, 0x00, 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x00, 0x15, 0x00, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0xAA, + 0xAF, 0xFF, 0xFF, 0xFA, 0xAA, 0xAF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x40, + 0x00, 0x00, 0x00, 0x00, 0x05, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, + 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xAA, 0xBF, 0xFF, 0xFF, 0xFE, 0xAA, 0xBF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x40, 0x00, 0x00, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, + 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x54, 0x00, 0x05, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEB, 0xFF, 0xFF, + 0xFF, 0xFF, 0xEB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x00, 0x55, 0x54, 0x00, 0x00, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, + 0x54, 0x00, 0x05, 0x55, 0x55, 0x40, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x50, 0x00, 0x15, 0x55, 0x55, 0x50, + 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x40, 0x00, 0x00, 0x00, 0x01, 0x55, 0x57, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xD5, 0x55, 0x55, 0x50, 0x00, 0x55, 0x55, 0x55, 0x50, 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x50, 0x00, + 0x55, 0x55, 0x55, 0x54, 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x50, 0x00, 0x55, 0x55, 0x55, 0x54, 0x00, 0x15, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x01, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, + 0x55, 0x55, 0x50, 0x00, 0x55, 0x55, 0x55, 0x54, 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x54, 0x05, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFA, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x15, 0x55, + 0x55, 0x50, 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0xAA, 0xAF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x15, 0x55, 0x55, 0x50, 0x00, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0xAA, 0xAF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, + 0x54, 0x00, 0x05, 0x55, 0x55, 0x50, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, + 0x05, 0x50, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFE, 0xAA, 0xAF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x00, 0x55, 0x55, 0x55, 0x55, + 0x01, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x01, 0x40, 0x55, 0x55, 0x55, 0x57, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xAA, 0xAB, 0xFF, 0xFF, 0xFF, + 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x01, 0x55, 0x55, 0x55, 0x55, 0x41, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x54, 0x00, 0x01, 0x50, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xAA, 0xAB, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x05, 0x41, 0x50, + 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, + 0xAB, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x05, 0x40, 0x50, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x05, 0x50, 0x50, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x01, 0x50, 0x50, 0x15, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEA, 0xAA, 0xBF, + 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEA, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, + 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, + 0x00, 0x00, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x05, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x57, + 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAF, 0xFF, 0xFF, + 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x55, 0x55, + 0x55, 0x55, 0x54, 0x00, 0x00, 0x05, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x05, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, + 0xFA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAB, 0xFF, 0xFF, 0xFF, 0xD5, + 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x00, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAB, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 0x00, 0x01, 0x55, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAB, + 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x40, 0x05, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x40, 0x00, 0x00, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x40, 0x01, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, + 0x00, 0x00, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, + 0x01, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x55, 0x40, 0x15, 0x55, 0x55, 0x57, + 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, + 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x54, 0x01, 0x55, 0x50, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x50, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x05, 0x55, 0x50, + 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 0x00, 0x15, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x05, 0x55, 0x50, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x54, 0x01, 0x55, 0x50, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x01, 0x55, 0x50, 0x15, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x05, 0x55, 0x54, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, + 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x05, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x57, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFE, 0xAA, 0xAA, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, + 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x05, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x00, 0x00, 0x00, 0x00, 0x05, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x55, 0x55, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xEA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x40, 0x15, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFE, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x00, 0x01, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 0x00, 0x00, 0x55, 0x55, 0x55, 0x57, + 0xFF, 0xFF, 0xFF, 0xEA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x00, 0x05, 0x00, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x15, 0x50, + 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFE, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAB, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x01, 0x55, 0x54, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, + 0xFE, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x54, 0x15, 0x55, 0x55, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFE, 0xAA, 0xAF, 0xEA, 0xAA, 0xAA, 0xAF, + 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xEA, 0xAA, + 0xAB, 0xFF, 0xFF, 0xFF, 0xAA, 0xAB, 0xFE, 0xAA, 0xAA, 0xAF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xEA, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, 0xEA, 0xAA, + 0xFF, 0xEA, 0xAA, 0xAB, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, + 0xFF, 0xFF, 0xEA, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, 0xEA, 0xAA, 0xFF, 0xFA, 0xAA, 0xAB, 0xFF, 0xFF, + 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xEA, 0xAA, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFA, 0xAA, 0xBF, 0xFE, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xEA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0xAA, 0xBF, 0xFE, + 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, + 0xEA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0xAA, 0xBF, 0xFF, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xD5, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x05, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x40, 0x15, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xEA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFA, 0xAA, 0xBF, 0xFF, 0xAA, 0xAA, 0xBF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x40, 0x00, + 0x00, 0x05, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x05, 0x50, 0x55, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xEA, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, 0xEA, 0xAA, 0xBF, 0xFF, 0xEA, 0xAA, + 0xBF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x01, 0x40, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xEA, 0xAA, + 0xBF, 0xFF, 0xFF, 0xFF, 0xEA, 0xAA, 0xBF, 0xFF, 0xEA, 0xAA, 0xBF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, + 0x55, 0x50, 0x00, 0x00, 0x00, 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x01, + 0x01, 0x50, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xEA, 0xAA, 0xAF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, + 0xBF, 0xFF, 0xEA, 0xAA, 0xBF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x40, 0x00, 0x00, 0x00, 0x00, + 0x05, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x05, 0x40, 0x50, 0x15, 0x55, 0x55, 0x57, + 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xBF, 0xFF, 0xFA, 0xAA, 0xBF, 0xFF, + 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x54, 0x05, 0x40, 0x50, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAF, + 0xFE, 0xAA, 0xAA, 0xAA, 0xBF, 0xFF, 0xFA, 0xAA, 0xBF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x05, 0x50, 0x50, + 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, + 0xFA, 0xAA, 0xBF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x01, 0x50, 0x40, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, + 0xFE, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFA, 0xAA, 0xBF, 0xFF, 0xFF, 0xD5, + 0x55, 0x55, 0x54, 0x00, 0x05, 0x40, 0x05, 0x40, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x00, 0x00, 0x00, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x15, 0x40, + 0x05, 0x50, 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x55, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAB, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x50, 0x00, 0x15, 0x40, 0x05, 0x54, 0x00, 0x15, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x00, 0x01, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xEA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, + 0x50, 0x00, 0x55, 0x40, 0x05, 0x54, 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xBF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x50, 0x00, 0x55, 0x40, 0x05, 0x54, + 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, + 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, 0xAA, 0xAA, 0xAB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xD5, 0x55, 0x55, 0x50, 0x00, 0x55, 0x40, 0x05, 0x54, 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xEA, 0xAA, + 0xAA, 0xAA, 0xAF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x50, 0x00, + 0x55, 0x40, 0x05, 0x50, 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, 0xAB, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x50, 0x00, 0x55, 0x40, 0x05, 0x40, 0x00, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, + 0x55, 0x55, 0x54, 0x00, 0x55, 0x40, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x54, 0x00, 0x00, 0x00, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x15, 0x40, + 0x00, 0x00, 0x01, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x15, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x15, 0x40, 0x00, 0x00, 0x01, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x40, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, + 0x55, 0x00, 0x15, 0x40, 0x00, 0x00, 0x05, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x50, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x01, 0x55, 0x40, 0x00, 0x00, + 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 0x15, 0x55, 0x55, 0x57, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x40, 0x00, 0x01, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0xAA, + 0xAF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x54, 0x05, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x40, + 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, 0xAA, 0xBF, 0xFF, 0xFF, 0xAA, 0xAA, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, + 0xFF, 0xFA, 0xAA, 0xAA, 0xAA, 0xAF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAB, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x54, 0x00, 0x00, 0x00, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xEA, 0xAA, 0xAA, 0xAA, 0xAB, + 0xFF, 0xEA, 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x55, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xFE, 0xAA, 0xAA, 0xAA, 0xAA, 0xBF, + 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xBE, 0xAA, 0xAA, 0xAA, 0xAA, 0xAF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x40, 0x05, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFE, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xBA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAB, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x40, 0x05, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, + 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAB, 0xFF, 0xFF, + 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x40, 0x05, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x54, 0x00, 0x15, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x40, 0x05, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x40, 0x00, 0x01, + 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAF, 0xEA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x40, 0x05, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, + 0xEA, 0xAA, 0xAB, 0xFF, 0xFE, 0xAA, 0xAA, 0xAA, 0xAF, 0xEA, 0xAA, 0xAA, 0xBF, 0xFF, 0xFF, 0xD5, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x40, 0x05, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x00, 0x00, 0x00, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xEA, 0xAA, 0xBF, 0xFF, 0xFF, 0xAA, + 0xAA, 0xAB, 0xFF, 0xFF, 0xAA, 0xAA, 0xBF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x40, + 0x05, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x01, 0x55, 0x40, 0x15, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xEA, 0xAA, 0xBF, 0xFF, 0xFF, 0xEA, 0xAA, 0xAF, 0xFF, 0xFF, 0xEA, 0xAA, + 0xBF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x40, 0x05, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x54, 0x05, 0x55, 0x50, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xEA, 0xAA, + 0xFF, 0xFF, 0xFF, 0xEA, 0xAA, 0xAF, 0xFF, 0xFF, 0xEA, 0xAA, 0xBF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x40, 0x05, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x05, + 0x55, 0x50, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xEA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFA, 0xAA, 0xBF, + 0xFF, 0xFF, 0xFA, 0xAA, 0xBF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x40, 0x05, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x05, 0x55, 0x50, 0x15, 0x55, 0x55, 0x57, + 0xFF, 0xFF, 0xEA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFA, 0xAA, 0xBF, 0xFF, 0xFF, 0xFA, 0xAA, 0xBF, 0xFF, + 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x40, 0x05, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x01, 0x55, 0x40, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xEA, 0xAA, 0xFF, 0xFF, + 0xFF, 0xFA, 0xAA, 0xBF, 0xFF, 0xFF, 0xFA, 0xAA, 0xBF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x40, 0x05, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x55, 0x57, 0xFF, 0xFF, 0xEA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFA, 0xAA, 0xBF, 0xFF, 0xFF, + 0xFA, 0xAA, 0xBF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x57, 0xFF, 0xFF, + 0xEA, 0xAA, 0xBF, 0xFF, 0xFF, 0xEA, 0xAA, 0xAF, 0xFF, 0xFF, 0xEA, 0xAA, 0xBF, 0xFF, 0xFF, 0xD5, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x57, 0xFF, 0xFF, 0xEA, 0xAA, 0xBF, 0xFF, 0xFF, 0xEA, + 0xAA, 0xAB, 0xFF, 0xFF, 0xAA, 0xAA, 0xBF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xEA, 0xAA, 0xAF, 0xFF, 0xFF, 0xAA, 0xAA, 0xAA, 0xBF, 0xFA, 0xAA, 0xAA, + 0xBF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFA, 0xAA, + 0xAA, 0xFF, 0xEA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, + 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, + 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFE, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAB, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFE, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xBA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, + 0xFF, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xFE, 0xAA, 0xAA, 0xAA, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, 0xD5, + 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xEA, 0xAA, 0xAA, 0xAA, 0xAB, + 0xFF, 0xAA, 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x15, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAA, 0xAF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAB, 0xFF, + 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFE, + 0xAA, 0xAA, 0xAA, 0xBF, 0xFF, 0xFE, 0xAA, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, + 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, + 0x00, 0x00, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xEA, 0xAA, 0xAB, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x15, 0x55, 0x55, 0x57, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x54, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x50, 0x00, 0x55, 0x55, 0x50, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 0x00, 0x55, 0x55, 0x50, + 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x05, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 0x00, 0x55, 0x55, 0x50, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x00, 0x00, 0x05, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, + 0x00, 0x55, 0x55, 0x50, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x15, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 0x00, 0x55, 0x55, 0x50, 0x00, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x50, 0x00, 0x55, 0x55, 0x50, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x40, 0x00, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 0x00, 0x55, + 0x55, 0x50, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x40, 0x00, 0x00, 0x55, 0x55, 0x55, 0x57, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x15, 0x55, 0x40, 0x01, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x54, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x54, 0x00, 0x05, 0x55, 0x00, 0x01, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x05, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x54, 0x00, 0x00, 0x05, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x00, 0x00, 0x00, 0x00, 0x05, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x40, 0x00, 0x00, 0x15, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x40, 0x00, 0x00, 0x00, 0x05, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 0x00, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x40, 0x00, 0x00, 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x50, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, + 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x05, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x01, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, + 0x00, 0x05, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x57, 0xFF, 0xFF, + 0xFE, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x57, 0xFF, 0xFF, 0xFE, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x55, 0x57, 0xFF, 0xFF, 0xFE, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x40, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFE, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, + 0x55, 0x40, 0x00, 0x01, 0x55, 0x55, 0x45, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x50, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFE, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x55, 0x54, + 0x05, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 0x15, 0x55, 0x55, 0x57, + 0xFF, 0xFF, 0xFE, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x15, 0x40, 0x01, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFE, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, + 0x00, 0x00, 0x15, 0x40, 0x01, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x40, + 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEA, 0xAF, 0xFF, 0xFE, 0xAA, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x50, 0x00, 0x00, 0x00, 0x05, 0x50, 0x00, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xEA, 0xAF, 0xFF, 0xFE, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, + 0x55, 0x55, 0x50, 0x00, 0x00, 0x00, 0x05, 0x50, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x54, 0x00, 0x00, 0x00, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEA, 0xAF, 0xFF, + 0xFE, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x50, 0x00, 0x14, 0x00, + 0x05, 0x54, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x00, 0x01, 0x55, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEA, 0xAF, 0xFF, 0xFE, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x50, 0x00, 0x55, 0x40, 0x01, 0x54, 0x00, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xEA, 0xAF, 0xFF, 0xFE, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, + 0x50, 0x00, 0x55, 0x40, 0x01, 0x54, 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEA, 0xAF, 0xFF, 0xFE, 0xAA, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x55, 0x50, 0x01, 0x54, + 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEA, 0xAF, 0xFF, 0xFE, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x55, 0x50, 0x01, 0x54, 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x15, 0x05, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEA, + 0xAB, 0xFF, 0xFA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x00, + 0x15, 0x50, 0x01, 0x54, 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, + 0x14, 0x01, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEA, 0xAA, 0xFF, 0xEA, 0xAA, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x00, 0x15, 0x54, 0x01, 0x50, 0x00, 0x15, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x14, 0x01, 0x55, 0x57, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAA, 0xAB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, + 0x55, 0x55, 0x55, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x54, 0x00, 0x00, 0x00, 0x14, 0x01, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, + 0xAA, 0xAB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xAA, 0xAA, 0xAA, 0xAF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFE, 0xAA, 0xAA, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, + 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x50, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, 0xAA, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 0x15, 0x55, 0x55, 0x57, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0xAA, 0xAB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x40, 0x00, 0x00, 0x00, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, + 0x00, 0x15, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x15, 0x55, 0x57, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x54, 0x00, 0x55, 0x50, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x05, 0x55, 0x50, 0x15, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xFE, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xBF, 0xEA, 0xBF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x54, 0x05, 0x55, 0x50, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFE, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xBF, 0xAA, 0xAF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x05, + 0x55, 0x50, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFE, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xBF, 0xAA, + 0xAF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, + 0xFF, 0xFF, 0xFE, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xBF, 0xAA, 0xAF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xD5, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x00, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFE, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xBF, 0xAA, 0xAF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x50, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 0x00, 0x01, + 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFE, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xBF, 0xEA, 0xBF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x40, 0x00, 0x00, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, + 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x01, 0x40, 0x40, 0x15, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xD5, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x54, 0x05, 0x40, 0x50, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFE, 0xBF, + 0xFF, 0xFF, 0xFF, 0xFE, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x50, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x05, + 0x40, 0x54, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFE, 0xAB, 0xFF, 0xFF, 0xFF, 0xEA, 0xBF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x05, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x05, 0x40, 0x50, 0x15, 0x55, 0x55, 0x57, + 0xFF, 0xFF, 0xFE, 0xAA, 0xBF, 0xFF, 0xFF, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x00, 0x15, 0x55, 0x55, 0x40, 0x01, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x54, 0x05, 0x40, 0x50, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFE, 0xAA, 0xAB, 0xFF, + 0xFA, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, + 0x15, 0x55, 0x55, 0x50, 0x01, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x05, 0x40, 0x00, + 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFE, 0xAA, 0xAA, 0xFF, 0xAA, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x55, 0x55, 0x55, 0x50, 0x00, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x01, 0x40, 0x00, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, + 0xFE, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, + 0x55, 0x55, 0x50, 0x00, 0x55, 0x55, 0x55, 0x54, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x40, 0x05, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xEA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x50, 0x00, 0x55, 0x55, + 0x55, 0x54, 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAA, 0xAF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x50, 0x00, 0x15, 0x55, 0x55, 0x50, 0x00, 0x15, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, + 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, + 0x50, 0x00, 0x05, 0x55, 0x55, 0x50, 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xEA, 0xAA, 0xAB, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x50, 0x00, 0x01, 0x55, 0x55, 0x00, + 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, + 0xFF, 0xFF, 0xFF, 0xFE, 0xAA, 0xAA, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xEA, 0xAA, 0xAA, + 0xAA, 0xAB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, + 0xFE, 0xAA, 0xAA, 0xBE, 0xAA, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, + 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x00, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFE, 0xAA, 0xAB, 0xFF, 0xEA, 0xAA, + 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x50, 0x00, 0x00, + 0x00, 0x00, 0x05, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 0x00, 0x01, 0x55, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xFE, 0xAA, 0xAF, 0xFF, 0xFE, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x15, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x40, 0x00, 0x00, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFE, 0xAA, + 0xFF, 0xFF, 0xFF, 0xEA, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, + 0x55, 0x55, 0x40, 0x00, 0x00, 0x01, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, + 0x00, 0x00, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFE, 0xAF, 0xFF, 0xFF, 0xFF, 0xFA, 0xBF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x55, 0x40, 0x15, 0x55, 0x55, 0x57, + 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x54, 0x01, 0x55, 0x50, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x05, 0x55, 0x50, + 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x05, 0x55, 0x50, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, + 0xFF, 0xFF, 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x54, 0x01, 0x55, 0x50, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFE, 0xAA, 0xAA, 0xAA, 0xBF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, + 0x05, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x01, 0x55, 0x50, 0x15, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, 0xAA, 0xAB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x40, 0x00, 0x00, 0x05, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x05, 0x55, 0x54, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xEA, + 0xAA, 0xAA, 0xAA, 0xAB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, + 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x50, 0x00, 0x00, 0x00, 0x00, + 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x15, 0x55, 0x55, 0x55, 0x57, + 0xFF, 0xFF, 0xFF, 0xAA, 0xAB, 0xAA, 0xEA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x40, 0x00, 0x00, 0x00, 0x00, 0x05, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x50, 0x00, 0x01, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFE, 0xAA, 0xAF, 0xAA, + 0xFE, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x40, 0x00, 0x00, + 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFE, 0xAA, 0xBF, 0xAA, 0xFE, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, + 0xFE, 0xAA, 0xFF, 0xAA, 0xFF, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, + 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x01, 0x55, 0x40, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFE, 0xAA, 0xFF, 0xAA, 0xFF, 0xAA, + 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x01, 0x40, + 0x05, 0x40, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x05, 0x55, 0x50, 0x15, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xFE, 0xAA, 0xFF, 0xAA, 0xFF, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x15, 0x40, 0x05, 0x50, 0x00, 0x15, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x54, 0x05, 0x55, 0x50, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFE, 0xAA, + 0xFF, 0xAA, 0xFE, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, + 0x50, 0x00, 0x15, 0x40, 0x05, 0x54, 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x05, + 0x55, 0x50, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFE, 0xAA, 0xFF, 0xAA, 0xFA, 0xAA, 0xBF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x50, 0x00, 0x55, 0x40, 0x05, 0x54, + 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x01, 0x55, 0x40, 0x15, 0x55, 0x55, 0x57, + 0xFF, 0xFF, 0xFE, 0xAA, 0xBF, 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xD5, 0x55, 0x55, 0x50, 0x00, 0x55, 0x40, 0x05, 0x54, 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xAA, 0xBF, 0xAA, + 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x50, 0x00, + 0x55, 0x40, 0x05, 0x54, 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, + 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xAA, 0xAF, 0xAA, 0xAA, 0xAB, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x50, 0x00, 0x55, 0x40, 0x05, 0x50, 0x00, 0x15, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x40, 0x00, 0x01, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, + 0xFF, 0xEA, 0xBF, 0xAA, 0xAA, 0xAF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, + 0x55, 0x55, 0x50, 0x00, 0x55, 0x40, 0x05, 0x40, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x54, 0x00, 0x15, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFA, 0xFF, 0xAA, 0xAA, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x55, 0x40, + 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x15, 0x40, 0x00, 0x00, 0x01, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, + 0x54, 0x00, 0x15, 0x40, 0x00, 0x00, 0x01, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x00, 0x15, 0x40, 0x00, 0x00, + 0x05, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x57, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x01, 0x55, 0x40, 0x00, 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x57, 0xFF, 0xFF, 0xFE, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x40, 0x00, 0x01, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x55, 0x57, 0xFF, 0xFF, 0xFE, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xBF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x05, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x01, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, + 0xFE, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x54, 0x05, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFE, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xFE, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x15, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFE, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x40, + 0x00, 0x01, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x57, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x01, 0x55, 0x40, + 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xAF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x05, 0x55, 0x50, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, + 0xFF, 0xFA, 0xAF, 0xFE, 0xAA, 0xAF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, + 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x54, 0x05, 0x55, 0x50, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xEA, 0xAF, 0xFA, 0xAA, 0xAB, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x05, 0x55, 0x50, 0x15, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xAA, 0xAF, 0xFA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x54, 0x01, 0x55, 0x40, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xAA, + 0xAF, 0xEA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, + 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, + 0x00, 0x00, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFE, 0xAA, 0xAF, 0xEA, 0xAA, 0xAA, 0xBF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, + 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x40, 0x00, 0x00, 0x55, 0x55, 0x55, 0x57, + 0xFF, 0xFF, 0xFE, 0xAA, 0xFF, 0xAA, 0xAE, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x01, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x50, 0x00, 0x01, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFE, 0xAB, 0xFF, 0xAA, + 0xBF, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x40, 0x01, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x15, + 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFE, 0xAB, 0xFF, 0xAA, 0xBF, 0xEA, 0xBF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 0x00, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, + 0xFE, 0xAB, 0xFE, 0xAA, 0xFF, 0xEA, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFE, 0xAB, 0xFE, 0xAA, 0xFF, 0xEA, + 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x50, 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xFE, 0xAA, 0xFE, 0xAA, 0xFF, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 0x00, 0x15, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFE, 0xAA, + 0xAA, 0xAA, 0xFA, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, + 0x00, 0x00, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFE, 0xAA, 0xAA, 0xAB, 0xFA, 0xAA, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x57, + 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, 0xAB, 0xFA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xEA, 0xAA, 0xAF, + 0xFA, 0xAB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x40, + 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xEA, 0xAA, 0xAF, 0xFA, 0xAF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, + 0xFF, 0xFE, 0xAA, 0xFF, 0xFA, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x50, 0x15, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 0x15, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, +}; + +#endif diff --git a/src/epd/GxEPD2_150_BN.cpp b/src/epd/GxEPD2_150_BN.cpp index 44efac0d..bfb3ddfb 100644 --- a/src/epd/GxEPD2_150_BN.cpp +++ b/src/epd/GxEPD2_150_BN.cpp @@ -397,7 +397,7 @@ void GxEPD2_150_BN::_Init_Part() void GxEPD2_150_BN::_Update_Full() { _writeCommand(0x22); - _writeData(0xf4); + _writeData(0xf7); // immediate power off _writeCommand(0x20); _waitWhileBusy("_Update_Full", full_refresh_time); } diff --git a/src/epd4c/GxEPD2_266c_GDEY0266F51H.cpp b/src/epd4c/GxEPD2_266c_GDEY0266F51H.cpp new file mode 100644 index 00000000..4a665552 --- /dev/null +++ b/src/epd4c/GxEPD2_266c_GDEY0266F51H.cpp @@ -0,0 +1,976 @@ +// Display Library for SPI e-paper panels from Dalian Good Display and boards from Waveshare. +// Requires HW SPI and Adafruit_GFX. Caution: the e-paper panels require 3.3V supply AND data lines! +// +// based on Demo Example from Good Display: https://www.good-display.com/comp/xcompanyFile/downloadNew.do?appId=24&fid=1435&id=1018 +// Panel: GDEY0266F51H : https://www.good-display.com/product/467.html +// Panel specs: https://v4.cecdn.yun300.cn/100001_1909185148/GDEY0266F51H.pdf +// Controller: JD79667 : no specs, see panel specs for command list subset +// +// Author: Jean-Marc Zingg +// +// Version: see library.properties +// +// Library: https://github.com/ZinggJM/GxEPD2 + +#include "GxEPD2_266c_GDEY0266F51H.h" + +GxEPD2_266c_GDEY0266F51H::GxEPD2_266c_GDEY0266F51H(int16_t cs, int16_t dc, int16_t rst, int16_t busy) : + GxEPD2_EPD(cs, dc, rst, busy, LOW, 50000000, WIDTH, HEIGHT, panel, hasColor, hasPartialUpdate, hasFastPartialUpdate) +{ + _paged = false; +} + +void GxEPD2_266c_GDEY0266F51H::clearScreen(uint8_t value) +{ + clearScreen(value, 0xFF); +} + +void GxEPD2_266c_GDEY0266F51H::clearScreen(uint8_t black_value, uint8_t color_value) +{ + writeScreenBuffer(black_value, color_value); + refresh(); +} + +void GxEPD2_266c_GDEY0266F51H::writeScreenBuffer(uint8_t value) +{ + writeScreenBuffer(value, 0xFF); +} + +void GxEPD2_266c_GDEY0266F51H::writeScreenBuffer(uint8_t black_value, uint8_t color_value) +{ + //Serial.println("writeScreenBuffer"); + if (!_init_display_done) _InitDisplay(); + _writeCommand(0x10); + _startTransfer(); + for (uint32_t i = 0; i < uint32_t(WIDTH) * uint32_t(HEIGHT) / 4; i++) + { + _transfer(0xFF == black_value ? 0x55 : 0x00); + } + _endTransfer(); + _initial_write = false; // initial full screen buffer clean done +} + +void GxEPD2_266c_GDEY0266F51H::writeImage(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + //Serial.print("writeImage("); Serial.print(x); Serial.print(", "); Serial.print(y); Serial.print(", "); + //Serial.print(w); Serial.print(", "); Serial.print(h); Serial.println(")"); + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 + if (!_init_display_done) _InitDisplay(); + if (_initial_write) writeScreenBuffer(); + if (hasPartialUpdate) + { + int16_t wb = (w + 7) / 8; // width bytes, bitmaps are padded + x -= x % 8; // byte boundary + w = wb * 8; // byte boundary + int16_t x1 = x < 0 ? 0 : x; // limit + int16_t y1 = y < 0 ? 0 : y; // limit + int16_t w1 = x + w < int16_t(WIDTH) ? w : int16_t(WIDTH) - x; // limit + int16_t h1 = y + h < int16_t(HEIGHT) ? h : int16_t(HEIGHT) - y; // limit + int16_t dx = x1 - x; + int16_t dy = y1 - y; + w1 -= dx; + h1 -= dy; + if ((w1 <= 0) || (h1 <= 0)) return; + _setPartialRamArea(x1, y1, w1, h1); + _writeCommand(0x10); + _startTransfer(); + for (int16_t i = 0; i < h1; i++) + { + for (int16_t j = 0; j < w1 / 8; j++) + { + uint8_t data = 0xFF; + // use wb, h of bitmap for index! + uint32_t idx = mirror_y ? j + dx / 8 + uint32_t((h - 1 - (i + dy))) * wb : j + dx / 8 + uint32_t(i + dy) * wb; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + data = pgm_read_byte(&bitmap[idx]); +#else + data = bitmap[idx]; +#endif + } + else + { + data = bitmap[idx]; + } + if (invert) data = ~data; + for (int16_t k = 0; k < 2; k++) + { + uint8_t data2 = (data & 0x80 ? 0x40 : 0x00) | (data & 0x40 ? 0x10 : 0x00) | + (data & 0x20 ? 0x04 : 0x00) | (data & 0x10 ? 0x01 : 0x00); + data <<= 4; + _transfer(data2); + } + } + } + _endTransfer(); + } + else + { + if (_paged && (x == 0) && (w == int16_t(WIDTH)) && (h < int16_t(HEIGHT))) + { + //Serial.println("paged"); + _startTransfer(); + for (uint32_t i = 0; i < uint32_t(WIDTH) * uint32_t(h) / 8; i++) + { + uint8_t data = bitmap[i]; + for (int16_t k = 0; k < 2; k++) + { + uint8_t data2 = (data & 0x80 ? 0x40 : 0x00) | (data & 0x40 ? 0x10 : 0x00) | + (data & 0x20 ? 0x04 : 0x00) | (data & 0x10 ? 0x01 : 0x00); + data <<= 4; + _transfer(data2); + } + } + _endTransfer(); + if (y + h == HEIGHT) // last page + { + //Serial.println("paged ended"); + _paged = false; + } + } + else + { + _paged = false; + int16_t wb = (w + 7) / 8; // width bytes, bitmaps are padded + x -= x % 8; // byte boundary + w = wb * 8; // byte boundary + if ((w <= 0) || (h <= 0)) return; + _writeCommand(0x10); + _startTransfer(); + for (int16_t i = 0; i < int16_t(HEIGHT); i++) + { + for (int16_t j = 0; j < int16_t(WIDTH); j += 8) + { + uint8_t data = 0xFF; + if ((j >= x) && (j <= x + w) && (i >= y) && (i < y + h)) + { + uint32_t idx = mirror_y ? (j - x) / 8 + uint32_t((h - 1 - (i - y))) * wb : (j - x) / 8 + uint32_t(i - y) * wb; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + data = pgm_read_byte(&bitmap[idx]); +#else + data = bitmap[idx]; +#endif + } + else + { + data = bitmap[idx]; + } + if (invert) data = ~data; + } + for (int16_t k = 0; k < 2; k++) + { + uint8_t data2 = (data & 0x80 ? 0x40 : 0x00) | (data & 0x40 ? 0x10 : 0x00) | + (data & 0x20 ? 0x04 : 0x00) | (data & 0x10 ? 0x01 : 0x00); + data <<= 4; + _transfer(data2); + } + } + } + _endTransfer(); + } + } + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 +} + +void GxEPD2_266c_GDEY0266F51H::writeImage(const uint8_t* black, const uint8_t* color, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + if (!black && !color) return; + if (!color) return writeImage(black, x, y, w, h, invert, mirror_y, pgm); + //Serial.print("writeImage("); Serial.print(x); Serial.print(", "); Serial.print(y); Serial.print(", "); + //Serial.print(w); Serial.print(", "); Serial.print(h); Serial.println(")"); + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 + if (!_init_display_done) _InitDisplay(); + if (_initial_write) writeScreenBuffer(); + if (hasPartialUpdate) + { + int16_t wb = (w + 7) / 8; // width bytes, bitmaps are padded + x -= x % 8; // byte boundary + w = wb * 8; // byte boundary + int16_t x1 = x < 0 ? 0 : x; // limit + int16_t y1 = y < 0 ? 0 : y; // limit + int16_t w1 = x + w < int16_t(WIDTH) ? w : int16_t(WIDTH) - x; // limit + int16_t h1 = y + h < int16_t(HEIGHT) ? h : int16_t(HEIGHT) - y; // limit + int16_t dx = x1 - x; + int16_t dy = y1 - y; + w1 -= dx; + h1 -= dy; + if ((w1 <= 0) || (h1 <= 0)) return; + _setPartialRamArea(x1, y1, w1, h1); + _writeCommand(0x10); + _startTransfer(); + for (int16_t i = 0; i < h1; i++) + { + for (int16_t j = 0; j < w1 / 8; j++) + { + uint8_t black_data = 0xFF, color_data = 0xFF; + // use wb, h of bitmap for index! + uint32_t idx = mirror_y ? j + dx / 8 + uint32_t((h - 1 - (i + dy))) * wb : j + dx / 8 + uint32_t(i + dy) * wb; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + black_data = pgm_read_byte(&black[idx]); + color_data = pgm_read_byte(&color[idx]); +#else + black_data = black[idx]; + color_data = color[idx]; +#endif + } + else + { + black_data = black[idx]; + color_data = color[idx]; + } + if (invert) + { + black_data = ~black_data; + color_data = ~color_data; + } + for (int16_t k = 0; k < 2; k++) + { + uint8_t out_data = 0x00; + for (int16_t l = 0; l < 4; l++) + { + out_data <<= 2; + if (!(color_data & 0x80)) out_data |= 0x03; // red + else out_data |= black_data & 0x80 ? 0x01 : 0x00; // white or black + black_data <<= 1; + color_data <<= 1; + } + _transfer(out_data); + } + } + } + _endTransfer(); + } + else + { + if (_paged && (x == 0) && (w == int16_t(WIDTH)) && (h < int16_t(HEIGHT))) + { + //Serial.println("paged"); + _startTransfer(); + for (uint32_t i = 0; i < uint32_t(WIDTH) * uint32_t(h) / 8; i++) + { + uint8_t black_data = black[i]; + uint8_t color_data = color[i]; + for (int16_t k = 0; k < 2; k++) + { + uint8_t out_data = 0x00; + for (int16_t l = 0; l < 4; l++) + { + out_data <<= 2; + if (!(color_data & 0x80)) out_data |= 0x03; // red + else out_data |= black_data & 0x80 ? 0x01 : 0x00; // white or black + black_data <<= 1; + color_data <<= 1; + } + _transfer(out_data); + } + } + _endTransfer(); + if (y + h == HEIGHT) // last page + { + //Serial.println("paged ended"); + _paged = false; + } + } + else + { + _paged = false; + int16_t wb = (w + 7) / 8; // width bytes, bitmaps are padded + x -= x % 8; // byte boundary + w = wb * 8; // byte boundary + if ((w <= 0) || (h <= 0)) return; + _writeCommand(0x10); + _startTransfer(); + for (int16_t i = 0; i < int16_t(HEIGHT); i++) + { + for (int16_t j = 0; j < int16_t(WIDTH); j += 8) + { + uint8_t black_data = 0xFF, color_data = 0xFF; + if ((j >= x) && (j < x + w) && (i >= y) && (i < y + h)) + { + uint32_t idx = mirror_y ? (j - x) / 8 + uint32_t((h - 1 - (i - y))) * wb : (j - x) / 8 + uint32_t(i - y) * wb; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + black_data = pgm_read_byte(&black[idx]); + color_data = pgm_read_byte(&color[idx]); +#else + black_data = black[idx]; + color_data = color[idx]; +#endif + } + else + { + black_data = black[idx]; + color_data = color[idx]; + } + if (invert) + { + black_data = ~black_data; + color_data = ~color_data; + } + } + for (int16_t k = 0; k < 2; k++) + { + uint8_t out_data = 0x00; + for (int16_t l = 0; l < 4; l++) + { + out_data <<= 2; + if (!(color_data & 0x80)) out_data |= 0x03; // red + else out_data |= black_data & 0x80 ? 0x01 : 0x00; // white or black + black_data <<= 1; + color_data <<= 1; + } + _transfer(out_data); + } + } + } + _endTransfer(); + } + } + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 +} + +void GxEPD2_266c_GDEY0266F51H::writeImagePart(const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + //Serial.print("writeImagePart("); Serial.print(x_part); Serial.print(", "); Serial.print(y_part); Serial.print(", "); + //Serial.print(w_bitmap); Serial.print(", "); Serial.print(h_bitmap); Serial.print(", "); + //Serial.print(x); Serial.print(", "); Serial.print(y); Serial.print(", "); + //Serial.print(w); Serial.print(", "); Serial.print(h); Serial.println(")"); + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 + if (!_init_display_done) _InitDisplay(); + if (_initial_write) writeScreenBuffer(); + if ((w_bitmap < 0) || (h_bitmap < 0) || (w < 0) || (h < 0)) return; + if ((x_part < 0) || (x_part >= w_bitmap)) return; + if ((y_part < 0) || (y_part >= h_bitmap)) return; + int16_t wb_bitmap = (w_bitmap + 7) / 8; // width bytes, bitmaps are padded + x_part -= x_part % 8; // byte boundary + w = w_bitmap - x_part < w ? w_bitmap - x_part : w; // limit + h = h_bitmap - y_part < h ? h_bitmap - y_part : h; // limit + // make x, w multiple of 8 + w += x % 8; // adjust for byte boundary of x + x -= x % 8; // byte boundary ox + w = 8 * ((w + 7) / 8); // byte boundary, bitmaps are padded + int16_t x1 = x < 0 ? 0 : x; // limit + int16_t y1 = y < 0 ? 0 : y; // limit + int16_t w1 = x + w < int16_t(WIDTH) ? w : int16_t(WIDTH) - x; // limit + int16_t h1 = y + h < int16_t(HEIGHT) ? h : int16_t(HEIGHT) - y; // limit + int16_t dx = x1 - x; + int16_t dy = y1 - y; + w1 -= dx; + h1 -= dy; + if ((w1 <= 0) || (h1 <= 0)) return; + if (hasPartialUpdate) + { + _setPartialRamArea(x1, y1, w1, h1); + _writeCommand(0x10); + _startTransfer(); + for (int16_t i = 0; i < h1; i++) + { + for (int16_t j = 0; j < w1 / 8; j++) + { + uint8_t data; + // use wb_bitmap, h_bitmap of bitmap for index! + uint32_t idx = mirror_y ? x_part / 8 + j + dx / 8 + uint32_t((h_bitmap - 1 - (y_part + i + dy))) * wb_bitmap : x_part / 8 + j + dx / 8 + uint32_t(y_part + i + dy) * wb_bitmap; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + data = pgm_read_byte(&bitmap[idx]); +#else + data = bitmap[idx]; +#endif + } + else + { + data = bitmap[idx]; + } + if (invert) data = ~data; + for (int16_t k = 0; k < 2; k++) + { + uint8_t data2 = (data & 0x80 ? 0x40 : 0x00) | (data & 0x40 ? 0x10 : 0x00) | + (data & 0x20 ? 0x04 : 0x00) | (data & 0x10 ? 0x01 : 0x00); + data <<= 4; + _transfer(data2); + } + } + } + _endTransfer(); + } + else + { + _writeCommand(0x10); + _startTransfer(); + for (int16_t i = 0; i < int16_t(HEIGHT); i++) + { + for (int16_t j = 0; j < int16_t(WIDTH); j += 8) + { + uint8_t data = 0xFF; + if ((j >= x1) && (j < x1 + w) && (i >= y1) && (i < y1 + h)) + { + // use wb_bitmap, h_bitmap of bitmap for index! + uint32_t idx = mirror_y ? (x_part + j - x1) / 8 + uint32_t((h_bitmap - 1 - (y_part + i - y1))) * wb_bitmap : (x_part + j - x1) / 8 + uint32_t(y_part + i - y1) * wb_bitmap; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + data = pgm_read_byte(&bitmap[idx]); +#else + data = bitmap[idx]; +#endif + } + else + { + data = bitmap[idx]; + } + if (invert) data = ~data; + } + for (int16_t k = 0; k < 2; k++) + { + uint8_t data2 = (data & 0x80 ? 0x40 : 0x00) | (data & 0x40 ? 0x10 : 0x00) | + (data & 0x20 ? 0x04 : 0x00) | (data & 0x10 ? 0x01 : 0x00); + data <<= 4; + _transfer(data2); + } + } + } + _endTransfer(); + } + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 +} + +void GxEPD2_266c_GDEY0266F51H::writeImagePart(const uint8_t* black, const uint8_t* color, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + //Serial.print("writeImagePart("); Serial.print(x_part); Serial.print(", "); Serial.print(y_part); Serial.print(", "); + //Serial.print(w_bitmap); Serial.print(", "); Serial.print(h_bitmap); Serial.print(", "); + //Serial.print(x); Serial.print(", "); Serial.print(y); Serial.print(", "); + //Serial.print(w); Serial.print(", "); Serial.print(h); Serial.println(")"); + if (!black && !color) return; + if (!color) return writeImagePart(black, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm); + if (!_init_display_done) _InitDisplay(); + if (_initial_write) writeScreenBuffer(); + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 + if ((w_bitmap < 0) || (h_bitmap < 0) || (w < 0) || (h < 0)) return; + if ((x_part < 0) || (x_part >= w_bitmap)) return; + if ((y_part < 0) || (y_part >= h_bitmap)) return; + int16_t wb_bitmap = (w_bitmap + 7) / 8; // width bytes, bitmaps are padded + x_part -= x_part % 8; // byte boundary + w = w_bitmap - x_part < w ? w_bitmap - x_part : w; // limit + h = h_bitmap - y_part < h ? h_bitmap - y_part : h; // limit + // make x, w multiple of 8 + w += x % 8; // adjust for byte boundary of x + x -= x % 8; // byte boundary ox + w = 8 * ((w + 7) / 8); // byte boundary, bitmaps are padded + int16_t x1 = x < 0 ? 0 : x; // limit + int16_t y1 = y < 0 ? 0 : y; // limit + int16_t w1 = x + w < int16_t(WIDTH) ? w : int16_t(WIDTH) - x; // limit + int16_t h1 = y + h < int16_t(HEIGHT) ? h : int16_t(HEIGHT) - y; // limit + int16_t dx = x1 - x; + int16_t dy = y1 - y; + w1 -= dx; + h1 -= dy; + if ((w1 <= 0) || (h1 <= 0)) return; + if (hasPartialUpdate) + { + _setPartialRamArea(x1, y1, w1, h1); + _writeCommand(0x10); + _startTransfer(); + for (int16_t i = 0; i < h1; i++) + { + for (int16_t j = 0; j < w1 / 8; j++) + { + uint8_t black_data = 0xFF, color_data = 0xFF; + // use wb_bitmap, h_bitmap of bitmap for index! + uint32_t idx = mirror_y ? x_part / 8 + j + dx / 8 + uint32_t((h_bitmap - 1 - (y_part + i + dy))) * wb_bitmap : x_part / 8 + j + dx / 8 + uint32_t(y_part + i + dy) * wb_bitmap; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + black_data = pgm_read_byte(&black[idx]); + color_data = pgm_read_byte(&color[idx]); +#else + black_data = black[idx]; + color_data = color[idx]; +#endif + } + else + { + black_data = black[idx]; + color_data = color[idx]; + } + for (int16_t k = 0; k < 2; k++) + { + uint8_t out_data = 0x00; + for (int16_t l = 0; l < 4; l++) + { + out_data <<= 2; + if (!(color_data & 0x80)) out_data |= 0x03; // red + else out_data |= black_data & 0x80 ? 0x01 : 0x00; // white or black + black_data <<= 1; + color_data <<= 1; + } + _transfer(out_data); + } + } + } + _endTransfer(); + } + else + { + _writeCommand(0x10); + _startTransfer(); + for (int16_t i = 0; i < int16_t(HEIGHT); i++) + { + for (int16_t j = 0; j < int16_t(WIDTH); j += 8) + { + uint8_t black_data = 0xFF, color_data = 0xFF; + if ((j >= x1) && (j < x1 + w) && (i >= y1) && (i < y1 + h)) + { + // use wb_bitmap, h_bitmap of bitmap for index! + uint32_t idx = mirror_y ? (x_part + j - x1) / 8 + uint32_t((h_bitmap - 1 - (y_part + i - y1))) * wb_bitmap : (x_part + j - x1) / 8 + uint32_t(y_part + i - y1) * wb_bitmap; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + black_data = pgm_read_byte(&black[idx]); + color_data = pgm_read_byte(&color[idx]); +#else + black_data = black[idx]; + color_data = color[idx]; +#endif + } + else + { + black_data = black[idx]; + color_data = color[idx]; + } + if (invert) + { + black_data = ~black_data; + color_data = ~color_data; + } + } + for (int16_t k = 0; k < 2; k++) + { + uint8_t out_data = 0x00; + for (int16_t l = 0; l < 4; l++) + { + out_data <<= 2; + if (!(color_data & 0x80)) out_data |= 0x03; // red + else out_data |= black_data & 0x80 ? 0x01 : 0x00; // white or black + black_data <<= 1; + color_data <<= 1; + } + _transfer(out_data); + } + } + } + _endTransfer(); + } + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 +} + +void GxEPD2_266c_GDEY0266F51H::writeNative(const uint8_t* data1, const uint8_t* data2, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + if (!data1) return; + //Serial.print("writeNative("); Serial.print(x); Serial.print(", "); Serial.print(y); Serial.print(", "); + //Serial.print(w); Serial.print(", "); Serial.print(h); Serial.println(")"); + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 + if (!_init_display_done) _InitDisplay(); + if (_initial_write) writeScreenBuffer(); + if (hasPartialUpdate) + { + int16_t wb = (w + 3) / 4; // width bytes, bitmaps are padded + x -= x % 4; // byte boundary + w = wb * 4; // byte boundary + int16_t x1 = x < 0 ? 0 : x; // limit + int16_t y1 = y < 0 ? 0 : y; // limit + int16_t w1 = x + w < int16_t(WIDTH) ? w : int16_t(WIDTH) - x; // limit + int16_t h1 = y + h < int16_t(HEIGHT) ? h : int16_t(HEIGHT) - y; // limit + int16_t dx = x1 - x; + int16_t dy = y1 - y; + w1 -= dx; + h1 -= dy; + if ((w1 <= 0) || (h1 <= 0)) return; + _setPartialRamArea(x1, y1, w1, h1); + _writeCommand(0x10); + _startTransfer(); + for (int16_t i = 0; i < h1; i++) + { + for (int16_t j = 0; j < w1 / 4; j++) + { + uint8_t data; + // use wb, h of bitmap for index! + uint32_t idx = mirror_y ? j + dx / 4 + uint32_t((h - 1 - (i + dy))) * wb : j + dx / 4 + uint32_t(i + dy) * wb; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + data = pgm_read_byte(&data1[idx]); +#else + data = data1[idx]; +#endif + } + else + { + data = data1[idx]; + } + if (invert) data = ~data; + _transfer(data); + } + } + _endTransfer(); + } + else + { + if (_paged && (x == 0) && (w == int16_t(WIDTH)) && (h < int16_t(HEIGHT))) + { + //Serial.println("paged"); + _startTransfer(); + for (uint32_t i = 0; i < uint32_t(WIDTH) * uint32_t(h) / 4; i++) + { + uint8_t data = data1[i]; + _transfer(data); + } + _endTransfer(); + if (y + h == HEIGHT) // last page + { + //Serial.println("paged ended"); + _paged = false; + } + } + else + { + //Serial.println("not paged"); + _paged = false; + int16_t wb = (w + 3) / 4; // width bytes, bitmaps are padded + x -= x % 4; // byte boundary + w = wb * 4; // byte boundary + if ((w <= 0) || (h <= 0)) return; + _writeCommand(0x10); + _startTransfer(); + for (int16_t i = 0; i < int16_t(HEIGHT); i++) + { + for (int16_t j = 0; j < int16_t(WIDTH); j += 4) + { + uint8_t data = 0x55; + if (data1) + { + if ((j >= x) && (j < x + w) && (i >= y) && (i < y + h)) + { + uint32_t idx = mirror_y ? (j - x) / 4 + uint32_t((h - 1 - (i - y))) * wb : (j - x) / 4 + uint32_t(i - y) * wb; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + data = pgm_read_byte(&data1[idx]); +#else + data = data1[idx]; +#endif + } + else + { + data = data1[idx]; + } + if (invert) data = ~data; + } + } + _transfer(data); + } + } + _endTransfer(); + } + } + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 +} + +void GxEPD2_266c_GDEY0266F51H::writeNativePart(const uint8_t* data1, const uint8_t* data2, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + if (!data1) return; + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 + if (!_init_display_done) _InitDisplay(); + if (_initial_write) writeScreenBuffer(); + if ((w_bitmap < 0) || (h_bitmap < 0) || (w < 0) || (h < 0)) return; + if ((x_part < 0) || (x_part >= w_bitmap)) return; + if ((y_part < 0) || (y_part >= h_bitmap)) return; + int16_t wb_bitmap = (w_bitmap + 3) / 4; // width bytes, bitmaps are padded + x_part -= x_part % 4; // byte boundary + w = w_bitmap - x_part < w ? w_bitmap - x_part : w; // limit + h = h_bitmap - y_part < h ? h_bitmap - y_part : h; // limit + w += x % 4; // adjust for byte boundary of x + x -= x % 4; // byte boundary + w = 4 * ((w + 3) / 4); // byte boundary, bitmaps are padded + int16_t x1 = x < 0 ? 0 : x; // limit + int16_t y1 = y < 0 ? 0 : y; // limit + int16_t w1 = x + w < int16_t(WIDTH) ? w : int16_t(WIDTH) - x; // limit + int16_t h1 = y + h < int16_t(HEIGHT) ? h : int16_t(HEIGHT) - y; // limit + int16_t dx = x1 - x; + int16_t dy = y1 - y; + w1 -= dx; + h1 -= dy; + if ((w1 <= 0) || (h1 <= 0)) return; + if (hasPartialUpdate) + { + _setPartialRamArea(x1, y1, w1, h1); + _writeCommand(0x10); + _startTransfer(); + for (int16_t i = 0; i < h1; i++) + { + for (int16_t j = 0; j < w1 / 4; j++) + { + uint8_t data; + // use wb_bitmap, h_bitmap of bitmap for index! + uint32_t idx = mirror_y ? x_part / 4 + j + dx / 4 + uint32_t((h_bitmap - 1 - (y_part + i + dy))) * wb_bitmap : x_part / 4 + j + dx / 4 + uint32_t(y_part + i + dy) * wb_bitmap; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + data = pgm_read_byte(&data1[idx]); +#else + data = data1[idx]; +#endif + } + else + { + data = data1[idx]; + } + if (invert) data = ~data; + _transfer(data); + } + } + _endTransfer(); + } + else + { + _writeCommand(0x10); + _startTransfer(); + for (int16_t i = 0; i < int16_t(HEIGHT); i++) + { + for (int16_t j = 0; j < int16_t(WIDTH); j += 4) + { + uint8_t data = 0x55; + if ((j >= x1) && (j < x1 + w) && (i >= y1) && (i < y1 + h)) + { + // use wb_bitmap, h_bitmap of bitmap for index! + uint32_t idx = mirror_y ? (x_part + j - x1) / 4 + uint32_t((h_bitmap - 1 - (y_part + i - y1))) * wb_bitmap : (x_part + j - x1) / 4 + uint32_t(y_part + i - y1) * wb_bitmap; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + data = pgm_read_byte(&data1[idx]); +#else + data = data1[idx]; +#endif + } + else + { + data = data1[idx]; + } + if (invert) data = ~data; + } + _transfer(data); + } + } + _endTransfer(); + } + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 +} + +void GxEPD2_266c_GDEY0266F51H::drawImage(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + writeImage(bitmap, x, y, w, h, invert, mirror_y, pgm); + refresh(x, y, w, h); +} + +void GxEPD2_266c_GDEY0266F51H::drawImagePart(const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + writeImagePart(bitmap, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm); + refresh(x, y, w, h); +} + +void GxEPD2_266c_GDEY0266F51H::drawImage(const uint8_t* black, const uint8_t* color, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + writeImage(black, color, x, y, w, h, invert, mirror_y, pgm); + refresh(x, y, w, h); +} + +void GxEPD2_266c_GDEY0266F51H::drawImagePart(const uint8_t* black, const uint8_t* color, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + writeImagePart(black, color, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm); + refresh(x, y, w, h); +} + +void GxEPD2_266c_GDEY0266F51H::drawNative(const uint8_t* data1, const uint8_t* data2, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + writeNative(data1, data2, x, y, w, h, invert, mirror_y, pgm); + refresh(x, y, w, h); +} + +void GxEPD2_266c_GDEY0266F51H::refresh(bool partial_update_mode) +{ + if (hasPartialUpdate) _setPartialRamArea(0, 0, WIDTH, HEIGHT); + _refresh(partial_update_mode); +} + +void GxEPD2_266c_GDEY0266F51H::refresh(int16_t x, int16_t y, int16_t w, int16_t h) +{ + // intersection with screen + int16_t w1 = x < 0 ? w + x : w; // reduce + int16_t h1 = y < 0 ? h + y : h; // reduce + int16_t x1 = x < 0 ? 0 : x; // limit + int16_t y1 = y < 0 ? 0 : y; // limit + w1 = x1 + w1 < int16_t(WIDTH) ? w1 : int16_t(WIDTH) - x1; // limit + h1 = y1 + h1 < int16_t(HEIGHT) ? h1 : int16_t(HEIGHT) - y1; // limit + if ((w1 <= 0) || (h1 <= 0)) return; + // make x1, w1 multiple of 4 + w1 += x1 % 4; + if (w1 % 4 > 0) w1 += 4 - w1 % 4; + x1 -= x1 % 4; + bool fullscreen = ((x1 == 0) && (y1 == 0) && (w1 == WIDTH) && (h1 == HEIGHT)); + if (hasPartialUpdate) _setPartialRamArea(x1, y1, w1, h1, !fullscreen); + _refresh(!fullscreen); +} + +void GxEPD2_266c_GDEY0266F51H::powerOff() +{ + _PowerOff(); +} + +void GxEPD2_266c_GDEY0266F51H::hibernate() +{ + _PowerOff(); + if (_rst >= 0) + { + _writeCommand(0x07); // deep sleep + _writeData(0xA5); // control code + _hibernating = true; + _init_display_done = false; + } +} + +void GxEPD2_266c_GDEY0266F51H::setPaged() +{ + if (!hasPartialUpdate) + { + _paged = true; + _InitDisplay(); + _writeCommand(0x10); + } +} + +void GxEPD2_266c_GDEY0266F51H::_refresh(bool partial_update_mode) +{ + _writeCommand(0x50); // VCOM and Data Interval Setting + _writeData(partial_update_mode ? 0x97 : 0x37); // floating or white + _writeCommand(0x12); // Display Refresh + _writeData(0x00); + delay(1); + _waitWhileBusy("_refresh", full_refresh_time); + //_power_is_on = false; // not needed + _init_display_done = false; // needed +} + +void GxEPD2_266c_GDEY0266F51H::_setPartialRamArea(uint16_t x, uint16_t y, uint16_t w, uint16_t h, bool partial_mode) +{ + //Serial.print("_setPartialRamArea("); Serial.print(x); Serial.print(", "); Serial.print(y); Serial.print(", "); + //Serial.print(w); Serial.print(", "); Serial.print(h); Serial.println(")"); + _writeCommand(0x83); + _writeData(x / 256); + _writeData(x % 256); + _writeData((x + w - 1) / 256); + _writeData((x + w - 1) % 256); + _writeData(y / 256); + _writeData(y % 256); + _writeData((y + h - 1) / 256); + _writeData((y + h - 1) % 256); + _writeData(partial_mode ? 0x01 : 0x00); +} + +void GxEPD2_266c_GDEY0266F51H::_PowerOn() +{ + if (!_power_is_on) + { + _writeCommand(0x04); + _waitWhileBusy("_PowerOn", power_on_time); + } + _power_is_on = true; +} + +void GxEPD2_266c_GDEY0266F51H::_PowerOff() +{ + if (_power_is_on) + { + _writeCommand(0x02); + _writeData(0x00); + _waitWhileBusy("_PowerOff", power_off_time); + } + _power_is_on = false; +} + +void GxEPD2_266c_GDEY0266F51H::_InitDisplay() +{ + //Serial.println("_InitDisplay"); + // initcode from Good Dispay demo for GDEY029F51H + if ((_rst >= 0) && (_hibernating || _initial_write)) + { + digitalWrite(_rst, HIGH); + delay(20); // At least 20ms delay + digitalWrite(_rst, LOW); // Module reset + delay(2); // At least 40ms delay, 2ms for WS "clever" reset + digitalWrite(_rst, HIGH); + delay(2); // At least 50ms delay (32ms measured) + _waitWhileBusy("_InitDisplay reset", power_on_time); + _hibernating = false; + _power_is_on = false; + } + _writeCommand(0x4D); // ?? + _writeData(0x78); + _writeCommand(0x00); // PSR + _writeData(0x0F); // default res (176x296)), scan up, shift left, booster on, no effect (no RST) + _writeData(0x29); // LUT from MPT, no add scan, VCOM default, TS_AUTO, VGN default, VCOM default, VCOM floating after refresh + _writeCommand(0x01); // PWRR + _writeData(0x07); // VMODE default, VSPL internal, VSP/VSN internal, VGP/VGN internal + _writeData(0x00); // VGP/VGN 20V + _writeCommand(0x03); // POFS + _writeData(0x10); // T_VDGP_OFF 40ms, T_VDS_OFF 20ms + _writeData(0x54); // VGP_LEN 2500ms, VGP_EXT 2000ms + _writeData(0x44); // XON_DLY 2000ms, XON_LEN 2000ms + _writeCommand(0x06); // BTST Booster Soft Start + _writeData(0x05); // PHB_SFT, PHA_SFT + _writeData(0x00); // PHA_ON + _writeData(0x3F); // PHA_OFF + _writeData(0x0A); // PHB_ON + _writeData(0x25); // PHB_OFF + _writeData(0x12); // PHC_ON + _writeData(0x1A); // PHC_OFF + _writeCommand(0x50); // CDI + _writeData(0x37); // (VBD 1, DDX 1) Gray1, 10hsync + //_writeData(0x17); // black border + //_writeData(0x37); // white border (default) + //_writeData(0x57); // yellow border + //_writeData(0x77); // red border + //_writeData(0x97); // floating border + _writeCommand(0x60); // TCON + _writeData(0x02); // ? + _writeData(0x02); // ? + _writeCommand(0x61); // TRES + _writeData(WIDTH / 256); // Source_BITS_H + _writeData(WIDTH % 256); // Source_BITS_L + _writeData(HEIGHT / 256); // Gate_BITS_H + _writeData(HEIGHT % 256); // Gate_BITS_L + _writeCommand(0xE7); // ?? + _writeData(0x1C); + _writeCommand(0xE3); // PWS + _writeData(0x22); + _writeCommand(0xB4); // LVD + _writeData(0xD0); + _writeCommand(0xB5); // ?? + _writeData(0x03); + _writeCommand(0xE9); // ?? + _writeData(0x01); + _writeCommand(0x30); // PLL + _writeData(0x08); // Dynamic frame rate enabled + _PowerOn(); + _init_display_done = true; +} diff --git a/src/epd4c/GxEPD2_266c_GDEY0266F51H.h b/src/epd4c/GxEPD2_266c_GDEY0266F51H.h new file mode 100644 index 00000000..26cb7105 --- /dev/null +++ b/src/epd4c/GxEPD2_266c_GDEY0266F51H.h @@ -0,0 +1,78 @@ +// Display Library for SPI e-paper panels from Dalian Good Display and boards from Waveshare. +// Requires HW SPI and Adafruit_GFX. Caution: the e-paper panels require 3.3V supply AND data lines! +// +// based on Demo Example from Good Display: https://www.good-display.com/comp/xcompanyFile/downloadNew.do?appId=24&fid=1435&id=1018 +// Panel: GDEY0266F51H : https://www.good-display.com/product/467.html +// Panel specs: https://v4.cecdn.yun300.cn/100001_1909185148/GDEY0266F51H.pdf +// Controller: JD79667 : no specs, see panel specs for command list subset +// +// Author: Jean-Marc Zingg +// +// Version: see library.properties +// +// Library: https://github.com/ZinggJM/GxEPD2 + +#ifndef _GxEPD2_266c_GDEY0266F51H_H_ +#define _GxEPD2_266c_GDEY0266F51H_H_ + +#include "../GxEPD2_EPD.h" + +class GxEPD2_266c_GDEY0266F51H : public GxEPD2_EPD +{ + public: + // attributes + static const uint16_t WIDTH = 184; + static const uint16_t WIDTH_VISIBLE = WIDTH; + static const uint16_t HEIGHT = 360; + static const GxEPD2::Panel panel = GxEPD2::GDEY0266F51H; + static const bool hasColor = true; + static const bool hasPartialUpdate = true; // can be switched off + static const bool hasFastPartialUpdate = false; + static const uint16_t power_on_time = 200; // ms, e.g. 158625us + static const uint16_t power_off_time = 100; // ms, e.g. 81326us + static const uint16_t full_refresh_time = 25000; // ms, e.g. 26028097us + static const uint16_t partial_refresh_time = 25000; // ms, e.g. 26028097us + // constructor + GxEPD2_266c_GDEY0266F51H(int16_t cs, int16_t dc, int16_t rst, int16_t busy); + // methods (virtual) + // Support for Bitmaps (Sprites) to Controller Buffer and to Screen + void clearScreen(uint8_t value = 0xFF); // init controller memory and screen (default white) + void clearScreen(uint8_t black_value, uint8_t color_value); // init controller memory and screen + void writeScreenBuffer(uint8_t value = 0xFF); // init controller memory (default white) + void writeScreenBuffer(uint8_t black_value, uint8_t color_value); // init controller memory + // write to controller memory, without screen refresh; x and w should be multiple of 8 + void writeImage(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void writeImagePart(const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void writeImage(const uint8_t* black, const uint8_t* color, int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void writeImagePart(const uint8_t* black, const uint8_t* color, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + // write sprite of native data to controller memory, without screen refresh; x and w should be multiple of 8 + void writeNative(const uint8_t* data1, const uint8_t* data2, int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void writeNativePart(const uint8_t* data1, const uint8_t* data2, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + // write to controller memory, with screen refresh; x and w should be multiple of 8 + void drawImage(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void drawImagePart(const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void drawImage(const uint8_t* black, const uint8_t* color, int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void drawImagePart(const uint8_t* black, const uint8_t* color, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + // write sprite of native data to controller memory, with screen refresh; x and w should be multiple of 8 + void drawNative(const uint8_t* data1, const uint8_t* data2, int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void refresh(bool partial_update_mode = false); // screen refresh from controller memory to full screen + void refresh(int16_t x, int16_t y, int16_t w, int16_t h); // screen refresh from controller memory, partial screen + void powerOff(); // turns off generation of panel driving voltages, avoids screen fading over time + void hibernate(); // turns powerOff() and sets controller to deep sleep for minimum power use, ONLY if wakeable by RST (rst >= 0) + void setPaged(); // for GxEPD2_154c paged workaround, also for 4-color for use with hasPartialUpdate = false + private: + void _refresh(bool partial_update_mode); + void _setPartialRamArea(uint16_t x, uint16_t y, uint16_t w, uint16_t h, bool partial_mode = true); + void _PowerOn(); + void _PowerOff(); + void _InitDisplay(); + private: + bool _paged; +}; + +#endif diff --git a/src/epd4c/GxEPD2_290c_GDEY029F51H.cpp b/src/epd4c/GxEPD2_290c_GDEY029F51H.cpp new file mode 100644 index 00000000..ff455c7e --- /dev/null +++ b/src/epd4c/GxEPD2_290c_GDEY029F51H.cpp @@ -0,0 +1,975 @@ +// Display Library for SPI e-paper panels from Dalian Good Display and boards from Waveshare. +// Requires HW SPI and Adafruit_GFX. Caution: the e-paper panels require 3.3V supply AND data lines! +// +// based on Demo Example from Good Display: https://www.good-display.com/comp/xcompanyFile/downloadNew.do?appId=24&fid=1785&id=1151 +// Panel: GDEY029F51H : https://www.good-display.com/product/464.html +// Controller: JD79667, no specs, see GDEY0266F51H panel specs for command list subset +// +// Author: Jean-Marc Zingg +// +// Version: see library.properties +// +// Library: https://github.com/ZinggJM/GxEPD2 + +#include "GxEPD2_290c_GDEY029F51H.h" + +GxEPD2_290c_GDEY029F51H::GxEPD2_290c_GDEY029F51H(int16_t cs, int16_t dc, int16_t rst, int16_t busy) : + GxEPD2_EPD(cs, dc, rst, busy, LOW, 50000000, WIDTH, HEIGHT, panel, hasColor, hasPartialUpdate, hasFastPartialUpdate) +{ + _paged = false; +} + +void GxEPD2_290c_GDEY029F51H::clearScreen(uint8_t value) +{ + clearScreen(value, 0xFF); +} + +void GxEPD2_290c_GDEY029F51H::clearScreen(uint8_t black_value, uint8_t color_value) +{ + writeScreenBuffer(black_value, color_value); + refresh(); +} + +void GxEPD2_290c_GDEY029F51H::writeScreenBuffer(uint8_t value) +{ + writeScreenBuffer(value, 0xFF); +} + +void GxEPD2_290c_GDEY029F51H::writeScreenBuffer(uint8_t black_value, uint8_t color_value) +{ + //Serial.println("writeScreenBuffer"); + if (!_init_display_done) _InitDisplay(); + _writeCommand(0x10); + _startTransfer(); + for (uint32_t i = 0; i < uint32_t(WIDTH) * uint32_t(HEIGHT) / 4; i++) + { + _transfer(0xFF == black_value ? 0x55 : 0x00); + } + _endTransfer(); + _initial_write = false; // initial full screen buffer clean done +} + +void GxEPD2_290c_GDEY029F51H::writeImage(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + //Serial.print("writeImage("); Serial.print(x); Serial.print(", "); Serial.print(y); Serial.print(", "); + //Serial.print(w); Serial.print(", "); Serial.print(h); Serial.println(")"); + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 + if (!_init_display_done) _InitDisplay(); + if (_initial_write) writeScreenBuffer(); + if (hasPartialUpdate) + { + int16_t wb = (w + 7) / 8; // width bytes, bitmaps are padded + x -= x % 8; // byte boundary + w = wb * 8; // byte boundary + int16_t x1 = x < 0 ? 0 : x; // limit + int16_t y1 = y < 0 ? 0 : y; // limit + int16_t w1 = x + w < int16_t(WIDTH) ? w : int16_t(WIDTH) - x; // limit + int16_t h1 = y + h < int16_t(HEIGHT) ? h : int16_t(HEIGHT) - y; // limit + int16_t dx = x1 - x; + int16_t dy = y1 - y; + w1 -= dx; + h1 -= dy; + if ((w1 <= 0) || (h1 <= 0)) return; + _setPartialRamArea(x1, y1, w1, h1); + _writeCommand(0x10); + _startTransfer(); + for (int16_t i = 0; i < h1; i++) + { + for (int16_t j = 0; j < w1 / 8; j++) + { + uint8_t data = 0xFF; + // use wb, h of bitmap for index! + uint32_t idx = mirror_y ? j + dx / 8 + uint32_t((h - 1 - (i + dy))) * wb : j + dx / 8 + uint32_t(i + dy) * wb; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + data = pgm_read_byte(&bitmap[idx]); +#else + data = bitmap[idx]; +#endif + } + else + { + data = bitmap[idx]; + } + if (invert) data = ~data; + for (int16_t k = 0; k < 2; k++) + { + uint8_t data2 = (data & 0x80 ? 0x40 : 0x00) | (data & 0x40 ? 0x10 : 0x00) | + (data & 0x20 ? 0x04 : 0x00) | (data & 0x10 ? 0x01 : 0x00); + data <<= 4; + _transfer(data2); + } + } + } + _endTransfer(); + } + else + { + if (_paged && (x == 0) && (w == int16_t(WIDTH)) && (h < int16_t(HEIGHT))) + { + //Serial.println("paged"); + _startTransfer(); + for (uint32_t i = 0; i < uint32_t(WIDTH) * uint32_t(h) / 8; i++) + { + uint8_t data = bitmap[i]; + for (int16_t k = 0; k < 2; k++) + { + uint8_t data2 = (data & 0x80 ? 0x40 : 0x00) | (data & 0x40 ? 0x10 : 0x00) | + (data & 0x20 ? 0x04 : 0x00) | (data & 0x10 ? 0x01 : 0x00); + data <<= 4; + _transfer(data2); + } + } + _endTransfer(); + if (y + h == HEIGHT) // last page + { + //Serial.println("paged ended"); + _paged = false; + } + } + else + { + _paged = false; + int16_t wb = (w + 7) / 8; // width bytes, bitmaps are padded + x -= x % 8; // byte boundary + w = wb * 8; // byte boundary + if ((w <= 0) || (h <= 0)) return; + _writeCommand(0x10); + _startTransfer(); + for (int16_t i = 0; i < int16_t(HEIGHT); i++) + { + for (int16_t j = 0; j < int16_t(WIDTH); j += 8) + { + uint8_t data = 0xFF; + if ((j >= x) && (j <= x + w) && (i >= y) && (i < y + h)) + { + uint32_t idx = mirror_y ? (j - x) / 8 + uint32_t((h - 1 - (i - y))) * wb : (j - x) / 8 + uint32_t(i - y) * wb; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + data = pgm_read_byte(&bitmap[idx]); +#else + data = bitmap[idx]; +#endif + } + else + { + data = bitmap[idx]; + } + if (invert) data = ~data; + } + for (int16_t k = 0; k < 2; k++) + { + uint8_t data2 = (data & 0x80 ? 0x40 : 0x00) | (data & 0x40 ? 0x10 : 0x00) | + (data & 0x20 ? 0x04 : 0x00) | (data & 0x10 ? 0x01 : 0x00); + data <<= 4; + _transfer(data2); + } + } + } + _endTransfer(); + } + } + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 +} + +void GxEPD2_290c_GDEY029F51H::writeImage(const uint8_t* black, const uint8_t* color, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + if (!black && !color) return; + if (!color) return writeImage(black, x, y, w, h, invert, mirror_y, pgm); + //Serial.print("writeImage("); Serial.print(x); Serial.print(", "); Serial.print(y); Serial.print(", "); + //Serial.print(w); Serial.print(", "); Serial.print(h); Serial.println(")"); + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 + if (!_init_display_done) _InitDisplay(); + if (_initial_write) writeScreenBuffer(); + if (hasPartialUpdate) + { + int16_t wb = (w + 7) / 8; // width bytes, bitmaps are padded + x -= x % 8; // byte boundary + w = wb * 8; // byte boundary + int16_t x1 = x < 0 ? 0 : x; // limit + int16_t y1 = y < 0 ? 0 : y; // limit + int16_t w1 = x + w < int16_t(WIDTH) ? w : int16_t(WIDTH) - x; // limit + int16_t h1 = y + h < int16_t(HEIGHT) ? h : int16_t(HEIGHT) - y; // limit + int16_t dx = x1 - x; + int16_t dy = y1 - y; + w1 -= dx; + h1 -= dy; + if ((w1 <= 0) || (h1 <= 0)) return; + _setPartialRamArea(x1, y1, w1, h1); + _writeCommand(0x10); + _startTransfer(); + for (int16_t i = 0; i < h1; i++) + { + for (int16_t j = 0; j < w1 / 8; j++) + { + uint8_t black_data = 0xFF, color_data = 0xFF; + // use wb, h of bitmap for index! + uint32_t idx = mirror_y ? j + dx / 8 + uint32_t((h - 1 - (i + dy))) * wb : j + dx / 8 + uint32_t(i + dy) * wb; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + black_data = pgm_read_byte(&black[idx]); + color_data = pgm_read_byte(&color[idx]); +#else + black_data = black[idx]; + color_data = color[idx]; +#endif + } + else + { + black_data = black[idx]; + color_data = color[idx]; + } + if (invert) + { + black_data = ~black_data; + color_data = ~color_data; + } + for (int16_t k = 0; k < 2; k++) + { + uint8_t out_data = 0x00; + for (int16_t l = 0; l < 4; l++) + { + out_data <<= 2; + if (!(color_data & 0x80)) out_data |= 0x03; // red + else out_data |= black_data & 0x80 ? 0x01 : 0x00; // white or black + black_data <<= 1; + color_data <<= 1; + } + _transfer(out_data); + } + } + } + _endTransfer(); + } + else + { + if (_paged && (x == 0) && (w == int16_t(WIDTH)) && (h < int16_t(HEIGHT))) + { + //Serial.println("paged"); + _startTransfer(); + for (uint32_t i = 0; i < uint32_t(WIDTH) * uint32_t(h) / 8; i++) + { + uint8_t black_data = black[i]; + uint8_t color_data = color[i]; + for (int16_t k = 0; k < 2; k++) + { + uint8_t out_data = 0x00; + for (int16_t l = 0; l < 4; l++) + { + out_data <<= 2; + if (!(color_data & 0x80)) out_data |= 0x03; // red + else out_data |= black_data & 0x80 ? 0x01 : 0x00; // white or black + black_data <<= 1; + color_data <<= 1; + } + _transfer(out_data); + } + } + _endTransfer(); + if (y + h == HEIGHT) // last page + { + //Serial.println("paged ended"); + _paged = false; + } + } + else + { + _paged = false; + int16_t wb = (w + 7) / 8; // width bytes, bitmaps are padded + x -= x % 8; // byte boundary + w = wb * 8; // byte boundary + if ((w <= 0) || (h <= 0)) return; + _writeCommand(0x10); + _startTransfer(); + for (int16_t i = 0; i < int16_t(HEIGHT); i++) + { + for (int16_t j = 0; j < int16_t(WIDTH); j += 8) + { + uint8_t black_data = 0xFF, color_data = 0xFF; + if ((j >= x) && (j < x + w) && (i >= y) && (i < y + h)) + { + uint32_t idx = mirror_y ? (j - x) / 8 + uint32_t((h - 1 - (i - y))) * wb : (j - x) / 8 + uint32_t(i - y) * wb; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + black_data = pgm_read_byte(&black[idx]); + color_data = pgm_read_byte(&color[idx]); +#else + black_data = black[idx]; + color_data = color[idx]; +#endif + } + else + { + black_data = black[idx]; + color_data = color[idx]; + } + if (invert) + { + black_data = ~black_data; + color_data = ~color_data; + } + } + for (int16_t k = 0; k < 2; k++) + { + uint8_t out_data = 0x00; + for (int16_t l = 0; l < 4; l++) + { + out_data <<= 2; + if (!(color_data & 0x80)) out_data |= 0x03; // red + else out_data |= black_data & 0x80 ? 0x01 : 0x00; // white or black + black_data <<= 1; + color_data <<= 1; + } + _transfer(out_data); + } + } + } + _endTransfer(); + } + } + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 +} + +void GxEPD2_290c_GDEY029F51H::writeImagePart(const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + //Serial.print("writeImagePart("); Serial.print(x_part); Serial.print(", "); Serial.print(y_part); Serial.print(", "); + //Serial.print(w_bitmap); Serial.print(", "); Serial.print(h_bitmap); Serial.print(", "); + //Serial.print(x); Serial.print(", "); Serial.print(y); Serial.print(", "); + //Serial.print(w); Serial.print(", "); Serial.print(h); Serial.println(")"); + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 + if (!_init_display_done) _InitDisplay(); + if (_initial_write) writeScreenBuffer(); + if ((w_bitmap < 0) || (h_bitmap < 0) || (w < 0) || (h < 0)) return; + if ((x_part < 0) || (x_part >= w_bitmap)) return; + if ((y_part < 0) || (y_part >= h_bitmap)) return; + int16_t wb_bitmap = (w_bitmap + 7) / 8; // width bytes, bitmaps are padded + x_part -= x_part % 8; // byte boundary + w = w_bitmap - x_part < w ? w_bitmap - x_part : w; // limit + h = h_bitmap - y_part < h ? h_bitmap - y_part : h; // limit + // make x, w multiple of 8 + w += x % 8; // adjust for byte boundary of x + x -= x % 8; // byte boundary ox + w = 8 * ((w + 7) / 8); // byte boundary, bitmaps are padded + int16_t x1 = x < 0 ? 0 : x; // limit + int16_t y1 = y < 0 ? 0 : y; // limit + int16_t w1 = x + w < int16_t(WIDTH) ? w : int16_t(WIDTH) - x; // limit + int16_t h1 = y + h < int16_t(HEIGHT) ? h : int16_t(HEIGHT) - y; // limit + int16_t dx = x1 - x; + int16_t dy = y1 - y; + w1 -= dx; + h1 -= dy; + if ((w1 <= 0) || (h1 <= 0)) return; + if (hasPartialUpdate) + { + _setPartialRamArea(x1, y1, w1, h1); + _writeCommand(0x10); + _startTransfer(); + for (int16_t i = 0; i < h1; i++) + { + for (int16_t j = 0; j < w1 / 8; j++) + { + uint8_t data; + // use wb_bitmap, h_bitmap of bitmap for index! + uint32_t idx = mirror_y ? x_part / 8 + j + dx / 8 + uint32_t((h_bitmap - 1 - (y_part + i + dy))) * wb_bitmap : x_part / 8 + j + dx / 8 + uint32_t(y_part + i + dy) * wb_bitmap; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + data = pgm_read_byte(&bitmap[idx]); +#else + data = bitmap[idx]; +#endif + } + else + { + data = bitmap[idx]; + } + if (invert) data = ~data; + for (int16_t k = 0; k < 2; k++) + { + uint8_t data2 = (data & 0x80 ? 0x40 : 0x00) | (data & 0x40 ? 0x10 : 0x00) | + (data & 0x20 ? 0x04 : 0x00) | (data & 0x10 ? 0x01 : 0x00); + data <<= 4; + _transfer(data2); + } + } + } + _endTransfer(); + } + else + { + _writeCommand(0x10); + _startTransfer(); + for (int16_t i = 0; i < int16_t(HEIGHT); i++) + { + for (int16_t j = 0; j < int16_t(WIDTH); j += 8) + { + uint8_t data = 0xFF; + if ((j >= x1) && (j < x1 + w) && (i >= y1) && (i < y1 + h)) + { + // use wb_bitmap, h_bitmap of bitmap for index! + uint32_t idx = mirror_y ? (x_part + j - x1) / 8 + uint32_t((h_bitmap - 1 - (y_part + i - y1))) * wb_bitmap : (x_part + j - x1) / 8 + uint32_t(y_part + i - y1) * wb_bitmap; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + data = pgm_read_byte(&bitmap[idx]); +#else + data = bitmap[idx]; +#endif + } + else + { + data = bitmap[idx]; + } + if (invert) data = ~data; + } + for (int16_t k = 0; k < 2; k++) + { + uint8_t data2 = (data & 0x80 ? 0x40 : 0x00) | (data & 0x40 ? 0x10 : 0x00) | + (data & 0x20 ? 0x04 : 0x00) | (data & 0x10 ? 0x01 : 0x00); + data <<= 4; + _transfer(data2); + } + } + } + _endTransfer(); + } + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 +} + +void GxEPD2_290c_GDEY029F51H::writeImagePart(const uint8_t* black, const uint8_t* color, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + //Serial.print("writeImagePart("); Serial.print(x_part); Serial.print(", "); Serial.print(y_part); Serial.print(", "); + //Serial.print(w_bitmap); Serial.print(", "); Serial.print(h_bitmap); Serial.print(", "); + //Serial.print(x); Serial.print(", "); Serial.print(y); Serial.print(", "); + //Serial.print(w); Serial.print(", "); Serial.print(h); Serial.println(")"); + if (!black && !color) return; + if (!color) return writeImagePart(black, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm); + if (!_init_display_done) _InitDisplay(); + if (_initial_write) writeScreenBuffer(); + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 + if ((w_bitmap < 0) || (h_bitmap < 0) || (w < 0) || (h < 0)) return; + if ((x_part < 0) || (x_part >= w_bitmap)) return; + if ((y_part < 0) || (y_part >= h_bitmap)) return; + int16_t wb_bitmap = (w_bitmap + 7) / 8; // width bytes, bitmaps are padded + x_part -= x_part % 8; // byte boundary + w = w_bitmap - x_part < w ? w_bitmap - x_part : w; // limit + h = h_bitmap - y_part < h ? h_bitmap - y_part : h; // limit + // make x, w multiple of 8 + w += x % 8; // adjust for byte boundary of x + x -= x % 8; // byte boundary ox + w = 8 * ((w + 7) / 8); // byte boundary, bitmaps are padded + int16_t x1 = x < 0 ? 0 : x; // limit + int16_t y1 = y < 0 ? 0 : y; // limit + int16_t w1 = x + w < int16_t(WIDTH) ? w : int16_t(WIDTH) - x; // limit + int16_t h1 = y + h < int16_t(HEIGHT) ? h : int16_t(HEIGHT) - y; // limit + int16_t dx = x1 - x; + int16_t dy = y1 - y; + w1 -= dx; + h1 -= dy; + if ((w1 <= 0) || (h1 <= 0)) return; + if (hasPartialUpdate) + { + _setPartialRamArea(x1, y1, w1, h1); + _writeCommand(0x10); + _startTransfer(); + for (int16_t i = 0; i < h1; i++) + { + for (int16_t j = 0; j < w1 / 8; j++) + { + uint8_t black_data = 0xFF, color_data = 0xFF; + // use wb_bitmap, h_bitmap of bitmap for index! + uint32_t idx = mirror_y ? x_part / 8 + j + dx / 8 + uint32_t((h_bitmap - 1 - (y_part + i + dy))) * wb_bitmap : x_part / 8 + j + dx / 8 + uint32_t(y_part + i + dy) * wb_bitmap; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + black_data = pgm_read_byte(&black[idx]); + color_data = pgm_read_byte(&color[idx]); +#else + black_data = black[idx]; + color_data = color[idx]; +#endif + } + else + { + black_data = black[idx]; + color_data = color[idx]; + } + for (int16_t k = 0; k < 2; k++) + { + uint8_t out_data = 0x00; + for (int16_t l = 0; l < 4; l++) + { + out_data <<= 2; + if (!(color_data & 0x80)) out_data |= 0x03; // red + else out_data |= black_data & 0x80 ? 0x01 : 0x00; // white or black + black_data <<= 1; + color_data <<= 1; + } + _transfer(out_data); + } + } + } + _endTransfer(); + } + else + { + _writeCommand(0x10); + _startTransfer(); + for (int16_t i = 0; i < int16_t(HEIGHT); i++) + { + for (int16_t j = 0; j < int16_t(WIDTH); j += 8) + { + uint8_t black_data = 0xFF, color_data = 0xFF; + if ((j >= x1) && (j < x1 + w) && (i >= y1) && (i < y1 + h)) + { + // use wb_bitmap, h_bitmap of bitmap for index! + uint32_t idx = mirror_y ? (x_part + j - x1) / 8 + uint32_t((h_bitmap - 1 - (y_part + i - y1))) * wb_bitmap : (x_part + j - x1) / 8 + uint32_t(y_part + i - y1) * wb_bitmap; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + black_data = pgm_read_byte(&black[idx]); + color_data = pgm_read_byte(&color[idx]); +#else + black_data = black[idx]; + color_data = color[idx]; +#endif + } + else + { + black_data = black[idx]; + color_data = color[idx]; + } + if (invert) + { + black_data = ~black_data; + color_data = ~color_data; + } + } + for (int16_t k = 0; k < 2; k++) + { + uint8_t out_data = 0x00; + for (int16_t l = 0; l < 4; l++) + { + out_data <<= 2; + if (!(color_data & 0x80)) out_data |= 0x03; // red + else out_data |= black_data & 0x80 ? 0x01 : 0x00; // white or black + black_data <<= 1; + color_data <<= 1; + } + _transfer(out_data); + } + } + } + _endTransfer(); + } + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 +} + +void GxEPD2_290c_GDEY029F51H::writeNative(const uint8_t* data1, const uint8_t* data2, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + if (!data1) return; + //Serial.print("writeNative("); Serial.print(x); Serial.print(", "); Serial.print(y); Serial.print(", "); + //Serial.print(w); Serial.print(", "); Serial.print(h); Serial.println(")"); + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 + if (!_init_display_done) _InitDisplay(); + if (_initial_write) writeScreenBuffer(); + if (hasPartialUpdate) + { + int16_t wb = (w + 3) / 4; // width bytes, bitmaps are padded + x -= x % 4; // byte boundary + w = wb * 4; // byte boundary + int16_t x1 = x < 0 ? 0 : x; // limit + int16_t y1 = y < 0 ? 0 : y; // limit + int16_t w1 = x + w < int16_t(WIDTH) ? w : int16_t(WIDTH) - x; // limit + int16_t h1 = y + h < int16_t(HEIGHT) ? h : int16_t(HEIGHT) - y; // limit + int16_t dx = x1 - x; + int16_t dy = y1 - y; + w1 -= dx; + h1 -= dy; + if ((w1 <= 0) || (h1 <= 0)) return; + _setPartialRamArea(x1, y1, w1, h1); + _writeCommand(0x10); + _startTransfer(); + for (int16_t i = 0; i < h1; i++) + { + for (int16_t j = 0; j < w1 / 4; j++) + { + uint8_t data; + // use wb, h of bitmap for index! + uint32_t idx = mirror_y ? j + dx / 4 + uint32_t((h - 1 - (i + dy))) * wb : j + dx / 4 + uint32_t(i + dy) * wb; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + data = pgm_read_byte(&data1[idx]); +#else + data = data1[idx]; +#endif + } + else + { + data = data1[idx]; + } + if (invert) data = ~data; + _transfer(data); + } + } + _endTransfer(); + } + else + { + if (_paged && (x == 0) && (w == int16_t(WIDTH)) && (h < int16_t(HEIGHT))) + { + //Serial.println("paged"); + _startTransfer(); + for (uint32_t i = 0; i < uint32_t(WIDTH) * uint32_t(h) / 4; i++) + { + uint8_t data = data1[i]; + _transfer(data); + } + _endTransfer(); + if (y + h == HEIGHT) // last page + { + //Serial.println("paged ended"); + _paged = false; + } + } + else + { + //Serial.println("not paged"); + _paged = false; + int16_t wb = (w + 3) / 4; // width bytes, bitmaps are padded + x -= x % 4; // byte boundary + w = wb * 4; // byte boundary + if ((w <= 0) || (h <= 0)) return; + _writeCommand(0x10); + _startTransfer(); + for (int16_t i = 0; i < int16_t(HEIGHT); i++) + { + for (int16_t j = 0; j < int16_t(WIDTH); j += 4) + { + uint8_t data = 0x55; + if (data1) + { + if ((j >= x) && (j < x + w) && (i >= y) && (i < y + h)) + { + uint32_t idx = mirror_y ? (j - x) / 4 + uint32_t((h - 1 - (i - y))) * wb : (j - x) / 4 + uint32_t(i - y) * wb; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + data = pgm_read_byte(&data1[idx]); +#else + data = data1[idx]; +#endif + } + else + { + data = data1[idx]; + } + if (invert) data = ~data; + } + } + _transfer(data); + } + } + _endTransfer(); + } + } + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 +} + +void GxEPD2_290c_GDEY029F51H::writeNativePart(const uint8_t* data1, const uint8_t* data2, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + if (!data1) return; + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 + if (!_init_display_done) _InitDisplay(); + if (_initial_write) writeScreenBuffer(); + if ((w_bitmap < 0) || (h_bitmap < 0) || (w < 0) || (h < 0)) return; + if ((x_part < 0) || (x_part >= w_bitmap)) return; + if ((y_part < 0) || (y_part >= h_bitmap)) return; + int16_t wb_bitmap = (w_bitmap + 3) / 4; // width bytes, bitmaps are padded + x_part -= x_part % 4; // byte boundary + w = w_bitmap - x_part < w ? w_bitmap - x_part : w; // limit + h = h_bitmap - y_part < h ? h_bitmap - y_part : h; // limit + w += x % 4; // adjust for byte boundary of x + x -= x % 4; // byte boundary + w = 4 * ((w + 3) / 4); // byte boundary, bitmaps are padded + int16_t x1 = x < 0 ? 0 : x; // limit + int16_t y1 = y < 0 ? 0 : y; // limit + int16_t w1 = x + w < int16_t(WIDTH) ? w : int16_t(WIDTH) - x; // limit + int16_t h1 = y + h < int16_t(HEIGHT) ? h : int16_t(HEIGHT) - y; // limit + int16_t dx = x1 - x; + int16_t dy = y1 - y; + w1 -= dx; + h1 -= dy; + if ((w1 <= 0) || (h1 <= 0)) return; + if (hasPartialUpdate) + { + _setPartialRamArea(x1, y1, w1, h1); + _writeCommand(0x10); + _startTransfer(); + for (int16_t i = 0; i < h1; i++) + { + for (int16_t j = 0; j < w1 / 4; j++) + { + uint8_t data; + // use wb_bitmap, h_bitmap of bitmap for index! + uint32_t idx = mirror_y ? x_part / 4 + j + dx / 4 + uint32_t((h_bitmap - 1 - (y_part + i + dy))) * wb_bitmap : x_part / 4 + j + dx / 4 + uint32_t(y_part + i + dy) * wb_bitmap; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + data = pgm_read_byte(&data1[idx]); +#else + data = data1[idx]; +#endif + } + else + { + data = data1[idx]; + } + if (invert) data = ~data; + _transfer(data); + } + } + _endTransfer(); + } + else + { + _writeCommand(0x10); + _startTransfer(); + for (int16_t i = 0; i < int16_t(HEIGHT); i++) + { + for (int16_t j = 0; j < int16_t(WIDTH); j += 4) + { + uint8_t data = 0x55; + if ((j >= x1) && (j < x1 + w) && (i >= y1) && (i < y1 + h)) + { + // use wb_bitmap, h_bitmap of bitmap for index! + uint32_t idx = mirror_y ? (x_part + j - x1) / 4 + uint32_t((h_bitmap - 1 - (y_part + i - y1))) * wb_bitmap : (x_part + j - x1) / 4 + uint32_t(y_part + i - y1) * wb_bitmap; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + data = pgm_read_byte(&data1[idx]); +#else + data = data1[idx]; +#endif + } + else + { + data = data1[idx]; + } + if (invert) data = ~data; + } + _transfer(data); + } + } + _endTransfer(); + } + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 +} + +void GxEPD2_290c_GDEY029F51H::drawImage(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + writeImage(bitmap, x, y, w, h, invert, mirror_y, pgm); + refresh(x, y, w, h); +} + +void GxEPD2_290c_GDEY029F51H::drawImagePart(const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + writeImagePart(bitmap, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm); + refresh(x, y, w, h); +} + +void GxEPD2_290c_GDEY029F51H::drawImage(const uint8_t* black, const uint8_t* color, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + writeImage(black, color, x, y, w, h, invert, mirror_y, pgm); + refresh(x, y, w, h); +} + +void GxEPD2_290c_GDEY029F51H::drawImagePart(const uint8_t* black, const uint8_t* color, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + writeImagePart(black, color, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm); + refresh(x, y, w, h); +} + +void GxEPD2_290c_GDEY029F51H::drawNative(const uint8_t* data1, const uint8_t* data2, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + writeNative(data1, data2, x, y, w, h, invert, mirror_y, pgm); + refresh(x, y, w, h); +} + +void GxEPD2_290c_GDEY029F51H::refresh(bool partial_update_mode) +{ + if (hasPartialUpdate) _setPartialRamArea(0, 0, WIDTH, HEIGHT); + _refresh(partial_update_mode); +} + +void GxEPD2_290c_GDEY029F51H::refresh(int16_t x, int16_t y, int16_t w, int16_t h) +{ + // intersection with screen + int16_t w1 = x < 0 ? w + x : w; // reduce + int16_t h1 = y < 0 ? h + y : h; // reduce + int16_t x1 = x < 0 ? 0 : x; // limit + int16_t y1 = y < 0 ? 0 : y; // limit + w1 = x1 + w1 < int16_t(WIDTH) ? w1 : int16_t(WIDTH) - x1; // limit + h1 = y1 + h1 < int16_t(HEIGHT) ? h1 : int16_t(HEIGHT) - y1; // limit + if ((w1 <= 0) || (h1 <= 0)) return; + // make x1, w1 multiple of 4 + w1 += x1 % 4; + if (w1 % 4 > 0) w1 += 4 - w1 % 4; + x1 -= x1 % 4; + bool fullscreen = ((x1 == 0) && (y1 == 0) && (w1 == WIDTH) && (h1 == HEIGHT)); + if (hasPartialUpdate) _setPartialRamArea(x1, y1, w1, h1, !fullscreen); + _refresh(!fullscreen); +} + +void GxEPD2_290c_GDEY029F51H::powerOff() +{ + _PowerOff(); +} + +void GxEPD2_290c_GDEY029F51H::hibernate() +{ + _PowerOff(); + if (_rst >= 0) + { + _writeCommand(0x07); // deep sleep + _writeData(0xA5); // control code + _hibernating = true; + _init_display_done = false; + } +} + +void GxEPD2_290c_GDEY029F51H::setPaged() +{ + if (!hasPartialUpdate) + { + _paged = true; + _InitDisplay(); + _writeCommand(0x10); + } +} + +void GxEPD2_290c_GDEY029F51H::_refresh(bool partial_update_mode) +{ + _writeCommand(0x50); // VCOM and Data Interval Setting + _writeData(partial_update_mode ? 0x97 : 0x37); // floating or white + _writeCommand(0x12); // Display Refresh + _writeData(0x00); + delay(1); + _waitWhileBusy("_refresh", full_refresh_time); + //_power_is_on = false; // not needed + _init_display_done = false; // needed +} + +void GxEPD2_290c_GDEY029F51H::_setPartialRamArea(uint16_t x, uint16_t y, uint16_t w, uint16_t h, bool partial_mode) +{ + //Serial.print("_setPartialRamArea("); Serial.print(x); Serial.print(", "); Serial.print(y); Serial.print(", "); + //Serial.print(w); Serial.print(", "); Serial.print(h); Serial.println(")"); + _writeCommand(0x83); + _writeData(x / 256); + _writeData(x % 256); + _writeData((x + w - 1) / 256); + _writeData((x + w - 1) % 256); + _writeData(y / 256); + _writeData(y % 256); + _writeData((y + h - 1) / 256); + _writeData((y + h - 1) % 256); + _writeData(partial_mode ? 0x01 : 0x00); +} + +void GxEPD2_290c_GDEY029F51H::_PowerOn() +{ + if (!_power_is_on) + { + _writeCommand(0x04); + _waitWhileBusy("_PowerOn", power_on_time); + } + _power_is_on = true; +} + +void GxEPD2_290c_GDEY029F51H::_PowerOff() +{ + if (_power_is_on) + { + _writeCommand(0x02); + _writeData(0x00); + _waitWhileBusy("_PowerOff", power_off_time); + } + _power_is_on = false; +} + +void GxEPD2_290c_GDEY029F51H::_InitDisplay() +{ + //Serial.println("_InitDisplay"); + // initcode from Good Dispay demo for GDEY029F51H + if ((_rst >= 0) && (_hibernating || _initial_write)) + { + digitalWrite(_rst, HIGH); + delay(20); // At least 20ms delay + digitalWrite(_rst, LOW); // Module reset + delay(2); // At least 40ms delay, 2ms for WS "clever" reset + digitalWrite(_rst, HIGH); + delay(2); // At least 50ms delay (32ms measured) + _waitWhileBusy("_InitDisplay reset", power_on_time); + _hibernating = false; + _power_is_on = false; + } + _writeCommand(0x4D); // ?? + _writeData(0x78); + _writeCommand(0x00); // PSR + _writeData(0x0F); // default res (176x296)), scan up, shift left, booster on, no effect (no RST) + _writeData(0x29); // LUT from MPT, no add scan, VCOM default, TS_AUTO, VGN default, VCOM default, VCOM floating after refresh + _writeCommand(0x01); // PWRR + _writeData(0x07); // VMODE default, VSPL internal, VSP/VSN internal, VGP/VGN internal + _writeData(0x00); // VGP/VGN 20V + _writeCommand(0x03); // POFS + _writeData(0x10); // T_VDGP_OFF 40ms, T_VDS_OFF 20ms + _writeData(0x54); // VGP_LEN 2500ms, VGP_EXT 2000ms + _writeData(0x44); // XON_DLY 2000ms, XON_LEN 2000ms + _writeCommand(0x06); // BTST Booster Soft Start + _writeData(0x05); // PHB_SFT, PHA_SFT + _writeData(0x00); // PHA_ON + _writeData(0x3F); // PHA_OFF + _writeData(0x0A); // PHB_ON + _writeData(0x25); // PHB_OFF + _writeData(0x12); // PHC_ON + _writeData(0x1A); // PHC_OFF + _writeCommand(0x50); // CDI + _writeData(0x37); // (VBD 1, DDX 1) Gray1, 10hsync + //_writeData(0x17); // black border + //_writeData(0x37); // white border (default) + //_writeData(0x57); // yellow border + //_writeData(0x77); // red border + //_writeData(0x97); // floating border + _writeCommand(0x60); // TCON + _writeData(0x02); // ? + _writeData(0x02); // ? + _writeCommand(0x61); // TRES + _writeData(WIDTH / 256); // Source_BITS_H + _writeData(WIDTH % 256); // Source_BITS_L + _writeData(HEIGHT / 256); // Gate_BITS_H + _writeData(HEIGHT % 256); // Gate_BITS_L + _writeCommand(0xE7); // ?? + _writeData(0x1C); + _writeCommand(0xE3); // PWS + _writeData(0x22); + _writeCommand(0xB4); // LVD + _writeData(0xD0); + _writeCommand(0xB5); // ?? + _writeData(0x03); + _writeCommand(0xE9); // ?? + _writeData(0x01); + _writeCommand(0x30); // PLL + _writeData(0x08); // Dynamic frame rate enabled + _PowerOn(); + _init_display_done = true; +} diff --git a/src/epd4c/GxEPD2_290c_GDEY029F51H.h b/src/epd4c/GxEPD2_290c_GDEY029F51H.h new file mode 100644 index 00000000..dab9718d --- /dev/null +++ b/src/epd4c/GxEPD2_290c_GDEY029F51H.h @@ -0,0 +1,77 @@ +// Display Library for SPI e-paper panels from Dalian Good Display and boards from Waveshare. +// Requires HW SPI and Adafruit_GFX. Caution: the e-paper panels require 3.3V supply AND data lines! +// +// based on Demo Example from Good Display: https://www.good-display.com/comp/xcompanyFile/downloadNew.do?appId=24&fid=1785&id=1151 +// Panel: GDEY029F51H : https://www.good-display.com/product/464.html +// Controller: JD79667, no specs, see GDEY0266F51H panel specs for command list subset +// +// Author: Jean-Marc Zingg +// +// Version: see library.properties +// +// Library: https://github.com/ZinggJM/GxEPD2 + +#ifndef _GxEPD2_290c_GDEY029F51H_H_ +#define _GxEPD2_290c_GDEY029F51H_H_ + +#include "../GxEPD2_EPD.h" + +class GxEPD2_290c_GDEY029F51H : public GxEPD2_EPD +{ + public: + // attributes + static const uint16_t WIDTH = 168; + static const uint16_t WIDTH_VISIBLE = WIDTH; + static const uint16_t HEIGHT = 384; + static const GxEPD2::Panel panel = GxEPD2::GDEY029F51H; + static const bool hasColor = true; + static const bool hasPartialUpdate = true; // can be switched off + static const bool hasFastPartialUpdate = false; + static const uint16_t power_on_time = 200; // ms, e.g. 157485us + static const uint16_t power_off_time = 100; // ms, e.g. 81338us + static const uint16_t full_refresh_time = 25000; // ms, e.g. 21428295us + static const uint16_t partial_refresh_time = 25000; // ms, e.g. 21428295us + // constructor + GxEPD2_290c_GDEY029F51H(int16_t cs, int16_t dc, int16_t rst, int16_t busy); + // methods (virtual) + // Support for Bitmaps (Sprites) to Controller Buffer and to Screen + void clearScreen(uint8_t value = 0xFF); // init controller memory and screen (default white) + void clearScreen(uint8_t black_value, uint8_t color_value); // init controller memory and screen + void writeScreenBuffer(uint8_t value = 0xFF); // init controller memory (default white) + void writeScreenBuffer(uint8_t black_value, uint8_t color_value); // init controller memory + // write to controller memory, without screen refresh; x and w should be multiple of 8 + void writeImage(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void writeImagePart(const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void writeImage(const uint8_t* black, const uint8_t* color, int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void writeImagePart(const uint8_t* black, const uint8_t* color, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + // write sprite of native data to controller memory, without screen refresh; x and w should be multiple of 8 + void writeNative(const uint8_t* data1, const uint8_t* data2, int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void writeNativePart(const uint8_t* data1, const uint8_t* data2, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + // write to controller memory, with screen refresh; x and w should be multiple of 8 + void drawImage(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void drawImagePart(const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void drawImage(const uint8_t* black, const uint8_t* color, int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void drawImagePart(const uint8_t* black, const uint8_t* color, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + // write sprite of native data to controller memory, with screen refresh; x and w should be multiple of 8 + void drawNative(const uint8_t* data1, const uint8_t* data2, int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void refresh(bool partial_update_mode = false); // screen refresh from controller memory to full screen + void refresh(int16_t x, int16_t y, int16_t w, int16_t h); // screen refresh from controller memory, partial screen + void powerOff(); // turns off generation of panel driving voltages, avoids screen fading over time + void hibernate(); // turns powerOff() and sets controller to deep sleep for minimum power use, ONLY if wakeable by RST (rst >= 0) + void setPaged(); // for GxEPD2_154c paged workaround, also for 4-color for use with hasPartialUpdate = false + private: + void _refresh(bool partial_update_mode); + void _setPartialRamArea(uint16_t x, uint16_t y, uint16_t w, uint16_t h, bool partial_mode = true); + void _PowerOn(); + void _PowerOff(); + void _InitDisplay(); + private: + bool _paged; +}; + +#endif diff --git a/src/epd4c/GxEPD2_300c.cpp b/src/epd4c/GxEPD2_300c.cpp new file mode 100644 index 00000000..71d8b19d --- /dev/null +++ b/src/epd4c/GxEPD2_300c.cpp @@ -0,0 +1,933 @@ +// Display Library for SPI e-paper panels from Dalian Good Display and boards from Waveshare. +// Requires HW SPI and Adafruit_GFX. Caution: the e-paper panels require 3.3V supply AND data lines! +// +// based on Demo Example from Waveshare: https://github.com/waveshareteam/e-Paper/tree/master/Arduino/epd3in0g +// Panel: 3inch 4-Color E-Paper : https://www.waveshare.com/product/displays/e-paper/3inch-e-paper-module-g.htm +// Controller: unknown +// initcode extracted from Waveshare library file epd3in0g.cpp from: https://github.com/waveshareteam/e-Paper/tree/master/Arduino/epd3in0g +// +// Author: Jean-Marc Zingg +// +// Version: see library.properties +// +// Library: https://github.com/ZinggJM/GxEPD2 + +#include "GxEPD2_300c.h" + +GxEPD2_300c::GxEPD2_300c(int16_t cs, int16_t dc, int16_t rst, int16_t busy) : + GxEPD2_EPD(cs, dc, rst, busy, LOW, 50000000, WIDTH, HEIGHT, panel, hasColor, hasPartialUpdate, hasFastPartialUpdate) +{ + _paged = false; +} + +void GxEPD2_300c::clearScreen(uint8_t value) +{ + clearScreen(value, 0xFF); +} + +void GxEPD2_300c::clearScreen(uint8_t black_value, uint8_t color_value) +{ + writeScreenBuffer(black_value, color_value); + refresh(); +} + +void GxEPD2_300c::writeScreenBuffer(uint8_t value) +{ + writeScreenBuffer(value, 0xFF); +} + +void GxEPD2_300c::writeScreenBuffer(uint8_t black_value, uint8_t color_value) +{ + //Serial.println("writeScreenBuffer"); + if (!_init_display_done) _InitDisplay(); + _writeCommand(0x10); + for (uint32_t i = 0; i < uint32_t(WIDTH) * uint32_t(HEIGHT) / 4; i++) + { + _writeData(0xFF == black_value ? 0x55 : 0x00); + } + _initial_write = false; // initial full screen buffer clean done +} + +void GxEPD2_300c::writeImage(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + //Serial.print("writeImage("); Serial.print(x); Serial.print(", "); Serial.print(y); Serial.print(", "); + //Serial.print(w); Serial.print(", "); Serial.print(h); Serial.println(")"); + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 + if (!_init_display_done) _InitDisplay(); + if (_initial_write) writeScreenBuffer(); + if (hasPartialUpdate) + { + int16_t wb = (w + 7) / 8; // width bytes, bitmaps are padded + x -= x % 8; // byte boundary + w = wb * 8; // byte boundary + int16_t x1 = x < 0 ? 0 : x; // limit + int16_t y1 = y < 0 ? 0 : y; // limit + int16_t w1 = x + w < int16_t(WIDTH) ? w : int16_t(WIDTH) - x; // limit + int16_t h1 = y + h < int16_t(HEIGHT) ? h : int16_t(HEIGHT) - y; // limit + int16_t dx = x1 - x; + int16_t dy = y1 - y; + w1 -= dx; + h1 -= dy; + if ((w1 <= 0) || (h1 <= 0)) return; + _setPartialRamArea(x1, y1, w1, h1); + _writeCommand(0x10); + for (int16_t i = 0; i < h1; i++) + { + for (int16_t j = 0; j < w1 / 8; j++) + { + uint8_t data = 0xFF; + // use wb, h of bitmap for index! + uint32_t idx = mirror_y ? j + dx / 8 + uint32_t((h - 1 - (i + dy))) * wb : j + dx / 8 + uint32_t(i + dy) * wb; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + data = pgm_read_byte(&bitmap[idx]); +#else + data = bitmap[idx]; +#endif + } + else + { + data = bitmap[idx]; + } + if (invert) data = ~data; + for (int16_t k = 0; k < 2; k++) + { + uint8_t data2 = (data & 0x80 ? 0x40 : 0x00) | (data & 0x40 ? 0x10 : 0x00) | + (data & 0x20 ? 0x04 : 0x00) | (data & 0x10 ? 0x01 : 0x00); + data <<= 4; + _writeData(data2); + } + } + } + } + else + { + if (_paged && (x == 0) && (w == int16_t(WIDTH)) && (h < int16_t(HEIGHT))) + { + //Serial.println("paged"); + for (uint32_t i = 0; i < uint32_t(WIDTH) * uint32_t(h) / 8; i++) + { + uint8_t data = bitmap[i]; + for (int16_t k = 0; k < 2; k++) + { + uint8_t data2 = (data & 0x80 ? 0x40 : 0x00) | (data & 0x40 ? 0x10 : 0x00) | + (data & 0x20 ? 0x04 : 0x00) | (data & 0x10 ? 0x01 : 0x00); + data <<= 4; + _writeData(data2); + } + } + if (y + h == HEIGHT) // last page + { + //Serial.println("paged ended"); + _paged = false; + } + } + else + { + _paged = false; + int16_t wb = (w + 7) / 8; // width bytes, bitmaps are padded + x -= x % 8; // byte boundary + w = wb * 8; // byte boundary + if ((w <= 0) || (h <= 0)) return; + _writeCommand(0x10); + for (int16_t i = 0; i < int16_t(HEIGHT); i++) + { + for (int16_t j = 0; j < int16_t(WIDTH); j += 8) + { + uint8_t data = 0xFF; + if ((j >= x) && (j <= x + w) && (i >= y) && (i < y + h)) + { + uint32_t idx = mirror_y ? (j - x) / 8 + uint32_t((h - 1 - (i - y))) * wb : (j - x) / 8 + uint32_t(i - y) * wb; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + data = pgm_read_byte(&bitmap[idx]); +#else + data = bitmap[idx]; +#endif + } + else + { + data = bitmap[idx]; + } + if (invert) data = ~data; + } + for (int16_t k = 0; k < 2; k++) + { + uint8_t data2 = (data & 0x80 ? 0x40 : 0x00) | (data & 0x40 ? 0x10 : 0x00) | + (data & 0x20 ? 0x04 : 0x00) | (data & 0x10 ? 0x01 : 0x00); + data <<= 4; + _writeData(data2); + } + } + } + } + } + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 +} + +void GxEPD2_300c::writeImage(const uint8_t* black, const uint8_t* color, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + if (!black && !color) return; + if (!color) return writeImage(black, x, y, w, h, invert, mirror_y, pgm); + //Serial.print("writeImage("); Serial.print(x); Serial.print(", "); Serial.print(y); Serial.print(", "); + //Serial.print(w); Serial.print(", "); Serial.print(h); Serial.println(")"); + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 + if (!_init_display_done) _InitDisplay(); + if (_initial_write) writeScreenBuffer(); + if (hasPartialUpdate) + { + int16_t wb = (w + 7) / 8; // width bytes, bitmaps are padded + x -= x % 8; // byte boundary + w = wb * 8; // byte boundary + int16_t x1 = x < 0 ? 0 : x; // limit + int16_t y1 = y < 0 ? 0 : y; // limit + int16_t w1 = x + w < int16_t(WIDTH) ? w : int16_t(WIDTH) - x; // limit + int16_t h1 = y + h < int16_t(HEIGHT) ? h : int16_t(HEIGHT) - y; // limit + int16_t dx = x1 - x; + int16_t dy = y1 - y; + w1 -= dx; + h1 -= dy; + if ((w1 <= 0) || (h1 <= 0)) return; + _setPartialRamArea(x1, y1, w1, h1); + _writeCommand(0x10); + for (int16_t i = 0; i < h1; i++) + { + for (int16_t j = 0; j < w1 / 8; j++) + { + uint8_t black_data = 0xFF, color_data = 0xFF; + // use wb, h of bitmap for index! + uint32_t idx = mirror_y ? j + dx / 8 + uint32_t((h - 1 - (i + dy))) * wb : j + dx / 8 + uint32_t(i + dy) * wb; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + black_data = pgm_read_byte(&black[idx]); + color_data = pgm_read_byte(&color[idx]); +#else + black_data = black[idx]; + color_data = color[idx]; +#endif + } + else + { + black_data = black[idx]; + color_data = color[idx]; + } + if (invert) + { + black_data = ~black_data; + color_data = ~color_data; + } + for (int16_t k = 0; k < 2; k++) + { + uint8_t out_data = 0x00; + for (int16_t l = 0; l < 4; l++) + { + out_data <<= 2; + if (!(color_data & 0x80)) out_data |= 0x03; // red + else out_data |= black_data & 0x80 ? 0x01 : 0x00; // white or black + black_data <<= 1; + color_data <<= 1; + } + _writeData(out_data); + } + } + } + } + else + { + if (_paged && (x == 0) && (w == int16_t(WIDTH)) && (h < int16_t(HEIGHT))) + { + //Serial.println("paged"); + for (uint32_t i = 0; i < uint32_t(WIDTH) * uint32_t(h) / 8; i++) + { + uint8_t black_data = black[i]; + uint8_t color_data = color[i]; + for (int16_t k = 0; k < 2; k++) + { + uint8_t out_data = 0x00; + for (int16_t l = 0; l < 4; l++) + { + out_data <<= 2; + if (!(color_data & 0x80)) out_data |= 0x03; // red + else out_data |= black_data & 0x80 ? 0x01 : 0x00; // white or black + black_data <<= 1; + color_data <<= 1; + } + _writeData(out_data); + } + } + if (y + h == HEIGHT) // last page + { + //Serial.println("paged ended"); + _paged = false; + } + } + else + { + _paged = false; + int16_t wb = (w + 7) / 8; // width bytes, bitmaps are padded + x -= x % 8; // byte boundary + w = wb * 8; // byte boundary + if ((w <= 0) || (h <= 0)) return; + _writeCommand(0x10); + for (int16_t i = 0; i < int16_t(HEIGHT); i++) + { + for (int16_t j = 0; j < int16_t(WIDTH); j += 8) + { + uint8_t black_data = 0xFF, color_data = 0xFF; + if ((j >= x) && (j < x + w) && (i >= y) && (i < y + h)) + { + uint32_t idx = mirror_y ? (j - x) / 8 + uint32_t((h - 1 - (i - y))) * wb : (j - x) / 8 + uint32_t(i - y) * wb; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + black_data = pgm_read_byte(&black[idx]); + color_data = pgm_read_byte(&color[idx]); +#else + black_data = black[idx]; + color_data = color[idx]; +#endif + } + else + { + black_data = black[idx]; + color_data = color[idx]; + } + if (invert) + { + black_data = ~black_data; + color_data = ~color_data; + } + } + for (int16_t k = 0; k < 2; k++) + { + uint8_t out_data = 0x00; + for (int16_t l = 0; l < 4; l++) + { + out_data <<= 2; + if (!(color_data & 0x80)) out_data |= 0x03; // red + else out_data |= black_data & 0x80 ? 0x01 : 0x00; // white or black + black_data <<= 1; + color_data <<= 1; + } + _writeData(out_data); + } + } + } + } + } + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 +} + +void GxEPD2_300c::writeImagePart(const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + //Serial.print("writeImagePart("); Serial.print(x_part); Serial.print(", "); Serial.print(y_part); Serial.print(", "); + //Serial.print(w_bitmap); Serial.print(", "); Serial.print(h_bitmap); Serial.print(", "); + //Serial.print(x); Serial.print(", "); Serial.print(y); Serial.print(", "); + //Serial.print(w); Serial.print(", "); Serial.print(h); Serial.println(")"); + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 + if (!_init_display_done) _InitDisplay(); + if (_initial_write) writeScreenBuffer(); + if ((w_bitmap < 0) || (h_bitmap < 0) || (w < 0) || (h < 0)) return; + if ((x_part < 0) || (x_part >= w_bitmap)) return; + if ((y_part < 0) || (y_part >= h_bitmap)) return; + int16_t wb_bitmap = (w_bitmap + 7) / 8; // width bytes, bitmaps are padded + x_part -= x_part % 8; // byte boundary + w = w_bitmap - x_part < w ? w_bitmap - x_part : w; // limit + h = h_bitmap - y_part < h ? h_bitmap - y_part : h; // limit + // make x, w multiple of 8 + w += x % 8; // adjust for byte boundary of x + x -= x % 8; // byte boundary ox + w = 8 * ((w + 7) / 8); // byte boundary, bitmaps are padded + int16_t x1 = x < 0 ? 0 : x; // limit + int16_t y1 = y < 0 ? 0 : y; // limit + int16_t w1 = x + w < int16_t(WIDTH) ? w : int16_t(WIDTH) - x; // limit + int16_t h1 = y + h < int16_t(HEIGHT) ? h : int16_t(HEIGHT) - y; // limit + int16_t dx = x1 - x; + int16_t dy = y1 - y; + w1 -= dx; + h1 -= dy; + if ((w1 <= 0) || (h1 <= 0)) return; + if (hasPartialUpdate) + { + _setPartialRamArea(x1, y1, w1, h1); + _writeCommand(0x10); + for (int16_t i = 0; i < h1; i++) + { + for (int16_t j = 0; j < w1 / 8; j++) + { + uint8_t data; + // use wb_bitmap, h_bitmap of bitmap for index! + uint32_t idx = mirror_y ? x_part / 8 + j + dx / 8 + uint32_t((h_bitmap - 1 - (y_part + i + dy))) * wb_bitmap : x_part / 8 + j + dx / 8 + uint32_t(y_part + i + dy) * wb_bitmap; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + data = pgm_read_byte(&bitmap[idx]); +#else + data = bitmap[idx]; +#endif + } + else + { + data = bitmap[idx]; + } + if (invert) data = ~data; + for (int16_t k = 0; k < 2; k++) + { + uint8_t data2 = (data & 0x80 ? 0x40 : 0x00) | (data & 0x40 ? 0x10 : 0x00) | + (data & 0x20 ? 0x04 : 0x00) | (data & 0x10 ? 0x01 : 0x00); + data <<= 4; + _writeData(data2); + } + } + } + } + else + { + _writeCommand(0x10); + for (int16_t i = 0; i < int16_t(HEIGHT); i++) + { + for (int16_t j = 0; j < int16_t(WIDTH); j += 8) + { + uint8_t data = 0xFF; + if ((j >= x1) && (j < x1 + w) && (i >= y1) && (i < y1 + h)) + { + // use wb_bitmap, h_bitmap of bitmap for index! + uint32_t idx = mirror_y ? (x_part + j - x1) / 8 + uint32_t((h_bitmap - 1 - (y_part + i - y1))) * wb_bitmap : (x_part + j - x1) / 8 + uint32_t(y_part + i - y1) * wb_bitmap; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + data = pgm_read_byte(&bitmap[idx]); +#else + data = bitmap[idx]; +#endif + } + else + { + data = bitmap[idx]; + } + if (invert) data = ~data; + } + for (int16_t k = 0; k < 2; k++) + { + uint8_t data2 = (data & 0x80 ? 0x40 : 0x00) | (data & 0x40 ? 0x10 : 0x00) | + (data & 0x20 ? 0x04 : 0x00) | (data & 0x10 ? 0x01 : 0x00); + data <<= 4; + _writeData(data2); + } + } + } + } + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 +} + +void GxEPD2_300c::writeImagePart(const uint8_t* black, const uint8_t* color, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + //Serial.print("writeImagePart("); Serial.print(x_part); Serial.print(", "); Serial.print(y_part); Serial.print(", "); + //Serial.print(w_bitmap); Serial.print(", "); Serial.print(h_bitmap); Serial.print(", "); + //Serial.print(x); Serial.print(", "); Serial.print(y); Serial.print(", "); + //Serial.print(w); Serial.print(", "); Serial.print(h); Serial.println(")"); + if (!black && !color) return; + if (!color) return writeImagePart(black, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm); + if (!_init_display_done) _InitDisplay(); + if (_initial_write) writeScreenBuffer(); + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 + if ((w_bitmap < 0) || (h_bitmap < 0) || (w < 0) || (h < 0)) return; + if ((x_part < 0) || (x_part >= w_bitmap)) return; + if ((y_part < 0) || (y_part >= h_bitmap)) return; + int16_t wb_bitmap = (w_bitmap + 7) / 8; // width bytes, bitmaps are padded + x_part -= x_part % 8; // byte boundary + w = w_bitmap - x_part < w ? w_bitmap - x_part : w; // limit + h = h_bitmap - y_part < h ? h_bitmap - y_part : h; // limit + // make x, w multiple of 8 + w += x % 8; // adjust for byte boundary of x + x -= x % 8; // byte boundary ox + w = 8 * ((w + 7) / 8); // byte boundary, bitmaps are padded + int16_t x1 = x < 0 ? 0 : x; // limit + int16_t y1 = y < 0 ? 0 : y; // limit + int16_t w1 = x + w < int16_t(WIDTH) ? w : int16_t(WIDTH) - x; // limit + int16_t h1 = y + h < int16_t(HEIGHT) ? h : int16_t(HEIGHT) - y; // limit + int16_t dx = x1 - x; + int16_t dy = y1 - y; + w1 -= dx; + h1 -= dy; + if ((w1 <= 0) || (h1 <= 0)) return; + if (hasPartialUpdate) + { + _setPartialRamArea(x1, y1, w1, h1); + _writeCommand(0x10); + for (int16_t i = 0; i < h1; i++) + { + for (int16_t j = 0; j < w1 / 8; j++) + { + uint8_t black_data = 0xFF, color_data = 0xFF; + // use wb_bitmap, h_bitmap of bitmap for index! + uint32_t idx = mirror_y ? x_part / 8 + j + dx / 8 + uint32_t((h_bitmap - 1 - (y_part + i + dy))) * wb_bitmap : x_part / 8 + j + dx / 8 + uint32_t(y_part + i + dy) * wb_bitmap; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + black_data = pgm_read_byte(&black[idx]); + color_data = pgm_read_byte(&color[idx]); +#else + black_data = black[idx]; + color_data = color[idx]; +#endif + } + else + { + black_data = black[idx]; + color_data = color[idx]; + } + for (int16_t k = 0; k < 2; k++) + { + uint8_t out_data = 0x00; + for (int16_t l = 0; l < 4; l++) + { + out_data <<= 2; + if (!(color_data & 0x80)) out_data |= 0x03; // red + else out_data |= black_data & 0x80 ? 0x01 : 0x00; // white or black + black_data <<= 1; + color_data <<= 1; + } + _writeData(out_data); + } + } + } + } + else + { + _writeCommand(0x10); + for (int16_t i = 0; i < int16_t(HEIGHT); i++) + { + for (int16_t j = 0; j < int16_t(WIDTH); j += 8) + { + uint8_t black_data = 0xFF, color_data = 0xFF; + if ((j >= x1) && (j < x1 + w) && (i >= y1) && (i < y1 + h)) + { + // use wb_bitmap, h_bitmap of bitmap for index! + uint32_t idx = mirror_y ? (x_part + j - x1) / 8 + uint32_t((h_bitmap - 1 - (y_part + i - y1))) * wb_bitmap : (x_part + j - x1) / 8 + uint32_t(y_part + i - y1) * wb_bitmap; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + black_data = pgm_read_byte(&black[idx]); + color_data = pgm_read_byte(&color[idx]); +#else + black_data = black[idx]; + color_data = color[idx]; +#endif + } + else + { + black_data = black[idx]; + color_data = color[idx]; + } + if (invert) + { + black_data = ~black_data; + color_data = ~color_data; + } + } + for (int16_t k = 0; k < 2; k++) + { + uint8_t out_data = 0x00; + for (int16_t l = 0; l < 4; l++) + { + out_data <<= 2; + if (!(color_data & 0x80)) out_data |= 0x03; // red + else out_data |= black_data & 0x80 ? 0x01 : 0x00; // white or black + black_data <<= 1; + color_data <<= 1; + } + _writeData(out_data); + } + } + } + } + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 +} + +void GxEPD2_300c::writeNative(const uint8_t* data1, const uint8_t* data2, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + if (!data1) return; + //Serial.print("writeNative("); Serial.print(x); Serial.print(", "); Serial.print(y); Serial.print(", "); + //Serial.print(w); Serial.print(", "); Serial.print(h); Serial.println(")"); + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 + if (!_init_display_done) _InitDisplay(); + if (_initial_write) writeScreenBuffer(); + if (hasPartialUpdate) + { + int16_t wb = (w + 3) / 4; // width bytes, bitmaps are padded + x -= x % 4; // byte boundary + w = wb * 4; // byte boundary + int16_t x1 = x < 0 ? 0 : x; // limit + int16_t y1 = y < 0 ? 0 : y; // limit + int16_t w1 = x + w < int16_t(WIDTH) ? w : int16_t(WIDTH) - x; // limit + int16_t h1 = y + h < int16_t(HEIGHT) ? h : int16_t(HEIGHT) - y; // limit + int16_t dx = x1 - x; + int16_t dy = y1 - y; + w1 -= dx; + h1 -= dy; + if ((w1 <= 0) || (h1 <= 0)) return; + _setPartialRamArea(x1, y1, w1, h1); + _writeCommand(0x10); + for (int16_t i = 0; i < h1; i++) + { + for (int16_t j = 0; j < w1 / 4; j++) + { + uint8_t data; + // use wb, h of bitmap for index! + uint32_t idx = mirror_y ? j + dx / 4 + uint32_t((h - 1 - (i + dy))) * wb : j + dx / 4 + uint32_t(i + dy) * wb; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + data = pgm_read_byte(&data1[idx]); +#else + data = data1[idx]; +#endif + } + else + { + data = data1[idx]; + } + if (invert) data = ~data; + _writeData(data); + } + } + } + else + { + if (_paged && (x == 0) && (w == int16_t(WIDTH)) && (h < int16_t(HEIGHT))) + { + //Serial.println("paged"); + for (uint32_t i = 0; i < uint32_t(WIDTH) * uint32_t(h) / 4; i++) + { + uint8_t data = data1[i]; + _writeData(data); + } + if (y + h == HEIGHT) // last page + { + //Serial.println("paged ended"); + _paged = false; + } + } + else + { + //Serial.println("not paged"); + _paged = false; + int16_t wb = (w + 3) / 4; // width bytes, bitmaps are padded + x -= x % 4; // byte boundary + w = wb * 4; // byte boundary + if ((w <= 0) || (h <= 0)) return; + _writeCommand(0x10); + for (int16_t i = 0; i < int16_t(HEIGHT); i++) + { + for (int16_t j = 0; j < int16_t(WIDTH); j += 4) + { + uint8_t data = 0x55; + if (data1) + { + if ((j >= x) && (j < x + w) && (i >= y) && (i < y + h)) + { + uint32_t idx = mirror_y ? (j - x) / 4 + uint32_t((h - 1 - (i - y))) * wb : (j - x) / 4 + uint32_t(i - y) * wb; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + data = pgm_read_byte(&data1[idx]); +#else + data = data1[idx]; +#endif + } + else + { + data = data1[idx]; + } + if (invert) data = ~data; + } + } + _writeData(data); + } + } + } + } + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 +} + +void GxEPD2_300c::writeNativePart(const uint8_t* data1, const uint8_t* data2, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + if (!data1) return; + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 + if (!_init_display_done) _InitDisplay(); + if (_initial_write) writeScreenBuffer(); + if ((w_bitmap < 0) || (h_bitmap < 0) || (w < 0) || (h < 0)) return; + if ((x_part < 0) || (x_part >= w_bitmap)) return; + if ((y_part < 0) || (y_part >= h_bitmap)) return; + int16_t wb_bitmap = (w_bitmap + 3) / 4; // width bytes, bitmaps are padded + x_part -= x_part % 4; // byte boundary + w = w_bitmap - x_part < w ? w_bitmap - x_part : w; // limit + h = h_bitmap - y_part < h ? h_bitmap - y_part : h; // limit + w += x % 4; // adjust for byte boundary of x + x -= x % 4; // byte boundary + w = 4 * ((w + 3) / 4); // byte boundary, bitmaps are padded + int16_t x1 = x < 0 ? 0 : x; // limit + int16_t y1 = y < 0 ? 0 : y; // limit + int16_t w1 = x + w < int16_t(WIDTH) ? w : int16_t(WIDTH) - x; // limit + int16_t h1 = y + h < int16_t(HEIGHT) ? h : int16_t(HEIGHT) - y; // limit + int16_t dx = x1 - x; + int16_t dy = y1 - y; + w1 -= dx; + h1 -= dy; + if ((w1 <= 0) || (h1 <= 0)) return; + if (hasPartialUpdate) + { + _setPartialRamArea(x1, y1, w1, h1); + _writeCommand(0x10); + for (int16_t i = 0; i < h1; i++) + { + for (int16_t j = 0; j < w1 / 4; j++) + { + uint8_t data; + // use wb_bitmap, h_bitmap of bitmap for index! + uint32_t idx = mirror_y ? x_part / 4 + j + dx / 4 + uint32_t((h_bitmap - 1 - (y_part + i + dy))) * wb_bitmap : x_part / 4 + j + dx / 4 + uint32_t(y_part + i + dy) * wb_bitmap; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + data = pgm_read_byte(&data1[idx]); +#else + data = data1[idx]; +#endif + } + else + { + data = data1[idx]; + } + if (invert) data = ~data; + _writeData(data); + } + } + } + else + { + _writeCommand(0x10); + for (int16_t i = 0; i < int16_t(HEIGHT); i++) + { + for (int16_t j = 0; j < int16_t(WIDTH); j += 4) + { + uint8_t data = 0x55; + if ((j >= x1) && (j < x1 + w) && (i >= y1) && (i < y1 + h)) + { + // use wb_bitmap, h_bitmap of bitmap for index! + uint32_t idx = mirror_y ? (x_part + j - x1) / 4 + uint32_t((h_bitmap - 1 - (y_part + i - y1))) * wb_bitmap : (x_part + j - x1) / 4 + uint32_t(y_part + i - y1) * wb_bitmap; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + data = pgm_read_byte(&data1[idx]); +#else + data = data1[idx]; +#endif + } + else + { + data = data1[idx]; + } + if (invert) data = ~data; + } + _writeData(data); + } + } + } + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 +} + +void GxEPD2_300c::drawImage(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + writeImage(bitmap, x, y, w, h, invert, mirror_y, pgm); + refresh(x, y, w, h); +} + +void GxEPD2_300c::drawImagePart(const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + writeImagePart(bitmap, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm); + refresh(x, y, w, h); +} + +void GxEPD2_300c::drawImage(const uint8_t* black, const uint8_t* color, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + writeImage(black, color, x, y, w, h, invert, mirror_y, pgm); + refresh(x, y, w, h); +} + +void GxEPD2_300c::drawImagePart(const uint8_t* black, const uint8_t* color, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + writeImagePart(black, color, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm); + refresh(x, y, w, h); +} + +void GxEPD2_300c::drawNative(const uint8_t* data1, const uint8_t* data2, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + writeNative(data1, data2, x, y, w, h, invert, mirror_y, pgm); + refresh(x, y, w, h); +} + +void GxEPD2_300c::refresh(bool partial_update_mode) +{ + if (hasPartialUpdate) _setPartialRamArea(0, 0, WIDTH, HEIGHT); + _refresh(partial_update_mode); +} + +void GxEPD2_300c::refresh(int16_t x, int16_t y, int16_t w, int16_t h) +{ + // intersection with screen + int16_t w1 = x < 0 ? w + x : w; // reduce + int16_t h1 = y < 0 ? h + y : h; // reduce + int16_t x1 = x < 0 ? 0 : x; // limit + int16_t y1 = y < 0 ? 0 : y; // limit + w1 = x1 + w1 < int16_t(WIDTH) ? w1 : int16_t(WIDTH) - x1; // limit + h1 = y1 + h1 < int16_t(HEIGHT) ? h1 : int16_t(HEIGHT) - y1; // limit + if ((w1 <= 0) || (h1 <= 0)) return; + // make x1, w1 multiple of 4 + w1 += x1 % 4; + if (w1 % 4 > 0) w1 += 4 - w1 % 4; + x1 -= x1 % 4; + bool fullscreen = ((x1 == 0) && (y1 == 0) && (w1 == WIDTH) && (h1 == HEIGHT)); + if (hasPartialUpdate) _setPartialRamArea(x1, y1, w1, h1, !fullscreen); + _refresh(!fullscreen); +} + +void GxEPD2_300c::powerOff() +{ + _PowerOff(); +} + +void GxEPD2_300c::hibernate() +{ + _PowerOff(); + if (_rst >= 0) + { + _writeCommand(0x07); // deep sleep + _writeData(0xA5); // control code + _hibernating = true; + _init_display_done = false; + } +} + +void GxEPD2_300c::setPaged() +{ + if (!hasPartialUpdate) + { + _paged = true; + _InitDisplay(); + _writeCommand(0x10); + } +} + +void GxEPD2_300c::_refresh(bool partial_update_mode) +{ + _writeCommand(0x50); // VCOM and Data Interval Setting + _writeData(partial_update_mode ? 0x97 : 0x37); // floating or white + _writeCommand(0x12); // Display Refresh + _writeData(0x00); + delay(1); + _waitWhileBusy("_refresh", full_refresh_time); + //_power_is_on = false; // not needed + _init_display_done = false; // needed +} + +void GxEPD2_300c::_setPartialRamArea(uint16_t x, uint16_t y, uint16_t w, uint16_t h, bool partial_mode) +{ + //Serial.print("_setPartialRamArea("); Serial.print(x); Serial.print(", "); Serial.print(y); Serial.print(", "); + //Serial.print(w); Serial.print(", "); Serial.print(h); Serial.println(")"); + _writeCommand(0x83); + _writeData(x / 256); + _writeData(x % 256); + _writeData((x + w - 1) / 256); + _writeData((x + w - 1) % 256); + _writeData(y / 256); + _writeData(y % 256); + _writeData((y + h - 1) / 256); + _writeData((y + h - 1) % 256); + _writeData(partial_mode ? 0x01 : 0x00); +} + +void GxEPD2_300c::_PowerOn() +{ + if (!_power_is_on) + { + _writeCommand(0x04); + _waitWhileBusy("_PowerOn", power_on_time); + } + _power_is_on = true; +} + +void GxEPD2_300c::_PowerOff() +{ + if (_power_is_on) + { + _writeCommand(0x02); + _writeData(0x00); + _waitWhileBusy("_PowerOff", power_off_time); + } + _power_is_on = false; +} + +void GxEPD2_300c::_InitDisplay() +{ + Serial.println("_InitDisplay"); + // this display needs a hard reset after every refesh, reason umknown + ////if ((_rst >= 0) && (_hibernating || _initial_write)) + { + digitalWrite(_rst, HIGH); + delay(20); + digitalWrite(_rst, LOW); + delay(2); + digitalWrite(_rst, HIGH); + delay(2); + _waitWhileBusy("_InitDisplay reset", power_on_time); + _power_is_on = false; + } + _writeCommand(0x66); + _writeData(0x49); + _writeData(0x55); + _writeData(0x13); + _writeData(0x5D); + _writeData(0x05); + _writeData(0x10); + _writeCommand(0xB0); + _writeData(0x00); //1 boost + _writeCommand(0x01); // Power Settings + _writeData(0x0F); + _writeData(0x00); + _writeCommand(0x00); // Panel Settings + _writeData(0x4F); + _writeData(0x6B); + _writeCommand(0x06); // Booster Soft Start + _writeData(0xD7); + _writeData(0xDE); + _writeData(0x12); + _writeCommand(0x61); // Resolution Setting + _writeData(WIDTH / 256); // Source_BITS_H + _writeData(WIDTH % 256); // Source_BITS_L + _writeData(HEIGHT / 256); // Gate_BITS_H + _writeData(HEIGHT % 256); // Gate_BITS_L + _writeCommand(0x50); // VCOM and Data Interval Setting + //_writeData(0x17); // black border + _writeData(0x37); // white border (default) + //_writeData(0x57); // yellow border + //_writeData(0x77); // red border + //_writeData(0x97); // floating border + _writeCommand(0x60); // TCON + _writeData(0x0C); + _writeData(0x05); + _writeCommand(0xE3); // PWS + _writeData(0xFF); + _writeCommand(0x84); // T_VDCS + _writeData(0x00); + _PowerOn(); + _init_display_done = true; +} diff --git a/src/epd4c/GxEPD2_300c.h b/src/epd4c/GxEPD2_300c.h new file mode 100644 index 00000000..5c7e396d --- /dev/null +++ b/src/epd4c/GxEPD2_300c.h @@ -0,0 +1,77 @@ +// Display Library for SPI e-paper panels from Dalian Good Display and boards from Waveshare. +// Requires HW SPI and Adafruit_GFX. Caution: the e-paper panels require 3.3V supply AND data lines! +// +// based on Demo Example from Waveshare: https://github.com/waveshareteam/e-Paper/tree/master/Arduino/epd3in0g +// Panel: 3inch 4-Color E-Paper : https://www.waveshare.com/product/displays/e-paper/3inch-e-paper-module-g.htm +// Controller: unknown +// +// Author: Jean-Marc Zingg +// +// Version: see library.properties +// +// Library: https://github.com/ZinggJM/GxEPD2 + +#ifndef _GxEPD2_300c_H_ +#define _GxEPD2_300c_H_ + +#include "../GxEPD2_EPD.h" + +class GxEPD2_300c : public GxEPD2_EPD +{ + public: + // attributes + static const uint16_t WIDTH = 168; + static const uint16_t WIDTH_VISIBLE = WIDTH; + static const uint16_t HEIGHT = 400; + static const GxEPD2::Panel panel = GxEPD2::Waveshare3inch4color; + static const bool hasColor = true; + static const bool hasPartialUpdate = true; + static const bool hasFastPartialUpdate = false; + static const uint16_t power_on_time = 600; // ms, e.g. 574001us + static const uint16_t power_off_time = 50; // ms, e.g. 41000us + static const uint16_t full_refresh_time = 13000; // ms, e.g. 12358001us + static const uint16_t partial_refresh_time = 13000; // ms, e.g. 12358001us + // constructor + GxEPD2_300c(int16_t cs, int16_t dc, int16_t rst, int16_t busy); + // methods (virtual) + // Support for Bitmaps (Sprites) to Controller Buffer and to Screen + void clearScreen(uint8_t value = 0xFF); // init controller memory and screen (default white) + void clearScreen(uint8_t black_value, uint8_t color_value); // init controller memory and screen + void writeScreenBuffer(uint8_t value = 0xFF); // init controller memory (default white) + void writeScreenBuffer(uint8_t black_value, uint8_t color_value); // init controller memory + // write to controller memory, without screen refresh; x and w should be multiple of 8 + void writeImage(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void writeImagePart(const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void writeImage(const uint8_t* black, const uint8_t* color, int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void writeImagePart(const uint8_t* black, const uint8_t* color, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + // write sprite of native data to controller memory, without screen refresh; x and w should be multiple of 8 + void writeNative(const uint8_t* data1, const uint8_t* data2, int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void writeNativePart(const uint8_t* data1, const uint8_t* data2, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + // write to controller memory, with screen refresh; x and w should be multiple of 8 + void drawImage(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void drawImagePart(const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void drawImage(const uint8_t* black, const uint8_t* color, int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void drawImagePart(const uint8_t* black, const uint8_t* color, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + // write sprite of native data to controller memory, with screen refresh; x and w should be multiple of 8 + void drawNative(const uint8_t* data1, const uint8_t* data2, int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void refresh(bool partial_update_mode = false); // screen refresh from controller memory to full screen + void refresh(int16_t x, int16_t y, int16_t w, int16_t h); // screen refresh from controller memory, partial screen + void powerOff(); // turns off generation of panel driving voltages, avoids screen fading over time + void hibernate(); // turns powerOff() and sets controller to deep sleep for minimum power use, ONLY if wakeable by RST (rst >= 0) + void setPaged(); // for GxEPD2_154c paged workaround, also for 4-color for use with hasPartialUpdate = false + private: + void _refresh(bool partial_update_mode); + void _setPartialRamArea(uint16_t x, uint16_t y, uint16_t w, uint16_t h, bool partial_mode = true); + void _PowerOn(); + void _PowerOff(); + void _InitDisplay(); + private: + bool _paged; +}; + +#endif diff --git a/src/epd4c/GxEPD2_420c_GDEY0420F51.cpp b/src/epd4c/GxEPD2_420c_GDEY0420F51.cpp new file mode 100644 index 00000000..69595b05 --- /dev/null +++ b/src/epd4c/GxEPD2_420c_GDEY0420F51.cpp @@ -0,0 +1,981 @@ +// Display Library for SPI e-paper panels from Dalian Good Display and boards from Waveshare. +// Requires HW SPI and Adafruit_GFX. Caution: the e-paper panels require 3.3V supply AND data lines! +// +// based on Demo Example from Good Display: https://www.good-display.com/comp/xcompanyFile/downloadNew.do?appId=24&fid=1892&id=1326 +// Panel: GDEY0420F51 : https://www.good-display.com/product/506.html +// Panel specs: https://v4.cecdn.yun300.cn/100001_1909185148/GDEY042F51.pdf +// Controller: HX8717, no specs, see panel specs for command list subset +// +// Author: Jean-Marc Zingg +// +// Version: see library.properties +// +// Library: https://github.com/ZinggJM/GxEPD2 + +#include "GxEPD2_420c_GDEY0420F51.h" + +GxEPD2_420c_GDEY0420F51::GxEPD2_420c_GDEY0420F51(int16_t cs, int16_t dc, int16_t rst, int16_t busy) : + GxEPD2_EPD(cs, dc, rst, busy, LOW, 50000000, WIDTH, HEIGHT, panel, hasColor, hasPartialUpdate, hasFastPartialUpdate) +{ + _paged = false; +} + +void GxEPD2_420c_GDEY0420F51::clearScreen(uint8_t value) +{ + clearScreen(value, 0xFF); +} + +void GxEPD2_420c_GDEY0420F51::clearScreen(uint8_t black_value, uint8_t color_value) +{ + writeScreenBuffer(black_value, color_value); + refresh(); +} + +void GxEPD2_420c_GDEY0420F51::writeScreenBuffer(uint8_t value) +{ + writeScreenBuffer(value, 0xFF); +} + +void GxEPD2_420c_GDEY0420F51::writeScreenBuffer(uint8_t black_value, uint8_t color_value) +{ + //Serial.println("writeScreenBuffer"); + if (!_init_display_done) _InitDisplay(); + _writeCommand(0x10); + _startTransfer(); + for (uint32_t i = 0; i < uint32_t(WIDTH) * uint32_t(HEIGHT) / 4; i++) + { + _transfer(0xFF == black_value ? 0x55 : 0x00); + } + _endTransfer(); + _initial_write = false; // initial full screen buffer clean done +} + +void GxEPD2_420c_GDEY0420F51::writeImage(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + //Serial.print("writeImage("); Serial.print(x); Serial.print(", "); Serial.print(y); Serial.print(", "); + //Serial.print(w); Serial.print(", "); Serial.print(h); Serial.println(")"); + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 + if (!_init_display_done) _InitDisplay(); + if (_initial_write) writeScreenBuffer(); + if (hasPartialUpdate) + { + int16_t wb = (w + 7) / 8; // width bytes, bitmaps are padded + x -= x % 8; // byte boundary + w = wb * 8; // byte boundary + int16_t x1 = x < 0 ? 0 : x; // limit + int16_t y1 = y < 0 ? 0 : y; // limit + int16_t w1 = x + w < int16_t(WIDTH) ? w : int16_t(WIDTH) - x; // limit + int16_t h1 = y + h < int16_t(HEIGHT) ? h : int16_t(HEIGHT) - y; // limit + int16_t dx = x1 - x; + int16_t dy = y1 - y; + w1 -= dx; + h1 -= dy; + if ((w1 <= 0) || (h1 <= 0)) return; + _setPartialRamArea(x1, y1, w1, h1); + _writeCommand(0x10); + _startTransfer(); + for (int16_t i = 0; i < h1; i++) + { + for (int16_t j = 0; j < w1 / 8; j++) + { + uint8_t data = 0xFF; + // use wb, h of bitmap for index! + uint32_t idx = mirror_y ? j + dx / 8 + uint32_t((h - 1 - (i + dy))) * wb : j + dx / 8 + uint32_t(i + dy) * wb; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + data = pgm_read_byte(&bitmap[idx]); +#else + data = bitmap[idx]; +#endif + } + else + { + data = bitmap[idx]; + } + if (invert) data = ~data; + for (int16_t k = 0; k < 2; k++) + { + uint8_t data2 = (data & 0x80 ? 0x40 : 0x00) | (data & 0x40 ? 0x10 : 0x00) | + (data & 0x20 ? 0x04 : 0x00) | (data & 0x10 ? 0x01 : 0x00); + data <<= 4; + _transfer(data2); + } + } + } + _endTransfer(); + } + else + { + if (_paged && (x == 0) && (w == int16_t(WIDTH)) && (h < int16_t(HEIGHT))) + { + //Serial.println("paged"); + _startTransfer(); + for (uint32_t i = 0; i < uint32_t(WIDTH) * uint32_t(h) / 8; i++) + { + uint8_t data = bitmap[i]; + for (int16_t k = 0; k < 2; k++) + { + uint8_t data2 = (data & 0x80 ? 0x40 : 0x00) | (data & 0x40 ? 0x10 : 0x00) | + (data & 0x20 ? 0x04 : 0x00) | (data & 0x10 ? 0x01 : 0x00); + data <<= 4; + _transfer(data2); + } + } + _endTransfer(); + if (y + h == HEIGHT) // last page + { + //Serial.println("paged ended"); + _paged = false; + } + } + else + { + _paged = false; + int16_t wb = (w + 7) / 8; // width bytes, bitmaps are padded + x -= x % 8; // byte boundary + w = wb * 8; // byte boundary + if ((w <= 0) || (h <= 0)) return; + _writeCommand(0x10); + _startTransfer(); + for (int16_t i = 0; i < int16_t(HEIGHT); i++) + { + for (int16_t j = 0; j < int16_t(WIDTH); j += 8) + { + uint8_t data = 0xFF; + if ((j >= x) && (j <= x + w) && (i >= y) && (i < y + h)) + { + uint32_t idx = mirror_y ? (j - x) / 8 + uint32_t((h - 1 - (i - y))) * wb : (j - x) / 8 + uint32_t(i - y) * wb; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + data = pgm_read_byte(&bitmap[idx]); +#else + data = bitmap[idx]; +#endif + } + else + { + data = bitmap[idx]; + } + if (invert) data = ~data; + } + for (int16_t k = 0; k < 2; k++) + { + uint8_t data2 = (data & 0x80 ? 0x40 : 0x00) | (data & 0x40 ? 0x10 : 0x00) | + (data & 0x20 ? 0x04 : 0x00) | (data & 0x10 ? 0x01 : 0x00); + data <<= 4; + _transfer(data2); + } + } + } + _endTransfer(); + } + } + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 +} + +void GxEPD2_420c_GDEY0420F51::writeImage(const uint8_t* black, const uint8_t* color, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + if (!black && !color) return; + if (!color) return writeImage(black, x, y, w, h, invert, mirror_y, pgm); + //Serial.print("writeImage("); Serial.print(x); Serial.print(", "); Serial.print(y); Serial.print(", "); + //Serial.print(w); Serial.print(", "); Serial.print(h); Serial.println(")"); + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 + if (!_init_display_done) _InitDisplay(); + if (_initial_write) writeScreenBuffer(); + if (hasPartialUpdate) + { + int16_t wb = (w + 7) / 8; // width bytes, bitmaps are padded + x -= x % 8; // byte boundary + w = wb * 8; // byte boundary + int16_t x1 = x < 0 ? 0 : x; // limit + int16_t y1 = y < 0 ? 0 : y; // limit + int16_t w1 = x + w < int16_t(WIDTH) ? w : int16_t(WIDTH) - x; // limit + int16_t h1 = y + h < int16_t(HEIGHT) ? h : int16_t(HEIGHT) - y; // limit + int16_t dx = x1 - x; + int16_t dy = y1 - y; + w1 -= dx; + h1 -= dy; + if ((w1 <= 0) || (h1 <= 0)) return; + _setPartialRamArea(x1, y1, w1, h1); + _writeCommand(0x10); + _startTransfer(); + for (int16_t i = 0; i < h1; i++) + { + for (int16_t j = 0; j < w1 / 8; j++) + { + uint8_t black_data = 0xFF, color_data = 0xFF; + // use wb, h of bitmap for index! + uint32_t idx = mirror_y ? j + dx / 8 + uint32_t((h - 1 - (i + dy))) * wb : j + dx / 8 + uint32_t(i + dy) * wb; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + black_data = pgm_read_byte(&black[idx]); + color_data = pgm_read_byte(&color[idx]); +#else + black_data = black[idx]; + color_data = color[idx]; +#endif + } + else + { + black_data = black[idx]; + color_data = color[idx]; + } + if (invert) + { + black_data = ~black_data; + color_data = ~color_data; + } + for (int16_t k = 0; k < 2; k++) + { + uint8_t out_data = 0x00; + for (int16_t l = 0; l < 4; l++) + { + out_data <<= 2; + if (!(color_data & 0x80)) out_data |= 0x03; // red + else out_data |= black_data & 0x80 ? 0x01 : 0x00; // white or black + black_data <<= 1; + color_data <<= 1; + } + _transfer(out_data); + } + } + } + _endTransfer(); + } + else + { + if (_paged && (x == 0) && (w == int16_t(WIDTH)) && (h < int16_t(HEIGHT))) + { + //Serial.println("paged"); + _startTransfer(); + for (uint32_t i = 0; i < uint32_t(WIDTH) * uint32_t(h) / 8; i++) + { + uint8_t black_data = black[i]; + uint8_t color_data = color[i]; + for (int16_t k = 0; k < 2; k++) + { + uint8_t out_data = 0x00; + for (int16_t l = 0; l < 4; l++) + { + out_data <<= 2; + if (!(color_data & 0x80)) out_data |= 0x03; // red + else out_data |= black_data & 0x80 ? 0x01 : 0x00; // white or black + black_data <<= 1; + color_data <<= 1; + } + _transfer(out_data); + } + } + _endTransfer(); + if (y + h == HEIGHT) // last page + { + //Serial.println("paged ended"); + _paged = false; + } + } + else + { + _paged = false; + int16_t wb = (w + 7) / 8; // width bytes, bitmaps are padded + x -= x % 8; // byte boundary + w = wb * 8; // byte boundary + if ((w <= 0) || (h <= 0)) return; + _writeCommand(0x10); + _startTransfer(); + for (int16_t i = 0; i < int16_t(HEIGHT); i++) + { + for (int16_t j = 0; j < int16_t(WIDTH); j += 8) + { + uint8_t black_data = 0xFF, color_data = 0xFF; + if ((j >= x) && (j < x + w) && (i >= y) && (i < y + h)) + { + uint32_t idx = mirror_y ? (j - x) / 8 + uint32_t((h - 1 - (i - y))) * wb : (j - x) / 8 + uint32_t(i - y) * wb; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + black_data = pgm_read_byte(&black[idx]); + color_data = pgm_read_byte(&color[idx]); +#else + black_data = black[idx]; + color_data = color[idx]; +#endif + } + else + { + black_data = black[idx]; + color_data = color[idx]; + } + if (invert) + { + black_data = ~black_data; + color_data = ~color_data; + } + } + for (int16_t k = 0; k < 2; k++) + { + uint8_t out_data = 0x00; + for (int16_t l = 0; l < 4; l++) + { + out_data <<= 2; + if (!(color_data & 0x80)) out_data |= 0x03; // red + else out_data |= black_data & 0x80 ? 0x01 : 0x00; // white or black + black_data <<= 1; + color_data <<= 1; + } + _transfer(out_data); + } + } + } + _endTransfer(); + } + } + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 +} + +void GxEPD2_420c_GDEY0420F51::writeImagePart(const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + //Serial.print("writeImagePart("); Serial.print(x_part); Serial.print(", "); Serial.print(y_part); Serial.print(", "); + //Serial.print(w_bitmap); Serial.print(", "); Serial.print(h_bitmap); Serial.print(", "); + //Serial.print(x); Serial.print(", "); Serial.print(y); Serial.print(", "); + //Serial.print(w); Serial.print(", "); Serial.print(h); Serial.println(")"); + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 + if (!_init_display_done) _InitDisplay(); + if (_initial_write) writeScreenBuffer(); + if ((w_bitmap < 0) || (h_bitmap < 0) || (w < 0) || (h < 0)) return; + if ((x_part < 0) || (x_part >= w_bitmap)) return; + if ((y_part < 0) || (y_part >= h_bitmap)) return; + int16_t wb_bitmap = (w_bitmap + 7) / 8; // width bytes, bitmaps are padded + x_part -= x_part % 8; // byte boundary + w = w_bitmap - x_part < w ? w_bitmap - x_part : w; // limit + h = h_bitmap - y_part < h ? h_bitmap - y_part : h; // limit + // make x, w multiple of 8 + w += x % 8; // adjust for byte boundary of x + x -= x % 8; // byte boundary ox + w = 8 * ((w + 7) / 8); // byte boundary, bitmaps are padded + int16_t x1 = x < 0 ? 0 : x; // limit + int16_t y1 = y < 0 ? 0 : y; // limit + int16_t w1 = x + w < int16_t(WIDTH) ? w : int16_t(WIDTH) - x; // limit + int16_t h1 = y + h < int16_t(HEIGHT) ? h : int16_t(HEIGHT) - y; // limit + int16_t dx = x1 - x; + int16_t dy = y1 - y; + w1 -= dx; + h1 -= dy; + if ((w1 <= 0) || (h1 <= 0)) return; + if (hasPartialUpdate) + { + _setPartialRamArea(x1, y1, w1, h1); + _writeCommand(0x10); + _startTransfer(); + for (int16_t i = 0; i < h1; i++) + { + for (int16_t j = 0; j < w1 / 8; j++) + { + uint8_t data; + // use wb_bitmap, h_bitmap of bitmap for index! + uint32_t idx = mirror_y ? x_part / 8 + j + dx / 8 + uint32_t((h_bitmap - 1 - (y_part + i + dy))) * wb_bitmap : x_part / 8 + j + dx / 8 + uint32_t(y_part + i + dy) * wb_bitmap; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + data = pgm_read_byte(&bitmap[idx]); +#else + data = bitmap[idx]; +#endif + } + else + { + data = bitmap[idx]; + } + if (invert) data = ~data; + for (int16_t k = 0; k < 2; k++) + { + uint8_t data2 = (data & 0x80 ? 0x40 : 0x00) | (data & 0x40 ? 0x10 : 0x00) | + (data & 0x20 ? 0x04 : 0x00) | (data & 0x10 ? 0x01 : 0x00); + data <<= 4; + _transfer(data2); + } + } + } + _endTransfer(); + } + else + { + _writeCommand(0x10); + _startTransfer(); + for (int16_t i = 0; i < int16_t(HEIGHT); i++) + { + for (int16_t j = 0; j < int16_t(WIDTH); j += 8) + { + uint8_t data = 0xFF; + if ((j >= x1) && (j < x1 + w) && (i >= y1) && (i < y1 + h)) + { + // use wb_bitmap, h_bitmap of bitmap for index! + uint32_t idx = mirror_y ? (x_part + j - x1) / 8 + uint32_t((h_bitmap - 1 - (y_part + i - y1))) * wb_bitmap : (x_part + j - x1) / 8 + uint32_t(y_part + i - y1) * wb_bitmap; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + data = pgm_read_byte(&bitmap[idx]); +#else + data = bitmap[idx]; +#endif + } + else + { + data = bitmap[idx]; + } + if (invert) data = ~data; + } + for (int16_t k = 0; k < 2; k++) + { + uint8_t data2 = (data & 0x80 ? 0x40 : 0x00) | (data & 0x40 ? 0x10 : 0x00) | + (data & 0x20 ? 0x04 : 0x00) | (data & 0x10 ? 0x01 : 0x00); + data <<= 4; + _transfer(data2); + } + } + } + _endTransfer(); + } + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 +} + +void GxEPD2_420c_GDEY0420F51::writeImagePart(const uint8_t* black, const uint8_t* color, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + //Serial.print("writeImagePart("); Serial.print(x_part); Serial.print(", "); Serial.print(y_part); Serial.print(", "); + //Serial.print(w_bitmap); Serial.print(", "); Serial.print(h_bitmap); Serial.print(", "); + //Serial.print(x); Serial.print(", "); Serial.print(y); Serial.print(", "); + //Serial.print(w); Serial.print(", "); Serial.print(h); Serial.println(")"); + if (!black && !color) return; + if (!color) return writeImagePart(black, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm); + if (!_init_display_done) _InitDisplay(); + if (_initial_write) writeScreenBuffer(); + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 + if ((w_bitmap < 0) || (h_bitmap < 0) || (w < 0) || (h < 0)) return; + if ((x_part < 0) || (x_part >= w_bitmap)) return; + if ((y_part < 0) || (y_part >= h_bitmap)) return; + int16_t wb_bitmap = (w_bitmap + 7) / 8; // width bytes, bitmaps are padded + x_part -= x_part % 8; // byte boundary + w = w_bitmap - x_part < w ? w_bitmap - x_part : w; // limit + h = h_bitmap - y_part < h ? h_bitmap - y_part : h; // limit + // make x, w multiple of 8 + w += x % 8; // adjust for byte boundary of x + x -= x % 8; // byte boundary ox + w = 8 * ((w + 7) / 8); // byte boundary, bitmaps are padded + int16_t x1 = x < 0 ? 0 : x; // limit + int16_t y1 = y < 0 ? 0 : y; // limit + int16_t w1 = x + w < int16_t(WIDTH) ? w : int16_t(WIDTH) - x; // limit + int16_t h1 = y + h < int16_t(HEIGHT) ? h : int16_t(HEIGHT) - y; // limit + int16_t dx = x1 - x; + int16_t dy = y1 - y; + w1 -= dx; + h1 -= dy; + if ((w1 <= 0) || (h1 <= 0)) return; + if (hasPartialUpdate) + { + _setPartialRamArea(x1, y1, w1, h1); + _writeCommand(0x10); + _startTransfer(); + for (int16_t i = 0; i < h1; i++) + { + for (int16_t j = 0; j < w1 / 8; j++) + { + uint8_t black_data = 0xFF, color_data = 0xFF; + // use wb_bitmap, h_bitmap of bitmap for index! + uint32_t idx = mirror_y ? x_part / 8 + j + dx / 8 + uint32_t((h_bitmap - 1 - (y_part + i + dy))) * wb_bitmap : x_part / 8 + j + dx / 8 + uint32_t(y_part + i + dy) * wb_bitmap; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + black_data = pgm_read_byte(&black[idx]); + color_data = pgm_read_byte(&color[idx]); +#else + black_data = black[idx]; + color_data = color[idx]; +#endif + } + else + { + black_data = black[idx]; + color_data = color[idx]; + } + for (int16_t k = 0; k < 2; k++) + { + uint8_t out_data = 0x00; + for (int16_t l = 0; l < 4; l++) + { + out_data <<= 2; + if (!(color_data & 0x80)) out_data |= 0x03; // red + else out_data |= black_data & 0x80 ? 0x01 : 0x00; // white or black + black_data <<= 1; + color_data <<= 1; + } + _transfer(out_data); + } + } + } + _endTransfer(); + } + else + { + _writeCommand(0x10); + _startTransfer(); + for (int16_t i = 0; i < int16_t(HEIGHT); i++) + { + for (int16_t j = 0; j < int16_t(WIDTH); j += 8) + { + uint8_t black_data = 0xFF, color_data = 0xFF; + if ((j >= x1) && (j < x1 + w) && (i >= y1) && (i < y1 + h)) + { + // use wb_bitmap, h_bitmap of bitmap for index! + uint32_t idx = mirror_y ? (x_part + j - x1) / 8 + uint32_t((h_bitmap - 1 - (y_part + i - y1))) * wb_bitmap : (x_part + j - x1) / 8 + uint32_t(y_part + i - y1) * wb_bitmap; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + black_data = pgm_read_byte(&black[idx]); + color_data = pgm_read_byte(&color[idx]); +#else + black_data = black[idx]; + color_data = color[idx]; +#endif + } + else + { + black_data = black[idx]; + color_data = color[idx]; + } + if (invert) + { + black_data = ~black_data; + color_data = ~color_data; + } + } + for (int16_t k = 0; k < 2; k++) + { + uint8_t out_data = 0x00; + for (int16_t l = 0; l < 4; l++) + { + out_data <<= 2; + if (!(color_data & 0x80)) out_data |= 0x03; // red + else out_data |= black_data & 0x80 ? 0x01 : 0x00; // white or black + black_data <<= 1; + color_data <<= 1; + } + _transfer(out_data); + } + } + } + _endTransfer(); + } + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 +} + +void GxEPD2_420c_GDEY0420F51::writeNative(const uint8_t* data1, const uint8_t* data2, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + if (!data1) return; + //Serial.print("writeNative("); Serial.print(x); Serial.print(", "); Serial.print(y); Serial.print(", "); + //Serial.print(w); Serial.print(", "); Serial.print(h); Serial.println(")"); + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 + if (!_init_display_done) _InitDisplay(); + if (_initial_write) writeScreenBuffer(); + if (hasPartialUpdate) + { + int16_t wb = (w + 3) / 4; // width bytes, bitmaps are padded + x -= x % 4; // byte boundary + w = wb * 4; // byte boundary + int16_t x1 = x < 0 ? 0 : x; // limit + int16_t y1 = y < 0 ? 0 : y; // limit + int16_t w1 = x + w < int16_t(WIDTH) ? w : int16_t(WIDTH) - x; // limit + int16_t h1 = y + h < int16_t(HEIGHT) ? h : int16_t(HEIGHT) - y; // limit + int16_t dx = x1 - x; + int16_t dy = y1 - y; + w1 -= dx; + h1 -= dy; + if ((w1 <= 0) || (h1 <= 0)) return; + _setPartialRamArea(x1, y1, w1, h1); + _writeCommand(0x10); + _startTransfer(); + for (int16_t i = 0; i < h1; i++) + { + for (int16_t j = 0; j < w1 / 4; j++) + { + uint8_t data; + // use wb, h of bitmap for index! + uint32_t idx = mirror_y ? j + dx / 4 + uint32_t((h - 1 - (i + dy))) * wb : j + dx / 4 + uint32_t(i + dy) * wb; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + data = pgm_read_byte(&data1[idx]); +#else + data = data1[idx]; +#endif + } + else + { + data = data1[idx]; + } + if (invert) data = ~data; + _transfer(data); + } + } + _endTransfer(); + } + else + { + if (_paged && (x == 0) && (w == int16_t(WIDTH)) && (h < int16_t(HEIGHT))) + { + //Serial.println("paged"); + _startTransfer(); + for (uint32_t i = 0; i < uint32_t(WIDTH) * uint32_t(h) / 4; i++) + { + uint8_t data = data1[i]; + _transfer(data); + } + _endTransfer(); + if (y + h == HEIGHT) // last page + { + //Serial.println("paged ended"); + _paged = false; + } + } + else + { + //Serial.println("not paged"); + _paged = false; + int16_t wb = (w + 3) / 4; // width bytes, bitmaps are padded + x -= x % 4; // byte boundary + w = wb * 4; // byte boundary + if ((w <= 0) || (h <= 0)) return; + _writeCommand(0x10); + _startTransfer(); + for (int16_t i = 0; i < int16_t(HEIGHT); i++) + { + for (int16_t j = 0; j < int16_t(WIDTH); j += 4) + { + uint8_t data = 0x55; + if (data1) + { + if ((j >= x) && (j < x + w) && (i >= y) && (i < y + h)) + { + uint32_t idx = mirror_y ? (j - x) / 4 + uint32_t((h - 1 - (i - y))) * wb : (j - x) / 4 + uint32_t(i - y) * wb; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + data = pgm_read_byte(&data1[idx]); +#else + data = data1[idx]; +#endif + } + else + { + data = data1[idx]; + } + if (invert) data = ~data; + } + } + _transfer(data); + } + } + _endTransfer(); + } + } + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 +} + +void GxEPD2_420c_GDEY0420F51::writeNativePart(const uint8_t* data1, const uint8_t* data2, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + if (!data1) return; + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 + if (!_init_display_done) _InitDisplay(); + if (_initial_write) writeScreenBuffer(); + if ((w_bitmap < 0) || (h_bitmap < 0) || (w < 0) || (h < 0)) return; + if ((x_part < 0) || (x_part >= w_bitmap)) return; + if ((y_part < 0) || (y_part >= h_bitmap)) return; + int16_t wb_bitmap = (w_bitmap + 3) / 4; // width bytes, bitmaps are padded + x_part -= x_part % 4; // byte boundary + w = w_bitmap - x_part < w ? w_bitmap - x_part : w; // limit + h = h_bitmap - y_part < h ? h_bitmap - y_part : h; // limit + w += x % 4; // adjust for byte boundary of x + x -= x % 4; // byte boundary + w = 4 * ((w + 3) / 4); // byte boundary, bitmaps are padded + int16_t x1 = x < 0 ? 0 : x; // limit + int16_t y1 = y < 0 ? 0 : y; // limit + int16_t w1 = x + w < int16_t(WIDTH) ? w : int16_t(WIDTH) - x; // limit + int16_t h1 = y + h < int16_t(HEIGHT) ? h : int16_t(HEIGHT) - y; // limit + int16_t dx = x1 - x; + int16_t dy = y1 - y; + w1 -= dx; + h1 -= dy; + if ((w1 <= 0) || (h1 <= 0)) return; + if (hasPartialUpdate) + { + _setPartialRamArea(x1, y1, w1, h1); + _writeCommand(0x10); + _startTransfer(); + for (int16_t i = 0; i < h1; i++) + { + for (int16_t j = 0; j < w1 / 4; j++) + { + uint8_t data; + // use wb_bitmap, h_bitmap of bitmap for index! + uint32_t idx = mirror_y ? x_part / 4 + j + dx / 4 + uint32_t((h_bitmap - 1 - (y_part + i + dy))) * wb_bitmap : x_part / 4 + j + dx / 4 + uint32_t(y_part + i + dy) * wb_bitmap; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + data = pgm_read_byte(&data1[idx]); +#else + data = data1[idx]; +#endif + } + else + { + data = data1[idx]; + } + if (invert) data = ~data; + _transfer(data); + } + } + _endTransfer(); + } + else + { + _writeCommand(0x10); + _startTransfer(); + for (int16_t i = 0; i < int16_t(HEIGHT); i++) + { + for (int16_t j = 0; j < int16_t(WIDTH); j += 4) + { + uint8_t data = 0x55; + if ((j >= x1) && (j < x1 + w) && (i >= y1) && (i < y1 + h)) + { + // use wb_bitmap, h_bitmap of bitmap for index! + uint32_t idx = mirror_y ? (x_part + j - x1) / 4 + uint32_t((h_bitmap - 1 - (y_part + i - y1))) * wb_bitmap : (x_part + j - x1) / 4 + uint32_t(y_part + i - y1) * wb_bitmap; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + data = pgm_read_byte(&data1[idx]); +#else + data = data1[idx]; +#endif + } + else + { + data = data1[idx]; + } + if (invert) data = ~data; + } + _transfer(data); + } + } + _endTransfer(); + } + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 +} + +void GxEPD2_420c_GDEY0420F51::drawImage(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + writeImage(bitmap, x, y, w, h, invert, mirror_y, pgm); + refresh(x, y, w, h); +} + +void GxEPD2_420c_GDEY0420F51::drawImagePart(const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + writeImagePart(bitmap, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm); + refresh(x, y, w, h); +} + +void GxEPD2_420c_GDEY0420F51::drawImage(const uint8_t* black, const uint8_t* color, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + writeImage(black, color, x, y, w, h, invert, mirror_y, pgm); + refresh(x, y, w, h); +} + +void GxEPD2_420c_GDEY0420F51::drawImagePart(const uint8_t* black, const uint8_t* color, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + writeImagePart(black, color, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm); + refresh(x, y, w, h); +} + +void GxEPD2_420c_GDEY0420F51::drawNative(const uint8_t* data1, const uint8_t* data2, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + writeNative(data1, data2, x, y, w, h, invert, mirror_y, pgm); + refresh(x, y, w, h); +} + +void GxEPD2_420c_GDEY0420F51::refresh(bool partial_update_mode) +{ + if (hasPartialUpdate) _setPartialRamArea(0, 0, WIDTH, HEIGHT); + _refresh(partial_update_mode); +} + +void GxEPD2_420c_GDEY0420F51::refresh(int16_t x, int16_t y, int16_t w, int16_t h) +{ + // intersection with screen + int16_t w1 = x < 0 ? w + x : w; // reduce + int16_t h1 = y < 0 ? h + y : h; // reduce + int16_t x1 = x < 0 ? 0 : x; // limit + int16_t y1 = y < 0 ? 0 : y; // limit + w1 = x1 + w1 < int16_t(WIDTH) ? w1 : int16_t(WIDTH) - x1; // limit + h1 = y1 + h1 < int16_t(HEIGHT) ? h1 : int16_t(HEIGHT) - y1; // limit + if ((w1 <= 0) || (h1 <= 0)) return; + // make x1, w1 multiple of 4 + w1 += x1 % 4; + if (w1 % 4 > 0) w1 += 4 - w1 % 4; + x1 -= x1 % 4; + bool fullscreen = ((x1 == 0) && (y1 == 0) && (w1 == WIDTH) && (h1 == HEIGHT)); + if (hasPartialUpdate) _setPartialRamArea(x1, y1, w1, h1, !fullscreen); + _refresh(!fullscreen); +} + +void GxEPD2_420c_GDEY0420F51::powerOff() +{ + _PowerOff(); +} + +void GxEPD2_420c_GDEY0420F51::hibernate() +{ + _PowerOff(); + if (_rst >= 0) + { + _writeCommand(0x07); // deep sleep + _writeData(0xA5); // control code + _hibernating = true; + _init_display_done = false; + } +} + +void GxEPD2_420c_GDEY0420F51::setPaged() +{ + if (!hasPartialUpdate) + { + _paged = true; + _InitDisplay(); + _writeCommand(0x10); + } +} + +void GxEPD2_420c_GDEY0420F51::_refresh(bool partial_update_mode) +{ + _writeCommand(0x50); // VCOM and Data Interval Setting + _writeData(partial_update_mode ? 0x97 : 0x37); // floating or white + _writeCommand(0x12); // Display Refresh + _writeData(0x00); + delay(1); + _waitWhileBusy("_refresh", full_refresh_time); + //_power_is_on = false; // not needed + _init_display_done = false; // needed +} + +void GxEPD2_420c_GDEY0420F51::_setPartialRamArea(uint16_t x, uint16_t y, uint16_t w, uint16_t h, bool partial_mode) +{ + //Serial.print("_setPartialRamArea("); Serial.print(x); Serial.print(", "); Serial.print(y); Serial.print(", "); + //Serial.print(w); Serial.print(", "); Serial.print(h); Serial.println(")"); + _writeCommand(0x83); + _writeData(x / 256); + _writeData(x % 256); + _writeData((x + w - 1) / 256); + _writeData((x + w - 1) % 256); + _writeData(y / 256); + _writeData(y % 256); + _writeData((y + h - 1) / 256); + _writeData((y + h - 1) % 256); + _writeData(partial_mode ? 0x01 : 0x00); +} + +void GxEPD2_420c_GDEY0420F51::_PowerOn() +{ + if (!_power_is_on) + { + _writeCommand(0x04); + _waitWhileBusy("_PowerOn", power_on_time); + } + _power_is_on = true; +} + +void GxEPD2_420c_GDEY0420F51::_PowerOff() +{ + if (_power_is_on) + { + _writeCommand(0x02); + _writeData(0x00); + _waitWhileBusy("_PowerOff", power_off_time); + } + _power_is_on = false; +} + +void GxEPD2_420c_GDEY0420F51::_InitDisplay() +{ + //Serial.println("_InitDisplay"); + // initcode from Good Dispay demo for GDEY029F51H + if ((_rst >= 0) && (_hibernating || _initial_write)) + { + digitalWrite(_rst, HIGH); + delay(20); // At least 20ms delay + digitalWrite(_rst, LOW); // Module reset + delay(2); // At least 40ms delay, 2ms for WS "clever" reset + digitalWrite(_rst, HIGH); + delay(2); // At least 50ms delay (32ms measured) + _waitWhileBusy("_InitDisplay reset", power_on_time); + _hibernating = false; + _power_is_on = false; + } + _writeCommand(0x00); // PSR + _writeData(0x0F); // default res (400x300)), scan up, shift left, booster on, no effect (no RST) + _writeData(0x09); // LUT from MPT, no add scan, VCOM default, TS_AUTO, VGN default, VCOM default, VCOM floating after refresh + _writeCommand(0x01); // PWRR + _writeData(0x07); // VMODE default, VSPL internal, VSP/VSN internal, VGP/VGN internal + _writeData(0x00); // VGP/VGN 20V + _writeData(0x22); // RED + _writeData(0x78); + _writeData(0x0A); // WHITE + _writeData(0x22); // RED + _writeCommand(0x03); // POFS + _writeData(0x10); // T_VDGP_OFF 40ms, T_VDS_OFF 20ms + _writeData(0x54); // VGP_LEN 2500ms, VGP_EXT 2000ms + _writeData(0x44); // XON_DLY 2000ms, XON_LEN 2000ms + _writeCommand(0x06); // BTST Booster Soft Start + _writeData(0x26); + _writeData(0x26); + _writeData(0x26); + _writeCommand(0x30); // PLL + _writeData(0xf7 & 0x02); + _writeCommand(0x41); // TSE temperature sensor + _writeData(0x00); // disable + _writeCommand(0x50); // CDI + _writeData(0x37); // (VBD 1, DDX 1) Gray1, 10hsync + //_writeData(0x17); // black border + //_writeData(0x37); // white border (default) + //_writeData(0x57); // yellow border + //_writeData(0x77); // red border + //_writeData(0x97); // floating border + _writeCommand(0x60); // TCON + _writeData(0x02); // ? + _writeData(0x02); // ? + _writeCommand(0x61); // TRES + _writeData(WIDTH / 256); // Source_BITS_H + _writeData(WIDTH % 256); // Source_BITS_L + _writeData(HEIGHT / 256); // Gate_BITS_H + _writeData(HEIGHT % 256); // Gate_BITS_L + _writeCommand(0x65); //0x65 + _writeData(0x00); + _writeData(0x00); + _writeData(0x00); + _writeData(0x00); + _writeCommand(0x82); // VDCS + _writeData(0xAD); + _writeCommand(0xE7); //0xE7 + _writeData(0x1C); + _writeCommand(0xE3); // PWS + _writeData(0x22); + _writeCommand(0xE0); //0xE0 + _writeData(0x00); + _writeCommand(0xE9); + _writeData(0x01); + _PowerOn(); + _init_display_done = true; +} diff --git a/src/epd4c/GxEPD2_420c_GDEY0420F51.h b/src/epd4c/GxEPD2_420c_GDEY0420F51.h new file mode 100644 index 00000000..762f0ed4 --- /dev/null +++ b/src/epd4c/GxEPD2_420c_GDEY0420F51.h @@ -0,0 +1,78 @@ +// Display Library for SPI e-paper panels from Dalian Good Display and boards from Waveshare. +// Requires HW SPI and Adafruit_GFX. Caution: the e-paper panels require 3.3V supply AND data lines! +// +// based on Demo Example from Good Display: https://www.good-display.com/comp/xcompanyFile/downloadNew.do?appId=24&fid=1892&id=1326 +// Panel: GDEY0420F51 : https://www.good-display.com/product/506.html +// Panel specs: https://v4.cecdn.yun300.cn/100001_1909185148/GDEY042F51.pdf +// Controller: HX8717, no specs, see panel specs for command list subset +// +// Author: Jean-Marc Zingg +// +// Version: see library.properties +// +// Library: https://github.com/ZinggJM/GxEPD2 + +#ifndef _GxEPD2_420c_GDEY0420F51_H_ +#define _GxEPD2_420c_GDEY0420F51_H_ + +#include "../GxEPD2_EPD.h" + +class GxEPD2_420c_GDEY0420F51 : public GxEPD2_EPD +{ + public: + // attributes + static const uint16_t WIDTH = 400; + static const uint16_t WIDTH_VISIBLE = WIDTH; + static const uint16_t HEIGHT = 300; + static const GxEPD2::Panel panel = GxEPD2::GDEY0420F51; + static const bool hasColor = true; + static const bool hasPartialUpdate = true; // can be switched off + static const bool hasFastPartialUpdate = false; + static const uint16_t power_on_time = 100; // ms, e.g. 65197us + static const uint16_t power_off_time = 100; // ms, e.g. 84464us + static const uint16_t full_refresh_time = 30000; // ms, e.g. 27676925us + static const uint16_t partial_refresh_time = 30000; // ms, e.g. 27676925us + // constructor + GxEPD2_420c_GDEY0420F51(int16_t cs, int16_t dc, int16_t rst, int16_t busy); + // methods (virtual) + // Support for Bitmaps (Sprites) to Controller Buffer and to Screen + void clearScreen(uint8_t value = 0xFF); // init controller memory and screen (default white) + void clearScreen(uint8_t black_value, uint8_t color_value); // init controller memory and screen + void writeScreenBuffer(uint8_t value = 0xFF); // init controller memory (default white) + void writeScreenBuffer(uint8_t black_value, uint8_t color_value); // init controller memory + // write to controller memory, without screen refresh; x and w should be multiple of 8 + void writeImage(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void writeImagePart(const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void writeImage(const uint8_t* black, const uint8_t* color, int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void writeImagePart(const uint8_t* black, const uint8_t* color, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + // write sprite of native data to controller memory, without screen refresh; x and w should be multiple of 8 + void writeNative(const uint8_t* data1, const uint8_t* data2, int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void writeNativePart(const uint8_t* data1, const uint8_t* data2, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + // write to controller memory, with screen refresh; x and w should be multiple of 8 + void drawImage(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void drawImagePart(const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void drawImage(const uint8_t* black, const uint8_t* color, int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void drawImagePart(const uint8_t* black, const uint8_t* color, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + // write sprite of native data to controller memory, with screen refresh; x and w should be multiple of 8 + void drawNative(const uint8_t* data1, const uint8_t* data2, int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void refresh(bool partial_update_mode = false); // screen refresh from controller memory to full screen + void refresh(int16_t x, int16_t y, int16_t w, int16_t h); // screen refresh from controller memory, partial screen + void powerOff(); // turns off generation of panel driving voltages, avoids screen fading over time + void hibernate(); // turns powerOff() and sets controller to deep sleep for minimum power use, ONLY if wakeable by RST (rst >= 0) + void setPaged(); // for GxEPD2_154c paged workaround, also for 4-color for use with hasPartialUpdate = false + private: + void _refresh(bool partial_update_mode); + void _setPartialRamArea(uint16_t x, uint16_t y, uint16_t w, uint16_t h, bool partial_mode = true); + void _PowerOn(); + void _PowerOff(); + void _InitDisplay(); + private: + bool _paged; +}; + +#endif diff --git a/src/epd4c/GxEPD2_437c.cpp b/src/epd4c/GxEPD2_437c.cpp index 32524506..af81c683 100644 --- a/src/epd4c/GxEPD2_437c.cpp +++ b/src/epd4c/GxEPD2_437c.cpp @@ -28,7 +28,7 @@ void GxEPD2_437c::clearScreen(uint8_t value) void GxEPD2_437c::clearScreen(uint8_t black_value, uint8_t color_value) { writeScreenBuffer(black_value, color_value); - _Update_Full(); + refresh(); } void GxEPD2_437c::writeScreenBuffer(uint8_t value) @@ -38,8 +38,8 @@ void GxEPD2_437c::writeScreenBuffer(uint8_t value) void GxEPD2_437c::writeScreenBuffer(uint8_t black_value, uint8_t color_value) { - _initial_write = false; // initial full screen buffer clean done - _Init_Full(); + //Serial.println("writeScreenBuffer"); + if (!_init_display_done) _InitDisplay(); _writeCommand(0x10); _startTransfer(); for (uint32_t i = 0; i < uint32_t(WIDTH) * uint32_t(HEIGHT) / 4; i++) @@ -47,6 +47,7 @@ void GxEPD2_437c::writeScreenBuffer(uint8_t black_value, uint8_t color_value) _transfer(0xFF == black_value ? 0x55 : 0x00); } _endTransfer(); + _initial_write = false; // initial full screen buffer clean done } void GxEPD2_437c::writeImage(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) @@ -54,60 +55,45 @@ void GxEPD2_437c::writeImage(const uint8_t bitmap[], int16_t x, int16_t y, int16 //Serial.print("writeImage("); Serial.print(x); Serial.print(", "); Serial.print(y); Serial.print(", "); //Serial.print(w); Serial.print(", "); Serial.print(h); Serial.println(")"); delay(1); // yield() to avoid WDT on ESP8266 and ESP32 - if (_paged && (x == 0) && (w == int16_t(WIDTH)) && (h < int16_t(HEIGHT))) + if (!_init_display_done) _InitDisplay(); + if (_initial_write) writeScreenBuffer(); + if (hasPartialUpdate) { - //Serial.println("paged"); - _startTransfer(); - for (uint32_t i = 0; i < uint32_t(WIDTH) * uint32_t(h) / 8; i++) - { - uint8_t data = bitmap[i]; - for (int16_t k = 0; k < 2; k++) - { - uint8_t data2 = (data & 0x80 ? 0x40 : 0x00) | (data & 0x40 ? 0x10 : 0x00) | - (data & 0x20 ? 0x04 : 0x00) | (data & 0x10 ? 0x01 : 0x00); - data <<= 4; - _transfer(data2); - } - } - _endTransfer(); - if (y + h == HEIGHT) // last page - { - //Serial.println("paged ended"); - _paged = false; - } - } - else - { - _paged = false; int16_t wb = (w + 7) / 8; // width bytes, bitmaps are padded x -= x % 8; // byte boundary w = wb * 8; // byte boundary - if ((w <= 0) || (h <= 0)) return; - _Init_Full(); + int16_t x1 = x < 0 ? 0 : x; // limit + int16_t y1 = y < 0 ? 0 : y; // limit + int16_t w1 = x + w < int16_t(WIDTH) ? w : int16_t(WIDTH) - x; // limit + int16_t h1 = y + h < int16_t(HEIGHT) ? h : int16_t(HEIGHT) - y; // limit + int16_t dx = x1 - x; + int16_t dy = y1 - y; + w1 -= dx; + h1 -= dy; + if ((w1 <= 0) || (h1 <= 0)) return; + _setPartialRamArea(x1, y1, w1, h1); _writeCommand(0x10); _startTransfer(); - for (int16_t i = 0; i < int16_t(HEIGHT); i++) + for (int16_t i = 0; i < h1; i++) { - for (int16_t j = 0; j < int16_t(WIDTH); j += 8) + for (int16_t j = 0; j < w1 / 8; j++) { uint8_t data = 0xFF; - if ((j >= x) && (j <= x + w) && (i >= y) && (i < y + h)) + // use wb, h of bitmap for index! + uint32_t idx = mirror_y ? j + dx / 8 + uint32_t((h - 1 - (i + dy))) * wb : j + dx / 8 + uint32_t(i + dy) * wb; + if (pgm) { - uint32_t idx = mirror_y ? (j - x) / 8 + uint32_t((h - 1 - (i - y))) * wb : (j - x) / 8 + uint32_t(i - y) * wb; - if (pgm) - { #if defined(__AVR) || defined(ESP8266) || defined(ESP32) - data = pgm_read_byte(&bitmap[idx]); + data = pgm_read_byte(&bitmap[idx]); #else - data = bitmap[idx]; + data = bitmap[idx]; #endif - } - else - { - data = bitmap[idx]; - } - if (invert) data = ~data; } + else + { + data = bitmap[idx]; + } + if (invert) data = ~data; for (int16_t k = 0; k < 2; k++) { uint8_t data2 = (data & 0x80 ? 0x40 : 0x00) | (data & 0x40 ? 0x10 : 0x00) | @@ -119,84 +105,156 @@ void GxEPD2_437c::writeImage(const uint8_t bitmap[], int16_t x, int16_t y, int16 } _endTransfer(); } - delay(1); // yield() to avoid WDT on ESP8266 and ESP32 -} - -void GxEPD2_437c::writeImage(const uint8_t* black, const uint8_t* color, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) -{ - if (!black && !color) return; - if (!color) return writeImage(black, x, y, w, h, invert, mirror_y, pgm); - //Serial.print("writeImage("); Serial.print(x); Serial.print(", "); Serial.print(y); Serial.print(", "); - //Serial.print(w); Serial.print(", "); Serial.print(h); Serial.println(")"); - delay(1); // yield() to avoid WDT on ESP8266 and ESP32 - if (_paged && (x == 0) && (w == int16_t(WIDTH)) && (h < int16_t(HEIGHT))) + else { - //Serial.println("paged"); - _startTransfer(); - for (uint32_t i = 0; i < uint32_t(WIDTH) * uint32_t(h) / 8; i++) + if (_paged && (x == 0) && (w == int16_t(WIDTH)) && (h < int16_t(HEIGHT))) { - uint8_t black_data = black[i]; - uint8_t color_data = color[i]; - for (int16_t k = 0; k < 2; k++) + //Serial.println("paged"); + _startTransfer(); + for (uint32_t i = 0; i < uint32_t(WIDTH) * uint32_t(h) / 8; i++) { - uint8_t out_data = 0x00; - for (int16_t l = 0; l < 4; l++) + uint8_t data = bitmap[i]; + for (int16_t k = 0; k < 2; k++) { - out_data <<= 2; - if (!(color_data & 0x80)) out_data |= 0x03; // red - else out_data |= black_data & 0x80 ? 0x01 : 0x00; // white or black - black_data <<= 1; - color_data <<= 1; + uint8_t data2 = (data & 0x80 ? 0x40 : 0x00) | (data & 0x40 ? 0x10 : 0x00) | + (data & 0x20 ? 0x04 : 0x00) | (data & 0x10 ? 0x01 : 0x00); + data <<= 4; + _transfer(data2); } - _transfer(out_data); + } + _endTransfer(); + if (y + h == HEIGHT) // last page + { + //Serial.println("paged ended"); + _paged = false; } } - _endTransfer(); - if (y + h == HEIGHT) // last page + else { - //Serial.println("paged ended"); _paged = false; + int16_t wb = (w + 7) / 8; // width bytes, bitmaps are padded + x -= x % 8; // byte boundary + w = wb * 8; // byte boundary + if ((w <= 0) || (h <= 0)) return; + _writeCommand(0x10); + _startTransfer(); + for (int16_t i = 0; i < int16_t(HEIGHT); i++) + { + for (int16_t j = 0; j < int16_t(WIDTH); j += 8) + { + uint8_t data = 0xFF; + if ((j >= x) && (j <= x + w) && (i >= y) && (i < y + h)) + { + uint32_t idx = mirror_y ? (j - x) / 8 + uint32_t((h - 1 - (i - y))) * wb : (j - x) / 8 + uint32_t(i - y) * wb; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + data = pgm_read_byte(&bitmap[idx]); +#else + data = bitmap[idx]; +#endif + } + else + { + data = bitmap[idx]; + } + if (invert) data = ~data; + } + for (int16_t k = 0; k < 2; k++) + { + uint8_t data2 = (data & 0x80 ? 0x40 : 0x00) | (data & 0x40 ? 0x10 : 0x00) | + (data & 0x20 ? 0x04 : 0x00) | (data & 0x10 ? 0x01 : 0x00); + data <<= 4; + _transfer(data2); + } + } + } + _endTransfer(); } } - else + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 +} + +void GxEPD2_437c::writeImage(const uint8_t* black, const uint8_t* color, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + if (!black && !color) return; + if (!color) return writeImage(black, x, y, w, h, invert, mirror_y, pgm); + //Serial.print("writeImage("); Serial.print(x); Serial.print(", "); Serial.print(y); Serial.print(", "); + //Serial.print(w); Serial.print(", "); Serial.print(h); Serial.println(")"); + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 + if (!_init_display_done) _InitDisplay(); + if (_initial_write) writeScreenBuffer(); + if (hasPartialUpdate) { - _paged = false; int16_t wb = (w + 7) / 8; // width bytes, bitmaps are padded x -= x % 8; // byte boundary w = wb * 8; // byte boundary - if ((w <= 0) || (h <= 0)) return; - _Init_Full(); + int16_t x1 = x < 0 ? 0 : x; // limit + int16_t y1 = y < 0 ? 0 : y; // limit + int16_t w1 = x + w < int16_t(WIDTH) ? w : int16_t(WIDTH) - x; // limit + int16_t h1 = y + h < int16_t(HEIGHT) ? h : int16_t(HEIGHT) - y; // limit + int16_t dx = x1 - x; + int16_t dy = y1 - y; + w1 -= dx; + h1 -= dy; + if ((w1 <= 0) || (h1 <= 0)) return; + _setPartialRamArea(x1, y1, w1, h1); _writeCommand(0x10); _startTransfer(); - for (int16_t i = 0; i < int16_t(HEIGHT); i++) + for (int16_t i = 0; i < h1; i++) { - for (int16_t j = 0; j < int16_t(WIDTH); j += 8) + for (int16_t j = 0; j < w1 / 8; j++) { uint8_t black_data = 0xFF, color_data = 0xFF; - if ((j >= x) && (j < x + w) && (i >= y) && (i < y + h)) + // use wb, h of bitmap for index! + uint32_t idx = mirror_y ? j + dx / 8 + uint32_t((h - 1 - (i + dy))) * wb : j + dx / 8 + uint32_t(i + dy) * wb; + if (pgm) { - uint32_t idx = mirror_y ? (j - x) / 8 + uint32_t((h - 1 - (i - y))) * wb : (j - x) / 8 + uint32_t(i - y) * wb; - if (pgm) - { #if defined(__AVR) || defined(ESP8266) || defined(ESP32) - black_data = pgm_read_byte(&black[idx]); - color_data = pgm_read_byte(&color[idx]); + black_data = pgm_read_byte(&black[idx]); + color_data = pgm_read_byte(&color[idx]); #else - black_data = black[idx]; - color_data = color[idx]; + black_data = black[idx]; + color_data = color[idx]; #endif - } - else - { - black_data = black[idx]; - color_data = color[idx]; - } - if (invert) + } + else + { + black_data = black[idx]; + color_data = color[idx]; + } + if (invert) + { + black_data = ~black_data; + color_data = ~color_data; + } + for (int16_t k = 0; k < 2; k++) + { + uint8_t out_data = 0x00; + for (int16_t l = 0; l < 4; l++) { - black_data = ~black_data; - color_data = ~color_data; + out_data <<= 2; + if (!(color_data & 0x80)) out_data |= 0x03; // red + else out_data |= black_data & 0x80 ? 0x01 : 0x00; // white or black + black_data <<= 1; + color_data <<= 1; } + _transfer(out_data); } + } + } + _endTransfer(); + } + else + { + if (_paged && (x == 0) && (w == int16_t(WIDTH)) && (h < int16_t(HEIGHT))) + { + //Serial.println("paged"); + _startTransfer(); + for (uint32_t i = 0; i < uint32_t(WIDTH) * uint32_t(h) / 8; i++) + { + uint8_t black_data = black[i]; + uint8_t color_data = color[i]; for (int16_t k = 0; k < 2; k++) { uint8_t out_data = 0x00; @@ -211,16 +269,82 @@ void GxEPD2_437c::writeImage(const uint8_t* black, const uint8_t* color, int16_t _transfer(out_data); } } + _endTransfer(); + if (y + h == HEIGHT) // last page + { + //Serial.println("paged ended"); + _paged = false; + } + } + else + { + _paged = false; + int16_t wb = (w + 7) / 8; // width bytes, bitmaps are padded + x -= x % 8; // byte boundary + w = wb * 8; // byte boundary + if ((w <= 0) || (h <= 0)) return; + _writeCommand(0x10); + _startTransfer(); + for (int16_t i = 0; i < int16_t(HEIGHT); i++) + { + for (int16_t j = 0; j < int16_t(WIDTH); j += 8) + { + uint8_t black_data = 0xFF, color_data = 0xFF; + if ((j >= x) && (j < x + w) && (i >= y) && (i < y + h)) + { + uint32_t idx = mirror_y ? (j - x) / 8 + uint32_t((h - 1 - (i - y))) * wb : (j - x) / 8 + uint32_t(i - y) * wb; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + black_data = pgm_read_byte(&black[idx]); + color_data = pgm_read_byte(&color[idx]); +#else + black_data = black[idx]; + color_data = color[idx]; +#endif + } + else + { + black_data = black[idx]; + color_data = color[idx]; + } + if (invert) + { + black_data = ~black_data; + color_data = ~color_data; + } + } + for (int16_t k = 0; k < 2; k++) + { + uint8_t out_data = 0x00; + for (int16_t l = 0; l < 4; l++) + { + out_data <<= 2; + if (!(color_data & 0x80)) out_data |= 0x03; // red + else out_data |= black_data & 0x80 ? 0x01 : 0x00; // white or black + black_data <<= 1; + color_data <<= 1; + } + _transfer(out_data); + } + } + } + _endTransfer(); } - _endTransfer(); } delay(1); // yield() to avoid WDT on ESP8266 and ESP32 } void GxEPD2_437c::writeImagePart(const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, - int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) + int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) { + //Serial.print("writeImagePart("); Serial.print(x_part); Serial.print(", "); Serial.print(y_part); Serial.print(", "); + //Serial.print(w_bitmap); Serial.print(", "); Serial.print(h_bitmap); Serial.print(", "); + //Serial.print(x); Serial.print(", "); Serial.print(y); Serial.print(", "); + //Serial.print(w); Serial.print(", "); Serial.print(h); Serial.println(")"); delay(1); // yield() to avoid WDT on ESP8266 and ESP32 + if (!_init_display_done) _InitDisplay(); + if (_initial_write) writeScreenBuffer(); if ((w_bitmap < 0) || (h_bitmap < 0) || (w < 0) || (h < 0)) return; if ((x_part < 0) || (x_part >= w_bitmap)) return; if ((y_part < 0) || (y_part >= h_bitmap)) return; @@ -228,7 +352,9 @@ void GxEPD2_437c::writeImagePart(const uint8_t bitmap[], int16_t x_part, int16_t x_part -= x_part % 8; // byte boundary w = w_bitmap - x_part < w ? w_bitmap - x_part : w; // limit h = h_bitmap - y_part < h ? h_bitmap - y_part : h; // limit - x -= x % 8; // byte boundary + // make x, w multiple of 8 + w += x % 8; // adjust for byte boundary of x + x -= x % 8; // byte boundary ox w = 8 * ((w + 7) / 8); // byte boundary, bitmaps are padded int16_t x1 = x < 0 ? 0 : x; // limit int16_t y1 = y < 0 ? 0 : y; // limit @@ -239,18 +365,18 @@ void GxEPD2_437c::writeImagePart(const uint8_t bitmap[], int16_t x_part, int16_t w1 -= dx; h1 -= dy; if ((w1 <= 0) || (h1 <= 0)) return; - _Init_Full(); - _writeCommand(0x10); - _startTransfer(); - for (int16_t i = 0; i < int16_t(HEIGHT); i++) + if (hasPartialUpdate) { - for (int16_t j = 0; j < int16_t(WIDTH); j += 8) + _setPartialRamArea(x1, y1, w1, h1); + _writeCommand(0x10); + _startTransfer(); + for (int16_t i = 0; i < h1; i++) { - uint8_t data = 0xFF; - if ((j >= x1) && (j < x1 + w) && (i >= y1) && (i < y1 + h)) + for (int16_t j = 0; j < w1 / 8; j++) { + uint8_t data; // use wb_bitmap, h_bitmap of bitmap for index! - uint32_t idx = mirror_y ? (x_part + j - x1) / 8 + uint32_t((h_bitmap - 1 - (y_part + i - y1))) * wb_bitmap : (x_part + j - x1) / 8 + uint32_t(y_part + i - y1) * wb_bitmap; + uint32_t idx = mirror_y ? x_part / 8 + j + dx / 8 + uint32_t((h_bitmap - 1 - (y_part + i + dy))) * wb_bitmap : x_part / 8 + j + dx / 8 + uint32_t(y_part + i + dy) * wb_bitmap; if (pgm) { #if defined(__AVR) || defined(ESP8266) || defined(ESP32) @@ -264,22 +390,60 @@ void GxEPD2_437c::writeImagePart(const uint8_t bitmap[], int16_t x_part, int16_t data = bitmap[idx]; } if (invert) data = ~data; + for (int16_t k = 0; k < 2; k++) + { + uint8_t data2 = (data & 0x80 ? 0x40 : 0x00) | (data & 0x40 ? 0x10 : 0x00) | + (data & 0x20 ? 0x04 : 0x00) | (data & 0x10 ? 0x01 : 0x00); + data <<= 4; + _transfer(data2); + } } - for (int16_t k = 0; k < 2; k++) + } + _endTransfer(); + } + else + { + _writeCommand(0x10); + _startTransfer(); + for (int16_t i = 0; i < int16_t(HEIGHT); i++) + { + for (int16_t j = 0; j < int16_t(WIDTH); j += 8) { - uint8_t data2 = (data & 0x80 ? 0x40 : 0x00) | (data & 0x40 ? 0x10 : 0x00) | - (data & 0x20 ? 0x04 : 0x00) | (data & 0x10 ? 0x01 : 0x00); - data <<= 4; - _transfer(data2); + uint8_t data = 0xFF; + if ((j >= x1) && (j < x1 + w) && (i >= y1) && (i < y1 + h)) + { + // use wb_bitmap, h_bitmap of bitmap for index! + uint32_t idx = mirror_y ? (x_part + j - x1) / 8 + uint32_t((h_bitmap - 1 - (y_part + i - y1))) * wb_bitmap : (x_part + j - x1) / 8 + uint32_t(y_part + i - y1) * wb_bitmap; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + data = pgm_read_byte(&bitmap[idx]); +#else + data = bitmap[idx]; +#endif + } + else + { + data = bitmap[idx]; + } + if (invert) data = ~data; + } + for (int16_t k = 0; k < 2; k++) + { + uint8_t data2 = (data & 0x80 ? 0x40 : 0x00) | (data & 0x40 ? 0x10 : 0x00) | + (data & 0x20 ? 0x04 : 0x00) | (data & 0x10 ? 0x01 : 0x00); + data <<= 4; + _transfer(data2); + } } } + _endTransfer(); } - _endTransfer(); delay(1); // yield() to avoid WDT on ESP8266 and ESP32 } void GxEPD2_437c::writeImagePart(const uint8_t* black, const uint8_t* color, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, - int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) + int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) { //Serial.print("writeImagePart("); Serial.print(x_part); Serial.print(", "); Serial.print(y_part); Serial.print(", "); //Serial.print(w_bitmap); Serial.print(", "); Serial.print(h_bitmap); Serial.print(", "); @@ -287,6 +451,8 @@ void GxEPD2_437c::writeImagePart(const uint8_t* black, const uint8_t* color, int //Serial.print(w); Serial.print(", "); Serial.print(h); Serial.println(")"); if (!black && !color) return; if (!color) return writeImagePart(black, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm); + if (!_init_display_done) _InitDisplay(); + if (_initial_write) writeScreenBuffer(); delay(1); // yield() to avoid WDT on ESP8266 and ESP32 if ((w_bitmap < 0) || (h_bitmap < 0) || (w < 0) || (h < 0)) return; if ((x_part < 0) || (x_part >= w_bitmap)) return; @@ -295,7 +461,9 @@ void GxEPD2_437c::writeImagePart(const uint8_t* black, const uint8_t* color, int x_part -= x_part % 8; // byte boundary w = w_bitmap - x_part < w ? w_bitmap - x_part : w; // limit h = h_bitmap - y_part < h ? h_bitmap - y_part : h; // limit - x -= x % 8; // byte boundary + // make x, w multiple of 8 + w += x % 8; // adjust for byte boundary of x + x -= x % 8; // byte boundary ox w = 8 * ((w + 7) / 8); // byte boundary, bitmaps are padded int16_t x1 = x < 0 ? 0 : x; // limit int16_t y1 = y < 0 ? 0 : y; // limit @@ -306,18 +474,18 @@ void GxEPD2_437c::writeImagePart(const uint8_t* black, const uint8_t* color, int w1 -= dx; h1 -= dy; if ((w1 <= 0) || (h1 <= 0)) return; - _Init_Full(); - _writeCommand(0x10); - _startTransfer(); - for (int16_t i = 0; i < int16_t(HEIGHT); i++) + if (hasPartialUpdate) { - for (int16_t j = 0; j < int16_t(WIDTH); j += 8) + _setPartialRamArea(x1, y1, w1, h1); + _writeCommand(0x10); + _startTransfer(); + for (int16_t i = 0; i < h1; i++) { - uint8_t black_data = 0xFF, color_data = 0xFF; - if ((j >= x1) && (j < x1 + w) && (i >= y1) && (i < y1 + h)) + for (int16_t j = 0; j < w1 / 8; j++) { + uint8_t black_data = 0xFF, color_data = 0xFF; // use wb_bitmap, h_bitmap of bitmap for index! - uint32_t idx = mirror_y ? (x_part + j - x1) / 8 + uint32_t((h_bitmap - 1 - (y_part + i - y1))) * wb_bitmap : (x_part + j - x1) / 8 + uint32_t(y_part + i - y1) * wb_bitmap; + uint32_t idx = mirror_y ? x_part / 8 + j + dx / 8 + uint32_t((h_bitmap - 1 - (y_part + i + dy))) * wb_bitmap : x_part / 8 + j + dx / 8 + uint32_t(y_part + i + dy) * wb_bitmap; if (pgm) { #if defined(__AVR) || defined(ESP8266) || defined(ESP32) @@ -333,38 +501,129 @@ void GxEPD2_437c::writeImagePart(const uint8_t* black, const uint8_t* color, int black_data = black[idx]; color_data = color[idx]; } - if (invert) + for (int16_t k = 0; k < 2; k++) { - black_data = ~black_data; - color_data = ~color_data; + uint8_t out_data = 0x00; + for (int16_t l = 0; l < 4; l++) + { + out_data <<= 2; + if (!(color_data & 0x80)) out_data |= 0x03; // red + else out_data |= black_data & 0x80 ? 0x01 : 0x00; // white or black + black_data <<= 1; + color_data <<= 1; + } + _transfer(out_data); } } - for (int16_t k = 0; k < 2; k++) + } + _endTransfer(); + } + else + { + _writeCommand(0x10); + _startTransfer(); + for (int16_t i = 0; i < int16_t(HEIGHT); i++) + { + for (int16_t j = 0; j < int16_t(WIDTH); j += 8) { - uint8_t out_data = 0x00; - for (int16_t l = 0; l < 4; l++) + uint8_t black_data = 0xFF, color_data = 0xFF; + if ((j >= x1) && (j < x1 + w) && (i >= y1) && (i < y1 + h)) { - out_data <<= 2; - if (!(color_data & 0x80)) out_data |= 0x03; // red - else out_data |= black_data & 0x80 ? 0x01 : 0x00; // white or black - black_data <<= 1; - color_data <<= 1; + // use wb_bitmap, h_bitmap of bitmap for index! + uint32_t idx = mirror_y ? (x_part + j - x1) / 8 + uint32_t((h_bitmap - 1 - (y_part + i - y1))) * wb_bitmap : (x_part + j - x1) / 8 + uint32_t(y_part + i - y1) * wb_bitmap; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + black_data = pgm_read_byte(&black[idx]); + color_data = pgm_read_byte(&color[idx]); +#else + black_data = black[idx]; + color_data = color[idx]; +#endif + } + else + { + black_data = black[idx]; + color_data = color[idx]; + } + if (invert) + { + black_data = ~black_data; + color_data = ~color_data; + } + } + for (int16_t k = 0; k < 2; k++) + { + uint8_t out_data = 0x00; + for (int16_t l = 0; l < 4; l++) + { + out_data <<= 2; + if (!(color_data & 0x80)) out_data |= 0x03; // red + else out_data |= black_data & 0x80 ? 0x01 : 0x00; // white or black + black_data <<= 1; + color_data <<= 1; + } + _transfer(out_data); } - _transfer(out_data); } } + _endTransfer(); } - _endTransfer(); delay(1); // yield() to avoid WDT on ESP8266 and ESP32 } void GxEPD2_437c::writeNative(const uint8_t* data1, const uint8_t* data2, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) { - if (data1) + if (!data1) return; + //Serial.print("writeNative("); Serial.print(x); Serial.print(", "); Serial.print(y); Serial.print(", "); + //Serial.print(w); Serial.print(", "); Serial.print(h); Serial.println(")"); + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 + if (!_init_display_done) _InitDisplay(); + if (_initial_write) writeScreenBuffer(); + if (hasPartialUpdate) + { + int16_t wb = (w + 3) / 4; // width bytes, bitmaps are padded + x -= x % 4; // byte boundary + w = wb * 4; // byte boundary + int16_t x1 = x < 0 ? 0 : x; // limit + int16_t y1 = y < 0 ? 0 : y; // limit + int16_t w1 = x + w < int16_t(WIDTH) ? w : int16_t(WIDTH) - x; // limit + int16_t h1 = y + h < int16_t(HEIGHT) ? h : int16_t(HEIGHT) - y; // limit + int16_t dx = x1 - x; + int16_t dy = y1 - y; + w1 -= dx; + h1 -= dy; + if ((w1 <= 0) || (h1 <= 0)) return; + _setPartialRamArea(x1, y1, w1, h1); + _writeCommand(0x10); + _startTransfer(); + for (int16_t i = 0; i < h1; i++) + { + for (int16_t j = 0; j < w1 / 4; j++) + { + uint8_t data; + // use wb, h of bitmap for index! + uint32_t idx = mirror_y ? j + dx / 4 + uint32_t((h - 1 - (i + dy))) * wb : j + dx / 4 + uint32_t(i + dy) * wb; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + data = pgm_read_byte(&data1[idx]); +#else + data = data1[idx]; +#endif + } + else + { + data = data1[idx]; + } + if (invert) data = ~data; + _transfer(data); + } + } + _endTransfer(); + } + else { - //Serial.print("writeNative("); Serial.print(x); Serial.print(", "); Serial.print(y); Serial.print(", "); - //Serial.print(w); Serial.print(", "); Serial.print(h); Serial.println(")"); - delay(1); // yield() to avoid WDT on ESP8266 and ESP32 if (_paged && (x == 0) && (w == int16_t(WIDTH)) && (h < int16_t(HEIGHT))) { //Serial.println("paged"); @@ -383,12 +642,12 @@ void GxEPD2_437c::writeNative(const uint8_t* data1, const uint8_t* data2, int16_ } else { + //Serial.println("not paged"); _paged = false; int16_t wb = (w + 3) / 4; // width bytes, bitmaps are padded x -= x % 4; // byte boundary w = wb * 4; // byte boundary if ((w <= 0) || (h <= 0)) return; - _Init_Full(); _writeCommand(0x10); _startTransfer(); for (int16_t i = 0; i < int16_t(HEIGHT); i++) @@ -421,28 +680,27 @@ void GxEPD2_437c::writeNative(const uint8_t* data1, const uint8_t* data2, int16_ } _endTransfer(); } - delay(1); // yield() to avoid WDT on ESP8266 and ESP32 } + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 } void GxEPD2_437c::writeNativePart(const uint8_t* data1, const uint8_t* data2, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, - int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) + int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) { - //Serial.print("writeNativePart("); Serial.print(x_part); Serial.print(", "); Serial.print(y_part); Serial.print(", "); - //Serial.print(w_bitmap); Serial.print(", "); Serial.print(h_bitmap); Serial.print(", "); - //Serial.print(x); Serial.print(", "); Serial.print(y); Serial.print(", "); - //Serial.print(w); Serial.print(", "); Serial.print(h); Serial.println(")"); if (!data1) return; delay(1); // yield() to avoid WDT on ESP8266 and ESP32 + if (!_init_display_done) _InitDisplay(); + if (_initial_write) writeScreenBuffer(); if ((w_bitmap < 0) || (h_bitmap < 0) || (w < 0) || (h < 0)) return; if ((x_part < 0) || (x_part >= w_bitmap)) return; if ((y_part < 0) || (y_part >= h_bitmap)) return; - int16_t wb_bitmap = (w_bitmap + 1) / 2; // width bytes, bitmaps are padded - x_part -= x_part % 2; // byte boundary + int16_t wb_bitmap = (w_bitmap + 3) / 4; // width bytes, bitmaps are padded + x_part -= x_part % 4; // byte boundary w = w_bitmap - x_part < w ? w_bitmap - x_part : w; // limit h = h_bitmap - y_part < h ? h_bitmap - y_part : h; // limit + w += x % 4; // adjust for byte boundary of x x -= x % 4; // byte boundary - w = 4 * ((w + 1) / 4); // byte boundary, bitmaps are padded + w = 4 * ((w + 3) / 4); // byte boundary, bitmaps are padded int16_t x1 = x < 0 ? 0 : x; // limit int16_t y1 = y < 0 ? 0 : y; // limit int16_t w1 = x + w < int16_t(WIDTH) ? w : int16_t(WIDTH) - x; // limit @@ -452,18 +710,18 @@ void GxEPD2_437c::writeNativePart(const uint8_t* data1, const uint8_t* data2, in w1 -= dx; h1 -= dy; if ((w1 <= 0) || (h1 <= 0)) return; - _Init_Full(); - _writeCommand(0x10); - _startTransfer(); - for (int16_t i = 0; i < int16_t(HEIGHT); i++) + if (hasPartialUpdate) { - for (int16_t j = 0; j < int16_t(WIDTH); j += 4) + _setPartialRamArea(x1, y1, w1, h1); + _writeCommand(0x10); + _startTransfer(); + for (int16_t i = 0; i < h1; i++) { - uint8_t data = 0x55; - if ((j >= x1) && (j < x1 + w) && (i >= y1) && (i < y1 + h)) + for (int16_t j = 0; j < w1 / 4; j++) { + uint8_t data; // use wb_bitmap, h_bitmap of bitmap for index! - uint32_t idx = mirror_y ? (x_part + j - x1) / 4 + uint32_t((h_bitmap - 1 - (y_part + i - y1))) * wb_bitmap : (x_part + j - x1) / 4 + uint32_t(y_part + i - y1) * wb_bitmap; + uint32_t idx = mirror_y ? x_part / 4 + j + dx / 4 + uint32_t((h_bitmap - 1 - (y_part + i + dy))) * wb_bitmap : x_part / 4 + j + dx / 4 + uint32_t(y_part + i + dy) * wb_bitmap; if (pgm) { #if defined(__AVR) || defined(ESP8266) || defined(ESP32) @@ -477,11 +735,43 @@ void GxEPD2_437c::writeNativePart(const uint8_t* data1, const uint8_t* data2, in data = data1[idx]; } if (invert) data = ~data; + _transfer(data); } - _transfer(data); } + _endTransfer(); + } + else + { + _writeCommand(0x10); + _startTransfer(); + for (int16_t i = 0; i < int16_t(HEIGHT); i++) + { + for (int16_t j = 0; j < int16_t(WIDTH); j += 4) + { + uint8_t data = 0x55; + if ((j >= x1) && (j < x1 + w) && (i >= y1) && (i < y1 + h)) + { + // use wb_bitmap, h_bitmap of bitmap for index! + uint32_t idx = mirror_y ? (x_part + j - x1) / 4 + uint32_t((h_bitmap - 1 - (y_part + i - y1))) * wb_bitmap : (x_part + j - x1) / 4 + uint32_t(y_part + i - y1) * wb_bitmap; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + data = pgm_read_byte(&data1[idx]); +#else + data = data1[idx]; +#endif + } + else + { + data = data1[idx]; + } + if (invert) data = ~data; + } + _transfer(data); + } + } + _endTransfer(); } - _endTransfer(); delay(1); // yield() to avoid WDT on ESP8266 and ESP32 } @@ -492,7 +782,7 @@ void GxEPD2_437c::drawImage(const uint8_t bitmap[], int16_t x, int16_t y, int16_ } void GxEPD2_437c::drawImagePart(const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, - int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) + int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) { writeImagePart(bitmap, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm); refresh(x, y, w, h); @@ -505,7 +795,7 @@ void GxEPD2_437c::drawImage(const uint8_t* black, const uint8_t* color, int16_t } void GxEPD2_437c::drawImagePart(const uint8_t* black, const uint8_t* color, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, - int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) + int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) { writeImagePart(black, color, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm); refresh(x, y, w, h); @@ -519,13 +809,27 @@ void GxEPD2_437c::drawNative(const uint8_t* data1, const uint8_t* data2, int16_t void GxEPD2_437c::refresh(bool partial_update_mode) { - if (partial_update_mode) refresh(0, 0, WIDTH, HEIGHT); - else _Update_Full(); + if (hasPartialUpdate) _setPartialRamArea(0, 0, WIDTH, HEIGHT); + _refresh(partial_update_mode); } void GxEPD2_437c::refresh(int16_t x, int16_t y, int16_t w, int16_t h) { - _Update_Part(); + // intersection with screen + int16_t w1 = x < 0 ? w + x : w; // reduce + int16_t h1 = y < 0 ? h + y : h; // reduce + int16_t x1 = x < 0 ? 0 : x; // limit + int16_t y1 = y < 0 ? 0 : y; // limit + w1 = x1 + w1 < int16_t(WIDTH) ? w1 : int16_t(WIDTH) - x1; // limit + h1 = y1 + h1 < int16_t(HEIGHT) ? h1 : int16_t(HEIGHT) - y1; // limit + if ((w1 <= 0) || (h1 <= 0)) return; + // make x1, w1 multiple of 4 + w1 += x1 % 4; + if (w1 % 4 > 0) w1 += 4 - w1 % 4; + x1 -= x1 % 4; + bool fullscreen = ((x1 == 0) && (y1 == 0) && (w1 == WIDTH) && (h1 == HEIGHT)); + if (hasPartialUpdate) _setPartialRamArea(x1, y1, w1, h1, !fullscreen); + _refresh(!fullscreen); } void GxEPD2_437c::powerOff() @@ -541,14 +845,46 @@ void GxEPD2_437c::hibernate() _writeCommand(0x07); // deep sleep _writeData(0xA5); // control code _hibernating = true; + _init_display_done = false; } } void GxEPD2_437c::setPaged() { - _paged = true; - _Init_Full(); - _writeCommand(0x10); + if (!hasPartialUpdate) + { + _paged = true; + _InitDisplay(); + _writeCommand(0x10); + } +} + +void GxEPD2_437c::_refresh(bool partial_update_mode) +{ + _writeCommand(0x50); // VCOM and Data Interval Setting + _writeData(partial_update_mode ? 0x97 : 0x37); // floating or white + _writeCommand(0x12); // Display Refresh + _writeData(0x00); + delay(1); + _waitWhileBusy("_refresh", full_refresh_time); + //_power_is_on = false; // not needed + _init_display_done = false; // needed +} + +void GxEPD2_437c::_setPartialRamArea(uint16_t x, uint16_t y, uint16_t w, uint16_t h, bool partial_mode) +{ + //Serial.print("_setPartialRamArea("); Serial.print(x); Serial.print(", "); Serial.print(y); Serial.print(", "); + //Serial.print(w); Serial.print(", "); Serial.print(h); Serial.println(")"); + _writeCommand(0x83); + _writeData(x / 256); + _writeData(x % 256); + _writeData((x + w - 1) / 256); + _writeData((x + w - 1) % 256); + _writeData(y / 256); + _writeData(y % 256); + _writeData((y + h - 1) / 256); + _writeData((y + h - 1) % 256); + _writeData(partial_mode ? 0x01 : 0x00); } void GxEPD2_437c::_PowerOn() @@ -570,16 +906,21 @@ void GxEPD2_437c::_PowerOff() _waitWhileBusy("_PowerOff", power_off_time); } _power_is_on = false; - _using_partial_mode = false; } void GxEPD2_437c::_InitDisplay() { - if (_hibernating) + if ((_rst >= 0) && (_hibernating || _initial_write)) { - _reset(); - delay(20); - _reset(); + digitalWrite(_rst, HIGH); + delay(20); // At least 20ms delay + digitalWrite(_rst, LOW); // Module reset + delay(2); // At least 40ms delay, 2ms for WS "clever" reset + digitalWrite(_rst, HIGH); + delay(2); // At least 50ms delay (32ms measured) + _waitWhileBusy("_InitDisplay reset", power_on_time); + _hibernating = false; + _power_is_on = false; } if (_initial_write) delay(20); _writeCommand(0xAA); // CMDH @@ -630,32 +971,6 @@ void GxEPD2_437c::_InitDisplay() _writeData(0x2F); _writeCommand(0x84); // T_VDCS _writeData(0x01); -} - -void GxEPD2_437c::_Init_Full() -{ - _InitDisplay(); - _PowerOn(); -} - -void GxEPD2_437c::_Init_Part() -{ - _InitDisplay(); _PowerOn(); -} - -void GxEPD2_437c::_Update_Full() -{ - _writeCommand(0x12); // Display Refresh - _writeData(0x01); - delay(1); - _waitWhileBusy("_Update_Full", full_refresh_time); -} - -void GxEPD2_437c::_Update_Part() -{ - _writeCommand(0x12); // Display Refresh - _writeData(0x01); - delay(1); - _waitWhileBusy("_Update_Part", partial_refresh_time); + _init_display_done = true; } diff --git a/src/epd4c/GxEPD2_437c.h b/src/epd4c/GxEPD2_437c.h index 229b273d..439b6b55 100644 --- a/src/epd4c/GxEPD2_437c.h +++ b/src/epd4c/GxEPD2_437c.h @@ -25,7 +25,7 @@ class GxEPD2_437c : public GxEPD2_EPD static const uint16_t HEIGHT = 368; static const GxEPD2::Panel panel = GxEPD2::Waveshare437inch4color; static const bool hasColor = true; - static const bool hasPartialUpdate = false; + static const bool hasPartialUpdate = true; static const bool hasFastPartialUpdate = false; static const uint16_t power_on_time = 200; // ms, e.g. 172000us static const uint16_t power_off_time = 150; // ms, e.g. 140000us @@ -63,15 +63,13 @@ class GxEPD2_437c : public GxEPD2_EPD void refresh(int16_t x, int16_t y, int16_t w, int16_t h); // screen refresh from controller memory, partial screen void powerOff(); // turns off generation of panel driving voltages, avoids screen fading over time void hibernate(); // turns powerOff() and sets controller to deep sleep for minimum power use, ONLY if wakeable by RST (rst >= 0) - void setPaged(); // for GxEPD2_154c and GxEPD2_437c paged workaround + void setPaged(); // for GxEPD2_154c paged workaround, also for 4-color for use with hasPartialUpdate = false private: + void _refresh(bool partial_update_mode); + void _setPartialRamArea(uint16_t x, uint16_t y, uint16_t w, uint16_t h, bool partial_mode = true); void _PowerOn(); void _PowerOff(); void _InitDisplay(); - void _Init_Full(); - void _Init_Part(); - void _Update_Full(); - void _Update_Part(); private: bool _paged; }; diff --git a/src/gdeq/GxEPD2_426_GDEQ0426T82.cpp b/src/gdeq/GxEPD2_426_GDEQ0426T82.cpp new file mode 100644 index 00000000..d0af9dc1 --- /dev/null +++ b/src/gdeq/GxEPD2_426_GDEQ0426T82.cpp @@ -0,0 +1,417 @@ +// Display Library for SPI e-paper panels from Dalian Good Display and boards from Waveshare. +// Requires HW SPI and Adafruit_GFX. Caution: the e-paper panels require 3.3V supply AND data lines! +// +// based on Demo Example from Good Display, available here: https://www.good-display.com/comp/xcompanyFile/downloadNew.do?appId=24&fid=1722&id=1158 +// Panel: GDEQ0426T82 : https://www.good-display.com/product/457.html +// Controller : SSD1677 : https://v4.cecdn.yun300.cn/100001_1909185148/SSD1677.pdf +// +// Author: Jean-Marc Zingg +// +// Version: see library.properties +// +// Library: https://github.com/ZinggJM/GxEPD2 + +#include "GxEPD2_426_GDEQ0426T82.h" + +GxEPD2_426_GDEQ0426T82::GxEPD2_426_GDEQ0426T82(int16_t cs, int16_t dc, int16_t rst, int16_t busy) : + GxEPD2_EPD(cs, dc, rst, busy, HIGH, 10000000, WIDTH, HEIGHT, panel, hasColor, hasPartialUpdate, hasFastPartialUpdate) +{ +} + +void GxEPD2_426_GDEQ0426T82::clearScreen(uint8_t value) +{ + writeScreenBuffer(value); + refresh(true); + writeScreenBufferAgain(value); +} + +void GxEPD2_426_GDEQ0426T82::writeScreenBuffer(uint8_t value) +{ + if (!_using_partial_mode) _Init_Part(); + _writeScreenBuffer(0x24, value); // set current + _initial_write = false; // initial full screen buffer clean done +} + +void GxEPD2_426_GDEQ0426T82::writeScreenBufferAgain(uint8_t value) +{ + if (!_using_partial_mode) _Init_Part(); + _writeScreenBuffer(0x24, value); // set current + _writeScreenBuffer(0x26, value); // set previous +} + +void GxEPD2_426_GDEQ0426T82::_writeScreenBuffer(uint8_t command, uint8_t value) +{ + _writeCommand(command); + _startTransfer(); + for (uint32_t i = 0; i < uint32_t(WIDTH) * uint32_t(HEIGHT) / 8; i++) + { + _transfer(value); + } + _endTransfer(); +} + +void GxEPD2_426_GDEQ0426T82::writeImage(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + _writeImage(0x24, bitmap, x, y, w, h, invert, mirror_y, pgm); +} + +void GxEPD2_426_GDEQ0426T82::writeImageForFullRefresh(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + _writeImage(0x24, bitmap, x, y, w, h, invert, mirror_y, pgm); + _writeImage(0x26, bitmap, x, y, w, h, invert, mirror_y, pgm); +} + + +void GxEPD2_426_GDEQ0426T82::writeImageAgain(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + _writeImage(0x24, bitmap, x, y, w, h, invert, mirror_y, pgm); + _writeImage(0x26, bitmap, x, y, w, h, invert, mirror_y, pgm); +} + +void GxEPD2_426_GDEQ0426T82::_writeImage(uint8_t command, const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + if (_initial_write) writeScreenBuffer(); // initial full screen buffer clean + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 + int16_t wb = (w + 7) / 8; // width bytes, bitmaps are padded + x -= x % 8; // byte boundary + w = wb * 8; // byte boundary + int16_t x1 = x < 0 ? 0 : x; // limit + int16_t y1 = y < 0 ? 0 : y; // limit + int16_t w1 = x + w < int16_t(WIDTH) ? w : int16_t(WIDTH) - x; // limit + int16_t h1 = y + h < int16_t(HEIGHT) ? h : int16_t(HEIGHT) - y; // limit + int16_t dx = x1 - x; + int16_t dy = y1 - y; + w1 -= dx; + h1 -= dy; + if ((w1 <= 0) || (h1 <= 0)) return; + if (!_using_partial_mode) _Init_Part(); + _setPartialRamArea(x1, y1, w1, h1); + _writeCommand(command); + _startTransfer(); + for (int16_t i = 0; i < h1; i++) + { + for (int16_t j = 0; j < w1 / 8; j++) + { + uint8_t data; + // use wb, h of bitmap for index! + int32_t idx = mirror_y ? j + dx / 8 + ((h - 1 - int32_t(i + dy))) * wb : j + dx / 8 + int32_t(i + dy) * wb; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + data = pgm_read_byte(&bitmap[idx]); +#else + data = bitmap[idx]; +#endif + } + else + { + data = bitmap[idx]; + } + if (invert) data = ~data; + _transfer(data); + } + } + _endTransfer(); + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 +} + +void GxEPD2_426_GDEQ0426T82::writeImagePart(const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + _writeImagePart(0x24, bitmap, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm); +} + +void GxEPD2_426_GDEQ0426T82::writeImagePartAgain(const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + _writeImagePart(0x24, bitmap, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm); + _writeImagePart(0x26, bitmap, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm); +} + +void GxEPD2_426_GDEQ0426T82::_writeImagePart(uint8_t command, const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + if (_initial_write) writeScreenBuffer(); // initial full screen buffer clean + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 + if ((w_bitmap < 0) || (h_bitmap < 0) || (w < 0) || (h < 0)) return; + if ((x_part < 0) || (x_part >= w_bitmap)) return; + if ((y_part < 0) || (y_part >= h_bitmap)) return; + int16_t wb_bitmap = (w_bitmap + 7) / 8; // width bytes, bitmaps are padded + x_part -= x_part % 8; // byte boundary + w = w_bitmap - x_part < w ? w_bitmap - x_part : w; // limit + h = h_bitmap - y_part < h ? h_bitmap - y_part : h; // limit + x -= x % 8; // byte boundary + w = 8 * ((w + 7) / 8); // byte boundary, bitmaps are padded + int16_t x1 = x < 0 ? 0 : x; // limit + int16_t y1 = y < 0 ? 0 : y; // limit + int16_t w1 = x + w < int16_t(WIDTH) ? w : int16_t(WIDTH) - x; // limit + int16_t h1 = y + h < int16_t(HEIGHT) ? h : int16_t(HEIGHT) - y; // limit + int16_t dx = x1 - x; + int16_t dy = y1 - y; + w1 -= dx; + h1 -= dy; + if ((w1 <= 0) || (h1 <= 0)) return; + if (!_using_partial_mode) _Init_Part(); + _setPartialRamArea(x1, y1, w1, h1); + _writeCommand(command); + _startTransfer(); + for (int16_t i = 0; i < h1; i++) + { + for (int16_t j = 0; j < w1 / 8; j++) + { + uint8_t data; + // use wb_bitmap, h_bitmap of bitmap for index! + int32_t idx = mirror_y ? x_part / 8 + j + dx / 8 + int32_t((h_bitmap - 1 - (y_part + i + dy))) * wb_bitmap : x_part / 8 + j + dx / 8 + int32_t(y_part + i + dy) * wb_bitmap; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + data = pgm_read_byte(&bitmap[idx]); +#else + data = bitmap[idx]; +#endif + } + else + { + data = bitmap[idx]; + } + if (invert) data = ~data; + _transfer(data); + } + } + _endTransfer(); + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 +} + +void GxEPD2_426_GDEQ0426T82::writeImage(const uint8_t* black, const uint8_t* color, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + if (black) + { + writeImage(black, x, y, w, h, invert, mirror_y, pgm); + } +} + +void GxEPD2_426_GDEQ0426T82::writeImagePart(const uint8_t* black, const uint8_t* color, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + if (black) + { + writeImagePart(black, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm); + } +} + +void GxEPD2_426_GDEQ0426T82::writeNative(const uint8_t* data1, const uint8_t* data2, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + if (data1) + { + writeImage(data1, x, y, w, h, invert, mirror_y, pgm); + } +} + +void GxEPD2_426_GDEQ0426T82::drawImage(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + writeImage(bitmap, x, y, w, h, invert, mirror_y, pgm); + refresh(x, y, w, h); + writeImageAgain(bitmap, x, y, w, h, invert, mirror_y, pgm); +} + +void GxEPD2_426_GDEQ0426T82::drawImagePart(const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + writeImagePart(bitmap, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm); + refresh(x, y, w, h); + writeImagePartAgain(bitmap, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm); +} + +void GxEPD2_426_GDEQ0426T82::drawImage(const uint8_t* black, const uint8_t* color, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + if (black) + { + drawImage(black, x, y, w, h, invert, mirror_y, pgm); + } +} + +void GxEPD2_426_GDEQ0426T82::drawImagePart(const uint8_t* black, const uint8_t* color, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + if (black) + { + drawImagePart(black, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm); + } +} + +void GxEPD2_426_GDEQ0426T82::drawNative(const uint8_t* data1, const uint8_t* data2, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + if (data1) + { + drawImage(data1, x, y, w, h, invert, mirror_y, pgm); + } +} + +void GxEPD2_426_GDEQ0426T82::refresh(bool partial_update_mode) +{ + if (partial_update_mode) refresh(0, 0, WIDTH, HEIGHT); + else + { + if (_using_partial_mode) _Init_Full(); + _Update_Full(); + _initial_refresh = false; // initial full update done + } +} + +void GxEPD2_426_GDEQ0426T82::refresh(int16_t x, int16_t y, int16_t w, int16_t h) +{ + if (_initial_refresh) return refresh(false); // initial update needs be full update + // intersection with screen + int16_t w1 = x < 0 ? w + x : w; // reduce + int16_t h1 = y < 0 ? h + y : h; // reduce + int16_t x1 = x < 0 ? 0 : x; // limit + int16_t y1 = y < 0 ? 0 : y; // limit + w1 = x1 + w1 < int16_t(WIDTH) ? w1 : int16_t(WIDTH) - x1; // limit + h1 = y1 + h1 < int16_t(HEIGHT) ? h1 : int16_t(HEIGHT) - y1; // limit + if ((w1 <= 0) || (h1 <= 0)) return; + // make x1, w1 multiple of 8 + w1 += x1 % 8; + if (w1 % 8 > 0) w1 += 8 - w1 % 8; + x1 -= x1 % 8; + if (!_using_partial_mode) _Init_Part(); + _setPartialRamArea(x1, y1, w1, h1); + _Update_Part(); +} + +void GxEPD2_426_GDEQ0426T82::powerOff() +{ + _PowerOff(); +} + +void GxEPD2_426_GDEQ0426T82::hibernate() +{ + _PowerOff(); + if (_rst >= 0) + { + _writeCommand(0x10); // deep sleep mode + _writeData(0x1); // enter deep sleep + _hibernating = true; + } +} + +void GxEPD2_426_GDEQ0426T82::_setPartialRamArea(uint16_t x, uint16_t y, uint16_t w, uint16_t h) +{ + //Serial.print("_setPartialRamArea("); Serial.print(x); Serial.print(", "); Serial.print(y); Serial.print(", "); + //Serial.print(w); Serial.print(", "); Serial.print(h); Serial.println(")"); + // gates are reversed on this display, but controller has no gates reverse scan + // reverse data entry on y + y = HEIGHT - y - h; // reversed partial window + _writeCommand(0x11); // set ram entry mode + _writeData(0x01); // x increase, y decrease : y reversed + _writeCommand(0x44); + _writeData(x % 256); + _writeData(x / 256); + _writeData((x + w - 1) % 256); + _writeData((x + w - 1) / 256); + _writeCommand(0x45); + _writeData((y + h - 1) % 256); + _writeData((y + h - 1) / 256); + _writeData(y % 256); + _writeData(y / 256); + _writeCommand(0x4e); + _writeData(x % 256); + _writeData(x / 256); + _writeCommand(0x4f); + _writeData((y + h - 1) % 256); + _writeData((y + h - 1) / 256); +} + +void GxEPD2_426_GDEQ0426T82::_PowerOn() +{ + if (!_power_is_on) + { + _writeCommand(0x22); + _writeData(0xf8); + _writeCommand(0x20); + _waitWhileBusy("_PowerOn", power_on_time); + } + _power_is_on = true; +} + +void GxEPD2_426_GDEQ0426T82::_PowerOff() +{ + if (_power_is_on) + { + _writeCommand(0x22); + _writeData(0x83); + _writeCommand(0x20); + _waitWhileBusy("_PowerOff", power_off_time); + } + _power_is_on = false; + _using_partial_mode = false; +} + +void GxEPD2_426_GDEQ0426T82::_InitDisplay() +{ + if (_hibernating) _reset(); + delay(10); // 10ms according to specs + //_waitWhileBusy("_InitDisplay reset", power_on_time); + _writeCommand(0x12); //SWRESET + delay(10); // 10ms according to specs + _writeCommand(0x18); + _writeData(0x80); + _writeCommand(0x0C); + _writeData(0xAE); + _writeData(0xC7); + _writeData(0xC3); + _writeData(0xC0); + _writeData(0x80); + _writeCommand(0x01); // Driver output control + _writeData((HEIGHT - 1) % 256); // gates A0..A7 + _writeData((HEIGHT - 1) / 256); // gates A8, A9 + _writeData(0x02); // SM (interlaced) ?? + _writeCommand(0x3C); // BorderWavefrom + _writeData(0x01); + _setPartialRamArea(0, 0, WIDTH, HEIGHT); +} + +void GxEPD2_426_GDEQ0426T82::_Init_Full() +{ + _InitDisplay(); + _PowerOn(); + _using_partial_mode = false; +} + +void GxEPD2_426_GDEQ0426T82::_Init_Part() +{ + _InitDisplay(); + _PowerOn(); + _using_partial_mode = true; +} + +void GxEPD2_426_GDEQ0426T82::_Update_Full() +{ + _writeCommand(0x21); // Display Update Controll + _writeData(0x40); // bypass RED as 0 + _writeData(0x00); // single chip application + if (useFastFullUpdate) + { + _writeCommand(0x1A); // Write to temperature register + _writeData(0x5A); + _writeCommand(0x22); + _writeData(0xd4); + } + else + { + _writeCommand(0x22); + _writeData(0xf4); + } + _writeCommand(0x20); + _waitWhileBusy("_Update_Full", full_refresh_time); +} + +void GxEPD2_426_GDEQ0426T82::_Update_Part() +{ + _writeCommand(0x21); // Display Update Controll + _writeData(0x00); // RED normal + _writeData(0x00); // single chip application + _writeCommand(0x22); + _writeData(0xfc); + _writeCommand(0x20); + _waitWhileBusy("_Update_Part", partial_refresh_time); +} diff --git a/src/gdeq/GxEPD2_426_GDEQ0426T82.h b/src/gdeq/GxEPD2_426_GDEQ0426T82.h new file mode 100644 index 00000000..7761f9ef --- /dev/null +++ b/src/gdeq/GxEPD2_426_GDEQ0426T82.h @@ -0,0 +1,84 @@ +// Display Library for SPI e-paper panels from Dalian Good Display and boards from Waveshare. +// Requires HW SPI and Adafruit_GFX. Caution: the e-paper panels require 3.3V supply AND data lines! +// +// based on Demo Example from Good Display, available here: https://www.good-display.com/comp/xcompanyFile/downloadNew.do?appId=24&fid=1722&id=1158 +// Panel: GDEQ0426T82 : https://www.good-display.com/product/457.html +// Controller : SSD1677 : https://v4.cecdn.yun300.cn/100001_1909185148/SSD1677.pdf +// +// Author: Jean-Marc Zingg +// +// Version: see library.properties +// +// Library: https://github.com/ZinggJM/GxEPD2 + +#ifndef _GxEPD2_426_GDEQ0426T82_H_ +#define _GxEPD2_426_GDEQ0426T82_H_ + +#include "../GxEPD2_EPD.h" + +class GxEPD2_426_GDEQ0426T82 : public GxEPD2_EPD +{ + public: + // attributes + static const uint16_t WIDTH = 800; // source, max 960 + static const uint16_t WIDTH_VISIBLE = WIDTH; + static const uint16_t HEIGHT = 480; // gates, max 680 + static const GxEPD2::Panel panel = GxEPD2::GDEQ0426T82; + static const bool hasColor = false; + static const bool hasPartialUpdate = true; + static const bool hasFastPartialUpdate = true; + static const bool useFastFullUpdate = true; // set false for extended (low) temperature range + static const uint16_t power_on_time = 100; // ms, e.g. 83873us + static const uint16_t power_off_time = 200; // ms, e.g. 138810us + static const uint16_t full_refresh_time = 1600; // ms, e.g. 1567341us + static const uint16_t partial_refresh_time = 600; // ms, e.g. 499962us + // constructor + GxEPD2_426_GDEQ0426T82(int16_t cs, int16_t dc, int16_t rst, int16_t busy); + // methods (virtual) + // Support for Bitmaps (Sprites) to Controller Buffer and to Screen + void clearScreen(uint8_t value = 0xFF); // init controller memory and screen (default white) + void writeScreenBuffer(uint8_t value = 0xFF); // init controller memory (default white) + void writeScreenBufferAgain(uint8_t value = 0xFF); // init previous buffer controller memory (default white) + // write to controller memory, without screen refresh; x and w should be multiple of 8 + void writeImage(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void writeImageForFullRefresh(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void writeImagePart(const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void writeImage(const uint8_t* black, const uint8_t* color, int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void writeImagePart(const uint8_t* black, const uint8_t* color, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + // for differential update: set current and previous buffers equal (for fast partial update to work correctly) + void writeImageAgain(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void writeImagePartAgain(const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + // write sprite of native data to controller memory, without screen refresh; x and w should be multiple of 8 + void writeNative(const uint8_t* data1, const uint8_t* data2, int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + // write to controller memory, with screen refresh; x and w should be multiple of 8 + void drawImage(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void drawImagePart(const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void drawImage(const uint8_t* black, const uint8_t* color, int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void drawImagePart(const uint8_t* black, const uint8_t* color, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + // write sprite of native data to controller memory, with screen refresh; x and w should be multiple of 8 + void drawNative(const uint8_t* data1, const uint8_t* data2, int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void refresh(bool partial_update_mode = false); // screen refresh from controller memory to full screen + void refresh(int16_t x, int16_t y, int16_t w, int16_t h); // screen refresh from controller memory, partial screen + void powerOff(); // turns off generation of panel driving voltages, avoids screen fading over time + void hibernate(); // turns powerOff() and sets controller to deep sleep for minimum power use, ONLY if wakeable by RST (rst >= 0) + private: + void _writeScreenBuffer(uint8_t command, uint8_t value); + void _writeImage(uint8_t command, const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void _writeImagePart(uint8_t command, const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void _setPartialRamArea(uint16_t x, uint16_t y, uint16_t w, uint16_t h); + void _PowerOn(); + void _PowerOff(); + void _InitDisplay(); + void _Init_Full(); + void _Init_Part(); + void _Update_Full(); + void _Update_Part(); +}; + +#endif diff --git a/src/gdey/GxEPD2_420_GDEY042T91.cpp b/src/gdey/GxEPD2_420_GDEY042T81.cpp similarity index 85% rename from src/gdey/GxEPD2_420_GDEY042T91.cpp rename to src/gdey/GxEPD2_420_GDEY042T81.cpp index 3bbcaea8..5c6aa565 100644 --- a/src/gdey/GxEPD2_420_GDEY042T91.cpp +++ b/src/gdey/GxEPD2_420_GDEY042T81.cpp @@ -2,7 +2,7 @@ // Requires HW SPI and Adafruit_GFX. Caution: the e-paper panels require 3.3V supply AND data lines! // // based on Demo Example from Good Display, available here: https://www.good-display.com/product/386.html -// Panel: GDEY042T91 : https://www.good-display.com/product/386.html +// Panel: GDEY042T81 : https://www.good-display.com/product/386.html // Controller : SSD1683 : https://v4.cecdn.yun300.cn/100001_1909185148/SSD1683.PDF // // Author: Jean-Marc Zingg @@ -11,35 +11,35 @@ // // Library: https://github.com/ZinggJM/GxEPD2 -#include "GxEPD2_420_GDEY042T91.h" +#include "GxEPD2_420_GDEY042T81.h" -GxEPD2_420_GDEY042T91::GxEPD2_420_GDEY042T91(int16_t cs, int16_t dc, int16_t rst, int16_t busy) : +GxEPD2_420_GDEY042T81::GxEPD2_420_GDEY042T81(int16_t cs, int16_t dc, int16_t rst, int16_t busy) : GxEPD2_EPD(cs, dc, rst, busy, HIGH, 10000000, WIDTH, HEIGHT, panel, hasColor, hasPartialUpdate, hasFastPartialUpdate) { } -void GxEPD2_420_GDEY042T91::clearScreen(uint8_t value) +void GxEPD2_420_GDEY042T81::clearScreen(uint8_t value) { writeScreenBuffer(value); refresh(true); writeScreenBufferAgain(value); } -void GxEPD2_420_GDEY042T91::writeScreenBuffer(uint8_t value) +void GxEPD2_420_GDEY042T81::writeScreenBuffer(uint8_t value) { if (!_using_partial_mode) _Init_Part(); _writeScreenBuffer(0x24, value); // set current _initial_write = false; // initial full screen buffer clean done } -void GxEPD2_420_GDEY042T91::writeScreenBufferAgain(uint8_t value) +void GxEPD2_420_GDEY042T81::writeScreenBufferAgain(uint8_t value) { if (!_using_partial_mode) _Init_Part(); _writeScreenBuffer(0x24, value); // set current _writeScreenBuffer(0x26, value); // set previous } -void GxEPD2_420_GDEY042T91::_writeScreenBuffer(uint8_t command, uint8_t value) +void GxEPD2_420_GDEY042T81::_writeScreenBuffer(uint8_t command, uint8_t value) { _writeCommand(command); _startTransfer(); @@ -50,25 +50,25 @@ void GxEPD2_420_GDEY042T91::_writeScreenBuffer(uint8_t command, uint8_t value) _endTransfer(); } -void GxEPD2_420_GDEY042T91::writeImage(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +void GxEPD2_420_GDEY042T81::writeImage(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) { _writeImage(0x24, bitmap, x, y, w, h, invert, mirror_y, pgm); } -void GxEPD2_420_GDEY042T91::writeImageForFullRefresh(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +void GxEPD2_420_GDEY042T81::writeImageForFullRefresh(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) { _writeImage(0x24, bitmap, x, y, w, h, invert, mirror_y, pgm); _writeImage(0x26, bitmap, x, y, w, h, invert, mirror_y, pgm); } -void GxEPD2_420_GDEY042T91::writeImageAgain(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +void GxEPD2_420_GDEY042T81::writeImageAgain(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) { _writeImage(0x24, bitmap, x, y, w, h, invert, mirror_y, pgm); _writeImage(0x26, bitmap, x, y, w, h, invert, mirror_y, pgm); } -void GxEPD2_420_GDEY042T91::_writeImage(uint8_t command, const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +void GxEPD2_420_GDEY042T81::_writeImage(uint8_t command, const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) { if (_initial_write) writeScreenBuffer(); // initial full screen buffer clean delay(1); // yield() to avoid WDT on ESP8266 and ESP32 @@ -115,20 +115,20 @@ void GxEPD2_420_GDEY042T91::_writeImage(uint8_t command, const uint8_t bitmap[], delay(1); // yield() to avoid WDT on ESP8266 and ESP32 } -void GxEPD2_420_GDEY042T91::writeImagePart(const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, +void GxEPD2_420_GDEY042T81::writeImagePart(const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) { _writeImagePart(0x24, bitmap, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm); } -void GxEPD2_420_GDEY042T91::writeImagePartAgain(const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, +void GxEPD2_420_GDEY042T81::writeImagePartAgain(const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) { _writeImagePart(0x24, bitmap, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm); _writeImagePart(0x26, bitmap, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm); } -void GxEPD2_420_GDEY042T91::_writeImagePart(uint8_t command, const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, +void GxEPD2_420_GDEY042T81::_writeImagePart(uint8_t command, const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) { if (_initial_write) writeScreenBuffer(); // initial full screen buffer clean @@ -182,7 +182,7 @@ void GxEPD2_420_GDEY042T91::_writeImagePart(uint8_t command, const uint8_t bitma delay(1); // yield() to avoid WDT on ESP8266 and ESP32 } -void GxEPD2_420_GDEY042T91::writeImage(const uint8_t* black, const uint8_t* color, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +void GxEPD2_420_GDEY042T81::writeImage(const uint8_t* black, const uint8_t* color, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) { if (black) { @@ -190,7 +190,7 @@ void GxEPD2_420_GDEY042T91::writeImage(const uint8_t* black, const uint8_t* colo } } -void GxEPD2_420_GDEY042T91::writeImagePart(const uint8_t* black, const uint8_t* color, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, +void GxEPD2_420_GDEY042T81::writeImagePart(const uint8_t* black, const uint8_t* color, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) { if (black) @@ -199,7 +199,7 @@ void GxEPD2_420_GDEY042T91::writeImagePart(const uint8_t* black, const uint8_t* } } -void GxEPD2_420_GDEY042T91::writeNative(const uint8_t* data1, const uint8_t* data2, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +void GxEPD2_420_GDEY042T81::writeNative(const uint8_t* data1, const uint8_t* data2, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) { if (data1) { @@ -207,14 +207,14 @@ void GxEPD2_420_GDEY042T91::writeNative(const uint8_t* data1, const uint8_t* dat } } -void GxEPD2_420_GDEY042T91::drawImage(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +void GxEPD2_420_GDEY042T81::drawImage(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) { writeImage(bitmap, x, y, w, h, invert, mirror_y, pgm); refresh(x, y, w, h); writeImageAgain(bitmap, x, y, w, h, invert, mirror_y, pgm); } -void GxEPD2_420_GDEY042T91::drawImagePart(const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, +void GxEPD2_420_GDEY042T81::drawImagePart(const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) { writeImagePart(bitmap, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm); @@ -222,7 +222,7 @@ void GxEPD2_420_GDEY042T91::drawImagePart(const uint8_t bitmap[], int16_t x_part writeImagePartAgain(bitmap, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm); } -void GxEPD2_420_GDEY042T91::drawImage(const uint8_t* black, const uint8_t* color, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +void GxEPD2_420_GDEY042T81::drawImage(const uint8_t* black, const uint8_t* color, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) { if (black) { @@ -230,7 +230,7 @@ void GxEPD2_420_GDEY042T91::drawImage(const uint8_t* black, const uint8_t* color } } -void GxEPD2_420_GDEY042T91::drawImagePart(const uint8_t* black, const uint8_t* color, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, +void GxEPD2_420_GDEY042T81::drawImagePart(const uint8_t* black, const uint8_t* color, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) { if (black) @@ -239,7 +239,7 @@ void GxEPD2_420_GDEY042T91::drawImagePart(const uint8_t* black, const uint8_t* c } } -void GxEPD2_420_GDEY042T91::drawNative(const uint8_t* data1, const uint8_t* data2, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +void GxEPD2_420_GDEY042T81::drawNative(const uint8_t* data1, const uint8_t* data2, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) { if (data1) { @@ -247,7 +247,7 @@ void GxEPD2_420_GDEY042T91::drawNative(const uint8_t* data1, const uint8_t* data } } -void GxEPD2_420_GDEY042T91::refresh(bool partial_update_mode) +void GxEPD2_420_GDEY042T81::refresh(bool partial_update_mode) { if (partial_update_mode) refresh(0, 0, WIDTH, HEIGHT); else @@ -258,7 +258,7 @@ void GxEPD2_420_GDEY042T91::refresh(bool partial_update_mode) } } -void GxEPD2_420_GDEY042T91::refresh(int16_t x, int16_t y, int16_t w, int16_t h) +void GxEPD2_420_GDEY042T81::refresh(int16_t x, int16_t y, int16_t w, int16_t h) { if (_initial_refresh) return refresh(false); // initial update needs be full update // intersection with screen @@ -278,12 +278,12 @@ void GxEPD2_420_GDEY042T91::refresh(int16_t x, int16_t y, int16_t w, int16_t h) _Update_Part(); } -void GxEPD2_420_GDEY042T91::powerOff() +void GxEPD2_420_GDEY042T81::powerOff() { _PowerOff(); } -void GxEPD2_420_GDEY042T91::hibernate() +void GxEPD2_420_GDEY042T81::hibernate() { _PowerOff(); if (_rst >= 0) @@ -294,7 +294,7 @@ void GxEPD2_420_GDEY042T91::hibernate() } } -void GxEPD2_420_GDEY042T91::_setPartialRamArea(uint16_t x, uint16_t y, uint16_t w, uint16_t h) +void GxEPD2_420_GDEY042T81::_setPartialRamArea(uint16_t x, uint16_t y, uint16_t w, uint16_t h) { _writeCommand(0x11); // set ram entry mode _writeData(0x03); // x increase, y increase : normal mode @@ -313,7 +313,7 @@ void GxEPD2_420_GDEY042T91::_setPartialRamArea(uint16_t x, uint16_t y, uint16_t _writeData(y / 256); } -void GxEPD2_420_GDEY042T91::_PowerOn() +void GxEPD2_420_GDEY042T81::_PowerOn() { if (!_power_is_on) { @@ -325,7 +325,7 @@ void GxEPD2_420_GDEY042T91::_PowerOn() _power_is_on = true; } -void GxEPD2_420_GDEY042T91::_PowerOff() +void GxEPD2_420_GDEY042T81::_PowerOff() { if (_power_is_on) { @@ -338,7 +338,7 @@ void GxEPD2_420_GDEY042T91::_PowerOff() _using_partial_mode = false; } -void GxEPD2_420_GDEY042T91::_InitDisplay() +void GxEPD2_420_GDEY042T81::_InitDisplay() { if (_hibernating) _reset(); delay(10); // 10ms according to specs @@ -355,21 +355,21 @@ void GxEPD2_420_GDEY042T91::_InitDisplay() _setPartialRamArea(0, 0, WIDTH, HEIGHT); } -void GxEPD2_420_GDEY042T91::_Init_Full() +void GxEPD2_420_GDEY042T81::_Init_Full() { _InitDisplay(); _PowerOn(); _using_partial_mode = false; } -void GxEPD2_420_GDEY042T91::_Init_Part() +void GxEPD2_420_GDEY042T81::_Init_Part() { _InitDisplay(); _PowerOn(); _using_partial_mode = true; } -void GxEPD2_420_GDEY042T91::_Update_Full() +void GxEPD2_420_GDEY042T81::_Update_Full() { _writeCommand(0x21); // Display Update Controll _writeData(0x40); // bypass RED as 0 @@ -390,7 +390,7 @@ void GxEPD2_420_GDEY042T91::_Update_Full() _waitWhileBusy("_Update_Full", full_refresh_time); } -void GxEPD2_420_GDEY042T91::_Update_Part() +void GxEPD2_420_GDEY042T81::_Update_Part() { _writeCommand(0x21); // Display Update Controll _writeData(0x00); // RED normal diff --git a/src/gdey/GxEPD2_420_GDEY042T91.h b/src/gdey/GxEPD2_420_GDEY042T81.h similarity index 95% rename from src/gdey/GxEPD2_420_GDEY042T91.h rename to src/gdey/GxEPD2_420_GDEY042T81.h index 6bec171d..802d1fb4 100644 --- a/src/gdey/GxEPD2_420_GDEY042T91.h +++ b/src/gdey/GxEPD2_420_GDEY042T81.h @@ -2,7 +2,7 @@ // Requires HW SPI and Adafruit_GFX. Caution: the e-paper panels require 3.3V supply AND data lines! // // based on Demo Example from Good Display, available here: https://www.good-display.com/product/386.html -// Panel: GDEY042T91 : https://www.good-display.com/product/386.html +// Panel: GDEY042T81 : https://www.good-display.com/product/386.html // Controller : SSD1683 : https://v4.cecdn.yun300.cn/100001_1909185148/SSD1683.PDF // // Author: Jean-Marc Zingg @@ -11,19 +11,19 @@ // // Library: https://github.com/ZinggJM/GxEPD2 -#ifndef _GxEPD2_420_GDEY042T91_H_ -#define _GxEPD2_420_GDEY042T91_H_ +#ifndef _GxEPD2_420_GDEY042T81_H_ +#define _GxEPD2_420_GDEY042T81_H_ #include "../GxEPD2_EPD.h" -class GxEPD2_420_GDEY042T91 : public GxEPD2_EPD +class GxEPD2_420_GDEY042T81 : public GxEPD2_EPD { public: // attributes static const uint16_t WIDTH = 400; static const uint16_t WIDTH_VISIBLE = WIDTH; static const uint16_t HEIGHT = 300; - static const GxEPD2::Panel panel = GxEPD2::GDEY042T91; + static const GxEPD2::Panel panel = GxEPD2::GDEY042T81; static const bool hasColor = false; static const bool hasPartialUpdate = true; static const bool hasFastPartialUpdate = true; @@ -33,7 +33,7 @@ class GxEPD2_420_GDEY042T91 : public GxEPD2_EPD static const uint16_t full_refresh_time = 1200; // ms, e.g. 1140000us static const uint16_t partial_refresh_time = 400; // ms, e.g. 358000us // constructor - GxEPD2_420_GDEY042T91(int16_t cs, int16_t dc, int16_t rst, int16_t busy); + GxEPD2_420_GDEY042T81(int16_t cs, int16_t dc, int16_t rst, int16_t busy); // methods (virtual) // Support for Bitmaps (Sprites) to Controller Buffer and to Screen void clearScreen(uint8_t value = 0xFF); // init controller memory and screen (default white)